// 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;
// Iconos de la red de distribucion
var iconos;
//ejecuta sobre el mapa el como llegar desde un punto a otro

// Para el como llegar
var gdir;
var map=null;

//Inicializa el mapa
function cargarMapa(latitudInicial,longitudInicial,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);
                if(esSelectorLoc)
                    ponerLocalizacion(null,new GLatLng(latitudInicial,longitudInicial));
            }else
                map.setCenter(new GLatLng(39.67406,-3.161336), 10);

            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(null,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]);
                }
            }
            //si no es selector
            else{
                if(marcadores && marcadores.length>0){
                    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);
        }
    }
}

function crearMarcadorUbicacion(latitudInicial, longitudInicial, datos){
    var datosHotel= eval(datos);
    var html = '';
    if (datosHotel.idHotel==2)
        html += '<div class="infoMapa feria">';
    else if (datosHotel.idHotel==1)
        html += '<div class="infoMapa barajas">';
    html +=     '<span class="direccion">'+datosHotel.direccion+'</span>';
    html +=     '<span class="cp">'+datosHotel.codPostal+' - '+datosHotel.localidad +'</span>';
    html +=     '<span class="telefono">'+datosHotel.telefono+'</span>';
    html +=     '<span class="email">'+datosHotel.email+'</span>';
    html += '</div>';
    
    iconoH = new GIcon();
    if (datosHotel.idHotel==2)
        iconoH.image = "/img/mapa/icono-hotel-feria.gif";
    else if (datosHotel.idHotel==1)
        iconoH.image = "/img/mapa/icono-hotel-barajas.gif";
    
    iconoH.iconSize = new GSize(24, 27);
    iconoH.iconAnchor = new GPoint(10,25);
    iconoH.infoWindowAnchor = new GPoint(8,10);
    
    var marcador = new GMarker(new GLatLng(latitudInicial,longitudInicial),iconoH);
    
    GEvent.addListener(marcador,"click",function(){marcador.openInfoWindowHtml(html);});
    map.addOverlay(marcador);
}   

var ventanaMapa;
function verSituacion(latitud,longitud,zoom,marcadores){
    //obtenemos/creamos la ventana para selectores
    var nuevo = false;
    if(!ventanaMapa){
        ventanaMapa = document.createElement("div");
        ventanaMapa.className = "previsualizacion popupMapa";
        var contenedor = document.createElement("div");
        contenedor.className = "popupMapaContenedor";
        contenedor.innerHTML = "<div id='mapaGM'>&nbsp;</div>";
        //una vez cargado, llamamos a la funcion load() para que lo cargue
        //abrimos la ventana
        ventanaMapa.appendChild(botonCierreVentana());
        ventanaMapa.appendChild(contenedor);
        nuevo = true;
    }
    abrirVentana(ventanaMapa);
    window.scrollTo(0,0);
    if(nuevo)
        cargarMapa(latitud,longitud,zoom?parseInt(zoom):10,'',marcadores);
    else
        ponerLocalizacion(null,new GLatLng(latitud,longitud),false);
}

//pone un marcador en la posicion pulsada
function ponerLocalizacion(marker,point,imagen){
    if(!marker){
        if(marcadorGeolocalizacion)
            map.removeOverlay(marcadorGeolocalizacion);
        
        if(imagen){
            var icono = new GIcon();
            icono.image = "/img/iconos/maps/midred.gif";
            icono.iconSize = new GSize(20,24);
            icono.iconAnchor = new GPoint(10,23);
            icono.infoWindowAnchor = new GPoint(8,10);
            marcadorGeolocalizacion = new GMarker(point,icono);
        }else{   
            marcadorGeolocalizacion = new GMarker(point); 
        }           
        var contenido = document.getElementById('contenidoMapa');
        if(contenido){
            direccion = "<div id='popupMapa'>";
            direccion += contenido.innerHTML;
            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){
    map.clearOverlays();
    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');
    if(listaMarcadores!=null){
        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("|||");
}

//obtiene todos los parametros de la vista de mapa actual
function obtenerParamsVistaMapa(){
    var bounds = map.getBounds();
    var surOeste = bounds.getSouthWest();
    var norEste = bounds.getNorthEast();
    return "xmin="+surOeste.lng()+"&ymin="+surOeste.lat()+"&xmax="+norEste.lng()+"&ymax="+norEste.lat()+"&z="+map.getZoom();
}

