var buscadorPuntosLlegada_codigos = new Array();
var buscadorPuntosLlegada_descripciones = new Array();
var buscadorPuntosLlegada_tipoPunto = new Array();
var buscadorPuntosLlegada_AuxCod = "";
var buscadorPuntosLlegada_AuxDes = "";
var buscadorPuntosLlegada_valorCod = "";
var buscadorPuntosLlegada_valorDes = "";
var buscadorPuntosLlegada_index = 0;
var cacheBuscadorPuntosLlegada = new Array();

function getJSON(url)
{
	var http = new XMLHttpRequest();
	http.open("get", url, false);
	http.send(null);
	return http.responseText;
}
		
function guardarEnCachePuntosLlegada(info,conEstaciones,soloEstaciones,puntos)
{
	if(!cacheBuscadorPuntosLlegada[conEstaciones + "|" + soloEstaciones])
	{
		cacheBuscadorPuntosLlegada[conEstaciones + "|" + soloEstaciones] = new Array();
	}
	cacheBuscadorPuntosLlegada[conEstaciones + "|" + soloEstaciones][info] = puntos;
}

function buscaEnCachePuntosLlegada(info,conEstaciones,soloEstaciones)
{
	var puntos = null;
	var cachePorParamsBusqueda = cacheBuscadorPuntosLlegada[conEstaciones + "|" + soloEstaciones];
	if(cachePorParamsBusqueda)
	{
		puntos = cachePorParamsBusqueda[info];
		if(!puntos)
		{
			for(var i in cachePorParamsBusqueda)
			{
				if(info.indexOf(i) > -1)
				{
					puntos = cachePorParamsBusqueda[i];
					break;
				}
			}
		}
	}
	return puntos;
}

function filtraPuntosLlegada(puntos, info)
{
	var puntosRes = new Array();
	if(puntos)
	{
		var localidades = new Array();
		
		for(var i in puntos)
		{				
			var localidad = puntos[i];
			var valida = true;
			if(localidad.c.toLowerCase().indexOf(info) < 0 && localidad.n.toLowerCase().indexOf(info) < 0)
			{
				valida = false;
				var puntosLoc = new Array();
				if(localidad.p.length != null && localidad.p.length != "undefined")
				{
					puntosLoc = localidad.p;
				}
				else 
				{
					puntosLoc[0] = localidad.p;
				}
				for(var p in puntosLoc)
				{
					var punto = puntosLoc[p];
					if(punto.c.toLowerCase().indexOf(info) > -1 || punto.d.toLowerCase().indexOf(info) > -1 || punto.t.toLowerCase().indexOf(info) > -1)
					{
						valida = true;
						break;
					}
				}						
			}
			if(valida) puntosRes[i] = localidad;
		}
	}
	return puntosRes;
}

function getPuntosLlegada(urlPuntos, conEstaciones, soloEstaciones, info)
{
	info = info.toLowerCase();
	var puntos = buscaEnCachePuntosLlegada(info, conEstaciones, soloEstaciones);
				
	if(!puntos)
	{
		puntos = new Array();
		var strJson = getJSON(urlPuntos + "&next=puntosLlegada&conEstaciones="+conEstaciones + "&soloEstaciones="+soloEstaciones+"&info=" + info);
		if(strJson != null && strJson != "") 
		{
			var respuesta = eval("(" + strJson + ")");
			if(respuesta.res && respuesta.res.ok.toLowerCase() == "true" && respuesta.res.PuntoLlegada) 
			{
				if(respuesta.res.PuntoLlegada.l.length != null && respuesta.res.PuntoLlegada.l.length != "undefined")
				{
					puntos = respuesta.res.PuntoLlegada.l;
				}
				else
				{
					puntos[0] = respuesta.res.PuntoLlegada.l;
				}
				
			}
			guardarEnCachePuntosLlegada(info,conEstaciones,soloEstaciones,puntos);
		}
	}
	else
	{
		puntos = filtraPuntosLlegada(puntos, info);
	}
	return puntos;
}

function abreDesc(tipo)
{           
    document.getElementById(tipo + "Preg").style.cursor = "pointer";

    if (document.getElementById(tipo + "Desc").style.display == "block")
        document.getElementById(tipo + "Desc").style.display = "none";                
    else
        document.getElementById(tipo + "Desc").style.display = "block";    
}

