﻿//CONFIGURACION
var url_actual = document.URL;
var dominio = ''	//dominio desde el que se ejecuta el buscador
var extension = 'php'			//extension de las paginas del site (htm o html)
//var pagina_buscador = 'index.html'	//ruta y nombre de la pagina de busqueda (con barra por delante)
var imagen_relevancia = 'punt'		//ruta y prefijo nombre de imagenes relevancia (punt_on.gif y punt_off.gif)

var color_fuente_clave = '#FF0000'

var resXpag = 5					         //numero de resultados por pagina
var color_subrayado = '#FFFF00'			//color fondo palabra clave subrayada en resultados busqueda
//FIN CONFIGURACION

var nuevas_paginas = new Array();
var cant_paginas = 0;


//variables globales
var paginaResult;
var totales			    //numero de entradas encontradas
var Pagina = ''		    //string que contendra la pagina a mostrar
var resultados = ''	    //string reusltados busqueda
var clave2			    //palabra a buscar
var res = new Array()	//guarda relevancias busqueda

var caracter = new Object(5) 
caracter[0] = 'á'
caracter[1] = 'é'
caracter[2] = 'í'
caracter[3] = 'ó'
caracter[4] = 'ú'

var caracter_nuevo = new Object(5)
caracter_nuevo[0] = 'a'
caracter_nuevo[1] = 'e'
caracter_nuevo[2] = 'i'
caracter_nuevo[3] = 'o'
caracter_nuevo[4] = 'u'

var caracter_nuevo2 = new Object(5)
caracter_nuevo2[0] = '[áa]'
caracter_nuevo2[1] = '[ée]'
caracter_nuevo2[2] = '[íi]'
caracter_nuevo2[3] = '[óo]'
caracter_nuevo2[4] = '[úu]'

//obtiene longitud de la base de datos
var longitud = BaseDatos.length

function ObtenerDominio(){
	   var partes = url_actual.split("/");
	   for(var ii =0; ii<partes.length-1; ii++){
		      dominio+=partes[ii]+"/";
		   }
	}
/*
function Busqueda(form, tipo_llamada, palabraClave, paginacion, nuevaBusqueda){
	  var cadena_comparar= "";
	  
	  if(dominio!=""){
		   ObtenerDominio();
		}
	  if(tipo_llamada == 1){		   
		      IniciaBuscador(palabraClave, paginacion, nuevaBusqueda);
		      
		  }else{  
	          if(form.criterio.value!=0){
				 var pos =  form.criterio.value;
		         var element = document.getElementById('caja_buscar');
				 element.innerHTML = "";
			     for(var ii=0; ii<BaseDatos.length ; ii++){
				        var cadena = BaseDatos[ii].split(";");
						for(var jj=0; jj<palabraClave.length; jj++){
							   cadena_comparar += cadena[pos].charAt(jj).toUpperCase();
							}
					    if(cadena_comparar == palabraClave.toUpperCase() ){
							   element.innerHTML +="<a href='"+dominio+cadena[0]+".html'>"+cadena[pos]+"</a> <br/>";
							}
							
						cadena_comparar= "";

				     }
			     if(palabraClave!="" )
			        element.style.display="block";	
				 else
				    element.style.display="none";	
			     
		      }                                 
		   }	    
	   
	}
	*/

function CerrarPaginas(){
	   for(var ii=0; ii<nuevas_paginas.length ; ii++){
			   if(nuevas_paginas[ii]){
				      nuevas_paginas[ii].close();  			   
				   }
			   
			}      
			
		var result = document.getElementById('resultados');	
		
		result.style.display="none";	
	   
	}
	

