var buscadorPuntosPartida_codigos = new Array();
var buscadorPuntosPartida_descripciones = new Array();
var buscadorPuntosPartida_tipoPunto = new Array();
var buscadorPuntosPartida_AuxCod = "";
var buscadorPuntosPartida_AuxDes = "";
var buscadorPuntosPartida_valorCod = "";
var buscadorPuntosPartida_valorDes = "";
var buscadorPuntosPartida_index = 0;
var cacheBuscadorPuntosPartida = new Array();

function getJSON(url)
{
	var http = new XMLHttpRequest();
	http.open("get", url, false);
	http.send(null);
	return http.responseText;
}
		
function guardarEnCachePuntosPartida(info,conEstaciones,soloEstaciones,puntos)
{
	if(!cacheBuscadorPuntosPartida[conEstaciones + "|" + soloEstaciones])
	{
		cacheBuscadorPuntosPartida[conEstaciones + "|" + soloEstaciones] = new Array();
	}
	cacheBuscadorPuntosPartida[conEstaciones + "|" + soloEstaciones][info] = puntos;
}

function buscaEnCachePuntosPartida(info,conEstaciones,soloEstaciones)
{
	var puntos = null;
	var cachePorParamsBusqueda = cacheBuscadorPuntosPartida[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 filtraPuntosPartida(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 getPuntosPartida(urlPuntos, conEstaciones, soloEstaciones, info)
{
	info = info.toLowerCase();
	var puntos = buscaEnCachePuntosPartida(info, conEstaciones, soloEstaciones);
				
	if(!puntos)
	{
		puntos = new Array();
		var strJson = getJSON(urlPuntos + "&next=puntosPartida&conEstaciones="+conEstaciones + "&soloEstaciones="+soloEstaciones+"&info=" + info);
		if(strJson != null && strJson != "") 
		{
			var respuesta = eval("(" + strJson + ")");
			if(respuesta.res && respuesta.res.ok.toLowerCase() == "true" && respuesta.res.PuntoPartida) 
			{
				if(respuesta.res.PuntoPartida.l.length != null && respuesta.res.PuntoPartida.l.length != "undefined")
				{
					puntos = respuesta.res.PuntoPartida.l;
				}
				else
				{
					puntos[0] = respuesta.res.PuntoPartida.l;
				}
				
			}
			guardarEnCachePuntosPartida(info,conEstaciones,soloEstaciones,puntos);
		}
	}
	else
	{
		puntos = filtraPuntosPartida(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 buscadorPuntosPartida_mouseover (cod, des, indice, css_Fondo, css_FondoSeleccionado) {
    for (j=0;j<buscadorPuntosPartida_codigos.length;j++)
    {
        document.getElementById("buscadorPuntosPartida_" + buscadorPuntosPartida_codigos[j]).className = css_Fondo;
    }
    document.getElementById("buscadorPuntosPartida_" + cod).className = css_FondoSeleccionado;
    if (buscadorPuntosPartida_codigos[0] != cod) 
    {
        document.getElementById("buscadorPuntosPartida_" +  buscadorPuntosPartida_codigos[0]).className = css_Fondo;
    } 
    buscadorPuntosPartida_index = indice;
    //buscadorPuntosPartida_Aux = unescape(cod + ', ' + des);
    buscadorPuntosPartida_AuxCod = unescape(cod);
    buscadorPuntosPartida_AuxDes = unescape(des);
    
    document.getElementById("buscadorPuntosPartida_" + cod).style.cursor = "pointer";
}

function buscadorPuntosPartida_mouseout (cod,css_Fondo,css_FondoSeleccionado) {
    document.getElementById("buscadorPuntosPartida_" + cod).className = css_Fondo;
    if (buscadorPuntosPartida_codigos[0] != cod) {
        document.getElementById("buscadorPuntosPartida_" +  buscadorPuntosPartida_codigos[0]).className = css_FondoSeleccionado;
    } 
    buscadorPuntosPartida_AuxCod = "";
    buscadorPuntosPartida_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 buscadorPuntosPartida_filtradoClick (pCod, pDes) {
    document.getElementById("tbOrigenes").value = trim(unescape(pDes.substring(pDes.indexOf("-")+1).toUpperCase()));
    document.getElementById("tbOrigenesHidden").value = pCod.toUpperCase();
    //alert('He seleccionado ' + pCod + ' y la des es ' + pDes);
    document.getElementById("buscadorPuntosPartida_generalResults").style.display = "none";       
}  

 function buscadorPuntosPartida_autocompleta(evento, info, urlBase, sesion, urlBaseEstilos, codigo, descripcion, tipoPunto, conEstaciones, soloEstaciones,css_Fondo, css_FondoSeleccionado,tabla,letraPeq){
 
	//alert(urlBase);
	
    if (evento != null && ((evento.keyCode == 38) || (evento.keyCode == 40))) {
        for (j=0;j<buscadorPuntosPartida_codigos.length;j++){
            buscadorPuntosPartida_AuxCod = "";
            buscadorPuntosPartida_AuxDes = "";
            document.getElementById("buscadorPuntosPartida_" + buscadorPuntosPartida_codigos[j]).className = css_Fondo;
        }
        if (evento.keyCode == 38){
            //flecha arriba
            if ((buscadorPuntosPartida_index - 1) != (-1)){
                document.getElementById("buscadorPuntosPartida_" + buscadorPuntosPartida_codigos[buscadorPuntosPartida_index]).className = css_Fondo;
                buscadorPuntosPartida_index -= 1;
                document.getElementById("buscadorPuntosPartida_" + buscadorPuntosPartida_codigos[buscadorPuntosPartida_index]).className = css_FondoSeleccionado;
                buscadorPuntosPartida_valorCod = buscadorPuntosPartida_codigos[buscadorPuntosPartida_index];   
                buscadorPuntosPartida_valorDes = buscadorPuntosPartida_descripciones[buscadorPuntosPartida_index];   
                
            }
        }
        if (evento.keyCode == 40){
            //flecha abajo
            if ((buscadorPuntosPartida_index + 1) < buscadorPuntosPartida_codigos.length) {
                document.getElementById("buscadorPuntosPartida_" + buscadorPuntosPartida_codigos[buscadorPuntosPartida_index]).className = css_Fondo;
                buscadorPuntosPartida_index += 1;
                document.getElementById("buscadorPuntosPartida_" + buscadorPuntosPartida_codigos[buscadorPuntosPartida_index]).className = css_FondoSeleccionado;
                buscadorPuntosPartida_valorCod = buscadorPuntosPartida_codigos[buscadorPuntosPartida_index];
                buscadorPuntosPartida_valorDes = buscadorPuntosPartida_descripciones[buscadorPuntosPartida_index];   
            }
        }
    }else if (evento != null && evento.keyCode == 13) {
        if (document.getElementById("buscadorPuntosPartida_" + buscadorPuntosPartida_codigos[buscadorPuntosPartida_index]))
        {
           document.getElementById("buscadorPuntosPartida_" + buscadorPuntosPartida_codigos[buscadorPuntosPartida_index]).focus();
           if (buscadorPuntosPartida_valorCod == "") {
               buscadorPuntosPartida_valorCod = buscadorPuntosPartida_codigos[0];
               buscadorPuntosPartida_valorDes = buscadorPuntosPartida_descripciones[0];   
           }
           buscadorPuntosPartida_filtradoClick (buscadorPuntosPartida_valorCod, buscadorPuntosPartida_valorDes);
           buscadorPuntosPartida_valorCod = "";
           buscadorPuntosPartida_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 = "";
         buscadorPuntosPartida_codigos = new Array ();
         buscadorPuntosPartida_descripciones = new Array ();
         buscadorPuntosPartida_index = 0;
         document.getElementById("buscadorPuntosPartida_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();
					buscadorPuntosPartida_codigos[_index] = localidadCod;
					buscadorPuntosPartida_descripciones[_index] = localidadDes;
					buscadorPuntosPartida_tipoPunto[_index] = 0; // usaremos el cero para indicar que es un punto agregado
					
								   
					
					str += "<tr>";
					//str += "\n";
					str += "<td height='30' id='buscadorPuntosPartida_" + localidadCod + "' align='left' ";
					if (primer) {
						primer = false;
						str += "class='"+css_FondoSeleccionado+"' ";
					}
					str += "onClick=javascript:buscadorPuntosPartida_filtradoClick('" + escape(localidadCod) + "','" + escape(localidadDes) + "'); "
					str += "onMouseOver=javascript:buscadorPuntosPartida_mouseover('" + escape(localidadCod) + "','" + escape(localidadDes) + "'," + indC + ",'"+css_Fondo+"','"+css_FondoSeleccionado+"'); "
					str += "onMouseOut=javascript:buscadorPuntosPartida_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;
						
						//buscadorPuntosPartida_ids[_index] = id;
						buscadorPuntosPartida_codigos[_index] = cod;                    
						buscadorPuntosPartida_descripciones[_index] = des;
						buscadorPuntosPartida_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='buscadorPuntosPartida_" + cod + "' align='left' ";
						if (primer) {
							primer = false;
							str += "class='FondoNaranjaClaro' ";
						}
										   
						
						str += "onMouseOver=javascript:buscadorPuntosPartida_mouseover('" + cod + "','" + escape(des) + "'," + indC + ",'"+css_Fondo+"','"+css_FondoSeleccionado+"'); "
						str += "onMouseOut=javascript:buscadorPuntosPartida_mouseout('" + cod + "','"+css_Fondo+"','"+css_FondoSeleccionado+"'); "
						//str += "onClick=javascript:buscadorPuntosPartida_filtradoClick('" + escape(p_nodeC[indC].getAttribute("c")) + "','" + escape(p_nodeC[indC].getAttribute("d")) + "'); "                    
						str += "onClick=javascript:buscadorPuntosPartida_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("buscadorPuntosPartida_generalResults").innerHTML = str;
        //alert(str);
        document.getElementById("buscadorPuntosPartida_generalResults").style.display = "";
    }
}

function buscadorPuntosPartida_completaTexto () {
    if(buscadorPuntosPartida_AuxCod == "") 
    {
        if (buscadorPuntosPartida_descripciones[buscadorPuntosPartida_index] != undefined) 
            buscadorPuntosPartida_filtradoClick(buscadorPuntosPartida_codigos[buscadorPuntosPartida_index], buscadorPuntosPartida_descripciones[buscadorPuntosPartida_index]);
    }
    else
        buscadorPuntosPartida_filtradoClick(buscadorPuntosPartida_AuxCod, buscadorPuntosPartida_AuxDes);
}

