function Validator(frmname)
{
   this.alerter = true;
   this.formobj=document.forms[frmname];
   if(!this.formobj)
   {
      alert("BUG: could not get Form object "+frmname);
      return;
   }
}

Validator.prototype.addValidation = add_validation;
Validator.prototype.setAddnlValidationFunction = set_addnl_vfunction;
Validator.prototype.clearAllValidations = clear_all_validations;
Validator.prototype.setIgnoreValidation = set_IgnoreValidation;
Validator.prototype.alertMsgs = alert_Msgs;
Validator.prototype.throwError = throw_Error;

function set_IgnoreValidation(itemname, b)
{
   var itemobj = document.getElementById(itemname);
   itemobj.ignoreValidation = b;
}
function add_validation(itemname,descriptor,errstr)
{
   //alert(itemname); POR AQUI PASA
   if(!this.formobj)
   {
      alert("BUG: the form object is not set properly");
      return;
   }//if
   //var itemobj = this.formobj[itemname];
   var itemobj = document.getElementById(itemname);
   if(!itemobj)
   {
      alert("BUG: Could not get the input object named: "+itemname);
      return;
   }
   if(!itemobj.validationset)
   {
      itemobj.validationset = new ValidationSet(itemobj);
   }
   itemobj.ignoreValidation = false;
   itemobj.validationset.add(descriptor,errstr);
}
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 clearElementValidation( aElement )
{
   aElement.validationset = null;
}
function alert_Msgs()
{
   this.alerter = true;
}
function throw_Error( strError )
{
   if (this.alerter)
      alert ("--->"+strError);
   this.errorList[0] = "strError";
}






function form_submit_handler()
{
   for(var itr=0;itr < this.elements.length;itr++)
   {
      if(this.elements[itr].validationset && !this.elements[itr].validationset.validate( this.errorList ))
      {
			
         return false;
      }
   }
   if(this.addnlvalidation)
   {
      str =" var ret = "+this.addnlvalidation+"()";
      eval(str);
      if(!ret) return ret;
   }
   return true;
}



function ValidationDesc(inputitem,desc,error)
{
   this.desc=desc;
   this.error=error;
   this.itemobj = inputitem;
   this.validate=vdesc_validate;
}
function vdesc_validate( errorList )
{
   if (!this.itemobj.ignoreValidation)
   {
      if(!V2validateData(this.desc,this.itemobj,this.error, errorList))
      {
         //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( errorList )
{
   for(var itr=0;itr<this.vSet.length;itr++)
   {
      if(!this.vSet[itr].validate(errorList))
      {
         return false;
      }
   }
   return true;
}
function validateEmailv2(e)
{
   if(e.length <= 0)
   {
      return true;
   }
   var splitted = e.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, errorList) 
{ 
   var epos = strValidateStr.search("=");
   var  command  = "";
   var  cmdvalue = "";
    
   var result = true;
   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
            errorList[errorList.length] = strError;
            result = 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
            errorList[errorList.length] = strError; //+ "\n[Current length = " + objValue.value.length + " ]";
            result = 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
            errorList[errorList.length] = strError; //+ "\n[Current length = " + objValue.value.length + " ]";
            result = false;
         }//if
         break;
      }//case minlen
      case "diferentto":
{ 
         if(objValue.value ==  cmdvalue)
         {
            if(!strError || strError.length ==0)
            {
               strError = objValue.name + " : " + cmdvalue + " characters minimum  ";
            }//if
            errorList[errorList.length] = strError; //+ "\n[Current length = " + objValue.value.length + " ]";
            result = false;
         }//if
         break;
      }//case minlen
      case "equalto":
{ 
         if(objValue.value !=  cmdvalue)
         {
            if(!strError || strError.length ==0)
            {
               strError = objValue.name + " : " + cmdvalue + " characters minimum  ";
            }//if
            errorList[errorList.length] = strError; //+ "\n[Current length = " + objValue.value.length + " ]";
            result = 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
            errorList[errorList.length] = strError + "\n [Error character position " + eval(charpos+1)+"]";
            result = 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
            errorList[errorList.length] = strError;// + "\n [Error character position " + eval(charpos+1)+"]";
            result = 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
            //				errorList[errorList.length] = strError + "\n [Error character position " + eval(charpos+1)+"]";
            errorList[errorList.length] = strError;
            result = 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
            errorList[errorList.length] = strError + "\n [Error character position " + eval(charpos+1)+"]";
            result = false;
         }//if
         break;
      }
      case "ema":
{ 
         if(!validateEmailv2(objValue.value))
         {
            if(!strError || strError.length ==0)
            {
               strError = objValue.name+": Enter a valid Email address ";
            }//if
            errorList[errorList.length] = strError;
            result = false;
         }//if
         break;
      }//case email
      case "lt":
      case "lessthan":
{ 
         if(isNaN(objValue.value))
         {
            errorList[errorList.length] = objValue.name+": Should be a number ";
            result = false;
         }//if
         if(eval(objValue.value) >=  eval(cmdvalue))
         {
            if(!strError || strError.length ==0)
            {
               strError = objValue.name + " : value should be less than "+ cmdvalue;
            }//if
            errorList[errorList.length] = strError;
            result = false;
         }//if
         break;
      }//case lessthan
      case "gt":
      case "greaterthan":
{ 
         if(isNaN(objValue.value))
         {
            errorList[errorList.length] = objValue.name+": Should be a number ";
            result = false;
         }//if
         if(eval(objValue.value) <=  eval(cmdvalue))
         {
            if(!strError || strError.length ==0)
            {
               strError = objValue.name + " : value should be greater than "+ cmdvalue;
            }//if
            errorList[errorList.length] = strError;
            result = 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
               errorList[errorList.length] = strError;
               result = 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
            errorList[errorList.length] = strError;
            result = false;
         }
         break;
      }//case dontselect
      case "notFutureDate":
      {
         var today = new Date();
         var day = objValue.value.substr(0,2);
         var month = objValue.value.substr(3,2) - 1;
         var year = objValue.value.substr(6);
         var fixedDate = new Date();
         fixedDate.setFullYear(year);
         fixedDate.setMonth(month);
         fixedDate.setDate(day);
         if( fixedDate > today )
         {
            if(!strError || strError.length ==0)
            {
               strError = objValue.name+": Please Select one option ";
            }//if
            errorList[errorList.length] = strError;
            result = false;
         }
         break;
      }
   }//switch
   return result;
}
/*
	Copyright 2003 JavaScript-coder.com. All rights reserved.
*/