﻿var views = {DEFAULT:'1',FLEXIBLE:'2',ONEWAYLEGS:'3',FLEXIBLELEGS:'4',MAP:'5'};
var viewMgr = new viewManager();
var flightTemplate = $.template($('#flightTemplate').val());
var hasOnewayLegs = false;
var mapFlightsPerAirport = 2;
var flexUrl = LANG_ROOT_PATH + 'AJAX/FlexibleFlights2.aspx';
var imgPlus = IMG_ROOT + 'i/plus.gif';
var imgMinus = IMG_ROOT + 'i/minus.gif';

var hideElement = function(elem){ elem.style.display = 'none'; }
var getElement = function(id){ return (document.all ? document.all[id] : document.getElementById(id)); }

/* Event callbacks */
var onOnewayLegsAdded = function(view){
	var cheapestItem = view.getCheapestItem();
	var tablabel = $('#legsFromPrice');
	if(cheapestItem && tablabel.get(0) != document){
		tablabel.html('(' + TXT_FROM_PRICE + ' ' + cheapestItem.price + ')');
	}
	if(view.outboundMgr && view.outboundMgr.render){
		var cheapestOutbound = view.outboundMgr.render.renderPriceLink(view.outboundMgr.cheapestItem);
		var ouboundlabel = $('#cheapOutbound');
		if(cheapestOutbound && ouboundlabel.get(0) != document){ ouboundlabel.html(cheapestOutbound); }
	}
	if(view.inboundMgr && view.inboundMgr.render){
		var cheapestInbound = view.inboundMgr.render.renderPriceLink(view.inboundMgr.cheapestItem);
		var inboundlabel = $('#cheapInbound');
		if(cheapestInbound && inboundlabel.get(0) != document){ inboundlabel.html(cheapestInbound); }
	}
	hasOnewayLegs = true;
	var view = viewMgr.activeView;
	if(view && (view.id == views.DEFAULT || view.id == views.ONEWAYLEGS)){ toggleFlightsFilter((view.id == views.ONEWAYLEGS)); }
}

var onDefaultResultsAdded = function(view){
	if(view.outboundMgr && view.outboundMgr.render){
		var cheapestItem = view.outboundMgr.render.renderPriceLink(view.outboundMgr.cheapestItem);
		var label = $('#cheapReturn');
		if(cheapestItem && label.get(0) != document){ label.html(cheapestItem); }
	}
}

var toggleFlightsFilter = function(isOneWay){
	var flightsFilter = $('#flightsFilter');
	if(flightsFilter.get(0) != document){ flightsFilter.css('display',(hasOnewayLegs ? '' : 'none')); }
	var chkSelected = $((isOneWay ? '#chkLegs' : '#chkReturns'));
	if(chkSelected.get(0) != document){ chkSelected.attr("checked","checked"); }
	var showReturns = $('#showReturns');
	if(showReturns.get(0) != document){ showReturns.css("fontWeight",(isOneWay ? "normal" : "bold")); }
	var showLegs = $('#showLegs');
	if(showLegs.get(0) != document){ showLegs.css("fontWeight",(isOneWay ? "bold" : "normal")); }
}

var onShowDefault = function(view){
	toggleFlightsFilter(false);
}

var onShowOneway = function(view){
	toggleFlightsFilter(true);
}

var onShowFlexible = function(view){
	var flightsFilter = $('#flightsFilter');
	if(flightsFilter.get(0) != document){ flightsFilter.css('display','none'); }
	var isFlexOneway = (view.id == views.FLEXIBLELEGS);
	var showFlex = $('#flexResultsLink');
	if(showFlex.get(0) != document){ showFlex.css("fontWeight",(isFlexOneway ? "normal" : "bold")); }
	var showLegs = $('#flexLegsLink');
	if(showLegs.get(0) != document){ showLegs.css("fontWeight",(isFlexOneway ? "bold" : "normal")); }
}

var onShowMap = function(view){
	var flightsFilter = $('#flightsFilter');
	if(flightsFilter.get(0) != document){ flightsFilter.css('display','none'); }
	if(view.map){
		var lat = (view.isDeparture ? DEP_LATITUDE : DEST_LATITUDE);
		var lon = (view.isDeparture ? DEP_LONGITUDE : DEST_LONGITUDE);
		view.map.createMap(lat, lon);
		view.updateMarkers();
	}
}

