/*

    This is the source code for the validation function. 

    Add the following code just after the </HEAD> in the files where the 

    generalised validation functionality is required. 

    <SCRIPT language="JavaScript1.2" src="gen_validation.js"></SCRIPT> 

*/ 



    /* 

    *   File : formValidation.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 || objValue.value==objValue.id) 

           { 

              if(!strError || strError.length ==0) 

              { 

                strError = objValue.name + ": Campo obligatorio"; 

              }//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+" caracteres máximo "; 

               }//if 

               alert(strError + "\n[núm. caracteres = " + 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 + " caracteres mínino  "; 

               }//if               

               alert(strError + "\n[núm. caracteres = " + 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+": Sólo caracteres alfanuméricos "; 

                }//if 

                alert(strError + "\n [Posición del error " + 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+": Sólo caracteres numéricos "; 

                }//if               

                alert(strError + "\n [Posición del error " + 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+": Sólo caractes alfabéticos "; 

                }//if                             

                alert(strError + "\n [Posición del error " + eval(charpos+1)+"]"); 

                return false; 

              }//if 

              break; 

           }//alpha 

        case "email": 

          { 

		

               if(!validateEmail(objValue.value)) 

               { 

                 if(!strError || strError.length ==0) 

                 { 

                    strError = objValue.name+": Dirección email no válida "; 

                 }//if                                               

                 alert(strError); 

                 return false; 

               }//if 

           break; 

          }//case email 

        case "lt": 

        case "lessthan": 

         { 

            if(isNaN(objValue.value)) 

            { 

              alert(objValue.name+": Debe ser un número "); 

              return false; 

            }//if 

            if(eval(objValue.value) >=  eval(cmdvalue)) 

            { 

              if(!strError || strError.length ==0) 

              { 

                strError = objValue.name + ": El valor debe ser menor que "+ cmdvalue; 

              }//if               

              alert(strError); 

              return false;                 

             }//if             

            break; 

         }//case lessthan 

        case "gt": 

        case "greaterthan": 

         { 

            if(isNaN(objValue.value)) 

            { 

              alert(objValue.name+": Debe ser un número "); 

              return false; 

            }//if 

             

             if(eval(objValue.value) <=  eval(cmdvalue)) 

             { 

               if(!strError || strError.length ==0) 

               { 

                 strError = objValue.name + ": El valor debe ser mayor que "+ 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+": Caracteres no válidos "; 

              }//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 = "Seleccione "+objValue.name; 

              }//if                                                               

              alert(strError); 

              return false;                                   

             } 

             break; 

         }//case dontselect 

        case "":

          {

            break;

          }

    }//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

}

