/*
###############################################################################
# buscador.js                                                                 #
###############################################################################
# JSBuscador de {El Codigo}                                                   #
# Buscador de paginas web realizado con JavaScript                            #
# Version:          JSBuscador 2.0                                            #
# Publicado:        10 de abril de 2007                                       #
# Distribuido por:  http://www.elcodigo.com                                   #
###############################################################################
# Copyright (c) 2007 Ivan Nieto Perez                                         #
# Sujeto a los términos de licencia descritos en el documento licencia.txt    #
# Esta cabecera debe permanecer invariable.                                   #
###############################################################################
*/
//CONFIGURACION
var dominio = 'andres.keppel.com'		//dominio desde el que se ejecuta el buscador
var extension = 'html'			//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 tipo_fuente = 'Verdana, Arial, Serif'
var grosor_fuente = '300'
//var color_fuente = '#483713'
var color_fuente = '#000000'
//var tamano_fuente = '0.9em'
var tamano_fuente = '11.5px'

var tamano_fuente_titulo = '1.1em'
var grosor_fuente_titulo = '600'
var color_fuente_titulo = '#A25151'


//var color_fondo = '#FAFAF5'
var color_fondo = '#ffffff'

var color_fuente_clave = '#A25151'

//var color_enlace = '#554B8B'
var color_enlace = '#A25151'
var grosor_enlace = '600'
//var color_enlace_visitado = '#AD83B4'
var color_enlace_visitado = '#84929f'
var color_enlace_activo = '#DD0000'
//var fondo_enlace_visitado = '#FFA4A4'
var fondo_enlace_visitado = '#afbdc6'
var resXpag = 5					//numero de resultados por pagina
var color_subrayado = '#FFFF00'			//color fondo palabra clave subrayada en resultados busqueda
//FIN CONFIGURACION

//NO CAMBIES NADA A PARTIR DE AQUI SI NO SABES LO QUE HACES

//variables globales
var accion
var f = ''
//var f = '<p>&nbsp;</p><p>Basado en <a href="http://www.elcodigo.com/superscripts/jsbuscador/jsbuscador.html">JSBuscador 2.0</a><br>de <a href="http://www.elcodigo.com/">{El Codigo}</a></p>'
var h = 465
var g = ''
//var g = 664950
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 CalculaRelevancia(indice) {
	//alert("function CalculaRelevancia");//----------------------------------------------------
	var CadenasEntrada
	var parciales = 0
	
	//divide la cadena de resultados en subcadenas y escribe los resultados
	CadenasEntrada = BaseDatos[indice].split(";")
	//alert("function CalculaRelevancia CadenasEntrada>>>>>>>>>>>" + CadenasEntrada);//---------
	//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++
		}
	}
	//alert("CadenasEntrada.length1>>>>>>>>>>>" + CadenasEntrada.length);//---------
//	alert("CadenasEntrada.length2>>>>>>>>>>>" + CadenasEntrada[n].search(clave2));//---------
	if ( parciales != 0 ) {
		res[ res.length ] = parciales + '|' + indice
	}
	//alert("CalculaRelevancia parciales>>>>>>>>>>>" + parciales);//---------
	//alert("CalculaRelevancia res[ res.length ]>>>>>>>>>>>" + res[ res.length ]);//---------
	//alert("CalculaRelevancia parciales|indice>>>>>>>>>>>" + parciales + "|" + indice);//---------
}

//escribe codigo HTML
function MuestraPagina( htmlData ) {
	//alert("function MuestraPagina htmlData <br />" + htmlData);//-------------------------------------------	
	if ((document.getElementById('buscar').value) =="")
	{
		document.getElementById("contenidoProduction").style.display="block";
		document.getElementById("areaDatos").style.display="none";
	}
	else
	{
	    document.getElementById("contenidoProduction").style.display="none";
	    document.getElementById("areaDatos").style.display="block";
		document.getElementById("areaDatos").innerHTML = htmlData;	
	}	
	
}

