  // vettore dei punti
  var markerCache = new Array();
  var curtipo ="";
  var curCat ="";
 
  function refreshMarker(categoria, tipo, checked){
	//se raggiungibile, lancio la funzione per nascondere il marker aperto all'avvio dalla get
	try {
		nascondiMarkerSingolo();
	} catch (err) {
		
	}
    if (Working) return false;
    curtipo = tipo;
	curCat = categoria;
	if (markerCache[categoria] == null) {
		markerCache[categoria] = new Array;
	}
  	if(!checked){
  		if (markerCache[categoria][tipo] != null){
			// chiudo i pop up
			map.closeInfoWindow();
			// faccio il loop sui marker e li nascondo
			 
			for (var idPunto in markerCache[categoria][tipo]) {
				markerCache[categoria][tipo][idPunto].hide();
			}
       	}
 	}else{
 		// in fase di caricamento controllo se  non li ho gi
		if (markerCache[categoria][tipo] == null){
			markerLoad()
  	 	}else{
  	 		// se li ho uso quelli nell'array
  	 	    for (var idPunto in markerCache[categoria][tipo]) {
  	 			markerCache[categoria][tipo][idPunto].show();
			}
		}
  	}

  }
  function setZoom(){
  	map.setZoom(zoomLevel);
  }
  
  // caricamento marker
  function markerLoad() {
   	Working = true;
   	ShowLoading();
   	GDownloadUrl(baseurl + "XmlCoords.php?tipo=" + curtipo+"&categoria=" + curCat,loadXML)

 }

 
 // carica i dati sulla mappa quando arriva lo stream XML
function loadXML(dati) {
	if (dati){                    
		var xml = GXml.parse(dati);
		var markers = xml.documentElement.getElementsByTagName("marker");
		
		for (var i = 0; i < markers.length; i++){
			AddMarkerToCache(markers[i].getAttribute("idGeo"), createMarker(markers[i]))
		}	
	}
	HideLoading();
	Working = false;
}

// Creates a marker whose info window displays the letter corresponding
// to the given index.
function createMarker(singleMarker, infotxt) {
//	var point = new GLatLng( parseFloat(singleMarker.getAttribute("lat")),parseFloat(singleMarker.getAttribute("lng")));
	var point = new GLatLng( parseFloat(singleMarker.getAttribute("lng")),parseFloat(singleMarker.getAttribute("lat")));
	var title = singleMarker.getAttribute("tit");
	var icon = new GIcon(baseIcon);
	var marker = null;
	icon.image  = "img/" +  singleMarker.getAttribute("ico") + ".png";
	icon.shadow =  "img/shadow.png";
	
	if(title!=""){ 		 
		// Per mettere i tooltips : 
		marker = new GMarker(point, {icon:icon, title:title});
	}else{
		marker = new GMarker(point, {icon:icon});

	}
	GEvent.addListener(marker, "click", 
		function() {
			//marker.openInfoWindowHtml(singleMarker.childNodes[0].nodeValue);
			//marker.openInfoWindowHtml(singleMarker.childNodes[0].nodeValue);
			//var ciccio[] = GInfoWindowTab ("prova", singleMarker.childNodes[0].nodeValue);
			//marker.openInfoWindowTabsHtml(ciccio);
			if (singleMarker.childNodes[1].nodeValue != "") {
				tabsInfo = [new GInfoWindowTab("Info",singleMarker.childNodes[0].nodeValue),
				new GInfoWindowTab("Dettagli",singleMarker.childNodes[1].nodeValue)]
				marker.openInfoWindowTabsHtml(tabsInfo);
			} else {
				marker.openInfoWindowHtml(singleMarker.childNodes[0].nodeValue);
			}
			
		}
	);
	
	curCat = singleMarker.getAttribute("categoria");
	
	return marker;
}
   
// Add current marker to Arrays
function AddMarkerToCache(idPunto, marker) { 	
	if (markerCache[curCat] == null) {
		markerCache[curCat] = new Array;
	}
	if (markerCache[curCat][curtipo] == null) {
		markerCache[curCat][curtipo] = new Array;
	}
	if(markerCache[curCat][curtipo][idPunto]==null) {
		markerCache[curCat][curtipo][idPunto]=marker;  
		// se  la priva volta che carico il marker lo piazzo
		map.addOverlay(marker);	
	}
}
