/*
Begin validation dispatching mechanism
*/
function dispatcher(validationFunc) {   
   this.doValidate = validationFunc
}
var gFrame,gField;
var dispatchLookup = new Array(20);
dispatchLookup["isNotEmpty"] = new dispatcher(isNotEmpty)
dispatchLookup["isPositiveInteger"] = new dispatcher(isPositiveInteger)
dispatchLookup["isPositiveNumber"] = new dispatcher(isPositiveNumber)
dispatchLookup["isPhone"] = new dispatcher(isPhone)
dispatchLookup["isDateFormat"] = new dispatcher(isDateFormat)
dispatchLookup["isInteger"] = new dispatcher(isInteger)
dispatchLookup["isNumber"] = new dispatcher(isNumber)
dispatchLookup["isEmail"] = new dispatcher(isEmail)
dispatchLookup["isTimeFormat"] = new dispatcher(isTimeFormat)
/*dispatchLookup["isTimeFormat"] = new dispatcher(isTimeFormat)
dispatchLookup["isTimeFormat"] = new dispatcher(isTimeFormat)
dispatchLookup["isTimeFormat"] = new dispatcher(isTimeFormat)
alert("kot");*/
/*dispatchLookup["isZip"] = new dispatcher(isZip)
dispatchLookup["isExpandedZip"] = new dispatcher(isExpandedZip)
dispatchLookup["isPhone"] = new dispatcher(isPhone)
dispatchLookup["isConfirmed"] = new dispatcher(isConfirmed)
dispatchLookup["isNY"] = new dispatcher(isNY)
dispatchLookup["isNum16"] = new dispatcher(isNum16)
dispatchLookup["isM90_M20Date"] = new dispatcher(isM90_M20Date)
dispatchLookup["isM70_0Date"] = new dispatcher(isM70_0Date)
dispatchLookup["isM5_P10Date"] = new dispatcher(isM5_P10Date)*/

// main validation function called by form event handlers
function validate(frame, field, method) {
 gFrame = frame
 gField = gFrame.document.forms[0].elements[field.name]
 //gField = window.frames[frame.name].document.forms[0].elements[field.name]
 //gField = document.forms[0].elements[field.name]
 var args = validate.arguments
 for (i = 2; i < args.length; i++) {
   //dispatchLookup[args[i]].doValidate.arguments[0]="10/10/2005";
   if (!dispatchLookup[args[i]].doValidate()) {
     return false
   }
 }
 return true
}
function isNotEmpty() {
  if (gField!=null){
    inputStr=gField.value;
    return (!validEmpty(inputStr))
  }
}
function isPositiveNumber() {
  return true;
}
function isPhone() {
  return true;
}
function isPositiveInteger() {
  if (gField!=null){
    inputVal=gField.value;
    return validPosInteger(inputVal)
  }
}
function isInteger() {
  if (gField!=null){
    inputVal=gField.value;
    return validInteger(inputVal)
  }
}
function isDateFormat() { 
  if (gField!=null){
      return validDate(gField);
  }
}
function isTimeFormat() { 
  if (gField!=null){
      inputStr=gField.value;
      return validTime(inputStr);
  }
}
function isNumber() {
  if (gField!=null){
    inputVal=gField.value;
    return validNumber(inputVal)
  }
}
function isEmail() {
  
  if (gField!=null){
    inputStr=gField.value;	
    return validEmail(inputStr);
  }
}
// general purpose function to see if any entry of a picklist is selected
function isSelected(fld)
{
	return (fld.options.selectedIndex != 0);
}
// general purpose function to see if radio button withing a group is checked
function isaRadioSelected(fld)
{
	var selected = 0;
	for (var i=0; i<fld.length; i++)
		selected |= fld[i].checked;
	return selected;	
}
// general purpose function to see if radio button or a checkbox is checked
function isChecked(formName, fld)
{
	var field = eval("document.forms['"+formName+"']").elements[fld];

	if (field.length > 0)
	{
		for (i=0; i<field.length; i++)
			if (field[i].checked) return true;

		return false;
	}
	else
		 return field.checked;
}
// general purpose function to see if an input value has been
// entered at all
function validEmpty(inputStr) {    
  if (inputStr == null || inputStr == "") {
    return true
  }
  return false
}

// general purpose function to see if a suspected numeric input
// is a positive integer
function validPosInteger(inputVal) {
	//alert (inputVal);
  inputStr = inputVal.toString()
  for (var i = 0; i < inputStr.length; i++) {
   var oneChar = inputStr.charAt(i)
   if (oneChar < "0" || oneChar > "9") {
     return false
   }
 }
 return true
}

// general purpose function to see if a suspected numeric input
// is a positive or negative integer
function validInteger(inputVal) {
 inputStr = inputVal.toString()
 for (var i = 0; i < inputStr.length; i++) {
  var oneChar = inputStr.charAt(i)
  if (i == 0 && oneChar == "-") {
   continue
  }
  if (oneChar < "0" || oneChar > "9") {
   return false
  }
 }
 return true
}

// general purpose function to see if a suspected numeric input
// is a positive or negative number
function validNumber(inputVal) {
 oneDecimal = false
 inputStr = inputVal.toString()
 for (var i = 0; i < inputStr.length; i++) {
  var oneChar = inputStr.charAt(i)
  if (i == 0 && oneChar == "-") {
   continue
  }
  if (oneChar == "." && !oneDecimal) {
   oneDecimal = true
   continue
  }
  if (oneChar < "0" || oneChar > "9") {
   return false
  }
 }
 return true
}

