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() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.addControl(new GOverviewMapControl());
        map.setCenter(new GLatLng(49.15,0), 8);

      if (geocoder) {
        GDownloadUrl("dataXml.php", function(data) {

          var xml = GXml.parse(data);

          markersXml = xml.getElementsByTagName("marker");
        //alert(markersXml);
          for (var i = 0; i < markersXml.length; i++) {
            makeMarker(markersXml[i],i);
            initC++;
            //iniatilsation: pour recup les coords dynamiquement !
            /*
            if(markersXml[i].getAttribute("lat")=="" || markersXml[i].getAttribute("lng")=="") {
                rechercheCoords(markersXml[i]);
            }
            */
            
            
          }
          //fin chargement
          document.getElementById("chargement").style.display = "none";

          //si un choisi
          if(document.getElementById("idEtab").value!="" && document.getElementById("table").value!="") {
            var idEtab = document.getElementById("idEtab").value;
            var table = document.getElementById("table").value;
            for (var i = 0; i < markersXml.length; i++) {
                if(markersXml[i].getAttribute("id")==idEtab && markersXml[i].getAttribute("table")==table) {
                    showMarker(markers[i]);
                    makePopup(markers[i],markersXml[i]);
                    break;
                }
            }
          } else if(document.getElementById("table").value!="") {
            //si un type d'etab choisi
            var idType = 0;
            var table = document.getElementById("table").value;
            for (var c = 0; c < document.getElementsByName("choixtype").length; c++) { 
                if(document.getElementsByName("choixtype")[c].getAttribute("table")==table) {
                    idType = document.getElementsByName("choixtype")[c].getAttribute("value");
                    document.getElementsByName("choixtype")[c].checked = true;
                    break;                    
                }
            } 
            if(idType!=0) {
                afficheTypeById(idType,true);
            }
            
            /*
            for (var i = 0; i < markersXml.length; i++) {
                if(markersXml[i].getAttribute("table")==table) {
                    showMarker(markers[i]);
                }
            }
            
            //coche le checkbox
            for (var c = 0; c < document.getElementsByName("choixtype").length; c++) { 
                if(document.getElementsByName("choixtype")[c].getAttribute("table")==table) {
                    document.getElementsByName("choixtype")[c].checked = true;
                    
                }
            }  
            */                      
          } else {
              //sinon affiche tous          
              afficheAllType(true);          
          }

        });      
      }

      }
}

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 afficheAllType(isChecked) {    
    
    //map
    //clear
    map.clearOverlays();
    
    if(isChecked) {
        for (var i = 0; i < markers.length; i++) {          
                if(markers[i]!=null) {
                    showMarker(markers[i]);
                }
        }    
    }

    //checkbox
    for (var c = 0; c < document.getElementsByName("choixtype").length; c++) { 
        document.getElementsByName("choixtype")[c].checked = isChecked;
    }
    
    //texte
    if(isChecked) {
        document.getElementById("texteTous").innerHTML = "Aucun";
    } else {
        document.getElementById("texteTous").innerHTML = "Tous";
    }
    
}

function afficheType(champ) {
    var idType = champ.value;
    var isChecked = champ.checked;
    afficheTypeById(idType,isChecked);    
}

function makeMarker(markerXml,i) {

    var lat = markerXml.getAttribute("lat");
    var lng = markerXml.getAttribute("lng");
    var picto = markerXml.getAttribute("picto");
    if(lat!="" && lng!="") {
        var marker = null;
        if(picto!="") {
    
            var icon = new GIcon();
    
            icon.image = "icones/" + picto;
            icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
            icon.iconSize = new GSize(12, 20);
            icon.shadowSize = new GSize(22, 20);
            icon.iconAnchor = new GPoint(6, 20);
            icon.infoWindowAnchor = new GPoint(5, 1);
    
            marker = new GMarker(new GLatLng(lat,lng),icon);
        } else {
            marker = new GMarker(new GLatLng(lat,lng));
        }    
        GEvent.addListener(marker, "click", function() {
            makePopup(marker,markerXml);
        });
        
    }
    
    markers[i] = marker;
    
}

function showMarker(marker) {
    map.addOverlay(marker);
       
}
function hideMarker(marker) {
    map.removeOverlay(marker);
}