//---------------------------------------------------
function CalculaRelevancia(indice) {

	var CadenasEntrada
	var parciales = 0
	
	//divide la cadena de resultados en subcadenas y escribe los resultados
	CadenasEntrada = BaseDatos[indice].split(";")
	
	//recorre las subcadenas en busca de la clave, para asignar relevancia
	for (var n = 0; n < CadenasEntrada.length; n++) {
		if ( CadenasEntrada[n].search(clave2) != -1 ) {			
			parciales++
		}
	}

	if ( parciales != 0 ) {
		var vandera = false;
		for (var i = 0; i < res.length; i++) {
			newRes = res[i].split("|");
			if(newRes[1] == indice){
				parciales += newRes[0];
				res[i] = parciales + '|' + indice;
				vandera = true;
		    }
		}
		if(vandera == false){
		   res[ res.length ] = parciales + '|' + indice;
		   totales++;	
		}
	}
}
function CalculaRelevanciaMultiple(arrayPalabras, indice){
   for(var j =0; j<arrayPalabras.length; j++){
	  clave2 = arrayPalabras[j];
      CalculaRelevancia(indice);
   }
}

//escribe codigo HTML
function MuestraPagina( htmlData, lugar ) {
	if (document.getElementById) {
		document.getElementById(lugar).innerHTML = htmlData
	} else if (document.all) {
		document.all[lugar].innerHTML = htmlData
	} else {
		return
	}
}

//***************************************************************

function pasarVariables(palabraClave) {
   if ( palabraClave == "" ) {
	   alert("¡Introduzca cadena de búsqueda!")
	   return
  }
	
  var nuevaPagina = "resultados.html"
  nuevaPagina += "?";
  nuevaPagina += "palabraClave=" + escape(palabraClave);

  paginaResult = window.open(nuevaPagina, "newpaginaResult", "scrollbars=yes,location=no,resizable=no,width=600px, height=340px,top=250px,left=200px");
  
  paginaResult.focus();
}
//***************************************************************
//***************************************************************

function redireccionar(direccion){
	window.onerror=FuncionError;			
	window.opener.location = direccion;	
	//window.opener.location.reload();
	window.opener.focus(); 
}
function FuncionError(){
  alert("Se ha cerrado la págian principal");
  window.close();
}


