﻿function asignaVariables(lista,input)
{
	// Funcion que asigna variables que se usan a lo largo de las funciones
	alert("asignavariables\n" + lista + "\n" + input)
	v=1; 
	nuevaBusqueda=1; 
	busqueda=null; 
	ultimaBusquedaNula=null;
	divLista=document.getElementById(lista);
	inputLista=document.getElementById(input);
	pinput = input
	tipobusq = "tipeo"
	elementoSeleccionado=0;
	ultimoIdentificador=0;
	LISTACOMPLETA=null
	//RellenaCompleto();
}

/*ESTAS FUNCIONES YA LAS TENGO EN SITIO.JS
function findPosX(obj)
{
  var curleft = 0;
  if(obj.offsetParent)
      while(1) 
      {
        curleft += obj.offsetLeft;
        if(!obj.offsetParent)
          break;
        obj = obj.offsetParent;
      }
 else if(obj.x)
      curleft += obj.x;
  return curleft;
}

function findPosY(obj)
{
  var curtop = 0;
  if(obj.offsetParent)
      while(1)
      {
        curtop += obj.offsetTop;
        if(!obj.offsetParent)
          break;
       obj = obj.offsetParent;
      }
  else if(obj.y)
      curtop += obj.y;
  return curtop;
}
*/

function nuevoAjax()
{ 
	/* Crea el objeto AJAX. Esta funcion es generica para cualquier utilidad de este tipo, por
	lo que se puede copiar tal como esta aqui */
	var xmlhttp=false;
	if (window.XMLHttpRequest) {// Si es Mozilla, Safari etc
		xmlhttp = new XMLHttpRequest()
	}
	else if (window.ActiveXObject){ // pero si es IE
		try {
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP")
		} 
		catch (e){ // en caso que sea una version antigua
			try{
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
			}
			catch (e){}
		}
	}
	else
	{
		return false;
	}
	return xmlhttp; 
}

function eliminaEspacios(cadena)
{
	var x=0, y=cadena.length-1;
	while(cadena.charAt(x)==" ") x++;	
	while(cadena.charAt(y)==" ") y--;	
	return cadena.substr(x, y-x+1);
}

function formateaLista(valor)
{
	// Funcion encargada de ir colocando en negrita las palabras y asignarle un ID a los elementos
	/*NO LO ESTOY USANDO PARA GTA
	var x=0, verificaExpresion=new RegExp(valor,"gi");
	while(divLista.childNodes[x]!=null)
	{
		// Asigo el ID para reconocerlo cuando se navega con el teclado ACA HAY ERROR
		divLista.childNodes[x].id=x+1;
		divLista.childNodes[x].className="normal";
		var txt = divLista.childNodes[x].innerHTML.match(verificaExpresion)
		divLista.childNodes[x].innerHTML = divLista.childNodes[x].innerHTML.replace(verificaExpresion, "<span class='resaltador'>"+txt+"</span>");
		x++;
	}
	*/
}

function limpiaPalabra(palabra)
{
	//aca hay un error
	// Funcion encargada de sacarle el codigo HTML de la negrita a las palabras
	palabra=palabra.replace(/<span class=?resaltador?>/gi, "");
	palabra=palabra.replace(/<\/span>/gi, "");
	return palabra;
}

function coincideBusqueda(palabraEntera, primerasLetras)
{
	/* Funcion para verificar que las primeras letras de busquedaActual sean iguales al
	contenido de busquedaAnterior. Se devuelve 1 si la verificacion es afirmativa */
	if(primerasLetras==null) return 0;
	//var verificaExpresion=new RegExp("^("+primerasLetras+")", "i");
	var verificaExpresion=new RegExp("("+primerasLetras+")", "i");
	if(verificaExpresion.test(palabraEntera)) return 1;
	else return 0;
}

function nuevaCadenaNula(valor)
{
	/* Seteo cual fue la ultima busqueda que no arrojo resultados siempre y cuando la cadena
	nueva no comience con las letras de la ultima cadena que no arrojo resultados */
	if(coincideBusqueda(valor, ultimaBusquedaNula)==0) ultimaBusquedaNula=valor;
}

function busquedaEnBD()
{
	/* Funcion encargada de verificar si hay que buscar el nuevo valor ingresado en la base
	de datos en funcion de los resultados obtenidos en la ultima busqueda y en base a que
	la cadena bsucada anteriormente este dentro de la nueva cadena */
	var valor=inputLista.value;
	if (valor.charAt(valor.length-1)==" ") return 1
	if((coincideBusqueda(valor, busqueda)==1 && nuevaBusqueda==0) || coincideBusqueda(valor, ultimaBusquedaNula)==1) return 0;
	else return 1;
}

function filtraLista(valor)
{
	// Funcion encargada de modificar la lista de nombres en base a la nueva busqueda
	var x=0;

	while(divLista.childNodes[x]!=null)
	{
		// Saco la negrita a los elementos del listado
		divLista.childNodes[x].innerHTML=limpiaPalabra(divLista.childNodes[x].innerHTML);
		if(coincideBusqueda(limpiaPalabra(divLista.childNodes[x].innerHTML), valor)==0)
		{
			/* Si remuevo el elemento x, el elemento posterior pasa a ocupar la posicion de
			x, entonces quedaria sin revisar. Por eso disminuyo 1 valor a x */
			divLista.removeChild(divLista.childNodes[x]);
			x--;
		}
		x++;
	}
	escribe();
}

function reiniciaSeleccion()
{
	mouseFuera();
	elementoSeleccionado=0;
}