function makePopup(marker,markerXml) {

    var nom = markerXml.getAttribute("nom");
    var ville = markerXml.getAttribute("ville");
    var id = markerXml.getAttribute("id");
    var adresse = markerXml.getAttribute("adresse");
    var cp = markerXml.getAttribute("cp");
    var nomfr = markerXml.getAttribute("nomfr");
    var pagedetail = markerXml.getAttribute("pagedetail");
    var photo = markerXml.getAttribute("photo");
    var photoEtab = "";
    if(photo!="") {
        photoEtab = "<img src=\"" + photo + "\" height=\"80\" />";
    }
    marker.openInfoWindowHtml("<table cellpadding=\"2\" cellspacing=\"2\"><tr><td colspan=\"2\" class=\"nomType\">" + nomfr + "</td></tr><tr><td><b>" + nom + "</b><br/>" + adresse + "<br/>" + cp + " " + ville + "<br/><br/><img src=\"icones/arrow.gif\"/>&nbsp;<a href=\"javascript:void(0)\" onclick=\"viewFicheEtab('" + id + "','" + pagedetail + "')\">Plus d'infos...</a></td><td>" + photoEtab+ "</td></tr></table>");
    map.panTo(marker.getPoint());
}

function viewFicheEtab(idEtab,pagedetail) {
    window.opener.location.href = "../" + pagedetail + "?id=" + idEtab;
    window.opener.focus();
}

//recherche
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 rechercheEtabs() {
    if(document.getElementById("search").value!="" && document.getElementById("search").value.length>2) {
    
        document.getElementById("resultats").innerHTML = "";
        document.getElementById("resultatsTitre").innerHTML = "";
        var nbres = 0;
        var searchValue = nettoieCaras(document.getElementById("search").value);
        tabSearch = searchValue.split(" ");
        
        for (var i = 0; i < markersXml.length; i++) {
            for(var t = 0; t < tabSearch.length; t++) {
                var search = tabSearch[t];
                //if(markersXml[i].getAttribute("nom").toLowerCase()==search.toLowerCase() || markersXml[i].getAttribute("ville").toLowerCase()==search.toLowerCase()) {
                if(markersXml[i].getAttribute("titreRecherche").toLowerCase().indexOf(search.toLowerCase())>=0 || markersXml[i].getAttribute("villeRecherche").toLowerCase().indexOf(search.toLowerCase())>=0) {
                    document.getElementById("resultats").innerHTML += "<div>&nbsp;<img src=\"icones/arrow.gif\" width=\"5px\" />&nbsp;<a href=\"javascript:void(0)\" onclick=\"viewMarker('" + i + "')\">" + markersXml[i].getAttribute("nom") + "</a></div>";
                    nbres++;
                }  
            }
        }
        if(nbres>0) {
            document.getElementById("resultatsTitre").innerHTML = "<p style=\"text-align:center;text-decoration:underline;color:#FF9900;font-weight:bold\">Résultats (" + nbres + ")</p>";
        } else {
            document.getElementById("resultatsTitre").innerHTML = "<p style=\"text-align:center;color:#FF9900;font-weight:bold\">Aucun résultat</p>";
        }
        
    }
}

function viewMarker(indice) {
    marker = markers[indice];
    markerXml = markersXml[indice];
    map.addOverlay(marker);
    //map.setCenter(marker.getPoint(), 10);
    makePopup(marker,markerXml);
}

//function temporaire pour recup les coords
function rechercheCoords(markerXml) {
            //recupere les données géo (adresse, cp, ville, pays=france)
            var ville = markerXml.getAttribute("ville");
            var id = markerXml.getAttribute("id");
            var table = markerXml.getAttribute("table");
            var adresse = markerXml.getAttribute("adresse");
            var cp = markerXml.getAttribute("cp");
            var dept = markerXml.getAttribute("dept");
            var pays = "FRANCE";
            var address = "";
            if(adresse!="") {
                address = adresse + ", ";
            }
            //address += cp + ", " + ville + ", " + pays;
            //moins strict, sans l'adresse
            address = cp + ", " + ville + ", " + pays;
            
            //recherche les coordonnées par GeoCoder
            geocoder.getLatLng(
              address,
              function(point) {
                if (!point) {
                    document.getElementById("inconnues").innerHTML += markerXml.getAttribute("nomfr") + "(" + id + ") : " + address + " pas trouvée.<br/>\n";
                    
                } else {
                  //affiche le point
                  
    
                  var marker = new GMarker(point);
                  var latitude = marker.getPoint().lat();
                  var longitude = marker.getPoint().lng();
                  
                  document.getElementById("updates").innerHTML += "UPDATE " + table + " SET lng='" + longitude + "', lat='" + latitude + "' WHERE id = '" + id + "';\n";
                }
            });

}

    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;
    }
