/*************************************************************
 * Fichier : carte.js
 * Auteur : François Gaumond
 * courriel : fgaumond(a)viva-solutions.ca
 * Date : 22 septembre 2006
 * Description : Définit les fonctions qui servent à opérer
 *               la carte. Fait des appels serveurs à l'aide
 *               de méthode XMLHttpRequest.
 ************************************************************/

//classe carte
function Carte()
{}

/*
    *********************************************************
    Définition des variables globales
    *********************************************************
*/
    Carte._dimCarte = new Array();
    
    Carte.isInit = false;
    
    Carte._decalageX = 0;
    Carte._decalageY = 0;
    
    Carte.LargeurPartieCarte = 0;
    Carte.HauteurPartieCarte = 0;
    Carte.BiaisGauche = 0;
    Carte.NbZoom = 0;
    Carte.EstDemo = false;
    Carte.IdLangue = 1;
    Carte.EstPremiereVisite = true;

    var _imageCarte;
    var _xmlHttp;
    
    var _topX;
    var _topY;
    var _zoom;

    Carte._oldZoom = 0;
    
    var _timeoutLoading;
    var _timeoutPropos;
    var _timeoutEtapes;
/*
    *********************************************************
    Fin de définition des variables globales
    *********************************************************
*/

Carte.PreInitCarte = function()
{
    //Va chercher les dimensions de la carte
    var params = new SOAPClientParameters();
	var url = Carte.GetServiceUrl("Cartes");
	SOAPClient.invoke(url, "GetInfosCarte", params, true, Carte.GetInfosCarte_callBack);

    //Initialise les dimensions de la carte
    if(Carte._dimCarte.length == 0)
    {
        Carte._dimCarte[0] = new Array();
        Carte._dimCarte[0][0] = 1000;
        Carte._dimCarte[0][1] = 500;
        
        Carte._dimCarte[1] = new Array();
        Carte._dimCarte[1][0] = 4000;
        Carte._dimCarte[1][1] = 2000;
        
        Carte._dimCarte[2] = new Array();
        Carte._dimCarte[2][0] = 8000;
        Carte._dimCarte[2][1] = 4000;
        
        Carte._dimCarte[3] = new Array();
        Carte._dimCarte[3][0] = 16000;
        Carte._dimCarte[3][1] = 8000;
        
        Carte._dimCarte[4] = new Array();
        Carte._dimCarte[4][0] = 32000;
        Carte._dimCarte[4][1] = 16000;
        
        Carte._dimCarte[5] = new Array();
        Carte._dimCarte[5][0] = 64000;
        Carte._dimCarte[5][1] = 32000;
    }
	window.onresize = Carte.Redimmensionner;
}

Carte.GetInfosCarte_callBack = function(reponse)
{
    Carte.LargeurPartieCarte = reponse.LargeurPartieCarte;
    Carte.HauteurPartieCarte = reponse.HauteurPartieCarte;
    Carte.BiaisGauche = reponse.BiaisGauche;
    Carte.NbZoom = reponse.NbZoom;
    Carte.EstDemo = reponse.EstDemo;
    
    Carte.isInit = true;
    Carte.GetIdLangue();
    
    //On tente d'aller chercher les valeurs dans l'adresse pour afficher le profil direct
    Carte.AnalyserURL();
}

Carte.GetIdLangue = function()
{
    Carte.IdLangue = Utils.GetText("divIdLangue");

    //Carte.Debug(Utils.GetText("divIdLangue"));
}

Carte.GetPremiereVisite = function()
{
    if(Carte.EstPremiereVisite)
    {
    /*
        //On regarde dans le div si c'est la première visite
        Carte.EstPremiereVisite = Utils.GetText("divPremiereVisite");
        var divPremiereVisite = document.getElementById("divPremiereVisite");
        Utils.SetText("divPremiereVisite","false")
    */
        //On vérifie si nous avons des paramètres
        var adresseCourante = window.location.toString();
    
        params = adresseCourante.split('&');
    
        if(params.length == 3)
        {
            Carte.EstPremiereVisite = false;
        }
    }

    //Carte.Debug(Carte.EstPremiereVisite);
    //Carte.Debug(Utils.GetText("divPremiereVisite"));
}

