/*
	Javascript for validating user entries
	May 12, 2007
	J. Alisa Duncan
*/

/* 	validateEntry()
	Pre : 
	Post: alerts reader if entry is incorrect
*/
   function validateEntry()
   {
   		var f = document.forms[0];
   		
   		//check to make sure first and last name fields are filled out
   		if (f.firstName.value=="")
   			return showRequireError(f.firstName);
   		
   		if (checkName(trim(f.firstName.value))== false)
   			return showNameError(f.firstName);
   		
   		if (f.lastName.value=="")
   			return showRequireError(f.lastName.value);
   		if (checkName(trim(f.lastName.value)) == false)
   			return showNameError(f.lastName);
   			
   		//check to make sure middle name is valid
   		if (checkName(f.middleName.value) == false)
   			return showNameError(f.middleName);
   		
   		//check that address info is entered
   		var el1 = f.address;
   		var el2 = f.sAddress;
   		if(el1.value == "" && el2.value == "")
   		{
   			alert("You must enter a primary or secondary address.");
   			el1.focus();
   			el1.select();
   			return false;
   		}//endif
   		
   		//check that city is entered
   		var el1 = f.city;
   		var el2 = f.sCity;
   		if(el1.value == "" && el2.value == "")
   		{
   			alert("You must enter a primary or secondary city.");
   			el1.focus();
   			el1.select();
   			return false;
   		}//endif
   		
//check that postal code is entered
var el1 = f.postalCode;
var el2 = f.sPostalCode;
if(el1.value == "" && el2.value == "")
   		{
   			alert("You must enter a primary or secondary zipcode.");
   			el1.focus();
   			el1.select();
   			return false;
   		}//endif

   		
//check that postal code is 5 digits
   		var el= f.postalCode;
if(el.value != "")
{
   		if (validatePostalCode(el.value) == false)//user entry bad
   		{
   			showPostalCodeError(el);
   			return false;
   		}//endif
 }//endif
   		//check that if secondary postal code is entered, it is also valid
   		var el= f.sPostalCode;
   		
   		if (el.value != "")
   		{
   			if (!validatePostalCode(el.value))//user entry bad
   			{
   				showPostalCodeError(el);
   				return false;
   			}//endif
   		}//endif
 
//check to make sure that either primary or secondary address is complete
var el1a = f.address.value;
var el1b = f.city.value;
var el1c = f.postalCode.value;
var el2a = f.sAddress.value;
var el2b = f.sCity.value;
var el2c = f.sPostalCode.value;

if (!((el1a && el1b && el1c) || (el2a && el2b && el2c)))
{
  alert ("You must enter a complete primary or secondary address");
  return false;
}//endif
  		
   		//check to make phone number is valid and entered
   		var el1 = f.areaCode;
   		var el2 = f.sAreaCode;
   		var el1a=f.areaCode.value;
   		var el1b = f.phoneNumber1.value;
   		var el1c = f.phoneNumber2.value;
   		var el2a = f.sAreaCode.value;
   		var el2b = f.sPhoneNumber1.value;
   		var el2c = f.sPhoneNumber2.value;
   		if (!((el1a && el1b && el1c) || (el2a && el2b && el2c)))
   		{
   			showRequireError(el1);
   			return false;
   		}//endif
   		
   		if (el1a !="")
   		{
   			if (el1a.length != 3 || el1b.length != 3 || el1c.length !=4 || 
   				!validatePhoneNumber1(el1a) || !validatePhoneNumber1(el1b) || !validatePhoneNumber2(el1c))
   			{
   				showPhoneError(el1);
   				return false;
   			}//endif
   		}//endif
   		
   		if (el2a != "")
   		{
   			if (el2a.length != 3 || el2b.length != 3 || el2c.length !=4 || 
   				!validatePhoneNumber1(el2a) || !validatePhoneNumber1(el2b) || !validatePhoneNumber2(el2c))
   			{
   				showPhoneError(el2);
   				return false;
   			}//endif
   		}//endif
   		
   		//check to make sure fax number is valid
   		var el1=f.faxAreaCode;
   		var el2 = f.faxPhoneNumber1;
   		var el3 = f.faxPhoneNumber2;
   		
   		if (el1.value != "" || el2.value != "" || el3.value != "")
   		{
   			if (el1.value.length != 3 || el2.value.length != 3 || el3.value.length !=4 || 
   				!validatePhoneNumber1(el1.value) || !validatePhoneNumber1(el2.value) || !validatePhoneNumber2(el3.value))
   			{
   				showPhoneError(el1);
   				return false;
   			}//endif
   		}//endif
   		
   		//check to make sure secondary phone number is valid
   		var el1=f.sAreaCode;
   		var el2 = f.sPhoneNumber1;
   		var el3 = f.sPhoneNumber2;
   		
   		if (el1.value != "" || el2.value != "" || el3.value != "")
   		{
   			if (el1.value.length != 3 || el2.value.length != 3 || el3.value.length !=4 || 
   				!validatePhoneNumber1(el1.value) || !validatePhoneNumber1(el2.value) || !validatePhoneNumber2(el3.value))
   			{
   				showPhoneError(el1);
   				return false;
   			}//endif
   		}//endif
   		
   		//check to make sure email is valid
   		var el = f.email;
   		
   		if (el.value == "")
   		{
   			showRequireError(el)
   		}//endif
   		
   		if (!parseMail(el.value))
   		{
   			showEmailError(el);
   			return false;
   		}//endif
   		
   		
   		//check to make sure user selected meal plan
   		var el = f.mealplan;
   		choice = false;
   		for(i=0; i< el.length; i++)
   			if(el[i].checked)
   				choice = true;
   
   		if (choice == false)
   		{
   			alert("Please select a mealplan option.");
   			return false;
   		}//endif
   		
   		
   	return true;
   }//endfn validateEntry
  
 /*
 	showRequireError()
	Pre : field is empty
	Post: alerts reader that field requires an entry
*/ 
   function showRequireError(el){
    alert("First name, last name, phone number, and email are required.");
    el.focus();
    el.select();
    return false;
   }//endfn showRequireError()

