// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

function window_scroll(event) {
	Position.prepare();

	tabbed_nav = $$('.tabbed_nav');
	stappen = $$('.form_steps');

	height = 0;
	diff = height - 48; 
	element_diff = diff + 2;

	if(tabbed_nav.size() > 0) {
	  // tab_height == 75 **** Bij twee regels
	  // tab_height == 48 **** Bij één regel
	  diff = tabbed_nav.first().getHeight() - 48;
	  element_diff = diff + 2;
	}

	if(stappen.size() > 0) {
	  // height = stappen.first().getHeight(); 
	  height = 68;
	  diff = height - 52;
	  element_diff = -50;
	}

	// Position.deltaY **** Hoe hoger, hoe later de basket verplaatst

	position = Position.deltaY - (245+diff)

	wrapper_height = $$('.bereken_wrapper').first().getHeight();
	premie_basket_height = $('slider_wrapper').getHeight();

	// if(position > 0 && position + premie_basket_height <= wrapper_height-height-6 && window.innerHeight > premie_basket_height) {
	if(position > 0 && position + premie_basket_height <= wrapper_height-height-6 && document.viewport.getHeight() > premie_basket_height) {
	  // $('premie_basket_slider').setStyle({top: Position.deltaY - (220+element_diff) + 'px'});
		$('slider_wrapper').removeClassName('pinned_bottom');
		$('slider_wrapper').addClassName('floating');
	}
	else if(position + premie_basket_height > wrapper_height-height-6 && document.viewport.getHeight() > premie_basket_height) {
		$('slider_wrapper').removeClassName('floating');
		$('slider_wrapper').addClassName('pinned_bottom');
	}
	else {
		$('slider_wrapper').removeClassName('pinned_bottom');
		$('slider_wrapper').removeClassName('floating');
		$('slider_wrapper').setStyle({top: (78+height)+'px'});
	}
}

if (typeof(SeatHolder) != "undefined") {
	SeatHolder.hintColor = "#89B8D1";
}

if (typeof(TopUp) != "undefined") {
	TopUp.images_path    = "/plugin_assets/betty/images/top_up/";
	TopUp.resources_path = "/plugin_assets/betty/images/top_up/resources/";
}

function register_responders() {
	Ajax.Responders.register({
		onCreate: function(){
			if(Ajax.activeRequestCount > 0) {
				show_loading();
			}
		},

		onComplete: function() {
			if(Ajax.activeRequestCount == 0) {
				hide_loading();
			}
		}
	});
	
}

var element_observers = new Array();

Element.addMethods('div', {
  insideContainer: function(element) {
		if (element.getStyle("display") == "none") {
      $(element.identify() + "_container").appendChild(element.show());
			reset_form_observer();
		}
  },
  outsideContainer: function(element) {
   	$("hidden_dependencies").appendChild(element.show());
  }
});

function toggleInformation(element) {

	$(element).up().toggleClassName("open").up().down(".toggler_content").toggle();
}
function toggleAdditions(element) {
	var id = $(element).identify().split("_").last();
	
	if ($("coverage_additions").childElements().size() == 1) {
		var child = $("coverage_additions").childElements().first();
		$("other_coverage_additions").appendChild(child);
		child.getElementsBySelector("input").each(function(e) {e.checked = false});
	}
	$("coverage_additions").appendChild($("additions_" + id));
	$("coverage_additions").down("ul").childElements().size() == 0 ? $("additions_headers").hide() : $("additions_headers").show();
}
function toggleFaq(element) {
	$(element).next("div.answer").toggle();
}
function toggleElements(question) {
	$(question).checked = true;
	toggle_dependencies();
}
function showGetCarPlateButton() {
	if ($('car_plate_input').readAttribute("has_focus") == 1) {
		$('get_car_plate_data').removeClassName("red");
	} else {
		$('get_car_plate_data').addClassName("red");
	}
	$('get_car_plate_data').show();
}
function hideGetCarPlateButton() {
	$('get_car_plate_data').hide();
}
function showCarPlateControls() {
	$("car_plate_controls").show();
	$("car_plate_info").hide();
	$("car_plate_input").activate();
	checkCompletion($("car_plate_input"));
}
function showCarPlateInfo(element) {
	$("car_plate_controls").hide();
	$("car_plate_info").show();
	checkCompletion($(element));
}
function toggle_acceptgiro() {
	if ($('quote_payment_interval_maand').checked) {
		$('acceptgiro_label').hide();
		$('quote_payment_method_acceptgiro').hide();
		$('quote_payment_method_acceptgiro').disable();
		$('quote_payment_method_incasso').checked = true;
	} else {
		$('acceptgiro_label').show();
		$('quote_payment_method_acceptgiro').show();
		$('quote_payment_method_acceptgiro').enable();
	}
	checkCompletion($('quote_payment_method_incasso'));
}

