// A utility function that returns true if a string contains only 
// whitespace characters.
function isblank(s)
{
    for(var i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if ((c != ' ') && (c != '\n') && (c != '\t')) return false;
    }
    return true;
}

// This is the function that performs form verification. It will be invoked
// from the onSubmit() event handler. The handler should return whatever
// value this function returns.
function verify(f)
{
    var msg;
    var empty_fields = "";
    var errors = "";

    // Loop through the elements of the form, looking for all 
    // text and textarea elements that don't have an "optional" property
    // defined. Then, check for fields that are empty and make a list of them.
    // Also, if any of these elements have a "min" or a "max" property defined,
    // then verify that they are numbers and that they are in the right range.
    // Put together error messages for fields that are wrong.
    for(var i = 0; i < f.length; i++) {
        var e = f.elements[i];
//		alert(e.name + "  " + e.optional);
        if (((e.type == "text") || (e.type == "textarea")) && !e.optional) {
            // first check if the field is empty
            if ((e.value == null) || (e.value == "") || isblank(e.value)) {
			    if (isblank(e.title)) {
                   empty_fields += "\n          " + e.name;
				   }
				else {
				   empty_fields += "\n          " + e.title;
				}
                continue;
            }
        }
			
		// Now check for drop down selection boxes.
        if ((e.type == "select-one") && !e.optional) {
			if (e.selectedIndex == 0) {
			    errors += "- A selection must be made from the " + e.title + " dropdown box";
                errors += ".\n";
				continue;
			}
		}

        // Now check for fields that are supposed to be numeric.
        if (e.numeric || (e.min != null) || (e.max != null)) { 
            var v = parseFloat(e.value);
            if (isNaN(v) 
			   || ((e.min != null) && (v < e.min)) 
			   || ((e.max != null) && (v > e.max))) {
                    errors += "- The field " + e.name + " must be a number";
                    if (e.min != null) 
                        errors += " that is greater than " + e.min;
                    if (e.max != null && e.min != null) 
                        errors += " and less than " + e.max;
                    else if (e.max != null)
                        errors += " that is less than " + e.max;
                    errors += ".\n";
                    continue;
            }
		}        
    }

    // Now, if there were any errors, display the messages, and
    // return false to prevent the form from being submitted. 
    // Otherwise return true.
    if (!empty_fields && !errors) return true;

    msg  = "______________________________________________________\n\n"
    msg += "The form was not submitted because of the following error(s).\n";
    msg += "Please correct these error(s) and re-submit.\n";
    msg += "______________________________________________________\n\n"

    if (empty_fields) {
        msg += "- The following required field(s) are empty:" 
                + empty_fields + "\n";
        if (errors) msg += "\n";
    }
    msg += errors;
    alert(msg);
    return false;
}
// **********************************************************
// checkEmail
// **********************************************************
function checkEmail (strng) {
var error="";
if (strng == "") {
    error = "You must enter an email address.\n";
    return error
}

    var emailFilter=/^.+@.+\..{2,3}$/;
    if (!(emailFilter.test(strng))) { 
       error = "Please enter a valid email address.\n";
    }
    else {
//test email for illegal characters
       var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/
         if (strng.match(illegalChars)) {
          error = "The email address contains illegal characters.\n";
       }
    }
return error;    
}
// **********************************************************
// Validate State
// **********************************************************
// Modification Log 
// 07/18/2003 HCH Added additional valid codes (canadian, mexican) 
// **********************************************************
function ValidState(st)
{
var valid = new Object();

// State Abbreviation
valid.State = /^(|AK|AL|AR|AZ|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL|IN|KS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NB|NC|ND|NH|NJ|NM|NV|NY|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VA|VT|WA|WI|WV|WY)$/i;

var thePat = valid['State']; 
var gotIt = thePat.exec(st); 

   if(! gotIt){
      alert("Invalid state abbreviation.");                  
	  return false;
   }
   else
   {
   return true;
   }
}
function load(wn) {
var load = window.open(wn,'','scrollbars=yes,menubar=no,height=400,width=600,resizable=yes,toolbar=no,location=no,status=no');
}
