
function validateForm(theForm) 
{
  if ( navigator.appName == 'Microsoft Internet Explorer' )
   {
    var elArr = theForm.elements;
     for(var i = 0; i < elArr.length; i++)
      with(elArr[i])
       {
        var v = elArr[i].validator;
	if(!v) continue;
	var thePat = PatternsDict[v];
	var gotIt = thePat.exec(value);
	if(!gotIt)
	 {
    	  alert(name + ": " + value + PatternsExpl[v]); return false;
	 }
       }
     return true;
    }
}


function validate999(theForm){      // return true if all is well
 var elArr = theForm.elements;       // get all elements of the form into array
 for(var i = 0; i < elArr.length; i++)
  with(elArr[i]){                    // for each element of the form...
   var v = elArr[i].validator;       // get validator, if any
   if(!v) continue;                  // no validator property, skip
   var thePat = PatternsDict[v];     // select the validating regular expr
   var gotIt = thePat.exec(value);   // run it on value of elArr[i]
   if(gotIt){
    alert(name + ": " + PatternsExpl[v]); return false;}
  } return true;
}

var PatternsExpl = new Object();
var PatternsDict = new Object();

  // matches e-mail addresses anything@anything.anything
PatternsDict.mailPat = /^((\w|\.|-)*\@(\w|\.|-)*\.\w{2,3}){1}$/;
PatternsExpl.mailPat = " must be a valid e-mail address like you@domain.com"

  // matches e-mail addresses anything@anything.anything or blank
PatternsDict.optmailPat = /^((\w|\.|-)*\@(\w|\.|-)*\.\w{2,3})?$/;
PatternsExpl.optmailPat = " may be a valid e-mail address like you@domain.com or blank"

  // matches zip codes
PatternsDict.zipPat = /^((\w{5}(-\w{4})?)|(\w{6})){1}$/;
PatternsExpl.zipPat = " must be a zip code like 12345 or 12345-6789 or A2E0R8"

  // matches zip codes or blank
PatternsDict.optzipPat = /^((\w{5}(-\w{4})?)|(\w{6}))?$/;
PatternsExpl.optzipPat = " may be a zip code like 12345 or 12345-6789 or A2E0R8 or blank"

  // matches phone numbers
PatternsDict.phonePat = /^([0-9a-zA-Z\-\(\)\ ]+){1}$/;
PatternsExpl.phonePat = " must be a phone number"

  // matches phone numbers or blank
PatternsDict.optphonePat = /^([0-9a-zA-Z\-\(\)\ ]+)?$/;
PatternsExpl.optphonePat = " must be a phone number or blank"

  // matches letters and numbers
PatternsDict.alphanumPat = /^[a-zA-Z0-9][a-zA-Z0-9\-\#]*$/;
PatternsExpl.alphanumPat = " must be letters or numerals"

  // matches letters and numbers - can be blank
PatternsDict.optalphanumPat = /^[a-zA-Z0-9\-\#]*$/;
PatternsExpl.optalphanumPat = " must be letters or numerals or blank"



  // matches any character or blank
//PatternsDict.anyPat = /^([0-9a-zA-Z=\ \!\@\#\$\%\^\&\*\+\`\[\]\\\{\}\|\/\~\-\_\'\,\.\;\:\(\)\<\>\?\"]*)$/;
PatternsDict.anyPat = /^([\s\S\w\W]*)$/;
PatternsExpl.anyPat = " may not contain strange characters"

  // matches any integer
PatternsDict.integerPat = /^(-)?([0-9]+){1}$/;
PatternsExpl.integerPat = " must be an integer like 123, 7112, or 9."

  // matches any integer or blank
PatternsDict.optintegerPat = /^(-)?([0-9]+)?$/;
PatternsExpl.optintegerPat = " must be an integer like 123, 7112, or 9."

  // matches guestID (letters and numbers, at least one letter) - at least one letter long
PatternsDict.guestPat = /^[a-zA-Z0-9][a-zA-Z0-9]*$/;
PatternsExpl.guestPat = " must be an alphanumeric string like 111a or testguest or test123 - No Spaces"

  // matches name (letters only and space and single quote) - at least one character long
PatternsDict.namePat = /^([A-Za-z\ ]*')*[a-zA-Z][a-zA-Z\ \-]*$/;
PatternsExpl.namePat = " must be all letters only"

  // matches name (letters only and space, single quote, dash) - can be blank
PatternsDict.optnamePat = /^(([A-Za-z]*')*[a-zA-Z][a-zA-Z\ \-]*)?$/;
PatternsExpl.optnamePat = " must be all letters only"

  // matches 1-30-00 or 1/30/00 but not 30-1-00
PatternsDict.datePat = /^([1-9]|0[1-9]|1[0-2])[\-\/]([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])[\-\/](20\d{2}|\d{2})$/;
PatternsExpl.datePat = " must be a date mm-dd-yy"

  // matches 1-30-00 or 1/30/00 but not 30-1-00
PatternsDict.optdatePat = /^(([1-9]|0[1-9]|1[0-2])[\-\/]([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])[\-\/](20\d{2}|\d{2}))*$/;
PatternsExpl.optdatePat = " must be a date mm-dd-yy"

  // matches any integer + . + any integer - for lat-lon minutes
PatternsDict.minutePat = /^[0-9]*\.?[0-9]*$/;
PatternsExpl.minutePat = " must be an integer or decimal like 123 or 33.42"

  // matches a string ending in .gif or .jpg
PatternsDict.graphicPat = /^.*\.(G|g|J|j)(I|i|P|p)(F|f|G|g)$/;
PatternsExpl.graphicPat = " must end in .GIF or .JPG"

  // matches a string ending in .gif or .jpg or empty
PatternsDict.agraphicPat = /^(.*\.(G|g|J|j)(I|i|P|p)(F|f|G|g))?$/;
PatternsExpl.agraphicPat = " must end in .GIF or .JPG"

  // matches 999
PatternsDict.ninePat = /^[9][9][9]$/;
PatternsExpl.ninePat = " You must choose a value"

  // matches any integer chosen in a SELECT statement
PatternsDict.chooseintPat = /^(-)?[0-9]([0-9])*$/;
PatternsExpl.chooseintPat = " a value must be selected."

  // matches $17.23 or $14,281,545.45 or ...
PatternsDict.currencyPat = /^\$\d{1,3}(,\d{3})*\.\d{2}$/;
PatternsExpl.currencyPat = " must be a dollar value like $123 or $75.44"

  // matches $17 or $14,281,545 or ...
PatternsDict.dollarPat = /^\$?\d*$/;
PatternsExpl.dollarPat = " must be a dollar value like $123 or $75"

  // matches 12:34 but also 75:83
PatternsDict.timePat = /^\d{2}:\d{2}$/;
PatternsExpl.timePat = " must be a time value like 5:00 or 12:35"

  // matches 5:04 or 12:34 but not 75:83
PatternsDict.timePat2 = /^([1-9]|1[0-2]):[0-5]\d$/;
PatternsExpl.timePat2 = " must be a time value like 5:00 or 12:35"


