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("/images/loader.gif") no-repeat right 2px');
        if ( container == '.autocomplete_hotel' )
            var filter = '&noair=true';
        else if (container == '.autocomplete_air_to' || container == '.autocomplete_air_from')
            var filter = '&onlyair=true';
        else
            var filter = '';
		$.getJSON("/includes/json.php?&query=" + $(container + ' .autocomplete_autoComplete').val() + filter + "&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
	{
		$(container + ' .autocomplete_results_box').hide();
	}

	return ( false );
}

function checkHotelForm ()
{
	if ( $('.rs_chk_in_vis').val() == "mm/dd/yyyy" )
	{
		alert('Please enter your check in date.');
		$('.ppn_cal_from .ppn_cal_popup').show();
		return ( false );
	}
	else if ( $('.rs_chk_out_vis').val() == "mm/dd/yyyy" )
	{
		alert('Please enter your check out date.');
		$('.ppn_cal_to .ppn_cal_popup').show();
		return ( false );
	}

	return ( true );
}

function checkHotelForm ()
{

}

function checkSearchForm ()
{
	var city = $('.autocomplete_hotel .autocomplete_searchBox').val();
	var inDate = $('.autocomplete_hotel .rs_chk_in_vis').val();
	var outDate = $('.autocomplete_hotel .rs_chk_out_vis').val();
	var code = $('.autocomplete_hotel .autocomplete_code').val();
	var cid = $('.autocomplete_hotel .autocomplete_cityid').val();

	var onlyValidChars = city.replace(/[^a-zA-Z0-9]+/g,'');

	if ( onlyValidChars == "" )
	{
		alert('Please enter a city.');
		$('.autocomplete_hotel .autocomplete_searchBox').focus();
		return ( false );
	}

	if ( ( inDate == "mm/dd/yyyy" || outDate == "mm/dd/yyyy" ) && cid == "" )
	{
		alert ( 'Please enter you check in and check out dates.');
		return ( false );
	}

	var location = '';

	if ( code != '' )
	{
		if ( inDate == "mm/dd/yyyy" || outDate == "mm/dd/yyyy" )
			location = "/hotels/search/?city=" + city + " (" + code + ")&city-id=" + cid;
		else
			location = "/hotels/search/?city=" + city + " (" + code + ")&city-id=" + cid + "&ci-date=" + inDate + "&co-date=" + outDate;
	}
	else
	{
		if ( cid != '' )
		{
			if ( inDate == "mm/dd/yyyy" || outDate == "mm/dd/yyyy" )
				location = "/hotels/search/?city-id=" + cid;
			else
				location = "/hotels/search/?city-id=" + cid + "&ci-date=" + inDate + "&co-date=" + outDate;
		}
		else
		{
			location = "/hotels/search/?city=" + city + "&ci-date=" + inDate + "&co-date=" + outDate;
		}
	}

	if ($("input#hotel-name").val().length > 0)
	{
		location = location + "&hotel-name=" + $("input#hotel-name").val()
	}

	if ($("select#star-rating").val().length > 0)
	{
		location = location + "&star-rating=" + $("select#star-rating").val()
	}

	if ( location != "" )
		window.location = location + "&rooms=" + $("select#rooms").val();
	else
		return ( false );

	return ( false );
}