/*
	showStateError()
	Pre : state has too many letters
	Post: alerts reader that state is incorrect
*/   
   function showStateError(el){
    alert("The state:\n" + el.value + "\nmust have 2 letters.  Please use USPS state abbreviation.");
    el.focus();
    el.select();
    return false;
   }//endfn showStateError()

/*
	showPostalCodeError()
	Pre : postal code has too many or too few digits or contains other characters
	Post: alerts reader that zip is incorrect
*/   
   function showPostalCodeError(el){
    alert("The zip code:\n" + el.value + "\nmust have 5 digits and no other characters.");
    el.focus();
    el.select();
    return false;
   }//endfn showPostalCodeError()
 
/*
	showPhoneError()
	Pre : phone number has too many or too few digits
	Post: alerts reader that phone number is incorrect
*/   
   function showPhoneError(el){
    alert("The phone number:\n" + el.value + "\nmust have a 3 digit area code and 7 digit phone number, no other characters.");
    el.focus();
    el.select();
    return false;
   }//endfn showPhoneError()
   
/*
	showEmailError()
	Pre : email is invalid
	Post: alerts reader that email is incorrect
*/   
   function showEmailError(el){
    alert("The email:\n" + el.value + "\nis invalid.  Please reenter email.");
    el.focus();
    el.select();
    return false;
   }//endfn showEmailError()
   
/*
	showNameError()
	Pre : name is invalid
	Post: alerts reader that name is incorrect
*/   
   function showNameError(el){
    alert("The name:\n" + el.value + "\nis invalid.");
    el.focus();
    el.select();
    return false;
   }//endfn showNameError()

/*
 	validateState()
	Pre : field is not empty
	Post: alerts reader that field has unneeded characters
*/ 
   function validateState(str){
   	var reg1 = /[a-zA-Z]{2}/; //valid
   	if (reg1.test(str))
   		return true;
   	else 
   		return false;
   }//endfn validatePhoneNumber()

/*
 	validatePostalCode()
	Pre : field is not empty
	Post: alerts reader that field has unneeded characters
*/ 
   function validatePostalCode(str){
   	var reg1 = /^[0-9]{5}$/; //valid
   	if (reg1.test(str))
   		return true;
   	else 
   		return false;
   }//endfn validatePhoneNumber()
   
/*
 	validatePhoneNumber1()
	Pre : field is not empty
	Post: alerts reader that field has unneeded characters
*/ 
   function validatePhoneNumber1(str){
   	var reg1 = /[0-9]{3}/; //valid
   	if (reg1.test(str))
   		return true;
   	else 
   		return false;
   }//endfn validatePhoneNumber()
   
/*
 	validatePhoneNumber2()
	Pre : field is not empty
	Post: alerts reader that field has unneeded characters
*/ 
   function validatePhoneNumber2(str){
   	var reg1 = /[0-9]{4}/; //valid
   	if (reg1.test(str))
   		return true;
   	else 
   		return false;
   }//endfn validatePhoneNumber()
   
   /*
   	This function was found at: http://www.webxpertz.net/forums/showthread.php?p=188979#post188979
  */
   function parseMail(str) {
    var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|\s/; // not valid
    var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // valid
    if (!reg1.test(str) && reg2.test(str)) return true;
    return false;
   }
   
   function checkName(str)
   {
   	var reg = /^[a-zA-Z '\-]*$/;
	if( str.match(reg))
		return true;
	else return false;
   }
   
   function trim(str)
   {
   	return str.replace(/^[ \t]+|[ \t]+$/g, "");
   }
     