// JavaScript Document

//set default onmouseover event
//allows operation of banner menu code
//by default the menu hiding will occur while over a page element
document.onmouseover = f_navMenuHide;

//*******************************************************************************************
//FORMS
//*******************************************************************************************
//DESCRIPTION: handles validating forms
//PARAMETERS: myFormID(string) - form object id
function f_formValidate(pmFormId){
	//expecting form element parameter
	//get form object
	var myFormID = pmFormId;
	var myForm = document.getElementById(myFormID);
	
	//get form elements
	var myFormElements = myForm.elements;
	
	//iterate through form elements
	for(i=0;i<myFormElements.length;i++){
		//get id attribute of form element
		var myId = myFormElements[i].id;
		
		//check if id attribute exists - exit this loop if not 
		if(myId == ""){continue;};
		
		//get element object
		var myElement = document.getElementById(myId);
		//get element object class
		var myClass = myElement.className;
			
		//determine if element is required
		//tested by presence of key class 'formRqd'
		var myRequired = myClass.indexOf("formRqd")>-1;
		
		//determine type of element
		var myType = myElement.type;
		
		//determine procedures based on type of element
		var myMessage = "";
		switch(myType){
			case("select-one"): //SELECT BOX
				//check if field required
				if(myRequired){
					//get select box value
					var myValue = myElement.value;
					//get selected Index
					var mySelect = myElement.selectedIndex;
					//check if default selection still selected
					//assuming default selection is first
					if(mySelect==0){
						//get custom message
						myMessage = f_formValidateMessages(myId,"Select Box");
						if(myMessage!=""){alert(myMessage)};
						myElement.focus();
						//myElement.select();
						return(false);
					}//end if
				}//end if
				break;
			
			case("text"): //TEXTFIELD
				//check if field required
				if(myRequired){
					//get text field value
					var myValue = myElement.value;
					if(myValue == ""){
						myMessage = f_formValidateMessages(myId,"Text Field");
						if(myMessage!=""){alert(myMessage)};
						myElement.focus();
						myElement.select();
						return(false);
					}//end if
				}//end if
				
				//check if field is email
				if(myId=="email" || myId=="contactEmail"){
					var myValue = myElement.value;
					var myValidEmail = f_formValidateEmail(myValue);
					if(!myValidEmail){
						myMessage = f_formValidateMessages(myId+"Invalid","Text Field");
						if(myMessage!=""){alert(myMessage)};
						myElement.focus();
						myElement.select();
						return(false);
					}//end if
				}//end if
				break;
		}//end switch
		
	}//end for
	
	//form validates - return true
	return(true);
}//end function f_formValidate

//handles custom messages
function f_formValidateMessages(pmKey,pmType){
	//get key word
	var myKey = pmKey;
	//get type of form element
	var myType = pmType;
	
	//get custom message if possible
	var myMessage = "";
	switch(myKey){
		case("companyName"):
			myMessage = "We require the COMPANY NAME " + myType + " to complete this form.";
			break;
		case("contactEmail"):
			myMessage = "We require the CONTACT EMAIL " + myType + " to complete this form.";
			break;
		case("contactEmailInvalid"):
			myMessage = "We require the CONTACT EMAIL " + myType + " to be in a valid format to complete this form.";
			break;
		case("contactEmailConfirm"):
			myMessage = "We require the RETYPE CONTACT EMAIL " + myType + " to confirm the email address and complete this form.";
			break;
		case("contactName"):
			myMessage = "We require the CONTACT NAME " + myType + " to complete this form.";
			break;
		case("contactPhoneNumber"):
			myMessage = "We require the CONTACT PHONE NUMBER " + myType + " to complete this form.";
			break;
		case("day"):
			myMessage = "We require the DAY " + myType + " have a valid selection in order to complete this form.";
			break;
		case("month"):
			myMessage = "We require the MONTH " + myType + " have a valid selection in order to complete this form.";
			break;
		case("participants"):
			myMessage = "We require the PARTICIPANTS " + myType + " to complete this form.";
			break;
		case("product"):
			myMessage = "We require the PRODUCT " + myType + " have a valid selection in order to complete this form.";
			break;
		case("service"):
			myMessage = "We require the SERVICE " + myType + " have a valid selection in order to complete this form.";
			break;
		case("trainingLoc"):
			myMessage = "We require the TRAINING LOCATION " + myType + " to complete this form.";
			break;	
		case("year"):
			myMessage = "We require the YEAR " + myType + " have a valid selection in order to complete this form.";
			break;
	}//end switch
	
	return(myMessage);
}//end f_formValidateMessages