function buscadorPuntosLlegada_mouseover (cod, des, indice, css_Fondo, css_FondoSeleccionado) {

    for (j=0;j<buscadorPuntosLlegada_codigos.length;j++)
    {
        document.getElementById("buscadorPuntosLlegada_" + buscadorPuntosLlegada_codigos[j]).className = css_Fondo;
    }
    document.getElementById("buscadorPuntosLlegada_" + cod).className = css_FondoSeleccionado;
    if (buscadorPuntosLlegada_codigos[0] != cod) 
    {
        document.getElementById("buscadorPuntosLlegada_" +  buscadorPuntosLlegada_codigos[0]).className = css_Fondo;
    } 
    buscadorPuntosLlegada_index = indice;
    //buscadorPuntosLlegada_Aux = unescape(cod + ', ' + des);
    buscadorPuntosLlegada_AuxCod = unescape(cod);
    buscadorPuntosLlegada_AuxDes = unescape(des);
    
    document.getElementById("buscadorPuntosLlegada_" + cod).style.cursor = "pointer";
}

function buscadorPuntosLlegada_mouseout (cod,css_Fondo,css_FondoSeleccionado) {

    document.getElementById("buscadorPuntosLlegada_" + cod).className = css_Fondo;
    if (buscadorPuntosLlegada_codigos[0] != cod) {
        document.getElementById("buscadorPuntosLlegada_" +  buscadorPuntosLlegada_codigos[0]).className = css_FondoSeleccionado;
    } 
    buscadorPuntosLlegada_AuxCod = "";
    buscadorPuntosLlegada_AuxDes = "";
}
function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function buscadorPuntosLlegada_filtradoClick (pCod, pDes) {

    document.getElementById("tbDestinos").value = trim(unescape(pDes.substring(pDes.indexOf("-")+1).toUpperCase()));
    document.getElementById("tbDestinosHidden").value = pCod.toUpperCase();
    //alert('He seleccionado ' + pCod + ' y la des es ' + pDes);
    document.getElementById("buscadorPuntosLlegada_generalResults").style.display = "none";   
    
}  

 function buscadorPuntosLlegada_autocompleta(evento, info, urlBase, sesion, urlBaseEstilos, codigo, descripcion, tipoPunto, conEstaciones, soloEstaciones, css_Fondo, css_FondoSeleccionado,tabla,letraPeq){
    if (evento != null && ((evento.keyCode == 38) || (evento.keyCode == 40))) {
        for (j=0;j<buscadorPuntosLlegada_codigos.length;j++){
            buscadorPuntosLlegada_AuxCod = "";
            buscadorPuntosLlegada_AuxDes = "";
            document.getElementById("buscadorPuntosLlegada_" + buscadorPuntosLlegada_codigos[j]).className = css_Fondo;
        }
        if (evento.keyCode == 38){
            //flecha arriba
            if ((buscadorPuntosLlegada_index - 1) != (-1)){
                document.getElementById("buscadorPuntosLlegada_" + buscadorPuntosLlegada_codigos[buscadorPuntosLlegada_index]).className = css_Fondo;
                buscadorPuntosLlegada_index -= 1;
                document.getElementById("buscadorPuntosLlegada_" + buscadorPuntosLlegada_codigos[buscadorPuntosLlegada_index]).className = css_FondoSeleccionado;
                buscadorPuntosLlegada_valorCod = buscadorPuntosLlegada_codigos[buscadorPuntosLlegada_index];   
                buscadorPuntosLlegada_valorDes = buscadorPuntosLlegada_descripciones[buscadorPuntosLlegada_index];   
                
            }
        }
        if (evento.keyCode == 40){
            //flecha abajo
            if ((buscadorPuntosLlegada_index + 1) < buscadorPuntosLlegada_codigos.length) {
                document.getElementById("buscadorPuntosLlegada_" + buscadorPuntosLlegada_codigos[buscadorPuntosLlegada_index]).className = css_Fondo;
                buscadorPuntosLlegada_index += 1;
                document.getElementById("buscadorPuntosLlegada_" + buscadorPuntosLlegada_codigos[buscadorPuntosLlegada_index]).className = css_FondoSeleccionado;
                buscadorPuntosLlegada_valorCod = buscadorPuntosLlegada_codigos[buscadorPuntosLlegada_index];
                buscadorPuntosLlegada_valorDes = buscadorPuntosLlegada_descripciones[buscadorPuntosLlegada_index];   
            }
        }
    }else if (evento != null && evento.keyCode == 13) {
        if (document.getElementById("buscadorPuntosPartida_" + buscadorPuntosPartida_codigos[buscadorPuntosPartida_index]))
        {
           document.getElementById("buscadorPuntosLlegada_" + buscadorPuntosLlegada_codigos[buscadorPuntosLlegada_index]).focus();
           if (buscadorPuntosLlegada_valorCod == "") {
               buscadorPuntosLlegada_valorCod = buscadorPuntosLlegada_codigos[0];
               buscadorPuntosLlegada_valorDes = buscadorPuntosLlegada_descripciones[0];   
           }
           buscadorPuntosLlegada_filtradoClick (buscadorPuntosLlegada_valorCod, buscadorPuntosLlegada_valorDes);
           buscadorPuntosLlegada_valorCod = "";
           buscadorPuntosLlegada_valorDes = "";   
        }

    // FCG 16/09/2009 - Evitamos que al usar el tabulador (código = 9) para navegar entre los campos de la ventana, se reseteen los valores internos            
    }else if ((evento == null) || (evento != null && evento.keyCode != 9)) {
        var str = "";
         buscadorPuntosLlegada_codigos = new Array ();
         buscadorPuntosLlegada_descripciones = new Array ();
         buscadorPuntosLlegada_index = 0;
         document.getElementById("buscadorPuntosLlegada_generalResults").innerHTML = "";
    
        if (info.length > 2) {
           var urlPuntos = urlBase + "?sesionPassport=" + sesion;
           
		   	var l_nodeC = getPuntosPartida(urlPuntos,conEstaciones,soloEstaciones,info);
			if(l_nodeC)
			{		
                       
				str += "<div class='desplegable'>"; 
				str += "<table class='"+tabla+" "+css_Fondo+"' border='0' cellpadding='3' cellspacing='0' width='320'>";

				var primer = true;
				var _index = 0;
							
				for (var indL in l_nodeC) 
				{                
					var localidadDes = l_nodeC[indL].n.toUpperCase();
					var localidadCod = l_nodeC[indL].c.toUpperCase();
					buscadorPuntosLlegada_codigos[_index] = localidadCod;
					buscadorPuntosLlegada_descripciones[_index] = localidadDes;
					buscadorPuntosLlegada_tipoPunto[_index] = 0; // usaremos el cero para indicar que es un punto agregado
					
					str += "<tr>";
					//str += "\n";
					str += "<td height='30px' id='buscadorPuntosLlegada_" + localidadCod + "' align='left' ";
					if (primer) {
						primer = false;
						str += "class='"+css_FondoSeleccionado+"' ";
					}
					str += "onClick=javascript:buscadorPuntosLlegada_filtradoClick('" + escape(localidadCod) + "','" + escape(localidadDes) + "'); "
					str += "onMouseOver=javascript:buscadorPuntosLlegada_mouseover('" + escape(localidadCod) + "','" + escape(localidadDes) + "'," + indC + ",'"+css_Fondo+"','"+css_FondoSeleccionado+"'); "
					str += "onMouseOut=javascript:buscadorPuntosLlegada_mouseout('" + localidadCod + "','"+css_Fondo+"','"+css_FondoSeleccionado+"'); "                
					str += " >";
					
					str += "<span class='"+letraPeq+"' >- <b>" + localidadDes + "&nbsp;&nbsp;<span style='color:blue'><b>(Todos)</b></span></b></span>";
					str += "</td>";
					str += "</tr>"; 
					_index += 1;
						
					var p_nodeC = new Array();
					if(l_nodeC[indL].p.length != null && l_nodeC[indL].p.length != "undefined")
					{
						p_nodeC = l_nodeC[indL].p;
					}
					else
					{
						p_nodeC[0] = l_nodeC[indL].p;
					}                               
									
					for (var indC in p_nodeC) 
					{                                
						var cod = p_nodeC[indC].c.toLowerCase();
						var des = p_nodeC[indC].d.toLowerCase();
						var tipoPunto = p_nodeC[indC].t;
						
						//buscadorPuntosLlegada_ids[_index] = id;
						buscadorPuntosLlegada_codigos[_index] = cod;                    
						buscadorPuntosLlegada_descripciones[_index] = des;
						buscadorPuntosLlegada_tipoPunto[_index] = tipoPunto;
						
						if (cod.indexOf(info.toLowerCase()) != -1)
						{
							var s1Cod = p_nodeC[indC].c.substring(0, cod.indexOf(info.toLowerCase()));
							var negritaCod = p_nodeC[indC].c.substring(cod.indexOf(info.toLowerCase()),(info.length + cod.indexOf(info.toLowerCase())));
							var s2Cod = p_nodeC[indC].c.substring((info.length + cod.indexOf(info.toLowerCase())));
						}
						else
						{
							s1Cod = p_nodeC[indC].c;
							negritaCod='';
							s2Cod = '';
						}
						
						if (des.indexOf(info.toLowerCase()) != -1)
						{
							var s1Des = p_nodeC[indC].d.substring(0,des.indexOf(info.toLowerCase()));
							var negritaDes = p_nodeC[indC].d.substring(des.indexOf(info.toLowerCase()),(info.length + des.indexOf(info.toLowerCase())));
							var s2Des = p_nodeC[indC].d.substring((info.length + des.indexOf(info.toLowerCase())));
						}
						else
						{
							s1Des = p_nodeC[indC].d;
							negritaDes='';
							s2Des = '';
						}  

						str += "<tr>";
						str += "<td id='buscadorPuntosLlegada_" + cod + "' align='left' ";
						if (primer) {
							primer = false;
							str += "class='FondoNaranjaClaro' ";
						}
						str += "onMouseOver=javascript:buscadorPuntosLlegada_mouseover('" + cod + "','" + escape(des) + "'," + indC + ",'"+css_Fondo+"','"+css_FondoSeleccionado+"'); "
						str += "onMouseOut=javascript:buscadorPuntosLlegada_mouseout('" + cod + "'); "
						//str += "onClick=javascript:buscadorPuntosLlegada_filtradoClick('" + escape(p_nodeC[indC].getAttribute("c")) + "','" + escape(p_nodeC[indC].getAttribute("d")) + "'); "                    
						str += "onClick=javascript:buscadorPuntosLlegada_filtradoClick('" + cod + "','" + escape(des) + "'); "                    
						str += ">";

						// tipoPunto=1 es Aeropuerto y =2 Estacion
						if (tipoPunto == "1") 
							str += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src='" + urlBaseEstilos + "/images07/ComponenteAgregadorTransporte/ico_avion_arriba.gif' alt='0'/>";
						else
							str += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src='" + urlBaseEstilos + "/images07/ComponenteAgregadorTransporte/ico_tren.gif' alt='0'/>";
						
						str += "&nbsp;&nbsp;&nbsp;";
						//str += "&nbsp;&nbsp;&nbsp;<span class='"+letraPeq+"' >" + s1Cod + "</span>";
						//str += "<span class='"+letraPeq+"' ><b>" + negritaCod + "</b></span>";
						//str += "<span class='"+letraPeq+"' >" + s2Cod + "</span> - ";

						str += "<span class='"+letraPeq+"' >" + s1Des + "</span>";
						str += "<span class='"+letraPeq+"' ><b>" + negritaDes + "</b></span>";
						str += "<span class='"+letraPeq+"' >" + s2Des + "</span>";
						str += "</td>";
						str += "</tr>"; 
						_index += 1;
					}                   
				}
			}
        }
        str += "</table>";
        str += "</div>"
        document.getElementById("buscadorPuntosLlegada_generalResults").innerHTML = str;
        //alert(str);
        document.getElementById("buscadorPuntosLlegada_generalResults").style.display = "";
    }
}

function buscadorPuntosLlegada_completaTexto () {
    if(buscadorPuntosLlegada_AuxCod == "") 
    {
        if (buscadorPuntosLlegada_descripciones[buscadorPuntosLlegada_index] != undefined) 
            buscadorPuntosLlegada_filtradoClick(buscadorPuntosLlegada_codigos[buscadorPuntosLlegada_index], buscadorPuntosLlegada_descripciones[buscadorPuntosLlegada_index]);
    }
    else
        buscadorPuntosLlegada_filtradoClick(buscadorPuntosLlegada_AuxCod, buscadorPuntosLlegada_AuxDes);
}

