/* Form Validations 
   Validating the fields in form 

'Author: John Wu
'Date: 11/29/00
'filename: nvalidate.js
'Note: validates form inputs
'******************************************************************

*/

function CheckFields(nForm)    // accepts the form number in the current document as argument
				      // ex. integer number 
{ 
   var f = nForm;
   var fieldName = "";
   var lcErrorMsg = "";
   var uscore = 0;
   var len = 0;
   var REQYN = "";
   var AttribName = "";
   
   for (i = 0; i<=(document.forms[f].elements.length)-1; i++)
   { //alert(" name--> "+document.forms[f].elements[i].name +"<br>value--> " +document.forms[f].elements[i].value );
     len = document.forms[f].elements[i].name.length;
     
     //  extracting the last underscore "_" from text field name
     //  so that , programmers can put their own underscores
     
     uscore = document.forms[f].elements[i].name.lastIndexOf("_")
     
      // get the form field name
      //AttribName = document.forms[f].elements[i].name;
      AttribName = document.forms[f].elements[i].name.substring(0,uscore).toUpperCase();
      fieldName = document.forms[f].elements[i].name.substring(uscore,len).toUpperCase();
      
      // whether to check ,  FIELD IS compulsory OR NOT
      REQYN  =    fieldName.substring(fieldName.length, fieldName.length-1)
       
      fieldName = document.forms[f].elements[i].name.substring(uscore,len-1).toUpperCase();
      //alert( AttribName + "  " + fieldName + "  " + REQYN);
      // FORCE THE USER TO ENTER DATA IN MANDATORY FIELDS 
      if ((REQYN=="0") && (document.forms[f].elements[i].value=="" )  && (uscore != -1 ) )  
       {
               //alert("An Entry in field " + AttribName +  " is required...");
		alert("An Entry in field  is required...");
               document.forms[f].elements[i].focus();
  	         return false;
	 }
      // ENSURE THE DATA VALIDATION WHILE ENTERING DATA IN FIELDS 
      //if ( ( (REQYN=="0")) && (document.forms[f].elements[i].value!="" )  && (uscore != -1 ) )  
      
      
      if ( ( (REQYN=="0") || (REQYN=="1") ) && (document.forms[f].elements[i].value!="" )  && (uscore != -1 ) )  
       {   
             //form field validations   
             // EMAIL ADDRESS  FIELD
             if ( fieldName == "_EML" )				

             {
		        if ( !CheckEmail(document.forms[f].elements[i]) )  //CHECK FOR EMAIL ADDRESS VALIDITY
		        { 
		               document.forms[f].elements[i].focus();
		               return false;
		         }
	     }      
		      // DATE CONTAINING  FIELD
            else if ( fieldName == "_DAT" )		//CHECK FOR DATE  VALIDITY
                  {  
                    //alert("date validate");
                    if ( !CheckDate(document.forms[f].elements[i]) )
                           {   document.forms[f].elements[i].focus();
		    	                 return false;
                            }    
                   }         
                 // NUMERIC ENTRY  FIELD
                  else if ( fieldName == "_NUM" )	//CHECK FOR NUMBER VALIDITY
                       { 
					          if ( !CheckNumber( document.forms[f].elements[i]) )
		                     {
		                           document.forms[f].elements[i].focus();
					                 return false;
       		              }    
                       } 
                                             
                    else if ( fieldName == "_BOX" )	//CHECK FOR SECONDARY ADDRESS
                       { 
					          if ( !checkAddress( document.forms[f].elements[i]) )
		                     {
		                           document.forms[f].elements[i].focus();
					                 return false;
       		              }    
                       }                            
                       
                       
                      // PHONE NUMBER   FIELD
                  else if ( fieldName == "_PHN" )	//CHECK FOR PHONE NUMBER  VALIDITY
                       {  
               	          if ( !CheckPhone( document.forms[f].elements[i]) )
		                     {
		                           document.forms[f].elements[i].focus();
  		                           return false;
       		              }    
                      } 
                      // ZIPCODE OR PINCODE CONTAINING FIELD
                  else if ( fieldName == "_ZIP" )	//CHECK FOR ZIPCODE/PINCODE VALIDITY
                       { 
					          if ( !CheckZip( document.forms[f].elements[i]) )
		                     {
		                           document.forms[f].elements[i].focus();
		                           return false;
       		              }    
                      } 
                      // COMBO/DROPDOWN MENU FIELD
                  else if ( fieldName == "_CMB" )	//CHECK FOR COMBO IS SELECTED OR NOT
                       { 
					   if (document.forms[f].elements[i].options[document.forms[f].elements[i].selectedIndex].value=="-1" )
		               		{
		                           document.forms[f].elements[i].focus();
		                           alert("Please Select an Item from the drop down");
		                           return false;
       		               	}    			 
                      } 
		 else if ( fieldName == "_PWD" )	//CHECK FOR PASSWORD SPACES 
                       {
			          if ( !CheckPwd( document.forms[f].elements[i]) )
		                     {
		                           document.forms[f].elements[i].focus();
			                           return false;
       		        	    }   
                      } 
		 else if ( fieldName == "_MNY" )	//CHECK FOR CURRENCY                        {
			 {    
			      if ( !CheckMoney( document.forms[f].elements[i]) )
		                     {
		                           document.forms[f].elements[i].focus();
			                           return false;
       		        	      }   
                      } 
                      // CHARACTER DATA CONTAINING FIELD
                  /*else if ( fieldName == "_CHR" )	//CHECK NOTHING
                       {   return true; }    */
             
           } // end of required field or not     
   }  // end  of for loop
 
 return true;

} // end of function


