﻿var isOpera = navigator.userAgent.indexOf("Opera") > -1;
var isIE = navigator.userAgent.indexOf("MSIE") > 1 && !isOpera;
var isMoz = navigator.userAgent.indexOf("Mozilla/5.") == 0 && !isOpera;

var click_counter = 0;
var current_selected_row_index = -1;
var cal_ipt_id = "";

//var baseUrl = location.protocol + "//" + location.hostname + "/flightsearch";
// baseUrl is now set by the code-behind and loaded into the pages' javascript by page.clientscript.registerclientscriptblock

function initialise()
{

	$(function() {
		$('#tbDepartureDate').datepicker({
			changeMonth: true,
			changeYear: true,
			dateFormat: 'dd-M-yy',
			altFormat: 'yy-mm-dd',
			altField: '#tbDepartureDateValue',
			constrainInput: true,
			minDate: new Date(),
			yearRange: '-1:+3',
			duration: ''
		});
	});

	$(function() {
		$('#tbReturnDate').datepicker({
			changeMonth: true,
			changeYear: true,
			dateFormat: 'dd-M-yy',
			altFormat: 'yy-mm-dd',
			altField: '#tbReturnDateValue',
			constrainInput: true,
			minDate: new Date(),
			yearRange: '-1:+3',
			duration: ''
		});
	});

}



function split_return_index(val_, delimiter_, index_) {
	var t = new Array();
	t = val_.split(delimiter_);
	if (t.length > 0) {
		return t[index_];
	} else {
		return "";
	}
}
function isNull(a) {
	return a === null;
}

function isUndefined(a) {
	return typeof a == 'undefined';
}


function showWindow(id) {
	var text = document.getElementById(id).innerHTML;
	var header = "<html><head></head><body>" + text + "</body></html>";
	var newWin = window.open('', '', 'width=200,height=200');
	newWin.document.write(header);
	newWin.focus();
}


function change_div_class() {
	if (isMoz) {
		var obj = document.getElementById("dimmer_" + p);
		obj.className = "divcal_moz";
	}
}

function clear_click(txtBox) {
	if (click_counter == 0) {
		click_counter = 1;
		var obj1 = document.getElementById(txtBox);
		obj1.value = "";
	}
}

function flight_stsr_search(p) {
	var ddlDeparture = document.getElementById('ddlDeparture');
	var dep = ddlDeparture.value;
	dep_desc = ddlDeparture.options[ddlDeparture.selectedIndex].text;

	var destLocation = document.getElementById('tbLocation');
	var destinationCode = document.getElementById('airport_arrival_code').value;

	var check_in = document.getElementById("tbDepartureDate");
	var check_out = document.getElementById("tbReturnDate");

	var no_of_a = document.getElementById("ddlAdults").value;

	//var isDirect = (document.getElementById("cbDirect").checked) ? "1" : "0";
	var isDirect = 0

	var isReturn = (document.getElementById("cbReturn").checked) ? "1" : "0";

	var cabinClass = document.getElementById('selClass');

	var affiliateid = '';	
	if (isdefined('hfAffiliate'))
	{
		affiliateid = hfAffiliate;
	}
	else if (isdefined('hfAffiliateId')) {
		affiliateid = document.getElementById(hfAffiliateId).value;
	}
	
	if (ddlDeparture.value == "0") { alert("Please select a departure point."); obj1.focus(); return; };
	if (destLocation.value.length < 3 || destinationCode == "") {
		alert('Please try re-typing the destination and selecting a value from the pop-up list. You need to type at least 3 characters.');
		return;
	}
	if (destLocation.value.length == 0) { alert("Please select a destination point."); destLocation.focus(); return; };
	if (check_in.value.length == 0) { alert("Please select a departure date."); check_in.focus(); return; };
	if (check_out.value.length == 0 && isReturn == "1") { alert("Please select a return date."); check_in.focus(); return; };

	/*
	check_in.value = check_in.value.replace("/", "-");
	check_in.value = check_in.value.replace("/", "-");
	check_out.value = check_out.value.replace("/", "-");
	check_out.value = check_out.value.replace("/", "-");
	var departureDate = new Date(check_in.value.substr(6, 4), check_in.value.substr(3, 2), check_in.value.substr(0, 2));
	var returnDate = new Date(check_out.value.substr(6, 4), check_out.value.substr(3, 2), check_out.value.substr(0, 2));
	*/
	var departureDateValue = document.getElementById('tbDepartureDateValue').value;
	var returnDateValue = document.getElementById('tbReturnDateValue').value

	var departureDate  = getDateFromISO(departureDateValue);
	var returnDate = getDateFromISO(returnDateValue);
	
	if (departureDate > returnDate) {
		alert("Please select a return date that is after your departure date."); check_out.focus();
		return;
	}

	if (dep == "") dep = "LON|"

	var url = '';
	if (isdefined('resultsUrl') && resultsUrl != '')
	{
		url = resultsUrl + '?';
	}
	else
	{	
		url = baseUrl + "/results.aspx?";
	}	

	url += "l1=" + dep.toUpperCase();
	url += "&l2=" + destinationCode;
	url += "&arv=" + destLocation.value
	url += "&dd=" + departureDateValue;
	url += "&rd=" + returnDateValue;
	url += "&na=" + no_of_a; // Adults
	url += "&ret=" + isReturn;
	url += "&dir=" + isDirect;
	url += "&flex=0" //+ document.getElementById("selFlexibility").value;
	//url += "&c=" + cabinClass.value;
	url += "&c=" + "3";
	url += "&a=" + affiliateid;
	url += "&fc=" + foregroundColour;
	url += "&bc=" + backgroundColour;
	url += "&r=" + affiliateReference;
	var targetWindowName = "_top";
	try{
	if(OpenSearchResultsInNewWindow == "1"){targetWindowName = "_blank";}
	}catch(e){}
	
	window.open(url, targetWindowName, "");
}


