/*
  -------------------------------------------------------------------------
  JavaScript Form Validator 
  Version 2.0.2
  Copyright 2003 JavaScript-coder.com. All rights reserved.
  You use this script in your Web pages, provided these opening credit
  lines are kept intact.
  The Form validation script is distributed free from JavaScript-Coder.com

  You may please add a link to JavaScript-Coder.com, 
  making it easy for others to find this script.
  Checkout the Give a link and Get a link page:
  http://www.javascript-coder.com/links/how-to-link.php

  You may not reprint or redistribute this code without permission from 
  JavaScript-Coder.com.
  
  JavaScript Coder
  It precisely codes what you imagine!
  Grab your copy here:
  http://www.javascript-coder.com/
  -------------------------------------------------------------------------  
*/

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.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 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))
 {
   alert( this.itemobj.name + " : Required Field" );
   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 + " ]"); 
        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 "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.
*/
