function asignaVariables_empresa() 
{
	// Funcion que asigna variables que se usan a lo largo de las funciones	
	v_empresa=1; nuevaBusqueda_empresa=1; busqueda_empresa=null; ultimaBusquedaNula_empresa=null;
	divLista_empresa=document.getElementById("lista_empresa");
	inputLista_empresa=document.getElementById("nombre_empresa");
	elementoSeleccionado_empresa=0;
	ultimoIdentificador_empresa=0;
	
}

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

	return xmlhttp_empresa; 
}

function eliminaEspacios_empresa(cadena_empresa)
{
	var x=0, y=cadena_empresa.length-1;
	while(cadena_empresa.charAt(x)==" ") x++;	
	while(cadena_empresa.charAt(y)==" ") y--;	
	return cadena_empresa.substr(x, y-x+1);
}


function formateaLista_empresa(valor_empresa)
{
	// Funcion encargada de ir colocando en negrita las palabras y asignarle un ID a los elementos
	var x=0, verificaExpresion_empresa=new RegExp("^("+valor_empresa+")", "i");
	
	while(divLista_empresa.childNodes[x]!=null)
	{
		// Asigo el ID para reconocerlo cuando se navega con el teclado
		divLista_empresa.childNodes[x].id=x+1;
		// Coloco en cada elemento_empresa de la lista en negrita lo que se haya ingresado en el input
		divLista_empresa.childNodes[x].innerHTML=divLista_empresa.childNodes[x].innerHTML.replace(verificaExpresion_empresa, "<b>$1</b>");
		x++;
	}
}

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

function coincidebusqueda(palabraEntera_empresa, primerasLetras_empresa)
{
	/* 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_empresa==null) return 0;
	var verificaExpresion_empresa=new RegExp("^("+primerasLetras_empresa+")", "i");
	if(verificaExpresion_empresa.test(palabraEntera_empresa)) return 1;
	else return 0;
}

function nuevaCadenaNula_empresa(valor_empresa)
{
	/* Seteo cual fue la ultima busqueda_empresa que no arrojo resultados siempre y cuando la cadena_empresa
	nueva no comience con las letras de la ultima cadena_empresa que no arrojo resultados */
	if(coincidebusqueda(valor_empresa, ultimaBusquedaNula_empresa)==0) ultimaBusquedaNula_empresa=valor_empresa;
}

function busquedaEnBD_empresa()
{
	/* Funcion encargada de verificar si hay que buscar el nuevo valor_empresa ingresado en la base
	de datos en funcion de los resultados obtenidos en la ultima busqueda_empresa y en base a que
	la cadena_empresa bsucada anteriormente este dentro de la nueva cadena_empresa */
	var valor_empresa=inputLista_empresa.value;
	
	if((coincidebusqueda(valor_empresa, busqueda_empresa)==1 && nuevaBusqueda_empresa==0) || coincidebusqueda(valor_empresa, ultimaBusquedaNula_empresa)==1) return 0;
	else return 1;
}

function filtraLista_empresa(valor_empresa)
{
	// Funcion encargada de modificar la lista de nombres en base a la nueva busqueda_empresa
	var x=0;

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

function reiniciaSeleccion_empresa()
{
	mouseFuera_empresa(); 
	elementoSeleccionado_empresa=0;
}

function navegaTeclado_empresa(evento)
{
	var teclaPresionada=(document.all) ? evento.keyCode : evento.which;
	
	switch(teclaPresionada)
	{
		case 40:
		if(elementoSeleccionado_empresa<divLista_empresa.childNodes.length)
		{
			mouseDentro_empresa(document.getElementById(parseInt(elementoSeleccionado_empresa)+1));
		}
		return 0;
		
		case 38:
		if(elementoSeleccionado_empresa>1)
		{
			mouseDentro_empresa(document.getElementById(parseInt(elementoSeleccionado_empresa)-1));
		}
		return 0;
		
		case 13:
		if(divLista_empresa.style.display=="block" && elementoSeleccionado_empresa!=0)
		{
			clickLista_empresa(document.getElementById(elementoSeleccionado_empresa))
		}
		return 0;
		
		default: return 1;
	}
}	

function rellenaLista_empresa()
{
	var valor_empresa=inputLista_empresa.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_empresa)) divLista_empresa.style.display="none";
	else
	{
		if(busquedaEnBD_empresa()==0)
		{	
			// Si no hay que buscar el valor_empresa en la BD
			busqueda_empresa=valor_empresa;
	
			// Hago el filtrado de la nueva cadena_empresa ingresada
			filtraLista_empresa(valor_empresa);
			// Si no quedan elementos para mostrar en la lista
			if(divLista_empresa.childNodes[0]==null) { divLista_empresa.style.display="none"; nuevaCadenaNula_empresa(valor_empresa); }
			else { reiniciaSeleccion_empresa(); formateaLista_empresa(valor_empresa); }
		}
		else
		{	
			/* Si se necesita verificar la base de datos, guardo el patron de busqueda_empresa con el que se
			busco y luego recibo en una variable si existen mas resultados de los que se van a mostrar */
			busqueda_empresa=valor_empresa;

			var ajax_empresa=nuevoAjax_empresa();
			ajax_empresa.open("POST", "includes/text_predic_tarjetajamar/texto_predictivo_empresa.php?", true);
			ajax_empresa.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			ajax_empresa.send("busqueda_empresa="+valor_empresa);
		
			ajax_empresa.onreadystatechange=function()
			{	
				if (ajax_empresa.readyState==4)
				{
					if(!ajax_empresa.responseText) { divLista_empresa.style.display="none"; }
					else 
					{
						var respuesta_empresa=new Array(2);
						respuesta_empresa=ajax_empresa.responseText.split("&");
				
						/* Obtengo un valor_empresa que representa si tengo que ir a BD en las proximas 
						busquedas con cadena_empresa similar */
						nuevaBusqueda_empresa=respuesta_empresa[0];
				
						// Si se obtuvieron datos los muestro
						if(respuesta_empresa[1]!="vacio") 
						{ 
							divLista_empresa.style.display="block"; 
							divLista_empresa.innerHTML=respuesta_empresa[1]; 
							// Coloco en negrita las palabras
							reiniciaSeleccion_empresa();
							formateaLista_empresa(valor_empresa); 
						}
						// En caso contrario seteo la busqueda_empresa actual como una busqueda_empresa sin resultados
						else nuevaCadenaNula_empresa(valor_empresa);
					}
				}
			}
		}
	}
}

function clickLista_empresa(elemento_empresa)

{
	/* Se ejecuta cuando se hace clic en algun elemento de la lista. Se coloca en el input el
	valor del elemento clickeado */
	v_empresa=1;
	valor_empresa=limpiaPalabra_empresa(elemento_empresa.innerHTML); 
	busqueda_empresa=valor_empresa; 
	inputLista_empresa.value=valor_empresa;
	divLista_empresa.style.display="none"; 
	elemento_empresa.className="normal";
}

function mouseFuera_empresa()
{
	// Des-selecciono el elemento_empresa actualmente seleccionado, si es que hay alguno
	if(elementoSeleccionado_empresa!=0 && document.getElementById(elementoSeleccionado_empresa)) document.getElementById(elementoSeleccionado_empresa).className="normal"; 
}

function mouseDentro_empresa(elemento_empresa)
{
	mouseFuera_empresa();
	elemento_empresa.className="resaltado";
	// Establezco el nuevo elemento_empresa seleccionado
	elementoSeleccionado_empresa=elemento_empresa.id;
}
