/*Para que esto funcione necesitaremos algunas funciones...

-El objeto request_http.
-La función eliminar_contenido
-La función montar_elemento (la que tiene "padre" en el prototipo).
-La clase clear.
-El archivo php de las peticiones.
-Una función de callback, muy importante.
-paginacion.php
*/
	
/*
En primer lugar vamos a definir las capas que tiene el trasto. La estructura sería...

	Contenedor
		Titulo
		Buscador
			Filtros
			Botonera
		Resultados
			Lineas
				Nombre
				Inputs
		Pie
			Mensajes
			Paginador

Ahora, cosas importantes...
La función de callback, hay que definir una. Al final del archivo tenemos un ejemplo
que se llama c_b_input. Básicamente recibirá la capa contenedora y el id y con eso
montaremos que es lo que tiene que hacer (porque cada uno puede comportarse de
forma distinta).
Sin esta función simplemente no hay nada en el campo de los inputs porque también
define qué es lo que debe mostrarse.
*/

function caja_buscador()
{
	//Privado...
	var contenedor=null;
	var contenedor_titulo=null;
	var contenedor_buscador=null;
	var contenedor_resultados=null;
	var contenedor_pie=null;
	var funcion_input=null;
	var filtro_extra=null;
	var aquello=this;
	var referencia_tabla=null;

	/*
	Métodos privilegiados: pueden acceder a los miembros privados y son accesibles al exterior.	
	*/

	//Esta sirve para poner el título		
	this.poner_titulo= function(temp_titulo)
	{
		contenedor_titulo.innerHTML=temp_titulo;
	}

	//Esta otra añade un campo de filtrado de tipo texto.
	this.poner_filtro_texto=function(texto, nombre)
	{
		var contenedor_filtro=montar_elemento('div', 'contenedor', '', contenedor_buscador.childNodes[0]);			
			var texto_filtro=montar_elemento('span', 'texto_filtro', texto, contenedor_filtro);
			var input_filtro=montar_elemento('input', 'input_texto', '', contenedor_filtro);
			input_filtro.name=nombre;
	}

	//Esta setea el mensaje...
	this.poner_mensaje=function(temp_mensaje)
	{
		contenedor_pie.childNodes[0].innerHTML=temp_mensaje;
	}

	//Esta añade el botón de acción.
	this.poner_boton=function(texto)
	{
		//montar_elemento('input', 'boton_buscar', '', contenedor_buscador.childNodes[1]); //Esto no funcionaría gracias al IE...
		var accion=document.createElement('input')
		accion.className='boton_buscar';
		accion.type='button';
		if(texto)
		{
			accion.value=texto;	
		}
		accion.onclick=function() {ejecutar_busqueda();}
		contenedor_buscador.childNodes[1].appendChild(accion);
	}
		
	//Esto pone el contenido de la paginacion...
	this.limpiar_paginacion=function()
	{
		var contenedor_paginacion=contenedor_pie.childNodes[1];
		eliminar_contenido(contenedor_paginacion);
	}

	this.establecer_paginacion=function(anterior, siguiente, actual, total)
	{
		var contenedor_paginacion=contenedor_pie.childNodes[1];
		eliminar_contenido(contenedor_paginacion);

		if(anterior!=-1)
		{
			var contenedor_anterior=montar_elemento('div', 'pag_anterior', null, contenedor_paginacion);

			var capa_anterior=montar_elemento('img', '', null, contenedor_anterior); 
			capa_anterior.src='img/anterior.gif';
			capa_anterior.onclick=function(){ejecutar_busqueda(anterior);};
		}

		if( anterior!=-1 || siguiente!=-1) 
		{
			var capa_guia=montar_elemento('div', 'pag_actual', actual+' de '+total, contenedor_paginacion);
		}

		if(siguiente!=-1)
		{
			var contenedor_siguiente=montar_elemento('div', 'pag_siguiente', null, contenedor_paginacion);

			var capa_siguiente=montar_elemento('img', '', null, contenedor_siguiente); 
			capa_siguiente.src='img/siguiente.gif';
			capa_siguiente.onclick=function(){ejecutar_busqueda(siguiente);};
		}
	}

	//Esto setea el callback para la función que pondrá el input que sea... En este mismo archivo tenemos una función de ejemplo llamada c_b_input.
	this.poner_callback_input=function(original)
	{
		funcion_input=original;
	}

	//Esto pone un filtro extra, una función externa que nos añada alguna cosa más a la url a la que se realizará la petición.	
	this.poner_filtro_extra=function(original)
	{
		filtro_extra=original;
	}
	
	//Esta función establece la referencia a la tabla... Sin referencia no hay buscador.
	this.establecer_referencia_tabla=function(referencia)
	{
		referencia_tabla=referencia;
	}

	//Esta crea el objeto. En esta función, 'padre' no es un id sino el elemento ya referenciado.
	this.crear_contenedor= function(contenedor_clase, padre)
	{
		if(!padre) return false;
		else
		{
			var contenedor_temp=montar_elemento('div', contenedor_clase, '', padre);
		
				var titulo=montar_elemento('div', 'titulo', '', contenedor_temp);
				
				var buscador=montar_elemento('div', 'buscador', '', contenedor_temp);
					var filtros=montar_elemento('div', 'filtros', '', buscador);
					var botonera=montar_elemento('div', 'botonera', '', buscador);
					montar_elemento('div', 'clear', '', buscador);
			
				var resultados=montar_elemento('div', 'resultados', '', contenedor_temp);
								
				var pie=montar_elemento('div', 'pie', '', contenedor_temp);
					var mensajes=montar_elemento('div', 'mensajes', '', pie);
					var paginador=montar_elemento('div', 'paginador', '', pie);
					montar_elemento('div', 'clear', '', pie);
			
				var clear=montar_elemento('div', 'clear', '', contenedor_temp);

			//Asignamos las variables...
			contenedor=contenedor_temp;
			contenedor_titulo=titulo;
			contenedor_buscador=buscador;
			contenedor_resultados=resultados;
			contenedor_pie=pie;

			return true;
		}
	}

	this.forzar_busqueda=function()
	{
		ejecutar_busqueda();
	}

	/*
	Funciones "privadas", no accesibles al mundo exterior...
	*/
	
	//Ejecuta la búsqueda...
	function ejecutar_busqueda(d)
	{
		if(!referencia_tabla) 
		{
			alert('Establecer referencia a tabla');
			return false;
		}
		else
		{
			var peticion=new request_http;
			var url='peticiones/caja_buscador.php?modo=buscar&a='+referencia_tabla;
			var filtros=contenedor_buscador.childNodes[0];

			//Tenemos filtros?. Cada uno está compuesto de una capa y dentro ya el texto y los inputs..
			if(filtros.hasChildNodes())
			{
				var i=0;
				for(i=0; i<filtros.childNodes.length; i++)
				{
					url+='&b[]='+filtros.childNodes[i].childNodes[1].value;
				}		
			}

			//Tenemos algún filtro extra??? Reservamos la variable 'c' para este filtro.
			if(filtro_extra)
			{
				url=filtro_extra(url);
			}

			//Finalmente la paginacion...
			if(d)
			{
				url+='&d='+d;
			}

			peticion.cargar
			(
				url,
				function(resultado)
				{
					//alert(url, resultado);
					if(resultado.substr(0, 2)=='si')
					{
						eval(resultado.substr(2));
					}
					else	
					{
						alert('Ha ocurrido un error en el servicio. Por favor, intente realizar la accion mas tarde');
					}
				}	
			)
		}

	}

	function limpiar_resultados()
	{
		eliminar_contenido(contenedor_resultados);
	}

	//Esta crea una linea de resultados.
	function crear_linea(nombre, id, funcion)
	{
		var linea_resultados=montar_elemento('div', 'linea', '', contenedor_resultados);
			var campo_nombre=montar_elemento('div', 'nombre', nombre, linea_resultados);
			var campo_inputs=montar_elemento('div', 'inputs', '', linea_resultados);

			//Si tenemos funcion de input vamos a mandar la función que la establece...
			if(funcion_input)
			{
				funcion_input(campo_inputs, id);
			}

			montar_elemento('div', 'clear', '', linea_resultados);
	}
}

function c_b_input(campo, id)
{
	campo.innerHTML=id+'_COSA';
	campo.onclick=function()
	{
		alert('Voy a borrar la linea con el id '+id);
		var linea=campo.parentNode;
		eliminar_contenido(linea)
		linea.parentNode.removeChild(linea);
	}
}
