var autoCompleteEntries, autoCompleteSelected, suggDiv, hotelBox, suggestionSelected;

function initFind()
{
	suggDiv = document.getElementById('suggestionBox');
	hotelBox = document.getElementById('findInput');

	hotelBox.onkeyup = autoComplete;
	hotelBox.onkeydown = autoComplete;
	hotelBox.onfocus = function() { this.value = ''; this.onfocus = null; };
}


/***************************************************

	AUTOCOMPLETE AND RELATED EVENT HANDLING FUNCTIONS

 ***************************************************/

function autoComplete(e)
{
	if (document.all)
	{
		e = window.event;
	}
	var k = e.keyCode;
	
	if (e.type=='keydown')
	{
		switch (k)
		{
			case 38: return navigateAutoComplete('up'); break; // up arrow key
			case 40: return navigateAutoComplete('down'); break; // down arrow key
			case 13: // return key
				if (autoCompleteEntries.length==1)
				{
					autoCompleteSelected = 0;
				}
				if ((autoCompleteEntries.length > 0) && (autoCompleteSelected <= autoCompleteEntries.length))
				{
					hotelBox.value = autoCompleteEntries[autoCompleteSelected];
					suggDiv.style.visibility = 'hidden';
					autoCompleteEntries = new Array();
				}
			doSiteRedirect();
			default : null;
		}
		return true;
	}
	else if ( (e.type=='keyup')
					&& (((k>=65) && (k<=90)) || ((k>=48) && (k<=57)) || ((k>=96) && (k<=105))
						 || (k==32) || (k==8) || (k==46)) )
	{
		// is key a space, backspace, delete or a letter?
		switch (k)
		{
			case 46 :
			case 8 : return handleDeletion(k);
			default : return showSuggestions();
		}
	}
	return false;
}


function doSiteRedirect()
{
	if (hotelURLs[hotelBox.value])
	{
		window.location = hotelURLs[hotelBox.value];
	}
}


function handleDeletion()
{
	suggDiv.style.visibility = 'hidden';
	if (!suggestionSelected || (autoCompleteEntries.length > 1))
	{
		return showSuggestions();
	}
	suggestionSelected = false;
	return false;
}


function navigateAutoComplete(direction)
{
	if ((autoCompleteEntries.length > 0) && (suggDiv.style.visibility == 'visible'))
	{
		var pos = autoCompleteSelected;
		switch (direction)
		{
			case 'up' :
				if ((pos < autoCompleteEntries.length) && (pos > 0))
				{
					autoCompleteSelected--;
				}
				break;
			case 'down' :
				if (pos == autoCompleteEntries.length)
				{
					autoCompleteSelected = 0;
				}
				else if ((pos+1) < autoCompleteEntries.length)
				{
					autoCompleteSelected++;
				}
				break;
			default : return false;
		}
		if (document.getElementById('ac_dd_pos' + pos))
		{
			document.getElementById('ac_dd_pos' + pos).className = 'dd_unselected';
		}
		document.getElementById('ac_dd_pos' + autoCompleteSelected).className = 'dd_selected';
		//putInputSuggestion(autoCompleteSelected);
	}
	return false;
}



function showSuggestions()
{
	suggestionSelected = false;
	autoCompleteEntries = new Array();
	var strpat = /^\s*(([a-z0-9]+ ?){2,})\s*$/i;
	if (strpat.test(hotelBox.value))
	{
		var testpat = new RegExp(hotelBox.value.replace(strpat, '$1'), 'i');
		for (var i in hotels)
		{
			if (hotels[i].match(testpat))
			{
				autoCompleteEntries[autoCompleteEntries.length] = hotels[i];
			}
		}
	}
	if (autoCompleteEntries.length > 0)
	{
		var html = '';
		for (i=0; i<autoCompleteEntries.length; i++)
		{
			html += '<div id="ac_dd_pos' + i + '" class="dd_unselected">'
						+ '<a href="' + hotelURLs[autoCompleteEntries[i]] + '">'
						+ autoCompleteEntries[i] + '</a></div>';
		}
		suggDiv.innerHTML = html;
		autoCompleteSelected = i;
		suggDiv.style.visibility = 'visible';
	}
	else if (hotelBox.value.length > 1)
	{
		var html = '<div class="dd_warning">No hotels to show...</div>';
		suggDiv.innerHTML = html;
		suggDiv.style.visibility = 'visible';
	}
	else
	{
		suggDiv.style.visibility = 'hidden';
	}
	return true;
}