//Fonction qui initialise la carte
function InitCarte()
{
    //Verifier la compatibilite du navigateur
    if(!Utils.NavigateurCompatible)
    {
        this.Location.href = "/navigateurIncompatible.html";
    }
    
    if(!Carte.isInit)
    {
        Carte.PreInitCarte();
    }
    
    _topX = 0;
    _topY = 0;
    Carte._decalageX = 0;
    Carte._decalageY = 0;
    _zoom = 1;
    
    //On affiche les stats une première fois puis, on les rafraîchit à toutes les 5 minutes
    Carte.AfficherStats();
    setTimeout("Carte.AfficherStats()",300000);    
    
    //On n'affiche plus la fenêtre à propos dès le début
    //_timeoutPropos = setTimeout("Carte.AfficherPropos()",5000);
    
    Carte.GetPremiereVisite();
    //Affichage de l'intro si nous n'avons pas de paramètre
    if(Carte.EstPremiereVisite)
    {
        Carte.AfficherIntro();
    }
    
    try
    {
        Carte.PositionnerElements();
    }
    catch(e)
    {}
    
    Carte.AfficherCarte(0);
}

//Analyse l'adresse courante du site pour en extraire les paramètres
Carte.AnalyserURL = function()
{
    var adresseCourante = window.location.toString();
    var isZoom = false;
    
    params = adresseCourante.split('&');
    
    if(params.length == 3)
    {
        var nouvZoom = Carte.TronquerNomParam(params[2]);
        Carte.CentrerPixel(Carte.TronquerNomParam(params[0]),Carte.TronquerNomParam(params[1]),nouvZoom);
        isZoom = true;
    }
    
    return isZoom;
}

//Enlève le nom du paramètre pour seulement retourner sa valeur
Carte.TronquerNomParam = function(chaineParam)
{
    var tab = chaineParam.split('=');
    return tab[1];
}

//Affiche la fenêtre qui présente la marche à suivre
Carte.AfficherIntro = function()
{
    var divFenetre5 = document.getElementById("divFenetre5");
    Fenetre.AfficherMasque();
    divFenetre5.style.visibility = "visible";
    clearTimeout(_timeoutEtapes);
}

//Affiche la fenetre verte a propos à droite de l'ecran
Carte.AfficherPropos = function()
{
    var divFenetre4 = document.getElementById("divFenetre4");
    divFenetre4.style.visibility = "visible";
    clearTimeout(_timeoutPropos);
}

//Centre l'element passe en parametre dans le centre de la fenetre
Carte.CentrerElement = function(element)
{
    var divElement = document.getElementById(element);
    var tabDimension = Utils.getPageSize();

    var largeurElement = Utils.GetValeurNumerique(divElement.style.width);
    var hauteurElement = Utils.GetValeurNumerique(divElement.style.height);

    divElement.style.left = ((tabDimension[0] - largeurElement - 30)/2) + "px";
    divElement.style.top =  (tabDimension[1] - hauteurElement)/3 + "px";
}

//Affiche les statistiques dans le bas la fenêtre à cet effet
Carte.AfficherStats = function()
{
	var params = new SOAPClientParameters();
	var url = Carte.GetServiceUrl("Stats");
	SOAPClient.invoke(url, "GetNbPays", params, true, Carte.AfficherStatsPays_callBack);
	SOAPClient.invoke(url, "GetNbProfils", params, true, Carte.AfficherStatsProfil_callBack);
}

//Fonction de retour de web service qui affiche les stats des pays
Carte.AfficherStatsPays_callBack = function(reponse)
{
    var divContenuStatsPays = document.getElementById("divContenuStatsPays");
    divContenuStatsPays.innerHTML = reponse;
    
    //Carte.Debug(reponse);
}

//Fonction de retour de web service qui affiche les stats des donateurs
Carte.AfficherStatsProfil_callBack = function(reponse)
{
    var divContenuStatsDonateurs = document.getElementById("divContenuStatsDonateurs");
    divContenuStatsDonateurs.innerHTML = reponse;
    
    var divContenuStatsAmasses = document.getElementById("divContenuStatsAmasses");
    divContenuStatsAmasses.innerHTML = reponse * 5;
}

//Fonction qui donne l'adresse du web service
Carte.GetServiceUrl = function(serviceName)
{
    var adresseService;
    
    adresseService = window.location.protocol + "//" + window.location.host + 
        "/WebServices/" + serviceName + ".asmx";
    
    return adresseService;
}

