//INICIALIZACIÓN DE VARIABLES GLOBALES
var numPagina = 0; 
var numPaginas = 0;
var numResultadosPorPagina=0;
var numResultados=0;
var filtro="";
var nombreBusquedaFiltrada="";
var orderBy="";

/**
 * Este método se encarga de realizar la petición de objetos JSON a la parte servidora
 * @param url. Url servidora con todos los parÁmetros necesarios
 */
function peticionJSON(url){
	// Creamos la petición json. Le ponemos el parámetro callback
	//para que en el retorno se llame su función correspondiente
	bObj = new JSONscriptRequest(url);
	//Construimos el objeto json
	bObj.buildScriptTag();
	//Realizamos la petición a la parte servidora
	bObj.addScriptTag();
}

function cargarPaginaAnteriorAdvanced(){
	if(numPagina>0){
		cargarPaginaAdvanced(numPagina-1, orderBy, filtro, numResultados, nombreBusquedaFiltrada);
	}
}
/**
 * Se encarga de carga los datos de la pagina anterior
 */
function cargarPaginaAnterior(){
	if(numPagina>0){
		cargarPagina(numPagina-1, orderBy, filtro, numResultados, nombreBusquedaFiltrada);
	}
}

function cargarPaginaSiguienteAdvanced(coincidenciasTotales){
	if((parseInt(numPagina)+1)<coincidenciasTotales){
		cargarPaginaAdvanced(parseInt(numPagina)+1, orderBy, filtro, coincidenciasTotales, nombreBusquedaFiltrada);
	}
}

/**
 * Se encarga de carga los datos de la pagina siguiente
 * @param coincidenciasTotales. Nº de resultados
 */
function cargarPaginaSiguiente(coincidenciasTotales){
	if((parseInt(numPagina)+1)<coincidenciasTotales){
		cargarPagina(parseInt(numPagina)+1, orderBy, filtro, coincidenciasTotales, nombreBusquedaFiltrada);
	}
}

/**
 * Se encarga de cambiar el nº de resultados por página, y de preseleccionar
 * en el otro combo el valor actual
 * @param idCombo. Id del combo que solicita el cambio de paginacion
 * @param idOtroCombo. Id del otro combo
 * @param coincidenciasTotales. Nº de resultados
 * @param coincidenciasTotales. Nº de resultados
 */
function cambiarPaginacion(idCombo, idOtroCombo, coincidenciasTotales, advanced){

	numResultadosPorPagina = parseInt($(idCombo).value);
	
	for(x=0; x < $(idOtroCombo).length; x++){
		if($(idOtroCombo)[x].value==$(idCombo).value){
			$(idOtroCombo)[x].selected = true;
		}
	}
	if (advanced){
		cargarPaginaAdvanced(0, orderBy, filtro, numResultados>0 ? numResultados : coincidenciasTotales, nombreBusquedaFiltrada);
	} else {
		cargarPagina(0, orderBy, filtro, numResultados>0 ? numResultados : coincidenciasTotales, nombreBusquedaFiltrada);
	}
		
}

/**
 * Se encarga de ordenar los resultados segun filtro
 * @param ordenacion. Indica cómo se deben ordenador los resultados
 */
function ordenarResultados(ordenacion, coincidenciasTotales){
	cargarPaginaAdvanced(0, ordenacion, filtro, numResultados>0 ? numResultados : coincidenciasTotales, nombreBusquedaFiltrada);
}

/**
 * Se encarga de refinar la busqueda al pinchar en algunos de los enlaces de la izquierda
 * @param id. Id del combo que solicita el cambio de paginacion
 * @param pagina. Nº de pagina en la que estamos
 * @param ordenacion. Indica cómo se deben ordenador los resultados
 * @param filtroAplicado. Indica el filtro
 * @param coincidenciasTotales. Nº de resultados
 * @param descBusquedaFiltrada. Descripción de la búsqueda filtrada
 */
