var HealthForm = Class.create();
HealthForm.prototype =
{
	initialize: function(form_id) {

	  if ( $("step-1") ) {
	    this.initStep1();
	  }
		
	  if ( $("step-2-health") || $("step-2-gi") ) {
	    this.initStep2Health();
  	}

	  if ( $("step-2-senior") ) {
	    this.initStep2Senior();
  	}
		
	  if ( $("step-3") ) {
	    this.initStep3();
  	}
		
		this.lockReturnKey = false;
		this.form_elements = this.getErrorElements();
		this.step          = 1;
		this.is_valid      = true;

		Event.observe(document, "keypress", this.validateOnReturnKey.bindAsEventListener(this));
		Event.observe("submit", "click", this.validateFields.bindAsEventListener(this));
	},
	
	initStep1 : function() {
	  $("address1_zip_error").addClassName("validate-zip");
  	$("gender1_error").addClassName("required");
		$("dob1_on_error").addClassName("validate-dob");
		$("reqdate_begin_error").addClassName("validate-request-date");
	},

	initStep2Health : function(){
		showChildren($("number_of_children"));
		showSpouse();
		showDependentHeaders();
		
		$("additional-family").show();
		this.showExistingCarrier();
		if ($('takes_medications_1')) this.showTakesMedications();
		if ($('pre_existing_1')) this.showPreExisting();
		if ($('applicant-info')) $('applicant-info').show();
		if ($('takes_medications_1')) Event.observe("takes_medications_1", "click", this.showTakesMedications.bindAsEventListener(this));
		if ($('takes_medications_0')) Event.observe("takes_medications_0", "click", this.showTakesMedications.bindAsEventListener(this));

		if ($('pre_existing_1')) Event.observe("pre_existing_1", "click", this.showPreExisting.bindAsEventListener(this));
		if ($('pre_existing_0')) Event.observe("pre_existing_0", "click", this.showPreExisting.bindAsEventListener(this));

		if ($('has_existing_carrier_1')) Event.observe("has_existing_carrier_1", "click", this.showExistingCarrier.bindAsEventListener(this));
		if ($('has_existing_carrier_0')) Event.observe("has_existing_carrier_0", "click", this.showExistingCarrier.bindAsEventListener(this));
		
		Event.observe("add-spouse", "click", function(e){
			$("has_spouse").value	=	1;
			showSpouse();
			spouseValidation(true);
			Event.stop(e);
		});
		
		Event.observe("remove-spouse", "click", function(e){
			$("has_spouse").value	=	0;
			showSpouse();
			spouseValidation(false);
			Event.stop(e);
		});
		
		Event.observe("add-child", "click", function(e){
			var children	=	$F("number_of_children");
			if(children < 5){
				$("number_of_children").value =	parseInt($F("number_of_children")) + 1;
				showChildren($("number_of_children"));
			}
			Event.stop(e);
		});
		
		Event.observe("remove-child1", "click", function(e){
			$("child_option1").hide();
			toggleAddChild();
      changeValidationForInsured(3, false);
      shiftChildren(3);
			Event.stop(e);
		});
		
		Event.observe("remove-child2", "click", function(e){
			$("child_option2").hide();
			toggleAddChild();
			changeValidationForInsured(4, false);
			shiftChildren(4);
			Event.stop(e);
		});
		
		Event.observe("remove-child3", "click", function(e){
			$("child_option3").hide();
			toggleAddChild();
			changeValidationForInsured(5, false);
			shiftChildren(5);
			Event.stop(e);
		});
		
		Event.observe("remove-child4", "click", function(e){
			$("child_option4").hide();
			toggleAddChild();
			changeValidationForInsured(6, false);
			shiftChildren(6);
			Event.stop(e);
		});
		
		Event.observe("remove-child5", "click", function(e){
			$("child_option5").hide();
			toggleAddChild();
			changeValidationForInsured(7, false);
			shiftChildren(7);
			Event.stop(e);
		});
		
		if ($('insured1_height_error')) $("insured1_height_error").addClassName("validate-height");
		if ($('insured1_weight_error')) $("insured1_weight_error").addClassName("validate-weight");
	},
	
	initStep2Senior : function() {
    if ( $("has_medicare_a_b_error") ) $("has_medicare_a_b_error").addClassName("validate-one-selected");
    if ( $("has_esrd_error") ) $("has_esrd_error").addClassName("validate-one-selected");
	},

	initStep3 : function() {
		$("first_name_error").addClassName("validate-alpha");
		$("last_name_error").addClassName("validate-alpha");
		$("address1_street1_error").addClassName("required");
		if ($("address1_city_error")) $("address1_city_error").addClassName("validate-alpha");
    if ($("address1_state_error")) $("address1_state_error").addClassName("validate-state");
    if ($("address1_zip_error")) $("address1_zip_error").addClassName("validate-zip");
		$("phone1_error").addClassName("validate-phone");
		if ($("phone2_error")) $("phone2_error").addClassName("validate-phone");
		$("email1_error").addClassName("validate-email");
		$("privacy_policy_error").addClassName("validate-privacy");	    		
	},

	/*********************************************************
	 *show/add functions
	 *takes hidden row, element and validation to apply/remove
	 */
	showAddValidations: function(name, element, validation_name){
		var name = String(name);
		$$(name).each(function(element){ element.show(); });
		$(element.id).addClassName(validation_name);
	},

	hideRemoveValidations: function(name, element, validation_name){
		var name = String(name);
		$$(name).each(function(element){ element.hide(); });
		$(element.id).hide();
		$(element.id).removeClassName(validation_name);
	},
	
	validateFields: function(e){
		this.form_elements	= $$(".error");
		var form						= new Validator(this.form_elements);
		this.is_valid 			= form.isFormValid();

		if ($("pre_existing_1") && $("pre_existing_1").checked) {
			if(!isAnyChecked("pre_existing_conditions_row")){
				this.is_valid	= false;
			}
		}
		
		if(!this.is_valid) Event.stop(e);
	},

	validateOnReturnKey: function(e){
		if(e.keyCode == Event.KEY_RETURN){
			this.validateFields(e);
			Event.stop(e);
		}
	},
	
	getErrorElements: function(){
		return $$("error");
	},

	/***************************************************************************************************
	 *Custom functions
	 */

	showTakesMedications : function(){
		if($("takes_medications_1").checked){
			this.showAddValidations("#insured1_current_medications_detail_row",$("insured1_current_medications_detail_error"),"required");
		}else{
			this.hideRemoveValidations("#insured1_current_medications_detail_row",$("insured1_current_medications_detail_error"),"required");
			$("insured1_current_medications_detail").clear();
		}
	},

	showPreExisting : function(){
		if($("pre_existing_1").checked){
			$("pre_existing_conditions_row").show();
		}else{
			$("pre_existing_conditions_row").hide();
			var PECs = Form.getElements($("pre_existing_conditions_row"));
			PECs.each(function(e){ return (e.checked = false); });
		}
	},

	showExistingCarrier : function(){
		($("has_existing_carrier_1").checked) ? this.showAddValidations("#existing_carrier_row",$("existing_carrier_error"),"required") : this.hideRemoveValidations("#existing_carrier_row",$("existing_carrier_error"),"required");
	}
}


