// 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;
}

var EMAIL_FILTER = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;

// 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 have a "required" 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.required) {
      // first check if the field is empty
      if ((!e.value) || (e.value == "") || isblank(e.value)) {
        empty_fields += "\n          " + e.caption;
        continue;
      }
    }
    // Now check for fields that are supposed to be numeric.
    if (e.value && (e.numeric || e.min || e.max)) {
      var v = parseFloat(e.value);
      if (isNaN(v) || ((e.min) && (v < e.min)) || (e.max && (v > e.max))) {
        errors += "- The field " + e.caption + " must be a number";
        if (e.min)
          errors += " that is greater than " + e.min;
        if (e.max && e.min)
          errors += " and less than " + e.max;
        else if (e.max)
          errors += " that is less than " + e.max;
        errors += ".\n";
      }
    } else if (e.email) {
      if (!EMAIL_FILTER.test(e.value))
        errors += 'Email address format is invalid\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;
}

function limitText(event, limitField, limitNum) {
  var keycode = event.keycode || event.which;
  if (limitField.value.length >= limitNum && keycode > 47) {
    limitField.value = limitField.value.substr(0, limitNum);
    return false;
  }
  return true;
}


