/*
*	Create our own Ajax class and override the recieving method
*/
var AjaxCustom = Class.create();
AjaxCustom.prototype = (new Rico.AjaxEngine()).extend( {
   _processAjaxElementUpdate: function( ajaxElement, responseElement ) {
		responseStr=RicoUtil.getContentAsString(responseElement);
		//If no pending searches close the SearchMessage

		//Skapa en konstgjord div
		var element = document.createElement('div');
		element.innerHTML=responseStr;
		var divs = element.getElementsByTagName('div');
		var arr = new Array();
		var arrIndex=0;
		for ( var i = 0 ; i < divs.length ; i++ ){
			if(divs[i].id.search('flightInfo')<0){
				arr[arrIndex]=new Array(divs[i].id,divs[i].innerHTML);
				//alert('from server='+divs[i].innerHTML);
				arrIndex++;
			} 
		}
		//Clear the hash values for this response
		
		var hash = element.getElementsByTagName('span')[0].innerHTML;
		responses[hash][0]=-1;
		if(messageCanBeClosed())closeSearchMessage();
		
		//Titta vad som finns i displayArea separera inte bort flightInfo
		divs = document.getElementById('displayArea').getElementsByTagName('div');
		for ( var i = 0 ; i < divs.length ; i++ ){
			if(divs[i].id.search('flightInfo')<0){
				arr[arrIndex]=new Array(divs[i].id,divs[i].innerHTML);
				//alert("from page='"+divs[i].innerHTML);
				arrIndex++;
			}
		}
		
		//Sortera
		var position=-1;
		for ( var i = 0 ; i < arr.length ; i++ ){
			position=i;
			for(var j=i;j<arr.length;j++){
				if(parseInt(arr[j][0])<parseInt(arr[position][0]))position=j;
			}
			slask = arr[i];
			arr[i]=arr[position];
			arr[position]=slask;
		}
		var allDivs = "";
		for ( var i = 0 ; i < arr.length ; i++ ){
			allDivs+="<div id='"+arr[i][0]+"' class='ticketRow'>"+arr[i][1]+"</div>";
		}
		//Show the main info about the flight
		var from_city = document.getElementById('from_city').value;
		var to_city = document.getElementById('to_city').value;
		var depart_month = document.getElementById('depart_month').options[document.getElementById('depart_month').selectedIndex].value;
		var depart_day = document.getElementById('depart_day').options[document.getElementById('depart_day').selectedIndex].value;
		var return_month = document.getElementById('return_month').options[document.getElementById('return_month').selectedIndex].value;
		var return_day = document.getElementById('return_day').options[document.getElementById('return_day').selectedIndex].value;
		var adults = document.getElementById('adults').options[document.getElementById('adults').selectedIndex].value;
		var children = document.getElementById('children').options[document.getElementById('children').selectedIndex].value;
		var oneway = document.getElementById('oneway').checked;
		var header = "<h3>"+from_city;
		header +=" - "+to_city;
		header +=" "+depart_month+"-"+((depart_day<10)?"0"+depart_day:depart_day);
		if(!oneway)header +=" - "+return_month+"-"+((return_day<10)?"0"+return_day:return_day);
		header +="  "+adults+" pers";
		if(children>0)header+="  "+children+" barn";
		header+="</h3><strong>Alla priser är inkl skatt+avg</strong>";
		document.getElementById('displayHeaderArea').innerHTML=header;
		//alert(allDivs);
		ajaxElement.innerHTML = allDivs;
	}
});
var customEngine = new AjaxCustom();
var requestSent=false;
/*
*	The method that validates the form
*	@ad_name		the company that the search will be made at
*	@state				live/debug
*/
function search(ad_name,ad_id,state){
	var searchArr = new Array(new Array("Doodle",2),new Array("Flygstolen",3),new Array("Resfeber",8));
	//var searchArr = new Array(new Array("Flygstolen",3));
	var object_id = document.getElementById('object_id').value;
	var from_city = document.getElementById('from_city').value;
	var from_code = document.getElementById('from_code').value;
	var depart_month = document.getElementById('depart_month').options[document.getElementById('depart_month').selectedIndex].value;
	var depart_day = document.getElementById('depart_day').options[document.getElementById('depart_day').selectedIndex].value;
	var to_city = document.getElementById('to_city').value;
	var to_code = document.getElementById('to_code').value;
	var return_month = document.getElementById('return_month').options[document.getElementById('return_month').selectedIndex].value;
	var return_day = document.getElementById('return_day').options[document.getElementById('return_day').selectedIndex].value;
	var adults = document.getElementById('adults').options[document.getElementById('adults').selectedIndex].value;
	var children = document.getElementById('children').options[document.getElementById('children').selectedIndex].value;
	var oneway="";
	if(document.getElementById('oneway').checked)oneway="true";
	//alert(oneway);
	//Check the different searching parameters
	var OK = true;
	var message= new String();
	if(!dateOk()){
		message="- Hemresans datum måste vara efter avresans datum.";
		OK=false;
	}
	//Check that all the childages are set if children>0
	if(!childrenAreOk()){
		if(message!="")message+="\n";
		message+="- Du har inte angivit åldern på ett eller flera barn.";
		OK=false;
	}
	//Check that from_city is set
	if(from_city==""){
		if(message!="")message+="\n";
		message+="- Du har inte valt var du vill åka ifrån.";
		OK=false;
	}
	//Check that to_city is set
	if(to_city==""){
		if(message!="")message+="\n";
		message+="- Du har inte valt var du vill åka till.";
		OK=false;
	}
	
	//Check that from_city exists
	if(from_code=="" && from_city!=""){
		if(message!="")message+="\n";
		message+="- Staden du vill åka ifrån hittades inte.";
		OK=false;
	}
	//Check that to_city is set and OK
	if(to_code=="" && to_city!=""){
		if(message!="")message+="\n";
		message+="- Staden du vill åka till hittades inte.";
		OK=false;
	}
	
	
	//If all parameters are OK
	if(OK){
		if(arguments[3]==null){
			//Erease the content in the displaying Div
			document.getElementById('displayHeaderArea').innerHTML="";
			document.getElementById("displayArea").innerHTML="";
		}
		
		var childAges = getChildAges();
		if(state=="live"){
			
			var hash="";
			/*
			*	If the fourth arg is null then the caller is the search button
			*/
			if(arguments[3]==null){
				//First time send all the searches
				for(var i=0;i<searchArr.length;i++){
					hash=getHash()+""+i;
					responses[hash] = new Array(0,searchArr[i][0],searchArr[i][1],state);
					sendSearch(object_id, hash, searchArr[i][0], searchArr[i][1],from_code, from_city, depart_month,depart_day, to_city,to_code, to_city, return_month, return_day,adults, children, childAges, oneway);
					//set a 30 sec delay for this search
					setTimeout("responseCheck('"+hash+"')",30000);
				}
				displaySearchMessage("Partners");
				
			}else{
				//Not the first time and the caller is responseCheck
				hash=arguments[3];
				responses[hash][0]++;//increase the search counter;
				//Send this search again				
				sendSearch(object_id, hash, ad_name, ad_id,from_code, from_city, depart_month,depart_day, to_city,to_code, to_city, return_month, return_day,adults, children, childAges, oneway);
			}
			
		}else if(state=="debug"){
			var param = 'hash='+hash+'&ad_name='+ad_name+'&ad_id='+ad_id+'&';
			param+='from_code='+from_code+'&from_city='+from_city+'&depart_month='+depart_month+'&depart_day='+depart_day+"&";
			param+='to_code='+to_code+'&to_city='+to_city+'&return_month='+return_month+'&return_day='+return_day+"&";
			param+='adults='+adults+'&children='+children+"&"+childAges+"&oneway="+oneway;
			document.location.href="http://www.top.se/_resor/crawl/engine.php?"+param;
		}
	}else alert(message);
}