function check_location(e, sender, div_id, num_, ddl_id) {
	//alert("ddl_id = " + ddl_id + "\ne= " + e + "\nipt_id = " + ipt_id + "\n num_ = " + num_ + "\n;)");
	
	var obj2 = document.getElementById(ddl_id);
	if (obj2.value == "|" || obj2.value == "0") { 
		$('#locationSearchValidator').css('display','block');
		sender.value = '';
	}
	else
	{
		$('#locationSearchValidator').css('display','none');
	}

	if (sender.value != "" && sender.value != "0" && obj2.value != "0" && obj2.value != "") {

		var code;
		if (!e) e = window.event;
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;

		if (code == 40 || code == 38) { return; }


		if (sender.value.length > 2) {
			var url = baseUrl + "/xml_processor.aspx?r=location_list&p=" + sender.value + "|" + num_ + "&rt=" + obj2.value;
			current_selected_row_index = -1;
			get_location_list(url, div_id);
		} else {
			//var el = document.getElementById(div_id);
			//el.innerHTML = "";
			//el.style.display = 'none';
		}
	}
}

var searching = false;
function get_location_list(url, div_id) {
	if (!searching) {
		searching = true;
		$("#locationSearchIndicator").css('display', 'inline');
		$.get(url, null, function(data) {
			$("#locationSearchIndicator").css('display', 'none');
			
			$('#locationResultsContainer1').html('');
			$('#locationResultsContainer2').html('<div id="' + div_id + '"></div>');

			var el = document.getElementById(div_id);
			el.innerHTML = data;			
			
			if ($('#autocompleteLocation table tr').length > 0) //Check and make sure we have some results before displaying anything
			{
				$('#locationSearchNoResults').css('display','none');
				
				if ($('#autocompleteLocation table tr').length > 6 && $('#locationResultsContainer1').length > 0)
				{					
					$('#' + div_id).appendTo('#locationResultsContainer1');
				}
				else
				{
					//el.style.position = 'relative';
				}				
				el.style.display = 'block';
			}
			else
			{
				$('#locationSearchNoResults').css('display','block');				
			}
			searching = false;
		}, 'text');
	}	
}


