// === Form Validation ===
var header = "______________________________\n";
var footer = "______________________________";

function clientSideValidateForm(formName) {
  doAlert = false;
  passFlag = 0
  msg = "\n";
  for (i=0; i<requiredFields.length; i++) {
    field = requiredFields[i];
		value = eval("document."+formName+"."+field+".value");
	  if (value == "") {
        msg += "   " + formatName(field) + "\n";
        doAlert = true;
	  } else if (field.indexOf("email")>=0) {
	  	if (!isEmail(value)) {
				msg += "   " + formatName(field) + "\n";
		  	msg += "      -- please enter a valid email address\n";
				doAlert = true;
			}
		} else if (field.indexOf("phone")>=0) {
	  	if (!isPhone(value)) {
				msg += "   " + formatName(field) + "\n";
		  	msg += "      -- please enter a valid phone number\n";
      	doAlert = true;
			}
	  } else if (field.indexOf("date")>=0) {
	  	if (!isDate(value)) {
				msg += "   " + formatName(field) + "\n";
		  	msg += "      -- please enter a valid date (MM/DD/YYYY)\n";
      	doAlert = true;
			}

	  } else if (field.indexOf("zip")>=0) {
	  	if (!isZip(value)) {
				msg += "   " + formatName(field) + "\n";
		  	msg += "      -- please enter a valid zip code\n";
      	doAlert = true;
			}
	  }
  }
  if (doAlert) {
    alert("The following fields were left blank:\n" + header + msg + footer);
    return false;
  }
  return true;
}

function formatName(str) {
  x = 0; field = "";
  done = false;
  while (!done) {
    endIndex = requiredFields[i].indexOf("_",x);
    if (endIndex == -1) {
      endIndex = requiredFields[i].length;
      done = true;
    }
    field += requiredFields[i].substring(x,endIndex) + " ";
    x = endIndex + 1;
  }
  return field.toLowerCase();
}

function isEmail(str){
	var pattern = /^([a-zA-Z0-9_\-])([a-zA-Z0-9_\-\.]*)@(\[((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}|((([a-zA-Z0-9\-]+)\.)+))([a-zA-Z]{2,}|(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\])$/g;
	return pattern.test(str);
}

function isPhone(str){
	var pattern, phoneCorrect = true
	// domestic phone numbers
	pattern = /^1?\s*(-|.)?\s*(\d{3}|\(\s*\d{3}\s*\))\s*(-|.)?\s*\d{3}\s*(-|.)?\s*\d{4}$/g;
	phoneCorrect = pattern.test(str);
	// international phone numbers
	//pattern = /^\d(\d|-){7,20}/g
	//phoneCorrect = pattern.test(str)
	
	return phoneCorrect;
}

function isZip(str){
	var pattern = /^\d{5}(-?\d{4})?$/g;
	return pattern.test(str);
}

function isDate(str){
	var pattern = /^(?:(?:(?:0?[13578]|1[02])(\/|-)31)|(?:(?:0?[1,3-9]|1[0-2])(\/|-)(?:29|30)))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(?:(?:0?[1-9]|1[0-2])(\/|-)(?:0?[1-9]|1\d|2[0-8]))(\/|-)(?:[1-9]\d\d\d|\d[1-9]\d\d|\d\d[1-9]\d|\d\d\d[1-9])$|^(0?2(\/|-)29)(\/|-)(?:(?:0[48]00|[13579][26]00|[2468][048]00)|(?:\d\d)?(?:0[48]|[2468][048]|[13579][26]))$/g
	return pattern.test(str)
}