var calendar_image = "templates/israirairlines/images/calendar.gif";
var calendar_loading_image = "templates/israir/images/loading.gif";
var thisMonth = new Date();
var currentJSON = "";
var jsonSwitch = false;
var charterCities = new Array(); //array of the charter cities
var monthAr = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');

$(document).ready(function() {
	select_tab();

	$('form[name="schedule_form"] > .navigation').each(function(i) {
		var tab = new tabs({
			name: $(this).find("> label input").attr("name"),
			tabs: $(this).parent().find("> .stack .tab"),
			labels: $(this).find("> label"),
			functions: {
				hide: function(element) {
					$(element).animate({opacity: "hide"}, {duration: 400});
					$(element).find("input[name^='date']").each(function() {
						$(this).attr("name", "_" + $(this).attr("name"));
					});
				},
				show: function(element) {
					$(element).animate({opacity: "show"}, {duration: 400});
					$(element).find("input[name^='_']").each(function() {
						var name = $(this).attr("name");
						if (name.indexOf("_") == 0)
							$(this).attr("name", name.substr(1));
					});
				}
			}
		});
	});
	
	
	$('form[name=schedule_form] select[name=searchCityFrom] option').not('.jsonDest').each(function(i) {
		charterCities[i] = $(this).val();
	});	


	$('.search_date[name="date1"]').each(function(i) {
		$(this)
			.datepick({
				showOn: 'both',
				buttonImageOnly: true,
				buttonImage: calendar_image,
				dateFormat: 'dd/mm/yy',
				minDate: "+1",
				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);
					if(!$("#flights-inner-navigation-1").is(':checked')) setTimeout("open_date2()", 500);
				},
				beforeShow: function() {
					jsonSwitch = false;
					get_JSON($(this));
					departure = '';
				},
				beforeShowDay: is_active_date,
				showAnim: 'fadeIn',
				closeAtTop: false,
				mandatory: true
			});
	});	
			
	$('.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() {
					/*if (!$('label.schedule_roundtrip').hasClass('selected')) {
						$('#datepick-div').css('display','none !important');
					}*/
					jsonSwitch = true;
					$(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_date[name="hotelDate"]').each(function(i) {
		$(this)
			.datepick({
				showOn: 'both',
				buttonImageOnly: true,
				buttonImage: calendar_image,
				dateFormat: 'dd/mm/yy',
				minDate: "+1",
				altField: '#date1',
				onSelect: function(value,date) {
					var correctDayH = String(date.getDate());
					if(correctDayH.length == 1) {
					    correctDayH = '0' + correctDayH;
					}					
					$('input[name=checkInDate]').val(correctDayH + monthAr[date.getMonth()] + date.getFullYear());
				},
				showAnim: 'fadeIn',
				closeAtTop: false,
				mandatory: true
			});
	});	

	
	if (($.browser.msie) && ($.browser.version.indexOf("6.") == 0)) {
		$('.search_date[name="date2"]:eq(0)').datepick("show");
		$("#datepick-div").css({display: "none"});
	}
	
	//change select cities - tel aviv - dest | dest - tel-aviv
	getSearchCity = $('form[name=schedule_form] select[name=searchCity]');
	getSearchCityFrom = $('form[name=schedule_form] select[name=searchCityFrom]');
	
	if (getSearchCity.val() != "TLV" ) {
		currentJSON = getSearchCity.val();
	}
	getSearchCity.change(function() {
		if ( $(this).val() != 'TLV' ) {
			getSearchCityFrom.val('TLV');
			currentJSON = $(this).val();
		}
		$('form[name=schedule_form] .navigation-radio , form[name=schedule_form] .stack-numbox').fadeIn();
	})	
	getSearchCityFrom.change(function() {
		if ( $(this).val() != 'TLV' ) {
			getSearchCity.val('TLV');
			currentJSON = "";
		}
		if ( jQuery.inArray(getSearchCityFrom.val(),charterCities) >= 0 ) {
			$('form[name=schedule_form] .navigation-radio , form[name=schedule_form] .stack-numbox').fadeOut();
		}
		else {
			$('form[name=schedule_form] .navigation-radio , form[name=schedule_form] .stack-numbox').fadeIn();
		}
	})
	//when schedule form is submited, its placing correct urls to charters or schedule
	$('form[name=schedule_form]').submit(function(event) {
		if (currentJSON == '') {
			$('form[name=schedule_form] select[name=searchCity]').val('TLV');	
		}
		else {
			$('form[name=schedule_form] select[name=searchCity]').val(currentJSON);
		}
		$('form[name=schedule_form] select[name=searchCityFrom]').val(getSearchCityFrom.val());
		var getThis = $(this);
		if ( jQuery.inArray(getSearchCityFrom.val(),charterCities) >= 0 ) {
			getThis.children('input[name=dealtype]').val('CHARTER');
			getThis.children('input[name=mode]').val('newsearch');
			getThis.append('<input type="hidden" name="site_code" value="UNITAL" />');
		}
		else {
			getThis.children('input[name=dealtype]').val('SCHEDULE');
			getThis.children('input[name=mode]').val('searchit');
			getThis.append('<input type="hidden" name="airline" value="6H" />');
		}
	});	


});
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;
}


	var charterCity; // the current city of the charter


