// Marcador para la geolocalizacion
var marcadorGeolocalizacion = null;
// Lista de marcadores para la vista de mapa
var marcadoresVistaMapa = new Array();
// Para el como llegar
var gdir;

//Inicializa el mapa
function cargarMapa(longitudInicial,latitudInicial,zoomInicial,tipoMapa,marcadores){
    var objMapa = document.getElementById("mapaGM");
    if(objMapa){
        var esSelectorLoc = (objMapa.className=="mapaSelectorLocalizacion");
        var esSelectorVista = (objMapa.className=="mapaSelectorVista");
        var esSelector = (esSelectorLoc || esSelectorVista);
        if(GBrowserIsCompatible()){
            map = new GMap2(objMapa);
            //Añade la capacidad de aumentar el zoom con doble click
            map.enableDoubleClickZoom();
            //si no es selector ponemos el control de mapa
            map.addControl(new GOverviewMapControl(new GSize(100,100)));
            map.addControl(new GLargeMapControl());             
            map.enableContinuousZoom();
            map.addControl(new GMapTypeControl());


            //si hay punto inicial lo ponemos
            if(longitudInicial && latitudInicial){
                map.setCenter(new GLatLng(latitudInicial,longitudInicial),zoomInicial?parseInt(zoomInicial):10);
                ponerLocalizacion(new GLatLng(latitudInicial,longitudInicial));
            }else
                map.setCenter(new GLatLng(38.994454,-1.859417), 10);
            return;
            if(tipoMapa)
                map.setMapType(tipoMapa2tipoGoogle(parseInt(tipoMapa)));

            if(esSelector){ //si es selector de localizacion ponemos el evento para añadir marcador en la posicion actual
                map.enableGoogleBar();
                if(esSelectorLoc){
                    GEvent.addListener(map, "click", function(marker, point){
                                                        if(!marker)
                                                            ponerLocalizacion(point);
                                                    });
                    //quitamos todos los eventos de doubleclick
                    GEvent.clearListeners(map,"doubleclick");
                }else if(esSelectorVista){
                    marcadoresVistaMapa = new Array();
                    for(var i=0;i<marcadores.length;i++)
                        anadirMarcadorVistaMapa(marcadores[i][2],marcadores[i][3],marcadores[i][0],marcadores[i][1]);
                }
            }
            //creamos objeto para el como llegar
            gdir = new GDirections(map);
        }
    }
}

//pone un marcador en la posicion pulsada
function ponerLocalizacion(point){
   if(marcadorGeolocalizacion)
        map.removeOverlay(marcadorGeolocalizacion);
    marcadorGeolocalizacion = new GMarker(point);
    map.addOverlay(marcadorGeolocalizacion);
    map.panTo(point);  
  /* 
     anadirMarcadorVistaMapa('green','mid');
        direccion = "<div id='mapaDireccion'>"; 
        direccion += "<p><strong>Educlas</strong></p>";  
        direccion += "<p>Polígono Industrial Camporrosso</p>";
        direccion += "<p>C/ Cuenca - Parcela B1 - Naves 3-5</p>";
        direccion += "<p>02520 Chinchilla de Montearagón</p>"; 
        direccion += "<p>ALBACETE</p>";        
        direccion += "</div>";                        
        map.openInfoWindow(point,direccion);
                                  
        map.addOverlay(marcadorGeolocalizacion);
        map.panTo(point);     */                    
}


//ejecuta sobre el mapa el como llegar desde un punto a otro
function ejecutarComoLlegar(destino, descDestino){
    var controlOrigen = document.getElementById('origen');
    var origen = controlOrigen.value;
    if("albacete,ciudad real,toledo,cuenca,guadalajara,valencia".indexOf(origen.toLowerCase())!=-1)
        origen += ", España";
    var datosRuta = document.getElementById('datosRuta');
    var resumen = document.getElementById('resumenRuta');
    var indicaciones = document.getElementById('indicacionesRuta');
    function comoLlegarError(){
        if(origen.indexOf("España")==-1){ //si no encontramos resultados probamos a hacerlo con España detras
            origen += ", España";
            gdir.load("from: "+origen+" to: "+destino,{ "locale": "es"});
        }else{
            //ocultamos todo
            datosRuta.style.display = "none";
            alerta("No se encuentra el destino");
        }
    }
    //ponemos una imagen de "cargando"
    datosRuta.style.display = "block";
    if(resumen)
        resumen.innerHTML = "<img src='/img/cargando.gif' />";
    //borramos posibles resultados anteriores
    if(gdir)
        gdir.clear();

    var descripcionOrigen = origen;
    var descripcionDestino = descDestino;
    gdir = new GDirections(map);
    GEvent.addListener(gdir, "load", function(){
        comoLlegarRecibido(descripcionOrigen,descripcionDestino);
    });
    GEvent.addListener(gdir, "error", comoLlegarError);
    gdir.load("from: "+origen+" to: "+destino,{ "locale": "es", "getSteps": true});
}