function CheckPhone(fldObject)  // accepts the form field as Object in the current document as argument
								   
{	//PHONE NUMBER VALIDATION
   var VarPhone = fldObject.value;
  if (VarPhone.value=="")
    return false;
  if (VarPhone.value!="")
      {
       var Phno;
       Phno=VarPhone;
      	var valid = "-0123456789";
		var hyphencount = 0;
		for (var i=0; i < Phno.length; i++) {
		temp = "" + Phno.substring(i, i+1);
		if (valid.indexOf(temp) == "-1")
		 {
			alert("Invalid characters in your Phone number.  Please try again.");
			return false;
			}
	   }
	   
      } return true;      
   }

function CheckNumber(fldObject)
{  
   //NUMBER VALIDATION

  var VarNumber = fldObject.value;
  if(VarNumber.value=="")
  	return false;
   if (VarNumber.value!="")
   {
       var Num;
       Num=VarNumber;
      	var valid = "0123456789";
		var hyphencount = 0;
		for (var i=0; i < Num.length; i++) 
		{
		 temp = "" + Num.substring(i, i+1);
		  if (valid.indexOf(temp) == "-1")
		   {
			  alert("You may not use textual characters or punctuation in a number-based field (example: letters, commas, periods or hyphens).  Please re-enter using only numbers.");
			  return false;
		   }
	   } // end for loop
    }   // end if
      return true; 
   }  // end function
   
   
function CheckEmail(fldObject)
{
  //EMAIL ADDRESS VALIDATION
	var VarEmail = fldObject.value
	if (VarEmail.value!="")
    {
      var emailStr;
	  emailStr=VarEmail
	
	var emailPat=/^(.+)@(.+)$/
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars="\[^\\s" + specialChars + "\]"
	var firstChars=validChars
	var quotedUser="(\"[^\"]*\")"
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom="(" + firstChars + validChars + "*" + ")"
	var word="(" + atom + "|" + quotedUser + ")"
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
	var matchArray=emailStr.match(emailPat)
	if (matchArray==null) 
   {
   	 alert("Email address seems incorrect (Must contain @ and .'s)")
	 return false;
    }
	var user=matchArray[1]
	var domain=matchArray[2]
	if (user.match(userPat)==null) 
	   {
    alert("The username doesn't seem to be valid.")
    return false;
    
   }
	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) 
    {
    for (var i=1;i<=4;i++) 
       {
	 if (IPArray[i]>255) 
              {
 	         alert("Destination IP address is invalid!")
	         return false;
	       }
        }

   
}


var domainArray=domain.match(domainPat)
if (domainArray==null) {
	alert("The domain name doesn't seem to be valid.")
	    return false;
}



var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length>3) {
  
   alert("The address must end in a three-letter domain, or two letter country.")
   return false;
}


//if (domArr[domArr.length-1].length==2 && len<3) {
//   var errStr="This address ends in two characters, which is a country"
//   errStr+=" code.  Country codes must be preceded by "
//  errStr+="a hostname and category (like com, co, pub, pu, etc.)"
//   alert(errStr)
//   return false;
//}


  if (domArr[domArr.length-1].length==3 && len<2) 
  {
     var errStr="This address is missing a hostname!"
     alert(errStr)
     return false;
  }
}
 return true;
}

//  function for validating the zip 

function CheckZip(fldObject) 
{
   // ZIPCODE/PINCODE  VALIDATION
	var valid = "AaBaCcDdEeFfGgHhIiKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789- ";
	var hyphencount = 0;
	var field = fldObject.value;

	if (field.length!=5 && field.length!=10 && field.length!=7) 
	{
		alert("Zip code length should be  5 (without hyphens ) or 10 Including Hyphens ( for USA) or 7 for Canada (including space)....");
		return false;
		}
	for (var i=0; i < field.length; i++) {
	temp = "" + field.substring(i, i+1);
	
	if (temp == "-") hyphencount++;
		if (valid.indexOf(temp) == "-1")
		 {
		//	alert("Invalid characters in your zip code.  Please try again.");
		//	return false;
	    }
	if ((hyphencount > 1) || ((field.length==10) && "" + field.charAt(5)!="-")) 
	 {
		alert("The hyphen character should be used with a properly formatted 5 digit+four zip code, like '12345-6789'.   Please try again.");
  	    return false;
    }
}
return true;
}

