var global_current_date	= new Date();
var global_current_month = global_current_date.getMonth()+1;
var global_current_day		= global_current_date.getDate();
var global_current_year	= global_current_date.getFullYear();

var possible_yes					= new Array();

possible_yes["yes"]			= true;
possible_yes["Yes"]			= true;
possible_yes["Y"]				= true;
possible_yes["y"]				= true;
possible_yes["1"]				= true;
possible_yes["true"]			= true;
possible_yes["True"]			= true;
possible_yes["on"]				= true;

/*
 *util functions
 *
 *isNullorEmpty :: check for empty or null values
 *trim :: remove white space
 *showHide:: hide or show hidden fields passing switch state and id
 *isDefined :: checks if id/field exists
 */
//test if null or empty
function isNullOrEmpty(id){
		return (	(trim($F(id)) == null || trim($F(id)) == '') && isDefined(id)	)
}

function trim (str){
		return str.replace(/^\s+/, '');
}

function showHide(trigger_value, hidden_id){
		if(possible_yes[trigger_value.value]){
				$(hidden_id).style.display = '';
		}else{
				$(hidden_id).style.display = 'none';
		}
}

function isDefined(id){
		if($(id) == null){
				if(document.getElementsByName(id).length == 0)
						return false;
		}else{
				return true;
		}

}

function fadeIn(id){
		if(isDefined(id)){
				new Effect.Appear(id);
		}
}

function fadeOut(id){
		if(isDefined(id)){
				new Effect.Fade(id);
		}
}

function clearInputField(id){
		if(isDefined(id)){
				$(id).value="";
		}
}

function clearErrorMessage(id){
		if(isDefined(id)){
				$(id).innerHTML="";
		}
}

function changeChildren(el) {
	var num_children = $F(el);

	for (var i = 0;i < 5; i++) {
		var id	= 'child_option' + i;
		var insured = i + 3;
		
		if ( i < num_children ) {
			$(id).show();
		} else {
			$(id).hide();
			$('gender' + insured).value = '';
		}
	}
}

function isValidLength(id,error_id, length_required){
		var is_valid	= true;
		var error_msg = '\nPlease enter a valid length.';
		if(isDefined(id) && isDefined(error_id)){
				if ($(id).value.length != length_required ){
						$(error_id).innerHTML = error_msg;
						fadeIn(error_id);
						is_valid = false;
				}
		}
		return is_valid;
}

function isValidSelection(id,error_id){
		var is_valid = true;
		if(isDefined(id) && isDefined(error_id)){
				if ( $(id).value == "" ){
				$(error_id).innerHTML = '\nThis is a required field.';
						fadeIn(error_id);
						is_valid = false;
				}
		}
		return is_valid;
}

function isChecked(id,error_id){
		var is_valid = true;
		if(isDefined(id) && isDefined(error_id)){
				if ( !$(id).checked ){
						$(error_id).innerHTML = '\nThis is a required field.';
						fadeIn(error_id);
						is_valid = false;
				}
		}
		return is_valid;
}

function isEmptyInput(id,error_id){
		var is_empty = false;
		if(isDefined(id) && isDefined(error_id)){
				if ( isNullOrEmpty(id)	 ){
						is_empty = true;
						$(error_id).innerHTML = '\nThis is a required field.';
						fadeIn(error_id);
				}
		}
		return is_empty;
}

function isValidNumber(id,error_id){
		var is_valid = true;
		if(isDefined(id) && isDefined(error_id)){
				if ( isNaN(	trim($(id).value)	)	 ){
				$(error_id).innerHTML = '\nThis is a numeric field.';
						fadeIn(error_id);
						is_valid = false;
				}
		}
		return is_valid;
}

function isValidRequiredAlphaInput(id,error_id){
		var is_valid = true;
		if(isDefined(id) && isDefined(error_id)){
				if (isEmptyInput(id,error_id)){
						$(error_id).innerHTML = '\nThis is a required field.';
						fadeIn(error_id);
						is_valid = false;
				}else if ( !/^[\D]+$/.test( (trim($(id).value)) )	){
						$(error_id).innerHTML = '\nPlease use letters only (a-z).';
						fadeIn(error_id);
						is_valid = false;
				}
		}
		return is_valid;
}
/*******************************************************************************
 *custom scripts
 *
 */
