//VARIABLES DE CONFIGURACION
var latitud = '43.461018'; //centro de santander
var longitud = '-3.807964';
//limites maximos del mapa
var latS, lngW, latN, lngE;
var zoom = 13; //0 ~ 20
var tipoMapa = G_HYBRID_MAP; //G_NORMAL_MAP, G_SATELLITE_MAP, G_HYBRID_MAP
var map;
var mgr;
var marcadoresArray = new Array();

//se sobreescriben las funciones para limitar el nivel de zoom
G_PHYSICAL_MAP.getMinimumResolution = function () { return zoom };
G_NORMAL_MAP.getMinimumResolution = function () { return zoom };
G_SATELLITE_MAP.getMinimumResolution = function () { return zoom };
G_HYBRID_MAP.getMinimumResolution = function () { return zoom };

/** Se define un icono standard **/
var iconoMarcador = new GIcon();
iconoMarcador.image = "/img/icons/iconoStd.png";
//iconoMarcador.shadow = "/img/icons/icon-google-maps-shadow.png";
iconoMarcador.iconSize = new GSize(32, 32);
//iconoMarcador.shadowSize = new GSize(59, 32);
iconoMarcador.iconAnchor = new GPoint(16, 32);
iconoMarcador.infoWindowAnchor = new GPoint(16, 0);
iconoMarcador.infoShadowAnchor = new GPoint(18, 25);

function getIcon(imagen){
    if(iconoMarcador.image==imagen || imagen==''){
        return iconoMarcador;
    } else {
        icono = new GIcon();
        icono.image = "/contenidoDinamico/PuntosInteresTipos/"+imagen;
//        icono.shadow = "/img/icons/icon-google-maps-shadow.png";
//        icono.iconSize = new GSize(32, 32);
//        icono.shadowSize = new GSize(59, 32);
        icono.iconAnchor = new GPoint(16, 32);
        icono.infoWindowAnchor = new GPoint(16, 0);
//        icono.infoShadowAnchor = new GPoint(18, 25);
        return icono;
    }
}

/****************/

// Crea un marcador recibiendo un punto, un icono y el texto html a mostrar cuando se pulsa sobre él
function crearMarcador(punto, icono, textoGlobo)
{
    var marcadorTemp = new GMarker(punto, icono); // Crear marcador
    // Genera un evento asociado al click, que nos mostrará el globo
    GEvent.addListener(marcadorTemp, "click", function() {
        marcadorTemp.openInfoWindowHtml(textoGlobo,{buttons:{close:{show:2}}});
    });
    // Genera un evento asociado a la apertura del globo que guarda la posicion central del mapa
    GEvent.addListener(marcadorTemp, "infowindowopen", function() {
        map.savePosition();
    });
    // Genera un evento asociado al cierre del globo que restaura la posicion central del mapa que guardamos al abrir el globo
    GEvent.addListener(marcadorTemp, "infowindowbeforeclose", function() {
        map.returnToSavedPosition();
    }); 
    return marcadorTemp; // Devuelve un objeto marcador
};

function cargaMapa() { //
    if(GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById('googleMap')); // Crear un objeto mapa basado en el div "googleMap"
        map.addControl(new GScaleControl()); // Añadir un control de escala al mapa
        map.addControl(new GMapTypeControl()); // Añadir un control para poder cambiar el tipo de mapa
        map.addControl(new GLargeMapControl() ); // Añadir un control de zoom
        map.setCenter(new GLatLng(latitud, longitud), zoom, tipoMapa); //Centrar mapa usando las coordenadas dadas
        //se instancia el administrador de marcadores
        map.enableScrollWheelZoom();
        // Añadir listener para restringir los limites para moverse por el mapa
        GEvent.addListener(map, "move", function() {
            comprobarLimites();
        });
        
        mgr = new MarkerManager(map);

    }
}