//handles validating an email address
function f_formValidateEmail(pmEmail){
	//get email address to validate
	var myEmail = pmEmail;
	
	//EMPTY EMAIL
	//check if email is empty
	if(myEmail==""){return(false)};
	
	//INVALID CHARACTERS
	//set invalid email character set
	var myInvalidCharSet = " /:,;";
	
	//check for invalid chars in email
	for(i=0;i<myInvalidCharSet.length;i++){
		var myChar = myInvalidCharSet.charAt(i);
		if(myEmail.indexOf(myChar)>-1){return(false)};
	}//end for
	
	//PRESENCE AND POSITION OF @ SYMBOL
	//get position of first at symbol from second char of email
	var atPos = myEmail.indexOf("@",1);
	//check for at least one @ symbol later than second char
	if(atPos==-1){return(false)};
	//second @ symbol present after first @ symbol not valid
	if(myEmail.indexOf("@",atPos+1) != -1){return(false)};
	
	//PRESENCE AND POSITION OF PERIOD SYMBOL
	//get position of first period symbol from after first @ symbol
	var periodPos = myEmail.indexOf(".",(atPos+2));
	//period required after @ symbol
	if(periodPos==-1){return(false)};
	//if not enough space for TLD (Top Level Domain) then send error
	if(periodPos+3>myEmail.length){return(false)};
	
	//email validates
	return(true);
}//end function f_formValidateEmail
//*******************************************************************************************
//END FORMS
//*******************************************************************************************

//*******************************************************************************************
//NAVIGATION
//*******************************************************************************************

//handles main nav menu operations
function f_navMenu(pm_key){
	//get key
	var my_key = pm_key;
	
	//find data procedures
	switch(my_key){
		case("company"):
			f_navMenuShow("subCompany");
			f_styleBgPosition("navCompany","0px -38px");
			break;
		case("products"):
			f_navMenuShow("subProducts");
			f_styleBgPosition("navProducts","0px -38px");
			break;
		case("solutions"):
			f_navMenuShow("subSolutions");
			f_styleBgPosition("navSolutions","0px -38px");
			break;
	}//end switch
}//end function f_navMenu

//handles hiding menus
function f_navMenuHide(pm_array){
	//store list of menu div id's in global
	var g_menu_ids_list = ["subSolutions","subProducts","subCompany"];
	
	//hold list of sub menu refs for this page
	//retrieve from global
	var my_list = g_menu_ids_list;
	
	//iterate through id list
	for(i in my_list){
		//get menu object
		//menu object is a div containing menu elements
		var my_object_name = my_list[i];
		var my_object_menu = document.getElementById(my_object_name);
		
		//make menu divs invisible 
		if(my_object_menu!=null){my_object_menu.style.visibility='hidden'};
	}//end for
	
	//reset all buttons
	f_styleBgPosition("navProducts","0px 0px");
	f_styleBgPosition("navSolutions","0px 0px");
	f_styleBgPosition("navCompany","0px 0px");
}//end function f_navMenuHide

//handles showing menus
function f_navMenuShow(pm_object){
	//shut all menus
	f_navMenuHide();
	
	//get object to swap background image
	var my_object_name = pm_object;
	//var my_object = document.getElementById(my_object_name);
	//if(my_object==null){return(false)};
	
	//set visibility of object to true
	f_styleVisibility(my_object_name,true);
}//end function f_navMenuShow

//*******************************************************************************************
//END NAVIGATION
//*******************************************************************************************

//*******************************************************************************************
//STYLES
//*******************************************************************************************

//handles changing position of a background style
function f_styleBgPosition(pm_object,pm_pos){
	//get object to swap background image
	var my_object_name = pm_object;
	var my_object = document.getElementById(my_object_name);
	if(my_object==null){return(false)};
	
	//get path to new image
	var my_pos = pm_pos;
	
	//set background image
	//my_object.style.backgroundImage = my_path;
	my_object.style.backgroundPosition = my_pos;
}//end function f_styleBgPosition


//handles setting visibility of a style
function f_styleVisibility(pm_object,pm_visibility){
	//get div object to show
	var my_object = pm_object;
	my_object = document.getElementById(my_object);
	//check if object exists
	if(my_object==null){return(false)};
	
	//get visibility boolean
	if(pm_visibility){
		my_visibility = "visible";
	}else{
		my_visibility = "hidden";
	}//end if
	
	//show sub menu div object
	my_object.style.visibility = my_visibility;
}//end function f_styleVisibility

//*******************************************************************************************
//END STYLES
//*******************************************************************************************