function spouseValidation(validate){
	if(validate){
		$("gender2_error").addClassName("required");
		$("dob2_on_error").addClassName("validate-dob");
		if ($("insured2_height_error")) $("insured2_height_error").addClassName("validate-height");
		if ($("insured2_weight_error")) $("insured2_weight_error").addClassName("validate-weight");
	}else{
		$("gender2_error").removeClassName("required");
		$("dob2_on_error").removeClassName("validate-dob");
		clearErrorMessage("gender2_error");
		clearErrorMessage("dob2_on_error");
		$("gender2").clear();
		$("dob2_mm_on").clear();
		$("dob2_dd_on").clear();
		$("dob2_yyyy_on").clear();
		$("is_student2_1").checked	= false;
		
		if ($("insured2_height_error")) clearErrorMessage("insured2_height_error");
		if ($("insured2_weight_error")) clearErrorMessage("insured2_weight_error");
		if ($("insured2_height_error")) $("insured2_height_error").removeClassName("validate-height");
		if ($("insured2_weight_error")) $("insured2_weight_error").removeClassName("validate-weight");
		if ($("insured2_height_feet")) $("insured2_height_feet").clear();
		if ($("insured2_height_inches")) $("insured2_height_inches").clear();
		if ($("insured2_weight")) $("insured2_weight").clear();
		if ($("is_smoker2_1")) $("is_smoker2_1").checked	= false;
	}
}