var onMapEndpointChanged = function(view, move){
	var depElem = $('#mapDeps');
	if(depElem.get(0) != document){ depElem.css("fontWeight",(view.isDeparture ? "bold" : "normal")); }
	var destElem = $('#mapDests');
	if(destElem.get(0) != document){ destElem.css("fontWeight",(view.isDeparture ? "normal" : "bold")); }
	if(view.map && move){
		var lat = (view.isDeparture ? DEP_LATITUDE : DEST_LATITUDE);
		var lon = (view.isDeparture ? DEP_LONGITUDE : DEST_LONGITUDE);
		view.map.moveTo(lat, lon);
	}
}

/* Map view render function */
var renderMapResults = function(){
	var dests = new Object();
	var mapIata = mapView.iata;
	var isDep = mapView.isDeparture;
	var elem = $(this.resultsElement);
	var numResults = 0;
	if(!this.filteredResults || this.filteredResults.length == 0){
		var msg = (this.flights.length == 0 ? TXT_NO_RESULTS_MSG : TXT_NO_RESULTS);
		elem.html('<div class="ResultDiv"><div class="ErrorMessage">' + msg + '</div></div>');
	}
	else{
		var resultsHtml = '';
		for(var i = 0; i < this.filteredResults.length; i++){
			var item = this.filteredResults[i];
			var iata = (isDep ? item.dep : item.dest);
			if(mapIata == null || iata == mapIata){
				if(!dests[iata]){
					dests[iata] = new Array();
					dests[iata].push(item);
				}
				else if(iata == mapIata || dests[iata].length < mapFlightsPerAirport){
					dests[iata].push(item);
				}
			}
		}
		if(mapIata != null && dests[mapIata]){
			numResults = dests[mapIata].length;
			var arr = this.selectPageResults(dests[mapIata]);
			var len = (arr ? arr.length : 0);
			if(len > 0){
				resultsHtml += this.render.renderMapHeader(this, arr[0], isDep);
				for(var i = 0; i < len; i++){
					resultsHtml += flightTemplate.apply({item:arr[i], mgr:this, render:this.render});
				}
			}
		}
		else{
			for(var apt in dests){
				var arr = dests[apt];
				var len = (arr ? arr.length : 0);
				if(len > 0){
					resultsHtml += this.render.renderMapHeader(this, arr[0], isDep);
					for(var i = 0; i < len; i++){
						resultsHtml += flightTemplate.apply({item:arr[i], mgr:this, render:this.render});
					}
				}
			}
		}
		if(resultsHtml.length == 0){
			var msg = (this.flights.length == 0 ? TXT_NO_RESULTS_MSG : TXT_NO_RESULTS);
			resultsHtml = '<div class="ResultDiv"><div class="ErrorMessage">' + msg + '</div></div>';
		}
		elem.html(resultsHtml);
	}
	var countElem = $(this.resultsCount);
	if(mapIata != null){
		if(countElem.get(0) != document && this.render){
			countElem.html(this.render.getResultCounts(numResults, this.flights.length, this.operatorCount));
		}
		if(this.render){ this.render.renderPaging(this, numResults); }
	}
	else{
		if(countElem.get(0) != document && this.render){
			countElem.html(this.render.getResultCounts(this.filteredResults.length, this.flights.length, this.operatorCount));
		}
		var pageElem = $(this.pagingElement);
		if(pageElem.get(0) != document){ pageElem.html('<b>1</b>'); }
	}
}

var getDisplayPrice = function(price){
	if(searchSettings.decimalSeparator != null && searchSettings.decimalSeparator.length > 0){
		var i = price.indexOf(searchSettings.decimalSeparator);
		if(i > -1){ price = '<span class="priceBig">' + price.substring(0, i) + '</span>' + price.substr(i, price.length); }
		return price;
	}
	else{ return item.price; }
};