function checkCarForm()
{
	var city = $('.autocomplete_from .autocomplete_searchBox').val();
	var city2 = $('.autocomplete_to .autocomplete_searchBox').val();
	var inDate = $('.autocomplete_from .rs_chk_in_vis').val();
	var outDate = $('.autocomplete_from .rs_chk_out_vis').val();
	var code = $('.autocomplete_from .autocomplete_code').val();
	var code2 = $('.autocomplete_to .autocomplete_code').val();
	var cid = $('.autocomplete_from .autocomplete_cityid').val();
	var cid2 = $('.autocomplete_to .autocomplete_cityid').val();
	var upTime = $('#pickup-time').val();
	var dropTime = $('#dropoff-time').val();
	var doing2 = false;

	var onlyValidChars = city.replace(/[^a-zA-Z0-9]+/g,'');

	if ( onlyValidChars == "" )
	{
		alert('Please enter a city.');
		$('.autocomplete_from .autocomplete_searchBox').focus();
		return ( false );
	}

	if ($('#different').attr("checked"))
	{
		doing2 = true;
		var onlyValidChars = city2.replace(/[^a-zA-Z0-9]+/g,'');
		if ( onlyValidChars == "" )
		{
			alert('Please enter a city.');
			$('.autocomplete_to .autocomplete_searchBox').focus();
			return ( false );
		}
	}

	if ( inDate == "mm/dd/yyyy" || outDate == "mm/dd/yyyy" )
	{
		alert ( 'Please enter you check in and check out dates.');
		return ( false );
	}

	if ( upTime == "any" || dropTime == "any" )
	{
		alert ( 'Please enter your pick up and drop off times.');
		return ( false );
	}

	var location = '';

	location = "/cars/search/?";

	if ( code != '' )
		location += "&pu-type=a&pu-city=" + city + "(" + code + ")";
	else
		location += "&pu-city=" + city;
	if ( doing2 && code2 != '' )
		location += "&do-type=a&do-city=" + city2 + "(" + code2 + ")";
	else if ( doing2 && code2 == '' )
		location += "&do-city=" + city2;

	if ( inDate != "mm/dd/yyy" && outDate != "mm/dd/yyy" )
		location += "&pu-date=" + inDate + "&do-date=" + outDate + "&pu-time=" + upTime + "&do-time=" + dropTime;


	if ( location != "" )
		window.location = location;
	else
		return ( false );

	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 )
			{
                if ( numPrinted%2 == 1 )
                        result += "<div class='autocomplete_result autocomplete_result_odd autocomplete_result_" + numPrinted + "'>\n";
                    else
                        result += "<div class='autocomplete_result autocomplete_result_" + numPrinted + "'>\n";
				var resultType = "airport";
                
				//Has this city been listed already
				if ( result.search(data[i].city_id.toString()) > 0 || data[i].city_name == '' )
				{
					result += "\t<span class='autocomplete_type'>" + resultType + "</span>\n";
					result += "\t<span class='autocomplete_printVal'>" + data[i].airport_name + "</span>\n\t<span class='autocomplete_cityID'>" + data[i].city_id + "</span>\n\t<span class='autocomplete_airport_code'>" + data[i].airport_code + "</span>\n\t<span class='autocomplete_airport'>" + data[i].airport_name + "</span>\n\t<span class='autocomplete_hotelCount'>" + "airport" + "</span>\n</div>";
                    numPrinted ++;
				}
				else
				{
					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].city_id + "</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_name + "</span>\n\t<span class='autocomplete_cityID'>" + data[i].city_id + "</span>\n\t<span class='autocomplete_airport_code'>" + data[i].airport_code + "</span>\n\t<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_name + "</span>\n\t<span class='autocomplete_cityID'>" + data[i].city_id + "</span>\n\t<span class='autocomplete_airport_code'>" + data[i].airport_code + "</span>\n\t<span class='autocomplete_airport'>" + data[i].airport_name + "</span>\n\t<span class='autocomplete_hotelCount'>" + "airport" + "</span>\n</div>";

					numPrinted ++;
                    numPrinted ++;
				}
			}
			else if (data[i].city_name != '')
			{
                if ( numPrinted%2 == 1 )
                        result += "<div class='autocomplete_result autocomplete_result_odd autocomplete_result_" + numPrinted + "'>\n";
                    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].city_id + "</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, 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_cityid').val ( $(container + " .autocomplete_result_" + num + " .autocomplete_cityID").text() );
	$(container + ' .autocomplete_code').val ( $(container + " .autocomplete_result_" + num + " .autocomplete_airport_code").text() );
}

function clearAndHide ( container )
{
	$(container + ' .autocomplete_results_box').hide();
	$(container + ' .autocomplete_cityid').val ( '' );
	$(container + ' .autocomplete_code').val ( '' );
}