function tranverse_table(e, tbl_id, div_id, ipt_id) {
	var el = document.getElementById(div_id);
	if (el.style.display == "none") {
		return;
	} else {
		var code;
		if (!e) var e = window.event;
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;
		if (code == 40) {//going down
			var obj = document.getElementById(tbl_id);
			var rows = obj.getElementsByTagName("tr");

			if (rows.length > current_selected_row_index + 1) {
				if (current_selected_row_index != -1) { rows[current_selected_row_index].className = "odd"; }
				current_selected_row_index += 1
				rows[current_selected_row_index].className = "even";
			} else {
				rows[current_selected_row_index].className = "odd";
				current_selected_row_index = 0;
				rows[current_selected_row_index].className = "even";

			}
		} else if (code == 38) { //going up
			var obj = document.getElementById(tbl_id);
			var rows = obj.getElementsByTagName("tr");
			if (current_selected_row_index > -1 && -1 < current_selected_row_index - 1) {
				if (current_selected_row_index != -1) { rows[current_selected_row_index].className = "odd"; }
				current_selected_row_index -= 1
				rows[current_selected_row_index].className = "even";
			} else {
				rows[current_selected_row_index].className = "odd";
				current_selected_row_index = rows.length - 1;
				rows[current_selected_row_index].className = "even";
			}
		} else if (code == 13 || code == 9) {
			var obj = document.getElementById(tbl_id);
			var rows = obj.getElementsByTagName("tr");
			var cells = rows[current_selected_row_index].getElementsByTagName("td");
			var s = "";
			for (j = 0; j < cells.length; j++) {
				if (s.length != 0) { s += ", " }
				s += cells[j].innerHTML;
			};
			var obj = document.getElementById(ipt_id);
			obj.value = s;
			el.style.display = 'none';


		}

	}

}
function change_row_colour(id, bool) {
	var obj = document.getElementById(id);
	obj.className = (bool ? "even" : "odd");
}

function isdefined(variable) {
	return (typeof (window[variable]) == "undefined") ? false : true;
}

function select_location(id, p) {
	var row = document.getElementById(id);
	//alert(row.innerHTML);
	var cells = row.getElementsByTagName("td");
	var s = "";
	for (j = 0; j < cells.length; j++) {
		if (s.length != 0) { s += ", " }
		s += cells[j].innerHTML;
	};

	// Set the hidden field we use for building the search URL
	var destinationCode = cells[2].innerHTML;
	destinationCode = destinationCode.replace('(', '');
	destinationCode = destinationCode.replace(')', '');

	if (isdefined('airport_arrival_codeID')) {
		document.getElementById(airport_arrival_codeID).value = destinationCode;
	}
	else {
		document.getElementById("airport_arrival_code").value = destinationCode;
	}


	if (isdefined('tbLocationId')) {
		var obj = document.getElementById(tbLocationId);
	}
	else {
		var obj = document.getElementById('tbLocation');
	}
	obj.value = s;

	var el = document.getElementById("div_location_list_1");
	el.style.display = 'none';
}

function GetMonthNumber(month) {
	switch (month.substring(0, 3)) {
		case 'Jan':
			return '01';
		case 'Feb':
			return '02';
		case 'Mar':
			return '03';
		case 'Apr':
			return '04';
		case 'May':
			return '05';
		case 'Jun':
			return '06';
		case 'Jul':
			return '07';
		case 'Aug':
			return '08';
		case 'Sep':
			return '09';
		case 'Oct':
			return '10';
		case 'Nov':
			return '11';
		case 'Dec':
			return '12';
	}
}

function getDateFromISO(input) {
	var parts = input.split('-');
	if (parts.length > 2) {
		var d = new Date(parts[0], parts[1] - 1, parts[2])
		return d;
	}
	return false;
}

function strDateToISO(input) {
	if (input.length == 10) {
		input = "0" + input;
	}
	var day = input.substring(0, 2);
	var month = input.substring(3, 6);
	var year = input.substring(7, 12);

	var result = year + "-" + GetMonthNumber(month) + "-" + day;
	return result;
}

var cal_ipt_id;

function show_cal(parent, calid) {
	cal_ipt_id = parent.id;
	var calobj = document.getElementById(calid);
	var obj = document.getElementById('calendar');
	calobj.appendChild(obj);
	show_calendar(parent.id);
}

function show_calendar(inputid) {
	fill_monthyear_list('sel_month_year', cal_ipt_id);
	fill_day_list(false, 'sel_month_year', 'calendar_content', 0, inputid);
	var obj = document.getElementById('calendar');
	if (obj.style.display == "none") {
		obj.style.display = "inline";
	} else {
		obj.style.display = "none";
	}
}

function clearText(obj) {
	if (obj.value == "Type the first 3 letters here")
	{
		obj.value = "";
	}
}


function updateDate(obj, targetId) {
	targetObj = document.getElementById(targetId);
	sdate = strDateToISO(obj.value);
	var d = getDateFromISO(sdate);
	var newdate = new Date(d.getFullYear(), d.getMonth(), d.getDate());
	newdate.setDate(d.getDate() + 7);
	targetObj.value = newdate.getDate() + "-" + month_name[newdate.getMonth()] + "-" + newdate.getFullYear();
}



// ============================================
// Ken's calendar code from cal.js + a few mods
// ============================================

