/**
 * @author Carlo Tasca
 * @version 1.1
 *
 * JCOMPLETER SETTINGS:
 *
 * @param {string} postUrl Server side data provider
 */
jQuery.fn.jcompleter = function(settings)
{
	var jqelement = this;
	settings = jQuery.extend({
		postUrl : "datalist.php",
		suggestionsDiv : "#suggestions",
		suggestionsBox : ".suggestionsBox",
		suggestionsDelay : 200,
		suggestionsList : "#suggestionsList",
		datalist : "#datalist",
		startCompleteAtChar : 2,
		suggestionsLimit : "*",
		zeroDataAlert : true
	},settings||{});

	function autoComplete(e)
	{
		var inputVal = jQuery(jqelement).val();
		var loc = jQuery('#slocation').val();
		inputVal.length > settings.startCompleteAtChar ? $.post(settings.postUrl, {userInput: inputVal, location : loc, qlimit : settings.suggestionsLimit}, postCallbackHandler) : hideSuggestions();
		e.stopPropagation(); // stop event propagation
	}
	
	function postCallbackHandler (serverData)
	{
		if (serverData.length > 0)
		{
			jQuery(settings.suggestionsDiv).show();
			jQuery(settings.suggestionsList).html(serverData);
		} else 
		{
			settings.zeroDataAlert ? alert('Length of data from server is zero') : '';
		}
	}
	
	function delayBlur(e)
	{
		delaySuggestions();
        e.stopPropagation(); // stop event propagation
	}
	
	function hideSuggestions()
	{
		jQuery(settings.suggestionsDiv).hide();
	}
	
	function delaySuggestions()
	{
		setTimeout(hideSuggestions, settings.suggestionsDelay);
	}
	
	jQuery(jqelement).bind('blur', delayBlur);
	jQuery(jqelement).bind('keyup', autoComplete);
}
// global function for #datalist
function setInputValue(element, completerInput)
{
	jQuery(completerInput).val($(element).html());
}
