// Trim White Space
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
// CSS Modification Functions 
function getCSSRule(ruleName,deleteFlag){ruleName=ruleName.toLowerCase();if(document.styleSheets){for(var i=0;i<document.styleSheets.length;i++){var styleSheet=document.styleSheets[i];var ii=0;var cssRule=false;do{if(styleSheet.cssRules){cssRule=styleSheet.cssRules[ii];}else{cssRule=styleSheet.rules[ii];}if(cssRule){if(cssRule.selectorText.toLowerCase()==ruleName){if(deleteFlag=='delete'){if(styleSheet.cssRules){styleSheet.deleteRule(ii);}else{styleSheet.removeRule(ii);}return true;}else{return cssRule;}}}ii++;}while(cssRule);}}return false;}function killCSSRule(ruleName){return getCSSRule(ruleName,'delete');}function addDefaultStyleSheet(){var cssNode=document.createElement('style');cssNode.type='text/css';cssNode.rel='stylesheet';cssNode.media='screen';cssNode.title='mboxNVXOffer';document.getElementsByTagName("head")[0].appendChild(cssNode);}function addCSSRule(ruleName){if(document.styleSheets){if(!getCSSRule(ruleName)){if(document.styleSheets.length==0){addDefaultStyleSheet();}if(document.styleSheets[0].addRule){document.styleSheets[0].addRule(ruleName,null,0);}else{document.styleSheets[0].insertRule(ruleName+' { }',0);}}}return getCSSRule(ruleName);}
//Hide dependent form groups and health conditions matrix
var hideConditions = addCSSRule("#lifeProfileConditions");
var hideSlogan = addCSSRule(".slogan");
hideConditions.style.display = "none";
hideSlogan.style.display = "none";




// Life Form Validation

