﻿// encodage : utf-8
var g_map = null; // l'objet carte


/* Fonctionnement de l'historique de navigation (2D seulement) : possiblité d'aller à l'état précédent ou suivant 
Si on revient à l'état précédent, alors 
    Si le compteur d'état = 0, alors rien (car l'état initial est déjà affiché).
    Sinon, le compteur est décrémenté de 1, la carte correspondant au compteur est affichée, et le flag historique = true.
Si on passe à l'état suivant, alors 
    Si le compteur d'etat = nb d'états de l'historique, alors rien (car le dernier état est déjà affiché).
    Sinon, le compteur est incrémenté de 1, la carte correspondant au compteur est affichée, et le flag historique = true.
Si la vue de la carte change, alors 
    Si le flag historique  = false, alors
        Si le compteur d'état est < au nombre d'états de l'historique (cela signifie que l'état en cours est dans l'historique), 
        alors on efface les états > au compteur (on suppose que ces états ne sont plus nécessaires dans l'historique).
        Le compteur d'état est incrémenté de 1 et le nouvel état de la carte est conservé.
    Sinon, le flag historique  = false.
*/

var historique = { }; // namespace pour enregistrer les différentes cartes affichées durant la navigation
                      // une carte est définie par son centre, et le niveau de zoom

historique.id = -1; // identifie une étape de  navigation (index dans les listes historique.zoom et historique.centre)
historique.historique = new Boolean(false); // true s'il s'agit d'un état de l'historique ; false sinon

historique.centre = new Array(); // liste des coord géog. du centre de la carte
historique.zoom = new Array(); // liste des niveaux de zoom correspondant

historique.enregistrer = function() { // enregistrer l'état de la carte
    if (historique.historique == false) { // l'état de la carte n'est pas encore enregistré
        historique.id++;
        if (historique.id < historique.centre.length) {
            historique.zoom = historique.zoom.slice(0, historique.id);
            historique.centre = historique.centre.slice(0, historique.id);
        }
        historique.zoom[historique.id] = g_map.GetZoomLevel();
        historique.centre[historique.id] = g_map.GetCenter();
    } else {
        historique.historique = false;
    }
}

historique.precedent = function() { // affiche l'état précédent de navigation
    if (historique.id == 0) { // pas d'état précédent
        alert('Il s\'agit de la carte initiale.');
        return;
    }
    historique.id--;
    historique.afficherCarte();    
}

historique.suivant = function() { // affiche l'état suivant de navigation
    if ((historique.id + 1) == historique.centre.length) { // pas d'état suivant
        alert('Il s\'agit de la dernière carte.');
        return;
    }
    historique.id++;
    historique.afficherCarte();
}

historique.afficherCarte = function() { // affiche la carte correspondant à l'état
    historique.historique = true; // car la carte appartient à l'historique, 
                                  // et l'évènement onchangeview ne doit pas permettre son enregistrement
    g_map.SetCenterAndZoom(historique.centre[historique.id], historique.zoom[historique.id]);
}


/* *********************************************************************************************** */

window.onload = demarrer;

function demarrer() { // appelée dès que la page est chargée
    // définit les dimensions du conteneur de l'objet carte
    var div_carte = document.getElementById('carte');
    var i_h = hauteur_pixel_carte(), i_l = largeur_pixel_carte();
    div_carte.style.height = i_h.toString() + 'px';
    div_carte.style.width = i_l.toString() + 'px';
    
    // création de la carte initiale
    g_map = new VEMap('carte');
    g_map.LoadMap();
    g_map.SetZoomLevel(1); // niveau de zoom minimum
    historique.enregistrer(); // enregistre l'état initial
       
    g_map.AttachEvent('onchangeview', historique.enregistrer); // enregistrer l'étape à chaque changement de vue
    
    function hauteur_pixel_carte() { // retourne la hauteur en pixels de l'espace d'affichage de la carte
        var hauteur = 0;
        if (window.innerHeight) { // firefox
            hauteur = window.innerHeight;
        }
        else if (document.documentElement && document.documentElement.clientHeight) { // IE6 et +
            hauteur = document.documentElement.clientHeight;
        } else if (document.body && document.body.clientHeight) { // IE4
                hauteur = document.body.clientHeight;
        }
        return hauteur;
    }
    
    function largeur_pixel_carte() { // retourne la largeur en pixels de l'espace d'affichage de la carte
        var largeur = 0;
        if (window.innerWidth) { // firefox
            largeur = window.innerWidth;
        }
        else if (document.documentElement && document.documentElement.clientWidth) {
            largeur = document.documentElement.clientWidth;
        } else if (document.body && document.body.clientWidth) {
                largeur = document.body.clientWidth;
        }
        return largeur;
    }
    // position au dessus des Batignolles
       var lat =   48.890757;
       var lon =  2.31222;
       var zoom = 17 ;
       g_map.SetCenterAndZoom(new VELatLong(lat, lon), zoom);
       g_map.SetMapStyle(VEMapStyle.Aerial) ;


}



// ************************************************************************************************************************

/*
Testé avec : firefox 3.0.9
                      IE 8
                      Google Chrome 1.0.154.53
                      Safari 3.1.2
                      Opera 9.64
Sources : 
    Exemples interactifs : http://dev.live.com/virtualearth/sdk/
    Télécharger la documentation du l'API : http://www.microsoft.com/downloads/details.aspx?FamilyID=09905eea-f8d4-4af3-bb35-b479bf342e1e&DisplayLang=en
    Divers articles : http://msdn.microsoft.com/en-us/library/bb545001.aspx
    Les 2 fonctions de calcul de la taille de l'affichage : http://www.pompage.net/
                 
*/


