  // vettore dei punti
  var poligonoCache = new Array();
  var curtipoPoligoni ="";
  var curCatPoligoni ="";
 
  function refreshPoligoni(categoria, tipo, checked){
	//se raggiungibile, lancio la funzione per nascondere il poligono aperto all'avvio dalla get
	try {
		nascondiPoligonoSingolo();
	} catch (err) {
		
	}
    if (WorkingPoligoni) return false;
    curtipoPoligoni = tipo;
	curCatPoligoni = categoria;
	if (poligonoCache[categoria] == null) {
		poligonoCache[categoria] = new Array;
	}
  	if(!checked){
  		if (poligonoCache[categoria][tipo] != null){
  			// chiudo i pop up
			map.closeInfoWindow();
			// faccio il loop sui poligono e li nascondo
		    for (var idPunto in poligonoCache[categoria][tipo]) {
				
				poligonoCache[categoria][tipo][idPunto].hide();
			}
        }
 	}else{
 		// in fase di caricamento controllo se  non li ho gi
		if (poligonoCache[categoria][tipo] == null){
			poligonoLoad()
  	 	}else{
  	 		// se li ho uso quelli nell'array
  	 		for (var idPunto in poligonoCache[categoria][tipo]) {
  	 			poligonoCache[categoria][tipo][idPunto].show();
			}
  		}
  	}

  }
  function setZoom(){
  	map.setZoom(zoomLevel);
  }
  
  // caricamento poligono
  function poligonoLoad() {
   	WorkingPoligoni = true;
   	ShowLoading();
   	GDownloadUrl(baseurl + "XmlCoords_poligoni.php?tipo=" + curtipoPoligoni+"&categoria=" + curCatPoligoni,loadXMLPoligoni)

 }

 
 // carica i dati sulla mappa quando arriva lo stream XML

 
function loadXMLPoligoni(dati) {
	if (dati){                    
		var xml = GXml.parse(dati);
		var poligoni = xml.documentElement.getElementsByTagName("poligono");
		
		for (var i = 0; i < poligoni.length; i++){
			//AddPoligonoToCache(poligoni[i].getAttribute("idGeo"), createPoligono(poligoni[i], poligoni[i].childNodes[0].nodeValue) )
			AddPoligonoToCache(poligoni[i].getAttribute("idGeo"), createPoligono(poligoni[i]))
			//createPoligono(poligoni[i].getAttribute("vertici"));
		}	
	}
	HideLoading();
	WorkingPoligoni = false;
}

// Creates a marker whose info window displays the letter corresponding
// to the given index.
function createPoligono(singlePoligono, infotxt) {
	
	appo2 = String(singlePoligono.getAttribute("vertici")).substr(1);
	appo3 = String(appo2).substr(0, appo2.length-1);
	appo1 = appo3.split ("),(");
	var latlngs = [];
	for(id = 0; id < appo1.length; id += 1) {
		latlngs.push (new GLatLng(appo1[id].split(",")[1],appo1[id].split(",")[0]))
	}
	//metto il primo elemento in coda per poter chiudere il perimetro del poligono
	var coloreLinea = "#FF0000";
	if (singlePoligono.getAttribute("coloreLinea") != "") {
		coloreLinea = "#"+singlePoligono.getAttribute("coloreLinea");
	}
	var coloreArea = "#0000FF";
	if (singlePoligono.getAttribute("coloreArea") != "") {
		coloreArea = "#"+singlePoligono.getAttribute("coloreArea");
	}
	latlngs.push(latlngs[0]);
	//var polygon = new GPolygon(latlngs,'#FF0000', 3, 1,'#0000FF',0.2);
	var polygon = new GPolygon(latlngs,coloreLinea, 3, 1,coloreArea,0.2);

	var focusPolygon = function(latlngsClick) {
		//map.openInfoWindowHtml(latlngsClick,singlePoligono.childNodes[0].nodeValue);
		if (singlePoligono.childNodes[1].nodeValue != "") {
			tabsInfo = [new GInfoWindowTab("Info",singlePoligono.childNodes[0].nodeValue),
			new GInfoWindowTab("Dettagli",singlePoligono.childNodes[1].nodeValue)]
			map.openInfoWindowTabsHtml(latlngsClick,tabsInfo);
		} else {
			map.openInfoWindowHtml(latlngsClick,singlePoligono.childNodes[0].nodeValue);
		}
		map.panTo(latlngsClick);
		return false;
	}
	GEvent.addListener(polygon, 'click', focusPolygon);
	
	curCatPoligoni = singlePoligono.getAttribute("categoria");
	
	return polygon;
}

// Add current marker to Arrays
function AddPoligonoToCache(idPunto, poligono) { 	
	if (poligonoCache[curCatPoligoni] == null) {
		poligonoCache[curCatPoligoni] = new Array;
	}
	if (poligonoCache[curCatPoligoni][curtipoPoligoni] == null) {
		poligonoCache[curCatPoligoni][curtipoPoligoni] = new Array;
	}
	if(poligonoCache[curCatPoligoni][curtipoPoligoni][idPunto]==null) {
		poligonoCache[curCatPoligoni][curtipoPoligoni][idPunto]=poligono;  
		// se  la priva volta che carico il marker lo piazzo
		map.addOverlay(poligono);
	}
}
