// $Id: pageval.js,v 1.3 2002/03/25 08:57:42 starrl Exp $
// 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 debug = "Field Name, type and Value\n";
	// debug += "______________________\n\n";
    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.elements.length; i++) {
        var e = f.elements[i];
        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)) {
                empty_fields += "\n          " + e.name;
                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";
                }
            }
        }
		else if ((e.type == "select-one") && !e.optional) {
			// Check to insure that we have a value 
			// Note: we jump through a couple of hoops here
			// to accomodate JS 1.0 and IE 3
			var ix = e.selectedIndex;
			var val = e.options[ix].value;
			var txt = e.options[ix].text;
			if ((val == null) || (val == "") || isblank(val)) {
				val = txt;
			}
			// debug += "  \n" + e.name + ", " + e.type + " : " + val;

			if ((val == null) || (val == "") || isblank(val)) {
                empty_fields += "\n          " + e.name;
                continue;
			}
		}
//		else if (!e.optional )
//		{
//			debug += "  \n" + e.name + ", " + e.type + " : " + e.value;
//			debug += " checked " + e.checked;
//		}
			
    }
	// alert(debug);

    // 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;
}
// 
// <!------------------------------------------------------------------------
//      Here's a sample form to test our verification with. Note that we
//      call verify() from the onSubmit() event handler, and return whatever
//      value it returns. Also note that we use the onSubmit() handler as
//      an opportunity to set properties on the form objects that verify()
//      will use in the verification process. 
// -------------------------------------------------------------------------->
// <!------------------------------------------------------------------------
// <FORM onSubmit="
//     this.firstname.optional = true;
//     this.phonenumber.optional = true;
//     this.zip.min = 0;
//     this.zip.max = 99999;
//     return verify(this);
// ">
// 
// First name: <INPUT TYPE=text NAME="firstname">
// Last name: <INPUT TYPE=text NAME="lastname"><BR>
// Address:<BR><TEXTAREA NAME="address" ROWS=4 COLS=40></TEXTAREA><BR>
// Zip Code: <INPUT TYPE=text NAME="zip"><BR>
// Phone Number: <INPUT TYPE=text NAME="phonenumber"><BR>
// <INPUT TYPE=submit>
// </FORM>
// -------------------------------------------------------------------------->