$(document).ready (
	function()
	{
		$('.autocomplete_results_box').bgiframe();

		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_from .autocomplete_results_box').css("display") == "block" )
					{
						saveResult ( selected, '.autocomplete_from' );
						return ( false );
					}
					else if ( $('.autocomplete_to .autocomplete_results_box').css("display") == "block" )
					{
						saveResult ( selected, '.autocomplete_to' );
						return ( false );
					}
					else if ( $('.autocomplete_air_from .autocomplete_results_box').css("display") == "block" )
					{
						saveResult ( selected, '.autocomplete_air_from' );
						return ( false );
					}
					else if ( $('.autocomplete_air_to .autocomplete_results_box').css("display") == "block" )
					{
						saveResult ( selected, '.autocomplete_air_to' );
						return ( false );
					}
					else if ( $('.autocomplete_hotel .autocomplete_results_box').css("display") == "block" )
					{
						saveResult ( selected, '.autocomplete_hotel' );
						return ( false );
					}
					else
					{
						return ( true );
					}
				}
				else if ( event.keyCode == 9 )
				{
					//Tab
					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 if ( $('.autocomplete_air_to .autocomplete_results_box').css("display") == "block" )
					{
						saveResult ( selected, ".autocomplete_air_to" );
						return ( false );
					}
					else if ( $('.autocomplete_air_from .autocomplete_results_box').css("display") == "block" )
					{
						saveResult ( selected, ".autocomplete_air_from" );
						return ( false );
					}
					else if ( $('.autocomplete_hotel .autocomplete_results_box').css("display") == "block" )
					{
						saveResult ( selected, ".autocomplete_hotel" );
						return ( false );
					}
				}
				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
						clearAndHide( ".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
						clearAndHide( ".autocomplete_to" );
						reurn ( false );
					}
				}

				if ( (event.keyCode >= 65 && event.keyCode <= 90) || event.keyCode == 8)
				{
					clearTimeout(timer);
					var timer = setTimeout('doAJAX(".autocomplete_to");', 800);
				}
			}
		);


		$('.autocomplete_air_from .autocomplete_autoComplete').keyup (
			function (event)
			{
				if ( $('.autocomplete_air_from .autocomplete_results_box').css("display") == "block" )
				{
					if ( event.keyCode == 40 )
					{
						//Up
						if ( selected < maxSelected )
						{
							selected ++;
							setSelected ( selected, ".autocomplete_air_from" );
						}
						else
						{
							selected = 0;
							setSelected ( 0, ".autocomplete_air_from" );
						}
					}
					else if ( event.keyCode == 38 )
					{
						//Down
						if ( selected > 0 )
						{
							selected --;
							setSelected ( selected, ".autocomplete_air_from" );
						}
						else
						{
							selected = maxSelected;
							setSelected ( maxSelected, ".autocomplete_air_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
						clearAndHide( ".autocomplete_air_from" );
					}
				}

				if ( (event.keyCode >= 65 && event.keyCode <= 90) || event.keyCode == 8)
				{
					clearTimeout(timer);
					var timer = setTimeout('doAJAX(".autocomplete_air_from");', 800);
				}
			}
		);

		$('.autocomplete_air_to .autocomplete_autoComplete').keyup (
			function (event)
			{

				if ( $('.autocomplete_air_to .autocomplete_results_box').css("display") == "block" )
				{
					if ( event.keyCode == 40 )
					{
						//Up
						if ( selected < maxSelected )
						{
							selected ++;
							setSelected ( selected, ".autocomplete_air_to" );
						}
						else
						{
							selected = 0;
							setSelected ( 0, ".autocomplete_air_to" );
						}
					}
					else if ( event.keyCode == 38 )
					{
						//Down
						if ( selected > 0 )
						{
							selected --;
							setSelected ( selected, ".autocomplete_air_to" );
						}
						else
						{
							selected = maxSelected;
							setSelected ( maxSelected, ".autocomplete_air_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
						clearAndHide( ".autocomplete_air_to" );
						reurn ( false );
					}
				}

				if ( (event.keyCode >= 65 && event.keyCode <= 90) || event.keyCode == 8)
				{
					clearTimeout(timer);
					var timer = setTimeout('doAJAX(".autocomplete_air_to");', 800);
				}
			}
		);

		$('.autocomplete_hotel .autocomplete_autoComplete').keyup (
			function (event)
			{

				if ( $('.autocomplete_hotel .autocomplete_results_box').css("display") == "block" )
				{
					if ( event.keyCode == 40 )
					{
						//Up
						if ( selected < maxSelected )
						{
							selected ++;
							setSelected ( selected, ".autocomplete_hotel" );
						}
						else
						{
							selected = 0;
							setSelected ( 0, ".autocomplete_hotel" );
						}
					}
					else if ( event.keyCode == 38 )
					{
						//Down
						if ( selected > 0 )
						{
							selected --;
							setSelected ( selected, ".autocomplete_hotel" );
						}
						else
						{
							selected = maxSelected;
							setSelected ( maxSelected, ".autocomplete_hotel" );
						}
					}
					else if ( event.keyCode == 37 )
					{
						//Left
					}
					else if ( event.keyCode == 39 )
					{
						//Right
					}
					else if ( event.keyCode == 13 )
					{
						//Enter

					}
					else if ( event.keyCode == 27 )
					{
						//Escape
						clearAndHide( ".autocomplete_hotel" );
					}
				}

				if ( (event.keyCode >= 65 && event.keyCode <= 90) || event.keyCode == 8)
				{
					clearTimeout(timer);
					var timer = setTimeout('doAJAX(".autocomplete_hotel");', 800);
				}
			}
		);

		$(document).click (
			function(e)
			{
				var $clicked=$(e.target);
				if ( ! ( $clicked.parents().is('.autocomplete_results') || $clicked.is('.autocomplete_searchBox') ) )
				{
					if ( $('.autocomplete_to .autocomplete_results_box').css("display") == "block" )
					{
						clearAndHide( ".autocomplete_to" );
						return ( false );
					}
					else if ( $('.autocomplete_from .autocomplete_results_box').css("display") == "block" )
					{
						clearAndHide( ".autocomplete_from" );
						return ( false );
					}
					if ( $('.autocomplete_air_to .autocomplete_results_box').css("display") == "block" )
					{
						clearAndHide( ".autocomplete_air_to" );
						return ( false );
					}
					else if ( $('.autocomplete_air_from .autocomplete_results_box').css("display") == "block" )
					{
						clearAndHide( ".autocomplete_air_from" );
						return ( false );
					}
					else if ( $('.autocomplete_hotel .autocomplete_results_box').css("display") == "block" )
					{
						clearAndHide( ".autocomplete_hotel" );
						return ( false );
					}
				}
			}
		);
	}
);