/* Create Views */
var defaultView = new pageView({
	id:views.DEFAULT,
	tab:'#tabReturn',
	panels:['#timeRetFilter','#resultsHeader','#resultsTitlebar','#dateFilterRow','#flightsFilter','#progressiveResults','#airlineRow'],
	onflightsadded:onDefaultResultsAdded,
	onshow:onShowDefault,
	isGrouped:searchSettings.useGrouping,
	sorters:{outbound:{value:'href1Sort0',airline:'href1Sort1',depart:'href1Sort3',arrive:'href1Sort4',stops:'href1Sort5',operator:'href1Sort2',img:'sort1Img'}},
	outboundMgr:{
		resultsElement:'#progressiveResults',
		resultsCount:'#resultsCounts',
		pagingElement:'#spanPages',
		transportRow:'#transportRow',
		filterRow:'#rowOutbound',
		pageSizeSelect:'PageCountSize',
		premiumOp:searchSettings.premiumOp,
		filters:{depAirports:'airportsDep',destAirports:'airportsDest',operators:'operatorsFilter',dates:'dateFilter',transportTypes:'transportFilter',airlines:'airlinesFilter'},
		sliders:{
			depTime:{id:'#deptime',min:'mindeptime',max:'maxdeptime',minlabel:'#depStartTime',maxlabel:'#depEndTime'},
			retTime:{id:'#rettime',min:'minrettime',max:'maxrettime',minlabel:'#retStartTime',maxlabel:'#retEndTime'}
		}
	}
});
viewMgr.addView(defaultView, true);

var flexibleView = new flexiblePageView({
	id:views.FLEXIBLE,
	tab:'#tabFlexible',
	panels:['#timeRetFilter','#flexibleHeader','#flexibleResultsHeader','#flexWayNav','#flexibleTitlebar','#flexibleResults','#flexiblePanel'],
	onshow:onShowFlexible,
	sorters:{outbound:{value:'href2Sort0',airline:'href2Sort1',depart:'href2Sort3',arrive:'href2Sort4',stops:'href2Sort5',operator:'href2Sort2',img:'sort2Img'}},
	outboundMgr:{
		resultsElement:'#flexibleResults',
		resultsCount:'#resultsCounts',
		pagingElement:'#spanPages',
		transportRow:'#transportRow',
		filterRow:'#rowOutbound',
		pageSizeSelect:'PageCountSize',
		xmlRequest:new ajaxRequester(),
		ajaxUrl:flexUrl,
		chart:new BarChart('flexibleView.outboundMgr','flexChart1','graphMonthLabel','graphPrevMonthImg'),
		way:searchSettings.way,
		filters:{depAirports:'airportsDep',destAirports:'airportsDest',operators:'operatorsFilter'},
		sliders:{
			depTime:{id:'#deptime',min:'mindeptime',max:'maxdeptime',minlabel:'#depStartTime',maxlabel:'#depEndTime'},
			retTime:{id:'#rettime',min:'minrettime',max:'maxrettime',minlabel:'#retStartTime',maxlabel:'#retEndTime'}
		}
	}
});
viewMgr.addView(flexibleView);

var onewayLegsView = new pageView({
	id:views.ONEWAYLEGS,
	tab:'#tabOneWay',
	panels:['#resultsHeader','#outboundTitlebar','#inboundTitlebar','#lnkOutbound','#dateFilterRow','#flightsFilter','#tbOneWayLegsOut','#dateFilterInRow','#InboundTable','#divInboundResults','#tblInboundFoot','#airlineRow','#airlineInboundRow'],
	onflightsadded:onOnewayLegsAdded,
	isGrouped:searchSettings.useGrouping,
	onshow:onShowOneway,
	sorters:{
		outbound:{value:'href1Sort0',airline:'href1Sort1',depart:'href1Sort3',arrive:'href1Sort4',stops:'href1Sort5',operator:'href1Sort2',img:'sort1Img'},
		inbound:{value:'href3Sort0',airline:'href3Sort1',depart:'href3Sort3',arrive:'href3Sort4',stops:'href3Sort5',operator:'href3Sort2',img:'sort3Img'}
	},
	outboundMgr:{
		resultsElement:'#tbOneWayLegsOut',
		resultsCount:'#resultsCounts',
		pagingElement:'#spanPages',
		transportRow:'#transportRow',
		filterRow:'#rowOutbound',
		pagesize:10,
		pageSizeSelect:'PageCountSize',
		filters:{depAirports:'airportsDep',destAirports:'airportsDest',operators:'operatorsFilter',dates:'dateFilter',transportTypes:'transportFilter',airlines:'airlinesFilter'},
		sliders:{depTime:{id:'#deptime',min:'mindeptime',max:'maxdeptime',minlabel:'#depStartTime',maxlabel:'#depEndTime'}}
	},
	inboundMgr:{
		resultsElement:'#tbOneWayLegsIn',
		resultsCount:'#resultsCountsIn',
		pagingElement:'#spanInboundPages',
		transportRow:'#transportInboundRow',
		filterRow:'#tblInbound',
		pagesize:10,
		pageSizeSelect:'InboundPageCountSize',
		filters:{depAirports:'airportsDepIn',destAirports:'airportsDestIn',operators:'operatorsInboundFilter',dates:'dateFilterIn',transportTypes:'transportInboundFilter',airlines:'airlinesInboundFilter'},
		sliders:{depTime:{id:'#deptimein',min:'mindeptimein',max:'maxdeptimein',minlabel:'#indepStartTime',maxlabel:'#indepEndTime'}}
	}
});
viewMgr.addView(onewayLegsView);

