var geocoder = new GClientGeocoder();
var map = null;//carte
var markers = new Array();//tableau des objets markers
var markersXml = null;//tableau des lignes xml
var initC = 0;

function load(idLieu, repCarte) {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        //map.addControl(new GHierarchicalMapTypeControl());
        map.addControl(new GOverviewMapControl());
        var center = new GLatLng(49.3270240, -0.4549885);
        map.setCenter(center, 14, G_PHYSICAL_MAP);
        hookMouseWheelHandlers("map");

      if (geocoder) {
          GDownloadUrl(repCarte + "dataXml.php", function(data) {
          var xml = GXml.parse(data);
          markersXml = xml.getElementsByTagName("marker");

          for (var i = 0; i < markersXml.length; i++) {
                makeMarker(markersXml[i],i, repCarte);
                showMarker(markers[i]);
            initC++;
          }
          
          if(idLieu!='') {
            map.setCenter(center, 14, G_NORMAL_MAP);
            viewPoint(idLieu, repCarte);
          }

        });      
      }

      }
}

function viewPoint(id, repCarte) {
    hideMarkers(markers);
    for (var i = 0; i < markers.length; i++) {          
        if(markersXml[i].getAttribute("id")==id) {
            if(markers[i]!=null) {
                /*
                showMarker(markers[i]);
                makePopup(markers[i],markersXml[i]);
                */
                viewMarker(i, repCarte);  
           
            }
        }
    }
}

function viewPointCategorie(idCategorie) {
    hideMarkers(markers);
    for (var i = 0; i < markers.length; i++) {          
        if(markersXml[i].getAttribute("idCategorie")==idCategorie) {
            if(markers[i]!=null) {

                showMarker(markers[i]);
 
           
            }
        }
    }
}

/*
function afficheType(idType) {    
    hideMarkers(markers);
    for (var i = 0; i < markers.length; i++) {          
        if(markersXml[i].getAttribute("idType")==idType) {
            if(markers[i]!=null) {
                showMarker(markers[i]);               
            }
        }
    }
    reInitSelect(idType);
}
*/
/*
save
function afficheTypeById(idType,isChecked) {    
    for (var i = 0; i < markers.length; i++) {          
        if(markersXml[i].getAttribute("idType")==idType) {
            if(markers[i]!=null) {
                if(isChecked) {
                    showMarker(markers[i]);
                } else {
                    hideMarker(markers[i]);
                }
                
            }
        }
    }
    reInitSelect(idType);
}
*/
function reInitSelect(idType) {
    //non utilisée ici, définie uniquement pour eviter NULL
}


function makeMarker(markerXml,i, repCarte) {

    var lat = markerXml.getAttribute("lat");
    var lng = markerXml.getAttribute("lng");

    
    if(lat!="" && lng!="") {
        var marker = null;

    		// Ajout d'un marqueur personnalisé sur la carte :
    		var myIcon = new GIcon();
    		myIcon.image = repCarte + "icone_lieu.php?idCategorie=" + markerXml.getAttribute("idCategorie");
    		myIcon.shadow = "";
    		myIcon.border = "100";
    		myIcon.iconSize = new GSize(25, 25);
    		//myIcon.shadowSize = new GSize(40, 33);
    		myIcon.iconAnchor = new GPoint(12, 25);
    		myIcon.infoWindowAnchor = new GPoint(10, 1);
    		var markerOptions = {
    			icon: myIcon
    		};

        //marker = new GMarker(new GLatLng(lat,lng));
        marker = new GMarker(new GLatLng(lat,lng), markerOptions);
            
        GEvent.addListener(marker, "click", function() {
            makePopup(marker,markerXml);
        });
        
    }
    
    markers[i] = marker;
    
}

//affiche un point (s'il existe)
function showMarker(marker) {
    try {
      map.addOverlay(marker);
    } catch(e) {      
    }    
       
}

//cache un point (s'il existe)
function hideMarker(marker) {
    try {
      map.removeOverlay(marker);
    } catch(e) {      
    }
}

//cache tout
function hideMarkers(markerArray) {
    for(m=0;m<markerArray.length;m++) {
      hideMarker(markerArray[m]);
    }
}
//affiche tout
function showMarkers() {
   hideMarkers(markers);
    for(m=0;m<markers.length;m++) {
      showMarker(markers[m]);
    }
}

//affiche infobulle d'un point
function makePopup(marker,markerXml) {

    var nomCat = markerXml.getAttribute("titreCategorie");
    var nom = markerXml.getAttribute("nom");
    var id = markerXml.getAttribute("id");
    var adresse = markerXml.getAttribute("adresse");

    var pagedetail = markerXml.getAttribute("pagedetail");
    document.title = (nom);

    var html = "<table cellpadding=\"2\" cellspacing=\"2\"><tr><td colspan=\"2\" style=\"font-weight:bold;text-transform:uppercase;\">" + nomCat + "</td></tr><tr><td valign=\"top\"><b>" + nom + "</b><br/><i>" + adresse + "</i><br/>";
    if(pagedetail!="") {
      var target = "";
      if(pagedetail.indexOf("http")!=-1) {
         target = "target=\"_blank\"";
      }      
      html += "<br/><a style=\"color:#78abcd\" href=\"" + pagedetail + "\" " + target + ">Plus d'infos...</a>";
    }
    html += "</td></tr></table>";
    
    try {
      marker.openInfoWindowHtml(html);    
      map.panTo(marker.getPoint());    
    } catch(e) {
    }
}

function replaceAll( str, from, to ) {
    var idx = str.indexOf( from );
    while ( idx > -1 ) {
        str = str.replace( from, to ); 
        idx = str.indexOf( from );
    }
    return str;
}

function nettoieCaras(mot) {
    caras = new Array("à","â","ä","é","è","ê","ë","ö","ô","ü","û","ù","î","ï","ç");
    replaces = new Array("a","a","a","e","e","e","e","o","o","u","u","u","i","i","c");
    for(c=0;c<caras.length;c++) {
        mot = replaceAll(mot,caras[c],replaces[c]);
    }
    return mot;
}


function viewMarker(indice, repCarte) {

    hideMarkers(markers)//cache les autres

    markerXml = markersXml[indice];
    makeMarker(markerXml,indice, repCarte);
    marker = markers[indice];
    showMarker(marker);
    map.addOverlay(marker);
    map.setCenter(marker.getPoint(), 14);
    makePopup(marker,markerXml);
}



function pointToCoord(point) {
        var pointstr = point.toString();
        pointstr = pointstr.replace("(","");
        pointstr = pointstr.replace(")","");
        pointstr = pointstr.replace(" ","");
        var tableau = pointstr.split(",");
        //var tableau = point.toString().split(RegExp("[(,) ]+", "g"));
        return tableau;
}



function gmap_change_type(type) {
  
  
  switch (type)
  {
  case "G_NORMAL_MAP":
    stype = G_NORMAL_MAP;
  break;
  case "G_SATELLITE_MAP":
    stype = G_SATELLITE_MAP;
  break;
  case "G_PHYSICAL_MAP":
    stype = G_PHYSICAL_MAP;
  break;
  case "G_HYBRID_MAP":
    stype = G_HYBRID_MAP;
  break;
  default:
    stype = type;
  break;
  }  
  
  try {
    map.setCenter(map.getCenter() , map.getZoom(), stype);
  } catch (e) {
    alert(e.toString());
  }
}
