/*
 * jQueryPlugin for ajax/json suggestions.
 * @package - template
 * @author Ivans <ivans@gaspdesign.co.uk>
 * @version - 0.1
 */
jQuery.fn.suggestions = function() {
	return this.each(function(){
		$(this).attr('autocomplete','off');
		var ul = setupUl(this);
		$(this).keyup( function(event){loadSuggestions(event, this, ul)} );
	});
};

var timeoutId;

function setupUl(element)
{
	return $('<ul />').addClass('suggestions').insertAfter(element).get(0);
}

function loadSuggestions(event, element, ul)
{
	switch(event.keyCode)
	{
	case 38:
		if ($('li.selected', ul).prev().size()==1)
			$('li.selected', ul).removeClass('selected').prev().addClass('selected');
		else
		{
			$('li.selected', ul).removeClass('selected')
			$('li:last', ul).addClass('selected');
		}
		$(element).val($('li.selected', ul).html());
		break;
	case 40:
		if ($('li.selected', ul).next().size()==1)
			$('li.selected', ul).removeClass('selected').next().addClass('selected');
		else
		{
			$('li.selected', ul).removeClass('selected')
			$('li:first', ul).addClass('selected');
		}
		$(element).val($('li.selected', ul).html());
		break;
	case 13:
		//$(ul).slideUp();
		$(ul).animate({height:'0px', opacity:'0'}, 1000, "swing", function(){$(ul).hide()});
		break;
	case 27:
		//$(ul).slideUp();
		$(ul).animate({height:'0px', opacity:'0'}, 1000, "swing", function(){$(ul).hide()});
		break;
	default:
		if ((event.keyCode>=48 && event.keyCode<=105) || event.keyCode==8 || event.keyCode==46)
		{
			//if ($('li.loading', ul).size()==0 && $(element).val()!='')
				//$(ul).html('<li class="loading"></li>');
			clearTimeout(timeoutId);
			var aflu = function(){ajaxSuggestionsLookUp(element, ul)}
			if ($(element).val()!='')
				timeoutId=setTimeout(aflu,500);
			else
			{
				//$(ul).slideUp();
				$(ul).animate({height:'0px', opacity:'0'}, 1000, "swing", function(){$(ul).hide()});
			}
		}
	}
    event.returnValue=false;
    event.cancel = true;
}

function ajaxSuggestionsLookUp(element, ul)
{
	var value = $(element).val();
//	var valueArr=value.split(' ');
//	value=valueArr.pop();
	var height;
	if (value.length>0)
	{
		//$(ul).slideDown();
		
		$.post('search.php',{action:'suggest',value:value}, function(data){
				if (data!='')
				{
//					$(ul).slideUp(0).html(data).slideDown();
					$(ul).html(data);
					
					height = getHiddenHeight(ul);
					$(ul).animate({height:height, opacity:'1'});
				}
				else
				{
					//$(ul).slideUp();
					$(ul).animate({height:'0px', opacity:'0'}, 1000, "swing", function(){$(ul).hide()});
				}
				$('li',ul).mouseover(function(){
					$('li.selected',ul).removeClass('selected');
					$(this).addClass('selected')
				}).mouseout(function(){
					$(this).removeClass('selected');
				}).mouseup(function(){
					$(element).val($(this).text().replace(/&amp;/g, '&'));
					//$(ul).slideUp();
					$(ul).animate({height:'0px', opacity:'0'}, 1000, "swing", function(){$(ul).hide()} );
				});
		})
	}
}
function getHiddenHeight(el)
{
	$(el).css({visibility:'hidden', display:'block', height:'auto'});
	var height = $(el).height();
	$(el).css({visibility:'visible', display:'none', height:'0px'});
	return height;
}