//Positionne les éléments en fonction de la largeur de la fenêtre en cours
Carte.PositionnerElements = function ()
{
    var tabDimension = Utils.getPageSize();
    
    //Affichage du divCarte
    var divCarte = document.getElementById("divCarte");
    divCarte.style.display = "inline";
    
    //Affichage de l'entête
    var divEntete = document.getElementById("divEntete");
    divEntete.style.display = "inline";
    
    //Position du Bas de page
    var divBasPage = document.getElementById("divBasPage");
    divBasPage.style.left = 0 + "px";
    divBasPage.style.top = (tabDimension[1] - 26) + "px";
    divBasPage.style.display = "inline";
    divBasPage.style.width = tabDimension[2] + "px";
    
    //Position de la boîte du profil
    var divProfil = document.getElementById("divFenetre1");
    divProfil.style.left = tabDimension[0]/12 + "px";
    divProfil.style.top = tabDimension[1]/4 +"px";
    
    //Position de la boîte d'achat de pixel
    Carte.CentrerElement("divFenetre2");
    
    //Position de la fenetre de navigation
    Carte.CentrerElement("divFenetre3");
    
    //Position de la fenetre d'introduction
    Carte.CentrerElement("divFenetre5");
    
    //Position de la fenetre d'information sur le projet
    var divFenetre4 = document.getElementById("divFenetre4");
    var posTopFen4 = (tabDimension[1] - Utils.GetValeurNumerique(divFenetre4.offsetHeight));
    divFenetre4.style.left = tabDimension[0] - 255 + "px";
    //divFenetre4.style.top = (posTopFen4) /2  + "px";
    divFenetre4.style.top = 100 + "px";
    divFenetre4.style.visibility = "visible";
    
    //Position de la boîte de navigation
    var divNavigation = document.getElementById("divNavigation");
    divNavigation.style.display = "block";
    var posTopNavigation = (tabDimension[1] - Utils.GetValeurNumerique(divNavigation.offsetHeight));
    divNavigation.style.left = 10 + "px";
    divNavigation.style.top = ((posTopNavigation) / 2) + 25 + "px";
    
    //Position du loading
    var divLoading = document.getElementById("divLoading");
    divLoading.style.left = (tabDimension[0] - 200) /2 + "px";
    divLoading.style.top =  (tabDimension[1] - 100) /2 + "px"
    
    //Dimensionnement du masque de fond de page
    var divMasque = document.getElementById("divMasque");
    divMasque.style.width = tabDimension[0] + "px";
    divMasque.style.height = tabDimension[1] + "px";
    
    //Dimensionnement des marges de la bannière du haut
    var divEnteteGauche = document.getElementById("divEnteteGauche");
    var divEnteteDroite = document.getElementById("divEnteteDroite");
    var divMenuHaut2 = document.getElementById("divMenuHaut2");
    if(tabDimension[0] >= 1000)
    {
        divEnteteGauche.style.width = (tabDimension[0] - 1000)/2 + "px";
        divEnteteDroite.style.width = (tabDimension[0] - 1000)/2 + "px";
        divMenuHaut2.style.left = 750 + (tabDimension[2] - 1000)/2 + "px";
    }
    else
    {
        divEnteteGauche.style.width = 0 + "px";
        divEnteteDroite.style.width = 0 + "px";
        divMenuHaut2.style.left = (tabDimension[2] - 230) + "px";
    }
    
    //Position des flèches
//    var divFlGauche = document.getElementById("divFlecheGauche");
//    divFlGauche.style.left = 5 + "px";
//    divFlGauche.style.top = tabDimension[1]/2 + "px";
//    divFlGauche.style.display = "inline";
    
    var divFlDroite = document.getElementById("divFlecheDroite");
    divFlDroite.style.left = (tabDimension[2] - 25) + "px";
    divFlDroite.style.top = tabDimension[3]/2 + "px";
    divFlDroite.style.display = "inline";
    
    var divFlHaut = document.getElementById("divFlecheHaut");
    divFlHaut.style.left = tabDimension[2]/2 + "px";
    divFlHaut.style.top = 83 + "px";
    divFlHaut.style.display = "inline";
    
    var divFlBas = document.getElementById("divFlecheBas");
    divFlBas.style.left = tabDimension[2]/2 + "px";
    divFlBas.style.top = (tabDimension[3] - 45) + "px";
    divFlBas.style.display = "inline";
    
    var divFlecheHautGauche = document.getElementById("divFlecheHautGauche");
    divFlecheHautGauche.style.left = 5 + "px";
    divFlecheHautGauche.style.top = 83 + "px";
    divFlecheHautGauche.style.display = "inline";
    
    var divFlecheDroite = document.getElementById("divFlecheHautDroite");
    divFlecheDroite.style.left = tabDimension[2]- 25 + "px";
    divFlecheDroite.style.top = 83 + "px";
    divFlecheDroite.style.display = "inline";
    
    var divFlecheBasGauche = document.getElementById("divFlecheBasGauche");
    divFlecheBasGauche.style.left = 5 + "px";
    divFlecheBasGauche.style.top = (tabDimension[3] - 47) + "px";
    divFlecheBasGauche.style.display = "inline";
    
    var divFlecheBasDroite = document.getElementById("divFlecheBasDroite");
    divFlecheBasDroite.style.left = tabDimension[2] - 25 + "px";
    divFlecheBasDroite.style.top = (tabDimension[3] - 47) + "px";
    divFlecheBasDroite.style.display = "inline";
}

