var ftEdit = 1;
   var ftSelect = 2;
	var ftCheckBox = 3;
	var ftCheckBoxGroup = 4;

	var ffNone = 0;
	var ffText = 1;
	var ffEMail = 2;
	var ffZipcode = 3;

	function validateZipcode(value) {
       var re = /^\d{5}([\-]\d{4})?$/;
       return (re.test(value));
    }

    function validateEmail(value) {
       var re = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
       return (re.test(value));
    }

	function validateField(form, fieldName, fieldType, fieldFormat, required, passed, reqErr, formatErr, isSilent) {
       var i;
	   var rv = true;
	   var f = document.getElementById(fieldName);
	   var fr = document.getElementById(fieldName + "_err");

       var noUpdateErr = isSilent;
	   if (noUpdateErr == null) noUpdateErr = false;
		 
       var strReqErr = reqErr;
	   var strFormatErr = formatErr;
   
       if (strReqErr == null) strReqErr = "Required";
	   if (strFormatErr == null) strFormatErr = "Incorrect format";

       switch (fieldType) {
          case ftEdit:  
		     if (f.value == "" && required == true) {
				if (!noUpdateErr) fr.innerHTML = strReqErr;
				rv = false;
 	         } else {
				if (fieldFormat != ffNone) {
				   if (required == true || (required == false && f.value != "")) {
				      switch (fieldFormat) {
                         case ffEMail:
					        rv = validateEmail(f.value);
					        break;
						 case ffZipcode:
						    rv = validateZipcode(f.value);
							break;
				      }

				      if (rv == false) {
				         if (!noUpdateErr) fr.innerHTML = strFormatErr;
				      }
				   }
				}
			 }
			 break;
	      case ftSelect:
		     if ( (f.value == "0" || f.value == "") && required == true) {
				if (!noUpdateErr) fr.innerHTML = strReqErr;
				rv = false;
		     }   
			 break;
		  case ftCheckBoxGroup:
			 var require = fieldFormat, checked = 0, e, i = 0;
			 while ( e = form.elements[i++] ) {
			    if (e.type == "checkbox" && e.name == fieldName && e.checked)
				   checked++;
		     }
                          
             rv = (require <= checked);
             if (rv == false ) 
			    if (!noUpdateErr) fr.innerHTML = strReqErr;

			 break;
       }

       if (!noUpdateErr) {
          if (rv == false) {
             if (fieldType == ftEdit || fieldType == ftSelect)
                f.setAttribute("class", "input_err");
   		      fr.style.visibility = "visible";
	      } else {
   	         if (fieldType == ftEdit || fieldType == ftSelect)
                f.setAttribute("class", "input");                
             fr.style.visibility = "hidden";
	      }
	   }

       if (rv == true && passed == false)  {
	      rv = false
       }

	   return rv;

	}


   if(!Array.indexOf){
	    Array.prototype.indexOf = function(obj){
	        for(var i=0; i<this.length; i++){
	            if(this[i]==obj){
	                return i;
	            }
	        }
	        return -1;
	    }
	}
