
var rex=/_/;

var arrvalidations=new Array("_date","_email","_zip","_phone","_cc","_password");

function getvalidation(str){
  var v="";
  for(z=0;z<arrvalidations.length;z++){
    if(str.indexOf(arrvalidations[z])>-1){v=arrvalidations[z].substring(1,arrvalidations[z].length);break;}
  }
  return v;
}



function doSubmit(obj){
  var isdefined=eval("typeof Form"+obj.name);
  if(isdefined=="undefined"){alert("ERROR:\nThe Form:"+obj.name+"\nhas not been defined in the fieldlist");return false;};
  arrBad=new Array();
  arrBadM=new Array();
  var arrthisf=eval("Form"+obj.name);
  var msg_ = "";
  //alert(arrthisf.length);
  
  for(i=0;i<arrthisf.length;i++){
    //alert(arrthisf[i]);
	var thisval=getvalidation(arrthisf[i]);
	var thisreq=(arrthisf[i].indexOf("_req")>-1)?1:0;
	if (thisval==""){thisreq=1;}
	var b=rex.test(arrthisf[i]);
    var thisfield=(b)?arrthisf[i].substring(0,arrthisf[i].indexOf("_")):arrthisf[i];
	var thismsg=(eval("obj."+thisfield+".title")!="")?eval("obj."+thisfield+".title"):eval("msg_"+thisval);
	if(!thismsg){thismsg=thisfield;}
	//alert("Field Name:"+thisfield+"\nValidation:"+thisval+"\nRequired:"+thisreq+"\nMessage:"+thismsg);
	if (eval("obj."+thisfield+".length")!= undefined && eval("obj."+thisfield+".type")!="select-one"){
	  var field=(eval("obj."+thisfield+"[0]"));
	  if(eval("obj."+thisfield+"[0].title")){thismsg=eval("obj."+thisfield+"[0].title")}
	}else{
	  var field=eval("obj."+thisfield);
	}
	//alert(field.name);
	doSub(field,thisval,thismsg,thisreq,obj);
  }
  var out=getoutput();
  if(out != ""){alert(out);return false}else{obj.submit();}
  
}

function doSub(f,v,m,r,form){
  var thisValue="";
  //alert(f.type);
  if(f.type=="checkbox" || f.type=="radio"){
    var theobj=eval(form.name+"."+f.name);
	if (theobj.length){
	  //alert(theobj.length);
	  for(z=0;z<theobj.length;z++){
	    if(theobj[z].checked){thisValue=theobj[z].value;break}
	  }
	}else{
	  thisValue=(theobj.checked)?theobj.value:"";
	}
  }else{
     thisValue=f.value;
  }
  var bool=(thisValue=="" || thisValue== null)?true:false;
  
  if(r&&bool){
	  arrBad[arrBad.length]=m;
	  arrBadM[arrBadM.length]="("+valempty+")";
	  return;
  }else{
    if(!bool&& (v!="")){
      var isV=isValid(thisValue,v,f,form);
      if(!isV){
	    arrBad[arrBad.length]=m;
        arrBadM[arrBadM.length]="("+valwrongentry+")";
      }
	}
  }
}


function isValid(fieldValue,valType,fld,o){
  var bool=false;
  //alert(fieldValue+" \nvalidation:"+valType+"\nField:"+fld.name);
  switch (valType)
  {
  case "zip":
    bool=validateUSZip(fieldValue);
	break;
  case "phone":
    bool=validateUSPhone(fieldValue);
    break;
  case "email":
    bool=validateEmail(fieldValue);
	break;
  case "date":
    bool=validateUSDate(fieldValue);
	break;
  case "password":
    var pass2=o.password2.value;
	bool=validatePassword(fieldValue,pass2);
	break;
  case "cc":
	cardtype=o.CCType.value;
	bool=isCardMatch(cardtype,fieldValue);
	var CCyear=o.ExpYear;
    var CCmonth=o.ExpMon;
    var CCyearValue=CCyear.options[CCyear.options.selectedIndex].value;
    var CCmonthValue=CCmonth.options[CCmonth.options.selectedIndex].value;
    var bool2=validateExpiry(CCyearValue,CCmonthValue);
	if(!bool2){arrBad[arrBad.length]=valccmsg1;arrBadM[arrBadM.length]="("+valccmsg2+")";};
	break;
  default:
    bool=validateNotEmpty(fieldValue);
	break;
  }
  return bool;
}

function getoutput(){
  if(arrBad.length>0){
    var str="";
    for (i=0;i<arrBad.length;i++){
      str+=arrBad[i]+" "+arrBadM[i]+"\n";
	}
	return valtitle+":\n"+str;
  }else{
    return "";
  }
}

function IsDigit(){
  return ((event.keyCode >= 48) && (event.keyCode <= 57))
}