//Change la couleur de la fleche pour la mettre over
Carte.OverFleche = function(imageId)
{
    var imgFleche = document.getElementById(imageId);
    imgFleche.src = "/Images/ImagesSites/" + imageId + "_b.gif";
}

//Change la couleur de la fleche pour la remettre normal
Carte.OutFleche = function(imageId)
{
    var imgFleche = document.getElementById(imageId);
    imgFleche.src = "/Images/ImagesSites/" + imageId + ".gif";
}

//Affiche les étapes pour faire un don
Carte.AfficherEtapesDon = function()
{
    var divEtapes = document.getElementById("divEtapes");
    divEtapes.style.display = "inline";
}

//Cache les etapes pour faire un don
Carte.CacherEtapes = function()
{
    var divEtapes = document.getElementById("divEtapes");
    divEtapes.style.display = "none";
}

Carte.SurvolCarte = function(e)
{
    var clientX = 0;
    var clientY = 0;
    
    if(Utils.EstIE7())
    {
        clientX = e.clientX - 1;
        clientY = e.clientY;
    }
    else if(Utils.EstIE())
    {
        clientX = e.clientX - 1;
        clientY = e.clientY + 1;
    }
    else
    {
        clientX = e.clientX;
        clientY = e.clientY;
    }
    5
    var coords = Carte.CoordBase(clientX, clientY);
    var coordX = coords[0];
    var coordY = coords[1];
    
    Carte.PositionCurseur(coordX, coordY);
    Carte.AfficherPhotoSurvol(coordX, coordY);
}

Carte.AfficherCurseur = function(clientX, clientY)
{
    
}

Carte.AfficherPhotoSurvol = function(coordX, coordY)
{
    if(_zoom < 3)
    {
        
    }
}

//Affiche la position en cours du curseur
Carte.PositionCurseur = function(coordX, coordY)
{   
    try
    {
        if(coordX > Carte._dimCarte[_zoom-1][0] || coordX < 0)
        {
            coordX = "--";
        }
        if(coordY > Carte._dimCarte[_zoom-1][1])
        {
            coordY = "--";
        }
    }
    catch(e)
    {}
    
    document.getElementById("divPositionCurseurX").innerHTML = coordX;
    document.getElementById("divPositionCurseurY").innerHTML = coordY;
}

//Redimensionne 
Carte.DimensionnerProfil = function()
{
    var tabDimension = Utils.getPageSize();

    Fenetre.RedimensionnerFenetre("divFenetre1",300,200);
}

Carte.ZoomCentrer = function(e)
{
    var clientX = 0;
    var clientY = 0;
    
    if(Utils.EstIE7())
    {
        clientX = e.clientX - 1;
        clientY = e.clientY;
    }
    else if(Utils.EstIE())
    {
        clientX = e.clientX - 1;
        clientY = e.clientY + 1;
    }
    else
    {
        clientX = e.clientX;
        clientY = e.clientY;
    }
    
    //On verifie les coordonnees qui ont ete cliques en fonction du decalage actuel
    var coords = Carte.CoordBase(clientX, clientY);
    coordX = coords[0];
    coordY = coords[1];
    
    document.getElementById("divCarte_X").value = coordX;
    document.getElementById("divCarte_Y").value = coordY;
    
    //On centre la carte et on fait un zoom +
    if (_zoom <6)
    {
        Carte.CentrerPixel(coordX,coordY,_zoom +1);
    }
    
    //On affiche le pixel cliqué
    Carte.AfficherPixel(coordX, coordY);
}

//Fonction qui affiche le bon profil lorsque l'on clique sur la carte
Carte.ClickCarte = function(e)
{
    var clientX = 0;
    var clientY = 0;
    
    if(Utils.EstIE7())
    {
        clientX = e.clientX - 1;
        clientY = e.clientY;
    }
    else if(Utils.EstIE())
    {
        clientX = e.clientX - 1;
        clientY = e.clientY + 1;
    }
    else
    {
        clientX = e.clientX;
        clientY = e.clientY;
    }
    
    if(Carte.EstDemo)
    {
        Carte.NoImage(clientX, clientY);
    }
    
    //On verifie les coordonnees qui ont ete cliques en fonction du decalage actuel
    var coords = Carte.CoordBase(clientX, clientY);
    coordX = coords[0];
    coordY = coords[1];
    
    document.getElementById("divCarte_X").value = coordX;
    document.getElementById("divCarte_Y").value = coordY;
    
    Carte.AfficherPixel(coordX, coordY);
        
}

