﻿function setTravelProviders(origin, destination, departDate, returnDate, travelers, popupblockerdiv){
	var tmp = "";
	var csChecked = '';
	var csUnchecked = '';
	var return_value = true;
	$A( $$(".Spec_Compare") ).each( 
		function( item ){
			if( item.select("input").first().checked == 1 ){
				csChecked = csChecked + (csChecked==''?'':'|') + item.readAttribute("provider");
				var originParsed = encodeURIComponent($(origin).value);
				var destinationParsed = encodeURIComponent($(destination).value);
				
				var _url = "/DeepLinkEntry.aspx?Provider="+item.readAttribute("provider")+
					"&origin="+originParsed+
					"&destination="+destinationParsed+
					"&departDate="+$(departDate).value+
					"&returnDate="+$(returnDate).value+
					"&NonStop=false"+
					"&isRoundTrip=true"+
					"&Travelers="+travelers+
					"&CompareSite=true"+
					"&AdId="+item.readAttribute("adid");

				try {
					var newWindow = window.open(_url, '_blank', 'resizable,toolbar=yes,location=yes,scrollbars=yes');
					window.focus();
					newWindow.blur();
					// Google analytics tracking			
					var company = item.readAttribute("provider");
     					if (company != '')
      						company = company + '/';
     					pageTracker._trackPageview('/Outbound/CS/'+company+item.readAttribute("adid")+'/1/'+item.readAttribute("locale")+'/'+item.readAttribute("cpc"));
				} catch(e) {
					imgPlaceHolder = $$('.PopupBlockerImg')[0];
					if(imgPlaceHolder.empty()){
						img = document.createElement('img');
						img.src = '/MetaSearch/img/ani_fly_popup.gif'
						imgPlaceHolder.appendChild(img);
					}
					$(popupblockerdiv).show();
					return_value = false;
				}
				
				tmp += ""+ item.readAttribute("provider") + ',';
			} else {
				csUnchecked = csUnchecked + (csUnchecked==''?'':'|') + item.readAttribute("provider");
			}
		}
	);
	document.cookie = 'csChecked='+csChecked;
	document.cookie = 'csUnchecked='+csUnchecked;
	return return_value;
}


function searchClickHandler(origin, destination, departDate, returnDate, travelers, URL, popupblockerdiv){
	var specValid = verifyInputs(origin, destination, departDate, returnDate, travelers);
	var Coderegex = /\(...\)/;
	var Coderegex2 = /[^\(].[^\)]/;
	var originr =   $(origin).value.match(Coderegex);
	var destinationr = $(destination).value.match(Coderegex);
	if(specValid){
		if(!ignore_popup_blocker_msg)
			specValid = setTravelProviders(origin, destination, departDate, returnDate, $(travelers).options[$(travelers).selectedIndex].text, popupblockerdiv);

		if(specValid){
			var OriginValue = "";
			if (originr == null) {
				OriginValue = $(origin).value;
			} else {
				OriginValue = originr[0].match(Coderegex2);
			}

			var DestinationValue = "";
			if (destinationr == null) {
				DestinationValue = $(destination).value;
			} else {
				DestinationValue = destinationr[0].match(Coderegex2);
			}

			URL += "?"+ "IsRoundTrip=True"+"&Origin=" +encodeURI(OriginValue)+"&Destination="+encodeURI(DestinationValue)+"&DepartDate="+encodeURI(getStringFromDate(getDateFromString($(departDate).value, dateFormat), serverDateFormat))+"&ReturnDate="+encodeURI(getStringFromDate(getDateFromString($(returnDate).value, dateFormat), serverDateFormat))+"&Travelers="+encodeURI($(travelers).options[$(travelers).selectedIndex].text);
			GetFlights(URL);
		}
	}
	return specValid;
}

function verifyInputs(origin, destination, departDate, returnDate, travelers) {
	var oneDayInMili = 24 * 60 * 60 * 1000;
	var currDate = new Date();
	currDate.setHours(0); currDate.setMinutes(0); currDate.setSeconds(0); currDate.setMilliseconds(0);


	// validate origin
	if($(origin).value == '') {
		alert('Please insert an origin airport or city');
		return false;
	}

	// validate departure date
	var depDateV = $(departDate).value;
	var depDate = getDateFromString(depDateV, dateFormat);
	if( !isDate(depDateV) ) {
		alert('Please insert a valid depart date (' + dateFormat.toLowerCase() + ').');
		return false;
	}

	// departure date not in the past?
	if( depDate.valueOf() < currDate.valueOf() ) {
		alert('Please insert a depart date that has not yet occured.');
		return false;
	}	

	// departure date less than 330 days in the future?
	if( (depDate.valueOf() - (331*oneDayInMili)) > currDate.valueOf() ) {
		alert('Your travel dates must be within 11 months from today.');
		return false;
	}	


	// validate destination
	if($(destination).value == '') {
		alert('Please insert a destination airport or city');
		return false;
	}
		
	// validate return date
	var retDateV = $(returnDate).value;
	var retDate = getDateFromString(retDateV, dateFormat);
	if( !isDate(retDateV) ) {
		alert('Please insert a valid return date (' + dateFormat.toLowerCase() + ').');
		return false;
	}

 	// return date not in the past?
 	if( retDate - currDate < 0 ) {
     		alert('Please insert a return date that has not yet occured.');
     		return false;
	}	

	// return date less than 330 days in the future?
	if( (retDate.valueOf() - (331*oneDayInMili)) > currDate.valueOf() ) {
		alert('Your travel dates must be within 11 months from today.');
		return false;
	}

	// compare dates
	if( depDate.valueOf() > retDate.valueOf() ) {
		alert('Please insert a depart date not inferior to the return date.');
		return false;
	}

	return true;
}


