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) {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        //map.addControl(new GHierarchicalMapTypeControl());
        //map.addControl(new GOverviewMapControl());
        //var center = new GLatLng(48.9183852, -0.3);
        var center = new GLatLng(48.6492424, 0.0782776);
        map.setCenter(center, 9, G_PHYSICAL_MAP);
        hookMouseWheelHandlers("map");
        var xmlFile = "http://www.admr61.fr/web/carte/dataXml.php";
          if(idLieu!='') {
            xmlFile = "http://www.admr61.fr/web/carte/dataXml.php?noLink=1";      
          }
        
      if (geocoder) {
          GDownloadUrl(xmlFile, function(data) {
          var xml = GXml.parse(data);
          markersXml = xml.getElementsByTagName("marker");

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

        }); 

        var gx = new GGeoXml("http://www.admr61.fr/web/carte/61.kml");
        map.addOverlay(gx);
      }

      }
}

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

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) {

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

    
    if(lat!="" && lng!="") {
        var marker = null;
        marker = new GMarker(new GLatLng(lat,lng));
            
        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]);
    }
        var center = new GLatLng(48.9183852, -0.3);
        map.setCenter(center, 8);    
}

//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 telephone = markerXml.getAttribute("telephone");

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

    var html = "<table cellpadding=\"2\" cellspacing=\"2\"><tr><td valign=\"top\"><b>" + nom + "</b><br/><i>" + adresse + "<br/><b>Tél. : </b>" + telephone + "</i><br/>";
    if(pagedetail!="") {
      html += "<br/><a href=\"" + pagedetail + "\">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) {

    hideMarkers(markers)//cache les autres

    markerXml = markersXml[indice];
    makeMarker(markerXml,indice);
    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) {
  try {
    map.setCenter(map.getCenter() , map.getZoom(), type);
  } catch (e) {
    alert(e);
  }
}