// Default instructive message used in the form validation functions.
var DEFAULT_MSG = 'Please enter a value in this form field';

/** 
 * Validates the login form.  
 */
function validateForm (objForm) {  
	var arrEls = objForm.elements;
	var isValid = true;
	errorActionReset();
	
	if (arrEls['name'] != null && arrEls['name'].value == '') {
		errorAction('name');
		isValid = false;
	}
	
	if (arrEls['email'] != null && (arrEls['email'].value == '' || !checkEmail(arrEls['email'].value))) {
		errorAction('email', 'This email address is not valid');
		isValid = false;
	}
	
	if (arrEls['comments'] != null && arrEls['comments'].value == '') {
		errorAction('comments');
		isValid = false;
	}
	
	if (!isValid) {
		alert('The form was not filled out correctly.  Please review the data entered in the form fields marked by red text.');
	}
	
	return isValid;
}

/**
 * Validates email address.
 */
function checkEmail (e) {

	var checkTLD = 1;
	var knownDomsPat = /^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat = /^(.+)@(.+)$/;
	var specialChars = "\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars = "\[^\\s" + specialChars + "\]";
	var quotedUser = "(\"[^\"]*\")";
	var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom = validChars + '+';
	var word = "(" + atom + "|" + quotedUser + ")";
	var userPat = new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray = e.match(emailPat);

	if (matchArray == null) {
		return false;
	}
	var user = matchArray[1];
	var domain = matchArray[2];

	for (i = 0; i < user.length; i++) {
		if (user.charCodeAt(i) > 127) {
			return false;
	   	}
	}
	for (i = 0; i < domain.length; i++) {
		if (domain.charCodeAt(i) > 127) {
			return false;
	   	}
	}
	
	if (user.match(userPat) == null) {
		return false;
	}
	
	var IPArray = domain.match(ipDomainPat);
	if (IPArray != null) {
		for (var i = 1; i <= 4; i++) {
			if (IPArray[i] > 255) {
				return false;
	   		}
		}
		return true;
	}
	
	var atomPat = new RegExp("^" + atom + "$");
	var domArr = domain.split(".");
	var len = domArr.length;
	for (i = 0; i < len; i++) {
		if (domArr[i].search(atomPat) == -1) {
			return false;
	  	}
	}
	
	if (checkTLD && domArr[domArr.length - 1].length != 2 && domArr[domArr.length - 1].search(knownDomsPat) == -1) {
		return false;
	}
	
	if (len < 2) {
		return false;
	}
	
	return true;
}

/**
 * Highlights the given span with bold red text.
 */
function errorAction (item, msg) {
	if (msg == null || msg == '') msg = DEFAULT_MSG;
	var spanEl = document.getElementById('label_' + item);
	spanEl.style.color = 'red';
	spanEl.title = msg;
}

/**
 * Resets all the spans to black and regular weight text.
 */
function errorActionReset () {
	for (var i = 0; i < document.getElementsByTagName('label').length; i++) {
		var spanEl = document.getElementsByTagName('label').item(i);
		if (spanEl.getAttribute('id') != null && spanEl.getAttribute('id').search('label_') != -1) {
			spanEl.style.color = '#555';
			spanEl.style.fontWeight = 'normal';
			spanEl.title = '';
		}
	}
}