function isValidDate(id_mm,id_dd,id_yyyy,error_id){
				var is_valid				= true;
				//error msgs
				var error_msg_mm		= '\nPlease enter a valid month.';
				var error_msg_dd		= '\nPlease enter a valid day.';
				var error_msg_yyyy = '\nPlease enter a valid year.';
				var error_msg_valid= '\nPlease enter a valid date.';

				if(isDefined(id_mm) && isDefined(id_dd) && isDefined(id_yyyy) && isDefined(error_id)){
						if(is_valid){
								if ( isNullOrEmpty(id_mm) ){
										$(error_id).innerHTML = error_msg_mm;
										fadeIn(error_id);
										is_valid = false;
								}else if( isNaN($(id_mm).value) ){
										$(error_id).innerHTML = error_msg_mm;
										fadeIn(error_id);
										is_valid = false;
								}else if(	!(($(id_mm).value) <= 12 && ($(id_mm).value) >= 1)	){
										$(error_id).innerHTML = error_msg_mm;
										fadeIn(error_id);
										is_valid = false;
								}
						}
						if(is_valid){
								if (	isNullOrEmpty(id_dd)	){
										$(error_id).innerHTML = error_msg_dd;
										fadeIn(error_id);
										is_valid = false;
								}else if( isNaN($(id_dd).value) ){
										$(error_id).innerHTML = error_msg_dd;
										fadeIn(error_id);
										is_valid = false;
								}else if(!($(id_dd).value <= 31 && $(id_dd).value >= 1) ){
										$(error_id).innerHTML = error_msg_dd;
										fadeIn(error_id);
										is_valid = false;
								}
						}
						if(is_valid){
								if (	isNullOrEmpty(id_yyyy)	){
										$(error_id).innerHTML = error_msg_yyyy;
										fadeIn(error_id);
										is_valid = false;
								}else if( isNaN($(id_yyyy).value) ){
										$(error_id).innerHTML = error_msg_yyyy;
										fadeIn(error_id);
										is_valid = false;
								}else if(($(id_yyyy).value).length < 4){
										$(error_id).innerHTML = error_msg_yyyy;
										fadeIn(error_id);
										is_valid = false;
								}else if($(id_yyyy).value > (parseInt(global_current_year)) || $(id_yyyy).value < (parseInt(global_current_year)-100)){
										$(error_id).innerHTML = error_msg_yyyy;
										fadeIn(error_id);
										is_valid = false;
								}
						}
						//validate if it is a valid date (day is in the month)
						if(is_valid){
								var new_date = new Date();
								var this_mm	= $F(id_mm) - 1;
								new_date.setFullYear( $F(id_yyyy), this_mm, $F(id_dd) );
								if ( new_date.getMonth() != this_mm ) {
									$(error_id).innerHTML = error_msg_valid;
									fadeIn(error_id);
									is_valid = false;
								}
						}
					}
		if(is_valid){
				fadeOut(error_id);
		}
		return is_valid;
}

function isValidZip(zip, error_id){
		var is_valid		= true;
		var zip_length = 5;
		if(isDefined(zip) && isDefined(error_id)){
				if (isEmptyInput(zip,error_id)){
						is_valid = false;
				}
				if(is_valid){
						if(isNaN($F(zip))){
								$(error_id).innerHTML = '\nPlease enter a valid zip code.';
								fadeIn(error_id);
								is_valid = false;
						}
				}
				if(is_valid){
						if(!isValidLength(zip,error_id,zip_length)){
								is_valid = false;
						}
				}
		}
		return is_valid;
}

function isValidHeight(feet, inches, error_id){
	var is_valid = true;	
	//validate height-weight
	if(isDefined(feet) && isDefined(inches) && isDefined(error_id)){
			is_valid = isValidSelection(feet, error_id);
			if(	is_valid	){
				is_valid = isValidSelection(inches, error_id)	
			}
			if(	is_valid	){
				fadeOut(error_id);
			}
	}
	return is_valid;
}