//childs and inf cant flight alone
function onlyChild() {
	if( ($("select[name='infants']").val() > 0 || $("select[name='childs']").val() > 0 ) && jQuery.inArray(getSearchCityFrom.val(),charterCities) < 0 ){
		if( $("select[name='adults']").val() < 1 ){
			alert("תינוק או ילד לא יכולים לטוס לבד");
			return false;
		}
	}
}
function get_slg() {
	if ($('ul.maintabs li a[href=#flights]').hasClass('active')) {
		charterCity = $('form[name="schedule_form"] select[name="searchCityFrom"]').val();
		if (jQuery.inArray(charterCity,charterCities) >= 0) {
			return "charter";
		}
		else {
			return "schedule";
		}		
	}

	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;

	if (slg == "charter") {
		var xml = '\
			<request>\
				<function>get_array</function>\
				<value>'+charterCity+'</value>\
				<argument>CHARTER</argument>\
				<supplier>UNITAL</supplier>\
			</request>\
		';
	}
	else {
		var xml = '\
			<request>\
				<function>get_array</function>\
				<value>'+$('form[name="'+slg+'_form"] select[name="searchCityFrom"]').val()+'</value>\
				<argument>'+slg.toUpperCase()+'</argument>\
				<supplier>UNITAL</supplier>\
			</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);
		}
	});
}
// getWeek function
function y2k(number) { return (number < 1000) ? number + 1900 : number; }
function getWeek(year,month,day) {
    var when = new Date(year,month,day);
    var newYear = new Date(year,0,1);
    var offset = 7 + 1 - newYear.getDay();
    if (offset == 8) offset = 1;
    var daynum = ((Date.UTC(y2k(year),when.getMonth(),when.getDate(),0,0,0) - Date.UTC(y2k(year),0,1,0,0,0)) /1000/60/60/24) + 1;
    var weeknum = Math.floor((daynum-offset+7)/7);
    if (weeknum == 0) {
        year--;
        var prevNewYear = new Date(year,0,1);
        var prevOffset = 7 + 1 - prevNewYear.getDay();
        if (prevOffset == 2 || prevOffset == 8) weeknum = 53; else weeknum = 52;
    }
    return weeknum;
}


function local_JSON(date) {
	
	var day = date.getDay(), city;
	var weekno = getWeek(y2k(date.getFullYear()),date.getMonth(),date.getDate());
	city = $('form[name="schedule_form"] select[name="searchCityFrom"]').val();
	if ( currentJSON == "" ) {	// if departure is TLV
		if (jsonSwitch == false) { //if departure is TLV and date1
			return [!!local_JSON_cities[city][weekno][day], ''];	
		}
		else { 	//if departure is TLV and date2
			return [!!local_JSON_cities[city+'>TLV'][weekno][day], '']; P/*ROBLEM HERE*/
		}
	}
	else {	// if departure is other than TLV
		if (jsonSwitch == false) { //if departure is not TLV and date1
			return [!!local_JSON_cities[currentJSON+'>TLV'][weekno][day], ''];
		}
		else { //if departure is not TLV and date2
			return [!!local_JSON_cities[currentJSON][weekno][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, ''];

	// if slg is charter, then its calling var charterCity
	if (slg == "charter") {
		var selected_city = charterCity;
	}
	else {
		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;
}

function _GET(param) {
	param = param.replace(/([\[\](){}*?+^$.\\|])/g, "\\$1");
	var regex = new RegExp("[?&]" + param + "=([^&#]*)");
	var url   = decodeURIComponent(window.location.href);
	var match = regex.exec(url);
	return match ? match[1] : "";
}

function select_tab() {
	var mode = _GET("mode");
	var cityOrg = _GET("searchCity"); // FROM
	var city = _GET("searchCityFrom"); // TO
	if (mode == "searchit") {
		var adultST = _GET("adults");
		var childsST = _GET("childs");
		var infantsST = _GET("infants");
		$("#flights-inner-navigation-2").attr("checked", true);
		$("#flights-navigation-2").attr("checked", true);
		if (_GET("triptype") == "3") {
			$("#flights-inner-navigation-1").attr("checked", true);
			$('form[name=schedule_form] input[name=date2]').closest('div.col-left').hide();
		}
		$('form[name=schedule_form] select[name=adults]').val(adultST);
		$('form[name=schedule_form] select[name=childs]').val(childsST);
		$('form[name=schedule_form] select[name=infants]').val(infantsST);
		if (cityOrg == '') {
			cityOrg = 'TLV';
		}
		$('form[name=schedule_form] select[name=searchCity]').val(cityOrg);
		select_city($('form[name="schedule_form"]'), '');
	}
	if (mode == "newsearch") {
		var dealtype = _GET("dealtype");
		if (dealtype == "TOURS") {
			$("#search-navigation-2").attr("checked", true);
			select_city($('form[name="tour_form"]'), city);
		}
		if (dealtype == "NOFSHON") {
			$("#search-navigation-3").attr("checked", true);
			select_city($('form[name="nofshon_form"]'), city);
		}
		if (dealtype == "CHARTER") {
			$("#search-navigation-1").attr("checked", true);
			$("#flights-navigation-2").attr("checked", true);
			select_city($('form[name="schedule_form"]'), city);
			$('form[name=schedule_form] .navigation-radio , form[name=schedule_form] .stack-numbox').hide();
			$('form[name=schedule_form] select[name=searchCity]').val(cityOrg);
		}
	}
	
	var blockId = _GET("id");
	if (mode == "packages" && (blockId == "1" || blockId =="7")) {
		if (blockId == "1" ) {
			$("#search-navigation-1").attr("checked", true);
			$("#flights-navigation-2").attr("checked", true);
		}
		else if (blockId == "7") {
			$("#search-navigation-3").attr("checked", true);
		}
	}
	
	if (mode == "category_page" && blockId == "470") {
		$("#search-navigation-2").attr("checked", true);
	}
}
function select_city(tab, value) {
	$(tab).find('select[name="searchCityFrom"]:eq(0)').val(value);
}
$(document).ready(function() {
	var mode = _GET("mode");
	var city = _GET("searchCityFrom"); // TO
	if (mode == "searchit") {
		select_city($('form[name="schedule_form"]'), city);
	}
})