/*
*	Sends the actual search
*/
function sendSearch(object_id, hash, ad_name, ad_id,from_code, from_city, depart_month,depart_day, to_city,to_code, to_city, return_month, return_day,adults, children, childAges, oneway){
	if(responses[hash][0]>-1 && responses[hash][0]<2){
		//document.write('searchWorld'+'&object_id='+object_id+'&hash='+hash+'&ad_name='+ad_name+'&ad_id='+ad_id+'from_code='+from_code+'&from_city='+from_city+'&depart_month='+depart_month+'&depart_day='+depart_day,'to_code='+to_code+'&to_city='+to_city+'&return_month='+return_month+'&return_day='+return_day,'adults='+adults+'&children='+children,childAges+'&oneway='+oneway);
		//Display a search message all over the screen
		customEngine.sendRequest('searchWorld','object_id='+object_id,'hash='+hash,'ad_name='+ad_name,'ad_id='+ad_id,'from_code='+from_code,'from_city='+from_city,'depart_month='+depart_month,'depart_day='+depart_day,'to_code='+to_code,'to_city='+to_city,'return_month='+return_month,'return_day='+return_day,'adults='+adults,'children='+children,childAges,'oneway='+oneway);
		
	}else if(responses[hash][0]>-1){ 
		//The search is sent 2 times now giv it up
		//Also check if there is any pending search still up
		
		//If no pending searches close the SearchMessage
		if(messageCanBeClosed())closeSearchMessage();
		document.getElementById("displayArea").innerHTML="<div id='-1'>Inga resultat från "+responses[hash][1]+"</div>"+document.getElementById("displayArea").innerHTML;
	}
	
}

