﻿/*
    Librerias necesarias para usar esta clase:
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
        <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
        <script src="/js/jquery-1.4.1.js" type="text/javascript"></script>
        
    Ejemplo de uso: (esto se puede meter por ejemplo en el $(document).ready
        var googlemaps = new GoogleMapsV3();
        googlemaps.ControlNavegacion = true;
        googlemaps.ControlEscala = true;
        googlemaps.Ancho = 500;
        googlemaps.Alto = 300;
        googlemaps.CrearMapa("map_canvas");
        googlemaps.PintarDireccion("Calle Madrid 24, 02660 Caudete Albacte", "mi casa");
*/

function GoogleMapsV3() {
    this.Div = "div_mapa";
    this.Ancho = 200;
    this.Alto = 200;
    this.Direccion = "";
    this.Zoom = 8;
    this.Latitud = 0;
    this.Longitud = 0;
    this.Mapa = null;
    this.ControlNavegacion = false;
    this.ControlTipoMapa = false;
    this.ControlEscala = false;

    //*** INSTANACIA UN MAPA ***
    this.CrearMapa = function CrearMapa(div) {
        this.Div = div;
        var opciones = {
        zoom: this.Zoom,
            navigationControl: this.ControlNavegacion,
            navigationControlOptions: { style: google.maps.NavigationControlStyle.ZOOM_PAN },
            mapTypeControl: this.ControlTipoMapa,
            scaleControl: this.ControlEscala,
            mapTypeId: google.maps.MapTypeId.ROADMAP //SATELLITE, HYBRID, TERRAIN
        };
        $("#" + this.Div).css('width', this.Ancho);
        $("#" + this.Div).css('height', this.Alto);
        this.Mapa = new google.maps.Map(document.getElementById(this.Div), opciones);
    }

    //*** PINTAR PUNTO A PARTIR DE UNA DIRECCIÓN ***
    this.PintarDireccion = function PintarDireccion(direccion, texto) {
        if (this.Mapa == null)
            CrearMapa(this.Div);

        this.Direccion = direccion;

        var coordenadas = null;
        if ((this.Latitud != 0) || (this.Longitud != 0)) {
            coordenadas = new google.maps.LatLng(this.Latitud, this.Longitud)
        }

        var mapa = this.Mapa;
        var geocoder = new google.maps.Geocoder();
        var resultado = null;
        var estado = "";

        if (coordenadas != null) {
            //Pintamos el punto
            PintarCoordenadas(coordenadas, mapa, texto);
        }
        else {
            //obtenemos geocoordenadas de una dirección, y pintamos el punto
            geocoder.geocode({ 'address': direccion }, function(results, status) { CallBack(results, status, mapa, texto); });

            var CallBack = function CallBack(resultado, estado, mapa, texto) {
                if (estado == google.maps.GeocoderStatus.OK) {
                    PintarCoordenadas(resultado[0].geometry.location, mapa, texto);
                }
            }
        }
    }
}

function PintarCoordenadas(posicion, mapa, texto) {
    mapa.setCenter(posicion);
    var marker = new google.maps.Marker({
        map: mapa,
        position: posicion
    });
    if ((texto != null) && (texto != "")) {
        var info = new google.maps.InfoWindow({
            content: texto
        });
        info.open(mapa, marker);
    }

    //cuando cambiamos el zoom se centra el mapa en el punto que hemos pintado
    /*google.maps.event.addListener(mapa, 'zoom_changed', function() {
        mapa.setCenter(posicion);
    });*/

    //cuando hacemos click en el punto, se abre el bocadillo
    google.maps.event.addListener(marker, 'click', function() {
        info.open(mapa, marker);
    });
}