var flexibleLegsView = new flexiblePageView({
	id:views.FLEXIBLELEGS,
	tab:'#tabFlexible',
	panels:['#flexibleHeader','#flexibleResultsHeader','#flexWayNav','#flexibleOutTitlebar','#flexibleInTitlebar','#lnkOutbound','#tbOneWayLegsOut','#flexiblePanel','#flexiblePanel2','#InboundTable','#divInboundResults','#tblInboundFoot'],
	onshow:onShowFlexible,
	sorters:{
		outbound:{value:'href2Sort0',airline:'href2Sort1',depart:'href2Sort3',arrive:'href2Sort4',stops:'href2Sort5',operator:'href2Sort2',img:'sort2Img'},
		inbound:{value:'href3Sort0',airline:'href3Sort1',depart:'href3Sort3',arrive:'href3Sort4',stops:'href3Sort5',operator:'href3Sort2',img:'sort3Img'}
	},
	outboundMgr:{
		resultsElement:'#tbOneWayLegsOut',
		resultsCount:'#resultsCounts',
		pagingElement:'#spanPages',
		transportRow:'#transportRow',
		filterRow:'#rowOutbound',
		pagesize:10,
		pageSizeSelect:'PageCountSize',
		xmlRequest:new ajaxRequester(),
		ajaxUrl:flexUrl,
		chart:new BarChart('flexibleLegsView.outboundMgr','flexChart1','graphMonthLabel','graphPrevMonthImg'),
		way:1,
		filters:{depAirports:'airportsDep',destAirports:'airportsDest',operators:'operatorsFilter'},
		sliders:{depTime:{id:'#deptime',min:'mindeptime',max:'maxdeptime',minlabel:'#depStartTime',maxlabel:'#depEndTime'}},
		sorter:new sortManager('sort2Img')
	},
	inboundMgr:{
		resultsElement:'#tbOneWayLegsIn',
		resultsCount:'#resultsCountsIn',
		pagingElement:'#spanInboundPages',
		transportRow:'#transportInboundRow',
		filterRow:'#tblInbound',
		pagesize:10,
		pageSizeSelect:'InboundPageCountSize',
		xmlRequest:new ajaxRequester(),
		ajaxUrl:flexUrl,
		way:1,
		chart:new BarChart('flexibleLegsView.inboundMgr','flexChart2','graphMonthLabel2','graphPrevMonthImg2'),
		filters:{depAirports:'airportsDepIn',destAirports:'airportsDestIn',operators:'operatorsInboundFilter'},
		sliders:{depTime:{id:'#deptimein',min:'mindeptimein',max:'maxdeptimein',minlabel:'#indepStartTime',maxlabel:'#indepEndTime'}}
	}
});
viewMgr.addView(flexibleLegsView);