// lanza proceso busqueda
// nuevaBusqueda = 0	>> buscar
// nuevaBusqueda != 0	>> usar resultados de busqueda anterior
//				   en este caso, nuevaBusqueda tiene el total	
function IniciaBuscador(palabraClave, paginacion, nuevaBusqueda) {
	
	//inicia variables globales
	var desde = 0
	var partes
	var CadenasEntrada
	var descripcion = ''
	totales = nuevaBusqueda		//a 0 si nueva busqueda
	var palabra_sin = "";
	var result = document.getElementById('resultados');
	
	
	if(dominio!=""){
		   ObtenerDominio();
		}
	//detiene busqueda si palabra clave vacia
	if ( palabraClave == "" ) {
		alert("¡Introduzca cadena de búsqueda!")
		return
	}
	
	var palabras = palabraClave.split(" o "); // nuevo
		
	if ( nuevaBusqueda == 0 ) {
		
		//borra array res
	    for ( var r=0; r < res.length; r++) {
			   res[r]=''
		   }
		   
		for(var j=0; j<palabras.length; j++){
		   //elimina acentos
		      
		   palabras[j] = allTrim(palabras[j]);
		   
		   if(palabras[j].search(" y ")!= -1){
			      
			  var palabrasY = palabras[j].split(" y ");				
		            
		      for (var x = 0; x < longitud; x++) {			
			   
			     var vandera = 0;
			     for(var jj=0; jj<palabrasY.length; jj++){
					palabrasY[jj] = allTrim(palabrasY[jj]); 
			        palabra_sin = elimina_especiales(palabrasY[jj]);			       	       
		            clave2 = new RegExp(palabra_sin, "gi") 	
					
				   	if ( BaseDatos[x].search(clave2) != -1 )
					   vandera ++;					
		         }	
			     if ( vandera == palabrasY.length ) {  				    	
				    CalculaRelevanciaMultiple(palabrasY, x);				          
			     }
		      }// fin del for para la base de datos
			     
		   }// fin del if si tiene " y "
		   else {		      	
		      palabra_sin = elimina_especiales(palabras[j]);		    
	       	       
		      //obtiene la expresion regular para la busqueda (global e ignorando case)
		      clave2 = new RegExp(palabra_sin, "gi") 		
		   
		      //busca entrada de pagina que contenga la clave
		      //recorre el array en busca de la palabra clave (en cualquier parte)		
		      for (var x = 0; x < longitud; x++) {			
			     if ( BaseDatos[x].search(clave2) != -1 ) {
				    CalculaRelevancia( x )				    
			     }
		      }
		   } // fin del else
		   
		}// fin del for cantidad de palabras...
		
		
		//ordena resultados segun relevancia
		res.sort( ordenacionNumerica )
		
	}
	
	//lista de resultados
	resultados = ''
	
	var resfinal = paginacion * resXpag + resXpag
	if ( resfinal >= res.length ) { 
		resfinal = res.length
	}
	
	for ( var n = paginacion * resXpag; n < resfinal; n++) {		
		partes = res[n].split('|')
		
		resultados += '<tr><td width="70">'
		//resultados += MuestraRelevancia( partes[0] )
		
		CadenasEntrada = BaseDatos[ partes[1] ].split(";")
	//	resultados += '</td><td><a href="'+ dominio + CadenasEntrada[0] + '.' + extension + '" target="_self">' + CadenasEntrada[1] + '</a>\n'
        
        //var nuevaVentana = "nuevas_paginas["+cant_paginas+"]=window.open('"+dominio+CadenasEntrada[0]+ '.' + extension +"'"+ ',' +"'"+CadenasEntrada[0]+ "');"+cant_paginas++;	
				
	    //resultados += '</td><td><span onclick="'+nuevaVentana+'" style="cursor:pointer; color:#000099; font-weight:bold">' + CadenasEntrada[1] + '</span>\n'
		var newlink = "'"+dominio+CadenasEntrada[0]+ '.' + extension +"'";	
		//var newlink = dominio+CadenasEntrada[0]+ '.' + extension ;	
		
		resultados += '</td><td><a href="javascript:redireccionar('+newlink+')" ><span  style="cursor:pointer; color:#000099; font-weight:bold">' + CadenasEntrada[1] + '</span></a>\n'
		
		descripcion = CadenasEntrada[2]
		for(var ii=0; ii<palabras.length; ii++){
		   palabras[ii] = allTrim(palabras[ii]);
		   
		   if(palabras[ii].search(" y ")!= -1){
			   var palabrasY = palabras[ii].split(" y ");			
			   for(var h=0; h<palabrasY.length; h++){
			      var palabraNormal = palabrasY[h];
		          palabra_sin = elimina_especiales(palabrasY[h]);		    		  
		          clave2 = new RegExp(palabra_sin, "gi") 
				  descripcion = descripcion.replace( clave2, '<span class="remarcado">' + palabraNormal + '</span>')
			   }
		   }// fin del if " y "
		   else{
		      var palabraNormal = palabras[ii];
		      palabra_sin = elimina_especiales(palabras[ii]);		    		  
		      clave2 = new RegExp(palabra_sin, "gi") 	
		   
		      descripcion = descripcion.replace( clave2, '<span class="remarcado">' + palabraNormal + '</span>')
		  }// fin del else
		  
		}
		resultados += '<br>' + descripcion + '</td></tr>\n'
	}	
	
	//escribe pagina de resultados
		
    CreaCabecera('<p><b>Resultados de la búsqueda</b></p>')

	if (totales != 0)
		Pagina += '<p>Se han encontrado ' + totales + ' resultados que contienen la palabra <b class="clave">' + palabraClave + '</b>:</p>\n'
	else
		Pagina += '<p>No se han encontrado resultados para la palabra <b class="clave">' + palabraClave + '</b>.</p>\n'
	
	Pagina += '<table width="80%">' + resultados + '</table>'
	
	
	
	var sigpag = paginacion + 1
	var antpag = paginacion - 1
	var ultpag = 0
	if ( totales % resXpag  != 0 ) {
		ultpag = Math.floor(totales / resXpag)
	} else {
		ultpag = totales / resXpag - 1
	}
	
	if ( ultpag > 0 ) {				//si hay que paginar
		Pagina += '<p>Página de resultados: '
	}
	
	if ( paginacion > 0  ) {			//si no estamos en la primera pagina
		Pagina += '<a href="javascript: IniciaBuscador(\'' + palabraClave + '\', ' + antpag + ', ' + totales + ')">Anterior</a> '
	}
	
	if ( ultpag > 0 ) {
		for ( var r = 0; r <= ultpag; r++ ) {	//lista todas las paginas
			if ( r != paginacion ) {
				Pagina += ' <a href="javascript: IniciaBuscador(\'' + palabraClave + '\', ' + r + ', ' + totales + ')">' + r + '</a> '
			} else {
				Pagina += ' ' + r + ' '
			}
		}
	}
	
	if ( paginacion < ultpag ) {			//si no estamos en la ultima pagina
		Pagina += ' <a href="javascript: IniciaBuscador(\'' + palabraClave + '\', ' + sigpag + ', ' + totales + ')">Siguiente</a></p>'
	} else {
		Pagina += '</p>'
	}
	
	//Pagina += '<p><a href="' +  url_actual + '">Nueva búsqueda</a></p>'
	Pagina += '<p><a href="javascript:window.opener.location.reload();self.close(); " >Nueva búsqueda</a></p>'
	
	
	result.style.display="block";	
		
	//escribe los resultados
	MuestraPagina(Pagina, "resultados");
	//var paginaResult = window.open("resultados.html", "paginaResult", "scrollbars:yes,location:no,resizable:no,width:600px, height:340px,top=250,left=200");
     //paginaResult.document.body.innerHTML = "<p>Cargando resultados...</p>";
	 //paginaResult.document.body.innerHTML = result.innerHTML;
	//paginaResult.document.getElementById("ponerResult").innerHTML = result.innerHTML;
//	paginaResult.document.body.getElementById("ponerResult").write(result.innerHTML)
	//paginaResult.document.write( result.innerHTML);
		  
}