var lifeFormValidation = function() {
	var runValidation = function(frmvalidator) {
		// form name
		var form = document.forms[frmvalidator.formobj._sfm_form_name];
		
		//Validate Gender
		frmvalidator.addValidation("insured_1_gender","req", SEL_GENDER);
		
		//Validate DOB month
		frmvalidator.addValidation("insured_1_dobMM","req", DOB_MM_REQ);
		frmvalidator.addValidation("insured_1_dobMM","numeric", DOB_MM_NUMERIC);
		frmvalidator.addValidation("insured_1_dobMM","lt=13",DOB_MM_LESS_THAN);
		frmvalidator.addValidation("insured_1_dobMM","gt=0",DOB_MM_GREATER_THAN);	
					
		//Validate DOB day
		frmvalidator.addValidation("insured_1_dobDD","req",DOB_DD_REQ);
		frmvalidator.addValidation("insured_1_dobDD","numeric", DOB_DD_NUMERIC);
		frmvalidator.addValidation("insured_1_dobDD","lt=32",DOB_DD_LESS_THAN);
		frmvalidator.addValidation("insured_1_dobDD","gt=0",DOB_DD_GREATER_THAN);
			
		//Validate DOB year
		frmvalidator.addValidation("insured_1_dobYYYY","req",DOB_YYYY_REQ);
		frmvalidator.addValidation("insured_1_dobYYYY","num",DOB_YYYY_NUMERIC);
		frmvalidator.addValidation("insured_1_dobYYYY", "minlen=4", DOB_YYYY_MIN_LEN);
		frmvalidator.addValidation("insured_1_dobYYYY","gt="+(d.getFullYear()-101),DOB_YYYY_GREATER_THAN);	
		frmvalidator.addValidation("insured_1_dobYYYY","lt="+(d.getFullYear()+1),DOB_YYYY_LESS_THAN);
		
		//Validate Height Feet
		frmvalidator.addValidation("insured_1_heightFT","req",HEIGHT_FT_REQ);
		frmvalidator.addValidation("insured_1_heightFT","num",HEIGHT_FT_NUMERIC);
		frmvalidator.addValidation("insured_1_heightFT","lt=8",HEIGHT_FT_LESS_THAN);
		frmvalidator.addValidation("insured_1_heightFT","gt=0",HEIGHT_FT_GREATER_THAN);
			
		//Validate Height inches
		frmvalidator.addValidation("insured_1_heightIN","req",HEIGHT_IN_REQ);
		frmvalidator.addValidation("insured_1_heightIN","num",HEIGHT_IN_NUMERIC);
		frmvalidator.addValidation("insured_1_heightIN","lt=12",HEIGHT_IN_LESS_THAN);
		frmvalidator.addValidation("insured_1_heightIN","gt=-1",HEIGHT_IN_GREATER_THAN);
			
		//Validate Weight
		frmvalidator.addValidation("insured_1_weight","req",WEIGHT_REQ);
		frmvalidator.addValidation("insured_1_weight","num",WEIGHT_NUMERIC);
		
		//Validate Smoker
		frmvalidator.addValidation("insured_1_smoker", "req", SMOKER_REQ);
		
		//validate medical conditions
		frmvalidator.addValidation("insured_1_health_conditions","req",HEALTH_CONDITIONS_SEL);
		if(form.insured_1_health_conditions.options[form.insured_1_health_conditions.selectedIndex].value == 'yes'){
			var conditionsDetail=form.insured_1_health_conditions_detail.value;	
			//If have conditions was selected and no conditions were selected;
			if(trim(conditionsDetail).length<3 || conditionsDetail == "none selected") {
				frmvalidator.addValidation("insured_1_health_conditions_detail","req",HEALTH_CONDITIONS_REQ);			
			}
		}
		
		// Validate First Name
		frmvalidator.addValidation("first_name","req",FIRST_NAME_REQ);
		frmvalidator.addValidation("first_name","maxlength=35",FIRST_NAME_MAX_LENGTH);
		frmvalidator.addValidation("first_name","name",FIRST_NAME_NAME);		
			
		// Validate Last Name
		frmvalidator.addValidation("last_name","req",LAST_NAME_REQ);
		frmvalidator.addValidation("last_name","maxlength=35",LAST_NAME_MAX_LENGTH);
		frmvalidator.addValidation("last_name","minlength=2",LAST_NAME_MIN_LENGTH);
		frmvalidator.addValidation("last_name","name",LAST_NAME_NAME);
			
		// Validate Address
		frmvalidator.addValidation("address_1_street1","req",ADDRESS_STREET_REQ);		
		frmvalidator.addValidation("address_1_street1","1alpha_1digit", ADDRESS_STREET_ALPHADIGIT);
		frmvalidator.addValidation("address_1_street1","address", ADDRESS_STREET_ADDRESS);
		
		// Validate city
		frmvalidator.addValidation("address_1_city","req",ADDRESS_CITY_REQ);
		frmvalidator.addValidation("address_1_city","city",ADDRESS_CITY_CITY);
		frmvalidator.addValidation("address_1_city","minlength=2", ADDRESS_CITY_MIN_LENGTH);		
		
		// Validate state
		frmvalidator.addValidation("address_1_state","req",ADDRESS_STATE_REQ);
		
		// Validate Zip Code
		frmvalidator.addValidation("address_1_zip","req",ADDRESS_ZIP_REQ);	
		frmvalidator.addValidation("address_1_zip","num",ADDRESS_ZIP_NUMERIC);		
		frmvalidator.addValidation("address_1_zip","minlen=5",ADDRESS_ZIP_MIN_LENGTH);
			
		// Validate phone1_1
		frmvalidator.addValidation("phone1","req",PHONE_1_REQ);	
		frmvalidator.addValidation("phone1","numeric",PHONE_1_NUMERIC);
		frmvalidator.addValidation("phone1","minlength=3",PHONE_1_MIN_LENGTH);		
			
		// Validate phone1_2		
		frmvalidator.addValidation("phone_2","req",PHONE_2_REQ);
		frmvalidator.addValidation("phone_2","numeric",PHONE_2_NUMERIC);		
		frmvalidator.addValidation("phone_2","minlength=3",PHONE_2_MIN_LENGTH);
			
			
		// Validate phone1_3		
		frmvalidator.addValidation("phone3","req",PHONE_3_REQ);
		frmvalidator.addValidation("phone3","numeric",PHONE_3_NUMERIC);
		frmvalidator.addValidation("phone3","minlength=4",PHONE_3_MIN_LENGTH);
			
		// Validate Email
		frmvalidator.addValidation("email","req",EMAIL_REQ);
		frmvalidator.addValidation("email","email",EMAIL_EMAIL);
		
		// Fix the phone number
		frmvalidator.setAddnlValidationFunction(finalValidation);
		
	};
	var resetValidation = function(frmvalidator) {
		frmvalidator.clearAllValidations();
		runValidation(frmvalidator);
	};
	// DOB validation, and phone number/smoker fix script
	var finalValidation = function() {
		//Check if DOB is in future
		var today=new Date();
		var MSG=null;
		MSG=DOB_IN_FUTURE;		
					
			var day=document.getElementById('insured_1_dobDD').value;
			var month=document.getElementById('insured_1_dobMM').value;
			var year=document.getElementById('insured_1_dobYYYY').value;
			
			if( isInFuture((month-1),day,year,today)){
				alert(MSG);
				return false;
			}
		
		
		document.getElementById('phone').value=
			document.getElementById('phone1').value + 
			document.getElementById('phone_2').value + 
			document.getElementById('phone3').value;
		document.getElementById('insured_1_tobacco_use').value = 
			document.getElementById('insured_1_smoker').value;
	};
	return {
		run: function(frmvalidator) {
			runValidation(frmvalidator);
		},
		reset: function(frmvalidator) {
			resetValidation(frmvalidator);
			zipStateValidation.runAjax();
		}
	};
}();

