var numPrinted = 0;
var searchCity = true;
var selected;
var maxSelected;
var request = null;
var timer = null;

function doAJAX()
{
	if ( $('.autocomplete_autoComplete').val().length >= 3 )
	{
        if ( request != null )
            request.abort();
		request = $.getJSON("/inc/json.php?query=" + $('.autocomplete_autoComplete').val() + "&jsoncallback=?",
		function(data)
		{
            request = null;
			if ( $('.autocomplete_autoComplete').val().length >= 3 && (data.data != undefined) && (data.data.length > 0) )
			{
				selected = 0;
				
				$('.autocomplete_results').html(  buildHTML ( data.data )  );
				$('.autocomplete_results_box').show();
				
				maxSelected = numPrinted - 1;
				
				$('.autocomplete_result_0').click ( function() { saveResult (0); } );
				$('.autocomplete_result_1').click ( function() { saveResult (1); } );
				$('.autocomplete_result_2').click ( function() { saveResult (2); } );
				$('.autocomplete_result_3').click ( function() { saveResult (3); } );
				$('.autocomplete_result_4').click ( function() { saveResult (4); } );
				$('.autocomplete_result_5').click ( function() { saveResult (5); } );
				$('.autocomplete_result_6').click ( function() { saveResult (6); } );
				$('.autocomplete_result_7').click ( function() { saveResult (7); } );
				$('.autocomplete_result_8').click ( function() { saveResult (8); } );
				$('.autocomplete_result_9').click ( function() { saveResult (9); } );
				$('.autocomplete_result_10').click ( function() { saveResult (10); } );
				$('.autocomplete_result_11').click ( function() { saveResult (11); } );
				$('.autocomplete_result_12').click ( function() { saveResult (12); } );
				$('.autocomplete_result_13').click ( function() { saveResult (13); } );
				$('.autocomplete_result_14').click ( function() { saveResult (14); } );
				$('.autocomplete_result_15').click ( function() { saveResult (15); } );
				
				$('.autocomplete_result_0').mouseover ( function() { selected = 0; setSelected (0); } );
				$('.autocomplete_result_1').mouseover ( function() { selected = 1; setSelected (1); } );
				$('.autocomplete_result_2').mouseover ( function() { selected = 2; setSelected (2); } );
				$('.autocomplete_result_3').mouseover ( function() { selected = 3; setSelected (3); } );
				$('.autocomplete_result_4').mouseover ( function() { selected = 4; setSelected (4); } );
				$('.autocomplete_result_5').mouseover ( function() { selected = 5; setSelected (5); } );
				$('.autocomplete_result_6').mouseover ( function() { selected = 6; setSelected (6); } );
				$('.autocomplete_result_7').mouseover ( function() { selected = 7; setSelected (7); } );
				$('.autocomplete_result_8').mouseover ( function() { selected = 8; setSelected (8); } );
				$('.autocomplete_result_9').mouseover ( function() { selected = 9; setSelected (9); } );
				$('.autocomplete_result_10').mouseover ( function() { selected = 10; setSelected (10); } );
				$('.autocomplete_result_11').mouseover ( function() { selected = 11; setSelected (11); } );
				$('.autocomplete_result_12').mouseover ( function() { selected = 12; setSelected (12); } );
				$('.autocomplete_result_13').mouseover ( function() { selected = 13; setSelected (13); } );
				$('.autocomplete_result_14').mouseover ( function() { selected = 14; setSelected (14); } );
				$('.autocomplete_result_15').mouseover ( function() { selected = 15; setSelected (15); } );
				
				setSelected( selected );
			}
		 });
	}
	else
	{
		$('.autocomplete_results_box').hide();
	}
	
	
	return ( false );
}

