<!--
// General Functions
// -----------------

// Trims Leading and Trailing Spaces in a String
function trim(strToTrim) {
  var strTrimmedString = strToTrim;

  // Remove leading spaces and carriage returns
  while ((strTrimmedString.substring(0, 1) == ' ') ||
    (strTrimmedString.substring(0, 1) == '\n') ||
    (strTrimmedString.substring(0, 1) == '\r')) {
      strTrimmedString = strTrimmedString.substring(1, strTrimmedString.length);
  }

  // Remove trailing spaces and carriage returns
  while ((strTrimmedString.substring(strTrimmedString.length - 1, strTrimmedString.length) == ' ') ||
    (strTrimmedString.substring(strTrimmedString.length - 1, strTrimmedString.length) == '\n') ||
    (strTrimmedString.substring(strTrimmedString.length - 1, strTrimmedString.length) == '\r')) {
      strTrimmedString = strTrimmedString.substring(0, strTrimmedString.length - 1);
  }

  return strTrimmedString;
}

// Replaces Characters in a String
function replace(string, text, by) {
  var strLength = string.length
  var txtLength = text.length;
  var i = string.indexOf(text);

  if ((strLength == 0) || (txtLength == 0)) return string;
  if ((! i) && (text != string.substring(0, txtLength))) return string;
  if (i == -1) return string;

  var newstr = string.substring(0, i) + by;

  if (i + txtLength < strLength)
    newstr += replace(string.substring(i + txtLength, strLength), text, by);

  return newstr;
}

// Form Validation Functions
// -------------------------

function validate(frmForm) {
  var astrRequiredFields = getRequiredFields(frmForm);
  var blnIsEmptyFieldsValid = validateEmptyFields(frmForm, astrRequiredFields);

  if (blnIsEmptyFieldsValid)
    return validateRegExFields(frmForm, astrRequiredFields);
  else
    return false;
}

// Gets the Required Form Fields List
function getRequiredFields(frmForm) {
  var strRequiredFields = trim(replace(frmForm.Required.value, " ", ""));
  return strRequiredFields.split(",");
}

// Validates Empty Fields and Displays a Message Box of all Blank Required Fields
function validateEmptyFields(frmForm, astrRequiredFields) {
  var strMessage = "You must fill in the following required fields:\n\n";
  var strFocusField;
  var blnIsFieldsValid = true;

  for (var i = 0; i < frmForm.elements.length; i++) {
    for (var x = 0; x < astrRequiredFields.length; x++) {
      if (frmForm.elements[i].name == astrRequiredFields[x]) {
        if (frmForm.elements[i].name == "State") {
          if (frmForm.elements[i].selectedIndex == 0) {
            if (blnIsFieldsValid)
              strFocusField = frmForm.elements[i].name;

            strMessage += "* State\n";
            blnIsFieldsValid = false;
          }
        }

        else if (frmForm.elements[i].value == "") {
          if (blnIsFieldsValid)
            strFocusField = frmForm.elements[i].name;

          strMessage += "* " + frmForm.elements[i].name + "\n";
          blnIsFieldsValid = false;
        }
      }
    }
  }

  if (! blnIsFieldsValid) {
    window.alert(strMessage);
    eval("frmForm." + strFocusField + ".focus()");
  }

  return blnIsFieldsValid;
}

function validateRegExFields(frmForm, astrRequiredFields) {
  for (var i = 0; i < frmForm.elements.length; i++) {
    for (var x = 0; x < astrRequiredFields.length; x++) {
      if (frmForm.elements[i].name == astrRequiredFields[x]) {
        // Begin Custom RegEx Validation

        // Email Address
        if (frmForm.elements[i].name == "Email") {
          if (! isEmail(frmForm.elements[i].value)) {
            window.alert("The following error occurred in the Email Address field:\n\nThe email address is not valid.\nShould be in the format Ex. username@domainname.com");
            frmForm.elements[i].focus();
            return false;
          }
        }

        // End Custom RegEx Validation
      }
    }
  }

  return true;
}

// Ensures an Item is Checked
function isChecked(frmForm, strListName) {
  // Declarations
  var blnItemSelected = false;

  for (i = 0; i < frmForm.elements.length; i++) {
    if (frmForm.elements[i].name == strListName) {
      if (frmForm.elements[i].checked) {
        blnItemSelected = true;
      }
    }
  }
  return blnItemSelected;
}

// Validates Proper Characters (i.e. Letters Only)
function isChars(strExpression) {
  var regEx = /[^a-zA-Z]/;
  return ! regEx.test(strExpression);
}

// Validates Proper Characters (i.e. Letters, Spaces Only)
function isCharsSpaces(strExpression) {
  var regEx = /[^a-zA-Z ]/;
  return ! regEx.test(strExpression);
}

// Validates Proper Characters (i.e. Letters, Spaces, Dots Only)
function isCharsSpacesDots(strExpression) {
  var regEx = /[^a-zA-Z\. ]/;
  return ! regEx.test(strExpression);
}

// Validates Proper Characters (i.e. Letters, Numbers Only)
function isCharsNumbers(strExpression) {
  var regEx = /[^a-zA-Z\d]/;
  return ! regEx.test(strExpression);
}

// Validates Proper Characters (i.e. Letters, Spaces, Numbers Only)
function isCharsSpacesNumbers(strExpression) {
  var regEx = /[^a-zA-Z\d ]/;
  return ! regEx.test(strExpression);
}

// Validates Proper Characters (i.e. Letters, Spaces, Numbers, Dots Only)
function isCharsSpacesNumbersDots(strExpression) {
  var regEx = /[^a-zA-Z\.\d ]/;
  return ! regEx.test(strExpression);
}

// Validates Proper Characters (i.e. Letters, Spaces, Numbers, Dots, Commas Only)
function isCharsSpacesNumbersDotsCommas(strExpression) {
  var regEx = /[^a-zA-Z\.\,\d ]/;
  return ! regEx.test(strExpression);
}

// Validates Email Addresses
function isEmail(strExpression) {
  var regEx = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/i;
  return regEx.test(strExpression);
}

// Validates Zip Codes
function isZipCode(strExpression) {
  var regEx = /(^\d{5}$)|(^\d{5}-\d{4}$)/;
  return regEx.test(strExpression);
}

// Validates Phone Numbers
function isPhoneNumber(strExpression) {
  var regEx = /^(\d{10}|\d{3}-\d{3}-\d{4}|\(\d{3}\) \d{3}-\d{4})$( ?(x|xtn|ext|extn|alt|cell)?\.? ?\d{1,5})?$/;
  return regEx.test(strExpression);
}

// Validates Fax Numbers
function isFaxNumber(strExpression) {
  var regEx = /^(\d{10}|\d{3}-\d{3}-\d{4}|\(\d{3}\) \d{3}-\d{4})$( ?(x|xtn|ext|extn|alt|cell)?\.? ?\d{1,5})?$/;
  return regEx.test(strExpression);
}

// Validates Dates
function isDate(strExpression) {
  var regEx = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
  return regEx.test(strExpression);
}

// Validates Time
function isTime(strExpression) {
  var regEx = /^([1-9]|1[0-2]):[0-5]\d(:[0-5]\d(\.\d{1,3})?)?$/;
  return regEx.test(strExpression);
}

// Validates IP Addresses
function isIPAddress(strExpression) {
  var regEx = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
  return regEx.test(strExpression);
}
//-->