function isEmptyInsured(insured){
	var gender 	= isEmptyGender(insured);
	var dob 		= isEmptyDob(insured);
	var height 	= isEmptyHeight(insured);
	var weight 	= isEmptyWeight(insured);
	return (gender && dob && height && weight);
}

function isEmptyGender(insured){
	return (($F("gender" + insured) == ""));
}

function isEmptyDob(insured){
	return (($F("dob" + insured + "_mm_on") == "") && ($F("dob" + insured + "_dd_on") == "") && ($F("dob" + insured + "_yyyy_on") == ""));
}

function isEmptyHeight(insured){
	return (($F("insured" + insured + "_height_feet") == ""));
}

function isEmptyWeight(insured){
	return (($F("insured" + insured + "_weight") == ""));
}

function showSpouse(){
	if($F("has_spouse") == 1){
		$("add-spouse").hide();
		$("disabled-spouse").show();
		$("spouse-row").show();
		spouseValidation(true);
	}else{
		$("add-spouse").show();
		$("disabled-spouse").hide();
		$("spouse-row").hide();
		spouseValidation(false);
	}
	showDependentHeaders();
}

function showChildren(el) {
	var num_children = $F(el);

	for (var i = 1;i <= 5; i++) {
		var id			= "child_option" + i;
		var insured = i + 2;

		if ( i <= num_children ) {
			$(id).show();
			$("child" + i).show();
			changeValidationForInsured(insured, true);
		} else {
			$(id).hide();
			$("gender" + insured).value = "";
			changeValidationForInsured(insured, false);
		}
	}
	showDependentHeaders();
	toggleAddChild();
	showDependentHeaders();
}

function toggleAddChild(){
	var num_children	=	$F("number_of_children");
	if(num_children == 5){
		$("disabled-child").show();
		$("add-child").hide();
	}else{
		$("disabled-child").hide();
		$("add-child").show();
	}
}

function shiftChildren(child_removed){
	var packed_children	=	new Array();
	var insured_kid			=	3;
	var total_children	=	0;
	var start_total			=	$F("number_of_children");
	
	//Shift children down
	for (i=3; i<=7; i++) {
			if(
					$F("gender" + i) != "" && $F("dob" +  i + "_yyyy_on") != "" && $F("dob" +  i + "_mm_on") != "" && $F("dob" +  i + "_dd_on") != ""){						
				if(i < child_removed){
					packed_children["gender" + insured_kid]											=	$F("gender" + i);
					if ($("insured" + insured_kid + "_height_feet"))   packed_children["insured" + insured_kid + "_height_feet"]		=	$F("insured" +  i + "_height_feet");
					if ($("insured" + insured_kid + "_height_inches")) packed_children["insured" + insured_kid + "_height_inches"]	=	$F("insured" +  i + "_height_inches");
					if ($("insured" + insured_kid + "_weight"))        packed_children["insured" + insured_kid + "_weight"]				=	$F("insured" +  i + "_weight");
					if ($("is_smoker" + insured_kid + "_1"))           packed_children["is_smoker" + insured_kid + "_1"]						=	$("is_smoker" +  i + "_1").checked;
					packed_children["is_student" + insured_kid + "_1"]					=	$("is_student" +  i + "_1").checked;
					packed_children["dob" + insured_kid + "_yyyy_on"]						=	$F("dob" +  i + "_yyyy_on");
					packed_children["dob" + insured_kid + "_mm_on"]							=	$F("dob" +  i + "_mm_on");
					packed_children["dob" + insured_kid + "_dd_on"]							=	$F("dob" +  i + "_dd_on");
					insured_kid++;
				}else if (i > child_removed){
					if($F("gender" + i) != ""){
						packed_children["gender" + insured_kid]											=	$F("gender" + i);
						
						if ($("insured" + insured_kid + "_height_feet"))   packed_children["insured" + insured_kid + "_height_feet"]		=	$F("insured" +  i + "_height_feet");
						if ($("insured" + insured_kid + "_height_inches")) packed_children["insured" + insured_kid + "_height_inches"]	=	$F("insured" +  i + "_height_inches");
						if ($("insured" + insured_kid + "_weight"))        packed_children["insured" + insured_kid + "_weight"]				=	$F("insured" +  i + "_weight");
						if ($("is_smoker" + insured_kid + "_1"))           packed_children["is_smoker" + insured_kid + "_1"]						=	$("is_smoker" +  i + "_1").checked;
						
						packed_children["is_student" + insured_kid + "_1"]					=	$("is_student" +  i + "_1").checked;
						packed_children["dob" + insured_kid + "_yyyy_on"]						=	$F("dob" +  i + "_yyyy_on");
						packed_children["dob" + insured_kid + "_mm_on"]							=	$F("dob" +  i + "_mm_on");
						packed_children["dob" + insured_kid + "_dd_on"]							=	$F("dob" +  i + "_dd_on");
						insured_kid++;
					}
				}
			}
		}
		
		for (i=3; i<=7; i++) {
			if(i < insured_kid){
				if ($("insured" + insured_kid + "_height_feet"))   $("insured" +  i + "_height_feet").value	 	= packed_children["insured" +  i + "_height_feet"];
				if ($("insured" + insured_kid + "_height_inches")) $("insured" +  i + "_height_inches").value = packed_children["insured" +  i + "_height_inches"];
				if ($("insured" + insured_kid + "_weight"))        $("insured" +  i + "_weight").value				= packed_children["insured" +  i + "_weight"];
				if ($("is_smoker" + insured_kid + "_1"))           $("is_smoker" +  i + "").value							= packed_children["is_smoker" +  i + ""];
				
				$("is_student" +  i + "_1").checked													= packed_children["is_student" +  i + "_1"];
				$("dob" +  i + "_yyyy_on").value														= packed_children["dob" +  i + "_yyyy_on"];
				$("dob" +  i + "_mm_on").value															= packed_children["dob" +  i + "_mm_on"];
				$("dob" +  i + "_dd_on").value															= packed_children["dob" +  i + "_dd_on"];
			}else{
				if(packed_children["gender" + i] != undefined){
					changeValidationForInsured(i, false);
				}
			}
		}
		
		$("number_of_children").value	=	start_total - 1;
		showChildren($("number_of_children"))
}