function refinarBusqueda(id, pagina, ordenacion, filtroAplicado, coincidenciasTotales, descBusquedaFiltrada){

	cargarPagina(pagina, ordenacion, filtroAplicado, coincidenciasTotales, descBusquedaFiltrada);
}

function refinarBusquedaAdvanced(id, pagina, ordenacion, filtroAplicado, coincidenciasTotales, descBusquedaFiltrada){

	cargarPaginaAdvanced(pagina, ordenacion, filtroAplicado, coincidenciasTotales, descBusquedaFiltrada);
}

function cargarPaginaAdvanced(pagina, ordenacion, filtroAplicado, coincidenciasTotales, descBusquedaFiltrada){
	
	if(descBusquedaFiltrada!=""){
		nombreBusquedaFiltrada = descBusquedaFiltrada;
	}
	numPagina = parseInt(pagina);
	if($("resultadosPorPaginaTop")){
		myselect = $("resultadosPorPaginaTop").value;
		numResultadosPorPagina = parseInt(myselect);
	} else {
		numResultadosPorPagina = 20;
	}
	var select_media_txt = "";
	var select_media = $("select_media").value;
	if(select_media!=="") select_media_txt = "&select_media="+select_media;
	numResultados = coincidenciasTotales;
	numPaginas = parseInt(numResultados/numResultadosPorPagina)+
		(parseInt(numResultados)%numResultadosPorPagina!=0 ? 1:0);
    
	if(ordenacion!=''){
		orderBy = ordenacion;
	}
	filtro = filtroAplicado;
	eliminarObjetosAnteriores($("listaResultados"));
	//eliminarObjetosAnteriores($("listaResultados"));
	//el mï¿½todo escape es para codificar el valor, como el urlencode
	//Llamamos a la funciï¿½n encargada de realizar la peticiï¿½n JSON
	
	insertarImagenEnCapaProcesando();
	//Antes del bug::getConversacionesCoincidentesAdvanced ahora getConversacionesCoincidentes
	var query = urlServer+"?funcion=getConversacionesCoincidentes&pagina="+
		pagina+"&mostrarResultadosPorPagina="+numResultadosPorPagina+"&search_input="+
		escape($("search_input").value)+select_media_txt+"&orderBy="+escape(ordenacion)+"&filtroBusqueda="+escape(filtro)+"&callback=mostrarResultadosPaginaAdvanced";
		
	peticionJSON(query);
}


/**
 * Se encarga de cambiar la pagina y de cargar nuevos resultados. Para ello
 * llama a la parte servidora, y el resultado lo formateará el método mostrarResultadosPagina
 * @param pagina. Nº de pagina en la que estamos
 * @param ordenacion. Indica cómo se deben ordenador los resultados
 * @param filtroAplicado. Indica el filtro
 * @param coincidenciasTotales. Nº de resultados
 * @param descBusquedaFiltrada. Descripción de la búsqueda filtrada
 */
function cargarPagina(pagina, ordenacion, filtroAplicado, coincidenciasTotales, descBusquedaFiltrada){
	
	if(descBusquedaFiltrada!=""){
		nombreBusquedaFiltrada = descBusquedaFiltrada;
	}
    numPagina = parseInt(pagina);
	numResultadosPorPagina = parseInt($("resultadosPorPaginaTop").value);
	numResultados = coincidenciasTotales;
	numPaginas = parseInt(numResultados/numResultadosPorPagina)+
		(parseInt(numResultados)%numResultadosPorPagina!=0 ? 1:0);

	if(ordenacion!=''){
		orderBy = ordenacion;
	}
	filtro = filtroAplicado;

	eliminarObjetosAnteriores($("listaResultados"));
	//el mï¿½todo escape es para codificar el valor, como el urlencode
	//Llamamos a la funciï¿½n encargada de realizar la peticiï¿½n JSON
	
	insertarImagenEnCapaProcesando();
	
	peticionJSON(urlServer+"?funcion=getConversacionesCoincidentes&pagina="+
		pagina+"&mostrarResultadosPorPagina="+numResultadosPorPagina+"&search_input="+
		escape($("search_input").value)+"&orderBy="+escape(ordenacion)+"&filtroBusqueda="+escape(filtro)+"&callback=mostrarResultadosPagina");
}

