﻿jQuery(document).ready(function($) {
//	var frombox = $("#inp_from").selectbox();
//	var tobox   = $("#inp_to"  ).selectbox();

	/** 
	 * Initiera datepicker
	 */
	var defaultDateOutbound = 0;
	var defaultDateReturn   = 0;

	var round_trip = ROUND_TRIP;

	if (DATE_OUTBOUND != 0) {
		var date = DATE_OUTBOUND.split("-");
		defaultDateOutbound = new Date(date[0], date[1]-1, date[2]);
	}

	if (DATE_RETURN != 0) {
		var date = DATE_RETURN.split("-");
		defaultDateReturn = new Date(date[0], date[1]-1, date[2]);
	}

	$("#datepicker_outbound").datepicker({
		altFiled: "#inp_date_outbound",
		altFormat: "yy-mm-dd",
		dateFormat: "yy-mm-dd",
		dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
		dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
		dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
		defaultDate: defaultDateOutbound,
		firstDay: 1,
		minDate: 0,
		monthNames: ['Januari','Februari','Mars','April','Maj','Juni','Juli','Augusti','September','Oktober','November','December'],
		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun','Jul','Aug','Sep','Okt','Nov','Dec'],
		onSelect: function(dateText, inst) {
			var date = dateText.split("-");
			$("#datepicker_return").datepicker("option", "minDate", new Date(date[0], date[1]- 1, date[2]));
			disableStops();
			updateLabelYears(date[0]);
		}
	});

	$("#datepicker_return").datepicker({
		altFiled: "#inp_date_return",
		altFormat: "yy-mm-dd",
		dateFormat: "yy-mm-dd",
		dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
		dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
		dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
		defaultDate: defaultDateReturn,
		firstDay: 1,
		minDate: defaultDateOutbound,
		monthNames: ['Januari','Februari','Mars','April','Maj','Juni','Juli','Augusti','September','Oktober','November','December'],
		monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun','Jul','Aug','Sep','Okt','Nov','Dec'],
		onSelect: function(dateText, inst) {
			disableStops();
		}
	});

	/** Sparar datumet i en hidden-variabel */
	$("#datepicker_outbound").datepicker("option", "altField", "#inp_date_outbound");
	$("#datepicker_return"  ).datepicker("option", "altField", "#inp_date_return"  );

	/** Sätter default-format */
	$("#datepicker_outbound").datepicker("option", "altFormat", "yy-mm-dd");
	$("#datepicker_return"  ).datepicker("option", "altFormat", "yy-mm-dd");

	$(".inp_round_trip").change(function() {
		round_trip = $(this).val();

		/** Inaktivera hållplatser som inte är bokningsbara */
		disableStops();

		if (round_trip == 0) {
			$("#date_return").fadeOut(250);
		} else {
			$("#date_return").fadeIn(200);
		}
	});

	/** Inaktivera hållplatser som inte är bokningsbara */
	disableStops();

	$("#inp_round_trip").checkbox();

	if (ROUND_TRIP == 0) {
		$("#date_return").css("display", "none");
	}

	$("#inp_round_trip").change(function() {
		toggleRoundTrip($(this).is(":checked"));
	});

	/** Kontrollera passagerarantalsgränserna redan från start */
	checkLimits();

	/** Minskar antalet resenärer */
	$("button.decrease").click(function(e) {
		e.preventDefault();

		checkLimits($(this).next(), "decrease");
	});

	/** Ökar antalet resenärer */
	$("button.increase").click(function(e) {
		e.preventDefault();

		checkLimits($(this).prev(), "increase");
	});

	/** Kontrollera gränserna om antalet ändrats utan att plus-/minusknapparna använts */
	$("input.passive").change(function() {
		checkLimits($(this));
	});

	/** Begränsa input-fälten för antal resenärer till endast siffror */
    $("input.passive").keydown(function(e) {
		var key = e.which || e.keyCode;

		if (!e.shiftKey && !e.altKey && !e.ctrlKey &&

			/** Siffror */
			key >= 48 && key <= 57 ||

			/** Siffertangentbordet */
			key >= 96 && key <= 105 ||

			/** Komma, punkt och minus, . på siffertangentbordet */
			key == 190 || key == 188 || key == 109 || key == 110 ||

			/** Backspace, Tab och Enter */
			key == 8 || key == 9 || key == 13 ||

			/** Home och End */
			key == 35 || key == 36 ||

			/** Vänster- och högerpil */
			key == 37 || key == 39 ||

			/** Del och Ins */
			key == 46 || key == 45) {
			return true;
		}

		return false;
    });

	/** Ändrar vissa resenärstypers texter */
	updateLabelYears($("#datepicker_outbound").datepicker("getDate").getFullYear());

	/** Kontrollerar om någon av plus-/minusknapparna behöver inaktiveras */
	function checkLimits(input, action) {
		if (input == null) {
			input = $("input.passive");
		}

		input.each(function() {
			var val   = parseInt($(this).val(), 10);
			var name  = $(this).attr("name").split("_");
			var id    = name[1];			
			var limit = TTWAR[id]['limit_per_trip'] > 0 ? TTWAR[id]['limit_per_trip'] : 9;

			if (action == "decrease" && val > 0) {
				$(this).val(val - 1);
				val--;
			}

			if (action == "increase" && val < limit) {
				$(this).val(val + 1);
				val++;
			}

			if (val == 0) {
				$(this).prev().addClass("inactive");
				$(this).next().removeClass("inactive");
			} else if (val == limit) {
				$(this).prev().removeClass("inactive");
				$(this).next().addClass("inactive");
			} else {
				$(this).prev().removeClass("inactive");
				$(this).next().removeClass("inactive");
			}
		});
	}

	/** Visar/döljer almanackan för returresa */
	function toggleRoundTrip(round_trip) {
		if (round_trip) {
			$("#date_return").fadeIn(200);
		} else {
			$("#date_return").fadeOut(250);
		}	
	}

	function disableStops() {
		var date_outbound = $("#inp_date_outbound").val().split("-");
		var date_return   = $("#inp_date_return"  ).val().split("-");

		var out = new Date(date_outbound[0], date_outbound[1]-1, date_outbound[2]);
		var ret = new Date(date_return[0],   date_return[1]-1,   date_return[2]  );

//		frombox.enableOptions();
//		tobox.enableOptions();

//		disableStopsInList($("#inp_from").children("option"), frombox, out, ret);
//		disableStopsInList($("#inp_to"  ).children("option"), tobox,   out, ret);
	}

	function disableStopsInList(real_list, visible_list, out, ret) {

		/** Gå igenom hållplatserna för avgångar */
		real_list.each(function() {
			var id = $(this).val();

			if (id != 0 && STOPS[id]['hiatuses'].length > 0) {
				var bookable = true;

				$.each(STOPS[id]['hiatuses'], function(key, interval) {
					var date_to_start = interval.date_to_start.split("-");
					var date_to_end   = interval.date_to_end.split("-");

					var start = new Date(date_to_start[0], date_to_start[1]-1, date_to_start[2]);
					var end   = new Date(date_to_end[0],   date_to_end[1]-1,   date_to_end[2]  );

					/** Är utresan inom datumintervallet? */
					if (out.getTime() >= start.getTime() && out.getTime() <= end.getTime()) {
						bookable = false;
					}

					/** Kontrollera samma sak för hemresan */
					if (round_trip == 1) {
						if (ret.getTime() >= start.getTime() && ret.getTime() <= end.getTime()) {
							bookable = false;
						}
					}
				});

				if (bookable) {
					$(this).removeAttr("disabled");
				} else {

					/** Om avgången är vald för resenären välja en ny */
					if ($(this).is(":selected")) {
						visible_list.setSelectedOption(0);

						$(this).parent().children("option:first").attr({ selected: "selected" });

						$.popbox(
							"Du har valt en hållplats som inte är tillgänglig under valt datum",
							{
								titlebarText : "Fel"
							}
						);
					}

					visible_list.disableOption(id);

					$(this).attr({ disabled: "disabled" });

				}
			}
		});
	}

	function updateLabelYears(year) {
		for (var traveller_type_id in TTWAR) {
//			var from = year - TTWAR[traveller_type_id]['max_age'];
//			var to   = year - TTWAR[traveller_type_id]['min_age'];

//			$("label[for=inp_type_" + traveller_type_id + "]").html("Barn " + from + "-" + to);
		}
	}
});

