function setupForm(form) {
  if (!form.func) {
    form.func = new formFunctions(form);
  }

}
function formFunctions(form) {
  this.form = form;
  this.validate = function(form) {
    var formLabels = {};
    var requiredFields = {};
    var validateFields = {};
    for (var i=0; i < form.getElementsByTagName("label").length; i++) {
      formLabels[form.getElementsByTagName("label")[i].htmlFor] = form.getElementsByTagName("label")[i].childNodes[0].nodeValue;
    }
    for (var i=0; i < form.required.value.split(",").length; i++) {
      var input = form.required.value.split(",")[i];
      requiredFields[form[input].id] = form[input];
		}
    for (var i=0; i < form.validate.value.split(",").length; i++) {
      var input = form.validate.value.split(",")[i];
      validateFields[form[input].id] = form[input];
    }
    var isBlank = false;
    var blankTxt = "Please fill in the following required fields:\n";
    var isInvalid = false;
    var invalidTxt = "";
    for (var i in requiredFields) {
      if (!this.validBlank(requiredFields[i].value)) {
        blankTxt += formLabels[i] + "\n";
        isBlank = true;
      }
    }
    for (var i in validateFields) {
      if (i.indexOf("email") > -1 && this.validBlank(validateFields[i].value)) {
        if (!this.validEmail(validateFields[i].value)) {
         invalidTxt += "Please enter in a valid email address.";
         isInvalid = true;   
        }
      }
      if (i.indexOf("phone") > -1 && this.validBlank(validateFields[i].value)) {
        if (!this.validPhone(validateFields[i].value)) {
         invalidTxt += "Please enter in a valid US phone number.";
         isInvalid = true;   
        }
      }
    }
    var errorTxt = "";
    if (isBlank) {
      errorTxt += blankTxt + "\n";
    }
    if (isInvalid) {
      errorTxt += invalidTxt;
    }
    if (isBlank || isInvalid) {
      alert(errorTxt);
      return false;
    }
    return true;
  }
  this.validBlank = function(input) {
    if (input == "" || input.match(/^[\n\f\r\t\v\s]+$/)) {
      return false;
    }
    else {
      return true;
    }
  }
  this.validEmail = function(input) {
    var validaddress = /^((\w+).?(\w+))+@\w+\.\w+/i;
    var result = input.match(validaddress);
    if (result == null) {
      return false;
    }
    else {
      return true;
    }
  }
  this.validPhone = function(input) {
    var validphone1 = /^\d{3}(-|\.|\s)\d{3}(-|\.|\s)\d{4}$/i;
    var validphone2 = /^\d{10}$/i;
    var result1 = input.match(validphone1);
    var result2 = input.match(validphone2);
    if (result1 == null && result2 == null) {
      return false;
    }
    else {
      return true;
    }
  }
  this.submitForm = function(form) {
    if (this.validate(form)) {
      form.removeChild(form.required);
      form.removeChild(form.validate);
      form.submit();
    }
  }
}