var mapView = new mapPageView({
	id:views.MAP,
	tab:'#tabMap',
	panels:['#timeRetFilter','#flexibleHeader','#flexibleResultsHeader','#mapTitlebar','#dateFilterRow','#progressiveResults','#pnlMap','#mapNav','#airlineRow'],
	sorters:{outbound:{value:'href2Sort0',airline:'href2Sort1',depart:'href2Sort3',arrive:'href2Sort4',stops:'href2Sort5',operator:'href2Sort2',img:'sort2Img'}},
	onshow:onShowMap,
	isGrouped:searchSettings.useGrouping,
	useView:defaultView,
	map:new mapManager({id:'mapDiv',useLoader:true}),
	accessor:'mapView',
	renderOverride:renderMapResults,
	onEndpointChanged:onMapEndpointChanged
});
viewMgr.addView(mapView);

var makeTimeSlider = function(id, minlabel, maxlabel){
	$(id).slider({
		min:0,
		max:24,
		steps:24,
		range:true,
		slide:function(e,ui){ 
			var elem = $(this);
			var minval = parseInt(elem.slider('value',0),10);
			var maxval = parseInt(elem.slider('value',1),10);
			$(minlabel).html((minval < 10 ? '0' + minval.toString() : minval.toString())+':00');
			$(maxlabel).html((maxval < 10 ? '0' + maxval.toString() : maxval.toString())+':00');
		},
		change:function(e,ui){ 
			var hnd = ui.handle["0"];
			viewMgr.timesChanged(this.id, hnd.id, ui.value);
		}
	});
}

$(window).bind("load",function(){
	makeTimeSlider('#deptime','#depStartTime','#depEndTime');
	makeTimeSlider('#rettime','#retStartTime','#retEndTime');
	makeTimeSlider('#deptimein','#indepStartTime','#indepEndTime');
	viewMgr.refreshSliders();
});

