/* EuropeBookings autocomplete 
Dinos 2008 */

function addEvent(obj, evType, fn) { 
	if (obj.addEventListener) { 
		obj.addEventListener(evType, fn, false); 
		return true; 
	} else if (obj.attachEvent) { 
		var r = obj.attachEvent("on"+evType, fn); 
		return r; 
	} else { 
		return false; 
	} 
}


function stripHTML(oldString) {
	return oldString.replace(/<(?:.|\s)*?>/g, "");
}


function getPosition(e) {
	var left = 0;
	var top  = 0;
	while (e.offsetParent){
		left += e.offsetLeft;
		top  += e.offsetTop;
		e     = e.offsetParent;
	}
	left += e.offsetLeft;
	top  += e.offsetTop;
	return {x:left, y:top};
}


function autocomp_show( state ) {
	document.getElementById(search_out).style.visibility = (state) ? 'visible' : 'hidden';
}


function autocomp_bg(i) {
	return ( i % 2  == 0 ) ? '#ffffff' : '#f8f8f8';
}


function autocomp_nav(e) {
	if (!e) var e = window.event;
	if (document.getElementById(search_out).style.visibility == 'visible' ) {
		switch(e.keyCode) {
			case 38:
				autocomp_hi(autocomp_sel-1);
				if(e.preventDefault) e.preventDefault();
				return false;
				break;
			case 40:
				autocomp_hi(autocomp_sel+1);
				if(e.preventDefault) e.preventDefault();
				return false;
				break;
			case 13:
				autocomp_enter(e);
				if (e.preventDefault) e.preventDefault();
				return false;
				break;
			case 27:
				autocomp_show(false);
				return true;
				break;
			default:
				return true;
				break;
		}
	}
}


function autocomp_m_over(e) {
	if (ie)  { 
		var targ;
		var e = window.event;
		if (e.target) targ = e.target; else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) targ = targ.parentNode;
		i = targ.id.replace('autocomp_li_', '') * 1;
	} else {
		i = this.id.replace('autocomp_li_', '') * 1;
	}
	autocomp_hi(i);
}


function autocomp_hi(i) {
	if ( i < 0 ) { i = max_hi; } else if ( i > max_hi )  { i = 0; }
	document.getElementById("autocomp_li_"+autocomp_sel).style.background = autocomp_bg(autocomp_sel);
	document.getElementById("autocomp_li_"+autocomp_sel).style.color = '#202040';
	document.getElementById("autocomp_li_"+i).style.background = autocomp_hi_col;
	document.getElementById("autocomp_li_"+i).style.color = '#ffffff';
	autocomp_sel = i;
}


function autocomp_enter(e) {
	var tmp_str = document.getElementById("autocomp_li_"+autocomp_sel).innerHTML;
	tmp_str = stripHTML( tmp_str.substr(0, tmp_str.length-11) );
	document.getElementById(search_in).value = tmp_str;
	prev_search =  tmp_str;
	autocomp_show(false);
}


function autocomp() {
	var name = 	document.getElementById(search_in).value;
	if (name.length < 1) {
		autocomp_show(false);
		prev_search = name;
		return;
	}
	if (name == prev_search) return;
	prev_search = name;
	if (window.XMLHttpRequest) { 
		xmlhttp=new XMLHttpRequest()
	} else if (window.ActiveXObject) {
		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
	}
	if (xmlhttp) {
		xmlhttp.open("GET","/search_hotel.php?name="+encodeURIComponent(name),true);
		xmlhttp.onreadystatechange = autocomp_list;
		xmlhttp.send(null);
	}
}


function autocomp_list() {
	if (xmlhttp.readyState == 4) { 
		if (xmlhttp.status == 200) { 
			document.getElementById(search_out).innerHTML = xmlhttp.responseText;
			var i = 0;
			while (e = document.getElementById("autocomp_li_"+i)) {
				e.style.background = autocomp_bg(i);
				addEvent(e, 'mouseover', autocomp_m_over);
				addEvent(e, 'mousedown', autocomp_enter);
				i++;
			}
			if (i > 0) {
				autocomp_sel = 0;
				autocomp_hi(0);
				autocomp_show(true);
				max_hi = i - 1;
			} else {
				autocomp_show(false);
				max_hi = 0 ;
			}
		} 
	} 
}


function autocomp_size() {
	var out_el = document.getElementById(search_out);
	var in_el = document.getElementById(search_in);
	out_el.style.width = in_el.offsetWidth-4 + 'px' ;
	org_pos = getPosition(in_el);
	if (ie) {
		out_el.style.pixelLeft = org_pos.x;
		out_el.style.pixelTop = org_pos.y + in_el.clientHeight + 2;
	} else if (moz) {
		out_el.style.left = org_pos.x+'px';
		out_el.style.top = org_pos.y + in_el.clientHeight + 2 +'px';
	}
}


function autocomp_on() {
	if ( document.getElementById(search_in) ) {
		addEvent(document, 'keydown', autocomp_nav);
		document.getElementById(search_in).autocomplete = "off";
		document.getElementById(div_id).innerHTML = "<div id=search_out ></div>" + document.getElementById(div_id).innerHTML;
		addEvent(document.getElementById(search_in), 'keyup', autocomp);
		addEvent(window, 'resize', autocomp_size);
		addEvent(document.getElementById(search_in), 'click', function() { 
			if ( document.getElementById(search_in).value == autocomp_msg ) { 
				document.getElementById(search_in).value=''; 
			} else if ( document.getElementById(search_in).value != '' ) {
				autocomp_show(true);
			}
			});
		addEvent(document.getElementById(search_in), 'blur', function() {
			if ( document.getElementById(search_in).value == '' ) 
				document.getElementById(search_in).value = autocomp_msg;
				autocomp_show(false);
			});
		document.getElementById(search_in).value = autocomp_msg;
		autocomp_size();
	}
}

var ie = document.all;
var moz = document.getElementById && !document.all; 
var search_out = 'search_out';
var search_in = 'b_destination';
var div_id = 'b_searchDest';
var prev_search = '';
var autocomp_sel = 0;
var autocomp_hi_col = '#007dc3'; 
var autocomp_msg = 'City or Country';
var max_hi = 0;
addEvent(window, 'load', autocomp_on);