function navegaTeclado(evento)
{
	var teclaPresionada=(document.all) ? evento.keyCode : evento.which;
	
	//escribe(teclaPresionada);
	switch(teclaPresionada)
	{
		case 40:  //flecha abajo
		if(elementoSeleccionado<divLista.childNodes.length){
			mouseDentro(document.getElementById(parseInt(elementoSeleccionado)+1));
		}
		return 0;
		
		case 38:  //flecha arriba
		if(elementoSeleccionado>1)
		{
			mouseDentro(document.getElementById(parseInt(elementoSeleccionado)-1));
		}
		return 0;
		
		case 13:   //Enter
		if(divLista.style.display=="block" && elementoSeleccionado!=0)
		{
			clickLista(document.getElementById(elementoSeleccionado))
			//nuevabusqueda.submit();
		}
		return 0;
		
		default: return 1;
	}
}	

function showLista() {
	//clearLista();
	var l = findPosX(inputLista) + 2
	var t = findPosY(inputLista) + 18
	var d = divLista.style
	d.position = "absolute";
	d.top = t + "px";
	d.left = l + "px";
	if (divLista.innerHTML != '') {d.display="block";}
}

function clearLista() {
	divLista.innerHTML="Cargando...";
	divLista.style.display="none";
	estado = "stand by"
	escribe();
}

function rellenaLista()
{
	var valor=inputLista.value;
	// Valido con una expresion regular el contenido de lo que el usuario ingresa
	var reg=/(^[a-zA-Z0-9.@ ]{2,40}$)/;
	if(!reg.test(valor)) {divLista.style.display="none";}
	else
	{
		if(busquedaEnBD()==0)
		{	
			// Si no hay que buscar el valor en la BD
			busqueda=valor;

			// Hago el filtrado de la nueva cadena ingresada
			filtraLista(valor);
			// Si no quedan elementos para mostrar en la lista
			if(divLista.childNodes[0]==null) { divLista.style.display="none"; nuevaCadenaNula(valor); nuevaBusqueda=1;}
			else { reiniciaSeleccion(); formateaLista(valor); }
		}	
		else
		{	
			/* Si se necesita verificar la base de datos, guardo el patron de busqueda con el que se
			busco y luego recibo en una variable si existen mas resultados de los que se van a mostrar */
			
			busqueda=valor;
			divLista.innerHTML=LISTACOMPLETA;
			reiniciaSeleccion();
			filtraLista(valor);
			formateaLista(valor);
			showLista();
		}
	}
}

function RellenaCompleto() {
			var ajax=nuevoAjax();
			var texto = inputLista.value
			var aspFile = "http://www.guiaturisticaargentina.com/default_ajax_suggest.asp?busqueda=" + texto
			ajax.open("GET", aspFile, true);
			ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			ajax.send();
			estado = "buscando...";
			escribe();
			
			ajax.onreadystatechange=function()
			{	
				//divLista.innerHTML = "Cargando..." + ajax.readyState + "/4"
				if (texto.length == inputLista.value.length) {
					estado = "buscando. " + ajax.readyState; escribe();
					if (ajax.readyState==4  && (ajax.status==200 || window.location.href.indexOf("http")==-1))
					{
						if(!ajax.responseText) 
						{ 
							divLista.style.display="none";
							estado = "error"; escribe();
						}
						else 
						{
							var respuesta=new Array(2);
							respuesta=ajax.responseText.split("||");
							/* Obtengo un valor que representa si tengo que ir a BD en las proximas 
							busquedas con cadena similar */
							nuevaBusqueda=0;
							// Si se obtuvieron datos los muestro
							if(respuesta[1] != "vacio")
							{ 
								estado = "listo"; escribe(); 
								LISTACOMPLETA=respuesta[0];
								divLista.innerHTML=respuesta[0]; 
							}
							// En caso contrario seteo la busqueda actual como una busqueda sin resultados
							else 
							{
								nuevaCadenaNula(valor);
								estado = "sin resultados"; escribe();
								
							}
						}
					}
					else
					{
						estado = "error 2"; escribe();
					}
				}
			}
} 

function clickLista(elemento)
{
	/* Se ejecuta cuando se hace clic en algun elemento de la lista. Se coloca en el input el
	valor del elemento clickeado */
	v=1;
	valor=limpiaPalabra(elemento.innerHTML); 
	busqueda=valor; inputLista.value=valor;
	divLista.style.display="none"; elemento.className="normal";
}

function mouseFuera()
{
	// Des-selecciono el elemento actualmente seleccionado, si es que hay alguno
	if(elementoSeleccionado!=0 && document.getElementById(elementoSeleccionado)) 
		{
		
		document.getElementById(elementoSeleccionado).className="normal";
		}
}

function mouseDentro(elemento)
{
	mouseFuera();
	elemento.className="resaltado"
	elemento.style.cursor = "pointer";
	elementoSeleccionado=elemento.id;
}

function escribe() {
/*
	e = "<br>"
	dato = e + "v: " + v + e + "pfile: " + pfile + e + "pinput: " + pinput + e + "tipobusq: " + tipobusq
	dato = dato + e + "texto: " + inputLista.value + e + "estado: " + estado 
	$('caja').innerHTML = dato;*/
}

function findPosX(obj)
{
  var curleft = 0;
  if(obj.offsetParent)
      while(1) 
      {
        curleft += obj.offsetLeft;
        if(!obj.offsetParent)
          break;
        obj = obj.offsetParent;
      }
  else if(obj.x)
      curleft += obj.x;
  return curleft;
}

function findPosY(obj)
{
  var curtop = 0;
  if(obj.offsetParent)
      while(1)
      {
        curtop += obj.offsetTop;
        if(!obj.offsetParent)
          break;
        obj = obj.offsetParent;
      }
  else if(obj.y)
      curtop += obj.y;
  return curtop;
}
