/**
 * DHTML email validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */
function echeck(str) {
   var at="@";
   var dot=".";
   var lat=str.indexOf(at);
   var lstr=str.length;
   var ldot=str.indexOf(dot);


   if (str.indexOf(at)==-1)          return false;
   if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr)    return false;
   if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr) return false;
   if (str.indexOf(at,(lat+1))!=-1)  return false;
   if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot)      return false;
   if (str.indexOf(dot,(lat+2))==-1) return false;
   if (str.indexOf(" ")!=-1)         return false;

   return true;     
}

/**
 * From: David Flanagan, JavaScript: The Definitive Guide, 4th Edition, O'Reilly & Assc., 2001
*/

// 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 != '   ')) return false;
    }

    return true;
}

// This is the function that performs form verification. It is 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, verify
    // that they are numbers and are in the right range. If the element has a
    // "numeric" property defined, verify that it is a number, but don't check
    // its 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.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";
                }
            }
            
            // Now check if the field is an email field, added by avl
            if(e.name == "email") {
               if(echeck(e.value) == false) errors += "- Not a valid E-Mail address.\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  = "_____________________________________________________________\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;
}