var ReservationForm = {
	init : function(){

		/* initial setup */		
		var obj = this;
		var curr_step = 1;
		var trailer_checked = $("#trailer").attr("checked");
		var car_checked = ($("#car_type").val() == "") ? false : true;
		var back_checked = $("#fSave").attr("checked");
		
		$("#f_step0").show();
		$("#f_step1").hide();
		$("#f_step2").hide();
		$("#f_step3").hide();
		$("#f_step4").hide();
		jQuery("#thx").hide();
		
		if (back_checked)
			$("#fBack").show();
		else {
			$("#fBack").hide();
			$("#fBack select").hide();
		}
		
		if (car_checked)
			$("#travel_with_car").show();
		else
			$("#travel_with_car").hide();
		
		if (trailer_checked)
			$("#trailer_attached").show();
		else
			$("#trailer_attached").hide();
		
		/* step-change actions */
		$(".step0").click(function(){
			$("#reservation_step").html("Step 1 out of 4");$("#f_step0").hide();$("#f_step1").show();$("#f_step2").hide();$("#f_step3").hide();$("#f_step4").hide();
			curr_step = 1;
		});
		
		$(".step1").click(function(){
			if (obj.validateStep(curr_step)) {
				jQuery("#reservation_step").html("Step 1 out of 4");jQuery("#f_step1").show();jQuery("#f_step2").hide();jQuery("#f_step3").hide();jQuery("#f_step4").hide();
				curr_step = 1;
			}
		});
		$(".step2").click(function(){
			if (obj.validateStep(curr_step)) {
				$("#reservation_step").html("Step 2 out of 4");$("#f_step1").hide();$("#f_step2").show();$("#f_step3").hide();$("#f_step4").hide();
				curr_step = 2;
			}
		});
		$(".step3").click(function(){
			if (obj.validateStep(curr_step)) {
				$("#reservation_step").html("Step 3 out of 4");$("#f_step1").hide();$("#f_step2").hide();$("#f_step3").show();$("#f_step4").hide();
				curr_step = 3;
			}
		});
		$(".step4").click(function(){
			if (obj.validateStep(curr_step)) {
				$("#reservation_step").html("Step 4 out of 4 - summary");$("#required_info").hide();$("#f_step1").hide();$("#f_step2").hide();$("#f_step3").hide();obj.fillSummary();$("#f_step4").show();
				curr_step = 4;
			}
		});
		/*
		$(".send").click(function() {

			// IE <=6
			if (window.ActiveXObject) {
				jQuery("#reservation_step").html("Thank you");
				jQuery("#f_step4").hide();
				jQuery("#thx").show();
			}
			
			jQuery("form[name='reservation']").submit();		
		});*/

		/* step actions */
		$("a.increase").click(function(){
			inp = $(this).prev().prev();
			if (inp.val() < 10)
				inp.val(parseInt(inp.val())+1);
		});
		$("a.decrease").click(function(){
			inp = $(this).prev();
			if (inp.val() > 0)
				inp.val(parseInt(inp.val())-1);
		});
		$("td.room a").click(function(){
			$(this).parent().next().next().children("input").val(0);
		});
		$("td.people a").click(function(){
			$(this).parent().prev().prev().children("input").val(0);
		});
		$("#car_type").change(function(){
			if ($(this).val() != "") {
					$("#travel_with_car").show();
					$("#car_number").focus();
				}
			else 
				$("#travel_with_car").hide();
		});
		$("#trailer").click(function(){
			if (!trailer_checked)
				$("#trailer_attached").show();
			else 
				$("#trailer_attached").hide();
			trailer_checked = !trailer_checked;
			$("#trailer_number").focus();
		});
		
	},
	
	fillSummary : function() {

		$("#sum_cruise_line span").next().html(($("#cruise_pl-se").attr("checked")) ? "Świnoujście - Ystad" : "Ystad - Świnoujście");
		
		startDate = $("#cruise_start_month").val().substr(0, 4) + "-" + $("#cruise_start_month").val().substr(4, 2) + "-" + (($("#cruise_start_day").val() < 10) ? "0" + $("#cruise_start_day").val() : $("#cruise_start_day").val()) + " (m/f " + $("#cruise_start_ferry").val().toUpperCase() + ")";
		$("#sum_cruise_start_date span").next().html(startDate);
		
		var open = "";
		var backDate = "";
		
		if ($("#fSave").attr("checked")) {
			open = "Nie";
			backDate = $("#cruise_back_month").val().substr(0, 4) + "-" + $("#cruise_back_month").val().substr(4, 2) + "-" + (($("#cruise_back_day").val() < 10) ? "0" + $("#cruise_back_day").val() : $("#cruise_back_day").val()) + " (m/f " + $("#cruise_back_ferry").val().toUpperCase() + ")";
		}
		else {
			open = "Tak";
			backDate = "---";
		}
		$("#sum_cruise_back_date span").next().html(backDate);
		$("#sum_open span").next().html(open);
		
		if ($("#car_type").val() != "") {
			car_type = $("#car_type").val();
			car_number = $("#car_number").val();
		}
		else {
			car_type = "Nie";
			car_number = "---";
		}
		$("#sum_car_type span").next().html(car_type);
		$("#sum_car_number span").next().html(car_number);
		
		$("#sum_trailer_number span").next().html(($("#trailer_number").val() == "") ? "---" : $("#trailer_number").val());
		
		$("#sum_discount_retired span").next().html($("#discount_retired").val());
		$("#sum_discount_students span").next().html($("#discount_students").val());
		$("#sum_discount_children span").next().html($("#discount_children").val());
		$("#sum_discount_youth span").next().html($("#discount_youth").val());
		
		$("#sum_comment").html($("#comment").val());
		
		$("#sum_contact_name span").next().html($("#contact_name").val());
		$("#sum_contact_phone span").next().html($("#contact_phone").val());
		$("#sum_contact_fax span").next().html($("#contact_fax").val());
		$("#sum_contact_mail span").next().html($("#contact_mail").val());
		
		offArr = new Array("cab_off_2p_win", "cab_off_2p_nowin", "cab_off_4p_win", "cab_off_4p_nowin", "cab_off_lux", "cab_off_4p_nobath");
		for (var i = 0; i < offArr.length; i++) {
			cabins = $("input[name='" + offArr[i] + "']");
			persons = $("input[name='" + offArr[i] + "_p']");

			$("#sum_" + offArr[i]).show();
			if (cabins.val() > persons.val())
				$("#sum_" + offArr[i] + " span").next().html(cabins.val() + " (whole)");
			else if (cabins.val() < persons.val())
				$("#sum_" + offArr[i] + " span").next().html(persons.val() + " (places)");
			else
				$("#sum_" + offArr[i]).hide();
		} 
		
		arrArr = new Array("cab_arr_2p_win", "cab_arr_2p_nowin", "cab_arr_4p_win", "cab_arr_4p_nowin", "cab_arr_lux", "cab_arr_4p_nobath");
		for (var i = 0; i < arrArr.length; i++) {
			cabins = $("input[name='" + arrArr[i] + "']");
			persons = $("input[name='" + arrArr[i] + "_p']");

			$("#sum_" + arrArr[i]).show();
			if (cabins.val() > persons.val())
				$("#sum_" + arrArr[i] + " span").next().html(cabins.val() + " (whole)");
			else if (cabins.val() < persons.val())
				$("#sum_" + arrArr[i] + " span").next().html(persons.val() + " (places)");
			else
				$("#sum_" + arrArr[i]).hide();
		} 
		
		for (var i = 1; i <= 5; i++) {
			name = $("input[name='passanger" + i + "_name']").val();
			sex = $("select[name='passanger" + i + "_sex']").val();
			birth = $("input[name='passanger" + i + "_birth']").val();
			$("#sum_passanger" + i).show();
			if (name != "")
				$("#sum_passanger" + i).html(name + " " + birth + " " + sex);
			else
				$("#sum_passanger" + i).hide();
		} 
	},
	
	validateStep : function (step) {
		validated = true;
		section = null;
		
		if (step == 2)
			section = $("#f_step2");
		else if (step == 3)
			section = $("#f_step3");
			
		if (section != null)
			section.find(".required").each(function (i) {
		        if (this.value == "") {
		          $("#" + this.id).addClass("red");
		          validated = false;
		        }
		        else
		        	$("#" + this.id).removeClass("red");
		    });
		
		if (!validated) {
			alert("Fill in the fields required");
			return false;
		}
		else {
			if (step == 3 && !checkEmail($("#contact_mail").val())) {
		    	$("#contact_mail").addClass("red");
		    	alert("E-mail address is incorrect");
		    	return false;
		    }
		    else
		    	$("#contact_mail").removeClass("red");
		}
		
		return true;
	}
}