/*
*	Can searchmessage be closed
*/
function messageCanBeClosed(){
	var pendingSearches=false;
	for(key in responses){
		//Is this search still pending
		if(responses[key][0]>-1 && responses[key][0]<2)pendingSearches=true;
	}
	return !pendingSearches;
}
customEngine.registerRequest('searchWorld','http://www.top.se/_resor/search/ticket/engine.php');
var responses = new Array();
/*
*	Checks if a response has come
*/
//function responseCheck(ad_name,ad_id,state){
function responseCheck(hash){
	//If the response is already has arrived don't send again
	//If it has arrived the search counter is set to -1
	if(responses[hash][0]>=0){
		//setMessage("<h1>New search is sent with "+responses[hash][1]+"</h1>");
		//alert(hash+" search count='"+responses[hash][0]+"'");
		search(responses[hash][1],responses[hash][2],responses[hash][3],hash);
	}
}

/*
*	Gets a hashvalue
*/
function getHash(){
		var pool = "abcdefghijklmnopqrstuvxyz123456789";
		var hash="";
		for(var i=0;i<30;i++){
			hash+=pool.charAt(Math.round(pool.length*Math.random()));
		}
		return hash;
}
/*
*	Check that depart is pre return
*/
function dateOk(){
	//depart
	var fullDepartDate = document.getElementById("depart_month").options[document.getElementById("depart_month").selectedIndex].value;
	var departYear = fullDepartDate.substring(0,4);
	var departMonth = fullDepartDate.substring(5);
	var departDay = document.getElementById("depart_day").options[document.getElementById("depart_day").selectedIndex].value;
	if(departDay.length<2)departDay="0"+departDay;
	
	//return
	var fullReturnDate = document.getElementById("return_month").options[document.getElementById("return_month").selectedIndex].value;
	var returnYear = fullReturnDate.substring(0,4);
	var returnMonth = fullReturnDate.substring(5);
	var returnDay = document.getElementById("return_day").options[document.getElementById("return_day").selectedIndex].value;
	if(returnDay.length<2)returnDay="0"+returnDay;
	
	var departDate = parseInt(departYear+departMonth+departDay);
	var returnDate = parseInt(returnYear+returnMonth+returnDay);
	return (departDate<returnDate);
}

/*
*	Method for checking that all the childages are set, if children>0
*/
function childrenAreOk(){
	var children = document.getElementById('children');
	var count = children.options[children.selectedIndex].value;		
	for (var i = 0; i < count; i++) {
		if (document.getElementById('child'+i).getElementsByTagName('select')[0].selectedIndex==0)return false;
	}

	return true;
}

/*
*	Get all the childages as an array (child_ages=0¤4¤5¤)
*/
function getChildAges(){
	var children = document.getElementById('children');
	var count = children.options[children.selectedIndex].value;	
	var arr = new Array(count);
	var str="child_ages=";	
	for (var i = 0; i <count; i++) {
		index = document.getElementById('child'+i).getElementsByTagName('select')[0].selectedIndex;
		value=document.getElementById('child'+i).getElementsByTagName('select')[0].options[index].value;
		str+=value+"¤";
	}
	return str;
}

/*
*	Update the amount of childage select when the children select is changed
*/
function toggleChildren() {
	var children = document.getElementById('children');
	if (children != null && children.options != null) {
		var count = children.options[children.selectedIndex].value;		
		for (var i = 1; i <= 8; i++) {
			if (count >= i) {
				document.getElementById('child' + (i-1)).style.display="";
			} else {
				document.getElementById('child' + (i-1)).style.display="none";
			}
		}
	}
}

