var numPrinted = 0;
var searchCity = true;
var selected;
var maxSelected;

function doAJAX( container )
{
	if ( $(container + ' .autocomplete_autoComplete').val().length >= 3 )
	{
		$(container + ' .autocomplete_searchBox').css('background', '#FFF url("/img/loader.gif") no-repeat right 2px');
		$.getJSON("./inc/json.php?&query=" + $(container + ' .autocomplete_autoComplete').val() + "&jsoncallback=?",
		function(data)
		{
			if ( $(container + ' .autocomplete_autoComplete').val().length >= 3 && (data.data != undefined) && (data.data.length > 0) )
			{
				selected = 0;
				
				$(container + ' .autocomplete_results').html(  buildHTML ( data.data )  );
				$(container + ' .autocomplete_results_box').show();
				
				maxSelected = numPrinted - 1;
				
				$('.autocomplete_result_0').click ( function() { saveResult (0, container); } );
				$('.autocomplete_result_1').click ( function() { saveResult (1, container); } );
				$('.autocomplete_result_2').click ( function() { saveResult (2, container); } );
				$('.autocomplete_result_3').click ( function() { saveResult (3, container); } );
				$('.autocomplete_result_4').click ( function() { saveResult (4, container); } );
				$('.autocomplete_result_5').click ( function() { saveResult (5, container); } );
				$('.autocomplete_result_6').click ( function() { saveResult (6, container); } );
				$('.autocomplete_result_7').click ( function() { saveResult (7, container); } );
				$('.autocomplete_result_8').click ( function() { saveResult (8, container); } );
				$('.autocomplete_result_9').click ( function() { saveResult (9, container); } );
				$('.autocomplete_result_10').click ( function() { saveResult (10, container); } );
				
				$('.autocomplete_result_0').mouseover ( function() { selected = 0; setSelected (0, container); } );
				$('.autocomplete_result_1').mouseover ( function() { selected = 1; setSelected (1, container); } );
				$('.autocomplete_result_2').mouseover ( function() { selected = 2; setSelected (2, container); } );
				$('.autocomplete_result_3').mouseover ( function() { selected = 3; setSelected (3, container); } );
				$('.autocomplete_result_4').mouseover ( function() { selected = 4; setSelected (4, container); } );
				$('.autocomplete_result_5').mouseover ( function() { selected = 5; setSelected (5, container); } );
				$('.autocomplete_result_6').mouseover ( function() { selected = 6; setSelected (6, container); } );
				$('.autocomplete_result_7').mouseover ( function() { selected = 7; setSelected (7, container); } );
				$('.autocomplete_result_8').mouseover ( function() { selected = 8; setSelected (8, container); } );
				$('.autocomplete_result_9').mouseover ( function() { selected = 9; setSelected (9, container); } );
				$('.autocomplete_result_10').mouseover ( function() { selected = 10; setSelected (10, container); } );
				
				setSelected( selected, container );
			}
			
			$(container + ' .autocomplete_searchBox').css('background', '#FFF');
		 });
	}
	else
	{
		$('.autocomplete_results_box').hide();
	}
	
	return ( false );
}

function buildHTML ( data )
{
	var result = '';
	numPrinted = 0;
	
	for ( var i in data )
	{
		if ( numPrinted < 10 && data[i] != undefined)
		{
			if ( data[i].state_code == "" || data[i].state_code == undefined )
			{
				var stateOrCountry = data[i].country;
			}
			else
			{
				var stateOrCountry = (data[i].state_code).toUpperCase();
			}
			
			if ( result.indexOf(data[i].city + ", " + stateOrCountry) == -1 )
			{
				//Need to add the city and airport
				result += "<div class='autocomplete_result autocomplete_result_" + numPrinted + "'>";
			
				result += "<span class='autocomplete_city'>" + data[i].city + ", ";
				result += stateOrCountry + "</span>";
				
				result += "<span class='autocomplete_code'>" + data[i].code + "</span>";
                
                result += "<span class='autocomplete_country_code'>" + data[i].state_code + "</span>";
				
				result += "<span class='autocomplete_printVal'>" + data[i].city + ", " + stateOrCountry + " - " + (data[i].code).toUpperCase() + "</span>";
				
				result += "<span class='autocomplete_intl_code'>" + data[i].intl_code + "</span>";
				
				result += "</div>";
				
				numPrinted ++;
				
				result += "<div class='autocomplete_result autocomplete_airport autocomplete_result_" + numPrinted + "'>";
			
				result += "<span class='autocomplete_city'>" + data[i].name + " airport - " + (data[i].code).toUpperCase() + "</span>";
				
				result += "<span class='autocomplete_code'>" + data[i].code + "</span>";
                
                result += "<span class='autocomplete_country_code'>" + data[i].state_code + "</span>";
				
				result += "<span class='autocomplete_printVal'>" + data[i].name + " airport - " + (data[i].code).toUpperCase() + "</span>";
				
				result += "<span class='autocomplete_intl_code'>" + data[i].intl_code + "</span>";
				
				result += "</div>";
			}
			else
			{
				//Already added this city, just add airport
				result += "<div class='autocomplete_result autocomplete_airport autocomplete_result_" + numPrinted + "'>";
			
				result += "<span class='autocomplete_city'>" + data[i].name + " airport - " + (data[i].code).toUpperCase() + "</span>";
				
				result += "<span class='autocomplete_code'>" + data[i].code + "</span>";
				
                result += "<span class='autocomplete_country_code'>" + data[i].state_code + "</span>";
                
				result += "<span class='autocomplete_printVal'>" + data[i].name + " airport - " + (data[i].code).toUpperCase() + "</span>";
			
				result += "<span class='autocomplete_intl_code'>" + data[i].intl_code + "</span>";
			
				result += "</div>";
			}
			
			
			numPrinted ++;
		}
	}

	return ( result );
}

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

