var calendar_image = "templates/atc/images/search_date.gif";
var calendar_loading_image = "templates/atc/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) {
					date2 = $(this).closest("form").find(".search_date[name='date2']");
					var closest_date2 = select_closest_date(date, 1);
					$(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"] , #search .search_date[name="_date2"] , #search .search_date[name="date3"]').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
			});
	});
});
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>\
	';

	$.ajax({
		async: false,
		type: "POST",
		url: '/midoffice/checkval.php',
		processData: false,
		contentType: "text/xml",
		dataType: "application/text-xml",
		data: xml,
		beforeSend: function() {
			$(field_calling)
				.find(" + img.datepick-trigger")
					.attr("src", calendar_loading_image)
		},
		success: function(result) {
			eval(result);
			$(field_calling)
				.find(" + img.datepick-trigger")
					.attr("src", calendar_image);
		}
	});
}
var local_JSON_cities = {
	"TLV": [1,1,1,1,1,1,1],
	"ROM": [1,0,1,0,1,0,0],
	"MIL": [1,0,0,0,1,0,0],
	"BER": [0,1,0,1,0,1,0],
	"MOW": [0,1,0,1,0,1,1],
	"NCE": [0,1,0,1,0,0,0],
	"LJU": [0,0,1,0,0,0,0],
	"VRN": [0,0,0,0,0,0,1]
}
function local_JSON(date) {
	var day = date.getDay(), city;
	city = $('form[name="schedule_form"] select[name="searchCityFrom"]').val();
	return [!!local_JSON_cities[city][day], ''];
}
function is_active_date(date) {
	var slg = get_slg();

	if (!slg)
		return [true, ''];

	if (slg == "schedule")
		return local_JSON(date);

	/* 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) {
	var slg = get_slg();

	if (!in_array(slg, ['CHARTER','NOFSHON', 'SCHEDULE'])) {
		date.setDate(date.getDate() + days_to_add_to_date);
	}
	var date_formatted_to_input_value = format_date_object(date, true);

	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;
		}
	}
	else if (slg == "schedule") {
		var day = date.getDay();
		var map = local_JSON_cities[selected_city];

		for (var i = (day + 1), count = 1, item; true; i++) {
			if (i > 6)
				i = 0;

			if (map[i] == 1)
				break;
			else {
				if (count > 7)
					break;
				else
					count++;
			}
		}
		date.setDate(date.getDate() + count);
		date_formatted_to_input_value = format_date_object(date, true);
	}
	return date_formatted_to_input_value;
}