function isValidWeight(weight, error_id){
			var is_valid = true;
			if(isDefined(weight) && isDefined(error_id)){
					if (	isNullOrEmpty(weight)	){
						$(error_id).innerHTML = '\nThis is a required field.';
						fadeIn(error_id);
						is_valid = false;
					}else if(isNaN($(weight).value)){
						$(error_id).innerHTML = '\nPlease enter a valid weight.';
						fadeIn(error_id);
						is_valid = false;
					} else {
						fadeOut(error_id);
					}
			}
		return is_valid;
}

function isValidEmail(email, error_id){
			var is_valid = true;
			// validate email
			if(	isDefined(email) && isDefined(error_id)	){
					if (isNullOrEmpty(email)){
							$(error_id).innerHTML = '\nPlease enter your email address.';
							fadeIn(error_id);
							is_valid = false;
					}else if (!/^([A-Z0-9]+[._]?){1,}[A-Z0-9-]+\@(([A-Z0-9]+[-]?){1,}[A-Z0-9]+\.){1,}([A-Z]{2,4}|museum)$/i.test($F(email))){
							$(error_id).innerHTML = '\nPlease enter a valid email address.';
							fadeIn(error_id);
							is_valid = false;
					}
			}
			return is_valid;
}

function isValidPhone(error_id){
		var is_valid			= true;
		if(	isDefined(error_id)	){
				var parent_node	= $(error_id).parentNode;
				var phone_fields = parent_node.getElementsByTagName('INPUT');

				//check for phone parts or single
				if(phone_fields.length == 1){
						//check if empty
						is_valid = !isEmptyInput(phone_fields[0], error_id);
						//check if a valid number
						if(is_valid){
						is_valid = isValidNumber(phone_fields[0], error_id);
						}
						if(is_valid){
								is_valid = isValidLength(phone_fields[0], error_id, 10);
						}
				}else{
						//check if empty
						for(i=0; i < phone_fields.length; i++){
								if(is_valid){
										is_valid = !isEmptyInput(phone_fields[i], error_id);
								}
						}
						//check if a valid number
						if(is_valid){
								for(i=0; i < phone_fields.length; i++){
										is_valid = isValidNumber(phone_fields[i], error_id);
										if(!is_valid){
												break;
										}
								}
						}
						if(is_valid){
								for(i=0; i < phone_fields.length; i++){
										//check if a valid length
										if(i != 2){
												is_valid = isValidLength(phone_fields[i], error_id, 3);
												if(!is_valid){
														break;
												}
										}else{
												is_valid = isValidLength(phone_fields[i], error_id, 4);
										}
								}
						}

				}
		}
		return is_valid;
}