/**
 * Metodo que recoge el objeto json devuelto por la parte servidora, y se encarga
 * de mostrarlo en pantalla usando DOM
 * @param jsonData. Objeto json
 */
function mostrarResultadosPagina(jsonData, advanced){
    if(!advanced)advanced = false;

	//Compruebo si se han devuelto resultados
  	if (jsonData != null) {
		
		matriz = eval(jsonData);
		eliminarImagenEnCapaProcesando();
		
		//Bucle q recorre la matriz de resultados
		for(x=0; x<matriz.length; x++){

			var tr = document.createElement("tr");
			var tdTitulo = document.createElement("td");
			var tdFecha = document.createElement("td");
			//var tdTipo = document.createElement("td");
			var br = document.createElement("br");
			var strong = document.createElement("strong");

			tr.setAttribute("class",x%2!=0 ? "tresult-even":"tresult-odd");
						
			tdTitulo.innerHTML = "<a href=\"view-text.php?tid="+matriz[x].id+"&chid="+matriz[x].chid+"&w="+
				escape($("search_input").value)+"\"><strong>"+unescape(matriz[x].tittle).replace(/[+]/g,' ')+
				"</strong></a><br><a href=\"view-text.php?tid="+matriz[x].id+"&chid="+matriz[x].chid+"&w="+
				escape($("search_input").value)+"\" class=\"brief-description\">"+unescape(matriz[x].paragraph).replace(/[+]/g,' ')+"</a>";	
				
			/*
			Eliminado de momento
			if(matriz[x].tipo!="" && matriz[x].tipo!=null){
				tdTipo.appendChild(document.createTextNode(unescape(matriz[x].tipo).replace(/[+]/g,' ')));
			}
			else{
				tdTipo.appendChild(document.createTextNode(""));
			}*/
			
			tdFecha.setAttribute("class","dtype");
			if(matriz[x].date!="" && matriz[x].date!=null){
				tdFecha.appendChild(document.createTextNode(unescape(matriz[x].date).replace(/[+]/g,' ')));
			}
			else{
				tdFecha.appendChild(document.createTextNode("--"));
			}
			
			tr.appendChild(tdTitulo);
			tr.appendChild(tdFecha);
			//tr.appendChild(tdTipo);

			$("listaResultados").appendChild(tr);
		}

		eliminarObjetosAnteriores($("pages_detailTop"));
		eliminarObjetosAnteriores($("pages_detailBottom"));

		limI = (numPagina*numResultadosPorPagina)+1;
		limS = numResultadosPorPagina+(numPagina*numResultadosPorPagina);
		if(limS>numResultados){
			limS = numResultados;
		}
		texto = "Results "+limI+" - "+limS+" of "+numResultados+" "+nombreBusquedaFiltrada+
			" files "+unescape(matriz[0].time).replace(/[+]/g,' ');
		
		$("pages_detailTop").appendChild(document.createTextNode(texto));
		$("pages_detailBottom").appendChild(document.createTextNode(texto));

		actualizarValoresPaginador("paginadorTop", advanced);
		actualizarValoresPaginador("paginadorBottom", advanced);
	}
}
function mostrarResultadosPaginaAdvanced(jsonData, advanced){
	
    if(!advanced)advanced = false;

	//Compruebo si se han devuelto resultados
  	if (jsonData != null) {
		
		matriz = eval(jsonData);
		eliminarImagenEnCapaProcesando();
		
		//Bucle q recorre la matriz de resultados
		for(x=0; x<matriz.length; x++){

/*
						<?php if ($result[$x]["mytype"]=="text"){
								$link = "view-text-2.php?tid=".$result[$x]["id"]."&chid=".$result[$x]["chid"]."&w=".urlencode($_REQUEST["search_input"]);
							}else if ($result[$x]["mytype"]=="audio"){ 
								$link = "listen-audio/".$result[$x]["link"].".php";
							}else if ($result[$x]["mytype"]=="video"){
								$link = "view-video/".$result[$x]["link"].".php"; 
							}
	
							?>
						    <td>
							<img src="http://images.jkrishnamurti.com/images/krishnamurti-teachings/<?=$result[$x]["mytype"] ?>_icon.gif" style="margin:5px" />
							</td>
							<td><a href="<?= $link ?>">
							<strong><?=$result[$x]["tittle"]?></strong></a><br />
							<a href="view-text-2.php?tid=<?=$result[$x]["id"]?>&chid=<?=$result[$x]["chid"]?>&w=<?=urlencode($_REQUEST["search_input"])?>" class="brief-description"><?=$result[$x]["paragraph"]?></a>
							</td>
							</tr> 
*/			
			if(matriz[x].tittle == null)matriz[x].tittle = matriz[x].programCode;
			var link = "view-text.php?tid="+matriz[x].id+"&chid="+matriz[x].chid+"&w="+
				escape($("search_input").value);
			
			var ocurr = "";
			var icon = "text";
			if(matriz[x].alink){ link = "listen-audio/"+matriz[x].alink+".php"; icon = "audio"}
			if(matriz[x].vlink){ link = "view-video/"+matriz[x].vlink+".php"; icon = "video"}
			
			if(matriz[x].hits) {
								 ocurr = ' <span class="occr">(Ocurrences: '+matriz[x].hits+')</span>';	
							}
			
			//visitas a este contenido
			var total_visits='';
			if(matriz[x].total_visits){
				total_visits='<span id="result-views"><span id="result-view-count">'+matriz[x].total_visits+'</span> viewed</span><br/>';
			}
			
			//if(matriz[x].mytype === "text"){
				var parr = unescape(matriz[x].paragraph).replace(/[+]/g,' ');
			//} else {
			
			//}
			
			var tr = document.createElement("tr");
			var tdTipo = document.createElement("td");
			var imgTipo = document.createElement("img");
			imgTipo.src = "http://images.jkrishnamurti.com/images/krishnamurti-teachings/"+icon +"_icon.gif"; 
			imgTipo.style.margin = "5px";
			var tdTitulo = document.createElement("td");
			var tdFecha = document.createElement("td");
			//var tdTipo = document.createElement("td");
			var br = document.createElement("br");
			var strong = document.createElement("strong");
			var tdHits = document.createElement("td");
			tdHits.innerHTML = matriz[x].date;
			tr.setAttribute("class",x%2!=0 ? "tresult-even":"tresult-odd");
						
			tdTitulo.innerHTML = "<a href=\""+link+"\"><strong>"+unescape(matriz[x].tittle).replace(/[+]/g,' ')+
				"</strong></a>"+ocurr+"<br>"+total_visits+"<a href=\""+link+"\" class=\"brief-description\">"+parr+"</a>";	
				
			/*
			Eliminado de momento
			if(matriz[x].tipo!="" && matriz[x].tipo!=null){
				tdTipo.appendChild(document.createTextNode(unescape(matriz[x].tipo).replace(/[+]/g,' ')));
			}
			else{
				tdTipo.appendChild(document.createTextNode(""));
			}*/
			
			tdFecha.setAttribute("class","dtype");
			if(matriz[x].date!="" && matriz[x].date!=null){
				tdFecha.appendChild(document.createTextNode(unescape(matriz[x].date).replace(/[+]/g,' ')));
			}
			else{
				tdFecha.appendChild(document.createTextNode("--"));
			}
			
			tdTipo.appendChild(imgTipo);
			tr.appendChild(tdTipo);
			
			tr.appendChild(tdTitulo);
			tr.appendChild(tdHits);
			//tr.appendChild(tdFecha);
			//tr.appendChild(tdTipo);

			$("listaResultados").appendChild(tr);
		}

		eliminarObjetosAnteriores($("pages_detailTop"));
		eliminarObjetosAnteriores($("pages_detailBottom"));

		limI = (numPagina*numResultadosPorPagina)+1;
		limS = numResultadosPorPagina+(numPagina*numResultadosPorPagina);
		if(limS>numResultados){
			limS = numResultados;
		}
		texto = "Results "+limI+" - "+limS+" of "+numResultados+" "+nombreBusquedaFiltrada+
			" files "+unescape(matriz[0].time).replace(/[+]/g,' ');
		
		$("pages_detailTop").appendChild(document.createTextNode(texto));
		$("pages_detailBottom").appendChild(document.createTextNode(texto));

		actualizarValoresPaginador("paginadorTop", true);
		actualizarValoresPaginador("paginadorBottom", true);
	}
}

