function getElement(id) {
  var element = null;
  if (document.getElementById) {
    element = document.getElementById(id);
  } else if (document.layers) {
    element = document.layers[id];
  } else if (document.all) {
    element = document.all[id];
  }
  return element;
}

var reqfields = ['first_name','last_name','zip','email'];
var valfuncs = [];
valfuncs.zip = ['validateZip', 'zip code'];
valfuncs.email = ['validateEmail', 'email address'];

function validate() {
  var errordiv = getElement('form_msg');
  var errormsg = '';
  var errorlist = [];
  for (var i=0; i<reqfields.length; i++) {
    var fieldname = reqfields[i];
    var field = getElement(fieldname);
    var value = field.value;
    field.className = field.className.replace("error", "");
    if (!value) {
      field.className += " error";
      if (!errormsg) { errormsg = "Please provide the information indicated by the highlighted fields"; }
    } else {
      try {
        if (valfuncs[fieldname][0]) {
          var valfunc = valfuncs[fieldname][0];
          if (!eval(valfunc+"(value)")) {
            field.className += " error";
            if (!errormsg) { errormsg = "Please provide the information indicated by the highlighted fields"; }
            errorlist.push(valfuncs[fieldname][1]);
          }
        }
      } catch(e) { }
    }
  }
  if (errormsg) {
    if (errorlist) {
      for (var j=0; j<errorlist.length; j++) {
        if (j === 0) {
          errormsg = errormsg + ", entering a valid ";
        } else if (j == errorlist.length-1) {
          errormsg = errormsg + " and ";
        } else {
          errormsg = errormsg + ", ";
        }
        errormsg = errormsg + errorlist[j];
      }
    }
    errormsg = errormsg + ".";
    errordiv.innerHTML = errormsg;
    return false;
  } else {
    return true;
  }
}

function validateZip(field) {
  var valid = "0123456789-";
  var hyphencount = 0;
  if (field.length!=5 && field.length!=10) { return false; }
  for (var i=0; i < field.length; i++) {
    var temp = "" + field.substring(i, i+1);
    if (temp == "-") { hyphencount++; }
    if (valid.indexOf(temp) == "-1") { return false; }
    if ((hyphencount > 1) || ((field.length==10) && ""+field.charAt(5)!="-"))
    { return false; }
  }
  return true;
}


function validateEmail(field) {
  if (field.length < 5)
  { return false; }
  var iChars = "*|,\":<>[]{}`';()&$#%";
  var eLength = field.length;
  for (var i=0; i < eLength; i++) {
    if (iChars.indexOf(field.charAt(i)) != -1)
    { return false; }
  }
  var atIndex = field.lastIndexOf("@");
  if(atIndex < 1 || (atIndex == eLength - 1))
  { return false; }
  var pIndex = field.lastIndexOf(".");
  if(pIndex < 4 || (pIndex == eLength - 1))
  { return false; }
  if(atIndex > pIndex)
  { return false; }
  return true;
}

