var calendar_image = "templates/bonvoyage/images/search_date.gif";
var calendar_loading_image = "templates/bonvoyage/images/loading.gif";
$(document).ready(function() {
	var navigation_underline_functions = {
		hide: function(element) {
			$(element).slideUp(400);
			$(element).find("input[name^='date']").each(function() {
				$(this).attr("name", "_" + $(this).attr("name"));
			});
		},
		show: function(element) {
			$(element).slideDown(400);
			$(element).find("input[name^='_date']").each(function() {
				var name = $(this).attr("name");
				if (name.indexOf("_") == 0)
					$(this).attr("name", name.substr(1));
			});
		}
	}

	$(".search .navigation").each(function(i) {
		var functions;
		if ($(this).hasClass("navigation-underline"))
			functions = navigation_underline_functions;

		var tab = new tabs({
			name: $(this).find("label input").attr("name"),
			tabs: $(this).parent().find("> .stack > .tab"),
			labels: $(this).find("label"),
			functions: functions
		});
	});

	$('#search .search_date[name="date1"]').each(function(i) {
		$(this)
			.datepick({
				showOn: 'both',
				buttonImageOnly: true,
				buttonImage: calendar_image,
				dateFormat: 'dd/mm/yy',
				minDate: $(this).val(),
				altField: '#date1',
				onSelect: function(value,date) {
					//$(this).datepicker("hide");
					date2 = $(this).closest("form").find(".search_date[name='date2']");
					var closest_date2 = select_closest_date(date);
					$(date2).val(closest_date2);
					setTimeout("open_date2()", 500);
				},
				beforeShow: function() {
					get_JSON($(this));
					departure = "";
				},
				beforeShowDay: is_active_date,
				showAnim: 'fadeIn',
				closeAtTop: false,
				mandatory: true
			});
	});
	$('#search .search_date[name="date2"]').each(function(i) {
		$(this)
			.datepick({
				showOn: 'both',
				buttonImageOnly: true,
				buttonImage: calendar_image,
				dateFormat: 'dd/mm/yy',
				altField: '#date2',
				minDate: $(this).val(),
				beforeShow: function() {
					$(this).datepick('option', 'minDate', $(this).val());
					get_JSON($(this));
					departure = $(this).closest("form").find(".search_date[name='date1']").val(); /* FIXME: needs to get value of date1 */
				},
				beforeShowDay: is_active_date,
				showAnim: 'fadeIn',
				closeAtTop: false,
				mandatory: true
			});
	});
	
	
	$('#search .search_date[name="date3"]').each(function(i) {
		$(this)
			.datepick({
				showOn: 'both',
				buttonImageOnly: true,
				buttonImage: calendar_image,
				dateFormat: 'dd/mm/yy',
				altField: '#date3',
				minDate: $(this).val(),
				beforeShow: function() {
					$(this).datepick('option', 'minDate', $(this).val());
					get_JSON($(this));
					departure = $(this).closest("form").find(".search_date[name='date2']").val(); /* FIXME: needs to get value of date1 */
				},
				beforeShowDay: is_active_date,
				showAnim: 'fadeIn',
				closeAtTop: false,
				mandatory: true
			});
	});
	
	$('form[name=schedule_form]').submit(function() {
		//childs and inf cant flight alone
		checkPeople();
		if (checkMe == false) {
			return checkMe;
		}
	})
});
function open_date2() {
	$(date2).datepick("show");
	date2 = null;
}
function openWinCity1(forma, field, lang, dest) {
	var cityList = window.open('','','dependent=yes,width=375,height=280,,left=40,top=138,scrollbars=yes');
	cityList.document.write('<span style="font: xx-small Verdana;">Data loading...</span>');
	cityList.focus();

	var val = document.forms[forma][field].value;
	cityList.document.location = "?mode=NEWselectcity&name="+forma+"."+field+"&cod="+val+"&lang="+lang+"&field="+dest;
}

function in_array(needle, haystack) {
	for (x in haystack) if ((needle.toUpperCase())==haystack[x]) return true;
	return false;
}
function format_date_object(object, format) { /* If format is true, render as DD/MM/YYYY. otherwise render as YYMMDD */
	function leading_zero(number) {
		return number > 9 ? number : '0' + number
	}

	var date = {};
	if (object.getYear() > 1900)
		date.year = object.getYear() - 2000;
	else
		date.year = object.getYear() - 100;
		
	date.month = object.getMonth() + 1;
	date.day = object.getDate();

	var separator = "";
	if (format) {
		format_order = ["DD", "MM", "YY"]
		separator = "/";
	}
	else
		format_order = ["YY", "MM", "DD"];

	date.formatted = "";
	for (var i = 0, _item; _item = format_order[i]; i++) {
		if (i > 0)
			date.formatted += separator;

		if (_item == "YY") {
			if (format)
				date.formatted += "20" + leading_zero(date.year);
			else
				date.formatted += leading_zero(date.year);
		}
		if (_item == "MM")
			date.formatted += leading_zero(date.month);
		if (_item == "DD")
			date.formatted += leading_zero(date.day);
	}
	return date.formatted;
}