function buildHTML ( data )
{
	var result = '';
	numPrinted = 0;
	
	for ( var i in data )
	{
		if ( numPrinted < 15 && data[i] != undefined)
		{
			//Find hotel verbage
			if ( data[i].hotel_count > 1 )
				var hotelWord = " hotels";
			else
				var hotelWord = " hotel";
			
			//Find the type of result
			if ( data[i].airport_code != "" && data[i].airport_code != undefined )
			{
				var resultType = "airport";
				
				//Has this city been listed already
				if ( result.search(data[i].cityid.toString()) > 0 )
				{
                    result += "<div class='autocomplete_result autocomplete_result_" + numPrinted + "'>\n";
					result += "\t<span class='autocomplete_type'>" + resultType + "</span>\n";
					result += "\t<span class='autocomplete_printVal'>" + data[i].airport_code + "</span>\n\t<span class='autocomplete_cityID'>" + data[i].cityid + "</span>\n\t<span class='autocomplete_airport_code'>" + data[i].airport_code + "</span>\n\t<span class='autocompleteArrows'>&#187;</span><span class='autocomplete_airport'>" + data[i].airport_name + "</span>\n\t<span class='autocomplete_hotelCount'>" + "airport" + "</span>\n</div>";
				}
				else
				{
                    result += "<div class='autocomplete_result autocomplete_result_" + numPrinted + "'>\n";
				    result += "\t<span class='autocomplete_type'>city</span>\n";
				    result += "\t<span class='autocomplete_printVal'>" + data[i].city_name + "</span>\n\t<span class='autocomplete_cityID'>" + data[i].cityid + "</span>\n\t<span class='autocomplete_city'>" + data[i].city_name + "</span>\n\t<span class='autocomplete_hotelCount'>"  + data[i].hotel_count + hotelWord + "</span>\n" + "</div>";
					                    
					if ( numPrinted%2 == 1)
						result += "<div class='autocomplete_result autocomplete_result_" + (numPrinted+1) + "'>\n\t<span class='autocomplete_type'>" + resultType + "</span>\n\t<span class='autocomplete_printVal'>" + data[i].airport_code + "</span>\n\t<span class='autocomplete_cityID'>" + data[i].cityid + "</span>\n\t<span class='autocomplete_airport_code'>" + data[i].airport_code + "</span>\n\t<span class='autocompleteArrows'>&#187;</span><span class='autocomplete_airport'>" + data[i].airport_name + "</span>\n\t<span class='autocomplete_hotelCount'>" + "airport" + "</span>\n</div>";
					else
						result += "<div class='autocomplete_result autocomplete_result_odd autocomplete_result_" + (numPrinted+1) + "'>\n\t<span class='autocomplete_type'>" + resultType + "</span>\n\t<span class='autocomplete_printVal'>" + data[i].airport_code + "</span>\n\t<span class='autocomplete_cityID'>" + data[i].cityid + "</span>\n\t<span class='autocomplete_airport_code'>" + data[i].airport_code + "</span>\n\t<span class='autocompleteArrows'>&#187;</span><span class='autocomplete_airport'>" + data[i].airport_name + "</span>\n\t<span class='autocomplete_hotelCount'>" + "airport" + "</span>\n</div>";
					
					numPrinted ++;
				}
			}
			else
			{
                result += "<div class='autocomplete_result autocomplete_result_" + numPrinted + "'>\n";
				var resultType = "city";
				result += "\t<span class='autocomplete_type'>" + resultType + "</span>\n\t<span class='autocomplete_printVal'>" + data[i].city_name + "</span>\n\t<span class='autocomplete_cityID'>" + data[i].cityid + "</span>\n\t<span class='autocomplete_city'>" + data[i].city_name + "</span>\n\t<span class='autocomplete_hotelCount'>"  + data[i].hotel_count + hotelWord + "</span>\n" + "</div>";				
			}
			
			numPrinted ++;
		}
	}

	return ( result );
}

function setSelected ( num )
{
	$('.autocomplete_result_selected').removeClass('autocomplete_result_selected');
	$('.autocomplete_result_' + num).addClass('autocomplete_result_selected');
}

function saveResult ( num )
{
    $('.autocomplete_searchBox').val( $('.autocomplete_result_' + num + ' .autocomplete_printVal').text() );
	$('.autocomplete_results_box').slideUp('fast');
}

$(document).ready (
	function()
	{
		$('.autocomplete_results_box').bgiframe();
		$('.autocomplete_searchBox').focus();
		
		selected = 0;
		maxSelected = 0;
		
		$('.autocomplete_autoComplete').keydown (
			function ( event )
			{
				if ( event.keyCode == 13 )
				{
					//Enter
					//This is a special case because we need to block the form submit 
					//	if the results are visible.
					//	So we return false to stop the propigation
					if ( $('.autocomplete_results_box').css("display") == "block" )
					{
						saveResult ( selected );
						return ( false );
					}
					else
					{
						return ( true );
					}
				}
				else if ( event.keyCode == 9 )
				{
					//Tab
					$('.autocomplete_results_box').hide();
				}
				else if ( event.keyCode == 8 && $('.autocomplete_autoComplete').val().length >= 3 )
				{
					//Backspace
					$('.autocomplete_results_box').hide();
				}
			}
		);
		
		$('.autocomplete_autoComplete').keyup (
			function (event)
			{
				if ( $('.autocomplete_results_box').css("display") == "block" )
				{
					if ( event.keyCode == 40 )
					{
						//Up
						if ( selected < maxSelected )
						{
							selected ++;
							setSelected ( selected );
						}
						else
						{
							selected = 0;
							setSelected ( 0 );
						}
					}
					else if ( event.keyCode == 38 )
					{
						//Down
						if ( selected > 0 )
						{
							selected --;
							setSelected ( selected );
						}
						else
						{
							selected = maxSelected;
							setSelected ( maxSelected );
						}
					}
					else if ( event.keyCode == 37 )
					{
						//Left
					}
					else if ( event.keyCode == 39 )
					{
						//Right
					}
					else if ( event.keyCode == 13 )
					{
						//Enter
						
					}
					else if ( event.keyCode == 27 )
					{
						//Escape
						$('.autocomplete_results_box').hide();
					}
				}
				
				if ( (event.keyCode >= 65 && event.keyCode <= 90) || event.keyCode == 8)
				{
                    doAJAX();
				}
			}
		);

		$(document).click (
			function(e)
			{
				var $clicked=$(e.target);
				if ( ! ( $clicked.parents().is('.autocomplete_results') || $clicked.is('.autocomplete_searchBox') ) )
				{
					if ( $('.autocomplete_results_box').css("display") == "block" )
					{
						$('.autocomplete_results_box').hide();
					}
				}
			}
		);
	}
);