function isDate(p_Expression) {
	return !isNaN(new Date(p_Expression)); 	// <<--- this needs checking
}

// REQUIRES: isDate()
function dateAdd(p_Interval, p_Number, p_Date) {
	if (!isDate(p_Date)) { return "invalid date: '" + p_Date + "'"; }
	if (isNaN(p_Number)) { return "invalid number: '" + p_Number + "'"; }

	p_Number = new Number(p_Number);
	var dt = new Date(p_Date);
	switch (p_Interval.toLowerCase()) {
		case "yyyy":
			{// year
				dt.setFullYear(parseInt(dt.getFullYear()) + parseInt(p_Number));
				break;
			}
		case "q":
			{		// quarter
				dt.setMonth(parseInt(dt.getMonth()) + parseInt(p_Number * 3));
				break;
			}
		case "m":
			{		// month
				dt.setMonth(parseInt(dt.getMonth()) + parseInt(p_Number));
				break;
			}
		case "y": 	// day of year
		case "d": 	// day
		case "w":
			{		// weekday
				dt.setDate(parseInt(dt.getDate()) + parseInt(p_Number));
				break;
			}
		case "ww":
			{	// week of year
				dt.setDate(parseInt(dt.getDate()) + parseInt(p_Number * 7));
				break;
			}
		case "h":
			{		// hour
				dt.setHours(parseInt(dt.getHours()) + parseInt(p_Number));
				break;
			}
		case "n":
			{		// minute
				dt.setMinutes(parseInt(dt.getMinutes()) + parseInt(p_Number));
				break;
			}
		case "s":
			{		// second
				dt.setSeconds(parseInt(dt.getSeconds()) + parseInt(p_Number));
				break;
			}
		case "ms":
			{		// second
				dt.setMilliseconds(parseInt(dt.getMilliseconds()) + parseInt(p_Number));
				break;
			}
		default:
			{
				return "invalid interval: '" + p_Interval + "'";
			}
	}
	return dt;
}


var month_name = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
var day_name = new Array("Sun", "Mon", "Tues", "Wed", "Thu", "Fri", "Sat");