function get_slg() {
	if ($("#search-navigation-1").is(":checked") && $("#flights-navigation-2").is(":checked"))
		return "charter";

	if ($("#search-navigation-4").is(":checked"))
		return "nofshon";

	return "";
}

$.ajaxSetup({ cache: false });
reset_JSON();

function reset_JSON() {
	ARR_DATES = {};
}
function get_JSON(field_calling) {
	var slg = get_slg();
	if (!slg || !in_array(slg, ['CHARTER','NOFSHON']))
		return false;

	var xml = '\
		<request>\
			<function>get_array</function>\
			<value>'+$('form[name="'+slg+'_form"] select[name="searchCityFrom"]').val()+'</value>\
			<argument>'+slg.toUpperCase()+'</argument>\
		</request>\
	';
/*
	try {var xmlhttp = new XMLHttpRequest();}
	catch(e) {var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");}
	xmlhttp.open("POST", "/midoffice/checkval.php", true); 
	xmlhttp.setRequestHeader("content-type", "application/text-xml");
	xmlhttp.onreadystatechange = function () {
		if (xmlhttp.readyState == 4) {	
			eval(xmlhttp.responseText);
			$(field_calling)
				.find(" + img.datepick-trigger")
					.css({padding: "0", width: "20px", height: "20px"})
					.attr("src", calendar_image);
		}
	}
	$(field_calling)
		.find(" + img.datepick-trigger")
			.attr("src", calendar_loading_image)
			.css({padding: "5.5px 4.5px", width: "11px", height: "9px"});

	xmlhttp.send(xml);
*/
	$.ajax({
		async: false,
		type: "POST",
		url: '/midoffice/checkval.php',
		processData: false,
		contentType: "text/xml",
		dataType: "application/text-xml",
		data: xml,
		beforeSend: function() {
		},
		success: function(result) { 
			eval(result);
			$(field_calling)
				.find(" + img.datepick-trigger")
					.attr("src", calendar_image)
					.css({padding: "0", width: "20px", height: "20px"});
		}
	});
}
function is_active_date(date) {
	var slg = get_slg();

	/* FIXME: can check if ARR_DATES is not empty instead of this, if ARR_DATES is reset when done */
	if (!slg || !in_array(slg, ['CHARTER','NOFSHON'])) /* Dates are only available for charter and nofshon */
		return [true, ''];

	var selected_city = $('form[name="'+slg+'_form"] select[name="searchCityFrom"]').val();
	var dates = ARR_DATES[selected_city];
	if (!dates) /* If the JSON response said there are no available dates for the selected city */
		return [false, ''];

	var current_iteration_date = format_date_object(date, false);

	if (departure == "") { /* If this function is called by a date1 field */
		return [!!dates[current_iteration_date], '']; /* Return true if the date is in dates */
	}
	else { /* If this function is called by a date2 field */
		var date1_formatted = departure.substring(8,10) + departure.substring(3,5) + departure.substring(0,2);
					/* Formatted as YYMMDD */

		var dates_date1_formatted = dates[date1_formatted];
		if (!dates_date1_formatted)
			return [false, ''];

		for (var i = 0; i < dates_date1_formatted.length; i++) {
			if (dates_date1_formatted[i][current_iteration_date]) /* If dates has the date within date1 */
				return [true, ''];
		}
	}
	return [false, ''];
}
function select_closest_date(date/*, days_to_add_to_date*/) {
	//date.setDate(date.getDate() + days_to_add_to_date);
	var date_formatted_to_input_value = format_date_object(date, true);

	var slg = get_slg();
	var selected_city = $('form[name="'+slg+'_form"] select[name="searchCityFrom"]').val();
	var dates = ARR_DATES[selected_city];
	if (dates) {
		var date_formatted_to_cell_number = format_date_object(date, false);
		var items = dates[date_formatted_to_cell_number][0];
		for (_item in items) {
			date_formatted_to_input_value = _item.substring(4,6) + '/'+ _item.substring(2,4) + '/20'+_item.substring(0,2);
							/* Formatted as DD/MM/YYYY */
			break;
		}
	}
	return date_formatted_to_input_value;
}