//On affiche le pixel sur la carte
//On le centre d'abord pour avoir notre pixel dans le centre,
Carte.AfficherPixel = function (x, y)
{   
    var adresseProfil = "/GetXmlData.aspx?type=pixel&x=" + x + "&y=" + y + "&idLangue=" + Carte.IdLangue
    
    //On envoit une requête XMLHttpRequest pour avoir le bon profil
    _xmlHttp = getObjetHttp("divContenuProfil",Carte.AfficherContenuPixel,false);
    _xmlHttp.open("GET",adresseProfil,true);
    _xmlHttp.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
    _xmlHttp.send(null);
    
    var divProfil = document.getElementById("divFenetre1");
    divProfil.style.visibility = "visible";
}

//Affiche un pixel libre de manière aléatoire
Carte.AcheterPixelHasard = function()
{
    var adresseProfil = "/GetXmlData.aspx?type=pixelHasard&idLangue=" + Carte.IdLangue
    
    //On envoit une requête XMLHttpRequest pour avoir le bon profil
    _xmlHttp = getObjetHttp("divContenuProfil",Carte.AfficherContenuPixel,false);
    _xmlHttp.open("GET",adresseProfil,true);
    _xmlHttp.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
    _xmlHttp.send(null);
    
    var divProfil = document.getElementById("divFenetre1");
    divProfil.style.visibility = "visible";
}

//Centre le pixel cliqué sur la carte si on est pas sur le zoom 1
Carte.CentrerPixel = function(x, y, nouvZoom)
{
    var tabDimension = Utils.getPageSize();
    var largeur = tabDimension[0];
    var hauteur = tabDimension[1] - 100;
    //Trouver les noImageX et noImageY pour ce pixel au centre
    var xReel = x * parseInt(Math.pow(2, nouvZoom),10);
    var yReel = y * parseInt(Math.pow(2, nouvZoom),10);

    var noImageX = parseInt(xReel / Carte.LargeurPartieCarte,10);
    var noImageY = parseInt(yReel / Carte.HauteurPartieCarte,10);
    
    var nbPixelL = parseInt(largeur /Carte.LargeurPartieCarte,10) / 2;
    var nbPixelH = parseInt(hauteur /Carte.HauteurPartieCarte,10) / 2;
    
    //Définir ces valeurs dans les décalages et le nouveau zoom
    Carte._decalageX = parseInt(noImageX - nbPixelL,10);
    Carte._decalageY = parseInt(noImageY - nbPixelH,10) + 1;
    _zoom = nouvZoom;

    Carte.AfficherCarte(0);
    Carte.AfficherPixel(x,y);
}

//Affiche la fenetre d'achat de pixel
Carte.AcheterPixel = function(x, y)
{
    Fenetre.FermerFenetre("divFenetre1");
    Fenetre.AfficherFenetre("divFenetre2");
    Fenetre.AfficherMasque();
    
    document.getElementById("divCarte_X").value = x;
    document.getElementById("divCarte_Y").value = y;
    
    var params = new SOAPClientParameters();
    params.add("x",x);
    params.add("y",y);
    params.add("idAchatPix","*F6h8sd76f9807s6dnfn0*F?f7n6ds087bf6?)*SBF7");
	var url = Carte.GetServiceUrl("Cartes");
	SOAPClient.invoke(url, "AcheterPixel", params, true, null);
    
    //redirection vers la page de création du profil
    var framePixel = document.getElementById("framePixel");
    framePixel.src = window.location.protocol + "//" + window.location.host + "/FicheDonateur.aspx";
}

//On affiche la carte initiale
Carte.AfficherCarteInit = function()
{
    _zoom = 1;
    Carte._decalageX = 0;
    Carte._decalageY = 0;
    Carte.AfficherCarte(0);
    Carte.ChangerImageZoom(1);
}

