// JavaScript Document
var HTTP_Request = false;
var g_PopupIFrame;
var Contenedor;
var ajaxBox_offsetY = 0;
var ajaxBox_offsetX = 0;
var ajax_list_MSIE = false;
var v;
var busqueda=null; 
var ultimaBusquedaNula=null;
var divLista = document.getElementById('lista');
var inputLista = document.getElementById('destination');
var elementoSeleccionado;
var ultimoIdentificador;
var SeleccionCompletada = false;
var Tecla = 0;
	
function TamanoDiv() {
  var myWidth = 0, myHeight = 0;

  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  
  var mydiv
  
  mydiv = document.getElementById( "charging" )
  mycuerpo = document.getElementById( "cuerpazo" )
  myframe = document.getElementById( "iframe1" )
  
  
}

function creaObjetoHTTP_Request() {

        HTTP_Request = false;

        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            HTTP_Request = new XMLHttpRequest();
            if (HTTP_Request.overrideMimeType) {
                HTTP_Request.overrideMimeType('text/xml');
                // Ver nota sobre esta linea al final
            }
        } else if (window.ActiveXObject) { // IE
            try {
                HTTP_Request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    HTTP_Request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!HTTP_Request) {
            alert('Falla :( No es posible crear una instancia XMLHTTP');
            return false;
        }

    }
	
function MyRequestForCombos(divReceptor,url){
        creaObjetoHTTP_Request();			//si el objeto no está creado lo creamos de nuevo
		
		var Contenedor = document.getElementById(divReceptor);

        HTTP_Request.open("GET", url, true);

		HTTP_Request.onreadystatechange = function(){
			if (HTTP_Request.readyState == 4) {
				if (HTTP_Request.status == 200) {
					var Aux;
					var otravez = true;
					Aux = unescape(HTTP_Request.responseText).replace("+"," ");
					Aux = Aux.replace("+"," ");
					Aux = Aux.replace("+"," ");
					Aux = Aux.replace("+"," ");
					Aux = Aux.replace("+"," ");
					Aux = Aux.replace("+"," ");
					Aux = Aux.replace("+"," ");
					Aux = Aux.replace("+"," ");
					Aux = Aux.replace("+"," ");
					Contenedor.innerHTML = Aux.replace("+"," ");
					if(Aux == "vacio"){EsconderAjax();}
				}
			}
		}
        HTTP_Request.send(null);
	}
	
	function BuscaNtilde(valor){
		//busca la Ñ o la ñ y la cambia por
		var Aux_Valor; 
		Aux_Valor = valor.replace('ñ','\u00f1');
		Aux_Valor = valor.replace('Ñ','\u00d1');
		
		return Aux_Valor;
	}
	
	function Listado(){
		var valor = BuscaNtilde(document.getElementById('destination').value);
		var auxUrl;
			
		auxUrl = "search_suggest.asp?busqueda=" + valor;
		MyRequestForCombos('lista',auxUrl);
	}

function asignaVariables()
{
	// Funcion que asigna variables que se usan a lo largo de las funciones	
	v=1;
	busqueda=null; 
	ultimaBusquedaNula=null;
	divLista=document.getElementById("lista");
	inputLista=document.getElementById("destination");
	elementoSeleccionado=0;
	ultimoIdentificador=0;
}

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
	var x=0, verificaExpresion=new RegExp("^("+valor+")", "i");
	
	while(divLista.childNodes[x]!=null)
	{
		// Asigo el ID para reconocerlo cuando se navega con el teclado
		divLista.childNodes[x].id=x+1;
		// Coloco en cada elemento de la lista en negrita lo que se haya ingresado en el input
		divLista.childNodes[x].innerHTML=divLista.childNodes[x].innerHTML.replace(verificaExpresion, "<b>$1</b>");
		x++;
	}
}

