// This is the function that performs form verification.// Checks any text or text area element against pre-defined // 'optional', 'max' and 'min' properties.// Doesn't do radio buttons or check boxes.// NB - 'max' and 'min' refer to NUMERIC values.// NB - calls stripPrefixAndUnderscore to remove first 3 chars of field name - eg txtSurname -> Surname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];        if (((e.type == "text") || (e.type == "textarea") || (e.type == "password")) && !e.optional) {            // first check if the field is empty            if ((e.value == null) || (e.value == "") || isblank(e.value)) {                empty_fields += "\n          " + stripPrefixAndUnderscore(e.name,3);                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 " + stripPrefixAndUnderscore(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";                }            }        }    }    // 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 =  "";   // msg  = "______________________________________________________\n\n"   // msg += "Your form isn't quite complete yet.\n";   // msg += "Please sort out the issues below and try again:\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;}// Removes first chars from string// s = string to remove prefix from, n is no of chars to strip from stringfunction stripPrefixAndUnderscore(s, n){	noRemove = n;	stripped = s.substring(n,s.length);	str = stripped.replace(/_/, " ");		return str;}