/*
*	If the search engine returns multiple choices of from_city/to_city
*/
function chooseCityAndSubmit(way,city,ad_name,ad_id){
	document.getElementById(way+"_city").value=city;
	search(ad_name,ad_id,"live");
}

/*
*	Update the depart_day/return_day, set the right amount of days in month, 
*	when the depart_month/return_month is changed
*/
function updateDaySelect(way){
	var fullDate = document.getElementById(way+"_month").options[document.getElementById(way+"_month").selectedIndex].value;
	var year = fullDate.substring(0,4);
	
	var month = fullDate.substring(5);
	if(month.substring(0,1)=='0')month=month.substring(1);
	
	var dd = new Date(year, month, 0);
	var day = document.getElementById(way+"_day");
	//Ta reda på vilket som är valt nu
	var selectedDayIndex = day.selectedIndex;
	
	//Ta bort alla options
	day.options.length = 0;
	for(var i=1;i<=dd.getDate();i++){
		day.options[i-1]=new Option(((i<10)?"0"+i:i), i, false, false);

	}
	//Om det finns minst lika många options som det tidigare selectedIndex så sätt samma selected index
	//annars sätt den sist
	if(day.options.length>=selectedDayIndex)day.selectedIndex=selectedDayIndex;
	else day.selectedIndex=day.options.length-1;
}

/*
*	Autosuggestion
*/
function suggestAirport(way){
	var suggestionDiv = document.getElementById(way+"_suggestion");
	//Empty suggestion div
	suggestionDiv.innerHTML="";
	//Empty the code 
	document.getElementById(way+"_code").value="";
	var token = document.getElementById(way+"_city").value.toLowerCase();
	var regExp = eval("/^"+token+"/i");
	var airportCode="";;
	if(token.length>1){
		var arr = new Array();
		var suggestions=0;
		for(var i=0;i<dest.length;i++){
				//Countrylevel
				var country = "";
				for(var j=0;j<dest[i].length;j++){
					if(j==0){
						country=dest[i][0][2];//Ja det bör vara j men också bör det vara 0
					}
					if(dest[i][j][0].match(regExp) && dest[i][j][0].toLowerCase()!=token){
						//arr[suggestions++]=dest[i][j][0];
						if(suggestionDiv.innerHTML!="")suggestionDiv.innerHTML+="<br />";
						suggestionDiv.innerHTML+="<a href=\"javascript:chooseCity('"+way+"','"+dest[i][j][0]+"','"+dest[i][j][1]+"')\">"+dest[i][j][0]+" ("+country+")</a>";
					}
					if(dest[i][j][0].toLowerCase()==token)airportCode=dest[i][j][1];
				}
		}
	}
	//Set checkmark and airportcode
	setStatus(way,airportCode);
	
	if(suggestionDiv.innerHTML!="")suggestionDiv.style.display="";
	else suggestionDiv.style.display="none";
}

/*
*	Set checkmark and airportcode
*/
function setStatus(way,code){
	if(code!=""){
		var tokens = code.split("_");
		var airportCode = tokens[0];
		document.getElementById(way+"_code").value=airportCode;
		document.getElementById(way+"_check").innerHTML="<img src='/_resor/images/check_ok_20_17.gif' />";
	}else document.getElementById(way+"_check").innerHTML="<img src='/_resor/images/check_no_20_17.gif' />";
	
}

/*
*	Choose a suggestion
*	@way 			from/to
*	@city			city
*	@code			CPH_DK		airport_country
*/
function chooseCity(way,city,code){
		//Set checkmark and airportcode
		setStatus(way,code);
		//Set the chosen city
		document.getElementById(way+"_city").value=city;
		//A city is chosen empty the suggestion div
		document.getElementById(way+"_suggestion").style.display="none";
}

/*
*	Show/Hide more info about a flight
*/
function flightInfo(id){
	var element = document.getElementById('flightInfo'+id);
	if(element.style.display=="")element.style.display="none";
	else element.style.display="";
}

/*
*	Show/Hide return dates - oneway
*/
function toggleReturnDates(){
		if(document.getElementById('td_return_month').style.display==""){
			document.getElementById('td_return_month').style.display="none";
			document.getElementById('td_return_day').style.display="none";
		}else{
			document.getElementById('td_return_month').style.display="";
			document.getElementById('td_return_day').style.display="";
		}
}