function limpiaPalabra(palabra)
{
	// Funcion encargada de sacarle el codigo HTML de la negrita a las palabras
	palabra=palabra.replace(/<b>/i, "");
	palabra=palabra.replace(/<\/b>/i, "");
	palabra=palabra.replace("+"," ");
	palabra=palabra.replace("+"," ");
	palabra=palabra.replace("+"," ");
	palabra=palabra.replace("+"," ");
	palabra=palabra.replace("+"," ");
	palabra=palabra.replace("+"," ");
	palabra=palabra.replace("+"," ");
	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");
	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((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 borro 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++;
	}
}

function reiniciaSeleccion()
{
	mouseFuera(); 
	elementoSeleccionado=0;
}

function navegaTeclado(evento)
{
	var teclaPresionada=(document.all) ? evento.keyCode : evento.which;
	
	Tecla = 0;
	
	switch(teclaPresionada)
	{
		case 40:
		if(elementoSeleccionado<divLista.childNodes.length)
		{
			mouseDentro(document.getElementById(parseInt(elementoSeleccionado)+1));
		}
		return 0;
		
		case 38:
		if(elementoSeleccionado>1)
		{
			mouseDentro(document.getElementById(parseInt(elementoSeleccionado)-1));
		}
		return 0;
		
		case 13:
		if(divLista.style.display=="block" && elementoSeleccionado!=0)
		{
			Tecla = 13;
			clickLista(document.getElementById(elementoSeleccionado));
			EsconderAjax();
		}
		return 0;
		
		default: return 1;
	}
}	

function rellenaLista()
{
	var valor=document.getElementById('input_2').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)) EsconderAjax();
	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) { EsconderAjax; nuevaCadenaNula(valor); }
			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;

			creaObjetoAjax();
			
			Ajax.open("GET", "search_suggest.asp", true);
			//ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			Ajax.send("busqueda="+valor);
		
			Ajax.onreadystatechange=function()
			{	
				if (Ajax.readyState==4)
				{
					if(!Ajax.responseText) { EsconderAjax(); }
					else 
					{
						var respuesta=new Array(2);
						respuesta=Ajax.responseText;
				
						// Si se obtuvieron datos los muestro
						if(respuesta!="vacio") 
						{ 
							MostrarAjax();
							divLista.innerHTML=respuesta[1]; 
							// Coloco en negrita las palabras
							reiniciaSeleccion();
							formateaLista(valor); 
						}
						// En caso contrario reseteo la busqueda actual como una busqueda sin resultados
						else nuevaCadenaNula(valor);
					}
				}
			}
		}
	}
}

function EsconderAjax(){
	document.getElementById('lista').style.display="none";
	if(g_PopupIFrame!=null){
		BorrarFrame();
	}
}

function MostrarAjax(){
	document.getElementById('lista').style.display="block";
	MostrarFrame();
}

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;
	EsconderAjax(); 
	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";
	// Establezco el nuevo elemento seleccionado
	elementoSeleccionado=elemento.id;
}

function PonDivPosicion(){
	//Tenemos que alinear el div lista con la caja destination
	ajax_optionDiv = document.getElementById('lista')
	inputObj = document.getElementById('destination')
	
	//Comprobamos el navegador del usuario
	if(navigator.userAgent.indexOf('MSIE')>=0 && navigator.userAgent.indexOf('Opera')<0)ajax_list_MSIE=true;
	
	ajax_optionDiv.style.top = (ajax_getTopPos(inputObj) + inputObj.offsetHeight + ajaxBox_offsetY) + 'px';
	ajax_optionDiv.style.left = (ajax_getLeftPos(inputObj) + ajaxBox_offsetX) + 'px';
}

function ajax_getTopPos(inputObj)
{
	
  var returnValue = inputObj.offsetTop;
  while((inputObj = inputObj.offsetParent) != null){
	returnValue += inputObj.offsetTop;
  }
  return returnValue;
}

function ajax_getLeftPos(inputObj)
{

  var returnValue = inputObj.offsetLeft;
  //if (ajax_list_MSIE && navigator.userAgent.indexOf("7.0")==-1) returnValue =returnValue  + 165;//lo he de incrementar para explorer 6.0
  while((inputObj = inputObj.offsetParent) != null)returnValue += inputObj.offsetLeft;
  return returnValue;
}


function BorrarFrame()
{
	//borramos el iFrame para que no moleste
	if(g_PopupIFrame!=null){
		//alert('entra');
		document.body.removeChild(g_PopupIFrame);
		g_PopupIFrame=null;
	}
}

function MostrarFrame()
{
	if(navigator.appName=="Microsoft Internet Explorer" && navigator.appVersion.search("MSIE 6.0")!=-1){
		if(g_PopupIFrame!=null){
			//alert('entra');
			document.body.removeChild(g_PopupIFrame);
			g_PopupIFrame=null;
		}
		//Incrementamos el zIndex para que el div sea superior
		var divPopup = document.getElementById('lista');
		divPopup.style.zIndex = divPopup.style.zIndex + 1;
		g_PopupIFrame = document.createElement("IFRAME");
		g_PopupIFrame.setAttribute("src", "");
	
		//Cambiamos el tamaño del iFrame para que sea como el del DIV
		g_PopupIFrame.style.position="absolute";
		g_PopupIFrame.style.left =divPopup.offsetLeft + 'px';
		g_PopupIFrame.style.top =divPopup.offsetTop + 'px';
		g_PopupIFrame.style.width =divPopup.offsetWidth + 'px';
		g_PopupIFrame.style.height = divPopup.offsetHeight + 'px';
		g_PopupIFrame.style.filter = 'alpha(opacity=0)';
	
		document.body.appendChild(g_PopupIFrame);
	}
}