// required fields
var reqFields = new Array("firstName",
											"lastName",
											"address",
											"city",
											"conditions",
											"pet_1_name",
											"pet_1_breed");

var reqFields1pets = reqFields;
// END global variables ********************************************************



// These 2 functions ensure consistency between the view and the value of the
// checkbox. At the moment it is used only from "accepted conditions" checkbox.
function setDefaultState(){
	
	eval(document.reservationFrm.conditions.checked = "");
	eval(document.reservationFrm.conditions.value = "");
		
	//document.reservationFrm.conditions.checked = "";
	//document.reservationFrm.conditions.value = "";
}
function setValue(myCBox){
	if(myCBox.checked){
		myCBox.value = "1";
	}else{
		myCBox.value = "";
	}
}// END setDefaultState() and setValue() functions *******************************



// These 2 functions ensure that phone and mobile passed in by user, are well
// formatted by filtering them with regular expressions.
// A valid phone is made up by 10 digits that may be separated
function isMobileValid(mobileNo){
	var pattern = /^0\d{3}\W?(\d|\d{2})?\d{2}\W?(\d|\d{2})?\d{2}$/;
	var result = mobileNo.match(pattern);
	return result;
}//end isMobileValid() function

function isPhoneValid(phoneNo){
	pattern = /^\d{2}\W?\W?\d{4}\W?\W?\d{4}$/;
	result = phoneNo.match(pattern);
	return result;
}//END isMobileValid() and isPhoneValid() functions ****************************


// This is the main function, which drives and uses all the code in this file
function submitForm(formObj){
	
	// This variable will host a collection (by concatetanation) of error
	// messages related to all required fields but phone and mobile,
	// which are dealt with by apposite code.
	var errorMsg = "";
	
	// These variables will hold error messages to handle the phone and mobile
	// fields. This code will implement the business rule that requires the user
	// to fill in at least one of them.
	var phoneErrorMsg = "";
	var mobileErrorMsg = "";
	var phoneAndMobileMissingErrMsg = "";
	
	
	// This block of code responsibility is to discover if either phone, mobile
	// or both fields weren't filled in by the user. ---------------------- BEGIN	
	if(!formObj.phone.value.length){
		if(!formObj.mobile.value.length){
			phoneAndMobileMissingErrMsg = "We require either your phone or  your mobile";	
		}else{
			if(!isMobileValid(formObj.mobile.value) ){
				mobileErrorMsg = "Your mobile number is not correct";	
			}//else I got a valid mobile number
		}
	}else{ 
		if(!isPhoneValid(formObj.phone.value) ){
			phoneErrorMsg = "Your phone number is not correct";	
		}//else I got a valid phone number
	}//---------------------------------------------------------------------- END 
	
	
	//-- Loop by the reqFields array to find out if one or more are left empty	
	for(i=0; i < reqFields.length; i++){
		var formElemLenght = eval("formObj." + reqFields[i] + ".value.length");
		var formElemName = reqFields[i];
		if(formElemLenght == 0){
			errorMsg += reqFields[i] + "\t\t\t\t\n";
		}
	}//end for

			
	// If validation errors are detected, map, stick them to the appropriate
	// css layers and remember them in more simple flags.
	var err1 = 0; var err2 = 0; var err3 = 0; var err4 = 0;
	if(errorMsg.length > 0){
		var errorInternalArea = document.getElementById("errorMessage_internalArea_2"); // maps
		errorInternalArea.childNodes[0].nodeValue = errorMsg; // sticks
		err1 = 1; // remembers
	}else{
		errorMsg = "";
		err1 = 0; // remembers
		var errorInternalArea = document.getElementById("errorMessage_internalArea_2"); // maps
		errorInternalArea.childNodes[0].nodeValue = ""; // sticks
	}
	if(phoneAndMobileMissingErrMsg.length > 0){
		errorInternalArea = document.getElementById("errorMessage_internalArea_3");
		errorInternalArea.childNodes[0].nodeValue = phoneAndMobileMissingErrMsg+"\n";
		err2 = 1;
	}
	if(phoneErrorMsg.length > 0){
		errorInternalArea = document.getElementById("errorMessage_internalArea_3");
		errorInternalArea.childNodes[0].nodeValue = phoneErrorMsg+"\n";
		err3 = 1;
	}
	if(mobileErrorMsg.length > 0){
		errorInternalArea = document.getElementById("errorMessage_internalArea_3");
		errorInternalArea.childNodes[0].nodeValue = mobileErrorMsg+"\n";
		err4 = 1;
	}
	
		
	// display the error messages CSS layers container if at least one
	// user validation error flag is detected. Hide it when no validation errors
	// are detected and finally submit the form to the client email system.
	if( err1 || err2 || err3 || err4 ) {
		var errorArea = document.getElementById("errorMessage");
		errorArea.style.visibility = "visible";
		//alert("FLAG row 132 \nerr1: "+err1+"\nerr2: "+err2+"\nerr3: "+err3+"\nerr4: "+err4);
	// submit form if everything is fine 
	}else{
		var errorArea2 = document.getElementById("errorMessage");
		errorArea2.style.visibility = "hidden";
		formObj.submit();
	}
}// end submitForm function **********************************************




/* This function either displays or hidden the controls to gather pet details
	 depending by the No of pets row reguested*/
function setPetRows(aFormObj) {
	if(aFormObj.petNumber.value == 1){
		document.getElementById("pet2DetailsDiv").style.visibility = "hidden";
		document.getElementById("pet3DetailsDiv").style.visibility = "hidden";
		reqFields = reqFields1pets;
	}else if(aFormObj.petNumber.value == 2){
		document.getElementById("pet2DetailsDiv").style.visibility = "visible";
		document.getElementById("pet3DetailsDiv").style.visibility = "hidden";
		var reqFields2pets = reqFields.concat("pet_2_name", "pet_2_breed");
		reqFields = reqFields2pets;
	}else{
		document.getElementById("pet2DetailsDiv").style.visibility = "visible";
		document.getElementById("pet3DetailsDiv").style.visibility = "visible";
		var reqFields3pets = reqFields.concat("pet_2_name","pet_2_breed","pet_3_name","pet_3_breed");
		reqFields = reqFields3pets;
	}
}// end setPetRows function ***************************************************