/**********************************************/
/*  Functions used to validate html form      */
/**********************************************/

	/*****************************************************************/
	/* Controls which functions to be called depending on site form. */
	/*****************************************************************/
	function validateFormOnSubmit(theForm) 
	{
		var reason = "";
		reason += validateName(theForm.name);
	  	reason += validateEmail(theForm.email);
		reason += validateEmpty(theForm.security_code);
	  	if (reason != "") 
		{
			alert("Some fields need correction:\n" + reason);
			return false;
	  	}
	  	return true;
	}
	/*****************************************************************/
	/* Validates name for length and that contains no special charact */
	/*****************************************************************/
	function validateName(fld) 
	{
		var error = "";
		var illegalChars = /\W/; // allow letters, numbers, and underscores
		if (fld.value == "") 
		{
			fld.style.background = 'Yellow'; 
			error = "You didn't enter your name.\n";
		} 
		else if (illegalChars.test(fld.value)) 
		{
			fld.style.background = 'Yellow'; 
			error = "The name contains illegal characters.\n";
		} 
		else 
		{
			fld.style.background = 'White';
		}
		return error;
	}
	/*****************************************************************/
	/* Validates username for length, no special characters, and     */
	/* allowed length.												 */
	/*****************************************************************/
	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;
	}
	/*****************************************************************/
	/* Trims the string replaced.									 */
	/*****************************************************************/
	function trim(s)
	{
  		return s.replace(/^\s+|\s+$/, '');
	}
	/*****************************************************************/
	/* Validates emails for length, and validity. the input data     */
	/* must contain at least an @ sign and a dot (.). Also, the @ 	 */
	/* must not be the first character of the email address, and the */
	/* last dot must at least be one character after the @ sign. 	 */
	/*****************************************************************/
	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;
	}
	/*****************************************************************/
	/* Checks for empty field. 							             */
	/*****************************************************************/
	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;  
	}
	/*****************************************************************/
	/* Validates phone for length. Checks for 10 digits including    */
	/* area code. The isNaN() function to check if the phone number  */
	/* contain only numbers.    									 */
	/*****************************************************************/
	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;
	}
	/*****************************************************************/
	/* Validates the password. Allow only letters and numbers (7+).  */
	/* It only permits passwords that contain letters and at least 	 */
	/* one numeral.												     */
	/*****************************************************************/
	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-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;
	} 
