/* 
   This is the source code for the validation function. You can copy and paste 
   the contents in to a file, say, gen_validation.js . 
   Add the following code just after the </HEAD> in the files where the 
   generalised validation functionality is required. 
   <SCRIPT language="JavaScript1.2" src="/java_script/gen_validation.js"></SCRIPT> 

   The next two pages gives examples on using the funcions. 

*/ 

   /* 
   *   File : gen_validation.js 
   *     
   *   Author : Prasanth M J 
   * 
   *   Published at 
   *   CreativeProgrammers.com - The technical knowledge repository. 
   *   http://www.creativeprogrammers.com 
   *     
   *     
   */ 


//---------------------------------EMail Check ------------------------------------ 

/*  checks the validity of an email address entered 
*   returns true or false 
*   
*/ 

function validateEmail(email) 
{ 
// a very simple email validation checking. 
// you can add more complex email checking if it helps 
   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 validateData 
*  Checks each field in a form 
*  Called from validateForm function 
*/ 
function validateData(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 "checkedradiocheckbox":
        {
          var checkedRadioCheckbox;
          var i;
          var f;
          checkedRadioCheckbox = false;
          f = eval("document.forms[0]." + objValue.name);
          for (i = 0; i<f.length; i++) {
            if (f[i].checked == true) {
              checkedRadioCheckbox = true;
            }
          }
          if (checkedRadioCheckbox == false) {
            if(!strError || strError.length ==0) { 
              strError = objValue.name + " : Required Field"; 
            }//end if 
            alert(strError); 
            return false; 
          }
          break;             
        }//end case checkedradio 

       case "checked": 
        { 
          if(! objValue.checked) 
          { 
             if(!strError || strError.length ==0) 
             { 
               strError = objValue.name + " : Required Field"; 
             }//if 
             alert(strError); 
             return false; 
          }//if 
          break;             
        }//case checked 
	   case "req": 
       case "required": 
        { 
          if(eval(objValue.value.length) == 0 || objValue.value == ' ' || objValue.value == '  '|| objValue.value == '   '|| objValue.value == '    ' || objValue.value == '     '|| objValue.value == '      '|| objValue.value == '       ') 
          { 
             if(!strError || strError.length ==0) 
             { 
               strError = objValue.name + " : Required Field"; 
             }//if 
             alert(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 "notzero": 
          { 
              
             if(objValue.value == 0) 
             { 
               if(!strError || strError.length ==0) 
               { 
                 strError = objValue.name+": Value can't be zero "; 
               }//if               
               alert(strError); 
               return false; 
             }//if 
             break;               
          }//notzero
       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 "email": 
         { 
              if(!validateEmail(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.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); 
             return false;                                   
            } 
            break; 
        }//case dontselect 
   }//switch 
   return true; 
} 

/* 
* function validateForm 
* the function that can be used to validate any form 
* returns false if the validation fails; true if success 
* arguments : 
*   objFrm     : the form object 
*   arrObjDesc : an array of objects describing the validations to conduct on each 
*        input item. 
*          The array should consist of one object per input item in the order the input 
*          elements are present in the form. Each object consist of zero or more validation 
*          objects.
*          Each of these validation object consists of:
*            1. the validation descriptor string
*            2. an optional Error message
*            3. optionally whether NOT ("N") to set the Focus if their is an error. 
*/ 

function validateForm(objFrm,arrObjDesc) 
{
for(var itrobj=0; itrobj < arrObjDesc.length; itrobj++) 
{ 
  if(objFrm.elements.length <= itrobj) 
  { 
       alert("BUG: Obj descriptor for a non existent form element"); 
       return false; 
  }//if 
  for(var itrdesc=0; itrdesc < arrObjDesc[itrobj].length ;itrdesc++) 
  { 
     if(validateData(arrObjDesc[itrobj][itrdesc][0], 
                objFrm[itrobj],arrObjDesc[itrobj][itrdesc][1]) == false) 
      {
	if (arrObjDesc[itrobj][itrdesc][2] != "N") {
	        objFrm[itrobj].focus(); 
	}
        return false; 
      }//if 
  }//for 
}//for
return true; 
} 
