var uiComboBox = function(target, url)
{
	this.element = $(document.getElementById(target));
	this.url = url;
	//el combobox tendra dos componentes:
	//- un campo de texto donde el usuario puede introducir
	//el parametro de busqueda, o bien donde se mostrará
	//el resultado elegido.
	//- una capa donde se mostraran los resultados de la
	//consulta relativa a los parametros de búsqueda.
	
	this.container = $("<div class=\"ui-combobox\"></div>");
	
	this.query = $(document.createElement("INPUT"));
	this.query.attr({"autocomplete":"off","type":"text","className":"ui-combobox-query-box", "id":this.element.attr("id"), "name":this.element.attr("name") });
	
	this.box = $(document.createElement("DIV"));
	this.box.attr("className","ui-combobox-results-box");
	
	this.boxif = $(document.createElement("IFRAME"));
	this.boxif.attr("id","boxif");
	this.boxif.attr("src","about:blank");
	this.boxif.attr("frameborder","0");
	
	this.container.append(this.query);
	this.container.append(this.box);
	this.container.append(this.boxif);
	//el constructor coge el elemento pasado por parametro
	//y lo sustituye por los controles del combobox:
	
	
	this.element.replaceWith(this.container);
	
	//variables de control de espera:
	this.tout = null;
	this.blurto = null;
	
	//puntero a this
	var me = this;
	
	this.search = function(q)
	{
		$.get(this.url, {'query':unescape(q)}, function(data){ me.box.html(data); $(me.box.attr("id") + " .entry").click(function(){ me.query.val($(this).text()); }); $(me.box.attr("id") + " .entry").hover(function(){ $(this).css({'backgroundColor':'#ff6','cursor':'pointer'}); }, function(){ $(this).css({'backgroundColor':'#cdf','cursor':'default'}); } ); });
	}
	
	this.hideResults = function()
	{
		this.box.html("");
		this.box.css("display","none");
		this.boxif.css("display","none");
	}
	
	this.showResults = function()
	{
		//this.box.css("display","block");
		//this.boxif.css("display","block");
	}
	
	$(this.query).keydown(function(evt)
	{
		var iASCII;
		if(evt.keyCode)
			iASCII = evt.keyCode;
		else if(evt.which)
			iASCII = evt.which;
		else return false;
		if(iASCII == 13){ this.blur(); }
	});
	
	$(this.query).keyup(function(evt)
	{
		/*if(me.tout)
		{
			clearTimeout(me.tout);
		}
		
		me.tout = setTimeout(function(){
			if(me.query.val().length > 3)
			{
				me.search(me.query.val());
				me.showResults();
			}else{
				me.hideResults();
			}
		}, 250);*/
	});
	
	$(this.query).blur(function(evt){
		me.blurto = setTimeout(function(){ me.hideResults(); }, 200);
	});
	
	$(this.query).focus(function(evt){
		if(me.query.val().length > 3)
		{
			me.search(me.query.val());
			me.showResults();
		}
	});
}