//  Function for Date Validation 


function CheckDate(fldObject) 
{

  var dateStr = fldObject.value
  var valid = "0123456789-/.";
  var temp = "";
  var hyphencount = 0 ;
  var slashcount = 0 ;
  var dotcount = 0 ;
  
  for (var i=0; i < dateStr.length; i++)
  {
	  temp = "" + dateStr.substring(i, i+1);
	  if  (temp == "-")  { hyphencount++; }
	    else  if (temp == "/")  {  slashcount++; }
           else  if (temp == ".") { dotcount++; }
	     	         
    if ( ( hyphencount == 2 ) || ( slashcount == 2 ) || ( dotcount == 2 ) )
	 {
	          t=dateStr.substring(6,10);
				if(t.length==4)
				 {
				 	if(t<1900)
				 	 {
				 	 	alert("the century of date should be greater than or equal to 1900.");
				 	 	return false;
				 	 }
				 }
    }          
	if (valid.indexOf(temp) == "-1")
	{
		alert("Invalid characters in your date.  Please try again.");
		return false;
    }
  } //end of for loop   
	    
	//alert ( "hyphen  " + hyphencount + " slash " + slashcount + " dot " + dotcount )  ; 
	if ( ( hyphencount== 2) & (slashcount !=2) && (dotcount !=2) ) {}
	else if ( ( hyphencount!= 2) & (slashcount ==2) && (dotcount !=2) ) {}
	else if ( ( hyphencount!= 2) & (slashcount !=2) && (dotcount ==2) ) {}
	else 
     	 {	alert("The hyphen character should be used with a properly formatted. Please try again.");
         	return false;
        }
		   
  if (dateStr.length == 8 || dateStr.length == 10 )
  {
	 var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;
	 var matchArray = dateStr.match(datePat); // is the format ok?
     if (matchArray == null) 
     { 
        return true;
     }

	month = matchArray[1]; // parse date into variables
	day = matchArray[3];
	year = matchArray[4];
	if (month < 1 || month > 12) 
	{ // check month range
		alert("Month must be between 1 and 12.");
		return false; 
	}
	if (day < 1 || day > 31) 
	{
		alert("Day must be between 1 and 31.");
		return false; 
	}
	if ((month==4 || month==6 || month==9 || month==11) && day==31) 
	{
		alert("Month "+month+" doesn't have 31 days!")
		return false; 
	 }
	if (month == 2) 
	{ // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap))
		 {
			alert("February " + year + " doesn't have " + day + " days!");
			return false;
		 }
    } // end of month = 2 condition
  } // end of date string length = 8 or length = 10 condition

 else 
    {
       alert("Entered date is invalid format, Date should be 8 or 10 chars. length.");
       return false;
    }   
  
  return true;  // date is valid
}


function CheckPwd(fldObject) 
{
	var pwd = fldObject.value
		for (var i=0; i < pwd.length; i++) 
		{
		 temp = pwd.substring(i, i+1);
		  if (temp == " ")
		   {
			  alert("Spaces Not allowed in Password.  Please try again.");
			  return false;
		   }
	       }
       return true;
}
function CheckMoney(fldObject)
{  
   //NUMBER VALIDATION
  var VarNumber = fldObject.value;
  if(VarNumber.value=="")
  	return false;
   if (VarNumber.value!="")
   {
       var Num;
       Num=VarNumber;
      	var valid = "0123456789.,";
		var hyphencount = 0;
		for (var i=0; i < Num.length; i++) 
		{
		 temp = "" + Num.substring(i, i+1);
		  if (valid.indexOf(temp) == "-1")
		   {
			  alert("Invalid characters in your Number.  Please try again.");
			  return false;
		   }
	      } // end for loop
    }   // end if
return true; 
}  // end function



 //document.forms[f].elements[i])

function checkAddress(fldObject) 
{
	if ((!fldObject.checked))
	{	
		if ( (document.form1.address.value) == "")
		{
				alert("Address is required");
				document.form1.address.focus();
				return false;
		}
			
		if ( (document.form1.city.value) == "")
		{
				alert("City is required.");
				document.form1.city.focus();
				return false;
		}

		if ( (document.form1.state.value) == "")
		{
				alert("State is required");
				document.form1.state.focus();
				return false;
		}
				
		if ( (document.form1.zip.value) == "")
		{
			alert("Zipcode is required");
			document.form1.zip.focus();
			return false;
		}
			
	} //End If	
	
		return true;
		
} //End Function











function chkForm(fldObject){
var VarForm = fldObject.value;
  if(VarForm.value=="")
  	return false;
   if (VarForm.value!="")
   {
if(VarForm.value==0){
	alert("Please select device Type");
	//form1.deviceType_RAY0.focus();	
	return false;
}
else {
		
		return true;
			
}
}
}