function validate_fields(){
		var is_valid = true;

		//validate self (gender, dob, height and weight)
		//check if element exists
		if(!isValidSelection('gender1','gender1_error')){
				is_valid = false;
		}else{
				fadeOut('gender1_error');
		}
		if(!isValidDate('dob1_mm_on','dob1_dd_on','dob1_yyyy_on','dob1_on_error')){
				is_valid = false;
		}
		if(!isValidHeight('insured1_height_feet','insured1_height_inches','insured1_height_error')){
				is_valid = false;
		}
		if(!isValidWeight('insured1_weight','insured1_weight_error')){
				is_valid = false;
		}

		var _error								= "_error";
		var current_gender				= "";
		var current_gender_error = "";
		var current_mm						= "";
		var current_dd						= "";
		var current_yyyy					= "";
		var current_dob_error		= "";

		var current_height_feet	= "";
		var current_height_inches= "";
		var current_height_error = "";

		var current_weight				= "";
		var current_weight_error = "";

		//validate dependents dob
		for(i=2; i <= 7; i++){
				current_gender				= "gender" + i;
				current_gender_error = "gender" + i + _error;

				current_mm						= "dob" + i + "_mm_on";
				current_dd						= "dob" + i + "_dd_on";
				current_yyyy					= "dob" + i + "_yyyy_on";
				current_dob_error		= "dob" + i + "_on_error";

				current_height_feet	= "insured" + i + "_height_feet";
				current_height_inches= "insured" + i + "_height_inches";
				current_height_error = "insured" + i + "_height" + _error;

				current_weight				= "insured" + i + "_weight";
				current_weight_error = "insured" + i + "_weight" + _error;
				
				if(isValidSelection(current_gender,current_gender_error)){
					
						if(!isValidDate(current_mm, current_dd, current_yyyy, current_dob_error)){
							is_valid = false;
						} 
						if(!isValidHeight(current_height_feet,current_height_inches,current_height_error)){
								is_valid = false;
						}
						if(!isValidWeight(current_weight,current_weight_error)){
								is_valid = false;
						}
				}else{
					clearErrorMessage(current_gender_error);
					fadeOut(current_dob_error);
					fadeOut(current_height_error);
					fadeOut(current_weight_error);
					clearInputField(current_mm);
					clearInputField(current_dd);
					clearInputField(current_yyyy);
					clearInputField(current_height_feet);
					clearInputField(current_height_inches);
					clearInputField(current_weight);							
				}
		}

		//validate existing insurance
		if(document.loanform.has_existing_carrier != undefined){
			if(document.loanform.has_existing_carrier[0].checked){
				is_valid = isValidSelection('existing_carrier','existing_carrier_error');
				if(is_valid){
						fadeOut('existing_carrier_error');
				}
			}else{
				fadeOut('existing_carrier_error');
			}
		}

		//validate existing medications
		if(document.loanform.takes_medication != undefined){
				if(document.loanform.takes_medication[0].checked){
						is_valid = isValidSelection('insured1_current_medications_detail','insured1_current_medications_detail_error');
						if(is_valid){
								fadeOut('insured1_current_medications_detail_error');
						}
				}
		}

		var req_mm		= 'reqdate_mm_begin';
		var req_dd		= 'reqdate_dd_begin';
		var req_yy		= 'reqdate_yyyy_begin';
		var req_er		= 'reqdate_begin_on_error';
		//validate when coverage begins
		if(isDefined(req_mm) && isDefined(req_dd) && isDefined(req_yy) && isDefined(req_er)){
				var new_date = new Date()
				var this_mm	= $F(req_mm) - 1;
				
				new_date.setFullYear(	$F(req_yy), this_mm, $F(req_dd)	);
				
				if(!isValidSelection(req_mm,req_er) || !isValidSelection(req_mm,req_er)){
						is_valid = false;
				} else if(new_date.getMonth() != this_mm){
						////////////////////////////////////////////
						$(req_er).innerHTML = '\nPlease select a valid date.';
						fadeIn(req_er);
						is_valid = false;
				} else if(new_date < global_current_date){
						////////////////////////////////////////////
						$(req_er).innerHTML = '\nPlease select a current or future date.';
						fadeIn(req_er);
						is_valid = false;
				} else{
						fadeOut(req_er);
				}
		}
		
		var contact_fields = new Array(
																	 'first_name',
																	 'last_name',
																	 'address1_city'
																	);

		var contact_error	= "";
		//checks if it exists and empty as well as trim the values
		 for(i=0; i < 3; i++ ){
				contact_error = contact_fields[i] + _error;
				if(!isValidRequiredAlphaInput(contact_fields[i], contact_error)){
						is_valid = false;
				}else{
						fadeOut(contact_error);
				}
		}

		if(isEmptyInput('address1_street1','address1_street1_error')){
				is_valid = false;
		} else {
				fadeOut('address1_street1_error');
		}

		if(!isValidSelection('address1_state','address1_state_error')){
				is_valid = false;
		} else {
				fadeOut('address1_state_error');
		}

		if(!isValidZip('address1_zip','address1_zip_error')){
				is_valid = false;
		} else {
				fadeOut('address1_zip_error');
		}

		if(!isValidEmail('email1','email1_error')){
				is_valid = false;
		} else {
				fadeOut('email1_error');
		}

		if(	!isValidPhone('phone1_error')	){
				is_valid = false;
		} else {
				fadeOut('phone1_error');
		}

		if(	!isValidPhone('phone2_error')	){
				is_valid = false;
		} else {
				fadeOut('phone2_error');
		}
		
		if(	!isChecked('privacy_policy','privacy_policy_error')	){
				is_valid = false;
		} else {
				fadeOut('privacy_policy_error');
		}

		return is_valid;
}