/**
 * JavaScript form validation library
 *
 * @author Bill Matlock <bill@billbuilt.com>
 * @version $Id: validate.js 14 2010-06-01 23:16:32Z Bill $
 */


//alert('validate.js loaded');

var formBadBG="#cccc99";
var formGoodBG="";

// RE-CONFIGURED FOR USE IN EPS

/**
 * Validates that an element has a value.
 *
 * @param object elem Form element to be tested for validity.
 * @return bool True if all validation passed.
 */
function required(elem) {
	if (elem.options) {
		elem.style.backgroundColor = "";
		if (elem.options[elem.selectedIndex].value == "") {
			return (false);
		}
	}
	else if (elem.type=='radio') {
		els=document.getElementsByName(elem.name);
		for (i = 0;  i < els.length;  i++) {
			els[i].style.backgroundColor = "";
		}
		var radioSelected = false;

		for (i = 0;  i < els.length;  i++) {
			if (els[i].checked)
				radioSelected = true;
		}

		if (!radioSelected) {
			for (i = 0;  i < els.length;  i++) {
				els[i].style.backgroundColor = formBadBG;
			}
			return (false);
		}
	}
	else {
		elem.style.backgroundColor = "";
		if(elem.value == "") {
			return (false);
		}
	}

	return (true);
}

/**
 * Validates that a string contains a valid US phone number.
 * Example: (123) 456-7890, 123-456-7890, or (123)456-7890.
 * @param object elem Form element to be tested for validity.
 * @return bool True if all validation passed.
 */
function phoneNum(elem) {
	elem.style.backgroundColor = "";
	if (elem.value == "") return(true);

	phoneRegex = new Array();

	phoneRegex[0] = /^\(\d\d\d\) \d\d\d-\d\d\d\d$/;
	phoneRegex[1] = /^\d\d\d-\d\d\d-\d\d\d\d$/;
	phoneRegex[2] = /^\(\d\d\d\)\d\d\d-\d\d\d\d$/;
	phoneRegex[3] = /^\d\d\d\d\d\d\d\d\d\d$/;
	phoneRegex[4] = /^\d\d\d\.\d\d\d.\d\d\d\d$/;
	var num=elem.value;

	for (x=1; x < phoneRegex.length; x++) {
		if (num.match(phoneRegex[x])) {
			return (true);
		}
	}
	return (false);
}


/**
 * Validates that a string is a valid email address.
 * Does not check if the email address is a working address, only that it is formatted to be a proper email address.
 *
 * @param object elem Form element to be tested for validity.
 * @return bool True if all validation passed.
 */
function emailCheck(elem) {
	elem.style.backgroundColor = "";
	if (elem.value == "") return(true);

	// The following pattern is used to check if the entered e-mail address fits the user@domain format.  It also is used to separate the username from the domain.
	var emailPat=/^(.+)@(.+)$/

	// The following string represents the pattern for matching all special characters.  We don't want to allow special characters in the address.These characters include ( ) < > @ , ; : \ " . [ ]
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"

	// The following string represents the range of characters allowed in a username or domainname.  It really states which chars aren't allowed.
	var validChars="\[^\\s" + specialChars + "\]"

	// The following pattern applies if the "user" is a quoted string (in which case, there are no rules about which characters are allowed and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com is a legal e-mail address.
	var quotedUser="(\"[^\"]*\")"

	// The following pattern applies for domains that are IP addresses, rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal e-mail address. NOTE: The square brackets are required.
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/

	// The following string represents an atom (basically a series of non-special characters.)
	var atom=validChars + '+'

	// The following string represents one word in the typical username. For example, in john.doe@somewhere.com, john and doe are words. Basically, a word is either an atom or quoted string.
	var word="(" + atom + "|" + quotedUser + ")"

	// The following pattern describes the structure of the user
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")

	// The following pattern describes the structure of a normal symbolic domain, as opposed to ipDomainPat, shown above.
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

	// Finally, let's start trying to figure out if the supplied address is valid.

	// Begin with the coarse pattern to simply break up user@domain into different pieces that are easy to analyze.
	var matchArray=elem.value.match(emailPat)
	if (matchArray==null) {
	  // Too many/few @'s or something; basically, this address doesn't even fit the general mould of a valid e-mail address.
		//alert("The email address seems to be incorrect (check @ and .'s)");
		return false;
	}
	var user=matchArray[1]
	var domain=matchArray[2]

	// See if "user" is valid
	if (user.match(userPat)==null) {
		// user is not valid
		//alert("The username (the part before the \"@\" symbol) in the email address, doesn't seem to be valid.");
		return false;
	}

	// if the e-mail address is at an IP address (as opposed to a symbolic host name) make sure the IP address is valid.
	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) {
		// this is an IP address
		for (var i=1;i<=4;i++) {
			if (IPArray[i]>255 || IPArray[i]<0 || !IPArray[i]) {
				//alert("Email IP address is invalid.");
				return false;
			}
		}
		return true;
	}

	//  Domain is symbolic name
	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
		//alert("The domain name (the part following the \"@\" symbol) in the email address doesn't seem to be valid.");
		return false;
	}

	// domain name seems valid, but now make sure that it ends in a three-letter word (like com, edu, gov) or a two-letter word, representing country (uk, nl), and that there's a hostname preceding the domain or country.

	// Now we need to break up the domain to get a count of how many atoms it consists of.
	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) {
	   //  the address must end in a two letter or three letter word.
	   //alert("The email address must end in a three-letter domain, or two letter country.");
	   return false;
	}

	//  Make sure there's a host name preceding the domain.
	if (len<2) {
	  //alert("The email address is missing a hostname (the part following the \"@\" symbol).");
	   return false;
	}

	//  If we've gotten this far, everything's valid!
	return true;
}







// ------------------------------------------------ //







