var textElems = new Array();
var dateElems = new Array();
var numberElems = new Array();
var ccElems = new Array();
var selectElems = new Array();
var selectCountElems = new Array(); var select_count_min = 1;
var radioElems = new Array();
var emailElems = new Array();
var oForm = null;

function validate_form()
 { var thisErrMsg = "";
   var errMsg = "";
   var test = true;
   var ret = true;

   // Check text fields.
   thisErrMsg = "";
   for (i=0; i < textElems.length; i++)
    { test = validate_text_field(oForm, textElems[i]);
      if (!test)
       { thisErrMsg = thisErrMsg + "- " + textElems[i] + "\n";
         ret = false;
       }
    }
   if (thisErrMsg != "") { errMsg = errMsg + "Please provide a value for the following required field(s):\n" + thisErrMsg + "\n"; }
   
   // Check date fields.
   thisErrMsg = "";
   for (i=0; i < dateElems.length; i++)
    { test = validate_date_field(oForm, dateElems[i]);
      if (!test)
       { thisErrMsg = thisErrMsg + "- " + dateElems[i] + "\n";
         ret = false;
       }
    }
   if (thisErrMsg != "") { errMsg = errMsg + "Please provide a valid date for the following required field(s):\n" + thisErrMsg + "\n"; }
   
   // Check numeric fields.
   thisErrMsg = "";
   for (var i=0; i < numberElems.length; i++)
    { test = validate_number_field(oForm, numberElems[i]);
      if (!test)
       { thisErrMsg = thisErrMsg + "- " + numberElems[i] + "\n";
         ret = false;
       }
    }
   if (thisErrMsg != "") { errMsg = errMsg + "Please provide a numeric value for the following required field(s):\n" + thisErrMsg + "\n"; }
   
   // Check credit card fields.
   thisErrMsg = "";
   for (var i=0; i < ccElems.length; i++)
    { test = validate_cc_field(oForm, ccElems[i]);
      if (!test)
       { thisErrMsg = thisErrMsg + "- " + ccElems[i] + "\n";
         ret = false;
       }
    }
   if (thisErrMsg != "") { errMsg = errMsg + "Please provide a valid credit card number for the following required field(s):\n" + thisErrMsg + "\n"; }
   
   // Check select list.
   thisErrMsg = "";
   for (var ii=0; ii < selectElems.length; ii++)
    { test = validate_select_list(oForm, selectElems[ii]);
      if (!test)
       { thisErrMsg = thisErrMsg + "- " + selectElems[ii] + "\n";
         ret = false;
       }
    }
   if (thisErrMsg != "") { errMsg = errMsg + "Please select a value for the following required field(s):\n" + thisErrMsg + "\n"; }

   // Check select list count.
   thisErrMsg = "";
   for (var ii=0; ii < selectCountElems.length; ii++)
    { test = validate_select_count_list(oForm, selectCountElems[ii]);
      if (!test)
       { thisErrMsg = thisErrMsg + "- " + selectCountElems[ii] + "\n";
         ret = false;
       }
    }
   if (thisErrMsg != "") { errMsg = errMsg + "Please select a value for the following required field(s):\n" + thisErrMsg + "\n"; }

   // Check radio buttons.
   thisErrMsg = "";
   for (var ii=0; ii < radioElems.length; ii++)
    { test = validate_radio_group(oForm, radioElems[ii]);
      if (!test)
       { thisErrMsg = thisErrMsg + "- " + radioElems[ii] + "\n";
         ret = false;
       }
    }
   if (thisErrMsg != "") { errMsg = errMsg + "Please select an option for the following radio group(s):\n" + thisErrMsg + "\n"; }

   // Check email fields.
   thisErrMsg = "";
   for (var ii=0; ii < emailElems.length; ii++)
    { test = validate_email_field(oForm, emailElems[ii]);
      if (!test)
       { thisErrMsg = thisErrMsg + "- " + emailElems[ii] + "\n";
         ret = false;
       }
    }
   if (thisErrMsg != "") { errMsg = errMsg + "Please provide a valid email address for the following field(s):\n" + thisErrMsg + "\n"; }

   if(ret)
    { return true; }
   else
    { alert(errMsg); return false; } 
 }