function changeValidationForInsured(insured, add_validations) {
	var id			= "gender" + insured;
	var gender	= $F(id);

	if ( add_validations ) {
		$(id + "_error").addClassName("required");
		$("dob" + insured + "_on_error").addClassName("validate-child-dob");
		
		if ($("insured" + insured + "_height_error")) $("insured" + insured + "_height_error").addClassName("validate-height");
		if ($("insured" + insured + "_weight_error")) $("insured" + insured + "_weight_error").addClassName("validate-weight");
	} else {
		$(id).clear();		
		$("dob" + insured + "_mm_on").value	=	"";
		$("dob" + insured + "_dd_on").value	=	"";
		$("dob" + insured + "_yyyy_on").value	=	"";
		$(id + "_error").removeClassName("required");
		$("dob" + insured + "_on_error").removeClassName("validate-child-dob");
		$(id + "_error").hide();
		$("dob" + insured + "_on_error").hide();
		$("is_student" + insured + "_1").checked	=	false;
		
		if ($("insured" + insured + "_height_feet")) $("insured" + insured + "_height_feet").clear();
		if ($("insured" + insured + "_height_inches")) $("insured" + insured + "_height_inches").clear();
		if ($("insured" + insured + "_height_error")) $("insured" + insured + "_height_error").hide();
		if ($("insured" + insured + "_height_error")) $("insured" + insured + "_height_error").removeClassName("validate-height");
		
		if ($("insured" + insured + "_weight")) $("insured" + insured + "_weight").value	=	"";
		if ($("insured" + insured + "_weight_error")) $("insured" + insured + "_weight_error").hide();
		if ($("insured" + insured + "_weight_error")) $("insured" + insured + "_weight_error").removeClassName("validate-weight");
		if ($("is_smoker" + insured + "_1")) $("is_smoker" + insured + "_1").checked	=	false;
	}
}

function isAnyChecked(parent_id){
	var is_valid	= true;
	is_valid			=	Form.getElements($(parent_id)).any(function(e){ return (e.checked); });
	if(!is_valid){
		$("pre_existing_conditions_error").addClassName("error");
	}else{
		$("pre_existing_conditions_error").removeClassName("error");
	}
	return is_valid
}

function showDependentHeaders() {
	if($F("has_spouse") == "1" || $F("number_of_children") > 0){
		$("dependent-headers").show();
	}else {
		$("dependent-headers").hide();
	}
}

if (!(BrowserDetect.browser == "Explorer" && BrowserDetect.version < 6)) {
	FastInit.addOnLoad(function() {
		var health_form = new HealthForm();
	});
}
