/*

  -------------------------------------------------------------------------

                                JavaScript Form Validator 

     this file is used to do client side validations

    -------------------------------------------------------------------------  

*/

function Validator(frmname)
{
  	this.formobj=document.forms[frmname];
    if(!this.formobj)
    {
    	alert("BUG: couldnot get Form object "+frmname);
        return;
    }
    if(this.formobj.onsubmit)
    {
         this.formobj.old_onsubmit           = this.formobj.onsubmit;
         this.formobj.onsubmit                 =          null;
    }
    else
    {
        this.formobj.old_onsubmit = null;
    }
    this.formobj.onsubmit                             =          form_submit_handler;
    this.addValidation                                =          add_validation;
    this.confirmPassword							  =          confirm_password;
    this.setAddnlValidationFunction					  =          set_addnl_vfunction;
    this.clearAllValidations						  =          clear_all_validations;
}

function set_addnl_vfunction(functionname)
{
            this.formobj.addnlvalidation = functionname;
}

function clear_all_validations()
{
	for(var itr=0;itr < this.formobj.elements.length;itr++)
    {
    	this.formobj.elements[itr].validationset = null;
    }
}

function form_submit_handler()
{
    for(var itr=0;itr < this.elements.length;itr++)
    {
    	if(this.elements[itr].validationset && !this.elements[itr].validationset.validate())
        {
        	return false;
        }
    }

            if(this.addnlvalidation)
            {
              str =" var ret = "+this.addnlvalidation+"()";
              eval(str);
    if(!ret) return ret;
            }
            return true;
}

function confirm_password(itemname1,itemname2)
{

            /*alert("raj");

            if(!this.formobj)

            {

                        alert("BUG: the form object is not set properly");

                        return;

            }//if

            var itemobj1 = this.formobj[itemname1];

            var itemobj2 = this.formobj[itemname2];   

            if(!itemobj1)

            {

                        alert("BUG: Couldnot get the input object named: "+itemname1);

                        return;

            }

            if(!itemobj2)

            {

                        alert("BUG: Couldnot get the input object named: "+itemname2);

                        return;

            }

            if(itemObj1.value!=itemObj2.value)

            {

                        alert("Please confirm password");

            }*/

            

}

function add_validation(itemname,descriptor,errstr)
{
	
	if(!this.formobj)
	{
    	alert("BUG: the form object is not set properly");
        return;
	}//if

	var itemobj = this.formobj[itemname];
    if(!itemobj)
    {
		alert("BUG: Couldnot get the input object named: "+itemname);
		return;
    }

	if(!itemobj.validationset)
	{
		itemobj.validationset = new ValidationSet(itemobj);
    }

  itemobj.validationset.add(descriptor,errstr);

}

function ValidationDesc(inputitem,desc,error)
{
	this.desc          =          desc;
	this.error         =          error;
	this.itemobj       =          inputitem;
	this.validate      =          vdesc_validate;
}

function vdesc_validate()
{
	if(!V2validateData(this.desc,this.itemobj,this.error))
	{
    	this.itemobj.focus();
        return false;
	}
	return true;
}

function ValidationSet(inputitem)
{
    this.vSet            =          new Array();
	this.add             =          add_validationdesc;
	this.validate		 =          vset_validate;
	this.itemobj         =          inputitem;
	

}

function add_validationdesc(desc,error)
{
    this.vSet[this.vSet.length]           =          new ValidationDesc(this.itemobj,desc,error);
}

function vset_validate()
{
	for(var itr=0;itr<this.vSet.length;itr++)
    {
	    if(!this.vSet[itr].validate())
        {
			return false;
        }
    }
    return true;
}

function validateEmailv2(email)
{
	// a very simple email validation checking. 
	// you can add more complex email checking if it helps 
	if(email.length <= 0)
    {
	     return true;
	}
    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 V2validateData(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 + " ]"); 

                                       alert(strError); 

               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)+"]"); 

                                                alert(strError); 

                                                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)+"]"); 

                                                alert(strError); 

                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 [A-Z,a-z] characters allowed "; 

                }//if                             

				alert(strError); 
                //alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 

                return false; 

              }//if 

              break; 

           }//alpha 

                        case "alnumhyphen":

                                    {

              var charpos = objValue.value.search("[^A-Za-z0-9\-_]"); 

              if(objValue.value.length > 0 &&  charpos >= 0) 

              { 

                  if(!strError || strError.length ==0) 

                { 

                  strError = objValue.name+": characters allowed are A-Z,a-z,0-9,- and _"; 

                }//if                             

                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 

                return false; 

              }//if                              

                                    break;

                                    }

        case "email": 

          { 

               if(!validateEmailv2(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.length > 0)

                                    {

                        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; 

}

/*

            Copyright 2003 JavaScript-coder.com. All rights reserved.

*/

