// initialisations des variables
var gmap = null;
var marker = null;
var latlng = null;


// chargement de la gmap par défaut centrée sur Mondeville
function loadGmap(lat, lnt) {

    latlng = new google.maps.LatLng(lat, lnt);
    var myOptions = {
        zoom: 16,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.SATELLITE,
        scrollwheel: false
    };
    // gmap
    gmap = new google.maps.Map(document.getElementById("gmap"), myOptions);

    // marker
    marker = new google.maps.Marker({
        map: gmap,
        position: latlng,
        draggable: true
    });

    // fonction exécutée quand le marker est déplacé
    // modifie les valeurs des inputs hidden stockant les coordonnées de l'adresse
    google.maps.event.addListener(marker, 'dragend', function() {
        $('#lat').val(marker.getPosition().lat());
        $('#lng').val(marker.getPosition().lng());
    });
    
    $('#rue').keyup(function() {
        moveMarker();
    });
    $('#rueSuite').keyup(function() {
        moveMarker();
    });
    $('#cp').keyup(function() {
        moveMarker();
    });
    $('#ville').keyup(function() {
        moveMarker();
    });
    
}

// fonction permettant de déplacer le marker et de centrer la map vers la nouvelle position
function moveMarker() {

    // récupérer les valeurs des inputs
    var adresse = document.getElementById("rue").value + " " + document.getElementById("rueSuite").value + " " + document.getElementById("cp").value + " " + document.getElementById("ville").value;

    // seulement si la ville et le code postal sont renseignés   
    if (adresse != "") {
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( {
            'address': adresse
        }, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                marker.setPosition(results[0].geometry.location);
                gmap.setCenter(results[0].geometry.location);
                $('#lat').val(marker.getPosition().lat());
                $('#lng').val(marker.getPosition().lng());
            }
        });
    }

}

var directionDisplay;
var directionsService = new google.maps.DirectionsService();
var origin = null;
var destination = null;
var waypoints = [];
var markers = [];
var directionsVisible = false;


function initializeParcours(latD, lngD, latA, lngA) {

    var myOptions = {
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        streetViewControl: false,
        scrollwheel: false
    }
    map = new google.maps.Map(document.getElementById("gmap"), myOptions);
    
    directionsDisplay = new google.maps.DirectionsRenderer({
        map: map,
        //panel: document.getElementById("directions_panel"),
        draggable: true
    });

    calcRoute(latD, lngD, latA, lngA);
    
    google.maps.event.addListener(directionsDisplay, 'directions_changed', function() {
        computeTotalDistance(directionsDisplay.directions);
    });

}

function calcRoute(latD, lngD, latA, lngA) {

    var start = new google.maps.LatLng(latD, lngD);
    var end = new google.maps.LatLng(latA, lngA);

    var request = {
        origin: start,
        destination: end,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
    };

    directionsService.route(request, function(response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(response);
            computeTotalDistance(response);
        }/* else {
            loadGmapWithoutDrag(latA, lngA);
            $("#directions_panel").html("<p style='text-align:center; padding:3px;'>Impossible de calculer l'itinéraire.</p>");
        }*/
    });
}

function planAcces(infoWindow) {
    latlng = new google.maps.LatLng("49.1645534126223", "-0.3298616356933053");
    
    var zoom = infoWindow ? 16 : 6;
    var myOptions = {
        zoom: zoom,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        scrollwheel: false
    };

    gmap = new google.maps.Map(document.getElementById("plan"), myOptions);
  
    marker = new google.maps.Marker({
        map: gmap,
        position: latlng,
        icon: "/ui/img/marker.png"
    });
    
    if (infoWindow) {
        infoWindow = new google.maps.InfoWindow({
            content: "<div>USOM Karaté<br/>Halle des sports Pierre LAFOND<br/>1 rue Buddenstedt<br/>14120 Mondeville</div>"
        });
    
        infoWindow.open(gmap, marker);
    
        google.maps.event.addListener(marker, 'click', function() {
            infoWindow.open(gmap, marker);
        });
    }
    
}

function computeTotalDistance(result) {
    var total = 0;
    var myroute = result.routes[0];
    for (i = 0; i < myroute.legs.length; i++) {
        total += myroute.legs[i].distance.value;
    }
    total = total / 1000.
    document.getElementById("km").innerHTML = "Distance : " + total + " km";
}
