(function($){
	$.fn.autocomplecho = function(options)
	{
		var defaults = {
			'item_per_div': 1,
			'minlenght' : 1,
			'input_text': 'textbox',
			'div_results' :'div output result',
			'height_distance_input' : 5,
			'class_div_results' : 'class to be output',
			'url_caller_ajax' : 'path of file to be called',
			'name_query_string' : 'query string element',
			'name_item' : 'item',
			'close_suggest' : 5000,
			'class_li_element' : 'li class element suggest'
		};
		
		var options = $.extend(defaults, options);
		return this.each(function(){
			var element_id = $(this);
			$(options.input_text).keyup(function()
			{
				var value = $(element_id).attr('value');
				if(value.length > options.minlenght)
				{
					callresults (value)
				}
			});
			
			$(options.div_results).mouseover(function()
			{
				$("li"+options.class_li_element).click(function()
				{
					var value = $(this).attr('id');
					$(options.input_text).attr('value',value);
					resetcontaineresults();
				});
				
			});
		
		function getpositionelement()
		{
			var coords =  new Array()
			var elementcoords = $(element_id).offset();
			var elementwidth = $(element_id).outerWidth();
			var elementheight = $(element_id).outerHeight();
			coords['top'] = elementcoords.top;
			coords['left'] = elementcoords.left;
			coords['width'] = elementwidth;
			coords['height'] = elementheight;
			return coords;
		}
		
		function formatresults(data)
		{
			var coords = new Array();
			coords = getpositionelement();
			var top = coords['top'] + coords['height'] + options.height_distance_input;
			var left = coords['left'];
			var style = 'position:absolute; top:'+top+'px; left:'+left+'px; width:'+coords['width']+'px;z-index :1000;';
			var div_res = $(options.div_results).attr('style',style);
			$(div_res).addClass(options.class_div_results);
			$(data).appendTo(div_res);
			$('body').append(div_res);
			setTimeout(function()
			{
				resetcontaineresults();
			},options.close_suggest);
		}
		function resetcontaineresults ()
		{
			var div_res = $(options.div_results).attr('style','');
			if($(options.class_div_results).length == 0)
			{
				$(div_res).removeClass(options.class_div_results);
				$(div_res).html('');
			}
		}
		
		function callresults (value)
		{
			$.ajax({
				type: 'GET',
				url: options.url_caller_ajax,
				data : options.name_query_string+'='+value+'&'+options.name_item+'='+options.item_per_div,
				cache: false,
				async:true,
				timeout: 3000,
				dataType : 'html',
				success : function(data)
				{
					resetcontaineresults ();
					formatresults(data);
				},
				error: function (XMLHttpRequest, textStatus, errorThrown) {
				  $("#result_prov").html('Nessun risultato');
				},
			});
		}
		});
		return this;
	}
})(jQuery);