function validate_text_field(form, field)
 { var test = true;
 
   if(eval("form." + field + ".value") == "")
    { return false; }
   else
    { var checkOK = new String("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-ÄSÎsÏÙËçåÌ€®‚éƒæèíêëìÜ„ñîïÍ…¯ôòó† Þ§ˆ‡‰‹ŠŒ¾Ž‘“’”•Ý–˜—™›š¿œžŸàß \t\r\n\f\"';:<>,?/\\|~`!@#$%^&*()-_+={}[] 0123456789.");
      var checkStr = new String(eval("form." + field + ".value"));

      for(var i=0; i < checkStr.length; i++)
       { if(checkOK.indexOf(checkStr.charAt(i)) == -1)
          { test = false; }
       }
       
      return test;
    }
 }

function validate_date_field(form, field)
 { var test = true;
 
   if(eval("form." + field + ".value") == "")
    { return false; }
   else
    { var dateStr = new String(eval("form." + field + ".value"));

      for(var i=0; i < checkStr.length; i++)
       { if(checkOK.indexOf(checkStr.charAt(i)) == -1)
          { test = false; }
       }
       
      return test;
    }
 }

function validate_number_field(form, field)
 { var test = true;
 
   if(eval("form." + field + ".value") == "")
    { return false; }
   else
    { var intNumber = Number(eval("form." + field + ".value"));
		  if (isNaN(intNumber))
			 { return false; }
			else
			 { return true; }
    }
 }

function validate_cc_field(form, field)
 { var test = true;
   var cc_number = eval("form." + field + ".value");
	 
	 // Check if variable is empty.
	 if(cc_number == "")
	  { test = false; }

   // Check for 16 digits.
	 if (test)
	  { if(cc_number.length != 16)
       { test = false; }
		}
		
	 // Make sure all digits are numeric.
	 if (test)
	  { var intNumber = Number(cc_number);
			if (isNaN(intNumber))
			 { test = false; }
			else
			 { test = true; }
	  }
		
	 return test;
 }

function validate_radio_group(form, field)
 { var radio = eval("form." + field);
   var set = false;

   for(var i=0; i < radio.length; i++)
    { if(radio[i].checked)
       { set = true; }
    }

   if (set) { return true; } else { return false; }
 }

function validate_select_list(form, field)
 { var list = eval("form." + field);
   var set = false;

   var index = list.selectedIndex;
   var value = (index > -1) ? list.options[index].value : "";

   if (value != "")
     { set = true; }

   if (set) { return true; } else { return false; }
}

function validate_select_count_list(form, field)
 { var list = eval("form." + field);
   var set = false;

   var count = list.length;
   if (count > select_count_min)
     { set = true; }

   if (set) { return true; } else { return false; }
}

function validate_email_field(form, field)
 { var test = true;
 
   if(eval("form." + field + ".value") == "")
    { return false; }
   else
    { var checkOK = new String("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~@-_0123456789.");
      var checkStr = new String(eval("form." + field + ".value"));

      for(var i=0; i < checkStr.length; i++)
       { if(checkOK.indexOf(checkStr.charAt(i)) == -1)
          { test = false; }
       }
       
      // @ symbol check.
      if(test)
       { if(checkStr.indexOf("@") < 1) { test = false; } }
 
      // @ symbol check (make sure there is only 1).
      if(test)
       { if(checkStr.lastIndexOf("@") != checkStr.indexOf("@")) { test = false; } }

      // . check (if exists).
      if(test)
       { if(checkStr.indexOf(".") < 1) { test = false; } }

      // . check (if there is at least 1 letter after ".").
      if(test)
       { if(checkStr.lastIndexOf(".") == (checkStr.length - 1)) { test = false; } }

      // . check (if there is at least 1 letter between "@" and ".").
      if(test)
       { if(checkStr.lastIndexOf(".") < (checkStr.indexOf("@") + 2)) { test = false; } }

      return test;
    }
 }

function getForm(formName, layer, nest)
 { if (is.ns4)
   { var nsDocObj;
     if (!layer) { nsDocObj = document; } else { nsDocObj = eval(nest + doc + layer + htm); }

     for(i=0; i < nsDocObj.forms.length; i++)
      { if (nsDocObj.forms[i].name == formName)
         { return nsDocObj.forms[i]; }
      }
   }
  else
   { return eval("document." + formName); }
 }
