﻿var feedsToGet = 3;
var feedsRetrieved = 0;
var roundTrip = "Y";
var ajaxErrorNotification = false;

$(function() {
	$.ajax({
		url: "/httpHandlers/BookingWidgetHandler.ashx?action=GetOrigPortList",
		success: function(data) {
			buildOrigPorts(data);
		},
		error: function() {
			showAjaxError();
		}
	});
	$.ajax({
		url: "/httpHandlers/BookingWidgetHandler.ashx?action=GetDestPortList",
		success: function(data) {
			buildDestPorts(data);
		},
		error: function() {
			showAjaxError();
		}
	});
	$.ajax({
		url: "/httpHandlers/BookingWidgetHandler.ashx?action=GetAirlines",
		success: function(data) {
			buildAirlines(data);
		},
		error: function() {
			showAjaxError();
		}
	});
});
function showAjaxError() {
	if (ajaxErrorNotification == false) {
		$('#bookingWidgetLoading').fadeOut('fast', function() {
			$('#bookingWidgetError').fadeIn('fast');
		});
		ajaxErrorNotification = true;
	}
}
function buildOrigPorts(data) {
	var ddlFrom = $('#ddlFrom');
	var ports = $(data).find('VI_ECOriginPortListCompoundList');
	if ($(ports).length == 0) {
		showAjaxError();
		return;
	}
	$.each(
		$(ports),
		function(idx, item) {
			var name = jQuery.trim($(item).attr('ECName'));
			var id = jQuery.trim($(item).attr('PortID'));
			buildOption(id, name, $(ddlFrom));
		}
	);
	$(ddlFrom).selectmenu({
		style:'dropdown',
		width: 230,
		height: 21
	});
	
	feedsRetrieved++;
	if (feedsRetrieved == feedsToGet) {
		initBookingWidget();
	}
}
function buildDestPorts(data) {
	var ddlTo = $('#ddlTo');
	var ports = $(data).find('VI_ECDestinationPortListCompoundList');
	if ($(ports).length == 0) {
		showAjaxError();
		return;
	}
	$.each(
		$(ports),
		function(idx, item) {
			var name = jQuery.trim($(item).attr('ECName'));
			var id = jQuery.trim($(item).attr('PortID'));
			buildOption(id, name, $(ddlTo));
		}
	);
	$(ddlTo).selectmenu({
		style: 'dropdown',
		width: 230,
		height: 21
	});
	feedsRetrieved++;
	if (feedsRetrieved == feedsToGet) {
		initBookingWidget();
	}
}
function buildAirlines(data) {
	var ddlAirline = $('#ddlAirline');
	var airlines = $(data).find('Qualifier_Airlines');
	if ($(airlines).length == 0) {
		showAjaxError();
		return;
	}
	$.each(
		$(airlines),
		function(idx, item) {
			var name = jQuery.trim($(item).attr('AirlineName'));
			var id = jQuery.trim($(item).attr('AirlineID'));
			buildOption(id, name, $(ddlAirline));
		}
	);
	$(ddlAirline).selectmenu({
		style: 'dropdown',
		width: 230,
		height: 21
	});
	feedsRetrieved++;
	if (feedsRetrieved == feedsToGet) {
		initBookingWidget();
	}
}
function initBookingWidget() {	
	$("#dateFrom").datepicker({
		minDate: '1',
		showOn: 'focus',
		onSelect: function(dateText, inst) {
			setMinDepartureDate(dateText, inst);
		}
	});
	$("#dateFrom").change(function() {
		setMinDepartureDate($("#dateFrom").val(), $("#dateFrom"));
	});
	$("#dateReturn").datepicker({
		minDate: '1',
		showOn: 'focus',
		onSelect: function(dateText, inst) {
			//setMinDepartureDate(dateText, inst); 
		}
	});
	$("#dateReturn").change(function() {
		//setMaxArrivalDate($("#dateReturn").val(), $("#dateReturn"));
	});
	$('#timeFrom').timePicker({
		//startTime: "07.00", // Using string. Can take string or Date object.
		endTime: new Date(0, 0, 0, 23, 59, 0), // Using Date object here.
		show24Hours: false,
		separator: ':',
		step: 1
	});
	$('#timeReturn').timePicker({
		//startTime: "07.00", // Using string. Can take string or Date object.
		endTime: new Date(0, 0, 0, 23, 59, 0), // Using Date object here.
		show24Hours: false,
		separator: ':',
		step: 1
	});
	$('#imgInfoFlight').tooltip();
	$('#imgInfoChildren').tooltip();
	$('#ddlNumAdults').selectmenu({
		style: 'dropdown',
		width: 50
	});
	$('#ddlNumChildren').selectmenu({
		style: 'dropdown',
		width: 50
	});
	// wire up the round trip/one way functionality
	$('#rbOwRt_ow').click(function() {
		$('#roundTripContainer').slideUp(300, function() {
			$(this).removeClass('active');
			roundTrip = "N";
		});
	});
	$('#rbOwRt_rt').click(function() {
		$('#roundTripContainer').slideDown(300, function() {
			$(this).addClass('active');
			roundTrip = "Y";
		});
	});
	$('#bookNow').click(function() {
		submitForm();
	});
	$('#bookingWidgetLoading').hide();
	$('#bookingWidgetContainer').slideDown(300);
}
function submitForm() {
	var doSubmit = true;
	var msg = "Please correct the following issue(s) before submitting this form:\n\n";

	var postForm = document.createElement("form");
	postForm.setAttribute("action", _bookingEngineUrl);
	postForm.setAttribute("method", "post");
	postForm.setAttribute("style", "display:none;");
	postForm.setAttribute("target", "obe");

	// validate travel from
	if ($('#ddlFrom').val() == '') {
		doSubmit = false;
		msg += "- Travel From is Required\n";
	}
	else {
		addFormField(postForm, "O", $('#ddlFrom').val());
	}
	
	// travel to
	if ($('#ddlTo').val() == '') {
		doSubmit = false;
		msg += "- Travel To is Required\n";
	}
	else {
		addFormField(postForm, "D", $('#ddlTo').val());
	}
	
	// validate arrival date
	if (jQuery.trim($('#dateFrom').val()) == '') {
		msg += "- Arrival Date is Required\n";
		doSubmit = false;
	}
	else {
		var dtArrive = new Date($("#dateFrom").val());
		var fromMonth = eval(dtArrive.getMonth() + 1);
		if (fromMonth < 10) {
			fromMonth = "0" + fromMonth;
		}
		var fromDate = dtArrive.getDate();
		if (fromDate < 10) {
			fromDate = "0" + fromDate;
		}
		addFormField(postForm, "D1A", fromMonth);
		addFormField(postForm, "D1B", fromDate);
		addFormField(postForm, "D1C", dtArrive.getFullYear());
	}
	// arrival time
	if (jQuery.trim($('#timeFrom').val()) == '') {
		msg += "- Arrival Time is Required\n";
		doSubmit = false;
	}
	else {
		var fromTime = $.timePicker("#timeFrom").getTime();
		var fromHours = fromTime.getHours();
		var fromType = "AM";
		if (fromHours > 12) {
			fromHours -= 12;
			fromType = "PM";
		}
		else if (fromHours == 12) {
			fromType = "PM";
		}
		if (fromHours < 10) {
			fromHours = "0" + fromHours;
		}
		var fromMinutes = fromTime.getMinutes();
		if (fromMinutes < 10) {
			fromMinutes = "0" + fromMinutes;
		}
		addFormField(postForm, "T1A", fromHours);
		addFormField(postForm, "T1B", fromMinutes);
		addFormField(postForm, "T1C", fromType);
	}

	if ($('#ddlAirline').val() == '') {
		doSubmit = false;
		msg += "- Airline is required. If you are not arriving by air or have an overnight flight please select 'No Flight' or 'Overnight Flight'\n";
	}
	else {
		addFormField(postForm, "A", $('#ddlAirline').val());
	}
	
	addFormField(postForm, "pax", $('#ddlNumAdults').val());
	addFormField(postForm, "cpax", $('#ddlNumChildren').val());	
	addFormField(postForm, "F", $('#flightNumber').val());
	addFormField(postForm, "RoundTrip", roundTrip);

	var returnDate = new Date();
	var returnTime = returnDate;
	if (roundTrip == "Y") {
		if (jQuery.trim($('#dateReturn').val()) == '') {
			msg += "- Return Date is Required\n";
			doSubmit = false;
		}
		else {
			returnDate = new Date($("#dateReturn").val());
		}
		if (jQuery.trim($('#timeReturn').val()) == '') {
			msg += "- Return Time is Required\n";
			doSubmit = false;
		}
		else {
			returnTime = $.timePicker("#timeReturn").getTime();
		}
	}
	var returnHours = returnTime.getHours();
	var returnType = "AM";
	if (returnHours > 12) {
		returnHours -= 12;
		returnType = "PM";
	}
	else if (returnHours == 12) {
		returnType = "PM";
	}
	if (returnHours < 10) {
		returnHours = "0" + returnHours;
	}
	var returnMins = returnTime.getMinutes();
	if (returnMins < 10) {
		returnMins = "0" + returnMins;
	}
	
	var returnMonth = eval(returnDate.getMonth() + 1);
	if (returnMonth < 10) {
		returnMonth = "0" + returnMonth;
	}
	var returnDateVal = returnDate.getDate();
	if (returnDateVal < 10) {
		returnDateVal = "0" + returnDateVal;
	}

	addFormField(postForm, "D2A", returnMonth);
	addFormField(postForm, "D2B", returnDateVal);
	addFormField(postForm, "D2C", returnDate.getFullYear());
	addFormField(postForm, "T2A", returnHours);
	addFormField(postForm, "T2B", returnMins);
	addFormField(postForm, "T2C", returnType);
	addFormField(postForm, "RF", $('#returnFlightNumber').val());

	if (doSubmit) {
		document.body.appendChild(postForm);

		var newSubmitButton = document.createElement("input");
		newSubmitButton.setAttribute("type", "submit");
		newSubmitButton.setAttribute("name", "B1");
		newSubmitButton.setAttribute("value", "Book Now");
		postForm.appendChild(newSubmitButton);
		newSubmitButton.click();

		return false;
	}
	else {
		alert(msg);
	}
}
function buildOption(value, text, parent) {
    var o = document.createElement('option');
    $(o).attr('value', value);
    $(o).text(text);
    $(parent).append($(o));
}
function addFormField(form, fieldName, fieldValue) {
	var inputField = document.createElement("input");
	inputField.setAttribute("name", fieldName);
	inputField.setAttribute("id", fieldName);
	inputField.setAttribute("type", "hidden");
	inputField.setAttribute("value", fieldValue);
	form.appendChild(inputField);
}
function setMinDepartureDate(dateText, datepicker) {
	var dt = new Date(dateText);
	dt.setDate(dt.getDate() + 1);
	$('#dateReturn').datepicker('option', 'minDate', dt);
}
function setMaxArrivalDate(dateText, datepicker) {
	var dt = new Date(dateText);
	dt.setDate(dt.getDate() - 1);
	$('#dateFrom').datepicker('option', 'maxDate', dt);
}
