/****************
Fonctions utilisées pour l'affichage de la carte Google Map V3
avec marqueurs (google.maps.marker) multiples, disposition de plusieurs marqueurs au
même endroit en "rosace", ajout d'infobulles (google.maps.InfoWindow) sur chaque marqueur
DN 11/06/2010
*************/
function getNbMarqueursDejaPlacesAuMemeEndroit(tabMarqueursExistants, nouveauMarqueur)
{
    var nbOccurence = 0;
    for(j=0; j<tabMarqueursExistants.length; j++)
    {
        if(tabMarqueursExistants[j])
        {
            if(tabMarqueursExistants[j][1]==nouveauMarqueur[1] && tabMarqueursExistants[j][2]==nouveauMarqueur[2])
            {
                nbOccurence++;
            }
        }
    }
    return nbOccurence;
}
function classerMarqueursParEndroit(tabEndroits, marqueur)
{
    var existe = false;
    for (k=0;k<tabEndroits.length;k++)
    {
        if(tabEndroits[k][1] == marqueur[1] && tabEndroits[k][2] == marqueur[2])
        {
            tabEndroits[k][0]++;
            existe = true;
        }
    }
    if(!existe){
        tabEndroits[tabEndroits.length] = new Array(1,marqueur[1],marqueur[2]);
    }
    return tabEndroits;
}
function getAngleBase(tabEndroits, marqueur)
{
    var angleBase=0;
    var nbMarqueurs;
    for (k=0;k<tabEndroits.length;k++)
    {
        if(tabEndroits[k][1] == marqueur[1] && tabEndroits[k][2] == marqueur[2])
        {
            nbMarqueurs = tabEndroits[k][0];
        }
    }    
    if (nbMarqueurs > 0)
    {
        angleBase = 360 / nbMarqueurs;
    }
    return angleBase;
}
function getCoordonnees(marqueur, angle, angleBase, carte)
{
    var rayon = 0.0001;
    var ratio = 0.7;
    var angleTrigonometrique ;
    var coordonnees;
    var pointCentral = new google.maps.LatLng(marqueur[2], marqueur[1]);
    if(angleBase == 0 || angleBase>=60)
    {   //si on a entre 1 et 6 marqueurs à mettre au même endroit, on ne décale rien :
        coordonnees = pointCentral;
    }else{
        //on décale de
        if(angleBase >= 30)
        {
            rayon = 0.0001; //si on a entre 7 et 12 marqueurs
        }else{
            rayon = 0.0002; //si on a plus de 12 marqueurs
        }
        angleTrigonometrique = (Math.PI*2)*(angle/360);
        coordonnees = new google.maps.LatLng((parseFloat(marqueur[2])+(Math.cos(angleTrigonometrique)*rayon*ratio)), (parseFloat(marqueur[1])-(Math.sin(angleTrigonometrique)*rayon)));
        //on trace une ligne reliant le marqueur au point central
        ajouterLigne(pointCentral, coordonnees, carte);
    }
    return coordonnees;
}