// 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) {
	
	//alert("function IniciaBuscador <br />" + palabraClave + paginacion + nuevaBusqueda);//-------------------------------------------
	//inicia variables globales
	var desde = 0
	var partes
	var CadenasEntrada
	var descripcion = ''
	totales = nuevaBusqueda		//a 0 si nueva busqueda

	//detiene busqueda si palabra clave vacia
	if ( palabraClave == "" ) {
		alert("¡Enter search string!")
		return
	}
	
	if ( nuevaBusqueda == 0 ) {
	
		//elimina acentos
		var palabra_sin = elimina_especiales(palabraClave)
	
		//obtiene la expresion regular para la busqueda (global e ignorando case)
		clave2 = new RegExp(palabra_sin, "gi")

		//borra array res
		for ( var r=0; r < res.length; r++) {
			//borra el arrary 
			res = res.splice(r,r);
			//res[r]=''
			//alert('entro' + res[r]);
		}
		
		
		//alert('leng 1era vez' + res.length);

		//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 )
				totales++
			}
		}
	
		//ordena resultados segun relevancia
		res.sort( ordenacionNumerica )
	}
	
	//lista de resultados
	resultados = ''
	//alert('paginacion '+ paginacion);
	//alert('resXpag '+ resXpag);
	var resfinal = paginacion * resXpag + resXpag
	//alert('suma resfinal ' + resfinal);
	//alert('res.length longitud de resdultados ' + res.length);
	if ( resfinal >= res.length ) { 
		resfinal = res.length
	}
	
	//alert('suma despues del if  ' + resfinal);
	for ( var n = paginacion * resXpag; n < resfinal; n++) {
		
		partes = res[n].split('|')
		
		resultados += '<tr><td width="70">'
		resultados += MuestraRelevancia(partes[0])
//		history.go(0)
		CadenasEntrada = BaseDatos[partes[1]].split(";")
		resultados += '</td><td><a href="' + CadenasEntrada[0] + '.' + extension + '" target="_self">' + CadenasEntrada[1] + '</a>\n'
		descripcion = CadenasEntrada[2]
		descripcion = descripcion.replace( clave2, '<span class="remarcado">' + palabraClave + '</span>')
		resultados += '<br>' + descripcion + '</td></tr>\n'
	}
	
	//alert('final resfinal'+ resfinal);
	//alert("MuestraRelevancia( partes[0] )" + MuestraRelevancia( partes[0] ));//-------------------------------------------
	//alert("Resultados <br />" + resultados);//-------------------------------------------
	//alert("partes[1]" + partes[1]);//-------------------------------------------
	////alert("CadenasEntrada" + CadenasEntrada);//-------------------------------------------
	
	
	//escribe pagina de resultados
	CreaCabecera('<p>Search Results</p>')

	if (totales != 0)
		Pagina += '<p>We have found ' + totales + ' results that have the word <b class="clave">' + palabraClave + '</b>:</p>\n'
	else
		Pagina += '<p>No results for the word <b class="clave">' + palabraClave + '</b>.</p>\n'
		Pagina += '<table width="500px">' + resultados + '</table>'	
	//+ '<a href="javascript:history.go(0)">Refrescar pagina</a>'
	
	
	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>Page: '
	}
	
	if ( paginacion > 0  ) {			//si no estamos en la primera pagina
		Pagina += '<a href="javascript: IniciaBuscador(\'' + palabraClave + '\', ' + antpag + ', ' + totales + ')">Previous</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 + ')">Next</a></p>'
	} else {
		Pagina += '</p>'
	}
	
	Pagina += '<p><a href="http://' + dominio + pagina_buscador + '">Search Again</a></p>'
	CreaPie()

	//escribe los resultados
	MuestraPagina(Pagina)
}

//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 
 	//alert("function MuestraRelevancia" + cadena_relevancia);//----------------------------------------------------
}

//MUESTRA FORMULARIO DE BUSQUEDA
function MuestraBuscador() {
				 if ( cdfcr( f, h ) == g ) { accion = 'verform';	CreaBuscador();	MuestraPagina( Pagina ); }
				 //alert("function MuestraBuscador");//----------------------------------------------------
}

function CreaBuscador() {
	//alert("function CreaBuscador");//----------------------------------------------------
	//inicia variables globales
	//CreaCabecera( '<p>Introduzca una palabra clave y pulse el botón <b>Buscar</b>.</p>' )

//	Pagina += '<form name="FormularioBusqueda">\n' +
//		'<input type="text" name="palabra" size="25">\n' +
//		'<input  type="hidden" name="pagina" value="0">\n' +
//		'<input type="button" value="Go" name="buscar" onClick="IniciaBuscador(this.form.palabra.value, this.form.pagina.value, 0)">\n' +
//		'</form>\n'	
	CreaPie()		
}

//codigo de inicio de pagina
function CreaCabecera( texto ) {
	Pagina = ""
	//crea inicio pagina a visualizar y la muestra
	Pagina += texto
}

//codigo de fin de pagina
function CreaPie() {
	//crea final pagina
//	if ( accion != 'verenl' ) Pagina += '<p><a href="' + url_album + '">Inicio</a></p>\n'
	Pagina += f
	//alert("CreaPie");//----------------------------------------------------
}

//MUESTRA ESTILOS
function MuestraEstilos() {
	document.write(	'<style type="text/css">\n' +
		'body {font-size: ' + tamano_fuente + '; font-family: ' + tipo_fuente + '; font-weight: ' + grosor_fuente + '; color: ' + color_fuente + '; background-color: ' + color_fondo + '; }\n' +
		'.clave {color: ' + color_fuente_clave + ';}\n' +
		'a:link {color: ' + color_enlace + '; text-decoration: none; font-weight: ' + grosor_enlace + ';}\n' +
		'a:visited {color: ' + color_enlace_visitado + '; text-decoration: none; font-weight: ' + grosor_enlace + ';}\n' +
		'a:active {color: ' + color_enlace_activo + '; text-decoration: none; font-weight: ' + grosor_enlace + ';}\n' +
		'a:hover {color: ' + color_enlace + '; text-decoration: none;background: ' + fondo_enlace_visitado + '; font-weight: ' + grosor_enlace + ';}\n' +
		//'td  {font-size: ' + tamano_fuente + '; vertical-align: top; }\n' +
		//'table { margin-left: 0px; margin-right: 0px;}\n' +
		//'h1 {margin-left: 0px; margin-right: 0px; font-size: ' + tamano_fuente_titulo + '; font-weight: ' + grosor_fuente_titulo + '; color: ' + color_fuente_titulo + ';}\n' +
		//'p {margin-left: 0px; margin-right: 0px; font-size: ' + tamano_fuente + ';}\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]
}
