function validateFormOnSubmit(theform) {
	var reason = "";

	reason += validateEmail(theform.email);
	reason += validatePhone(theform.phone);
	reason += validateFirst(theform.first);
	reason += validateLast(theform.last);
	reason += validateAddress(theform.address1);
	reason += validateCity(theform.city);
	reason += validateState(theform.state);
	reason += validateZip(theform.zip_code);

	if (reason != "") {
		alert("Some fields need correction:\n" + reason);
		return false;
	}
	return true;
}

function validateDate(fld) {
	var error = "";
	fld.style.background = 'White';

	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
	var matchArray = fld.match(datePat); // is the format ok?
	if (matchArray == null) {
		fld.style.background = 'Yellow';
		error = "Date is not in a valid format.\n";
	}
	month = matchArray[1]; // parse date into variables
	day = matchArray[3];
	year = matchArray[4];
	if (month < 1 || month > 12) { // check month range
		fld.style.background = 'Yellow';
		error = "Month must be between 1 and 12.\n";
	} else if (day < 1 || day > 31) {
		fld.style.background = 'Yellow';
		error = "Day must be between 1 and 31.\n";
	} else if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		fld.style.background = 'Yellow';
		error = "Month "+month+" doesn't have 31 days!\n";
	} else if (month == 2) { // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) {
			fld.style.background = 'Yellow';
			error = "February " + year + " doesn't have " + day + " days!\n";
		}
	}
	return error;
}

function validateCity(fld) {
	var error = "";

	if (fld.value.length == 0) {
		fld.style.background = 'Yellow';
		error = "You didn't enter your city.\n";
	} else {
		fld.style.background = 'White';
	}
	return error; 
}

function validateAddress(fld) {
	var error = "";

	if (fld.value.length == 0) {
		fld.style.background = 'Yellow'; 
		error = "You didn't enter your street address.\n";
	} else {
		fld.style.background = 'White';
	}
	return error; 
}

function validateState(fld) {
	var error = "";

	if (fld.value.length == 0) {
		fld.style.background = 'Yellow'; 
		error = "You didn't enter your state.\n";
	} else {
		fld.style.background = 'White';
	}
	return error; 
}

function validateZip(fld) {
	var error = "";
	var stripped = fld.value.replace(/[\(\)\.\-\ ]/g, ''); 

	if (fld.value.length == 0) {
		fld.style.background = 'Yellow'; 
		error = "You didn't enter your zip code.\n";
	} else if (!(stripped.length == 5)) {
		error = "The zip code is the wrong length. 5 digits only.\n";
		fld.style.background = 'Yellow';
	} else {
		fld.style.background = 'White';
	}
	return error; 
}

function validateFirst(fld) {
	var error = "";

	if (fld.value.length == 0) {
		fld.style.background = 'Yellow'; 
		error = "You didn't enter your first name.\n";
	} else {
		fld.style.background = 'White';
	}
	return error; 
}

function validateLast(fld) {
	var error = "";

	if (fld.value.length == 0) {
		fld.style.background = 'Yellow'; 
		error = "You didn't enter your last name.\n";
	} else {
		fld.style.background = 'White';
	}
	return error; 
}


function validateEmpty(fld) {
	var error = "";

	if (fld.value.length == 0) {
		fld.style.background = 'Yellow'; 
		error = "The required field has not been filled in.\n";
	} else {
		fld.style.background = 'White';
	}
	return error; 
}

function validateUsername(fld) {
	var error = "";
	var illegalChars = /\W/; // allow letters, numbers, and underscores

	if (fld.value == "") {
		fld.style.background = 'Yellow'; 
		error = "You didn't enter a username.\n";
	} else if ((fld.value.length < 5) || (fld.value.length > 15)) {
		fld.style.background = 'Yellow'; 
		error = "The username is the wrong length.\n";
	} else if (illegalChars.test(fld.value)) {
		fld.style.background = 'Yellow'; 
		error = "The username contains illegal characters.\n";
	} else {
		fld.style.background = 'White';
	} 
	return error;
}

function validatePassword(fld) {
	var error = "";
	var illegalChars = /[\W_]/; // allow only letters and numbers 

	if (fld.value == "") {
		fld.style.background = 'Yellow';
		error = "You didn't enter a password.\n";
	} else if ((fld.value.length < 7) || (fld.value.length > 15)) {
		error = "The password is the wrong length. \n";
		fld.style.background = 'Yellow';
	} else if (illegalChars.test(fld.value)) {
		error = "The password contains illegal characters.\n";
		fld.style.background = 'Yellow';
	} else if (!((fld.value.search(/[a-zA-Z]+/)) && (fld.value.search(/[0-9]+/)))) {
		error = "The password must contain at least one numeral.\n";
		fld.style.background = 'Yellow';
	} else {
		fld.style.background = 'White';
	}
	return error;
}

function trim(s) {
	return s.replace(/^\s+|\s+$/, '');
} 

function validateEmail(fld) {
	var error="";
	var tfld = trim(fld.value); // value of field with whitespace trimmed off
	var emailFilter = /^[^@]+@[^@.]+\.[^@]*\w\w$/ ;
	var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/ ;

	if (fld.value == "") {
		fld.style.background = 'Yellow';
		error = "You didn't enter an email address.\n";
	} else if (!emailFilter.test(tfld)) { //test email for illegal characters
		fld.style.background = 'Yellow';
		error = "Please enter a valid email address.\n";
	} else if (fld.value.match(illegalChars)) {
		fld.style.background = 'Yellow';
		error = "The email address contains illegal characters.\n";
	} else {
		fld.style.background = 'White';
	}
	return error;
}

function validatePhone(fld) {
	var error = "";
	var stripped = fld.value.replace(/[\(\)\.\-\ ]/g, ''); 

	if (fld.value == "") {
		error = "You didn't enter a phone number.\n";
		fld.style.background = 'Yellow';
	} else if (isNaN(parseInt(stripped))) {
		error = "The phone number contains illegal characters.\n";
		fld.style.background = 'Yellow';
	} else if (!(stripped.length == 10)) {
		error = "The phone number is the wrong length. Make sure you included an area code.\n";
		fld.style.background = 'Yellow';
	} 
	return error;
}