var ReservationCalendar = {
	init : function(selectedDates){

		/* initial setup */	
		var obj = this;
		obj.getMonthsList($("#cruise_start_month"), selectedDates["cruise_start_month"]);
		obj.getMonthsList($("#cruise_back_month"), selectedDates["cruise_back_month"]);
		obj.getDaysList($("#cruise_start_day"), selectedDates["cruise_start_month"], selectedDates["cruise_start_day"]);
		obj.getDaysList($("#cruise_back_day"), selectedDates["cruise_back_month"], selectedDates["cruise_back_day"]);
		obj.setFerryHours($("input[name='cruise_line']:checked").val());
		obj.toogleCabinsTable($("#fSave").attr("checked"));

		$("#fSave").click(function() {
			obj.toogleCabinsTable($(this).attr("checked"));
		});

		$("input[name='cruise_line']").click(function() {
			obj.setFerryHours($(this).val());
		});
		
		$("#cruise_start_ferry").change(function() {
			obj.toogleCabinAvailability("start", $(this).val());
		});
		
		$("#cruise_back_ferry").change(function() {
			obj.toogleCabinAvailability("back", $(this).val());
		});

		$("#cruise_start_day").change(function(){
			obj.setCruiseEndDate(obj);
		});
		
		$("#cruise_start_month").change(function() {
			obj.getDaysList($("#cruise_start_day"), $("#cruise_start_month").val(), $("#cruise_start_day").val());
			obj.setCruiseEndDate(obj);
		});
		
		$("#cruise_back_day").change(function(){
			obj.validateCruiseDates(obj);
		});
		
		$("#cruise_back_month").change(function(){
			obj.getDaysList($("#cruise_back_day"), $("#cruise_back_month").val(), $("#cruise_back_day").val());
			obj.validateCruiseDates(obj);
		});
		
		return true;
	},
	
	toogleCabinsTable: function(fSave) {
		if (fSave)
			$("#cabins_arr").show();
		else
			$("#cabins_arr").hide();
	},
	
	setFerryHours: function(cruiseLine) {
		
		var pl_se_polonia = "<option value='polonia'>13:00 (m/f Polonia)</option>";
		var pl_se_skania = "<option value='skania'>23:00 (m/f Skania)</option>";
		var se_pl_polonia = "<option value='polonia'>22:00 (m/f Polonia)</option>";
		var se_pl_skania = "<option value='skania'>13:30 (m/f Skania)</option>";

		if (cruiseLine == "pl-se") {
			$("#cruise_start_ferry").empty().append(pl_se_polonia).append(pl_se_skania);
			$("#cruise_back_ferry").empty().append(se_pl_skania).append(se_pl_polonia);
			this.toogleCabinAvailability("start", "polonia");
			this.toogleCabinAvailability("back", "skania");
		}
		else {
			$("#cruise_start_ferry").empty().append(se_pl_skania).append(se_pl_polonia);
			$("#cruise_back_ferry").empty().append(pl_se_polonia).append(pl_se_skania);
			this.toogleCabinAvailability("start", "skania");
			this.toogleCabinAvailability("back", "polonia");
		}
	},
	
	toogleCabinAvailability: function(direction, ferry) {
		
		if (direction == "start")
			if (ferry == "skania") {
				$("#c2in_off").hide();
				$("#c4wc_off").hide();
			}
			else {
				$("#c2in_off").show();
				$("#c4wc_off").show();
			}
		
		else if (direction == "back")
			if (ferry == "skania") {
				$("#c2in_arr").hide();
				$("#c4wc_arr").hide();
			}
			else {
				$("#c2in_arr").show();
				$("#c4wc_arr").show();
			}
	},
	
	setCruiseEndDate: function(obj) {
		startMonth = parseInt($("#cruise_start_month").val());
		startDay = parseInt($("#cruise_start_day").val());
		backMonth = parseInt($("#cruise_back_month").val());
		backDay = parseInt($("#cruise_back_day").val());
		
		if (backMonth < startMonth)
			obj.getMonthsList($("#cruise_back_month"), startMonth, startMonth);
		if (backDay < startDay && 
			backMonth <= startMonth)
			obj.getDaysList($("#cruise_back_day"), $("#cruise_back_month").val(), $("#cruise_start_day").val());
	},
	
	validateCruiseDates: function(obj) {
		startMonth = parseInt($("#cruise_start_month").val());
		startDay = parseInt($("#cruise_start_day").val());
		backMonth = parseInt($("#cruise_back_month").val());
		backDay = parseInt($("#cruise_back_day").val());

		if (backMonth < startMonth) {
			alert("Data powrotu musi być późniejsza niż wypłynięcia.");
			obj.getMonthsList($("#cruise_back_month"), $("#cruise_start_month").val(), $("#cruise_start_month").val());
		}
		else if (backDay < startDay && backMonth == startMonth) {
			alert("Data powrotu musi być późniejsza niż wypłynięcia.");
			obj.getDaysList($("#cruise_back_day"), $("#cruise_back_month").val(), $("#cruise_start_day").val());
		} 
	},
	
	getMonthsList: function(targetObj, selected) {
		$.getJSON("scripts/reservation.php?action=getMonthsList", function(data){
			if (data) {
				targetObj.empty();
				for (i=0; i<data.months.length; i++) {
					selStr = (selected == data.months[i].value) ? "selected=selected" : "";
					targetObj.append("<option " + selStr + " value='" + data.months[i].value + "'>" + data.months[i].name + "</option>");
				}
			}	
		});
	},
	
	getDaysList: function(targetObj, monthId, selected) {
		$.getJSON("scripts/reservation.php?action=getDaysList&monthId=" + monthId, function(data){
			if (data) {
				targetObj.empty();
				for (i=0; i<data.days.length; i++) {
					selStr = (selected == data.days[i].value) ? "selected=selected" : "";
					targetObj.append("<option " + selStr + " value='" + data.days[i].value + "'>" + data.days[i].value + "</option>");
				}
			}	
		});
	}
}