// ELIMINAR ESPACIOS EN BLANCO AL INICIO Y FINAL DE LA CADENA

    function lTrim(sStr){
     while (sStr.charAt(0) == " ")
      sStr = sStr.substr(1, sStr.length - 1);
     return sStr;
    }

    function rTrim(sStr){
     while (sStr.charAt(sStr.length - 1) == " ")
      sStr = sStr.substr(0, sStr.length - 1);
     return sStr;
    }

    function allTrim(sStr){		
       return rTrim(lTrim(sStr));
    }


//------------------------------------------------------------


//SUSTITUYE TODAS LAS OCURRENCIAS DE UN CARACTER UNA CADENA POR OTRO CARACTER
function sustituye_caracter(cadena, caracter, nuevo_caracter) {
	var longitud, indice 
 	
  	longitud = cadena.length
  	indice = cadena.indexOf(caracter)
  	while ( (indice != -1) && (cadena.charAt(indice + 1) != ']') ) {
     		cadena = cadena.substring(0, indice) + nuevo_caracter + cadena.substring(indice + 1, longitud + 1)
      		indice = cadena.indexOf(caracter, indice)
      	}

	return cadena
}

//ELIMINA CARACTERES ESPECIALES
function elimina_especiales(cadena) {

	//elimina caracteres con acento
	for (x = 0; x < 5; x++) {
		cadena = sustituye_caracter(cadena, caracter[x], caracter_nuevo[x])
   	}
   	
	//sustituye las vocales por una expresion regular para ignorar los acentos
	for (x = 0; x < 5; x++) {
		cadena = sustituye_caracter(cadena, caracter_nuevo[x], caracter_nuevo2[x])
   	}   	
	
	return cadena
}

