/*
 * jQuery  arenaGkCompleta - auto completar
 * Version: 0.1.1
 *
 * Copyright (c) 2009 Eduardo Stuart <stuart.eduardo@gmail.com>
 * http://arenageek.com
 *
 * Dual licensed under the MIT and GPL licenses 
 * (This means that you can choose the license that best suits your project, and use it accordingly):
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 */
(function($)
{
	$.fn.arenaGkCompleta = function(url_use,opcoes){
		
		var defaults = {
			defValue:'Pesquisar por?',//Valor default a ser exibido no input
			idInput:'buscarInput', //id do input 
			nameInput:'buscarInput', //name do input
			minCaracteres:3, //minimo de caracteres para efetuar iniciar a pesquisa
			msgErro:'Erro ao pesquisar. Tente novamente', //mensagem de erro caso ocorra algum na consulta
			boxResponses:'respostas', //div de resultados (id)
			showLoader:true, //exibe mensagem caso a pesquisa demore
			loading:'Aguarde carregando...', //mensagem a ser exibida caso a pesquisa demore
			classCancel:'lnkcancelar'
		};	
		
		var opts = $.extend(defaults,opcoes);
		
		var addInput = function(o,ob){
			var elem = $('<input>').attr({'type':'text','name':o.nameInput,'value':o.defValue,'id':o.idInput})
			ob.append(elem);
			$(elem).focus(function(){
				var valor = jQuery.trim($(this).val());
				if(valor == o.defValue) $(this).val("");
			});
			$(elem).blur(function(){
				var valor = jQuery.trim($(this).val());
				if(valor == "") $(this).val(o.defValue);
			});
			$(elem).keyup(function(){
				var valor = jQuery.trim($(this).val());
				var resposta = $('#'+o.boxResponses);
				if(valor.length > o.minCaracteres){
					if(o.showLoader == true){
						addToResults(o,o.loading,ob);
					}
					doPesquisa(o,$(this));
					$('.'+ob.attr("class")+' .'+o.classCancel).fadeIn("slow");
				}else{
					resposta.slideUp("slow");
					$('.'+ob.attr("class")+' .'+o.classCancel).fadeOut("slow");
				}
			});
		}
		
		var addCancelButton = function(o,ob){
			var str = o.strTitleCancelar;
			var btn = $('<div>').attr({'class':o.classCancel}).css({'display':'none'});
			var lnk = $('<a>').attr({'href':'#cancelar'}).text("x");
			ob.append(btn);
			$(btn).append(lnk);
			$(lnk).click(function(){
				var respostas = $('#'+o.boxResponses);
				respostas.slideUp("slow");
				respostas.html("");
				$('.'+ob.attr("class")+' .'+o.classCancel).fadeOut("slow");
			});
		}
		
		var addBoxResults = function(o,ob){
			var results = $('<div>').attr({'id':o.boxResponses});
			ob.append(results);	
		}
			
		var doPesquisa = function(o,ob){
			var dados = o.nameInput+'='+ob.val();
			$.ajax({
				type: "POST",
				url: url_use,
				data: dados,
				success: function(msg){
					addToResults(o,msg,ob);
				},
				error:function(){
					addToResults(o,o.msgErro,ob);
				}
			});
	
		}
	
		var addToResults = function(o,r,ob){
			var resultados = $('#'+o.boxResponses);
			if(r){
				resultados.html(r);
				resultados.slideDown("slow");
				clicaCompleta(o,ob);
			}
		}
		
		var clicaCompleta = function(o,ob){
			var el = $('#'+o.boxResponses+' a');
			var inputCompletar = $("#"+o.boxResponses);
			jQuery.each(el,function(){
				$(this).click(function(){
					var valor = $(this).attr("name");
					if(valor){
						$("#"+o.idInput).val(valor);
					}
					inputCompletar.slideUp("slow");
					inputCompletar.html("");
					$('.'+o.classCancel).fadeOut("slow");
					return false;
				});
			});
		}
	
		return this.each(function() {
			$this = $(this);
			var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
			$this.css({position: 'relative'});
			addInput(o,$this);
			addBoxResults(o,$this);
			addCancelButton(o,$this);
		});
	};
})(jQuery); 