/****************
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,
attribution de couleurs différentes aux marqueurs et affichage d'une légende correspondante
à ces couleurs.
DN 16/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 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);
    }          
    return infoBulle;             
    /*google.maps.event.addListener(carte, 'click', function() {
                                    infoBulle.close();
                                  });*/
}
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();
        }
    }
}
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]);
}

//Fonction qui retourne un code couleur pour le picto en fonction d'un code
function getCouleurPicto(code)
{
    var codeCouleur = "FF6644";
    
    if       (code=="01"){
        codeCouleur = "ff9d44";
    }else if (code=="02"){
        codeCouleur = "4482ff";
    }else if (code=="03"){
        codeCouleur = "8aff44";
    }else if (code=="04"){
        codeCouleur = "ffe944";
    }else if (code=="05"){
        codeCouleur = "51ff44";
    }else if (code=="06"){
        codeCouleur = "44ff96";
    }else if (code=="07"){
        codeCouleur = "4457ff";
    }else if (code=="08"){
        codeCouleur = "7d44ff";
    }else if (code=="09"){
        codeCouleur = "ff44f5";
    }else if (code=="10"){
        codeCouleur = "44c9ff";
    }else if (code=="11"){
        codeCouleur = "b84a31";
    }else if (code=="12"){
        codeCouleur = "5eae2e";
    }else if (code=="13"){
        codeCouleur = "a999f6";
    }else if (code=="14"){
        codeCouleur = "eef699";
    }else if (code=="15"){
        codeCouleur = "f6b999";
    }else if (code=="16"){
        codeCouleur = "db99f6";
    }else if (code=="17"){
        codeCouleur = "a099f6";
    }else if (code=="18"){
        codeCouleur = "99f6b9";
    }else if (code=="19"){
        codeCouleur = "57ac2d";
    }else if (code=="20"){
        codeCouleur = "902dac";
    }else if (code=="21"){
        codeCouleur = "ac2d58";
    }else if (code=="22"){
        codeCouleur = "ff44bc";
    }else if (code=="23"){
        codeCouleur = "a89ce5";
    }else if (code=="24"){
        codeCouleur = "e5dc9c";
    }else if (code=="25"){
        codeCouleur = "bae59c";
    }else if (code=="26"){
        codeCouleur = "9ccbe5";
    }else if (code=="27"){
        codeCouleur = "dedede";
    }else if (code=="28"){
        codeCouleur = "a2a2a2";
    }else if (code=="29"){
        codeCouleur = "707070";
    }else if (code=="30"){
        codeCouleur = "eaeaea";
    }
    return codeCouleur;
}

//Fonction qui détermine la liste des différents types de partenaire principal présents dans le résultat.
function determinerTypesPartPrincipPresents(tabTPAWpresents, typePartPrincip)
{
    var existe = false;
    for (k=0;k<tabTPAWpresents.length;k++)
    {
        if(tabTPAWpresents[k][0] == typePartPrincip[1])
        {
            existe = true;
        }
    }
    if(!existe){
        tabTPAWpresents[tabTPAWpresents.length] = new Array(typePartPrincip[1],typePartPrincip[2]);
    }
    return tabTPAWpresents;
}

//Fonction qui construit la légende des codes couleur.
function construireLegende(titre,tableauCodeNom)
{
    var html="";
    if(titre!=""){
        html += "<div class='legendeCarteGoogle_entete'>"+titre+"</div>";
    }
    html += "<div class='legendeCarteGoogle_corps'>"
    html += "<ul>";
    for (n=0;n<tableauCodeNom.length;n++)
    {
        html += "<li>";
        html += "<img src='http://chart.apis.google.com/chart?chst=d_map_spin&chld=0.4|0|"+getCouleurPicto(tableauCodeNom[n][0])+"|11|_|' />";
        html += ""+tableauCodeNom[n][1];
        html += "<li>";
        html += "</li>";
    }
    html += "</ul></div>";
    
    return html;
}
//****************