var pageManager = {
	unfinishedElem:'resultsWaiting',
	searchingElem:'SearchingTbl',
	filterElem:'RefineSearch',
	otherAirlinesElem:'otherAirlines',
	otherAgentsElem:'otherOperators',
	operators:new Object(),
	inprogress:new Array(),
	finished:new Object(),
	searchFinished:false,
	waitingVisible:true,
	hasFlexibleReturns:false,
	hasFlexibleOneways:false,
	addOperators: function(ops){
		var len = ops.length;
		for(var i = len; i--;){
			var op = ops[i];
			if(!this.operators[op.opid]){
				op.hasFlights = false;
				op.isFinished = false;
				this.operators[op.opid] = op;
				this.inprogress.push(op.opid);
			}
		}
		this.renderSearching();
	},
	endOperator: function(opid){
		var len = this.inprogress.length;
		for(var i = 0; i < len; i++){
			if(this.inprogress[i] == opid){
				this.inprogress.splice(i, 1);
				this.setOperatorFinished(this.operators[opid]);
				this.renderSearching();
				return;
			}
		}
		this.renderSearching();
	},
	setOperatorHasFlights: function(opid){
		if(this.operators[opid]){
			this.operators[opid].hasFlights = true;
		}
	},
	setOperatorFinished: function(op){
		op.isFinished = true;
		if(!this.finished[op.opid]){
			this.finished[op.opid] = op;
			this.appendOtherOperator(op);
			this.updateInProgress();
		}
	},
	appendOtherOperator: function(op){
		if(!op || op.hasFlights || !this.isAirline(op.type)){ return; }
		var el = getElement(this.otherAirlinesElem);
		if(el){
			var html = '<div class="OtherOperator"><a href="' + op.link + '" target="_blank">' +
				'<img src="' + IMG_ROOT + 'i/operator/' + op.logo + '" alt="' + op.name + '" onError="hideElement(this)" border=0></a><br>' +
				'<a class="GreenLink" href="' + op.link + '" target="_blank">' + op.name + '</a></div>';
			el.innerHTML += html;
			var tblOtherOps = getElement('tblOtherAirlines');
			if(tblOtherOps){ tblOtherOps.style.display = ''; }
		}
	},
	addOnlineAgent: function(op){
		var el = getElement(this.otherAgentsElem);
		if(el){
			var html = '<div class="OtherOperator"><a href="' + op.link + '" target="_blank">' +
				'<img src="' + IMG_ROOT + 'i/operator/btn/' + op.logo + '" alt="' + op.name + '" onError="hideElement(this)" border=0></a><br>' +
				'<a class="GreenLink" href="' + op.link + '" target="_blank">' + op.name + '</a></div>';
			if(op.tracker){ html += '<div style="display:none">' + op.tracker + '</div>'; }
			el.innerHTML += html;
			var tblOtherOps = getElement('tblOtherOperators');
			if(tblOtherOps){ tblOtherOps.style.display = ''; }
		}
	},
	renderSearching: function(){
		var html = '';
		for(var prop in this.operators){
			var op = this.operators[prop];
			if(!op){ continue; }
			if(op.isFinished){
				if(op.hasFlights){
					html += '<div class=SearchedOperator>' + op.name + '</div>';
				}
			}
			else{
				html += '<div class=SearchingOperator>' + op.name + '</div>';
			}
		}
		var el = getElement('SearchedOps');
		if(el){ el.innerHTML = html; }
	},
	updateInProgress: function(){
		var count = this.inprogress.length;
		var elUnfinished = getElement(this.unfinishedElem);
		if(count > 0 && elUnfinished){
			var txt = TXT_MORE_RESULTS.replace('%1', '<b>' + count + '</b>')
			elUnfinished.innerHTML = txt;
		}
		else if(elUnfinished){ elUnfinished.style.display = 'none'; }
	},
	endSearching: function(){
		var elSearching = getElement(this.searchingElem);
		var elFilter = getElement(this.filterElem);
		this.updateInProgress();
		if(elSearching){ elSearching.style.display = 'none'; }
		if(elFilter){ elFilter.style.display = ''; }
		this.hideWaiting();
		viewMgr.refreshSliders();
	},
	endSearch: function(){
		this.searchFinished = true;
		searchSettings.searchFinished = true;
		this.endSearching();
		var elUnfinished = getElement(this.unfinishedElem);
		var elMapTab = getElement('tabMap');
		if(elUnfinished){ elUnfinished.style.display = 'none'; }
		if(elMapTab){ elMapTab.style.display = ''; }
		LogSearch(viewMgr.getResultsCount(views.DEFAULT));
		this.hideWaiting();
		viewMgr.refresh();
	},
	hideWaiting: function(){
		var waitFrame, waitElem;
		if(this.waitingVisible){
			if(WAITING_ELEM && WAITING_ELEM.length > 0){ waitElem = getElement(WAITING_ELEM); }
			if(waitElem){
				waitElem.style.display = 'none';
				waitElem.parentNode.removeChild(waitElem);
			}
			if(WAITING_FRAME && WAITING_FRAME.length > 0){ waitFrame = getElement(WAITING_FRAME); }
			if(waitFrame){
				waitFrame.style.display = 'none';
				waitFrame.parentNode.removeChild(waitFrame);
			}
		}
		this.waitingVisible = false;
	},
	showLoadingScreen: function(visible){
		if(visible && this.searchFinished){ LoadingScreen.show(); }
		else{ LoadingScreen.hide(); }
	},
	isAirline: function(type){
		switch(type){
			case optype.ONLINE_TRAVEL_AGENT:
				return false;
			case optype.TRAINS:
				return false;
			case optype.BUSES:
				return false;
			case optype.FERRIES:
				return false;
			case optype.OTHER:
				return false;
			default:
				return true;
		}
	},
	setFlexible: function(hasReturn, hasOneway){
		this.hasFlexibleReturns = hasReturn;
		this.hasFlexibleOneways = hasOneway;

		if(getElement('tabFlexible')){
			getElement('tabFlexible').style.display = (this.hasFlexibleReturns ? '' : 'none');
			if(getElement('flexLegsLink'))
				getElement('flexLegsLink').style.display = (this.hasFlexibleOneways ? '' : 'none');
		}
	},
	stopSearch: function(){
		try
		{
			if(window.stop){ window.stop(); }
			else{ document.execCommand('Stop'); }
		}
		catch(e){}
		this.endSearch();
	},
	toggleFilter: function(inbound, img){
		var visible = viewMgr.toggleFilter(inbound);
		var targetImg = getElement(img);
		if(targetImg && visible != null){ targetImg.src = (visible ? imgMinus : imgPlus); }

	}
};

