function InRange(field, minlen, maxlen) {

  // This function checks to see if the size of the given field falls
  // inside the minlen and maxlen value. If it doesn't an appropriate
  // error message is issued and the function returns false. The field
  // should be sent as an object

  returnvalue = true;
  if ((field.value.length < minlen) || (field.value.length > maxlen)) {
    returnvalue = false;
    if (minlen == maxlen)
      alert("Form field " + field.name + " must have exactly " + maxlen + " characters")
    else {
      if (minlen == 0)
        alert("Form field " + field.name + " must not exceed " + maxlen + " characters")
      else 
        alert("Form field " + field.name + " must have at least " + minlen + " characters but no more than " + maxlen + " characters.");
    }
  }
  return returnvalue;
}

//----------------------------------------------------------------

function AllNumbers(field) {

  // This functions checks a field and makes sure that field contains
  // only the digits 0-9. Blanks are not allowed. The field should be
  // sent as an object.

  myString = String(field.value);
  allnumeric = true;
  for (i=0;i<myString.length;i++) {
    if (isNaN(myString.substr(i,1)))
      allnumeric = false;
  }
  if (!(allnumeric))
    alert("Form field " + field.name + " must contain the numbers 0-9 only.");
  return allnumeric;
}

//----------------------------------------------------------------

function NumericFilledField(field, minlen, maxlen) {

  // This function checks to make sure a field contains only
  // numbers and the number of digits falls between minlen and maxlen.
  // The field should be sent as an object.

  okay=InRange(field, minlen, maxlen);
  if (okay) {
    okay=AllNumbers(field);
  }
  return okay;
}

//----------------------------------------------------------------

function isEmail(argvalue) {

  // This function checks the argument to see whether it meets
  // valid EMail conventions. Send only the email address, not the
  // form field object, as a String, i.e. field1.value.

  returnvalue=true; // Assume a valid email address was sent

  if (argvalue.indexOf(" ") != -1) {
    returnvalue=false;
  }
  else if (argvalue.indexOf("@") == -1) {
    returnvalue=false;
  }
  else if (argvalue.indexOf("@") == 0) {
    returnvalue=false;
  }
  else if (argvalue.indexOf("@") == (argvalue.length-1)) {
    returnvalue=false;
  }

  arrayString = argvalue.split("@"); //(works only in netscape3 and above.)
  //var retSize = customSplit(argvalue, "@", "arrayString");

  if (arrayString.length == 1) {
    returnvalue=false;
  }
  else if (arrayString[1].indexOf(".") == -1) {
    returnvalue=false;
  }
  else if (arrayString[1].indexOf(".") == 0) {
    returnvalue=false;
  }
  else if (arrayString[1].charAt(arrayString[1].length-1) == ".") {
    returnvalue=false;
  }

  if (returnvalue == false)
    alert("Your email address is incorrectly formatted. Please reenter your email address.");

  return returnvalue;

}

//----------------------------------------------------------------

function CheckForm(form) {

  // Note: this function will only work correctly if you named the fields
  // correctly as per the specification and code your form onSubmit event according
  // to the proper syntax.

  submit_ok=true;
  if (InRange(form.CreditCardHolder,1,30) == false)
    submit_ok = false;
  if (submit_ok && NumericFilledField(form.CreditCardNumber, 16, 16) == false)
    submit_ok = false;
  if (submit_ok && AllNumbers(form.Amount) == false)
    submit_ok = false;
  if (submit_ok && isEmail(form.EMail.value) == false)
    submit_ok = false;
  return submit_ok;
         
}