function saveResult ( num, container )
{
	$(container + ' .autocomplete_results_box').slideUp('fast');
	$(container + ' .autocomplete_searchBox').val ( $(container + " .autocomplete_result_" + num + " .autocomplete_printVal").text() );
	$(container + ' .autocomplete_codeBox').val ( $(container + " .autocomplete_result_" + num + " .autocomplete_code").text() );
	$(container + ' .autocomplete_country_codeBox').val ( $(container + " .autocomplete_result_" + num + " .autocomplete_country_code").text() );
    if ( $(container + " .autocomplete_result_" + num + " .autocomplete_intl_code").text() != "undefined" )
		$(container + ' .autocomplete_intlBox').val ( $(container + " .autocomplete_result_" + num + " .autocomplete_intl_code").text() );
}

$(document).ready (
	function()
	{
		
		$('#leavingFrom').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_to .autocomplete_results_box').css("display") == "block" )
					{
						saveResult ( selected, ".autocomplete_to" );
						return ( false );
					}
					else if ( $('.autocomplete_from .autocomplete_results_box').css("display") == "block" )
					{
						saveResult ( selected, ".autocomplete_from" );
						return ( false );
					}
					else
					{
						return ( true );
					}
				}
				else if ( event.keyCode == 9 )
				{
					//Tab
					if ( $('.autocomplete_to .autocomplete_results_box').css("display") == "block" )
					{
						saveResult ( selected, ".autocomplete_to" );
					}
					else if ( $('.autocomplete_from .autocomplete_results_box').css("display") == "block" )
					{
						saveResult ( selected, ".autocomplete_from" );
					}
				}
				else if ( event.keyCode == 8 && $('.autocomplete_autoComplete').val().length >= 3 )
				{
					//Backspace
					$('.autocomplete_results_box').hide();
				}
			}
		);
		
		$('.autocomplete_from .autocomplete_autoComplete').keyup (
			function (event)
			{
				if ( $('.autocomplete_from .autocomplete_results_box').css("display") == "block" )
				{
					if ( event.keyCode == 40 )
					{
						//Up
						if ( selected < maxSelected )
						{
							selected ++;
							setSelected ( selected, ".autocomplete_from" );
						}
						else
						{
							selected = 0;
							setSelected ( 0, ".autocomplete_from" );
						}
					}
					else if ( event.keyCode == 38 )
					{
						//Down
						if ( selected > 0 )
						{
							selected --;
							setSelected ( selected, ".autocomplete_from" );
						}
						else
						{
							selected = maxSelected;
							setSelected ( maxSelected, ".autocomplete_from" );
						}
					}
					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();
						saveResult ( selected, ".autocomplete_from" );
					}
				}
				
				if ( (event.keyCode >= 65 && event.keyCode <= 90) || event.keyCode == 8)
				{
					clearTimeout(timer);
					var timer = setTimeout('doAJAX(".autocomplete_from");', 800);
				}
			}
		);
		
		$('.autocomplete_to .autocomplete_autoComplete').keyup (
			function (event)
			{

				if ( $('.autocomplete_to .autocomplete_results_box').css("display") == "block" )
				{
					if ( event.keyCode == 40 )
					{
						//Up
						if ( selected < maxSelected )
						{
							selected ++;
							setSelected ( selected, ".autocomplete_to" );
						}
						else
						{
							selected = 0;
							setSelected ( 0, ".autocomplete_to" );
						}
					}
					else if ( event.keyCode == 38 )
					{	
						//Down
						if ( selected > 0 )
						{
							selected --;
							setSelected ( selected, ".autocomplete_to" );
						}
						else
						{
							selected = maxSelected;
							setSelected ( maxSelected, ".autocomplete_to" );
						}
					}
					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();
						saveResult ( selected, ".autocomplete_to" );
					}
				}
				
				if ( (event.keyCode >= 65 && event.keyCode <= 90) || event.keyCode == 8)
				{
					clearTimeout(timer);
					var timer = setTimeout('doAJAX(".autocomplete_to");', 800);
				}
			}
		);

		$(document).click (
			function(e)
			{
				var $clicked=$(e.target);
				if ( ! ( $clicked.parents().is('.autocomplete_results') ) )
				{
					if ( $('.autocomplete_to .autocomplete_results_box').css("display") == "block" )
					{
						saveResult ( selected, ".autocomplete_to" );
						return ( false );
					}
					else if ( $('.autocomplete_from .autocomplete_results_box').css("display") == "block" )
					{
						saveResult ( selected, ".autocomplete_from" );
						return ( false );
					}
				}
			}
		);
	}
);