var URI = function(url) {
	this.Url = "";
	this.TLD = "";
	this.DomainName = "";
	this.SubDomain = null;
	try{
		if(url.match(new RegExp(/^http\:\/\/|^https\:\/\/|^ftp\:\/[\/]/i))){
			url = url.replace(new RegExp(/^http\:\/\/|^https\:\/\/|^ftp\:\/[\/]/i), "");
		}
		url = url.replace(new RegExp(/\/(.*)/),""); 
		this.Url = trim(url);

		if(url.match(new RegExp(/\.[a-z]{2,3}\.[a-z]{2}$/i))){
			this.TLD = url.match(new RegExp(/\.[a-z]{2,3}\.[a-z]{2}$/i))[0];
			url = url.replace(this.TLD, ""); 
		}
		else if(url.match(new RegExp(/\.[a-z]{2,4}$/i))){
			this.TLD = url.match(new RegExp(/\.[a-z]{2,4}$/i))[0];
			url = url.replace(this.TLD, ""); 
		}

		if(url.indexOf(".") != -1){
			var ixDot = url.indexOf(".");
			this.DomainName = url.substr(ixDot+1);
			this.SubDomain = url.substr(0,ixDot);
		}
		else{ this.DomainName = url; }
	}
	catch(e){}
};

var cookieManager = {
	writeCookie: function(aptdep, aptdest, outdate, retdate, adults, childs, infants, fly, tra, fer, bus){
		if(aptdep == '' || aptdest == '' || aptdep == aptdest || outdate == ''){ return; }
		try
		{
			var cookieVal, data;
			data =  'DEP=' + aptdep;
			data += '&DEST=' + aptdest;
			data += '&OUT=' + outdate;
			
			data += '&ADU=' + adults;
			data += '&CHI=' + childs;
			data += '&INF=' + infants;
			data += '&FLI=' + fly;
			data += '&TRA=' + tra;
			data += '&FER=' + fer;
			data += '&BUS=' + bus;

			if(retdate){ data += '&RET=' + retdate; }

			var cheapestItem = defaultView.getCheapestItem();
			cookieVal = data;
			cookieVal += '&PRICE=' + (cheapestItem ? (cheapestItem.opvalue ? cheapestItem.opvalue : cheapestItem.value) : '');
			cookieVal += '&CURRENCY=' + (cheapestItem ? (cheapestItem.opvalue ? cheapestItem.opcurrency : cheapestItem.currency) : '');

			var arr = new Array();
			arr.push(cookieVal);

			// Read Previous Search cookies
			for(var i = 1; i <= 5; i++){
				var ps = this.getCookie('PS' + (i));
				if(ps){
					var end = ps.indexOf('&PRICE');
					var itemData = ps.substring(0, end);
					if(itemData != data){ arr.push(ps); }
				}
			}

			var len = (arr.length <= 5 ? arr.length : 5)
			
			var docUri = new URI(document.domain);
			var host = null;
			if(docUri.DomainName.length > 0 && docUri.TLD.length > 0){ host = docUri.DomainName + docUri.TLD; }

			// Write Previous Search cookies
			for(var i = 0; i < len; i++){
				var datestr = this.getValue(arr[i], 'OUT');
				var dt = Date.parseDate(outdate, 'yyyy/MM/dd');
				dt.setDate(dt.getDate() + 1);
				this.setCookie('PS' + (i+1), arr[i], dt, '/', host);
			}
		}
		catch(e){}
	},
	setCookie: function(name, value, expires, path, domain, secure){
		try{
			document.cookie = name + '=' + value +
				(expires ? '; expires=' + expires.toGMTString() : '') +
				(path ? '; path=' + path : '') +
				(domain ? '; domain=' + domain : '') +
				(secure ? '; secure' : '');
		}catch(e){}
	},
	getCookie: function(name){
		var arg = name + '[\=]([^\;]*)?';
		var re = new RegExp(arg);
		var m = re.exec(document.cookie);

		if(m == null) return m;
		else return m[1];
	},
	getValue: function(text, name){
		var arg = name + '[\=]([^\;|^\&]*)?';
		var re = new RegExp(arg);
		var m = re.exec(text);

		if(m == null) return m;
		else return m[1];
	}
};

var pageResultsAdded = function(result){
	if(result && result.flights && result.flights.length > 0){
		pageManager.setOperatorHasFlights(result.operator.opid);
	}
};
viewMgr.attachEvents({onResultsAdded:pageResultsAdded});