function show_loading() {
	if (Object.isElement($('totals')))
		$('totals').hide();
	if (Object.isElement($('summary_details')))
		$('summary_details').hide();
	if(Object.isElement($('error_message')))
		$('error_message').hide();
	
	$('spinner').show();
	disable_submit_buttons();
}
function hide_loading() {
	$('spinner').hide();
}

function disable_submit_buttons() {
	if ($('submit_links')) {
		$('submit_links').hide();
    $('submit_button_1').disabled = true;
    $('submit_button_2').disabled = true;
		$('submit_button_3').disabled = true;
		$("submit_links").down('.proposal').addClassName("disabled").onclick = function() {return false};
	}
}
function enable_submit_buttons() {
	if ($('submit_links')) {
		$('submit_links').show();
    $('submit_button_1').disabled = false;
    $('submit_button_2').disabled = false;
		$('submit_button_3').disabled = false;
		$("submit_links").down('.proposal').removeClassName("disabled").onclick = null;
	}
}

function disable_order_request() {
	if ($('submit_links')) {
		// $('submit_button_3').disabled = true; 
		// $("submit_button_1").addClassName("disabled").onclick = function() {return false};		
	}
}
function enable_order_request() {
	if ($('submit_links')) {
		// $("submit_button_1").removeClassName("disabled").onclick = null;
		// $("submit_links").down('.request').removeClassName("disabled").onclick = null;
	}
}

function resetAdditionsGroup(element) {
  if ((element = $(element)).checked)
    return;
  
  var parent = element.up("li");
  var className = $A(parent.classNames()).first();
  
  parent.nextSiblings().each(function(li) {
    if (li.hasClassName(className))
      li.getElementsBySelector("input").each(function(e) { e.checked = false });
  });

	reset_form_observer();
}
function setAdditionsGroupCheckBoxState(element) {
  var parent = (element = $(element)).up("li");
  var className = $A(parent.classNames()).first();
  
  parent.up("ul").getElementsBySelector("li." + className + ":first").first().getElementsBySelector("input").first().checked = true;
	reset_form_observer();
}

function _CV(dependency_form_id, element_name) {
	var inputs = $(dependency_form_id).getInputs('checkbox', element_name);
	if (inputs.size() == 0)
		return null;
  var checked = inputs.find(
    function(cb) {return cb.checked;}
  );
  return checked ? $F(checked) : null;
}
function _RV(dependency_form_id, element_name) {
	var inputs = $(dependency_form_id).getInputs('radio', element_name);
	if (inputs.size() == 0)
		return null;
  var checked = inputs.find(
    function(re) {return re.checked;}
  ); 
  return checked ? $F(checked) : null;
}
function _FV(dependency_form_id, element_name) {
	var form_elements = $(dependency_form_id).getElements();
	
	for(var i=0; i<form_elements.size(); i++) {
		var el = form_elements[i];
		if(el.name == element_name) {
			return el.value;
		}
	}
	return null;
}

function is_question_value_set(dependency_form_id, element_name, element_type) {
	if(element_type == 'radiogroup') {
		var is_checked = (_RV(dependency_form_id, element_name) != null);
		return is_checked;
	}
}