function DaysArray(n) {
	var result;
	
	for (var i = 1; i <= n; i++) {
		result[i] = 31;
		if (i==4 || i==6 || i==9 || i==11) { result[i] = 30; }
		if (i==2) { result[i] = 29; }
	} 

	return result;
}


function handleDateOnChange(inputId, serverInputId){
	var elem = $(inputId);
	var newDate = getDateFromString(elem.value, dateFormat);
	elem.value = getStringFromDate(newDate, dateFormat);
	
	var serverElem = $(serverInputId);
	serverElem.value = getStringFromDate(newDate, serverDateFormat);
}


function isDate(dtStr){
	var dd = getDateFromString(dtStr,dateFormat);
	if(dd > 0) { return true; } else { return false; }
}


function computeLaterDate(dateInput1, dateInput2) {
	dtString1 = $(dateInput1).value;
	dtString2 = $(dateInput2).value;
	
	if( !isDate(dtString1) )
		return;
	
	var milisecondsToAdd = 24 * 60 * 60 * 1000; // 24 hours
	
	try {
		var dt1 = new Date( getDateFromFormat(dtString1, dateFormat) );
		var dt2 = new Date( getDateFromFormat(dtString2, dateFormat) );
		
		if(dt2 < dt1) {
			$(dateInput2).style.color = 'black';
			dt2 = new Date(dt1.getTime() + milisecondsToAdd);
			$(dateInput2).value = formatDate(dt2, dateFormat);
			$(dateInput2).onchange();
		}
	} catch(e) { }
}


function computeBeforeDate(dateInput1, dateInput2) {
	dtString1 = $(dateInput1).value;
	dtString2 = $(dateInput2).value;
	
	if( !isDate(dtString2) )
		return;
	
	try {
		var dt1 = new Date( getDateFromFormat(dtString1, dateFormat) );
		var dt2 = new Date( getDateFromFormat(dtString2, dateFormat) );
		
		if( !isDate( $(dateInput1).value ) || dt2 < dt1) {		
			var dateTimeTmp = new Date();
			var currentDate = new Date( dateTimeTmp.getFullYear(), dateTimeTmp.getMonth(), dateTimeTmp.getDate() );
			
			dt1 = dt2;
			if(dt2 < currentDate) {
				dt1 = dateTimeTmp;
			}
			
			$(dateInput1).style.color = 'black';
			$(dateInput1).value = formatDate(dt1, dateFormat);
			$(dateInput1).onchange();
		}
	} catch(e) { }
}

function GetFlights(URL){
	window.location = URL
}


if(typeof TZOO == "undefined" || !TZOO){
	var TZOO = {};
} 

if(!TZOO['Meta']){
	TZOO.Meta = {};
}

TZOO.Meta.getURLParameter = function(name) { 
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 
  var regexS = "[\\?&]"+name+"=([^&#]*)"; 
  var regex = new RegExp( regexS ); 
  var results = regex.exec( window.location.href ); 
  if( results == null ) 
    return ""; 
  else 
    return results[1]; 
} 
 
TZOO.Meta.transformAdURL = function(originalHref) { 
	return originalHref + '&SearchKey=' + TZOO.Meta.getURLParameter('SearchKey'); 
}

//CompareSites Dynamic Update
var csImpressions='';
var csOrigin='';
var csDestination='';

function compareSitesUpdate(id,originId,destinationId,impressions, scenarioCode, locale){
	var origin = $(originId).value;
	var destination = $(destinationId).value;

	if(csOrigin != origin || csDestination != destination){
		var csChecked = '';
		var csUnchecked = '';
		$A( $$(".Spec_Compare") ).each(
			function( item ){
				if( item.select("input").first().checked == 1 ){
					csChecked = csChecked + (csChecked==''?'':'|') + item.readAttribute("provider");
				} else {
					csUnchecked = csUnchecked + (csUnchecked==''?'':'|') + item.readAttribute("provider");
				}
			}
		);
		var content;
		var url = '/MetaSearchAjax/CompareSites.aspx?'+  
			'Origin='+encodeURIComponent(origin)+  
			'&Destination='+encodeURIComponent(destination)+  
			'&IsOneWay='+encodeURIComponent(false)+  
			'&Impressions='+encodeURIComponent(impressions)+
			'&Checked='+encodeURIComponent(csChecked)+
			'&Unchecked='+encodeURIComponent(csUnchecked)+
			'&PrevOrigin='+encodeURIComponent(csOrigin)+  
			'&PrevDestination='+encodeURIComponent(csDestination) +
			'&PrevIsOneWay='+encodeURIComponent(false) + 
			'&ScenarioCode=' + scenarioCode + 
			'&LocaleCode=' + locale;

		csOrigin = origin;
		csDestination = destination;

		new Ajax.Request(url,{ 
			method:'get',
			onSuccess: function(response){  
				var divContent = $(id);  
				if(response.status!=0){
					var content = '';
					content = response.responseText; 
					if(content != ""){
						if(content.indexOf('NO_CHANGES') == -1){
							divContent.update(content);
						}
						divContent.show();
					} else{
						//hide Compare Sites
						divContent.hide();
					}
				}
			}
		});
	}
}

