
function validate() {
  var badfields = new Array();
  var fieldRef;

  for (i = 0; i < validate.arguments.length; i++) {
    var formRef = (validate.arguments[i])?validate.arguments[i]:document.forms[0];
    var reqfields = eval(validate.arguments[i].name + 'R');

    for (var fieldname in reqfields) {
      if (!checkfield(formRef.elements[fieldname])) { 
        badfields[badfields.length] = fieldname;
      }
    }
  }
  if (badfields.length) {
    var primarymsg = '';
    var secondarymsg = '';
    for (i = 0; i < badfields.length; i++) {
      fieldRef = formRef.elements[badfields[i]];
      if ((fieldRef.value == '') || (fieldRef.value == 'error')) {
        primarymsg += '\n'+reqfields[badfields[i]];
      }
      else if ((badfields[i] == 'email') && (!checkemail(fieldRef))) {
        secondarymsg += '\nYour email address appears to have a mistake.';
      }
      else if ((fieldRef.name == 'password') && (fieldRef.value.length < 4)) {
        secondarymsg += '\nYour password must be at least 4 characters.';
      }
      else { secondarymsg += '\nSomething went horribly wrong. Run.'; }
    }

    alert('Please provide or fix the following:\n'+primarymsg+secondarymsg+'\n\nThank you.');
    formRef.elements[badfields[0]].focus();
    return(false);
  }
  else { return(true); }
}

function checkfield(fieldRef,interactive) {
  fieldRef.className =  fieldRef.className.replace(/ v(error|ok)/g,'');
  if ((fieldRef.value == '') || (fieldRef.value == 'error') ||
      ((fieldRef.name == 'email') && (!checkemail(fieldRef)) ||
      ((fieldRef.name == 'password') && (fieldRef.value.length < 4)))) {
    fieldRef.className += ' verror';
    return(false);
  }
  else {
    if (interactive) { fieldRef.className += ' vok'; }
    return(true);
  }
}

function checkemail(emailRef) {
  if (emailRef.value.match(/(\s|\#|,|\.{2})/)) {
    emailRef.value = emailRef.value.replace(/\s/g,'').replace(/\#/g,'@').replace(/,/g,'.').replace(/\.{2}/g,'.');
  }
  var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\s)/;                         // not valid
  var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // valid

  var validemail = true;
  if (reg1.test(emailRef.value) || !reg2.test(emailRef.value)) {
    validemail = false;
  }
  return(validemail);
}