//procesamiento al recibir el como llegar
function comoLlegarRecibido(descOrigen,descDestino){
    //procesamiento al recibir el como llegar
    var resumen = document.getElementById('resumenRuta');
    var indicaciones = document.getElementById('indicacionesRuta');
    //rellenamos los datos del resumen de ruta
    if(resumen){
        var html;
        html  = '<ul>';
        html +=     '<li>Distancia: '+ gdir.getDistance().html.toString()+'</li>';
        html +=     '<li>Duración: '+ gdir.getDuration().html.toString()+'</li>';
        html += '</ul>';
        resumen.innerHTML = html;
    }

    //rellenamos las indicaciones
    if(indicaciones){
        html  = "<table>";
        html +=     "<tr class='extremoRuta'><td colspan='3'>Salida <strong>"+descOrigen.toUpperCase()+"</strong></td></tr>";
        var n=1;
        for(var i=0;i<gdir.getNumRoutes();i++){
            var ruta = gdir.getRoute(i);
            for(var j=0;j<ruta.getNumSteps();j++){
                html += '<tr onclick="map.showMapBlowup(gdir.getRoute('+i+').getStep('+j+').getLatLng())" class="fila'+(n%2)+'">';
                html +=     "<td class='num'>";
                html +=         "<a href='javascript:void(0)'>"+n+"</a>";
                html +=     "</td>";
                html +=     "<td>";
                html +=         ruta.getStep(j).getDescriptionHtml();
                html +=     "</td>";
                html +=     "<td>";
                html +=         ruta.getStep(j).getDistance().html;
                html +=     "</td>";
                html += "</tr>";
                n++;
            }
        }
        html +=        "<tr class='extremoRuta'><td colspan='3'>Llegada <strong>"+descDestino.toUpperCase()+"</strong></td></tr>";
        html +=    "</table>";
        indicaciones.innerHTML = html;
    }
    map.zoomOut();
}

function tipoGoogle2tipoMapa(tipoGoogle){
    switch(tipoGoogle){
        case G_NORMAL_MAP:
            return 'roadmap';
        break;
        case G_SATELLITE_MAP:
            return 'satellite';
        break;
        case G_HYBRID_MAP:
            return 'hybrid';
        break;
    }
}

function tipoMapa2tipoGoogle(tipoMapa){
    switch(tipoMapa){
        case 'roadmap':
            return G_NORMAL_MAP;
        break;
        case 'satellite':
            return G_SATELLITE_MAP;
        break;
        case 'hybrid':
            return G_HYBRID_MAP;
        break;
    }
}

function anadirMarcadorVistaMapa(color,tam,longitud,latitud){
    var icono = new GIcon();
    icono.image = "/img/iconos/maps/"+tam+color+".png";
    switch(tam){
        case "tiny":
            icono.iconSize = new GSize(12,12);
            icono.iconAnchor = new GPoint(6,12);
            icono.infoWindowAnchor = new GPoint(6,6);
        break;
        case "small":
            icono.iconSize = new GSize(20,20);
            icono.iconAnchor = new GPoint(10,20);
            icono.infoWindowAnchor = new GPoint(10,10);
        break;
        default:
            icono.iconSize = new GSize(32,32);
            icono.iconAnchor = new GPoint(16,32);
            icono.infoWindowAnchor = new GPoint(16,16);
    }

    var punto = map.getCenter();
    if(longitud && latitud)
        punto = new GLatLng(latitud,longitud);

    var marcador = new GMarker(punto,{"draggable":true,"dragCrossMove":true,"icon":icono});
    map.addOverlay(marcador);
    marcadoresVistaMapa.push(new Array(marcador,color,tam));
    actualizarListaMarcadores();
}

function eliminarMarcadorVistaMapa(pos){
    map.removeOverlay(marcadoresVistaMapa[pos][0]);
    marcadoresVistaMapa.splice(pos,1);
    actualizarListaMarcadores();
}

function actualizarListaMarcadores(){
    var listaMarcadores = $('listaMarcadores');
    var html = "<ul>";
    for(var i=0;i<marcadoresVistaMapa.length;i++){
        html += "<li class='"+marcadoresVistaMapa[i][2]+" "+marcadoresVistaMapa[i][1]+marcadoresVistaMapa[i][2]+"'>";
        html +=     "<a href='javascript:;' onclick=\"map.panTo(marcadoresVistaMapa["+i+"][0].getLatLng())\">"+(i+1)+"</span>";
        html +=     "<a href='javascript:;' onclick=\"eliminarMarcadorVistaMapa("+i+");\" class='eliminar'>Eliminar</a>";
        html += "</li>";
    }
    html += "</ul>";
    listaMarcadores.innerHTML = html;
    if(marcadoresVistaMapa.length>0)
        listaMarcadores.parentNode.style.display = "block";
    else
        listaMarcadores.parentNode.style.display = "none";
}

function obtenerParametroMarcadoresVistaMapa(){
    var lista = new Array();
    for(var i=0;i<marcadoresVistaMapa.length;i++)
        lista.push(marcadoresVistaMapa[i][0].getLatLng().lng()+","+marcadoresVistaMapa[i][0].getLatLng().lat()+","+marcadoresVistaMapa[i][1]+","+marcadoresVistaMapa[i][2]);
    return lista.join("|||");
}