/*  -------------------------------------------------------------------------	                    JavaScript Form Validator                                 Version 2.0.2	Copyright 2003 JavaScript-coder.com. All rights reserved.	You use this script in your Web pages, provided these opening credit    lines are kept intact.	The Form validation script is distributed free from JavaScript-Coder.com	You may please add a link to JavaScript-Coder.com, 	making it easy for others to find this script.	Checkout the Give a link and Get a link page:	http://www.javascript-coder.com/links/how-to-link.php    You may not reprint or redistribute this code without permission from     JavaScript-Coder.com.		JavaScript Coder	It precisely codes what you imagine!	Grab your copy here:		http://www.javascript-coder.com/    -------------------------------------------------------------------------  */var submitcount = 0;function Validator(frmname){  this.formobj=document.forms[frmname];	if(!this.formobj)	{	  alert("BUG: couldnot get Form object "+frmname);		return;	}	if(this.formobj.onsubmit)	{	 this.formobj.old_onsubmit = this.formobj.onsubmit;	 this.formobj.onsubmit=null;	}	else	{	 this.formobj.old_onsubmit = null;	}	this.formobj.onsubmit=form_submit_handler;	this.addValidation = add_validation;	this.setAddnlValidationFunction=set_addnl_vfunction;	this.clearAllValidations = clear_all_validations;}function set_addnl_vfunction(functionname){  this.formobj.addnlvalidation = functionname;}function clear_all_validations(){	for(var itr=0;itr < this.formobj.elements.length;itr++)	{		this.formobj.elements[itr].validationset = null;	}}function form_submit_handler(){	for(var itr=0;itr < this.elements.length;itr++)	{		if(this.elements[itr].validationset &&	   !this.elements[itr].validationset.validate())		{		  return false;		}	}	if(this.addnlvalidation)	{	  str =" var ret = "+this.addnlvalidation+"()";	  eval(str);	if (ret == false) {		return false;	} else if (ret == true) {		if (submitcount == 1) {			alert('This form has already been submitted. Please be patient.');			return false;		} else {			submitcount = 0;			return true;		}			}    //if(!ret) return ret;	}	if (submitcount == 1) {		alert('This form has already been submitted. Please be patient.');		return false;	} else {		submitcount = 0;		return true;	}}function add_validation(itemname,descriptor,errstr){  if(!this.formobj)	{	  alert("BUG: the form object is not set properly");		return;	}//if	var itemobj = this.formobj[itemname];  if(!itemobj)	{	  alert("BUG: Couldnot get the input object named: "+itemname);		return;	}	if(!itemobj.validationset)	{	  itemobj.validationset = new ValidationSet(itemobj);
	}  itemobj.validationset.add(descriptor,errstr);}function ValidationDesc(inputitem,desc,error){  this.desc=desc;	this.error=error;	this.itemobj = inputitem;	this.validate=vdesc_validate;}function vdesc_validate(){ if(!V2validateData(this.desc,this.itemobj,this.error)) {    this.itemobj.focus();	return false; } return true;}function ValidationSet(inputitem){    this.vSet=new Array();	this.add= add_validationdesc;	this.validate= vset_validate;	this.itemobj = inputitem;}function add_validationdesc(desc,error){  this.vSet[this.vSet.length]= 	  new ValidationDesc(this.itemobj,desc,error);}function vset_validate(){   for(var itr=0;itr<this.vSet.length;itr++)	 {	   if(!this.vSet[itr].validate())		 {		   return false;		 }	 }	 return true;}function validateEmailv2(email){// a very simple email validation checking. // you can add more complex email checking if it helps     if(email.length <= 0)	{	  return true;	}    var splitted = email.match("^(.+)@(.+)$");    if(splitted == null) return false;    if(splitted[1] != null )    {      var regexp_user=/^\"?[\w-_\.]*\"?$/;      if(splitted[1].match(regexp_user) == null) return false;    }    if(splitted[2] != null)    {      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;      if(splitted[2].match(regexp_domain) == null)       {	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;	    if(splitted[2].match(regexp_ip) == null) return false;      }// if      return true;    }return false;}function V2validateData(strValidateStr,objValue,strError) {     var epos = strValidateStr.search("=");     var  command  = "";     var  cmdvalue = "";     if(epos >= 0)     {      command  = strValidateStr.substring(0,epos);      cmdvalue = strValidateStr.substr(epos+1);     }     else     {      command = strValidateStr;     }     switch(command)     {         case "req":         case "required":          {            if(eval(objValue.value.length) == 0)            {               if(!strError || strError.length ==0)               {                 strError = objValue.name + " : Required Field";               }//if               alert(strError); //			  document.getElementById(objValue.name+'_e').innerHTML = strError;              return false;            }//if            break;                      }//case required         case "maxlength":         case "maxlen":           {              if(eval(objValue.value.length) >  eval(cmdvalue))              {                if(!strError || strError.length ==0)                {                  strError = objValue.name + " : "+cmdvalue+" characters maximum ";                }//if                alert(strError + "\n[Current length = " + objValue.value.length + " ]");                return false;              }//if              break;           }//case maxlen         case "minlength":         case "minlen":            {              if(eval(objValue.value.length) <  eval(cmdvalue))              {                if(!strError || strError.length ==0)                {                  strError = objValue.name + " : " + cmdvalue + " characters minimum  ";                }//if                              alert(strError + "\n[Current length = " + objValue.value.length + " ]");                return false;                              }//if              break;             }//case minlen         case "alnum":         case "alphanumeric":            {               var charpos = objValue.value.search("[^A-Za-z0-9]");               if(objValue.value.length > 0 &&  charpos >= 0)               {                if(!strError || strError.length ==0)                 {                   strError = objValue.name+": Only alpha-numeric characters allowed ";                 }//if                 alert(strError + "\n [Error character position " + eval(charpos+1)+"]");                 return false;               }//if               break;            }//case alphanumeric         case "num":         case "numeric":            {               var charpos = objValue.value.search("[^\.0-9]");               if(objValue.value.length > 0 &&  charpos >= 0)               {                 if(!strError || strError.length ==0)                 {                   strError = objValue.name+": Only digits allowed ";                 }//if                               alert(strError + "\n [Error character position " + eval(charpos+1)+"]");                 return false;               }//if               break;                          }//numeric         case "alphabetic":         case "alpha":            {               var charpos = objValue.value.search("[^A-Za-z]");               if(objValue.value.length > 0 &&  charpos >= 0)               {                   if(!strError || strError.length ==0)                 {                   strError = objValue.name+": Only alphabetic characters allowed ";                 }//if                                             alert(strError + "\n [Error character position " + eval(charpos+1)+"]");                 return false;               }//if               break;            }//alpha 		case "alnumhyphen":			{              var charpos = objValue.value.search("[^A-Za-z0-9\-_]");               if(objValue.value.length > 0 &&  charpos >= 0)               {                   if(!strError || strError.length ==0)                 {                   strError = objValue.name+": characters allowed are A-Z,a-z,0-9,- and _";                 }//if                                             alert(strError + "\n [Error character position " + eval(charpos+1)+"]");                 return false;               }//if 						break;			}        case "email":           {                if(!validateEmailv2(objValue.value))                {                  if(!strError || strError.length ==0)                  {                     strError = objValue.name+": Enter a valid Email address ";                  }//if                                                                alert(strError);                  return false;                }//if            break;           }//case email         case "lt":         case "lessthan":          {             if(isNaN(objValue.value))             {               alert(objValue.name+": Should be a number ");               return false;             }//if             if(eval(objValue.value) >=  eval(cmdvalue))             {               if(!strError || strError.length ==0)               {                 strError = objValue.name + " : value should be less than "+ cmdvalue;               }//if                             alert(strError);               return false;                              }//if                         break;          }//case lessthan         case "gt":         case "greaterthan":          {             if(isNaN(objValue.value))             {               alert(objValue.name+": Should be a number ");               return false;             }//if              if(eval(objValue.value) <=  eval(cmdvalue))              {                if(!strError || strError.length ==0)                {                  strError = objValue.name + " : value should be greater than "+ cmdvalue;                }//if                              alert(strError);                return false;                              }//if                         break;          }//case greaterthan         case "regexp":          { 		 	if(objValue.value.length > 0)			{	            if(!objValue.value.match(cmdvalue)) 	            { 	              if(!strError || strError.length ==0) 	              { 	                strError = objValue.name+": Invalid characters found "; 	              }//if                                                               	              alert(strError); 	              return false;                   	            }//if 			}           break;          }//case regexp         case "dontselect":          {             if(objValue.selectedIndex == null)             {               alert("BUG: dontselect command for non-select Item");               return false;             }             if(objValue.selectedIndex == eval(cmdvalue))             {              if(!strError || strError.length ==0)               {               strError = objValue.name+": Please Select one option ";               }//if                                                                             alert(strError); 	//		  document.getElementById(objValue.name+'_e').innerHTML = strError;		//			  this.itemobj.style.border = "1px solid #990000";              return false;                                                }              break;          }//case dontselect     }//switch     return true;}function slotcheck1 () {	var slottrue = 0;	var frm = document.formreg;	if ((frm.weekdayhours) && frm.weekdayhours.length > 0) {		for (i=0; i<document.formreg.weekdayhours.length; ++i) {			if (frm.weekdayhours[i].checked == true) {				slottrue = 1;				return true;				break;			}		}		if (slottrue != 1) {			alert ('Choose a Weekday Start Time');			return false;			frm.weekdayhours.focus();		}	}}function slotcheck2 () {	slottrue = 0;	var frm = document.formreg;		if ((frm.weekendhours) && frm.weekendhours.length > 0) {		for (i=0; i<document.formreg.weekendhours.length; ++i) {			if (frm.weekendhours[i].checked == true) {				slottrue = 1;				return true;				break;			}		}		if (slottrue != 1) {			alert ('Choose a Saturday Start Time');			return false;			frm.weekdayhours.focus();		}	}	}function testCreditCard () {  myCardNo = document.pay_direct.x_card_num.value;  for( i = 0; i < document.pay_direct.credit_type.length; i++ )	{	if( document.pay_direct.credit_type[i].checked == true )	myCardType = document.pay_direct.credit_type[i].value;	}  if (checkCreditCard (myCardNo,myCardType)) {    //alert ("Credit card has a valid format")  } else {  alert (ccErrors[ccErrorNo]);  return false;  document.pay_direct.x_card_num.focus();  }}var ccErrorNo = 0;var ccErrors = new Array ()ccErrors [0] = "Unknown card type";ccErrors [1] = "No card number provided";//ccErrors [2] = "Credit card number is in invalid format";ccErrors [2] = "Credit Card Number must contain 16 digits with no spaces";ccErrors [3] = "Please enter a valid Credit Card Number";ccErrors [4] = "Credit card number has an inappropriate number of digits";function checkCreditCard (cardnumber, cardname) {// alert(cardname);   // Array to hold the permitted card characteristics  var cards = new Array();  // Define the cards we support. You may add addtional card types.    //  Name:      As in the selection box of the form - must be same as user's  //  Length:    List of possible valid lengths of the card number for the card  //  prefixes:  List of possible prefixes for the card  //  checkdigit Boolean to say whether there is a check digit    cards [0] = {name: "visa",                length: "13,16",                prefixes: "4",               checkdigit: true};  cards [1] = {name: "mastercard",                length: "16",                prefixes: "51,52,53,54,55",               checkdigit: true};  cards [2] = {name: "AmEx",                length: "15",                prefixes: "34,37",               checkdigit: true};  cards [3] = {name: "Discover",                length: "16",                prefixes: "6011,650",               checkdigit: true};		                    // Establish card type  var cardType = -1;  for (var i=0; i<cards.length; i++) {    // See if it is this card (ignoring the case of the string)    if (cardname.toLowerCase () == cards[i].name.toLowerCase()) {      cardType = i;      break;    }  }    // If card type not found, report an error  if (cardType == -1) {     ccErrorNo = 0;     return false;   }     // Ensure that the user has provided a credit card number  if (cardnumber.length == 0)  {     ccErrorNo = 1;     return false;   }      // Now remove any spaces from the credit card number  cardnumber = cardnumber.replace (/\s/g, "");    // Check that the number is numeric  var cardNo = cardnumber  var cardexp = /^[0-9]{13,19}$/;  if (!cardexp.exec(cardNo))  {     ccErrorNo = 2;     return false;   }         // Now check the modulus 10 check digit - if required  if (cards[cardType].checkdigit) {    var checksum = 0;                                  // running checksum total    var mychar = "";                                   // next char to process    var j = 1;                                         // takes value of 1 or 2      // Process each digit one by one starting at the right    var calc;    for (i = cardNo.length - 1; i >= 0; i--) {          // Extract the next digit and multiply by 1 or 2 on alternative digits.      calc = Number(cardNo.charAt(i)) * j;          // If the result is in two digits add 1 to the checksum total      if (calc > 9) {        checksum = checksum + 1;        calc = calc - 10;      }          // Add the units element to the checksum total      checksum = checksum + calc;          // Switch the value of j      if (j ==1) {j = 2} else {j = 1};    }       // All done - if checksum is divisible by 10, it is a valid modulus 10.    // If not, report an error.    if (checksum % 10 != 0)  {     ccErrorNo = 3;     return false;     }  }    // The following are the card-specific checks we undertake.  var LengthValid = false;  var PrefixValid = false;   var undefined;   // We use these for holding the valid lengths and prefixes of a card type  var prefix = new Array ();  var lengths = new Array ();      // Load an array with the valid prefixes for this card  prefix = cards[cardType].prefixes.split(",");        // Now see if any of them match what we have in the card number  for (i=0; i<prefix.length; i++) {    var exp = new RegExp ("^" + prefix[i]);    if (exp.test (cardNo)) PrefixValid = true;  }        // If it isn't a valid prefix there's no point at looking at the length  if (!PrefixValid) {     ccErrorNo = 3;     return false;   }      // See if the length is valid for this card  lengths = cards[cardType].length.split(",");  for (j=0; j<lengths.length; j++) {    if (cardNo.length == lengths[j]) LengthValid = true;  }    // See if all is OK by seeing if the length was valid. We only check the   // length if all else was hunky dory.  if (!LengthValid) {     ccErrorNo = 4;     return false;   };       // The credit card is in the required format.  return true;}