//Crée la bonne requete pour appeler l'image sur le serveur et definit l'image avec l'URL
Carte.AfficherCarte = function(diffZoom)
{   
    Carte.AfficherLoading();
    Carte.ChangerImageZoom(_zoom);

    var tabDimension = Utils.getPageSize();
    var largeur = tabDimension[2];
    var hauteur = tabDimension[3] - 100; //le 100 pixels est le nombre utilise pour la banniere et le bas de page
    
    //On calcul les nouvelles coordonnees
    Carte._decalageX = parseInt(Carte._decalageX / Math.pow(2,diffZoom),10);
    Carte._decalageY = parseInt(Carte._decalageY / Math.pow(2,diffZoom),10);
    
    if(diffZoom < 0)
    {
        var facteur = (-diffZoom) -1;
        Carte._decalageX+= (2 * Math.pow(2,facteur));
        Carte._decalageY+= (2 * Math.pow(2,facteur));
        
        if(diffZoom < -1)
        {
            Carte._decalageX+= (2 * -diffZoom);
            Carte._decalageY+= (2 * -diffZoom);
        }
        if(Carte._oldZoom == 1)
        {
            var facteur = (-diffZoom) -1;
            Carte._decalageX+= (4 * Math.pow(2,facteur));
            Carte._decalageY+= (4 * Math.pow(2,facteur));
        }
    }
    else if(diffZoom > 0)
    {
        Carte._decalageX--;
        Carte._decalageY--;
    }
    
    if(Carte._decalageX <0)
    {
        Carte._decalageX = 0;
    }
    if(Carte._decalageY <0)
    {
        Carte._decalageY = 0;
    }
    
    var imageCarte = "/Controles/Carte/afficherCarte.aspx?x=" + Carte._decalageX + "&y=" + Carte._decalageY + "&zoom=" +
         _zoom + "&largeur=" + largeur + "&hauteur=" + hauteur;

    var imgCarte = document.getElementById("imgCarte");
    imgCarte.src = imageCarte;
}

//Effectue le zoom sur la carte
Carte.Zoomer = function(direction)
{
    var nouvZoom = _zoom;
    
    switch(direction)
    {
        case "+":
            nouvZoom ++;
            break;
        case "-":
            nouvZoom --;
            break;
        default:
            //Dans ce cas nous avons un chiffre
            nouvZoom = direction;
            break;
    }
    if(nouvZoom <= 1)
    {
        nouvZoom = 1;
    }
    else if(nouvZoom > Carte.NbZoom)
    {
        nouvZoom = Carte.NbZoom;
    }
    
    if(nouvZoom != _zoom && nouvZoom != 1)
    {
        Carte._oldZoom = _zoom;
        var diffZoom = _zoom - nouvZoom;
        _zoom = nouvZoom;
        Carte.AfficherCarte(diffZoom);
    }
    else if(nouvZoom == 1)
    {
        Carte._oldZoom = 0;
        Carte.AfficherCarteInit();
    }
}

//Chnage l'image de zoom sur la carte
Carte.ChangerImageZoom = function(nouvZoom)
{
    var imgZoom = document.getElementById("imgZooms");
    imgZoom.src = "/Images/ImagesNavigation/menu_zoom" + nouvZoom + ".png";
}

//Retourne les coordonnees de base du curseur sur la carte
Carte.CoordBase = function(x, y)
{
    //on doit remettre les coordonnees selon la map globale,
    //en fonction de la position actuelle de la carte.
    x += (Carte._decalageX * Carte.LargeurPartieCarte);
    y += (Carte._decalageY * Carte.HauteurPartieCarte);
    
    if(_zoom > 1)
    {
        //On remet les coordonnees de base
        x = Math.floor(x / Math.pow(2,_zoom));
        y = Math.floor((y - 78) / Math.pow(2,_zoom));
    }
    else
    {
        if(Utils.EstIE())
        {
            y--;
            x--;
        }
        y = y - 78;
        x -= parseInt(Carte.BiaisGauche,10);
    }

    var coords = new Array(x,y);
    
    return coords;
} 

Carte.NoImage = function(x,y)
{
    var noImageX = 0;
    var noImageY = 0;
    
    noImageX = parseInt((x / Carte.LargeurPartieCarte + Carte._decalageX),10);
    noImageY = parseInt((y / Carte.HauteurPartieCarte + Carte._decalageY),10);

    //Carte.Debug("Image X : " + noImageX + "\r\n" + "Image Y : " + noImageY);
}

//Function qui affiche le contenu d
Carte.EnvoyerAmi = function(x, y)
{
    var adresseProfil = "/GetXmlData.aspx?type=envoieCourriel&x=" + x + "&y=" + y;
    
    //On envoit une requete XMLHttpRequest pour avoir le bon profil
    _xmlHttp = getObjetHttp("divContenuProfil",Carte.AfficherContenuPixel,false);
    _xmlHttp.open("GET",adresseProfil,true);
    _xmlHttp.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
    _xmlHttp.send(null);
    
    var divProfil = document.getElementById("divFenetre1");
    divProfil.style.visibility = "visible";
}

Carte.EnvoyerMultipleAmi = function(x, y)
{
    var adresseEnvoie = "/EnvoieSiteCourriel.aspx?x=" + x + "&y=" + y;
    
    Utils.Naviguer(adresseEnvoie,388,448);
}