// Método para reposicionar el mapa si se sale de los límites marcados
function comprobarLimites() {
    if(latS && latN && lngW && lngE){
        var flag = false;
        var coords = map.getBounds();
        var centroAct = map.getCenter();
        var centroY = centroAct.lat();
        var centroX = centroAct.lng();

        if(coords.getSouthWest().lat() < latS){
            centroY = centroY + (latS - coords.getSouthWest().lat());
            flag = true;
        }
        if(coords.getNorthEast().lat() > latN){
            centroY = centroY - (coords.getNorthEast().lat() - latN);
            flag = true;
        }
        if(coords.getSouthWest().lng() < lngW){
            centroX = centroX + (lngW - coords.getSouthWest().lng());
            flag = true;
        }
        if(coords.getNorthEast().lng() > lngE){
            centroX = centroX - (coords.getNorthEast().lng() - lngE);
            flag = true;
        }

        if (flag == true){
            map.setCenter(new GLatLng(centroY,centroX));
            return false;
        }
    }
}

flagResize = 0;

function redimensiona(){
	if(flagResize == 0){
		flagResize = 1;
		setTimeout('flagResize = 0;', 200);
		if(document.documentElement.clientHeight < 810){
			altura = 645;
		} else {
			altura = parseInt(document.documentElement.clientHeight - 165);
		}

		$('#googleMap').css('height',altura + 'px');
		$('#colIzquierdaFrame').css('height',altura + 'px');
		$('#colIzquierdaFrame').contents().find('#mapas').css('height', (altura-125) + 'px');
		$('#colIzquierda').css('height',altura + 'px');
		
		ancho = parseInt($('#googleMap').css('width'));
		if(ancho < 900) ancho = 900;

		latS = parseFloat(latitud) - (0.000060 * altura);
		latN = parseFloat(latitud) + (0.000120 * altura);
		lngW = parseFloat(longitud) - (0.000090 * ancho);
		lngE = parseFloat(longitud) + (0.000090 * ancho);

		comprobarLimites();
	}
}

function nuevoMarcador(coordenadas,icono,html){
//     alert(allowDrag);
	var marcador=new GMarker(coordenadas, { icon: icono });
	// Genera un evento asociado al click, que nos mostrará el globo
    if(html!=''){
        GEvent.addListener(marcador, "click", function() {
            marcador.openInfoWindowHtml(html);
        });
        // Genera un evento asociado a la apertura del globo que guarda la posicion central del mapa
        GEvent.addListener(marcador, "infowindowopen", function() {
            map.savePosition();
        });
        // Genera un evento asociado al cierre del globo que restaura la posicion central del mapa que guardamos al abrir el globo
        GEvent.addListener(marcador, "infowindowbeforeclose", function() {
            map.returnToSavedPosition();
        });
    }
	return marcador;
}

function borrarMarcador(marcador){
	mgr.removeMarker(marcador);
	mgr.refresh(); 
}

function reiniciarMapa(){
    limpiarMapa();
    map.setCenter(new GLatLng(latitud, longitud), zoom, tipoMapa); //Centrar mapa usando las coordenadas dadas
}

function limpiarMapa(){
	map.clearOverlays();
	mgr.clearMarkers();
}

function setDirections(fromAddress, toAddress) {
	var gdir = new GDirections();
    gdir.load(fromAddress + ' ' + toAddress, { "locale": 'es_ES', "travelMode":G_TRAVEL_MODE_DRIVING, "getPolyline":true });
    GEvent.addListener(gdir, 'load', function() { 
    	map.addOverlay(gdir.getPolyline()); 
    }); 
}

function setRuta(fromAddress, toAddress, div) {
	var gdir = new GDirections(map,div);
    gdir.load(fromAddress + ' ' + toAddress, { "locale": 'es_ES', "travelMode":G_TRAVEL_MODE_DRIVING});
    GEvent.addListener(gdir, 'load', function() { 
    	map.addOverlay(gdir.getPolyline()); 
    }); 
}

function dibujaPuntoSinTag(latitud,longitud){
    if (typeof mgr != "undefined"){
        marcador = nuevoMarcador(new GLatLng(latitud, longitud),iconoMarcador,'');
        mgr.addMarker(marcador,2);
        mgr.refresh();
    }
}

