
var compField_Id = "complete-field";
var compDiv_Id = "complete-popup";
var compCityId_Id = "searchbox-cityid";
var compRegionId_Id = "searchbox-regionid";
var compDistrictId_Id = "searchbox-districtid";
var compCountryId_Id = "searchbox-countryid";

var ACP={
	gAnEventsTracking:true,
	req:'',debugMode:false,isIE:0,
	completeField:'',completeDiv:'',completeTable:'',completeCell:'',
	completeCityId:'',completeRegionId:'',completeCountryId:'',completeDistrictId:'',
	lastValue:'',Suggestions:new Array(),activeItemId:-1,flagFader:false,
	init:function(){
		this.completeField = document.getElementById(compField_Id);
		this.completeDiv = document.getElementById(compDiv_Id);
		this.completeDiv.innerHTML = '<table id="complete-table"><tbody><tr><td></td></tr></tbody></table>';
		this.completeCell = this.completeDiv.getElementsByTagName("td")[0];
		this.completeCityId = document.getElementById(compCityId_Id);
		this.completeRegionId = document.getElementById(compRegionId_Id);
		this.completeDistrictId = document.getElementById(compDistrictId_Id);
		this.completeCountryId = document.getElementById(compCountryId_Id);
		this.completeDiv.style.top = this.getElementY(this.completeField) + "px";this.completeDiv.style.left = this.getElementX(this.completeField) + "px";
		this.completeField.onkeydown = function(D){return ACP.handleKeyNav(D||window.event)};
		this.completeField.onkeyup = function(D){return ACP.doCompletion(D)};
		this.completeField.onfocus = function(D){ACP.doCompletion(D||window.event)};
		this.completeField.onblur = ACP.fadeTableOut;
		this.completeField.setAttribute("autocomplete","off");},
	doCompletion:function(evt){
	if(this.completeField.value==''){
		this.clearTable();
		this.completeCityId.value = '0';
		this.completeRegionId.value = '0';
		this.completeDistrictId.value = '0';
	}
	else{
		if(this.completeField.value!=this.lastValue){
			this.clearTable();
			this.completeCityId.value = '0';
			this.completeRegionId.value = '0';
			this.completeDistrictId.value = '0';
			var url = "/hotels/searchbox/autocomplete.php?action=complete&id=" + escape(this.completeField.value)+ "&cc="+ this.completeCountryId.options[this.completeCountryId.selectedIndex].value + '&rnd=' + Math.random();
			this.req = this.initRequest();this.req.open("GET", url, true);this.req.onreadystatechange = this.callback;this.req.send(null);this.lastValue = this.completeField.value;}}},
	initRequest:function(){
    if(window.XMLHttpRequest){return new XMLHttpRequest();
    }else if(window.ActiveXObject){this.isIE = true;return new ActiveXObject("Microsoft.XMLHTTP");}},
	callback:function(){
    if(ACP.req.readyState==4){if(ACP.req.status==200){ACP.parseMessages(ACP.req.responseXML);}}},
	appendHotel:function(Suggestion){
		/*var EntryBox;*/
		var E='';
		E+='<div id="complete-entry-'+ Suggestion.selfIndex +'" class="complete-entry" onmouseover="ACP.rowActivate(this,'+ Suggestion.selfIndex +');" onmouseout="ACP.rowDeactivate(this,'+ Suggestion.selfIndex +');" onmousedown="ACP.useElement('+ Suggestion.selfIndex +')">';
		E+='<strong>' + Suggestion.placeNameBold + '</strong>';
		E+=Suggestion.placeNameRest;
		E+='<div class="complete-entry-info">'+Suggestion.placeType+" ("+Suggestion.hotelsNo+")</div>";
		E+="</div>";
		this.completeCell.innerHTML = this.completeCell.innerHTML + E;
		/*EntryBox = document.getElementById("complete-entry-'+ Suggestion.selfIndex +'");this.Suggestions[Suggestion.selfIndex].rowObj = EntryBox;*/
	},
	getElementY:function(element){var targetTop = 0;if(element.offsetParent){while(element.offsetParent){targetTop+=element.offsetTop;element=element.offsetParent;}}else if(element.y){targetTop+=element.y;}return targetTop + 25;},
	getElementX:function(element){var targetLeft = 0;if(element.offsetParent){while(element.offsetParent){targetLeft+=element.offsetLeft;element=element.offsetParent;}}else if(element.x){targetLeft+=element.x;}return targetLeft;},
	clearTable:function(){
	if(this.flagFader!=0){clearTimeout(this.flagFader);this.flagFader=0;}
	this.completeCell.innerHTML = '';
	this.completeDiv.style.display = 'none';
	this.activeItemId = -1;
	this.Suggestions = new Array();
	},
	parseMessages:function(responseXML){
	// no matches returned
	this.clearTable();
	if(responseXML==null){return false;}
	else{
		var hotels = responseXML.getElementsByTagName("places")[0];
		if( hotels.childNodes.length > 0 ){
			this.completeDiv.style.display = 'block';
			for(var loop = 0; loop < hotels.childNodes.length; loop++){
				var hotel = hotels.childNodes[loop];
				var plName = hotel.getElementsByTagName("placeName")[0].childNodes[0].nodeValue;
				var plType = hotel.getElementsByTagName("placeType")[0].childNodes[0].nodeValue;
				var cnId = hotel.getElementsByTagName("countryCode")[0].childNodes[0].nodeValue;
				var ctId = hotel.getElementsByTagName("cityId")[0].childNodes[0].nodeValue;
				var rgId = hotel.getElementsByTagName("regionId")[0].childNodes[0].nodeValue;
				var dsId = hotel.getElementsByTagName("districtId")[0].childNodes[0].nodeValue;
				var hotNo = hotel.getElementsByTagName("hotelsNo")[0].childNodes[0].nodeValue;
				if( hotel.getElementsByTagName("placeTextB").length>0 && hotel.getElementsByTagName("placeTextB")[0].childNodes.length>0 ){
					var placeTextB = hotel.getElementsByTagName("placeTextB")[0].childNodes[0].nodeValue;
				}else { var placeTextB=''; }
				if( hotel.getElementsByTagName("placeTextN").length>0 && hotel.getElementsByTagName("placeTextN")[0].childNodes.length>0 ){
					var placeTextN = hotel.getElementsByTagName("placeTextN")[0].childNodes[0].nodeValue;
				}else { var placeTextN=''; }
				this.Suggestions[loop]={placeName:plName,
									placeType:plType,
									countryCode:cnId,
									cityId:ctId,
									regionId:rgId,
									districtId:dsId,
									hotelsNo:hotNo,
									placeNameBold:placeTextB,
									placeNameRest:placeTextN,
									selfIndex:loop};
				this.appendHotel(this.Suggestions[loop]);
			}
		}
	}
	return true;},
	useElement:function(id){
		this.completeField.value = this.Suggestions[id].placeName;
		this.completeCountryId.value = this.Suggestions[id].countryCode;
		if( this.Suggestions[id].cityId!='' ) this.completeCityId.value = this.Suggestions[id].cityId;
		if( this.Suggestions[id].regionId!='' ) this.completeRegionId.value = this.Suggestions[id].regionId;
		if( this.Suggestions[id].districtId!='' ) this.completeDistrictId.value = this.Suggestions[id].districtId;
		var placeId = 0;
		if(this.Suggestions[id].placeType=='city'){ placeId = this.Suggestions[id].cityId; }
		else if(this.Suggestions[id].placeType=='region'){ placeId = this.Suggestions[id].regionId; }
		else if(this.Suggestions[id].placeType=='district'){ placeId = this.Suggestions[id].districtId; }
		this.saveUsedElement(placeId,this.Suggestions[id].placeType);
		this.clearTable();
		if( ACP.gAnEventsTracking && typeof(pageTracker)!='undefined' ){
			pageTracker._trackEvent("AutoSuggestions", "Picked", this.completeField.value);}},
	saveUsedElement:function(placeId,typeId){var url = "/hotels/searchbox/saveplace.php?id="+escape(placeId)+"&tid="+escape(typeId)+'&rnd=' + Math.random();var reqS = this.initRequest();reqS.open("GET", url, true);reqS.onreadystatechange = this.callbackNull;reqS.send(null);},
	callbackNull:function(){;},
	rowNextActive:function(){if(this.activeItemId<0){this.Suggestions[0].rowObj.className='complete-entry-selected'; this.activeItemId=0;}else{this.Suggestions[this.activeItemId].rowObj.className='complete-entry';this.activeItemId++;if(this.activeItemId == this.Suggestions.length){this.activeItemId = 0;}this.Suggestions[this.activeItemId].rowObj.className='complete-entry-selected';}},
	rowPrevActive:function(){if(this.activeItemId<0){this.activeItemId = this.Suggestions.length-1;this.Suggestions[this.activeItemId].rowObj.className='complete-entry-selected';}else{this.Suggestions[this.activeItemId].rowObj.className='complete-entry';this.activeItemId--;if( this.activeItemId < 0 ){this.activeItemId = this.Suggestions.length-1;}this.Suggestions[this.activeItemId].rowObj.className='complete-entry-selected';}},
	rowActivate:function(row,id){row.className = 'complete-entry-selected';this.activeItemId = id;},
	rowDeactivate:function(row,id){row.className = 'complete-entry';if(this.activeItemId==id) this.activeItemId=-1;},
	fadeTableOut:function(){this.flagFader = setTimeout('ACP.clearTable()',300);},
	handleKeyNav:function(A,B){
		/*if(gClientIsIE5){return true}*/
		if(A.keyCode){
			switch(A.keyCode){
				case 13:
					if(B){return false}
					if(this.activeItemId>=0){this.useElement(this.activeItemId);this.completeField.blur();}
					return false;
					break;
				case 27:
					this.clearTable();
					break;
				case 38:
					/*this.rowPrevActive();*/
					break;
				case 40:
					/*this.rowNextActive();*/
					break;
				default:return true
			}
		}
	}
};