function reset_question_value(dependency_form_id, question_id, question_type) {
	var element_name = 'quote[answers][' + question_id + ']';
	if(!$('question_' + question_id).visible() && is_question_value_set(dependency_form_id, element_name, question_type)) {
		if(question_type == 'radiogroup') {
		  var checked = $(dependency_form_id).getInputs('radio', element_name).find(
		    function(re) {return re.checked;}
		  ); 
			checked.checked = false;
		}
	}
}
function reset_field_set_elements(dependency_form_id, field_set_id) {
	var field_set = $('field_set_' + field_set_id);
	if(!field_set.visible()) {
		$(dependency_form_id).getElements().each(function(form_element) {
			if(form_element.descendantOf(field_set)) {
				switch(form_element.type) {
					case 'radio':
						form_element.checked = false;
						break;
					case 'select-one':
						form_element.selectedIndex = 0;
						break;
					default:
						form_element.clear();
				}
			}
		});
	}
}
function reset_form_observer() {
  try {		
	  calculation_observer.registerFormCallbacks();
	} catch(e) {}
}
function reset_fields(field_ids) {
	field_ids.each(function(field_id, i) {
		var element = $('quote_answers_' + field_id);
		
		if (element) {
			switch(element.type) {
				case 'radio':
					element.checked = false;
					break;
				case 'select-one':
					element.selectedIndex = 0;
					break;
				case 'hidden':
					element.value = '';
					$('quote_answers_' + field_id + '_value').update("");
				default:
					element.clear();
			}
			
			if (Prototype.Browser.IE) {
				$("question_" + field_id).removeClassName("completed");
			} else {
				element.up(".question").removeClassName("completed");
			}
		}
	});
	
	toggle_dependencies();
}

function show_light_box(form_dependency_id) {
	TopUp.display("/form_dependencies/light_box/" + form_dependency_id, {title: "Helaas", shaded: 1, layout: "quicklook", resizable: 0});
}
function hide_light_box(form_dependency_id) {
  TopUp.close();
}

function quickSelect(select_id, value) {
	$(select_id).getElementsBySelector("option").each(function(x, index) {
		if (x.value == value) {
			$(select_id).selectedIndex = index;
			checkCompletion(select_id);
			toggle_dependencies();
			calculateCoverage();
			return;
		}
	});
}
function checkDurationRange(date_question_id, duration_question_id) {
	var today		 = new Date();
	var birthday = new Date();
	birthday.setFullYear($(date_question_id + "_year").value, parseInt($(date_question_id + "_month").value) - 1, $(date_question_id + "_day").value);

	var age = today.getFullYear() - birthday.getFullYear();
	if (today.getMonth() < birthday.getMonth() || (today.getMonth() == birthday.getMonth() && today.getDate() < birthday.getDate()))
		age -= 1;
	var max = 79 - age;
	var maxVisibleOption = $(duration_question_id).options[0];
	
	$(duration_question_id).getElementsBySelector("option").each(function(x) {
		if (x.value == "" || parseInt(x.innerHTML) <= max) {
			maxVisibleOption = x;
			x.show();
		} else {
			x.hide();
		}
	});
	
	var selected = $(duration_question_id).options[$(duration_question_id).selectedIndex];
	if (parseInt(selected.innerHTML) > parseInt(max)) {
		maxVisibleOption.selected = true;
	}
}