// Fonctions permettant de déterminer la position de l'ancre de l'icone marqueur
// en fonction de l'angle appliqué à celui-ci.
function getAnchorHPositionFromAngle(angle)
{   //(empirique)
    position=10;
    if(angle==0 || angle==180){
        position=10;
    }else if((angle>0 && angle<=10) || (angle>=170 && angle<180)){
        position=16;
    }else if((angle>10 && angle<=20) || (angle>=160 && angle<170)){
        position=20;
    }else if((angle>20 && angle<=30) || (angle>=150 && angle<160)){
        position=28;
    }else if((angle>30 && angle<=40) || (angle>=140 && angle<150)){
        position=30;
    }else if((angle>40 && angle<=50) || (angle>=130 && angle<140)){
        position=38;
    }else if((angle>50 && angle<=60) || (angle>=120 && angle<130)){
        position=38;
    }else if((angle>60 && angle<=70) || (angle>=110 && angle<120)){
        position=39;
    }else if((angle>70 && angle<=80) || (angle>=100 && angle<110)){
        position=39;
    }else if((angle>80 && angle<90) || (angle>90 && angle<100)){
        position=41;
    }else if(angle==90){
        position=41;
    }else if((angle>=350 && angle<360) || (angle>180 && angle<190)){
        position=12;
    }else if((angle>=340 && angle<350) || (angle>=190 && angle<200)){
        position=10;
    }else if((angle>=330 && angle<340) || (angle>=200 && angle<210)){
        position=9;
    }else if((angle>=320 && angle<330) || (angle>=210 && angle<220)){
        position=9;
    }else if((angle>=310 && angle<320) || (angle>=220 && angle<230)){
        position=9;
    }else if((angle>=300 && angle<310) || (angle>=230 && angle<240)){
        position=6;
    }else if((angle>=290 && angle<300) || (angle>=240 && angle<250)){
        position=4;
    }else if((angle>=280 && angle<290) || (angle>=250 && angle<260)){
        position=3;
    }else if((angle>270 && angle<280) || (angle>=260 && angle<270)){
        position=1;
    }else if((angle==270)){
        position=0;
    }
    return position;
}
function getAnchorVPositionFromAngle(angle)
{   //(empirique)
    position=42;
    if(angle==0 || angle==360){
        position=39;
    }else if((angle>0 && angle<=10) || (angle>=350 && angle<360)){
        position=39;
    }else if((angle>10 && angle<=20) || (angle>=340 && angle<350)){
        position=39;
    }else if((angle>20 && angle<=30) || (angle>=330 && angle<340)){
        position=39;
    }else if((angle>30 && angle<=40) || (angle>=320 && angle<330)){
        position=37;
    }else if((angle>40 && angle<=50) || (angle>=310 && angle<320)){
        position=33;
    }else if((angle>50 && angle<=60) || (angle>=300 && angle<310)){
        position=29;
    }else if((angle>60 && angle<=70) || (angle>=290 && angle<300)){
        position=26;
    }else if((angle>70 && angle<=80) || (angle>=280 && angle<290)){
        position=18;
    }else if((angle>80 && angle<90) || (angle>270 && angle<280)){
        position=14;
    }else if(angle==90 || angle==270){
        position=12;
    }else if((angle>90 && angle<100) || (angle>260 && angle<270)){
        position=11;
    }else if((angle>=100 && angle<110) || (angle>250 && angle<=260)){
        position=11;
    }else if((angle>=110 && angle<120) || (angle>240 && angle<=250)){
        position=8;
    }else if((angle>=120 && angle<130) || (angle>230 && angle<=240)){
        position=8;
    }else if((angle>=130 && angle<140) || (angle>220 && angle<=230)){
        position=8;
    }else if((angle>=140 && angle<150) || (angle>210 && angle<=220)){
        position=8;
    }else if((angle>=150 && angle<160) || (angle>200 && angle<=210)){
        position=8;
    }else if((angle>=160 && angle<170) || (angle>190 && angle<=200)){
        position=6;
    }else if((angle>=170 && angle<180) || (angle>180 && angle<=190)){
        position=6;
    }else if(angle==180){
        position=1;
    }
    return position;
}
//Ajout d'une ligne noire d'un pixel.
function ajouterLigne(depart, arrivee, carte) 
{ 
	var coordonneesLigne;
	var traceLigne;

	coordonneesLigne = [
		depart,
		arrivee
	  ];
	traceLigne = new google.maps.Polyline({
		map: carte,
		path: coordonneesLigne,
		strokeColor: "#000000",
		strokeOpacity: 1.0,
		strokeWeight: 1
	  });
} 
function zoomMaxSurLatLng(lat, lng, carte)
{//Zoome sur un point précis de la carte
    var centre = new google.maps.LatLng(lat,lng);
    limites = new google.maps.LatLngBounds(centre, centre);
    carte.fitBounds(limites);
}

function localiserUnPoint(marqueur, carte, fermerLesAutresInfosBullesOuvertes)
{   //Centre sur un marqueur de la carte
    var centre = new google.maps.LatLng(marqueur[2],marqueur[1]);    
    carte.setCenter(centre);
    if(fermerLesAutresInfosBullesOuvertes)
    {
        fermerToutesLesInfosBulles(carte);
    }
    //Affiche l'infobulle du marqueur concerné
    marqueur[7].open(carte,marqueur[6]);
}
function attacherInfoBulle(marqueur, carte, contenu, afficher) 
{   
    var infoBulle = new google.maps.InfoWindow(
                                                { content: contenu
                                                //zIndex: indice
                                                });
    google.maps.event.addListener(marqueur, 'click', function() {
                                    fermerToutesLesInfosBulles(carte);
                                    infoBulle.open(carte,marqueur);
                                    });
    
    if (afficher){
        //cas ou l'on affiche l'infobulle par défaut
        infoBulle.open(carte,marqueur);
    }                                
    /*google.maps.event.addListener(carte, 'click', function() {
                                    infoBulle.close();
                                  });*/
    return infoBulle;        
}
function fermerToutesLesInfosBulles(carte)
{//Ferme toutes les infobulles de la carte
    for(i=0; i<marqueurs.length; i++)
    {
        if(marqueurs[i][7])
        {
            marqueurs[i][7].close();
        }
    }
}
//****************
