  // vettore dei punti
  var lineaCache = new Array();
  var curtipoLinee ="";
  var curCatLinee ="";
 
  function refreshLinee(categoria, tipo, checked){
	//se raggiungibile, lancio la funzione per nascondere la linea aperta all'avvio dalla get
	try {
		nascondiLineaSingolo();
	} catch (err) {
		
	}
    if (WorkingLinee) return false;
    curtipoLinee = tipo;
	curCatLinee = categoria;
	if (lineaCache[categoria] == null) {
		lineaCache[categoria] = new Array;
	}
  	if(!checked){
  		if (lineaCache[categoria][tipo] != null){
  			// chiudo i pop up
			map.closeInfoWindow();
			// faccio il loop sui linea e li nascondo
		    for (var idPunto in lineaCache[categoria][tipo]) {
				
				lineaCache[categoria][tipo][idPunto].hide();
			}
        }
 	}else{
 		// in fase di caricamento controllo se  non li ho gi
		if (lineaCache[categoria][tipo] == null){
			lineaLoad()
  	 	}else{
  	 		// se li ho uso quelli nell'array
  	 		for (var idPunto in lineaCache[categoria][tipo]) {
  	 			lineaCache[categoria][tipo][idPunto].show();
			}
  		}
  	}

  }
  
  function setZoom(){
  	map.setZoom(zoomLevel);
  }
  
  // caricamento linea
  function lineaLoad() {
   	WorkingLinee = true;
   	ShowLoading();
   	GDownloadUrl(baseurl + "XmlCoords_linee.php?tipo=" + curtipoLinee+"&categoria=" + curCatLinee,loadXMLLinee)

 }

 
 // carica i dati sulla mappa quando arriva lo stream XML

 
function loadXMLLinee(dati) {
	if (dati){                    
		var xml = GXml.parse(dati);
		var linee = xml.documentElement.getElementsByTagName("linea");
		
		for (var i = 0; i < linee.length; i++){
			//AddLineaToCache(linee[i].getAttribute("idGeo"), createLinea(linee[i], linee[i].childNodes[0].nodeValue) )
			AddLineaToCache(linee[i].getAttribute("idGeo"), createLinea(linee[i]))
			//createLinea(linee[i].getAttribute("vertici"));
		}	
	}
	HideLoading();
	WorkingLinee = false;

}

// Creates a marker whose info window displays the letter corresponding
// to the given index.
function createLinea(singleLinea, infotxt) {
	
	appo2 = String(singleLinea.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]))
	}
	
	var colore = "#FF0000";
	if (singleLinea.getAttribute("colore") != "") {
		colore = "#"+singleLinea.getAttribute("colore");
	}
	//var polyline = new GPolyline(latlngs, '#FF0000', 4, 0.8);
	var polyline = new GPolyline(latlngs, colore, 4, 0.8);
	var focusPolyline = function(latlngsClick) {
		if (singleLinea.childNodes[1].nodeValue != "") {
			tabsInfo = [new GInfoWindowTab("Info",singleLinea.childNodes[0].nodeValue),
			new GInfoWindowTab("Dettagli",singleLinea.childNodes[1].nodeValue)]
			map.openInfoWindowTabsHtml(latlngsClick,tabsInfo);
		} else {
			map.openInfoWindowHtml(latlngsClick,singleLinea.childNodes[0].nodeValue);
		}
		map.panTo(latlngsClick);
		return false;
	}
	GEvent.addListener(polyline, 'click', focusPolyline);

	curCatLinee = singleLinea.getAttribute("categoria");
	
	return polyline;
}

// Add current marker to Arrays
function AddLineaToCache(idPunto, linea) { 	
	if (lineaCache[curCatLinee] == null) {
		lineaCache[curCatLinee] = new Array;
	}
	if (lineaCache[curCatLinee][curtipoLinee] == null) {
		lineaCache[curCatLinee][curtipoLinee] = new Array;
	}
	if(lineaCache[curCatLinee][curtipoLinee][idPunto]==null) {
		lineaCache[curCatLinee][curtipoLinee][idPunto]=linea;  
		// se  la priva volta che carico il marker lo piazzo
		map.addOverlay(linea);
	}
}