// general purpose function to see if a suspected string input
// has a valid email address format
function validEmail(inputStr) {
 //alert("isemail"+inputStr);
 oneAtSign = false;
 oneDot = false
 for (var i = 0; i < inputStr.length; i++) {
  var oneChar = inputStr.charAt(i)
  
  if (i!=0 && oneChar == "@" && !oneAtSign) {
    // sigurohemi  qe ka vetem nje '@' dhe jo si karakter te pare
   oneAtSign = true
   continue
  }
    if (oneAtSign){
      if (oneChar=="."){
	    // sigurohemi qe ka vetem nje '.' pas '@'
	    if ((i +1)>= inputStr.length){
		  // kjo '.' nuk duhet te jete karakteri i fundit
		  return false;
		}
		else{
	      oneDot=true;		
		  continue;
		}
	  }
  }
  if (oneChar == "@"){
    // nqs gjendet nje '@' i dyte, stringu nuk eshte adrese email-i e vlefshme
    return false;
  }
  if (oneDot && oneChar == "."){
    // nqs gjendet nje '.' e dyte pas '@', stringu nuk eshte adrese email-i e vlefshme
    return false;
  }	
 }
 if (!(oneAtSign && oneDot)){
     // sigurohemi  qe ka patjeter vetem nje '@' dhe vetem nje '.' pas saj
    return false;
 }
 return true
}

// general purpose function to see if a suspected numeric input
// is a positive or negative integer

function validDate(fld) {
 var testMo, testDay, testYr, inpMo, inpDay, inpYr, msg
 var inp = fld.value
 status = ""
 // attempt to create date object from input data
 var testDate = new Date(inp)
 // extract pieces from date object
 testMo = testDate.getMonth() + 1
 testDay = testDate.getDate()
 testYr = testDate.getFullYear()
 // extract components of input data
 inpMo = parseInt(inp.substring(0, inp.indexOf("/")), 10)
 inpDay = parseInt(inp.substring((inp.indexOf("/") + 1),
 inp.lastIndexOf("/")), 10)
 inpYr = parseInt(inp.substring((inp.lastIndexOf("/") + 1), inp.length), 10)
 // make sure parseInt() succeeded on input components
 if (isNaN(inpMo) || isNaN(inpDay) || isNaN(inpYr)) {
   msg = "There is some problem with your date entry."
 }
 // make sure conversion to date object succeeded
 if (isNaN(testMo) || isNaN(testDay) || isNaN(testYr)) {
  msg = "Couldn't convert your entry to a valid date. Try again."
 }
 // make sure values match
 if (testMo != inpMo || testDay != inpDay || testYr != inpYr) {
   msg = "Check the range of your date value."
 }
 if (msg) {
 // there's a message, so something failed
 //alert(msg);
 // work around IE timing problem with alert by
 // invoking a focus/select function through setTimeout();
 // must pass along reference of fld (as string)
 setTimeout("doSelection(gFrame.document.forms['" +
 fld.form.name + "'].elements['" + fld.name + "'])", 0);
 return false
 } else {
      // everything's OK; if browser supports new date method,
      // show just date string in status bar
      status = (testDate.toLocaleDateString) ? testDate.toLocaleDateString() :
      "Date OK"
       return true
    }
}
function validDate2(fld) {
 var testMo, testDay, testYr, inpMo, inpDay, inpYr, msg
 var inp = fld
 status = ""
 //alert(fld);
 // attempt to create date object from input data
 var testDate = new Date(inp)
 // extract pieces from date object
 testMo = testDate.getMonth() + 1
 testDay = testDate.getDate()
 testYr = testDate.getFullYear()
 // extract components of input data
 inpMo = parseInt(inp.substring(0, inp.indexOf("/")), 10)
 inpDay = parseInt(inp.substring((inp.indexOf("/") + 1),
 inp.lastIndexOf("/")), 10)
 inpYr = parseInt(inp.substring((inp.lastIndexOf("/") + 1), inp.length), 10)
 // make sure parseInt() succeeded on input components
 if (isNaN(inpMo) || isNaN(inpDay) || isNaN(inpYr)) {
   msg = "There is some problem with your date entry."
 }
 // make sure conversion to date object succeeded
 if (isNaN(testMo) || isNaN(testDay) || isNaN(testYr)) {
  msg = "Couldn't convert your entry to a valid date. Try again."
 }
 // make sure values match
 if (testMo != inpMo || testDay != inpDay || testYr != inpYr) {
   msg = "Check the range of your date value."
 }
 if (msg) {
 // there's a message, so something failed
 //alert(msg);
 return false
 } else {
      // everything's OK; if browser supports new date method,
      // show just date string in status bar
      status = (testDate.toLocaleDateString) ? testDate.toLocaleDateString() :
      "Date OK"
       return true
    }
}
function validTime(inpStr){
 if (inpStr=="") return false;
 var today=new Date();
 var oneDay=new Date(today.toDateString()+" "+inpStr);
 var hours=oneDay.getHours();
 var minutes=oneDay.getMinutes();
 var seconds=oneDay.getSeconds();
 var timeStr="";
 
 if (!isNaN(hours)){ 
    timeStr+=('00'+hours).substr(('00'+hours).length-2)
	timeStr+=':'+('00'+minutes).substr(('00'+minutes).length-2)
	timeStr+=':'+('00'+seconds).substr(('00'+seconds).length-2)
 }
 else return false
 return timeStr
}
function doSelection(fld) {
  fld.focus()
  fld.select()
}
