/*
FORM VALIDATION SCRIPT
version 1.3
written by John McGaraghan
Updated by John McGaraghan; 8.13.02   -- added radio button support
Updated by John McGaraghan; 11.21.02  -- debugged problems with non-verbose error reporting.
Updated by John McGaraghan; 01.17.02  -- error message override added

the document's <form> declaration tag should have an onSubmit parameter.  example:
    onSubmit="return formVal(this, this.emailfield.value);
where "emailfield" is the name of the form input field for an email address
if the second argument is not passed, no validation will be done on email.
alternatively, forms that are submitted by normal buttons should call the script manually.  example:  
    onClick="formVal(document.formname, document.formname.emailfield.value)?document.formname.submit():return false;"

To do other validation before running formVal, create your own preVal() function, called as before. example:
preVal(f,eml) {
  if( error conditions )    {
    alert("some error message");
    return false;
  } else {
    return formVal(f,eml);
  }
}

Select boxes should have a default "Select One" options at index 0 (with value="").

support for checkbox and textarea field types is not present at this time.

support for radio buttons added 8.13.02
  --checks to see if one of a group of like-named radio buttons is selected

support for simple/verbose error reporting added 8.13.02

*/

// set to true for verbose error reporting;
// comment out and set in individual pages to support both methods with one formval file, or simply set to false after including this file.
verbose=true; 

// populate an array like this with arrays of 'FieldName','ErrorLabel' pairs in the html file that calls this script
// in this way, you may use this single file to validate forms on different pages
// remember to omit the trailing comma after the last fieldname / errorcode pair array

/*
var reqFields=new Array(
  Array ('EmailAddress','Email Address'),
  Array ('PostalCode','Zip Code')
);
*/

var errOverRide; // set a value in your html page (after the inclusion of this file) to override the default error messaging
function formVal(f, eml)  {
var err=new Array();
  // loop through required fields
  for(i=0;i<reqFields.length;i++)  {
    // check for a selected option if field type is select
    if(eval("f."+reqFields[i][0]+".type") && eval("f."+reqFields[i][0]+".type.indexOf('elect')>0")) {
      if(eval("f."+reqFields[i][0]+".options[f."+reqFields[i][0]+".options.selectedIndex].value==''"))   {
        err.push(reqFields[i][1]);
      }
    // check for a checked option if field type is checkbox
    } else if(eval("f."+reqFields[i][0]+".type") && eval("f."+reqFields[i][0]+".type.indexOf('heckbox')>0")) {
      if(eval("!f."+reqFields[i][0]+".checked"))   {
        err.push(reqFields[i][1]);
      }
    // check for a selected option if field type is radio
    } else if(eval("f."+reqFields[i][0]+"[0]") && eval("f."+reqFields[i][0]+"[0].type.indexOf('adio')>0")) {
      var radioElements=eval("f."+reqFields[i][0]+".length");
      var radioChecked=false;
      for(n=0;n<radioElements;n++)   {
        if(eval("f."+reqFields[i][0]+"["+n+"].checked==true")) {
          radioChecked=true;
          break;
        }
      }
      if(!radioChecked) {
        err.push(reqFields[i][1]);
      }
      radioChecked=false;
    } else {
    // check for value in input fields
      if(eval("f."+reqFields[i][0]+".value==''")) {
        err.push(reqFields[i][1]);
      }
    }
  }
  if(err.length>0)  {
    var errText="";
    if(verbose) {
      if(!errOverRide) {
        errBase="Please provide information for the following fields:";
      } else {
        errBase=errOverRide;
      }
      errText="\n"+errBase+"\n  -";
      errText+=err.join(",\n  -");
    }
    alert("You are missing required information."+errText);
    return false;
  }
  if(eml) {
    return emailVal(eml);
  } else {
    return true;
  }
}

re = /\S*@.\S*\..\S*/
function emailVal(emailadr) {
  OK = re.test(emailadr);
  if (OK != true) {
    alert("Please make sure your email address is in the format yourname@company.com.");
    return false;
  } else {
    return true;
  }
}