//Show and hide health conditions
var healthConditions = function() {
	var addLoadEvent = function(func) {
		var oldonload = window.onload;
		if (typeof window.onload != 'function') {
			window.onload = func;
			
		} else {
			window.onload = function() {
				if (oldonload) {
					oldonload();
				}
				func();
			};
		}
	};
	var bindFunctionality = function() {
		// Does the user have health conditions?
		var toggles = document.getElementsByName("insured_1_health_conditions");
		for(var i=0; i<toggles.length; i++) {
			toggles[i].onchange = showHideConditions;
		}
		var inputElems = document.getElementById("lifeProfileConditions").getElementsByTagName("input");
		for(var i=0; i<inputElems.length; i++) {
			inputElems[i].onclick = setConditions;
		}
	};
	var showHideConditions = function() {
		if(this.value=="yes") {
			document.getElementById("lifeProfileConditions").style.display="block";
			lifeFormValidation.reset(frmvalidator);
		}
		else {
			document.getElementById("lifeProfileConditions").style.display="none";
			unSetConditions();
			lifeFormValidation.reset(frmvalidator);
		}
	};
	var setConditions = function() {
		document.getElementById("insured_1_health_conditions_detail").value=(((document.getElementById("aids").checked)?"HIV/AIDS / ":"")+""+((document.getElementById("heart-disease").checked)?"Heart Disease / ":"")+""+((document.getElementById("mental-illness").checked)?"Mental Illness / ":"")+""+((document.getElementById("alzheimer").checked)?"Alzheimer's / ":"")+""+((document.getElementById("kidney-disease").checked)?"Kidney Disease / ":"")+""+((document.getElementById("pulmonary-disease").checked)?"Pulmonary Disease / ":"")+""+((document.getElementById("cancer").checked)?"Cancer / ":"")+""+((document.getElementById("liver-disease").checked)?"Liver Disease / ":"")+""+((document.getElementById("stroke").checked)?"Stroke / ":""));
	};
	var unSetConditions = function() {
		document.getElementById("aids").checked=false;
		document.getElementById("heart-disease").checked=false;
		document.getElementById("mental-illness").checked=false;
		document.getElementById("alzheimer").checked=false;
		document.getElementById("kidney-disease").checked=false;
		document.getElementById("pulmonary-disease").checked=false;
		document.getElementById("cancer").checked=false;
		document.getElementById("liver-disease").checked=false;
		document.getElementById("stroke").checked=false;
		document.getElementById("insured_1_health_conditions_detail").value="";
	};
	return {
		init: function() {
				addLoadEvent(bindFunctionality);
		}
	};
}();

