// Fonctions appelees par GMap pour beneficier d'un raffraichissement automatique des markers
// Utilise la technologie AJAX
// Copyright: MEDIALIS
// Author: Erwann Gravot
// Date: 2008-12-11

var nice_icon = new Array(30);
var gmarkers = [];

// Fonction qui est appelee au deplacement du point sur le carte et met a jour les geocoordonnees dans deux champs de formulaire
function set_coord_after_dragdrop(name,prefix_id)
{
	map.setCenter(name.getPoint());
	document.getElementById(prefix_id+'_gps_y').value = name.getPoint().lat();
	document.getElementById(prefix_id+'_gps_x').value = name.getPoint().lng();
}

// Fonction qui cree un marqueur et definit le texte d'information associee
function createMarker(point,icon,html) {
	var marker = new GMarker(point,icon);
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(html);
	});
	return marker;
}

// Recentrage et zoom dynamique de la carte
function gmap_set_center(lat,lng,zoom)
{

	map.setCenter(new google.maps.LatLng(lat, lng), zoom);
}

// Fonction recuperant une liste de markers pour les afficher sur la carte
function ajax_add_markers(url, scategory)
{  
	GDownloadUrl(url, function(data) { 
		var xml = GXml.parse(data);    
		var locations = xml.documentElement.getElementsByTagName("location");
    
		markers = [];
		for (var i = 0; i < locations.length; i++) {
      
			markers[i] = createMarker(new GLatLng(locations[i].getAttribute("lat"),locations[i].getAttribute("lng")),nice_icon[locations[i].getAttribute("iconid")],locations[i].getAttribute("name"));
			markers[i].category  = scategory;
			markers[i].db_id = locations[i].getAttribute("id");

      gmarkers.push(markers[i]);
			GEvent.addListener(markers[i], "click", function() {
      	markers[i].openInfoWindowHtml("test");
      });

			//google.maps.Event.addListener(markers[i],"click",function(){this.openInfoWindowHtml(locations[i].getAttribute("name"))});
			map.addOverlay(markers[i]);
		}
		
	});
}

// Fonction appellee des qu'on demande d'afficher les jaccedeurs de proximite
// url: chemin du script a lancer
function gmap_add_near_markers(category, url)
{
    // identifie la position actuelle de la carte
    var bounds = map.getBounds();
    

    var southWest = bounds.getSouthWest();
    var southWestlat = southWest.lat().toString();
    var southWestlng = southWest.lng().toString();

    var northEast = bounds.getNorthEast();
    var northEastlat = northEast.lat().toString();
    var northEastlng = northEast.lng().toString();

    // recupere la liste des markers
    var request = GXmlHttp.create();
    urlString = url + '/lat1/' + southWestlat + '/lng1/' + southWestlng + '/lat2/' + northEastlat + '/lng2/' + northEastlng;   
    ajax_add_markers(urlString, category);
}

// Fonction appellee des que la carte est est deplacee pour mettre a jour les markers en fonction de sa position
// category: member ou place
// url: chemin du script a lancer
// userid: id du jaccedeur affiché
// il est possible de gérer deux categories de markers en simultannées
function gmap_onmove(category1, url1, category2, url2, userid)
{
 
  if (map.getInfoWindow().isHidden())
  {
    // vider le tableau gmarkers
    // var plain non utilisé
    //var plain = document.getElementById('plain');
    var member_near_you = document.getElementById('member_near_you');
    var place_near_you = document.getElementById('place_near_you');

    gmarkers = [];
    map.clearOverlays();
    // si on est sur la page myjaccede et la case "afficher les membres" est coché
    if (member_near_you != null && member_near_you.checked == true)
    {      
      gmap_add_near_markers(category1, url1);    
    }

    //si on est sur la page du guide (pas de case a cocher 'show place' ou sur la page myjaccede avec show place qui est coche, affiche les lieux
    if (member_near_you == null  || (place_near_you != null && place_near_you.checked == true))
    {      
      gmap_add_near_markers(category2, url2);
    }

    if(url1 != null && userid != null)
    {
      gmap_add_near_markers('jaccedeur', url1 + '/jaccedeur/' + userid);
    }
  }
}

// fonction qui redirige selon si checkbox checked ou paspourles jaccedeurs
function check_member(member, url)
{
	if (member.checked) 
	{
		gmap_add_near_markers('member',url);
    }  
	else
	{
		clean_marker('member', url);
    }
}

//fonction qui redirige selon si checkbox checked ou paspourles jaccedeurs
function check_place(place, url)
{
	if (place.checked) 
	{
		gmap_add_near_markers('place',url);
    }  
	else
	{
		clean_marker('place', url);
    }
}

// nettoie les markers d'une certaine category sur la map
function clean_marker(category, url)
{
	for (var i=0; i<gmarkers.length; i++) {
		if (gmarkers[i].category == category) 
		{
			gmarkers[i].hide();
	    }
    }
}