
// validator.js
//---------------------------------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 "req": 
       case "required": 
        { 
          if(eval(objValue.value.length) == 0) 
          { 
             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 "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 is a pair consisting of the validation 
*          descriptor string and an optional Error message. 
*/ 

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) 
      { 
        objFrm[itrobj].focus(); 
        return false; 
      }//if 
  }//for 
}//for 
} 
