/*
  -------------------------------------------------------------------------
  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 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/
  -------------------------------------------------------------------------  
*/

/*
  zip code validation modified to include zip+4 [GRC]
 */

function Validator(frmname) {
  this.formobj=document.forms[frmname];
  //  alert("init Validator for "+this.formobj);  // Debug
  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;
  }
  document.getElementById("signUp").style.display = 'none';
  //  alert("submit_handler returning true.");  //Debug
  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: Could not 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 validatePhoneNo(phn) {
  if (phn.length == 0) return true; // if not required, else get it right
  var opt = /(optional)/;
  if ( phn.match(opt) ) return true;
  var myregexp = /^\D*(\d\d\d)[-\s]+(\d\d\d\d)$/;
  if ( parsed = phn.match(myregexp) ) {
    strError = 'Phone: Area Code Required';
    return strError;
  }
  
  myregexp = /^\(?(\d\d\d)\)?\s+(\d\d\d)[-\s]+(\d\d\d\d)$/
    if ( parsed = phn.match(myregexp) ) {
      if (parsed[2] == "555") {
        return false;
      }
      return true;
    } else {
      strError = 'Phone: Enter number as "(908) 555-1212"';
      return strError;
    }
  return false     // should never get here.
    }

function validateZipCode(zipC) {
  var zipExpr = /^(\d{5})$/;
  var zipPlus = /^(\d{5})\s*-\s*(\d{4})$/;
  if (zipC.search(zipExpr) != -1) {
    return true;
  } else if (zipC.search(zipPlus) != -1){
    return true;
  } else {
    strError = 'invalid zip code: '+zipC;
    return strError;
  }
  return false;     // should never get here.
}

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 "nameString": 
      { 
	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\n [name@mailhost] "; 
	      }//if                                               
	    alert(strError); 
	    return false; 
	  }//if 
	break; 
      }//case email 
    case "phoneNo": 
      { 
	strError = validatePhoneNo(objValue.value);
	if(!strError || strError.length ==0) { 
	  strError = objValue.name+": Enter a valid phone number "; 
	}//if
	if(strError && strError.length > 0) {
	  alert(strError);
	  return false; 
	}//if 
	break; 
      }//case phoneNo 
    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 
    case "zipCode": 
      {
	strError = validateZipCode(objValue.value);
	if(!strError || strError.length ==0) { 
	  strError = objValue.name+": Enter a valid Zip Code "; 
	}//if
	if(strError && strError.length > 0) {
	  alert(strError);
	  return false; 
	}//if 
	break; 
      }//case zipCode 
    }//switch 
  return true; 
}
/*
  Copyright 2003 JavaScript-coder.com. All rights reserved.
*/