	var HealthForm = Class.create();
	HealthForm.prototype =
	{
		initialize: function(form_id){
			this.initializeDisplay();
			this.initializeRequiredFields();
			this.initializeEvents();
			this.lockReturnKey			= false;
			this.form_elements			= this.getErrorElements();
			this.is_valid						= true;
		},

		/*************************************************
		 *initialize display
		 */
		initializeDisplay : function(){
			$("dependents-buttons").show();
			
			$("existing_carrier_row").style.display											=	($("has_existing_carrier_1").checked)? "" : "none";
			$("insured1_current_medications_detail_row").style.display	=	($("takes_medications_1").checked)? "" : "none";
			$("pre_existing_conditions_row").style.display							=	($("pre_existing_1").checked)? "" : "none";
			
			$("remove-spouse").hide();
			$("remove-child").hide();
			$("remove-spouse").disabled	=	true;
			$("remove-child").disabled	=	true;
			
      showChildren($("number_of_children"));
      
      $("spouse-row").style.display	=	($F("has_spouse") == 1)? "" : "none";
		},

		/*************************************************
		 *initialize the validations for required elements
		 */
		initializeRequiredFields : function(){
			//coverage section (applicant)
			$("gender1_error").addClassName("required");
			$("dob1_on_error").addClassName("validate-dob");
			$("insured1_height_error").addClassName("validate-height");
			$("insured1_weight_error").addClassName("validate-weight");
			//contact info section
			$("first_name_error").addClassName("validate-alpha");
			$("last_name_error").addClassName("validate-alpha");
			
			$("address1_street1_error").addClassName("required");
      $("address1_zip_error").addClassName("validate-zip");
      
			$("phone1_error").addClassName("validate-phone");
			$("email1_error").addClassName("validate-email");
			$("reqdate_begin_error").addClassName("validate-request-date");
			$("privacy_policy_error").addClassName("validate-checked");
		},

		/***************************************************************************************************
		 *add event listeners for submit button, return key and custom onclick/onchange
		 */
		initializeEvents : function(){
			Event.observe(document, "keypress", this.validateOnReturnKey.bindAsEventListener(this));
			Event.observe("submit", "click", this.validateFields.bindAsEventListener(this));

			Event.observe("takes_medications_1", "click", this.showTakesMedications.bindAsEventListener(this));
			Event.observe("takes_medications_0", "click", this.showTakesMedications.bindAsEventListener(this));

			Event.observe("pre_existing_1", "click", this.showPreExisting.bindAsEventListener(this));
			Event.observe("pre_existing_0", "click", this.showPreExisting.bindAsEventListener(this));

			Event.observe("has_existing_carrier_1", "click", this.showExistingCarrier.bindAsEventListener(this));
			Event.observe("has_existing_carrier_0", "click", this.showExistingCarrier.bindAsEventListener(this));
			
			//spouse add button
			Event.observe("add-spouse", "click",function(){
				changeValidationForInsured(2, true);
				$("spouse-row").show();
				
				$("remove-spouse").show();
				$("remove-spouse").disabled	=	false;				
				$("add-spouse").disabled		=	true;
				$("has_spouse").value				=	1;
			});
			//spouse remove button
			Event.observe("remove-spouse", "click",function(){
				changeValidationForInsured(2, false);
				$("spouse-row").hide();
				
				$("remove-spouse").hide();
				$("remove-spouse").disabled	=	true;
				$("add-spouse").disabled		=	false;
				$("has_spouse").value				=	0;
			});
			
			//child add button
			Event.observe("add-child", "click",function(){
				var child	=	$F("number_of_children");
				if(child < 5){
					$("child-option" + child).show();
					changeValidationForInsured((parseInt(child) + 3), true);
					$("number_of_children").value	=	parseInt(child) + 1;
					$("remove-child").disabled		=	false;
					$("remove-child").show();
					
					$("add-child").disabled	= ($F("number_of_children") == 5) ? true : false;
				}
			});
			//child remove button
			Event.observe("remove-child", "click",function(){
				$("add-child").disabled	= false;
				var child	=	$F("number_of_children");
				if(child > 0){
					$("child-option" + (child-1)).hide();
					changeValidationForInsured((parseInt(child) + 2), false);
					$("number_of_children").value	=	parseInt(child) - 1;
					
					if($F("number_of_children") == 0){	$("remove-child").hide();	}
				}
			});
		},

		/***************************************************************************************************
		 *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").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); });
				$("pre_existing_conditions_error").removeClassName("error");
			}
		},

		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 changeValidationForInsured(insured, add_validations) {
		var id			= "gender" + insured;
		var gender	= $F(id);

		if ( add_validations ) {
			$(id + "_error").addClassName("required");
			$("insured" + insured + "_height_error").addClassName("validate-height");
			$("insured" + insured + "_weight_error").addClassName("validate-weight");
			
			if(insured > 2){
				$("dob" + insured + "_on_error").addClassName("validate-child-dob");
			}else{
				$("dob" + insured + "_on_error").addClassName("validate-dob");
			}
		} else {
			$(id).clear();
			$("insured" + insured + "_height_feet").clear();
			$("insured" + insured + "_height_inches").clear();
			$("insured" + insured + "_weight").clear();
			$("dob" + insured + "_mm_on").clear();
			$("dob" + insured + "_dd_on").clear();
			$("dob" + insured + "_yyyy_on").clear();
			$(id + "_error").removeClassName("required");
			$("insured" + insured + "_height_error").removeClassName("validate-height");
			$("insured" + insured + "_weight_error").removeClassName("validate-weight");
			
			if(insured > 2){
				$("dob" + insured + "_on_error").removeClassName("validate-child-dob");
			}else{
				$("dob" + insured + "_on_error").removeClassName("validate-dob");
			}
			
			$(id + "_error").hide();
			$("insured" + insured + "_height_error").hide();
			$("insured" + insured + "_weight_error").hide();
			$("dob" + insured + "_on_error").hide();
		}
	}

	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 showChildren(el) {
    var num_children = $F(el);

    for (var i = 0;i <= 4; i++) {
      var id      = "child-option" + i;
      var insured = i + 3;

      if ( i < num_children ) {
        $(id).show();
        changeValidationForInsured(insured, true);
      } else {
        $(id).hide();
        $("gender" + insured).value = "";
        changeValidationForInsured(insured, false);
      }
    }
  }

	if (!(BrowserDetect.browser == "Explorer" && BrowserDetect.version < 6)) {
		FastInit.addOnLoad(function() {
			var health_form = new HealthForm();
		});
	}