/**
 * Metodo q se va a encargar de crear la paginacion. Crea una ventana de paginas
 * dependiendo de en que pagina nos encontremos. Esta ventana tendra un 
 * tamaño de 5
 * @param idPaginador. Id de la capa que contiene la paginacion
 */
function actualizarValoresPaginador(idPaginador, advanced){
	
	//Elimino todos los objetos q hubieran en la capa
	eliminarObjetosAnteriores($(idPaginador));

	//Solo mostraremos el paginados si hay mas de una pagina
	if(numPaginas>1){

	//Creo una capa donde metere toda la info
	var div = document.createElement("div");
	
	//Compruebo si estoy en la primera pagina para poner link o no
	if(numPagina>0){

		var link = document.createElement("a");
		link.href="#";
		if(advanced){
			link.onclick=function(){cargarPaginaAnteriorAdvanced();};
		} else {
			link.onclick=function(){cargarPaginaAnterior();};
		}
		
		link.appendChild(document.createTextNode(" Previous "));
		div.appendChild(link);
	
		var link = document.createElement("a");
		link.href="#";
		
		if(advanced){
			link.onclick=function(){cargarPaginaAdvanced(0, orderBy, filtro, numResultados, nombreBusquedaFiltrada);};
		} else {
			link.onclick=function(){cargarPagina(0, orderBy, filtro, numResultados, nombreBusquedaFiltrada);};
		}
		link.appendChild(document.createTextNode("1 | "));
		div.appendChild(link);
	
	}
	//Si entro aqui, es q esto en la primera pagina, por lo q no pongo link
	else{
	    var span = document.createElement("span");
	    span.setAttribute("class","selected");
	    span.appendChild(document.createTextNode("1 | "));
	    div.appendChild(span);
	}
	
	//Compruebo si va a aparecer el n de pagina 2, pq si estamos en la 5 o
	//superior, la pagina 2 ya no se mostrar, ya q solo mostraremos 5 paginas a excepcion de los limites
	if(numPagina>=4){
	    var span = document.createElement("span");
	    span.setAttribute("class","selected");
	    span.appendChild(document.createTextNode("..."));
	    div.appendChild(span);
	}
	
	//Calculo los topes de la ventana de paginacion
	topeInf = numPagina-2;
	topeSup = numPagina+2;
	if(numPagina<2){
		topeInf = 1;
		topeSup = numPagina+4;
	}
	else if(numPagina+2>=numPaginas){
		topeInf = numPagina-4;
		topeSup = numPaginas-2;
	}
	

	//Bucle q va a imprimir la ventana de paginacion actual.
	//5 paginas
	for(x=topeInf; x<numPaginas-1 && x<=topeSup; x++){
		
		//alert(numPagina+"*"+x);
		if(x>0){
			if(x==numPagina){
				var span = document.createElement("span");
				span.setAttribute("class","selected");
				span.appendChild(document.createTextNode(""+(x+1)+" | "));
				div.appendChild(span);
			}else{
				var link = document.createElement("a");
				link.href="#";
				link.id=x;
				if(advanced){
					link.onclick=function(){cargarPaginaAdvanced(this.id, orderBy, filtro, numResultados, nombreBusquedaFiltrada);};
				} else {
					link.onclick=function(){cargarPagina(this.id, orderBy, filtro, numResultados, nombreBusquedaFiltrada);};
				}
				
				link.appendChild(document.createTextNode(""+(x+1)+" | "));
				div.appendChild(link);
			}
		}
	}

	//Compruebo si va a aparecer el n de la penultima pagina. Para q no
	//aparezca, la pagina actual debe ser como poco 5 menos
	if(numPagina<parseInt(numPaginas)-4){
	    var span = document.createElement("span");
	    span.setAttribute("class","selected");
	    span.appendChild(document.createTextNode("..."));
	    div.appendChild(span);
	}

	//Compruebo q no este en la ultima pagina, para poner link o no
	if(numPagina<parseInt(numPaginas)-1){

		var link = document.createElement("a");
		link.href="#";
		if(advanced){
			link.onclick=function(){cargarPaginaAdvanced(parseInt(numPaginas)-1, orderBy, filtro, numResultados, nombreBusquedaFiltrada);};
		} else {
			link.onclick=function(){cargarPagina(parseInt(numPaginas)-1, orderBy, filtro, numResultados, nombreBusquedaFiltrada);};
		}
		
		link.appendChild(document.createTextNode(""+parseInt(numPaginas)+" "));
		div.appendChild(link);

		var link = document.createElement("a");
		link.href="#";
		if(advanced){
			link.onclick=function(){cargarPaginaSiguienteAdvanced(numResultados);};
		} else {
			link.onclick=function(){cargarPaginaSiguiente(numResultados);};
		}
		
		link.appendChild(document.createTextNode("Next "));
		div.appendChild(link);
	}
	//Estamos en la ultima pagina, y por tanto no ponemos link
	else if(numPaginas>1){
	    var span = document.createElement("span");
	    span.setAttribute("class","selected");
	    span.appendChild(document.createTextNode(""+parseInt(numPaginas)+" "));
	    div.appendChild(span);
	}
	
	//Añado a la capa, la capa recien creada	
    	$(idPaginador).appendChild(div);

	}//Fin de la comprobacion de numero de paginas
}
function insertarImagenEnCapaProcesando(){
	var capaProc = document.getElementById('listaResultados');//$("listaResultados");
    
	//Controlo q no me aparezcan mas de un relojito o frase
	//if(!capaProc.hasChildNodes())
	{

		var tr = document.createElement("tr");
		var td = document.createElement("td");
		td.setAttribute("align", "center");
		td.setAttribute("colspan", "3");
		
		//Creo la imagen q contendrá el gif animado
		var img = document.createElement("img");
		img.src = "/images/krishnamurti-teachings/ajax-loader.gif";
		img.border=0;
	    img.setAttribute("align","center");

		td.appendChild(img);
		tr.appendChild(td);
		capaProc.appendChild(tr);
	}
}

function eliminarImagenEnCapaProcesando(){

	var capaProc = $("listaResultados");
	eliminarObjetosAnteriores(capaProc);
}

function eliminarObjetosAnteriores(objetoPadre){
	//Borro la ï¿½ltima etiqueta
//	if(objetoPadre.hasChildNodes())
	{
		while(objetoPadre.hasChildNodes()){
			//if(objetoPadre.id=="paginadorTop"){
				//alert("borrando paginador "+objetoPadre.lastChild.id);
			//}
			objetoPadre.removeChild(objetoPadre.lastChild);
		}
	}
}
