function Validate(f) {
	var radios = [];
	var e = [];
	for(i = 0; i < f.length; i++) {
		removeClass(f[i], "ErrorClass");
		if((f[i].type == "text" || f[i].type == "select-one") && (f[i].value != "" || f[i].className.match(/Required/g))) {
			if(f[i].className.match(/email/)) {
				var RegEx = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
				//"fix discoloration
				if(!RegEx.test(f[i].value)) {
					e.push("Null or invalid entry for email address.");
					addError(f[i]);
				}
			}
			else if(f[i].className.match(/phone/)) {
				var phoneNum = f[i].value.replace(/[^0-9]/g, "");
				if(phoneNum.length == 10) {
					f[i].value = "("+phoneNum.substr(0, 3)+") "+phoneNum.substr(3,3)+"-"+phoneNum.substr(6,4);
				}
				else {
					e.push("Invalid entry for phone number.");
					f[i].value = "";
					addError(f[i]);
				}
			}
			else if(f[i].className.match(/dateField/)) {
				var d = f[i].value.replace(/-/g, "/");
				if(d.match(/\d{1,2}\/\d{1,2}\/\d{4}/)) {
					f[i].value = d;
				}
				else {
					e.push("Invalid entry for \"" + f[i].name + "\".  Hint : MM/DD/YYYY)");
					f[i].value = "MM/DD/YYYY";
					addError(f[i]);
				}
			}
			else if(f[i].className.match(/zip/)) {
				if(!f[i].value.match(/(^\d{5}$)|(^\d{5}-\d{4}$)/)) {
					e.push("Invalid value for \"" + f[i].name + "\" Hint:  12345 or 12345-6789");
					addError(f[i]);
				}
			}
			else if(f[i].className.match(/Required/g) && f[i].value == "") {
				e.push("Field \"" + f[i].name + "\" is required.");
				addError(f[i]);
			}
		}
		else if(f[i].type == "radio" && f[i].className.match(/Required/g) && !inArr(radios, f[i].name)) {
			radios.push(f[i].name);
		}
	}
	for(i = 0; i < radios.length; i++) {
		var group = document.getElementsByName(radios[i]);
		var checked = false;
		for(j = 0; j < group.length; j++) {
			if(group[j].checked) {
				checked = true;
				break;
			}
		}
		if(!checked) {
			for(x = 0; x < group.length; x++) {
				addError(group[x]);
			}
			e.push("Please make a selection for \"" + radios[i] + "\".");
		}
	}
	return e;
}
function inArr(arr, val) {
	for(var i = 0; i < arr.length; i++) {
		if(arr[i] == val) {
			return true;
		}
	}
	return false;
}
function removeClass(obj, val) {
	var regex = new RegExp(val, "gi");
	obj.className = obj.className.replace(regex, "");
}
function addError(obj) {
	obj.className += " ErrorClass";
}
function FormatPhone(f) {
  var FormattedPhone = f.value.replace(/\D/ig, ""); 
  if(!FormattedPhone.match(/\d{10,10}/)) {
    f.value = "(xxx) xxx-xxxx";
    f.className += " ErrorClass";
    return;
  }      
  f.value =  "(" + FormattedPhone.substring(0,3) + ") " + FormattedPhone.substring(3,6) + "-" + FormattedPhone.substring(6,10);
}
function FormatDate(f) {
  var tmp = f.value.split(/\D/);
  if(tmp.length<3 || tmp[0].length > 2 || tmp[1].length > 2 || tmp[2].length > 4) {
    f.value = "MM/DD/YYYY";
    f.className += " ErrorClass";
    return;            
  }
  f.value = tmp[0] + "/" + tmp[1] + "/" + tmp[2];
}
