/* 	
	autor: info@tumejorweb.com 
	Todos los derechos reservados
*/

 var B_buscadorAjax = null;
 var B_inputQuery = "inputBusqueda";
 var B_divResultados = "divResultados";  //Estan todos los resultados
 var B_enlacesResultados = "enlacesResultados"; //Solo estan los enlaces a los resultados
 var B_paginaBuscador = "../buscador/busquedaDinamica.php";
 var B_imgAjaxBuscador = "../includes/img/iconos/ajax.gif";
 var B_t = null;
 var B_enEnlace = false;
 var B_resultados = new Array();
 var B_resultados_href = new Array();
 var B_resultados_info = new Array();
 var _cache = new Object();
 var B_busquedaAnterior = "";
 var B_mostrarAvisoNoEncontrados = true;
 var B_isIE = false;
 var B_debug = false;

 function B_InicializaBuscador(){
    B_inputQuery = document.getElementById(B_inputQuery);
    if (B_inputQuery == null || B_inputQuery == undefined){ return }

    if (navigator.userAgent.indexOf("KHTML") > 0) {
        B_inputQuery.addEventListener("keydown",B_KeyPress,false);
        B_inputQuery.addEventListener("focus",B_comienzaBusqueda,false);
        B_inputQuery.addEventListener("keydown",B_comienzaBusqueda, false);
    } else if (B_inputQuery.addEventListener) {
        B_inputQuery.addEventListener("keypress",B_KeyPress,false);
        B_inputQuery.addEventListener("blur",B_Ocultar,false);
        B_inputQuery.addEventListener("keypress",B_comienzaBusqueda, false);
    } else {
        B_inputQuery.attachEvent("onkeydown",B_KeyPress);
        B_inputQuery.attachEvent("onkeydown",B_comienzaBusqueda);
        B_inputQuery.attachEvent("onblur",B_Ocultar);
        B_isIE = true;
    }
	
	//Añadimos la imagen de cargando.
	var ajaxLoading = document.createElement("img");
	ajaxLoading.setAttribute('id','ajaxLoadingBusquedaDinamica');
	ajaxLoading.setAttribute('class','ajaxLoading');
	ajaxLoading.setAttribute('className','ajaxLoading');
	ajaxLoading.setAttribute('src',B_imgAjaxBuscador);
	document.getElementById('buscador_dinamico').appendChild(ajaxLoading);

    B_inputQuery.setAttribute("autocomplete","off");
	B_Ocultar();
 }
 
 function B_muestra(){
  var aux = new String();
  var texto = new String();
  var info = new String();
  var pos,longitud,porcentaje;

  document.getElementById("ajaxLoadingBusquedaDinamica").style.visibility="hidden";
  if(B_resultados.length > 0){
   aux += '<legend>Búsqueda Dinámica:</legend>';
   aux += '<div id="'+B_enlacesResultados+'">';

   for(i=0; i<B_resultados.length; i++){
    texto = B_resultados[i];
    info = B_resultados_info[i];
    longitud = B_inputQuery.value.length;
    porcentaje = 0;
    
    /* Comprobamos si el texto ha sido encontrado en el titulo  y lo ponemos en negrita*/
    pos = texto.toLowerCase().indexOf(B_inputQuery.value.toLowerCase());
    if(pos!=-1){
     porcentaje = Math.round((longitud*100)/((texto.indexOf(" ",pos+longitud)==-1?texto.length:texto.indexOf(" ",pos+longitud))-texto.lastIndexOf(" ",pos)-1));
     texto = texto.substring(0,pos)+texto.substring(pos,pos+longitud).bold()+texto.substring(pos+longitud,texto.length)     
    }

    /* Comprobamos si el texto ha sido encontrado en la info y lo ponemos en negrita*/
    pos = info.toLowerCase().indexOf(B_inputQuery.value.toLowerCase());
    if(pos!=-1){
	 porcentaje = Math.round((longitud*100)/((info.indexOf(" ",pos+longitud)==-1?info.length:info.indexOf(" ",pos+longitud))-info.lastIndexOf(" ",pos)-1));
     info = info.substring(0,pos)+info.substring(pos,pos+longitud).bold()+info.substring(pos+longitud,info.length)     
    }

    aux += '<a href="'+B_resultados_href[i]+'" title="'+B_resultados[i]+'" onMouseOver="B_sobreEnlace();" onMouseOut="B_fueraEnlace();">'+texto+'<span style="color:#666"> [ '+porcentaje+'% ]</span></a>';
    if(B_resultados_info[i]!=""){
		aux += '<div class="info">'+info+'</div>';  
	}
    }
    
    aux += '</div>';
    //aux += '<div id="pieBuscador"><input type="submit" class="enlace" value="Buscar todo..." onMouseOver="B_sobreEnlace();" onMouseOut="B_fueraEnlace();" /></div>';

 	$("#"+B_divResultados).html(aux);
 	$("#"+B_divResultados).slideDown();
    
  }else{
    if(B_mostrarAvisoNoEncontrados){
		aux += '<legend>Búsqueda Dinámica:</legend>';
		aux += '<div id="'+B_enlacesResultados+'">';
		aux += '<div class="info">No se han encontrado resultados para la cadena buscada.</div><br>';
		aux += '</div>';

		$("#"+B_divResultados).html(aux);
		$("#"+B_divResultados).slideDown();
    }else{
		B_Ocultar();
	}
  }
 }
 
 function B_Ocultar(){
	if(!B_enEnlace){
		$("#"+B_divResultados).slideUp();
	}
 }
 
 function B_comienzaBusqueda(event) {
	if (B_t) {
		window.clearTimeout(B_t);
	}
	code = event.keyCode;
	if (code!=40 && code!=38 && code!=27 && code!=37 && code!=39) {
		B_t = window.setTimeout("B_Busca()",250);
	} 
 } 

 function B_Busca() {

	if (B_buscadorAjax && B_buscadorAjax.readyState < 4) {
		B_buscadorAjax.abort();
	}
	if ( B_inputQuery.value == "") {
		B_Ocultar();
		return false;
	}

	var result = _cache[B_inputQuery.value];
	if (result) {
		B_actualizaResultados(result);	
		return;
	}
	
	document.getElementById("ajaxLoadingBusquedaDinamica").style.visibility="visible";
    if (B_busquedaAnterior != B_inputQuery.value) {
		//B_buscadorAjax = new XMLHttpRequest();
		if (window.XMLHttpRequest){
			B_buscadorAjax = new XMLHttpRequest();
		}else if (window.ActiveXObject){
			B_buscadorAjax = new ActiveXObject("Microsoft.XMLHTTP");
		}
		B_buscadorAjax.open("GET", B_paginaBuscador+"?query="+B_inputQuery.value);
		B_buscadorAjax.onreadystatechange= B_actualizaResultados;
		B_busquedaAnterior = B_inputQuery.value;
		B_buscadorAjax.send(null);
    }
 }
 
 function B_actualizaResultados(){
	var respuesta,total=0;
	if(arguments.length>0){
			respuesta = arguments[0];
			total = respuesta.getElementsByTagName('titulo').length;
			B_resultados.length = 0;
			B_resultados_href.length = 0;
			B_resultados_info.length = 0;
			for(i=0; i<total; i++){
				 B_resultados[i] = respuesta.getElementsByTagName('titulo')[i].firstChild.data;
				 B_resultados_href[i] = respuesta.getElementsByTagName('enlace')[i].firstChild.data;
				 B_resultados_info[i] = respuesta.getElementsByTagName('descripcion')[i].firstChild.data;
			}
	}else{
		if (B_buscadorAjax.readyState == 4) {
			if (B_buscadorAjax.status > 299 || B_buscadorAjax.status < 200  || B_buscadorAjax.responseText.length < 10){
				return;	
			}
			respuesta = B_buscadorAjax.responseXML.documentElement;
			total = respuesta.getElementsByTagName('titulo').length;
			B_resultados.length = 0;
			B_resultados_href.length = 0;
			B_resultados_info.length = 0;
			for(i=0; i<total; i++){
				 B_resultados[i] = respuesta.getElementsByTagName('titulo')[i].firstChild.data;
				 B_resultados_href[i] = respuesta.getElementsByTagName('enlace')[i].firstChild.data;
				 B_resultados_info[i] = respuesta.getElementsByTagName('descripcion')[i].firstChild.data;
			}
			_cache[B_busquedaAnterior] = respuesta;
		}
	}
	B_muestra();
 }
 
 function B_KeyPress(event){
	//alert(event.keyCode);
 }
 
 function B_sobreEnlace(){
  B_enEnlace = true;
 }

 function B_fueraEnlace(){
  B_enEnlace = false;
 }

if (window.addEventListener){
	window.addEventListener("load",B_InicializaBuscador,false);
}else if (window.attachEvent){
	window.attachEvent("onload", B_InicializaBuscador);
}