<!--
/**********************************************************************************
CHANGES FROM WBE VERSION OF THIS FILE:
09.18.2006	JDW		getData() replaced to retrieve data via proxy fetch 
10.17.2007	JDW		SmartLogic_OptionsDIV.children[j].style.width = "auto";
					(was "100%" in WBE version)
10.19.2007 	JDW		added validateCityWrapper function and document.onclick in lieu 
					of adding onclick event to body tag of all pages containing the 
					find a hotel module (200+ pages)
NOTE: 	always compare Find a Hotel city input events to WBE advanced search city
		input events for any changes when new version of this file is delivered 
		from WBE.  
**********************************************************************************/
var req;var dataFetched = false;var lastCityFetched = '';var form = document.selectHotelForm;var MAX_ITEM_TO_SHOW = 0;var MAX_ITEM_TO_SHOW_IN_SCROLL = 0;var strToPost = "";var ajaxDIVOpen = false;var baseurl = document.location.host;var messagetofetch;
function noenter(e) {if (ajaxDIVOpen){return !(window.event && window.event.keyCode == 13); } else {if(e.keyCode == 13 && document.getElementById(UserControlContainer + 'txtLocationName').value != ''){validate();}}}
function removeHTMLTags(strInputCode){strInputCode = strInputCode.replace(/&(lt|gt);/g, function (strMatch, p1){return (p1 == "lt")? "<" : ">";});return strInputCode.replace(/<\/?[^>]+(>|$)/g, "");}
function getData(input){strToPost = input; if(strToPost.length > 2){if (window.XMLHttpRequest) {req = new XMLHttpRequest();} else if (window.ActiveXObject) {req = new ActiveXObject("Microsoft.XMLHTTP");}req.open('GET', 'http://'+baseurl+'/AjaxServices/SmartSearch.aspx?LanguageCode='+LanguageCode+'&First3Chars='+strToPost);req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');req.onreadystatechange = callback;req.send('LanguageCode='+LanguageCode+'&First3Chars='+strToPost);}}
function callback() {if (req.readyState == 4) {dataFetched = true;if (req.status == 200 || req.status == 304) {parseMessage();}}}
var hotelSearchControl_hotelSmartLogicTextBox_Cities = new CityList_City("", "", "", "", "");
function parseMessage() {messagetofetch = removeHTMLTags(req.responseText);var cityInResponse = messagetofetch.substring(messagetofetch.indexOf('|')+1,messagetofetch.indexOf('|')+4).toUpperCase();var currCityInput = strToPost.substring(0,3).toUpperCase();if(cityInResponse == currCityInput){hotelSearchControl_hotelSmartLogicTextBox_Cities = messagetofetch.split("$");MAX_ITEM_TO_SHOW =  hotelSearchControl_hotelSmartLogicTextBox_Cities.length;MAX_ITEM_TO_SHOW_IN_SCROLL = MAX_ITEM_TO_SHOW;showAndMatchInitially();}}
// global variables
var SmartLogic_OptionsDIV;var SmartLogic_Processing = false;var KEY_SPECIAL = 0;var KEY_TAB = 9;var KEY_ENTER = 13;var KEY_SHIFT = 16;var KEY_PG_UP = 33;var KEY_PG_DOWN = 34;var KEY_HOME = 36;var KEY_LEFT_ARROW = 37;var KEY_UP_ARROW = 38;var KEY_RIGHT_ARROW = 39;var KEY_DOWN_ARROW = 40;var KEY_BACK_SPACE = 8;var KEY_DELETE = 46;var showDiv = false;var matches = new Array();var elem ;var setText = false;var input = '';var output = '';var btype = '';
function SmartLogic_FindCities(f_elem, e)
{
	elem = f_elem;
	// this makes sure that the onblur and onfocus dont step on each other
	while(SmartLogic_Processing)
	{
		// do nothing, just wait 
	}
	// handle incomplete input
	input = elem.value;output = input;
	if(input.length < 3){matches = new Array();SmartLogic_HideOptions();return;}
	else if(e.keyCode == KEY_HOME  || e.keyCode == KEY_LEFT_ARROW || e.keyCode == KEY_RIGHT_ARROW || key == KEY_SHIFT || key == KEY_TAB || key == KEY_PG_DOWN || key == KEY_PG_UP){return;}
	else if( input.length == 3 && lastCityFetched != input.toUpperCase() && ( (e.keyCode >=48 &&  e.keyCode <=90) ||(e.keyCode >=96 &&  e.keyCode <=111) || (e.keyCode >=186 &&  e.keyCode <=192) || (e.keyCode >=219 &&  e.keyCode <=222) || e.keyCode == KEY_BACK_SPACE || e.keyCode == KEY_DELETE )){dataFetched = false;matches = new Array();hotelSearchControl_hotelSmartLogicTextBox_Cities = new CityList_City("", "", "", "", "");SmartLogic_HideOptions();lastCityFetched = input.toUpperCase();getData(input);}
	// ok
	matches = new Array();matches.selectedItem = 0;setText = false;
	// first, handle any special key presses (shift, tab, alt, etc)
	e = (e) ? e : event;var key = e.keyCode;
	// handle arrow keys	
	if(key == KEY_UP_ARROW || key == KEY_DOWN_ARROW)
	{setText = true;if(key == KEY_UP_ARROW){if(SmartLogic_OptionsDIV != null && SmartLogic_OptionsDIV.matches != null && SmartLogic_OptionsDIV.matches.selectedItem > 0){SmartLogic_OptionsDIV.matches.selectedItem--;}}if(key == KEY_DOWN_ARROW){if(SmartLogic_OptionsDIV != null && SmartLogic_OptionsDIV.matches != null && SmartLogic_OptionsDIV.matches.selectedItem < SmartLogic_OptionsDIV.matches.length - 1){SmartLogic_OptionsDIV.matches.selectedItem++;}}if(SmartLogic_OptionsDIV){matches = SmartLogic_OptionsDIV.matches;}}else if(key == KEY_ENTER ){if(SmartLogic_OptionsDIV != null && SmartLogic_OptionsDIV.matches != null && SmartLogic_OptionsDIV.matches.selectedItem >= 0 && SmartLogic_OptionsDIV.matches.selectedItem <= SmartLogic_OptionsDIV.matches.length - 1){SmartLogic_SetCity(elem);return;}}else{matchTheData();}SmartLogic_HideOptions();showData();}
function matchTheData(){for(i=0;i<hotelSearchControl_hotelSmartLogicTextBox_Cities.length;i++){var k = 0;var cityItr = hotelSearchControl_hotelSmartLogicTextBox_Cities[i];var tempArr = cityItr.split("|");var singleCity = new CityList_City(tempArr[k++], tempArr[k++], tempArr[k++], tempArr[k++], tempArr[k++]);if(SmartLogic_StartsWith(singleCity.cityName, input)){matches[matches.length] = singleCity;}}}
function showAndMatchInitially(){SmartLogic_HideOptions();matchTheData();showData();}
function showData(){
var isScroll = false;
var innerDIV;
	if(matches.length > 0)
	{
		ajaxDIVOpen = true;dataFetched = true;SmartLogic_OptionsDIV = document.createElement("div");SmartLogic_OptionsDIV.style.position = "absolute";SmartLogic_OptionsDIV.style.display = "block";SmartLogic_OptionsDIV.style.top = (SmartLogic_FindPosY(elem) + elem.offsetHeight) + "px";SmartLogic_OptionsDIV.style.left = (SmartLogic_FindPosX(elem) ) + "px";SmartLogic_OptionsDIV.className = "citySmartDropdown";SmartLogic_OptionsDIV.style.zIndex = "1000";SmartLogic_OptionsDIV.matches = matches;SmartLogic_OptionsDIV.elem = elem;
		if(window.opera){btype = "Opera";}
		else if(window.netscape){btype = "Netscape";}		
		if(SmartLogic_OptionsDIV.matches.length-1 >= MAX_ITEM_TO_SHOW ) {isScroll = true;SmartLogic_OptionsDIV.style.height = "305px";if(btype == "Opera") {SmartLogic_OptionsDIV.className = "citySmartDropdownScrollOpera";} else if(btype == "Netscape") {SmartLogic_OptionsDIV.className = "citySmartDropdownScrollNetscape";} else {SmartLogic_OptionsDIV.className = "citySmartDropdownScroll";}}
		var numberDivsAdded = 0;
		/* calculate the length of cityDisplayText and convert it into pixels */
		var cityDisplayTextCount=0;	
		for(j=0;j<SmartLogic_OptionsDIV.matches.length-1 && j<MAX_ITEM_TO_SHOW_IN_SCROLL-1 ;j++){var singleCity = matches[j];var tmpCount = singleCity.cityName.length + 6;if(cityDisplayTextCount <= tmpCount){cityDisplayTextCount = tmpCount;}}
		cityDisplayTextCount = cityDisplayTextCount * 5;
		// end of length calculation
		for(j=0;j<SmartLogic_OptionsDIV.matches.length-1 && j<MAX_ITEM_TO_SHOW_IN_SCROLL-1;j++)
		{
			var singleCity = matches[j];numberDivsAdded++;var cityDisplayText = document.createTextNode( " " + singleCity.cityName + " " + singleCity.cityProv + " " );var cityDisplaySpan = document.createElement("span");var cityDisplayDIV = document.createElement("div");var className = "citySmartDropdownOption";
			if(SmartLogic_OptionsDIV.matches.selectedItem == j)
			{className = "citySmartDropdownOptionSelected";var valueDisplayText = singleCity.cityName + " " + singleCity.cityProv;if(setText) output = valueDisplayText;}
			cityDisplaySpan.className = className + "Text";cityDisplaySpan.appendChild(cityDisplayText);cityDisplayDIV.id = j;cityDisplayDIV.index = j;cityDisplayDIV.onmouseover = displaySelect;cityDisplayDIV.onclick = selectOption;cityDisplayDIV.className = className;
			if(isScroll)
				cityDisplayDIV.style.width = cityDisplayTextCount + "px";			
			cityDisplayDIV.appendChild(cityDisplaySpan);
			SmartLogic_OptionsDIV.appendChild(cityDisplayDIV);
		}
		// Last item requires special DIV class
		var singleCity = matches[numberDivsAdded];var cityDisplayText = document.createTextNode( " " + singleCity.cityName + " " + singleCity.cityProv + " ");var cityDisplaySpan = document.createElement("span");var cityDisplayDIV = document.createElement("div");var className = "citySmartDropdownOptionLast";if(SmartLogic_OptionsDIV.matches.selectedItem == numberDivsAdded){className = "citySmartDropdownOptionLastSelected";var valueDisplayText = singleCity.cityName + " " + singleCity.cityProv;if(setText) output = valueDisplayText;}
		cityDisplaySpan.className = className + "Text";cityDisplaySpan.appendChild(cityDisplayText);cityDisplayDIV.id = numberDivsAdded;cityDisplayDIV.index = numberDivsAdded;cityDisplayDIV.onmouseover = displaySelectLast;cityDisplayDIV.onclick = selectOption;cityDisplayDIV.className = className;cityDisplayDIV.appendChild(cityDisplaySpan);SmartLogic_OptionsDIV.appendChild(cityDisplayDIV);document.body.appendChild(SmartLogic_OptionsDIV);var maxWidth = 0;
		if(SmartLogic_OptionsDIV.children) {for(j=0;j<SmartLogic_OptionsDIV.children.length;j++){if (SmartLogic_OptionsDIV.children[j].clientWidth > maxWidth){maxWidth = SmartLogic_OptionsDIV.children[j].clientWidth;}}SmartLogic_OptionsDIV.style.width = maxWidth + 6;for(j=0;j<SmartLogic_OptionsDIV.children.length;j++){SmartLogic_OptionsDIV.children[j].style.width = "auto";}}
		// handle the fact that IE cant show a dynamic DIV over windowed controls
		if(document.body.insertAdjacentHTML)
		{var iframeSrcAttribute = 'src="about:blank"';var iframe = "<IFRAME " + iframeSrcAttribute + " id='_internal_iframe_id' style='POSITION:absolute;LEFT:" + SmartLogic_OptionsDIV.style.left + ";TOP:" + SmartLogic_OptionsDIV.style.top + ";WIDTH:" + SmartLogic_OptionsDIV.offsetWidth + "px;HEIGHT:" + SmartLogic_OptionsDIV.offsetHeight + "px;Z-INDEX:999;' src='about:blank' frameBorder='0' scrolling='no'></IFRAME>";SmartLogic_OptionsDIV.insertAdjacentHTML("afterEnd", iframe);SmartLogic_OptionsDIV.iframeID = "_internal_iframe_id";}elem.value = output;
	}
}
function displaySelect()
{
	var prevSelect = this.parentNode.childNodes[this.parentNode.matches.selectedItem];
	//special case for the last option in the list
	if (prevSelect.index == this.parentNode.childNodes.length-1)
	{
		prevSelect.className = "citySmartDropdownOptionLast";
	}
	else
		  prevSelect.className = "citySmartDropdownOption";
	this.className = "citySmartDropdownOptionSelected";
	this.parentNode.matches.selectedItem = this.index;
}
function displaySelectLast(){var prevSelect = this.parentNode.childNodes[this.parentNode.matches.selectedItem];prevSelect.className = "citySmartDropdownOption";this.className = "citySmartDropdownOptionLastSelected";this.parentNode.matches.selectedItem = this.index;}
function selectOption(){SmartLogic_SetCity(this.parentNode.elem);}
function SmartLogic_SetCity(elem){showDiv = false;document.getElementById(UserControlContainer + 'ddlHolidayType').selectedIndex = 0;SmartLogic_Processing = true;if(SmartLogic_OptionsDIV != null && SmartLogic_OptionsDIV.matches != null && SmartLogic_OptionsDIV.matches.selectedItem >= 0 && SmartLogic_OptionsDIV.matches.selectedItem <= SmartLogic_OptionsDIV.matches.length - 1){var singleCity = SmartLogic_OptionsDIV.matches[SmartLogic_OptionsDIV.matches.selectedItem];elem.value = singleCity.cityName;var country = singleCity.cityCountry;document.getElementById(UserControlContainer + 'ddlCountryCode').value = country;}ajaxDIVOpen = false;SmartLogic_HideOptions();SmartLogic_Processing = false;}
function SmartLogic_OnClick(elem){var val = elem.value;}
function SmartLogic_HideOptions(){if(SmartLogic_OptionsDIV != null){if(SmartLogic_OptionsDIV.iframeID != null){var iframe = document.getElementById(SmartLogic_OptionsDIV.iframeID);document.body.removeChild(iframe);}document.body.removeChild(SmartLogic_OptionsDIV);SmartLogic_OptionsDIV = null;}}
function SmartLogic_StartsWith(string, phrase){var phraseLength = phrase.length;var result = string.substring(0, phraseLength);if(result.toUpperCase() == phrase.toUpperCase())return true;else return false;}
function getPosition(obj){var output = new Object();var mytop=0, myleft=0;while(obj) {mytop+= obj.offsetTop;myleft+= obj.offsetLeft;obj= obj.offsetParent;}output.left = myleft;output.top = mytop;return output;}
function SmartLogic_FindPosX(obj){var curleft = 0;if (obj.offsetParent){while (obj.offsetParent){curleft += obj.offsetLeft;obj = obj.offsetParent;}}else if (obj.x)curleft += obj.x;return curleft;}
function SmartLogic_FindPosY(obj){var curtop = 0;if (obj.offsetParent){while (obj.offsetParent){curtop += obj.offsetTop;obj = obj.offsetParent;}}else if (obj.y)curtop += obj.y;return curtop;}
function getPos(obj) {var output = new Object();var mytop=0, myleft=0;while( obj) {mytop+= obj.offsetTop;myleft+= obj.offsetLeft;obj= obj.offsetParent;}output.left = myleft;output.top = mytop;return output;}
function CityList_City(cityCode, cityName, cityProv, cityCountry, dcCity){this.cityCode = cityCode;this.cityName = cityName;this.cityProv = cityProv;this.cityCountry = cityCountry;this.dcCity = dcCity;}
function checkTabIsPressed(e, t){if(e.keyCode == 9){SmartLogic_SetCity(t);}}
//-->
