// Program script name:   validate.js
// This is the html part of the script for use with
//     the javascript validate.js. 
// 1) Define the validation rules for each field 
//        define - Call this function in the beginning of the page. 
//		         I.e. onLoad.
//        sample of function define(n, type, HTMLname, min, max, d)   
//        n = name of the input field (Required)
//     type = string, num, email (Required)
//      min = the value must have at least [min] characters (Optional)
//      max = the value must have maximum [max] characters (Optional)
//        d = (Optional)
//
// 2)Include the javascript in the head part of the main document -->
// 3)Insert the OnLoad="init()" event into your BODY tag  -->
// 4)Add validate() to your submit button, as shown below -->

// function.js  these are the JavaScript Functions
// JavaScript Generic Form Validation
// also saved as validate.js
var checkObjects		= new Array();
var errors			= "";
var returnVal		= false;
var language		= new Array();
language["header"]		= "Please correct the following entry error(s):"
language["start"]		= "->";
//language["field"]	                  = " THIS ENTRY:  ";
language["field"]	                  = " :  ";
language["require"]  	                  = " is required";
language["min"]		= " and must consist of at least ";
language["max"]		= " and must not contain more than ";
language["minmax"]	                  = " and no more than ";
language["chars"]	                  = " characters";
language["num"]		= " and must contain a number";
language["email"]              	= " must contain a valid e-mail address ex: you@yours.com";
language["zipcode"]                   = " must contain valid zip or zip + 4 zip code";
language["phonenumber"]         = " must between 10 to 15 valid digits and - characters ";
// -----------------------------------------------------------------------------
// define - Call this function in the beginning of the page. I.e. onLoad.
// n	 = name of the input field (Required)
// type	 = string, num, email (Required)
// min	 = the value must have at least [min] characters (Optional)
// max	 = the value must have maximum [max] characters (Optional)
// d	 = (Optional)
// -----------------------------------------------------------------------------

function define(n, type, HTMLname, min, max, d) {
 var p;
 var i;
 var x;
 if (!d) d = document;

 if ((p=n.indexOf("?"))>0&&parent.frames.length) {
   d = parent.frames[n.substring(p+1)].document;
   n = n.substring(0,p);
   }

 if (!(x = d[n]) && d.all) x = d.all[n];
 for (i = 0; !x && i < d.forms.length; i++) {
   x = d.forms[i][n];
 }

 for (i = 0; !x && d.layers && i < d.layers.length; i++) {
   x = define(n, type, HTMLname, min, max, d.layers[i].document);
   return x;       
 }

 eval("V_"+n+" = new formResult(x, type, HTMLname, min, max);");
 checkObjects[eval(checkObjects.length)] = eval("V_"+n);
}

function formResult(form, type, HTMLname, min, max) {
 this.form = form;
 this.type = type;
 this.HTMLname = HTMLname;
 this.min  = min;
 this.max  = max;
}

// My function added...To check for a valid number even a 0 allowed...
function isANumber(number) {
  answer =1;
  for (var i=0; i < number.length; i++) {
       if ( (number.charAt(i) != "0" )  &&  !parseFloat(number.charAt(i) ) )  {
                  answer = 0;
 	    break;
	    }
       }
        return answer;
}	

function validate() {

 if (checkObjects.length > 0) {
  errorObject = "";
  for (i = 0; i < checkObjects.length; i++) {
   validateObject		= new Object();
   validateObject.form 	= checkObjects[i].form;
   validateObject.HTMLname    = checkObjects[i].HTMLname;
   validateObject.val 	                 = checkObjects[i].form.value;
   validateObject.len    	= checkObjects[i].form.value.length;
   validateObject.min 	= checkObjects[i].min;
   validateObject.max 	= checkObjects[i].max;
   validateObject.type 	= checkObjects[i].type;


   if (validateObject.type == "num" || validateObject.type == "string") {

     if ((validateObject.type == "num" && validateObject.len <= 0) || (validateObject.type == "num" && isNaN(validateObject.val))) 
	    { 
	     errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['num'] + "\n";

        } 

     else if (validateObject.min && validateObject.max && (validateObject.len < validateObject.min ||  validateObject.len > validateObject.max)) 
		 { 

		 errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['min'] + validateObject.min + language['minmax'] + validateObject.max+language['chars'] + "\n";
         } 

     else if (validateObject.min && !validateObject.max && (validateObject.len < validateObject.min)) 
         { 

	 	errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['min'] + 		validateObject.min + language['chars'] + "\n";
         } 

     else if (validateObject.max && !validateObject.min &&(validateObject.len > validateObject.max)) 
         {

	 	 errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['max'] + 		validateObject.max + language['chars'] + "\n";
         } 

     else if (!validateObject.min && !validateObject.max && validateObject.len <= 0)          { 
	     errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + "\n";
         }
  } 



  else if(validateObject.type == "email") 
    { 
     // Checking existense of "@" and ".". 
     // Length of must >= 5 and the "." must 
     // not directly precede or follow the "@"
     if ((validateObject.val.indexOf("@") == -1) || 
	   (validateObject.val.charAt(0) == ".") || 	   (validateObject.val.charAt(0) == "@") || 
	   (validateObject.len < 5) ||    (validateObject.val.indexOf(".") == -1) || 
	   (validateObject.val.charAt(validateObject.val.indexOf("@")+1) == ".") ||
	   (validateObject.val.charAt(validateObject.val.indexOf("@")-1) == ".")) 
		  { 
		   errors += language['start'] + language['field'] + validateObject.HTMLname + language['email'] + "\n"; 
    	  }
  }

  else if (validateObject.type == "zipcode")
    {	 
        if ((validateObject.len < 5) || (validateObject.val.charAt(0) == "-") || ( (validateObject.len > 5) && (validateObject.len < 10) ) )
 	        {
 	         errors += language['start'] + language['field'] + validateObject.HTMLname + language['zipcode'] + "\n"; 
	        }
    }

// Check for digits and - in phone number routine .....

   else if (validateObject.type=="phonenumber")    {
         if (      ( validateObject.len > 15 ) || (validateObject.len < 10)     ) {
               errors +=  language['start'] + language['field'] + validateObject.HTMLname +   language['phonenumber'] + "\n"; 
              }
     //    if (   (   ( !( isANumber(validateObject.val) ))   || ( !(validateObject.val == '-'))   ) ||  (  ( validateObject.len > 15 ) || (validateObject.len < 10)  )   ) {
    //           errors +=  language['start'] + language['field'] + validateObject.HTMLname +   language['phonenumber'] + "\n"; 
     //         }
     }

          
 }


}

if (errors) {
     alert(language["header"].concat("\n" + errors));
     errors = "";
     returnVal = false;
} else {
        returnVal = true;
         }
}

