/* 
   Validation function. Basing on gen_validation.js by Prasanth M J
   (prasanth@creativeprogrammers.com). Thanks a lot for the good idea.
*/ 

//---------------------------------EMail Check ------------------------------------ 

/*  checks the validity of an email address entered 
*   returns true or false 
*   
*/ 

function validateEmail(email)
  { 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;
          }
        return true;
      }
    return false;
  }

/* function validateData 
*  Checks each field in a form 
*  Called from validateForm function 
*/ 
function validateData(strValidateStr,objValue,strError,rxadd) 
  { 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"; 
                  } 
                alert(strError); 
                return false; 
              } 
            break;             
          }
           
        case "maxlength": 
        case "maxlen": 
          { if(eval(objValue.value.length) >  eval(cmdvalue)) 
              { if(!strError || strError.length ==0) 
                   { strError = objValue.name + " : "+cmdvalue+" characters maximum "; 
                   } 
                alert(strError + "\n[Current length = " + objValue.value.length + " ]"); 
                return false; 
              } 
            break; 
          }
           
        case "minlength": 
        case "minlen": 
          { if(eval(objValue.value.length) <  eval(cmdvalue)) 
              { if(!strError || strError.length ==0) 
                  { strError = objValue.name + " : " + cmdvalue + " characters minimum  "; 
                  }               
                alert(strError + "\n[Current length = " + objValue.value.length + " ]"); 
                return false;                 
              } 
            break; 
          }
            
        case "alnum": 
        case "alphanumeric": 
          { regex = "[^A-Za-z0-9"+ rxadd +"]";
            var charpos = objValue.value.search(regex); 
            if(objValue.value.length > 0 &&  charpos >= 0) 
              { if(!strError || strError.length ==0) 
                   { strError = objValue.name+": Only alpha-numeric characters allowed "; 
                   } 
                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
                return false; 
              } 
            break; 
          }
           
        case "username": 
          { 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 and _- allowed "; 
                   } 
                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
                return false; 
              } 
            break; 
          }

        case "date": 
          { var charpos = objValue.value.search("[^0-9./]"); 
            if(objValue.value.length > 0 &&  charpos >= 0) 
              { if(!strError || strError.length ==0) 
                   { strError = objValue.name+": Only 10 numeric characters allowed "; 
                   } 
                alert(strError); 
                return false; 
              } 
            break; 
          }

        case "phone": 
          { var charpos = objValue.value.search("[^0-9\(\) -]"); 
            if(objValue.value.length > 0 &&  charpos >= 0) 
              { if(!strError || strError.length ==0) 
                   { strError = objValue.name+": Only numeric characters and ./ allowed "; 
                   } 
                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
                return false; 
              } 
            break; 
          }
       
        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 "; 
                   }               
                 alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
                 return false; 
               } 
             break;               
          }
           
        case "alphabetic": 
        case "alpha": 
          { regex = "[^A-Za-z"+ rxadd +"]";
            var charpos = objValue.value.search(regex); 
            if(objValue.value.length > 0 &&  charpos >= 0) 
              { if(!strError || strError.length ==0) 
                  { strError = objValue.name+": Only alphabetic characters allowed "; 
                  }                             
                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
                return false; 
              } 
            break; 
          }
          
        case "email": 
          { if(!validateEmail(objValue.value)) 
              { if(!strError || strError.length ==0) 
                  { strError = objValue.name+": Enter a valid Email address "; 
                  }                                               
                alert(strError); 
                return false; 
              }
            break; 
          }
          
        case "lt": 
        case "lessthan": 
          { if(isNaN(objValue.value)) 
              { alert(objValue.name+": Should be a number "); 
                return false; 
              } 
            if(eval(objValue.value) >=  eval(cmdvalue)) 
              { if(!strError || strError.length ==0) 
                  { strError = objValue.name + " : value should be less than "+ cmdvalue; 
                  }               
                alert(strError); 
                return false;                 
              }             
            break; 
          }
          
        case "gt": 
        case "greaterthan": 
          { if(isNaN(objValue.value)) 
              { alert(objValue.name+": Should be a number "); 
                return false; 
              }
            if(eval(objValue.value) <=  eval(cmdvalue)) 
              { if(!strError || strError.length ==0) 
                  { strError = objValue.name + " : value should be greater than "+ cmdvalue; 
                  }               
                alert(strError); 
                return false;                 
              }             
            break; 
          }
          
        case "regexp": 
          { if(!objValue.value.match(cmdvalue)) 
              { if(!strError || strError.length ==0) 
                  { strError = objValue.name+": Invalid characters found "; 
                  }                                                               
                alert(strError); 
                return false;                   
              } 
            break; 
          }
          
        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 "; 
                  }
                alert(strError); 
                return false;                                   
              } 
            break; 
          }
          
        case "none":
        default:
          break;
      }
    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 chkInput(objFrm,arrObjDesc,lang) 
  { rxadd = "";
    if (lang == 'ger')
      { rxadd = 'äöüÄÖÜß';
      }
    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; 
          } 
        for(var itrdesc=0; itrdesc < arrObjDesc[itrobj].length ;itrdesc++) 
          { if(validateData(arrObjDesc[itrobj][itrdesc][0], 
               objFrm[itrobj],arrObjDesc[itrobj][itrdesc][1],rxadd) == false) 
              { objFrm[itrobj].focus();
                return false; 
              }
          }
      }
  } 