function asignaVariables2()
{
	// Funcion que asigna variables que se usan a lo largo de las funciones	
	v2=3; nuevaBusqueda2=3; busqueda2=null; ultimaBusquedaNula2=null;
	divLista2=document.getElementById("lista2");
	inputLista2=document.getElementById("destino");
	elementoSeleccionado2=2;
	ultimoIdentificador2=2;
}

function nuevoAjax2()
{ 
	/* 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 xmlhttp2=false; 
	try 
	{ 
		// Creacion del objeto AJAX para navegadores no IE
		xmlhttp2=new ActiveXObject("Msxml2.XMLHTTP"); 
	}
	catch(e)
	{ 
		try
		{ 
			// Creacion del objet AJAX para IE 
			xmlhttp2=new ActiveXObject("Microsoft.XMLHTTP"); 
		} 
		catch(E) { xmlhttp2=false; }
	}
	if (!xmlhttp2 && typeof XMLHttpRequest!="undefined") { xmlhttp2=new XMLHttpRequest(); } 

	return xmlhttp2; 
}

function eliminaEspacios2(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 formateaLista2(valor2)
{
	// Funcion encargada de ir colocando en negrita las palabras y asignarle un ID a los elementos
	var x=0, verificaExpresion=new RegExp("^("+valor2+")", "i");
	
	while(divLista2.childNodes[x]!=null)
	{
		// Asigo el ID para reconocerlo cuando se navega con el teclado
		divLista2.childNodes[x].id=x+1;
		// Coloco en cada elemento de la lista en negrita lo que se haya ingresado en el input
		divLista2.childNodes[x].innerHTML=divLista2.childNodes[x].innerHTML.replace(verificaExpresion, "<b>$1</b>");
		x++;
	}
}

function limpiaPalabra2(palabra)
{
	// Funcion encargada de sacarle el codigo HTML de la negrita a las palabras
	palabra=palabra.replace(/<b>/i, "");
	palabra=palabra.replace(/<\/b>/i, "");
	return palabra;
}

function coincideBusqueda2(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");
	if(verificaExpresion.test(palabraEntera)) return 1;
	else return 0;
}

function nuevaCadenaNula2(valor2)
{
	/* Seteo cual fue la ultima busqueda2 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(valor2, ultimaBusquedaNula2)==0) ultimaBusquedaNula2=valor2;
}

function busquedaEnBD2()
{
	/* Funcion encargada de verificar si hay que buscar el nuevo valor2 ingresado en la base
	de datos en funcion de los resultados obtenidos en la ultima busqueda2 y en base a que
	la cadena bsucada anteriormente este dentro de la nueva cadena */
	var valor2=inputLista2.value;
	
	if((coincideBusqueda(valor2, busqueda2)==1 && nuevaBusqueda2==0) || coincideBusqueda(valor2, ultimaBusquedaNula2)==1) return 0;
	else return 1;
}

function filtraLista2(valor2)
{
	// Funcion encargada de modificar la lista de nombres en base a la nueva busqueda2
	var x=0;

	while(divLista2.childNodes[x]!=null)
	{
		// Saco la negrita a los elementos del listado
		divLista2.childNodes[x].innerHTML=limpiaPalabra(divLista2.childNodes[x].innerHTML);
		if(coincideBusqueda(limpiaPalabra(divLista2.childNodes[x].innerHTML), valor2)==0)
		{
			/* Si remuevo el elemento x, el elemento posterior pasa a ocupar la posicion de
			x, entonces quedaria sin revisar. Por eso disminuyo 1 valor2 a x */
			divLista2.removeChild(divLista2.childNodes[x]);
			x--;
		}
		x++;
	}
}

function reiniciaSeleccion2()
{
	mouseFuera2(); 
	elementoSeleccionado2=2;
}

function navegaTeclado2(evento2)
{
	var teclaPresionada2=(document.all) ? evento2.keyCode : evento2.which;
	switch(teclaPresionada2)
	{
		case 40:
		if(elementoSeleccionado2<divLista2.childNodes.length)
		{
			mouseDentro2(document.getElementById(parseInt(elementoSeleccionado2)+1));
		}
		return 0;
		
		case 38:
		if(elementoSeleccionado2>1)
		{
			mouseDentro2(document.getElementById(parseInt(elementoSeleccionado2)-1));
		}
		return 0;
		
		case 13:
		if(divLista2.style.display=="block" && elementoSeleccionado2!=0)
		{
			clickLista2(document.getElementById(elementoSeleccionado2))
		}
		return 0;
		
		default: return 1;
	}
}	

function rellenaLista2()
{
	var valor2=inputLista2.value;

	// Valido con una expresion regular el contenido de lo que el usuario ingresa
	var reg2=/(^[a-zA-Z0-9.@ ]{2,40}$)/;
	if(!reg2.test(valor2)) divLista2.style.display="none";
	else
	{
		if(busquedaEnBD2()==0)
		{	
			// Si no hay que buscar el valor en la BD
			busqueda2=valor2;
	
			// Hago el filtrado de la nueva cadena ingresada
			filtraLista2(valor2);
			// Si no quedan elementos para mostrar en la lista
			if(divLista2.childNodes[0]==null) { divLista2.style.display="none"; nuevaCadenaNula2(valor2); }
			else { reiniciaSeleccion2(); formateaLista2(valor2); }
		}
		else
		{	
			/* Si se necesita verificar la base de datos, guardo el patron de busqueda2 con el que se
			busco y luego recibo en una variable si existen mas resultados de los que se van a mostrar */
			busqueda2=valor2;

			var ajax2=nuevoAjax2();
			ajax2.open("POST", "http://milvuelosbaratos.com/textoPredictivo/index_proceso2.php?", true);
			ajax2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			ajax2.send("busqueda2="+valor2);
		
			ajax2.onreadystatechange=function()
			{	
				if (ajax2.readyState==4)
				{
					if(!ajax2.responseText) { divLista2.style.display="none"; }
					else 
					{
						var respuesta2=new Array(2);
						respuesta2=ajax2.responseText.split("&");
				
						/* Obtengo un valor que representa si tengo que ir a BD en las proximas 
						busquedas con cadena similar */
						nuevaBusqueda2=respuesta2[0];
				
						// Si se obtuvieron datos los muestro
						if(respuesta2[1]!="vacio") 
						{ 
							divLista2.style.display="block"; divLista2.innerHTML=respuesta2[1]; 
							// Coloco en negrita las palabras
							reiniciaSeleccion2();
							formateaLista2(valor2); 
						}
						// En caso contrario seteo la busqueda2 actual como una busqueda2 sin resultados
						else nuevaCadenaNula2(valor2);
					}
				}
			}
		}
	}
}

function clickLista2(elemento2)

{
	/* Se ejecuta cuando se hace clic en algun elemento de la lista. Se coloca en el input el
	valor2 del elemento clickeado */
	v2=3;
	valor2=limpiaPalabra2(elemento2.innerHTML); 
	busqueda2=valor2; inputLista2.value=valor2;
	divLista2.style.display="none"; elemento2.className="normal";
}

function mouseFuera2()
{
	// Des-selecciono el elemento actualmente seleccionado, si es que hay alguno
	if(elementoSeleccionado2!=2 && document.getElementById(elementoSeleccionado2)) document.getElementById(elementoSeleccionado2).className="normal"; 
}

function mouseDentro2(elemento2)
{
	mouseFuera2();
	elemento2.className="resaltado";
	// Establezco el nuevo elemento seleccionado
	elementoSeleccionado2=elemento2.id;
}