function validate()
{
  return validate_nonempty(document.getElementById("answer[name]"), "name") &&
         validate_email(document.getElementById("answer[email]")) &&
         validate_nonempty(document.getElementById("answer[priphone]"), "primary phone") &&
         validate_phone(document.getElementById("answer[priphone]")) &&
         validate_phone(document.getElementById("answer[secphone]")) &&
         validate_nonempty(document.getElementById("answer[address]"), "address") &&
         validate_nonempty(document.getElementById("answer[city]"), "city") &&
         validate_regexp(document.getElementById("answer[state]"), /^[A-Z]{2}$/, "state") &&
         validate_nonempty(document.getElementById("answer[postal]"), "postal code") &&
         validate_radio("answer[cdl]", "class A CDL") &&
         validate_radio("answer[owntruck]", "own your own truck") &&
         validate_radio("answer[owntrailer]", "own your own trailer") &&
         validate_radio("answer[hazmat]", "hazmat") &&
         validate_radio("answer[dui]", "DUI") &&
         validate_radio("answer[conviction]", "criminal convictions");
}

function trim(str)
{
  str = str.replace(/^\s+/, "");
  str = str.replace(/\s+$/, "");

  return str;
}

function validate_radio(elementnames, name)
{
  var options = document.getElementsByName(elementnames);

  for (var i = 0; i < options.length; i++)
    if (options[i].checked)
      return true;

  alert("Please select an option for the " + name + " question.");
  options[0].focus();

  return false;
}

function validate_phone(element, name)
{
  var value = element.value;

  if (value.length == 0)
    return true;

  value = value.replace(/[^0-9]/g, "");

  if (value.length != 10)
  {
    alert("Please enter a phone number with area code: XXX-XXX-XXXX");
    element.focus();
    return false;
  }

  return true;
}

function validate_regexp(element, regexp, name)
{
  var value = element.value;

  if (regexp.test(value))
    return true;

  alert("Please fill out the " + name + " field.");
  element.focus();

  return false;
}

function validate_nonempty(element, name)
{
  var value = trim(element.value);

  if (value.length < 1)
  {
    if (name)
      alert("The " + name + " field is required.");
    else
      alert("This field is required.");

    element.focus();
    return false;
  }

  return true;
}

function validate_email(element)
{
  var value = trim(element.value);
  var valid = true;

  if (value.length < 1)
    return true;

  var atpos = value.indexOf("@");

  if (value.length < 6)
    valid = false;  // "x@x.xx" is 6 characters
  else if (atpos < 1)
    valid = false;  // There must be an @ symbol and it can't be in first position
  else if (value.substr(atpos).indexOf(".") == -1)
    valid = false;  // There must be at least one dot after the @ symbol
  else if (value.indexOf(" ") != -1)
    valid = false;  // Cannot contain interior spaces

  if (!valid)
  {
    alert("Please enter a valid email address of the form: user@example.com");
    element.focus();
  }

  return valid;
}

