
function form_hasElement(v_form, v_name) {
   //this is really slow
   //for (var i = 0; i < v_form.elements.length; ++i) if (v_form.elements[i].name == v_name) return true;
   //return false;
   return ((typeof v_form.elements[v_name]) != "undefined");
}

function form_getValue(v_form, v_name, v_default) {
   var a_fe = v_form.elements[v_name];
   if ((typeof a_fe) == "undefined") return (v_default);
   var a_fe_type = a_fe.type.toLowerCase();
   if (a_fe_type == "select-one" || a_fe_type == "select-multiple") {
      for (var a_oi = 0; a_oi < a_fe.options.length; ++a_oi) {
         if (a_fe.options[a_oi].selected) return (a_fe.options[a_oi].value);
      }
      return (v_default);
   } else if (a_fe_type == "checkbox") {
      if (a_fe.checked) return (a_fe.value);
   } else if (a_fe_type == "radio") {
      return (form_radioValue(v_form, v_name, v_default));
   } else if ((typeof a_fe.value) != "undefined") {
      return (a_fe.value);
   }
   return (v_default);
}

function form_setValue(v_form, v_name, v_value) {
   var a_fe = v_form.elements[v_name];
   if ((typeof a_fe) == "undefined") return false;
   var a_fe_type = a_fe.type.toLowerCase();
   if (a_fe_type == "select-one" || a_fe_type == "select-multiple") {
      for (var a_oi = 0; a_oi < a_fe.options.length; ++a_oi) {
         //if (a_fe.options[a_oi].value == v_value) a_fe.options[a_oi].selected = true;
         a_fe.options[a_oi].selected = (a_fe.options[a_oi].value == v_value ? true : false);
      }
   } else if (a_fe_type == "checkbox") {
      if (a_fe.value == v_value) a_fe.checked = true;
   } else if ((typeof a_fe.value) != "undefined") {
      a_fe.value = v_value;
   }
   return true;
}

function form_radioValue(v_form, v_name, v_default) {
   if (!form_hasElement(v_form, v_name)) return (v_default);
   var v_radio = v_form.elements[v_name];
   if (v_radio.length > 0) {
      for (var i = 0; i < v_radio.length; ++i) if (v_radio[i].checked) return (v_radio[i].value);
   } else {
      if (v_radio.checked) return (v_radio.value);
   }
   return (v_default);
}

function form_isChanged(v_form) {
   var a_changed = false;
   for (var a_ei = 0; a_ei < v_form.elements.length && !a_changed; ++a_ei) {
      var a_fe = v_form.elements[a_ei];
      var a_fe_type = a_fe.type.toLowerCase();
      if (a_fe_type == "select-one" || a_fe_type == "select-multiple") {
         for (var a_oi = 0; a_oi < a_fe.options.length; ++a_oi) {
            if (a_fe.options[a_oi].selected != a_fe.options[a_oi].defaultSelected) a_changed = true;
         }
      } else if (a_fe_type == "checkbox" || a_fe_type == "radio") {
         if (a_fe.checked != a_fe.defaultChecked) a_changed = true;
      } else if (typeof a_fe.value != "undefined" && typeof a_fe.value == typeof a_fe.defaultValue) {
         if (a_fe.value != a_fe.defaultValue) a_changed = true;
      }
   }
   return (a_changed);
}

/*
The form_checkXxx functions are called 'check' rather than 'is' because they display a message if the data is invalid.
*/
function form_isNumberBlankOrZero(v_form, v_name) {
   a_input = v_form.elements[v_name];
   a_int = parseInt(a_input.value);
   return (isNaN(a_int) || a_int == 0);
}
function form_checkBlank(v_form, v_name, v_label) {
   var a_input = v_form.elements[v_name];
   var a_type = a_input.type.toLowerCase();
   var a_value = "";
   if (a_type == "select-one" || a_type == "select-multiple") {
      for (var a_i = 0; a_i < a_input.options.length; ++a_i) if (a_input.options[a_i].selected) {
         a_value += a_input.options[a_i].value;
      }
   } else if (a_type == "radio") {
      for (var a_i = 0; a_i < a_input.length; ++a_i) if (a_input[a_i].checked) {
         a_value += a_input[a_i].value;
         break;
      }
   } else {
      a_value = a_input.value;
   }
   if (a_value == "") {
      if (a_type == "select-one" || a_type == "select-multiple") alert("Please select " + v_label + ".");
      else alert("Please enter " + v_label + ".");
      a_input.focus();
      return true;
   }
   return false;
}

function form_checkDateFormat(v_form, v_name, v_label) { // only checks for digits, not whether number is in range
   var a_valid = true;
   var a_msg = "";
   var a_input = v_form.elements[v_name];
   if (typeof a_input.value == "undefined") {
      alert("Date input validation error: input.value is undefined!");
      return true;
   }
   var a_value = a_input.value;
   if (typeof a_value.search == "function") {
      a_pos = a_value.search("\\d{2}\\W\\d{2}\\W\\d{4}");
      if (a_pos >= 0) {
         a_value = a_value.substring(a_pos, a_value.length);
      } else {
         a_pos = a_value.search("\\d{1}\\W\\d{2}\\W\\d{4}");
         if (a_pos >= 0) {
            a_value = "0" + a_value.substring(a_pos, a_value.length);
         } else {
            a_pos = a_value.search("\\d{2}\\W\\d{1}\\W\\d{4}");
            if (a_pos >= 0) {
               a_value = a_value.substring(a_pos, a_value.length);
            } else {
               a_pos = a_value.search("\\d{1}\\W\\d{1}\\W\\d{4}");
               if (a_pos >= 0) {
                  a_value = "0" + a_value.substring(a_pos, a_value.length);
               } else {
                  a_msg = "Please enter " + v_label + " using the format mm/dd/yyyy.";
                  a_valid = false;
               }
            }
         }
      }
   } else if (a_value.length != 10) {
      a_msg = "Please enter " + v_label + " using the format mm/dd/yyyy"
         + " (you may need to put a zero in front of a single digit month or day).";
      a_valid = false;
   } else if (a_value.length > 0) { // this allows various stuff and not tested in IE
      var a_date = new Date();
      a_date.setTime(Date.parse(a_value));
      if (isNaN(a_date.getTime())) {
         a_msg = "Please enter " + v_label + " using the format mm/dd/yyyy.";
         a_valid = false;
      } else {
         a_value = (a_date.getMonth() < 9 ? "0" : "") + (a_date.getMonth() + 1)
            + "/" + (a_date.getDate() < 10 ? "0" : "") + a_date.getDate()
            + "/" + (a_date.getYear() + 1900);
      }
   }
   if (a_valid) {
      if (a_input.value != a_value) a_input.value = a_value;
   } else {
      if (a_msg.length > 0) alert(a_msg);
      a_input.focus();
   }
   return (a_valid);
}


