
function isNotEmpty(elem) {
  var str = elem.value;
  if(str == null || str.length == 0)
   return false;
  else
   return true;
}

// THIS FUNCTION PERFORMS VALIDATION BASED ON A SET OF CUSTOM HTML ATTRIBUTES
function validate(form) {
  var attrVal, attrReg, attrEq, attrFail, strTemp;
  var f = document.forms[0];

  for (var i = 0; i < form.length; i++) {
    attrVal = form[i].getAttribute("validate");

    switch (attrVal) {
      case 'required' :
        if (!isNotEmpty(form[i])) {
          attrFail = form[i].getAttribute("failure");

          if (attrFail)
            alert(attrFail);
          else
            alert('You must complete all required form fields.');
          
          if (form[i].type != "hidden") {
            form[i].focus();
          }
          return false;
        }
        break;

      case 'regex' :

        attrReg = form[i].getAttribute("regex");

        if (attrReg != null && attrReg.length != 0) {
          var regex = new RegExp(attrReg);
          strTemp = form[i].value;
          if (!strTemp.match(regex)) {
            attrFail = form[i].getAttribute("failure");

            if (attrFail)
              alert(attrFail);
            else
              alert('Invalid data format at field "' + form[i].name + '".');
            if (form[i].type != "hidden") {
              form[i].focus();
            }
            return false;
          }
        }
        break;

      case 'regopt' :

        attrReg = form[i].getAttribute("regex");

        if (attrReg != null && attrReg.length != 0) {
          var regex = new RegExp(attrReg);
          strTemp = form[i].value;
          if (strTemp != "") {
            if (!strTemp.match(regex)) {
              attrFail = form[i].getAttribute("failure");

              if (attrFail)
                alert(attrFail);
              else
                alert('Invalid data format at field "' + form[i].name + '".');
              if (form[i].type != "hidden") {
                form[i].focus();
              }
              return false;
            }
          }
        }
        break;

      case 'regdate' :

        attrReg = form[i].getAttribute("regex");

        if (f.bc_sdate.value != "" || f.bc_edate.value != "") {
          var regex = new RegExp(attrReg);
          strTemp1 = f.bc_sdate.value;
          strTemp2 = f.bc_edate.value;

          if (!strTemp1.match(regex)) {
            alert("Start Date must be in format: MM/DD/YYYY");
            f.bc_sdate.focus();
            return false;
          } else if (!strTemp2.match(regex)) {
            alert("End Date must be in format: MM/DD/YYYY");
            f.bc_edate.focus();
            return false;
          } else if (Date.parse(strTemp1) > Date.parse(strTemp2)) {
            alert("Start Date cannot occur after end Date.");
            f.bc_sdate.focus();
            return false;
          }

        }
        break;

      case 'regdate2' :

        attrReg = form[i].getAttribute("regex");

          var regex = new RegExp(attrReg);
          strTemp1 = f.bc_sdate.value;
          strTemp2 = f.bc_edate.value;

          if (!strTemp1.match(regex)) {
            alert("Start Date must be in format: MM/DD/YYYY");
            f.bc_sdate.focus();
            return false;
          } else if (!strTemp2.match(regex)) {
            alert("End Date must be in format: MM/DD/YYYY");
            f.bc_edate.focus();
            return false;
          } else if (Date.parse(strTemp1) > Date.parse(strTemp2)) {
            alert("Start Date cannot occur after end Date.");
            f.bc_sdate.focus();
            return false;
          }

        break;

      case 'equals' :
        attrEq = form[i].getAttribute("equals");
        var objEq = document.getElementById(attrEq);
        if (objEq) {
          if (form[i].value != objEq.value) {
            attrFail = form[i].getAttribute("failure");

            if (attrFail)
              alert(attrFail);
            else
              alert('Form fields do not match');
            if (form[i].type != "hidden") {
              form[i].focus();
            }
            return false;
          }
        }
        break;
    }

  }

  if (document.getElementById('subButton')) {
    document.getElementById('subButton').disabled = true;
  }
  return true;
}