function acceptDigits(event) {
	var charCode = event.which || event.keyCode;
	return (charCode != 37) &&
	       (($A([Event.KEY_BACKSPACE, Event.KEY_DELETE, Event.KEY_TAB, Event.KEY_LEFT, Event.KEY_RIGHT, Event.KEY_RETURN]).indexOf(charCode) != -1) || 
				  (String.fromCharCode(charCode).match(/\d/) != null));
}
function acceptChars(event) {
	var charCode = event.which || event.keyCode;
	return (charCode != 37) &&
	       (($A([Event.KEY_BACKSPACE, Event.KEY_DELETE, Event.KEY_TAB, Event.KEY_LEFT, Event.KEY_RIGHT, Event.KEY_RETURN]).indexOf(charCode) != -1) || 
				  (String.fromCharCode(charCode).match(/[- abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]/) != null));
}
function acceptDigitsAndChars(event) {
	return acceptDigits(event) || acceptChars(event);
}
function checkCompletion(element) {
	element = $(element);
	
	if (Prototype.Browser.IE) {
		var question = element.ancestors().detect(function(a) {
  									 return a.hasClassName("question");
									 });
	} else {
		var question = element.up(".question");
	}
	
	var name        = element.readAttribute("name");
	var inputs			= [];
  
	if (name == null) {
		var serialized = {};
		var value			 = element.value;
	} else {
		if (question.hasClassName("birthday") || question.hasClassName("commence_date")) {
	    name   = name.gsub(/\(.+\)\]$/, "");
	    inputs = [document.getElementsByName(name + "(3i)]")[0], document.getElementsByName(name + "(2i)]")[0], document.getElementsByName(name + "(1i)]")[0]];
		} else if (question.hasClassName("address_zipcode")) {
	    name   = name.gsub(/(_addition)?\]$/, "");
	    inputs = [document.getElementsByName(name + "]")[0], document.getElementsByName(name + "_addition]")[0]];
	  } else {
			inputs = document.getElementsByName(name);
	
	  	var split = name.split("[");
	  	split.pop();
	  	name = split.join("[");
  	
	  	if (question.hasClassName("zip_code"))
	  	  inputs        = [document.getElementsByName(name + "[digits]")[0], document.getElementsByName(name + "[chars]")[0]];
	  	if (question.hasClassName("date"))
	  	  inputs        = [document.getElementsByName(name + "[day]")[0], document.getElementsByName(name + "[month]")[0], document.getElementsByName(name + "[year]")[0]];
	  	if (question.hasClassName("body_mass"))
	  	  inputs        = [document.getElementsByName(name + "[length]")[0], document.getElementsByName(name + "[weight]")[0]];
	  	if (question.hasClassName("blood_pressure"))
	  	  inputs        = [document.getElementsByName(name + "[diastolic]")[0], document.getElementsByName(name + "[systolic]")[0]];
	  }
  
		var serialized	= $H(Form.serializeElements($A(inputs), true));
		var value       = serialized.values().first() || "";
	}
	
	var isCompleted = value.length > 0;
	
	if (question.hasClassName("car_plate"))
	  isCompleted = value.length == 6;
  if (question.hasClassName("meldcode"))
	  isCompleted = value.length == 4;
  if (question.hasClassName("zip_code"))
    isCompleted = serialized.get(name + "[digits]").length == 4 && serialized.get(name + "[chars]").length == 2;
  if (question.hasClassName("date"))
    isCompleted = serialized.get(name + "[day]").length > 0 && serialized.get(name + "[month]").length > 0 && serialized.get(name + "[year]").length > 0;
  if (question.hasClassName("body_mass"))
    isCompleted = serialized.get(name + "[length]").length > 1 && serialized.get(name + "[weight]").length > 1;
  if (question.hasClassName("blood_pressure"))
    isCompleted = serialized.get(name + "[diastolic]").length > 1 && serialized.get(name + "[systolic]").length > 1;
	if (question.hasClassName("birthday") || question.hasClassName("commence_date"))
    isCompleted = serialized.get(name + "(3i)]").length > 0 && serialized.get(name + "(2i)]").length > 0 && serialized.get(name + "(1i)]").length > 0;
  if (question.hasClassName("social_security_number"))
	  isCompleted = value.length == 9;
  if (question.hasClassName("address_zipcode"))
    isCompleted = serialized.get(name + "]").length == 4 && serialized.get(name + "_addition]").length == 2;
  if (question.hasClassName("phone_number"))
	  isCompleted = value.length == 10;
  if (question.hasClassName("email"))
    isCompleted = value.match(/[\w\.\-]+\@[\w\.\-]+\.[\w]+/) != null;
  if (question.hasClassName("account_number"))
	  isCompleted = value.length >= 1 && value.length <= 11;
	
	isCompleted ?
		question.addClassName("completed") :
		question.removeClassName("completed");
}

function hiddenQuestions() {
	var hidden = $H($("hidden_dependencies").serialize(true)).keys().collect(function(key) {
								 return key.substring(0, key.length - 1).replace("quote[answers][", "").replace("][day", "").replace("][month", "").replace("][year", "");
							 });
	return $H({"quote[hidden][]": hidden}).toQueryString();
}

function calculateCoverage(skip_hidden_fields) {
  new Ajax.Request("/products/calculate_coverage", 
    {
      parameters: $("calculation_form").serialize() + "&" + hiddenQuestions() + "&skip_hidden_fields=" + skip_hidden_fields,
      onCreate: function() {
        setTimeout(function() {
          if (jQuery("#spinner").is(":visible")) {
            showSpinnerOverlay();
          }
        }, 1000);
      },
      onComplete: hideSpinnerOverlay()
    }
  );
}