function dibujaPuntos(puntos,imagenes){

	if (typeof mgr != "undefined" && (typeof puntos != "undefined" || typeof imagenes != "undefined" )){
        for(i in puntos){
            punto=new GLatLng(puntos[i].coordenadas[0], puntos[i].coordenadas[1]);
            icono=getIcon(puntos[i].icono);
			marcador = nuevoMarcador(punto,icono,puntos[i].html);
			mgr.addMarker(marcador,puntos[i].zoomMin);
			if(puntos.length==1){
                map.setCenter(punto);
                //marcador.openInfoWindowHtml(puntos[i].html);
                var opts = new Object();
                opts.pixelOffset = new GSize(0,-30);
                map.openInfoWindowHtml(punto, puntos[i].html, opts);
			}
		}
		for(i in imagenes){
            if(imagenes[i].url!=''){
                tabla='PuntosImagenesExternas';
                ancho='23';
                alto='18';
            } else {
                tabla='PuntosGaleriaImagenes';
                ancho='30';
                alto='24';
            }
            var iconoImagen = new GIcon();
            iconoImagen.image = "/imagenesPNG/"+tabla+"/"+imagenes[i].imagen+"/resizeCrop/"+ancho+"/"+alto+"/imagen.png";
            iconoImagen.iconSize = new GSize(ancho, alto);
            iconoImagen.iconAnchor = new GPoint(16, 16);
            iconoImagen.infoWindowAnchor = new GPoint(16, 0);
            
			marcador = nuevoMarcador(new GLatLng(imagenes[i].coordenadas[0], imagenes[i].coordenadas[1]),iconoImagen,imagenes[i].html);
			mgr.addMarker(marcador,imagenes[i].zoomMin);
            if(imagenes.length==1 && puntos.length==0){
                map.setCenter(punto);
				marcador.openInfoWindowHtml(imagenes[i].html);
			}
		}
	}
}

function nuevaRuta (puntos,imagenes,traza){
	if (typeof mgr != "undefined"){
		var from='';
		var to='';
        var polilinea=[];
		limpiarMapa();
        dibujaPuntos(puntos,imagenes);
		for(i in puntos){
            punto=new GLatLng(puntos[i].coordenadas[0], puntos[i].coordenadas[1]);
            polilinea.push(punto);
//			if(from==''){
//				from='from :@'+puntos[i].coordenadas[0]+','+puntos[i].coordenadas[1];
//				punto=new GLatLng(puntos[i].coordenadas[0], puntos[i].coordenadas[1]);
//			} else {
//				to+=' to: @'+puntos[i].coordenadas[0]+','+puntos[i].coordenadas[1];
//			}
//			marcador = nuevoMarcador(new GLatLng(puntos[i].coordenadas[0], puntos[i].coordenadas[1]),iconoMarcador,puntos[i].html);
//			mgr.addMarker(marcador,2);
		}
		if(polilinea.length>0 && traza){
//			setDirections(from,to);
            var polyline = new GPolyline(polilinea, "#ff0000", 7);
            map.addOverlay(polyline);
			map.setCenter(polilinea[1], 15, tipoMapa); //Centrar mapa usando las coordenadas dadas
		}
	}
}

function dibujaEventos(puntos){
	if (typeof mgr != "undefined" && (typeof puntos != "undefined")){
        if(puntos.length!=1){
            limpiarMapa();
        }
        for(i in puntos){
            punto=new GLatLng(puntos[i].coordenadas[0], puntos[i].coordenadas[1]);
			marcador = nuevoMarcador(punto,iconoMarcador,puntos[i].html);
			mgr.addMarker(marcador,2);
			if(puntos.length==1){
                map.setCenter(punto);
                var opts = new Object();
                opts.pixelOffset = new GSize(0,-30);
				map.openInfoWindowHtml(punto, puntos[i].html, opts);
			}
		}
	}
}

$(document).ready(function(){
    

});

// Controlar el evento onload de la pagina, para no sobrescribirlo. En caso de existir, se agrega el evento de carga del mapa despues del existente.
//if (typeof window.onload != 'function') {
//  window.onload = cargaMapa;
//} else {
//  oldOnload = window.onload;
//  window.onload = function() {
//    oldOnload();
//    cargaMapa();
//  }
//}
/* ]]> */
