var _selector = $('<div class="predicter" style=" display: block; margin-left: 141px;  margin-top: 30px; width: 263px;"></a>'); 

var reference = null;		
	var timeoutcount=300000;	
var closePredictor= function(){
	
		_selector.hide();
		if (reference != null)
		{
			clearInterval(reference);
			reference = null;
		}
	}	
function Predictor(inputElement, url,theclass,minlengthsearch)
{
		
		var _element = $(inputElement);

	var _currentSearch = "";
	var _selectedItem = null;
	



var reference = null;		
	
	var timeoutcount=300000;
	
	var refreshPredictor = function(predictions)
	{		
		var timeoutcount=300000;
		//setTimeout("closePredictor();",3000);
		//setTimeout("alert('hello');",3000);
		clearTimeout(reference);
		reference = setTimeout("closePredictor();",timeoutcount);
		$(_element).parent().append(_selector);
		$(".item", _selector).remove()
		_selectedItem = null;
		
		var currentText = $(_element).val();
		var predictionCount = 0;
	
//		$("div.predicter").css("margin-left", _element.prev("span")[0].offsetWidth);
		
		for (var i in predictions)
		{
			var prediction = predictions[i];
			if(typeof(prediction) == "string"){
			prediction = prediction.replace(currentText, "<strong>" + currentText + "</strong>");
			
			var item = $("<div class=\"item\">" + prediction + "</div>");
			item.bind("mouseover", function(event)
			{
				$(_selectedItem).removeClass("selected");
				_selectedItem = event.target;
				$(_selectedItem).addClass("selected");
				//$(_element).val($(_selectedItem).text());
			});
			item.bind("click", function(event) { 
				
				$(_element).val($(_selectedItem).text());
				_selector.hide(); document.search_form.submit();  
				
			});
			$(_selector).append(item);
			}
			predictionCount++;
		}
		
	
		if (predictionCount > 0)
		{
			
			_selector.show();
		}else{
			_selector.hide();
		}
	
	}

	/**
	 * If the text has changed, refresh the predictor.
	 */
	var _onKeyUp = function(event)
	{
		
		closePredictor();
		_selector.show();
		clearTimeout(reference);
		reference = setTimeout("closePredictor();",timeoutcount);
		
		var upKey = 38;
		var downKey = 40;
		var enterKey = 13;
		event = window.event || event;
		var currentKey = event.which || event.keyCode;

		if (currentKey == upKey || currentKey == downKey || currentKey == enterKey)
		{
			_moveSelector(currentKey);

			if (event.preventDefault != undefined)
			{
				event.preventDefault();
			}

			return;
		}

		if ($(_element).val().length < minlengthsearch)
		{
			_selector.hide();
			_selectedItem = null;
			return;
		}
		
		if ($(_element).val() !== _currentSearch)
		{
			
			_currentSearch = $(_element).val();
			$.ajax({
				url: url + $(_element).val(),
				dataType: "json",
				success: refreshPredictor
			});
		}
		
	}

	/**
	 * If the user presses up, down or enter, update the predictor display.
	 */
	var _moveSelector = function(currentKey)
	{
	
		closePredictor();
		_selector.show();
		clearTimeout(reference);
		reference = setTimeout("closePredictor();",timeoutcount);
		
		var upKey = 38;
		var downKey = 40;
		var enterKey = 13;

		if (currentKey == upKey || currentKey == downKey)
		{
			if (currentKey == downKey)
			{
				if (!_selectedItem)
				{
					_selectedItem = $(".item:first", _selector).addClass("selected");
				}
				else
				{
					if ($(_selectedItem).next().length != 0)
					{
						$(_selectedItem).removeClass("selected");
						_selectedItem = $(_selectedItem.next()).addClass("selected");
						$(_element).val(_selectedItem.text());
					}
				}
			}
			else if (currentKey == upKey)
			{
				if (!_selectedItem)
				{
					return;
				}
				else
				{
					$(_selectedItem).removeClass("selected");

					if ($(_selectedItem).prev().length != 0)
					{
						_selectedItem = $(_selectedItem.prev()).addClass("selected");
						$(_element).val(_selectedItem.text());
					}
					else
					{
						_selectedItem = null;
					}
				}
			}
		}
		else if (currentKey == enterKey)
		
		{
			if ($(_selector).css("display") != "none")
			{
				_selectedItem = null;
				$(_selector).hide();
			}
		}
	}

	_element.bind("keyup", _onKeyUp);
}