function callBackendAction(element, question_id, backend_action_id, form_id, skip_hidden_fields, calculate_on_complete) {
	if (form_id.endsWith("_qq"))
		return;
	
	var form = $(form_id);
	var index_number = "&index_number=" + $(element).identify().split("_").last().split("#")[1];

	if (index_number == "&index_number=")
		index_number = "";

	if (calculate_on_complete == undefined)
		calculate_on_complete = false;
    
  if (form_id == 'calculation_form') {
  	if (calculate_on_complete) {
  		new Ajax.Request("/products/execute_backend_action/?question_id=" + question_id + "&backend_action_id=" + backend_action_id + "&skip_hidden_fields=" + skip_hidden_fields, 
  										 {asynchronous: false, parameters: form.serialize() + "&" + hiddenQuestions() + index_number, 
  											onComplete: function(request) { reset_form_observer(); calculateCoverage(skip_hidden_fields); }});
		
  	} else {
  		new Ajax.Request("/products/execute_backend_action/?question_id=" + question_id + "&backend_action_id=" + backend_action_id + "&skip_hidden_fields=" + skip_hidden_fields, 
  										 {asynchronous: false, parameters: form.serialize() + "&" + hiddenQuestions() + index_number, 
  											onComplete: function(request) { reset_form_observer(); }});
    }
  } else {
    new Ajax.Request("/products/execute_backend_action/?question_id=" + question_id + "&backend_action_id=" + backend_action_id + "&skip_hidden_fields=" + skip_hidden_fields, 
                     {parameters: form.serialize() + "&" + hiddenQuestions() + index_number});
  }
}
function submitAcceptanceForm() {
	new Ajax.Request("/orders/check_for_acceptation", {asynchronous: true, evalScripts: true, parameters: $("acceptance_form").serialize() + "&" + hiddenQuestions()});
}
function submitAnswers(form_id) {
	form_id == "calculation_form" ?
		calculateCoverage() :
		new Ajax.Request("/products/update_answers", {parameters: $(form_id).serialize() + "&" + hiddenQuestions()});
}

function acceptDigits(event) {
	var charCode = event.which || event.keyCode;
	return (charCode != 37) &&
	       (($A([Event.KEY_BACKSPACE, Event.KEY_DELETE, Event.KEY_TAB, Event.KEY_LEFT, Event.KEY_RIGHT, Event.KEY_RETURN]).indexOf(charCode) != -1) || 
				  (String.fromCharCode(charCode).match(/\d/) != null));
}

function loadCpoAnalysesIndex(token) {
	var params = $("weekselector").visible() ?
								 {week: $("week").value} :
								 {from: $("from_date").value, till: $("till_date").value};
	new Ajax.Request("/betty/cpo_analyses/change_index", {parameters: $H(params).toQueryString() + "&authenticity_token=" + encodeURIComponent(token), 
																												onLoading: showCpoSpinner});
}

function loadCpoAnalysesDetails(token) {
	var params = {campaign_id: $("campaign_id").value,
								week: $("week").value};
	new Ajax.Request("/betty/cpo_analyses/change_details", {parameters: $H(params).toQueryString() + "&authenticity_token=" + encodeURIComponent(token), 
																													onLoading: showCpoSpinner});
}

function showCpoSpinner() {
	$("spinner").show();
	$("cpo_analyses").hide();
	$("load_button").disable();
}

function hideCpoSpinner() {
	$("spinner").hide();
	$("cpo_analyses").show();
	$("load_button").enable();
}

function sendCreateOrderForm() {
	$('confirm_button').hide();
	$('small_spinner').show();
	$('order_form').submit();
}

function toggleSpinnerOverlay() {
  $('spinner_overlay').toggle();
}

function showSpinnerOverlay() {
  $('spinner_overlay').show();
}

function hideSpinnerOverlay() {
  $('spinner_overlay').hide();
}

function checkForm() {
  new Ajax.Request("/products/check_form", {parameters: "productid=" + $("productid").value});
}

function hideAcceptanceButton() {
  $('small_spinner').show();
  $('acceptance_submit').hide();
}

function showAcceptanceButton() {
  $('small_spinner').hide();
  $('acceptance_submit').show();
}