//MUESTRA IMAGENES DE RELEVANCIA
function MuestraRelevancia(relevancia) {

	var cadena_relevancia = ''
	
	for (var x = 0; x < relevancia; x++) cadena_relevancia += '<img src="' + imagen_relevancia + '_on.gif" width="15" height="16" border="0">'
 	for (var y = 0; y < 4 - relevancia; y++) cadena_relevancia += '<img src="' + imagen_relevancia + '_off.gif" width="15" height="16" border="0">'
 	
 	return cadena_relevancia 
}

//MUESTRA FORMULARIO DE BUSQUEDA
function MuestraBuscador() {
	
	CreaBuscador();
	MuestraPagina( Pagina, "areaDatos" ); 
	
}

function CreaBuscador() {
	
    Pagina += '<form onSubmit="IniciaBuscador(this.palabra.value, this.pagina.value, 0);return false;">\n' +
   '<table width="100%" cellpadding="0" style="margin-left:90px;" >\n' +
   '<tr valign="bottom">\n' +
	     '<td width="100"></td> \n' +
		 '<td width="100" >\n' +
		     '&nbsp;\n' +
		 '</td>\n' +
		 '<td >&nbsp;</td> \n' +
    '</tr>\n' +
      '<tr valign="bottom">\n' +
	     '<td align="right" valign="bottom" width="423"><small>Palabra clave <a style="cursor:pointer" onClick="window.open(\'ayuda_buscador.htm\',\'ayuda_buscador\',\'location=no,resizable=no,width=400,height=100,top=250,left=200\')"> <img src="images/ayuda.jpg" border="0" /> </a></small></td> \n' +
		 '<td width="151px" valign="bottom">\n' +		   
		    '&nbsp;<input valign="bottom" name="palabra" type="text" onkeypress="buscador(event,this.form.palabra.value, this.form.pagina.value);"/> \n' +							
		 '</td>\n' + 
		 
		 '<td valign="bottom">\n' +		    
			'<input type="hidden" name="pagina" value="0">\n' +
		    '<input align="bottom" type="button" name="botonB" id="botonB" value="Buscar" onClick="pasarVariables(this.form.palabra.value); "/>\n' +
		 '</td>\n' +
	  '</tr>\n' +
	  '<tr>\n' +	    
	     '<td colspan="2">\n' +
		   
		 '</td>\n' +
	  '</tr>\n' +
   '</table>\n' +
'</form>\n' ;
	
}

function buscador(e,palabra,pagina) {	
	var key = window.event ? e.keyCode : e.which;
    if (e.keyCode==13){pasarVariables(palabra); }	
    return false;
}

//codigo de inicio de pagina
function CreaCabecera( texto ) {
	Pagina = "";
	//crea inicio pagina a visualizar y la muestra
	Pagina += texto;	
}

//MUESTRA ESTILOS
function MuestraEstilos() {
	
	 document.write(	'<style type="text/css">\n' + 
					'.clave {color: ' + color_fuente_clave + ';}\n' +
					'.remarcado {background:' + color_subrayado + ';}\n' +
					'</style>\n' )

}

//check
/*
function cdfcr(a, b) {
	var alfa= 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHI123456789'
	var d = 0
	var palabra = a.toUpperCase()
	for (var i=0; i< palabra.length; i++) {
		letra = palabra.substring(i,i+1)
		c = alfa.indexOf(letra, 0) + 1
		d = d + b * c
	}
	return d
}*/

function ordenacionNumerica(a,b) {
	var a2 = a.split('|')
	var b2 = b.split('|')
	return b2[0] - a2[0]
}

