function gmaps_centrerRecherche() {
	var centreOk = false;
	var lieu = "";
	if (document.forms["meForm"] && document.forms["meForm"].elements["lieu"]) {
	    lieu = document.forms["meForm"].elements["lieu"].value;
	} else if (g_gmapsLocalisation) {
		lieu = g_gmapsLocalisation;
	}
    if (lieu != "") {
        var geocoder = new GClientGeocoder();
        geocoder.setBaseCountryCode("fr");
        geocoder.getLatLng(
            lieu,
            function (point) {
                if (!point) {
                    alert("Désolé, localisation non trouvée : " + lieu);
        	    	map.setCenter(gloPointCentre, 8);
                } else {
                    map.setCenter(point, 8);
                    //alert("lat = " + point.lat() + " lng = " + point.lng());
                }
            }
        );
        centreOk = true;
    }
	if (!centreOk) {
		var pointCentre = new GLatLng(43.6, 3.88);   // Languedoc-roussillon
		map.setCenter(pointCentre, 8);
	}
}

var gmaps_charger = function() {
    if (GBrowserIsCompatible()) {
        gmaps_message("info", "Chargement de la carte en cours...")
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.addControl(new GScaleControl());
		gmaps_centrerRecherche();
		
        // Les marqueurs
        gmaps_creerMarqueurs();
    }
}

function gmaps_creerMarqueurInfo(point, html, t) {
    var baseIcon = new GIcon();
    baseIcon.iconSize=new GSize(12,20);
    baseIcon.shadowSize=new GSize(20,22);
    baseIcon.iconAnchor=new GPoint(6,20);
    baseIcon.infoWindowAnchor=new GPoint(5,1);
    var couleurMarqueur;
    if (t == "location") {
        couleurMarqueur = "jaune";
    } else if (t == "vente") {
        couleurMarqueur = "vert";
    } else if (t == "locsaison") {
        couleurMarqueur = "orange";
    } else {
        couleurMarqueur = "orange";
    }
    var MonIcone = new GIcon(baseIcon, cheminRacine + 'img/gmaps/marqueur-' + couleurMarqueur + '.png', null, cheminRacine + 'img/gmaps/marqueur-ombre.png');
    
    var marqueur = new GMarker(point, MonIcone);
    GEvent.addListener(
        marqueur,
        "click",
        function () {
            marqueur.openInfoWindowHtml(html);
        }
    );
    return marqueur;
}

var gmaps_creerMarqueurs = function() {
	
	if (!map.getCenter()) {
		// La carte n'est pas encore centrée, temporiser
		setTimeout(gmaps_creerMarqueurs, 500);
		return false;
	}
	
	var t = "tout";
	var typebienIds = "";
	var typelocsaisonIds = "";
	var nbPersonnesIds = "";
	if (document.forms["meForm"]) {
	    var f = document.forms["meForm"];
	    var t = "";
	    
	    if (f.elements["rechlocsaison"] && f.elements["rechlocsaison"].value == "locsaison") {
	        t = "locsaison";
	    } else {
	        if (f.elements["typerech"]) {
	            t = bao_radioValue(f.elements["typerech"]);
	        }
	        if (t == "undefined") {
	            t = "tout";
	        }
	    }
	    if (t == "lienLocsaison") {
	    	t = "locsaison";
	    }
	    if (f.elements["typebien_ids"]) {
	        typebienIds = f.elements["typebien_ids"].value;
	    }
	    if (f.elements["typelocsaison_ids"]) {
	        typelocsaisonIds = f.elements["typelocsaison_ids"].value;
	    }
	    if (f.elements["nbpersonnes_id"]) {
	        nbPersonnesIds = f.elements["nbpersonnes_id"].value;
	    }
	} else if (g_gmapsTable) {
		t = g_gmapsTable;
		if (typeof g_gmapsTypebienIds == 'string') typebienIds = g_gmapsTypebienIds;
	}
    
    // Code pour assurer l'unicité de l'url (=> refresh des données à chaque appel)
    var tag = Math.round((Math.random()*99999)+1);
    
    var url = cheminRacine + "lib/gmapsMarqueurs.php?t=" + t + "&tag=" + tag;
    if (typebienIds != "") {
        url += "&typebienIds=" + typebienIds;
    }
    if (typelocsaisonIds != "") {
        url += "&typelocsaisonIds=" + typelocsaisonIds;
    }
    if (nbPersonnesIds != "") {
        url += "&nbPersonnesIds=" + nbPersonnesIds;
    }
    
    var pointCentre = map.getCenter();
    url += "&latCentre=" + pointCentre.lat();
    url += "&lngCentre=" + pointCentre.lng();
    url += "&idx=" + gloIdxRequete;
    
    oHttpReq.open("GET", encodeURI(url), true);
    oHttpReq.onreadystatechange = gmaps_creerMarqueursRetour;
    oHttpReq.send(null);
    
    if (gloIdxRequete == 0) {
	    // Effacer les marqueurs existants
	    map.clearOverlays();
    }

    return true;
}

function gmaps_creerMarqueursRetour() {
    var item, html, t, id, lat, lng, urlDetail, titre, ville, description, urlVign;
    if (oHttpReq.readyState == 4) {
        if (oHttpReq.status == 200) {
            var r = oHttpReq.responseText;
            //alert(r);

            // Positionner la carte si une localisation est donnée
            //gmaps_centrerRecherche();
    
            if (r != "" && r != "ERREUR") {
                // Construire les nouveaux marqueurs
                gloTextItems = r.split("|");
                
                gmaps_creerMarqueursRecursif();
            } else {
                gmaps_message("effacer", "");
            }
                
        } else {
            // alert("XMLHttpRequest a retourné une erreur ! (status = " + oHttpReq.status + ")");
        }
    }
    return true;
}

var gmaps_creerMarqueursRecursif = function() {
    var item = gloTextItems[gloIdxCur].split(":");
    t = item[0];
    id = item[1];
    lat = item[2];
    lng = item[3];
    html = item[4].replace(/#2PTS#/g, ":");
    
    // Créer le marqueur
    map.addOverlay(gmaps_creerMarqueurInfo(new GLatLng(lat, lng), html, t));
    
    gloIdxCur++;
    //gmaps_message("info", "Chargement de la carte en cours... (req:" + gloIdxRequete + ", marqueur idx:" + gloIdxCur + "/" + gloTextItems.length + ")");
    
    // Récursif
    if (gloIdxCur < gloTextItems.length) {
    	//setTimeout(gmaps_creerMarqueursRecursif, 500);
    	gmaps_creerMarqueursRecursif();
    } else {
        //gmaps_message("effacer", "");
    	gloIdxRequete++;
    	gloIdxCur = 0;
    	gmaps_creerMarqueurs();
    }
}

function gmaps_decharger() {
    GUnload();
}

function gmaps_message(type, msg) {
    var elt = document.getElementById("mapInfo");
    if (type == "info") {
        elt.style.display = "block";
    } else if (type == 'effacer') {
        elt.style.display = "none";
    }
    elt.innerHTML = msg;
}

var map;   // pour l'objet GMap2
var gloTextItems = new Array();
var gloIdxCur = 0;
var gloIdxRequete = 0;

bao_windowOnloadAdd(gmaps_charger);
bao_windowOnunloadAdd(gmaps_decharger);