// Show and hide background input images
var backgroundHide = function () {
	function backgroundHideInst(input) {
		var inputElem = input;
		var inputElemBgImg;
		this.addLoadEvent = function(func) {
			var oldonload = window.onload;
			if(typeof window.onload != 'function') {
				window.onload = func;
			} else {
				window.onload = function() {
					if (oldonload) {
						oldonload();
					}
					func();
				};
			}
		};
		this.addLoadEvent(bindFunctionality);
		function bindFunctionality () {
			document.getElementById(input).onfocus = function () {
				if(this.style.backgroundImage!="none") {
					inputElemBgImg = this.style.backgroundImage;
					this.style.backgroundImage = "none";
				}
			};
			document.getElementById(input).onblur = function () {
				if(this.value=="") {
					this.style.backgroundImage = inputElemBgImg;
				}
			};
		}
	}
	return {
		init : function(input) {
			var backgroundHider = new backgroundHideInst(input);
		}
	};
}();

healthConditions.init();
backgroundHide.init("insured_1_dobMM");
backgroundHide.init("insured_1_dobDD");
backgroundHide.init("insured_1_dobYYYY");
backgroundHide.init("insured_1_heightFT");
backgroundHide.init("insured_1_heightIN");
backgroundHide.init("insured_1_weight");
backgroundHide.init("email");

//ZIP/State Validation
var zipStateValidation = {
	// ZIP Code values
	zip : {
		name : "address_1_zip",
		value : "",
		jObj : null
	},
	// State values
	state : {
		name : "address_1_state",
		value : "",
		jObj : null
	},
	// Bind a list of events to an object
	bindEventList : function(inputElem, eventList) {
		jQuery.each(eventList, function(k, v) {
			inputElem.bind(v, zipStateValidation.attemptCheck);
		});
	},
	// Add the ZIP code input events
	addZipEvents : function() {
		var eventList = ["blur", "keyup", "change", "focus"];
		zipStateValidation.bindEventList(zipStateValidation.zip.jObj, eventList);
	},
	// Add the state dropdown events
	addStateEvents : function() {
		var eventList = ["blur", "change"];
		zipStateValidation.bindEventList(zipStateValidation.state.jObj, eventList);
	},
	// ZIP Code field validation
	runZipValidation : function (val) {
		return (/^\d{5}$/.test(val));
	},
	// State field validation
	runStateValidation : function(val) {
		return (val != "");
	},
	// Check if form fields are ready for comparison
	attemptCheck : function() {
		var zipValue = jQuery.trim(zipStateValidation.zip.jObj.val());
		var stateValue = jQuery.trim(zipStateValidation.state.jObj.val());
		var clearedValidation = zipStateValidation.runStateValidation(stateValue) & zipStateValidation.runZipValidation(zipValue);
		if (clearedValidation && (zipValue != zipStateValidation.zip.value || stateValue != zipStateValidation.state.value) ) {
			zipStateValidation.state.value = stateValue;
			zipStateValidation.zip.value = zipValue;
			zipStateValidation.initValidation();
		}
	},
	// Initialize validation
	initValidation : function() {
		lifeFormValidation.reset(frmvalidator);
	},
	// Run AJAX Request
	runAjax : function() {
		jQuery.get("/resources/stateabbr.xml", {zip: zipStateValidation.zip.value}, zipStateValidation.checkZipState);
	},
	// Check Zip and State Values 
	checkZipState : function(data) {
		var stateField = jQuery("state", data);
		if (stateField.length == 1 && jQuery.trim(stateField.text()) !=  "") {
			if(jQuery.trim(stateField.text()) != zipStateValidation.state.value) {
				frmvalidator.addValidation("address_1_zip","regexp=^[A-Za-z]{20,}","Please check your zip code and your state.");
			}
		}
	},
	// When the document is ready, run this command
	onReady : function() {
		zipStateValidation.zip.jObj = jQuery("#" + zipStateValidation.zip.name);
		zipStateValidation.state.jObj = jQuery("#" + zipStateValidation.state.name);
		if (zipStateValidation.zip.jObj.length == 1 && zipStateValidation.state.jObj.length == 1) {
			zipStateValidation.addStateEvents();
			zipStateValidation.addZipEvents();
		}
	}
};
jQuery(zipStateValidation.onReady);