function fill_monthyear_list(sel_month_year, tbTarget) {

	var defaultDate = new Date();
	//var defaultDate = dateAdd("m", 1, todayDate);

	// If a date has already been selected, make sure that its month is the default date
	var tbTargetObj = document.getElementById(tbTarget);

	if (tbTargetObj.value != "") {
		///alert(tbTargetObj.value)
		var isodate = strDateToISO(tbTargetObj.value);
		defaultDate = getDateFromISO(isodate);
		//alert(newdate.toDateString());
	}

	var selectedMonth = defaultDate.getMonth(); // we use zero-based months later on
	var selectedYear = defaultDate.getFullYear();

	var sel_dept_date_monthyear = document.getElementById(sel_month_year);
	var todayDate = new Date();

	for (i = 0; i < 18; i++) {

		if (todayDate.getDate() >= 29) { todayDate = dateAdd("d", -10, todayDate); }

		if (i > 0) { todayDate = dateAdd("m", 1, todayDate); }

		var month = todayDate.getMonth();
		var year = todayDate.getFullYear();

		var val = month_name[month] + ' ' + year;
		var key = month + '-' + year;

		sel_dept_date_monthyear.options[i] = new Option(val, key);

		if (month == selectedMonth & year == selectedYear) {
			sel_dept_date_monthyear.options[i].selected = true;
		}

	}
	//sel_dept_date_monthyear.options[1].selected = true;

}
function fill_day_list(changed, sel_month_year, div_content_, step_, date_ipt_box) {

	var sel_dept_date_monthyear = document.getElementById(sel_month_year);
	var monthyear = ""
	if (sel_dept_date_monthyear.selectedIndex + step_ < sel_dept_date_monthyear.length) {

		monthyear = sel_dept_date_monthyear.options[sel_dept_date_monthyear.selectedIndex + step_].value;
		sel_dept_date_monthyear.selectedIndex = sel_dept_date_monthyear.selectedIndex + step_;
	}
	if (monthyear != "") {

		var dimmer_ = document.getElementById(div_content_).parentNode.parentNode.parentNode.parentNode.parentNode.id;

		var todayDate = new Date();
		var defaultDate = new Date();
		var arr = monthyear.split("-");

		var month = arr[0];
		var year = arr[1];

		var dt = new Date();
		dt.setDate(1);
		dt.setMonth(month);
		dt.setFullYear(year);

		var dy = new Date();
		dy.setDate(1);
		dy.setMonth(month);
		dy.setFullYear(year);
		var dy = dateAdd("m", -1, dy);

		if (changed == true) {
			defaultDate.setDate(1);

			defaultDate.setMonth(month);
			defaultDate.setFullYear(year);
		} else {
			defaultDate = dateAdd("m", 1, todayDate);
		}

		var current_month = month
		var x = dt.getMonth();
		var i = 0;
		var s = "";
		s += "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"2\" >"
		var cal_started = false;
		var started = false;
		var j = 0;
		var minus_days = dt.getDay();
		minus_days = minus_days - 7;
		var num_rows = Math.ceil((daysInMonth(x, year) + (7 + minus_days)) / 7)
		s += "<tr class=\"cal_header\">";
		for (j = 0; j < 7; j++) {
			s += "<td>" + day_name[j] + "</td>\n";
		}
		s += "</td>\n";
		var days_b4 = 7 + minus_days;
		for (i = 0; i < num_rows; i++) {
			for (j = 0; j < 7; j++) {
				if (j == 0) { s += "<tr>" }
				x = dt.getMonth();
				if (x != current_month) { break; }
				var thisDay = dt.getDay();
				var val = dt.getDate();
				var year_ = dt.getYear();
				if (year_ < 2000) { year_ = year_ + 1900 }
				if (thisDay != j) {
					var y = dy.getMonth();
					var val = dy.getDate();
					var year_ = dy.getYear();
					if (year_ < 2000) { year_ = year_ + 1900 }
					var lastMonthDay = daysInMonth(y, year_);
					val = (lastMonthDay + 1) - days_b4;

					if (todayDate < dt) {
						if (!started) { s += "<td align='center' class=\"cal_cell_shaded\" onclick=\"select_date('" + date_ipt_box + "','" + val + "-" + month_name[y] + "-" + year_ + "','" + dimmer_ + "')\">" + val + "</td>\n"; }
					} else {
						s += "<td align='center' class=\"cal_cell_2\">" + val + "</td>\n";
					}
					days_b4 -= 1

				}
				if (thisDay == j) { started = true; }
				if (todayDate < dt) {
					if (started) { s += "<td align='center' class=\"cal_cell\" onclick=\"select_date('" + date_ipt_box + "','" + val + "-" + month_name[x] + "-" + year_ + "','" + dimmer_ + "')\">" + val + "</td>\n"; }
				} else {
					if (started) { s += "<td align='center' class=\"cal_cell_2\">" + val + "</td>\n"; }
				}

				if (started) { dt = dateAdd("d", 1, dt); }
				if (j == 6) { s += "</tr>" }

			}
			for (k = j; k < 7; k++) {
				x = dt.getMonth();
				var thisDay = dt.getDay();
				var val = dt.getDate();
				var year_ = dt.getYear();
				if (year_ < 2000) { year_ = year_ + 1900 }
				if (todayDate < dt) {
					if (started) { s += "<td align='center' class=\"cal_cell_shaded\" onclick=\"select_date('" + date_ipt_box + "','" + val + "-" + month_name[x] + "-" + year_ + "','" + dimmer_ + "')\">" + val + "</td>\n"; }
				} else {
					if (started) { s += "<td align='center' class=\"cal_cell_2\">" + val + "</td>\n"; }
				}
				dt = dateAdd("d", 1, dt);

				//s += "<td></td>\n";
			}
			if (j != 6) {
				s += "</tr>";
			}
		}
		s += "<tr><td colspan=\"7\" align=\"center\"><a onclick=\"close_me('" + dimmer_ + "')\"  style=\"cursor:pointer;\">Close</a></td></tr>"
		s += "</table>"
		var obj = document.getElementById(div_content_);



		obj.innerHTML = s;
	}
}
function daysInMonth(iMonth, iYear) {
	return 32 - new Date(iYear, iMonth, 32).getDate();
}

function select_date(obj_name, val_, div_container_) {
	var obj = document.getElementById(obj_name);
	obj.value = val_;

	obj2 = document.getElementById(div_container_);
	obj2.style.display = "none";

	if (obj.id == 'tbDepartureDate') {
		updateDate(obj, 'tbReturnDate');
	}

	if (!isNull(tbDepartureClientID)) {
		if (obj.id == tbDepartureClientID) {
			updateDate(obj, tbReturnClientID);
		}
	}
	
	
}

function close_me(id) {
	var obj = document.getElementById(id);
	obj.style.display = "none";
}