//Fonction de navigation dans la carte
Carte.NaviguerCarte = function(direction)
{
    var nouvDecalageX = Carte._decalageX;
    var nouvDecalageY = Carte._decalageY; 
    var estNavigableX = true;
    var estNavigableY = true;
       
    //On définit les nouvelles coordonnées
    switch(direction)
    {
        case "gauche":
            nouvDecalageX -= 1;
            break;
        case "droite":
            nouvDecalageX += 1;
            estNavigableX = Carte.EstNavigableX(nouvDecalageX);
            break;
        case "haut":
            nouvDecalageY -= 1;
            break;
        case "bas":
            nouvDecalageY += 1;
            estNavigableY = Carte.EstNavigableY(nouvDecalageY);
            break;
        case "hautGauche":
            nouvDecalageX -= 1;
            nouvDecalageY -= 1;
            break;
        case "hautDroite":
            nouvDecalageX += 1;
            nouvDecalageY -= 1;
            estNavigableX = Carte.EstNavigableX(nouvDecalageX);
            break;
        case "basGauche":
            nouvDecalageX -= 1;
            nouvDecalageY += 1;
            estNavigableY = Carte.EstNavigableY(nouvDecalageY);
            break;
        case "basDroite":
            nouvDecalageX += 1;
            nouvDecalageY += 1;
            estNavigableX = Carte.EstNavigableX(nouvDecalageX);
            estNavigableY = Carte.EstNavigableY(nouvDecalageY);
            break;
    }

    if(nouvDecalageX >= 0 && estNavigableX)
    {
        Carte._decalageX = nouvDecalageX;
    }
    
    if(nouvDecalageY >= 0 && estNavigableY)
    {
        Carte._decalageY = nouvDecalageY;
    }

    _topX = Carte._decalageX * Carte.LargeurPartieCarte;
    _topY = Carte._decalageY * Carte.HauteurPartieCarte;
    
    Carte.AfficherCarte(0);
}

//Vérifie si le déplacement en X mène à un débordement
Carte.EstNavigableX = function(nouvDecalageX)
{
    var estNavigable = false;
    var tabDimension = Utils.getPageSize();
    
    var nouvLargeurX = tabDimension[0] + ((nouvDecalageX -1) * Carte.LargeurPartieCarte);
    
    if(nouvLargeurX <= Carte._dimCarte[_zoom -1][0])
    {
        estNavigable = true;
    }
    
    return estNavigable;
}

//Vérifie si le déplacement en Y mène à un débordement
Carte.EstNavigableY = function(nouvDecalageY)
{
    var estNavigable = false;
    var tabDimension = Utils.getPageSize();

    var nouvLargeurY = tabDimension[1] + ((nouvDecalageY -1) * Carte.HauteurPartieCarte);
    
    if(nouvLargeurY <= Carte._dimCarte[_zoom -1][1])
    {
        estNavigable = true;
    }
    
    return estNavigable;
}


//Affiche la boîte de chargement lors du rafraichissement de la carte
//pendant 1.8 secondes
Carte.AfficherLoading = function ()
{
    var divLoading = document.getElementById("divLoading");
    divLoading.style.visibility = "visible";
    
    _timeoutLoading = setTimeout("Carte.CacherLoading()",1800);
}

//Cache la fenêtre de chargement
Carte.CacherLoading = function()
{
    var divLoading = document.getElementById("divLoading");
    divLoading.style.visibility = "hidden";
    clearTimeout(_timeoutLoading);
}

Carte.DiminuerCarte = function()
{
    var imgCarte = document.getElementById("imgCarte");
    imgCarte.style.width = 1000 + "px";
    var divBasPage = document.getElementById("divBasPage");
    divBasPage.style.width = 1000 + "px";
}

//Fonction appelée lors du redimmensionnement de la carte
Carte.Redimmensionner = function()
{
    Carte.PositionnerElements();
    Carte.AfficherCarte(0);
}

/***************************************************
 *   AJAX
****************************************************/
//Retourne un objet de type xmlHttpRequest
function getObjetHttp(elementReponse, reponseFonction, isXML)
{
    var _xmlHttp = false;
    
    if(window.XMLHttpRequest) //Firefox et autres
    {
        try
        {
            _xmlHttp = new XMLHttpRequest();
        }
        catch (e)
        {
            _xmlHttp = false;
        }
    } 
    else if(window.ActiveXObject) // Internet Explorer 
    {
        try
        {
            _xmlHttp = new ActiveXObject("Msxml2.XMLHttp");
        }
        catch (e)
        {
            try
            {
                _xmlHttp = new ActiveXObject("Microsoft.XMLHttp");
            }
            catch (e) 
            {
                _xmlHttp = false;
            }
        }
    }
    
    if(_xmlHttp)
    {
        _xmlHttp.onreadystatechange = function()
        {
            GetData(elementReponse, reponseFonction, isXML);
        };
    }
    else
    {
        Carte.AfficherErreur("Compatibilité du navigateur",
            "Votre navigateur n'est pas compatible avec le site, vous devez posséder au minimum IE 5.0, Firefox, Netscape 4");
    }

    return _xmlHttp;
}

//Retourne les données depuis la requête XML asynchrone
function GetData(elementReponse, reponseFonction, isXML)
{
    var divLoading = document.getElementById("divLoading");
    isData = false;
    if(_xmlHttp.readyState == 4) // Complété
    {
        if(_xmlHttp.status == 200) // code HTTP OK
        {
            if(isXML)
            {
                try
                {
                    eval(reponseFonction(cleanXML(_xmlHttp.responseXML.documentElement),elementReponse));
                }
                catch(e)
                {
                    Carte.AfficherErreur("Une erreur lors de la collecte des donnees XML", e.message);
                }
            }
            else
            {
                try
                {
                    eval(reponseFonction(_xmlHttp.responseText,elementReponse));
                }
                catch(e)
                {
                    Carte.AfficherErreur("Une erreur lors de la collecte des donnees texte", e.message);
                }
            }
            isData = true;
        }
        else
        {
            Carte.AfficherErreur("Une erreur est survenue lors de l'appel de la page",_xmlHttp.responseText);
            //TODO: Affichage d'une page pour signaler l'erreur
        }
        divLoading.style.visibility = "hidden";
    }
    else if(_xmlHttp.readyState > 0 & _xmlHttp.readyState < 4 ) //On affiche un loading
    {
        //Il suffit de formater le divLoading
        divLoading.style.visibility = "visible";
    }
    
    return isData;
}

//Affiche une erreur en plein centre de l'écran et affiche un lien pour envoyer des commentaires
Carte.AfficherErreur = function(titre, message)
{
    //TODO: Mettre le tout dans un div qui se centre au milieu de la page
    if(Carte.EstDemo)
    {
        alert(titre + "\n" + message);
    }
}

Carte.Debug = function(message)
{
    if(Carte.EstDemo)
    {
        alert(message);
    }
}

//Fonction qui envoit des données par ajax
function EnvoyerDonnees(elementReponse, reponseFonction, method, url, data,isXML)
{
    _xmlHttp = getObjetHttp(elementReponse,reponseFonction,isXML);
    if(!_xmlHttp)
    {
        return false;
    }
    
    if(method == "GET" || method == "get")
    {
        if(data == 'null')
        {
            _xmlHttp.open(method,url,true);
            _xmlHttp.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
        }
        else
        {
            _xmlHttp.open(method,url+"?"+data,true);
            _xmlHttp.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
        }
        _xmlHttp.send(null);
    }
    else if(method == "POST" || method == "post")
    {
        _xmlHttp.open(method,url+"?"+data,true);
        _xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        _xmlhttp.send(data);
    }
    return true;
}

//Affiche le résultat de la réponse comme du texte
function AfficherTexte(reponse,elementReponse)
{
    var divReponse = document.getElementById(elementReponse);
    divReponse.innerHTML = reponse;
}

Carte.AfficherContenuPixel = function(reponse, elementReponse)
{
    var divReponse = document.getElementById(elementReponse);
    divReponse.innerHTML = reponse;
    
    var largeur = Utils.GetValeurNumerique(divReponse.offsetWidth);
    var hauteur = Utils.GetValeurNumerique(divReponse.offsetHeight);
    
    var titreDebut = reponse.indexOf("<title>",0);
    var titreFin = reponse.indexOf("</title>",titreDebut);
    
    var titre = reponse.substring(titreDebut + 7, titreFin);
    
    var divTitreFenetre1 = document.getElementById('divTitreFenetre1');
    divTitreFenetre1.innerHTML = titre;
    
    var infos = Carte.GetPixelInfos();
    
    var couleurBordure = infos[0];
    var couleurFond = infos[1];
    var imageBordure = infos[2];
    var couleurTitre = infos[3];

    Fenetre.DimensionnerFenetre('divFenetre1',largeur,hauteur + 22);
    Fenetre.ChangerCouleur('divFenetre1',couleurBordure,couleurFond,imageBordure,couleurTitre);
}

Carte.GetPixelInfos = function()
{
    var infos = new Array(document.getElementById("modelePixelCouleurBordure").innerHTML,
                        document.getElementById("modelePixelCouleurFond").innerHTML,
                        document.getElementById("modelePixelImageBordure").innerHTML,
                        document.getElementById("modelePixelCouleurTitre").innerHTML);
    
    return infos;
}

function DumpDonnee(reponse, elementReponse)
{
}

/***************************************************
 *  FIN AJAX
****************************************************/
