// Variabili globali
//posizione iniziale
var lon=12.51;
var lat=41.9;
var zoom=5;

var print_wait_win = null;	//per stampare

var map; var ciclovia;

var noloop =false;	//vedi attivaAig()

//inizializza le mappe, ritorna con array
function caricaMappe()
{
/*	var metalayer = new OpenLayers.Layer.WMS(
		"OpenLayers WMS",
		"http://labs.metacarta.com/wms/vmap0",
		{layers: 'basic'}
	);	*/
	// create Google Mercator layers
	var gmap = new OpenLayers.Layer.Google(
		"Google Streets",
		{'sphericalMercator': true, numZoomLevels: 22}
	);
	var gsat = new OpenLayers.Layer.Google(
		"Google Satellite",
		{type: G_SATELLITE_MAP, 'sphericalMercator': true, numZoomLevels: 22}
	);
	var ghyb = new OpenLayers.Layer.Google(
		"Google Hybrid",
		{type: G_HYBRID_MAP, 'sphericalMercator': true, numZoomLevels: 22}
	);
	var gter = new OpenLayers.Layer.Google(
		"Google Terrain",
		{type: G_PHYSICAL_MAP, 'sphericalMercator': true, numZoomLevels: 16}	//!!!!!
	);

	// create Virtual Earth layers
/*
	var veroad = new OpenLayers.Layer.VirtualEarth(
		"Virtual Earth Roads",
		{'type': VEMapStyle.Road, 'sphericalMercator': true}
	);
	var veaer = new OpenLayers.Layer.VirtualEarth(
		"Virtual Earth Aerial",
		{'type': VEMapStyle.Aerial, 'sphericalMercator': true}
	);
	var vehyb = new OpenLayers.Layer.VirtualEarth(
		"Virtual Earth Hybrid",
		{'type': VEMapStyle.Hybrid, 'sphericalMercator': true}
	);
*/
/*	// create Yahoo layer
	var yahoo = new OpenLayers.Layer.Yahoo(
		"Yahoo Street",
		{'sphericalMercator': true}
	);
	var yahoosat = new OpenLayers.Layer.Yahoo(
		"Yahoo Satellite",
		{'type': YAHOO_MAP_SAT, 'sphericalMercator': true}
	);
	var yahoohyb = new OpenLayers.Layer.Yahoo(
		"Yahoo Hybrid",
		{'type': YAHOO_MAP_HYB, 'sphericalMercator': true}
	);*/
	// create OAM layer
/*	var oam = new OpenLayers.Layer.XYZ(
		"OpenAerialMap",
		"http://tile.openaerialmap.org/tiles/1.0.0/openaerialmap-900913/${z}/${x}/${y}.png",
		{
			sphericalMercator: true
		}
	);*/
	// create OSM layer
	var osmarender = new OpenLayers.Layer.OSM(
		"OpenStreetMap (Tiles@Home)",
		"http://tah.openstreetmap.org/Tiles/tile/${z}/${x}/${y}.png"
	);
	// create WMS layer
// 	var wms = new OpenLayers.Layer.WMS(
// 		"World Map",
// 		"http://world.freemap.in/tiles/",
// 		{'layers': 'factbook-overlay', 'format':'png'},
// 		{
// 			'opacity': 0.4,
// 			'isBaseLayer': false,'wrapDateLine': true
// 		}
// 	);

	var layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
	var layerCycleMap = new OpenLayers.Layer.OSM.CycleMap("CycleMap");

	return([gter, gmap, gsat, ghyb, /*veroad, veaer, vehyb,*/ layerMapnik, osmarender,layerCycleMap]);
}

function OLhome()
{
	OpenLayers.Lang.setCode('it'); 

	var options = {
	projection: new OpenLayers.Projection("EPSG:900913"),
	displayProjection: new OpenLayers.Projection("EPSG:4326"),
	units: "degree",
	maxResolution: 156543.0339,
	maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34,
						20037508.34, 20037508.34)
	};
		
	map = new OpenLayers.Map('map', options);

	map.addLayers(caricaMappe());

	var cdefaultStyle = new OpenLayers.Style({
  		strokeWidth: 3,
		strokeOpacity: 0.8,
		strokeColor: "#ff0000",
		pointRadius: 3,
		fillColor: "#000000"
	});

	var cselectStyle = new OpenLayers.Style({
  		strokeWidth: 3,
		strokeOpacity: 0.8,
		strokeColor: "#ffff00"
	});

	var cstyleMap = new OpenLayers.StyleMap(
		{
			'default': cdefaultStyle,
			'temporary': cselectStyle,
 			'select': cselectStyle
		}
	);

	clayer = new OpenLayers.Layer.Vector("Ciclovie Bicitalia",
		{
			projection: map.displayProjection,
			transitionEffect: 'resize',
			styleMap: cstyleMap
		}
	);

	map.addLayer(clayer);

	//LayerSwitcher
	map.addControl(new OpenLayers.Control.LayerSwitcher());

	var highlightCtrl = new OpenLayers.Control.SelectFeature(clayer, {
		hover: true,
		highlightOnly: true,
		multiple: false,
// 		geometryTypes: ["OpenLayers.Geometry.LineString"],
// 		renderIntent: "temporary",
		popupFeature: null,
		popupDelay: function(f)
		{
			//popup
			var testoA='';
			var testoB='';
			var testoC='';
			var testoD='';
			var lunghezza=0;

			lunghezza = f.feature.attributes.lenciclovia;
			testoA = '<h3 class="popupTratto header">' + f.feature.attributes.name + '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + lunghezza + ' km</h3>';
			testoD = '<ul class="popupTratto"><li><strong>Da</strong> ' + f.feature.attributes.start + '</li><li><strong>a</strong> ' + f.feature.attributes.end + '</li></ul>';
			popup = new OpenLayers.Popup("ciclovia",
							f.feature.geometry.getBounds().getCenterLonLat(),
							null,
							'<div class="popupTratto">' +  testoA + testoB + '</div>' + testoC + testoD,
							null,
							true);
			popup.autoSize=true;
			popup.panMapIfOutOfView=true;
			f.feature.popup = popup;
			map.addPopup(popup);
		},
		eventListeners:
		{
			featurehighlighted: function(f)
			{
				//popup ritardato
				var tmp = this.popupDelay;
				this.timer=setTimeout(function(){tmp(f);}, 1000);
			},
			featureunhighlighted: function(f)
			{
				clearTimeout(this.timer);
				//rimuove il popup
				if (f.feature.popup)
				{
					map.removePopup(f.feature.popup);
					f.feature.popup.destroy();
					f.feature.popup = null;
				}
			}
		}
	});

	var selectCtrl = new OpenLayers.Control.SelectFeature(clayer,
		{clickout: true}
	);

 	map.addControl(highlightCtrl);
 	map.addControl(selectCtrl);

	highlightCtrl.activate();
	selectCtrl.activate();

//ciclovie progetto
	try
	{
		var inobj = new OpenLayers.Format.GML();
		for (var i=0; i< phptracksprog.length; i++)
		{
			if (phptracksprog[i].Cycleway.gpstrack)
			{
				var vlf= phptracksprog[i].Cycleway.gpstrack.evalJSON();
				for (var key in vlf)
				{
					var f = inobj.read(vlf[key]);
					for (j=0; j<f.length;j++)
					{
						f[j].attributes.ciclovia=true;
						f[j].attributes.citta="";
						f[j].attributes.cycleway_id = phptracksprog[i].Cycleway.id;
						f[j].attributes.name = phptracksprog[i].Cycleway.name;
						f[j].attributes.lenciclovia = phptracksprog[i].Cycleway.length;
						f[j].attributes.pezzo=j;
						f[j].attributes.start = phptracksprog[i].Cycleway.start;
						f[j].attributes.end = phptracksprog[i].Cycleway.end;
					}
					clayer.addFeatures(f);
				}
			}
		}
	} catch(err) {
// 		alert('Errore caricando le tracce: ' + err);
		console.log('Errore caricando le tracce: ' + err);
	}

	var lonLat = new OpenLayers.LonLat(lon, lat).transform(map.displayProjection, map.projection);
 	map.setCenter(lonLat, zoom);		

} /*olhome*/

function OLreteCDA()
{
	//cambia centro della mappa e zoom
	lat = 45.185; 
	lon = 9.506;
	zoom = 8;
	OLrete(false);
}

function OLrete(homepage)
{
	var ie = getInternetExplorerVersion();
	if (ie < 9 && ie!=-1)	
	{
		$('map').hide();	//nasconde la mappa
		$$('div.spinning').each( function(el)
			{
				el.hide();	//nasconde lo spin
			}
		);
		return;
	} else {
		$$('img.logoie').each( function(el)
			{
				el.hide();	//nasconde lo spin
			}
		);
	}

	OpenLayers.Lang.setCode('it'); 

	var options = {
	projection: new OpenLayers.Projection("EPSG:900913"),
	displayProjection: new OpenLayers.Projection("EPSG:4326"),
	units: "degree",
	maxResolution: 156543.0339,
	maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34,
						20037508.34, 20037508.34)
	};
		
	map = new OpenLayers.Map('map', options);

	map.addLayers(caricaMappe());


	var cdefaultStyle = new OpenLayers.Style({
  		strokeWidth: 3,
		strokeOpacity: 0.8,
		strokeColor: "#FF0000",
		pointRadius: 3,
		fillColor: "#000000"/*,
strokeDashstyle: "dash"*/
	});

	var cselectStyle = new OpenLayers.Style({
  		strokeWidth: 3,
		strokeOpacity: 0.8,
		strokeColor: "#ffff00"
	});

	var cstyleMap = new OpenLayers.StyleMap(
		{
			'default': cdefaultStyle,
			'temporary': cselectStyle,
 			'select': cselectStyle
		}
	);

	var vlayer = new OpenLayers.Layer.Vector("Ciclovie Bicitalia",
		{
			projection: map.displayProjection,
			transitionEffect: 'resize',
			styleMap: cstyleMap
		}
	);

	map.addLayer(vlayer);

	var rdefaultStyle = new OpenLayers.Style({
  		strokeWidth: 3,
		strokeOpacity: 0.8,
		strokeColor: "#FF0000",
		pointRadius: 3,
		fillColor: "#000000"/*,
strokeDashstyle: "dash"*/
	});

	var rstyleMap = new OpenLayers.StyleMap(
		{
			'default': rdefaultStyle,
			'temporary': cselectStyle,
 			'select': cselectStyle
		}
	);

	var clayer = new OpenLayers.Layer.Vector("Ciclovie Bicitalia non rilevate",
		{
			projection: map.displayProjection,
			transitionEffect: 'resize',
			styleMap: rstyleMap
		}
	);

	map.addLayer(clayer);
	clayer.setOpacity(0.5);

	//LayerSwitcher
	map.addControl(new OpenLayers.Control.LayerSwitcher());


	var highlightCtrl = new OpenLayers.Control.SelectFeature([clayer, vlayer], {
		id: 'hilite_ciclovia',	//serve in overTraccia
		hover: true,
		highlightOnly: true,
		multiple: false,
		eventListeners:
		{
			featurehighlighted: function(f)
			{
/*				if (!homepage)
				{	
					$('ciclovia_'+f.feature.attributes.cycleway_id).addClassName('evidenzia');
					$('ciclovia_'+f.feature.attributes.cycleway_id).next('dd').addClassName('evidenzia');
				}*/
				selezionaTracce(vlayer, clayer, f, this);
			},
			featureunhighlighted: function(f)
			{
/*				if (!homepage)
				{	
					$('ciclovia_'+f.feature.attributes.cycleway_id).removeClassName('evidenzia');
					$('ciclovia_'+f.feature.attributes.cycleway_id).next('dd').removeClassName('evidenzia');
				}*/
				deselezionaTracce(vlayer, clayer, f, this);
			}
		}
	});
 	map.addControl(highlightCtrl);
	highlightCtrl.activate();

	var selectCtrl = new OpenLayers.Control.SelectFeature([vlayer, clayer],
		{clickout: true}
	);
	map.addControl(selectCtrl);
	selectCtrl.activate();

	vlayer.events.on({
		"featureselected": function(e) {	
			//carica la ciclovia cliccata
			var percorso='';
			percorso = trovaPath('networks', '/cycleways/ciclovia/' + e.feature.attributes.cycleway_id);
			location.href=percorso;		
		}
	});

	clayer.events.on({
		"featureselected": function(e) {	
			//carica la ciclovia cliccata
			var percorso='';
			percorso = trovaPath('networks', '/cycleways/ciclovia/' + e.feature.attributes.cycleway_id);
			location.href=percorso;		
		}
	});


//ciclovie progetto
	try
	{
		var inobj = new OpenLayers.Format.GML();
		for (var i=0; i< phptracksprog.length; i++)
		{
			if (phptracksprog[i].Cycleway.gpstrack)
			{
				var vlf= phptracksprog[i].Cycleway.gpstrack.evalJSON();
				for (var key in vlf)
				{
					var f = inobj.read(vlf[key]);
					for (j=0; j<f.length;j++)
					{
						f[j].attributes.ciclovia=true;
						f[j].attributes.citta="";
						f[j].attributes.cycleway_id = phptracksprog[i].Cycleway.id;
						f[j].attributes.name = phptracksprog[i].Cycleway.name;
						f[j].attributes.lenciclovia = phptracksprog[i].Cycleway.length;
						f[j].attributes.pezzo=j;
						f[j].attributes.start = phptracksprog[i].Cycleway.start;
						f[j].attributes.end = phptracksprog[i].Cycleway.end;
					}
					clayer.addFeatures(f);
				}
			}
		}
	} catch(err) {
// 		alert('Errore caricando le tracce: ' + err);
		console.log('Errore caricando le tracce: ' + err);
	}

if (false)
{
	try
	{
		var inobj = new OpenLayers.Format.GML();
		for (var i=0; i< phptracks.length; i++)
		{
			if (phptracks[i].Segment.gpstrack)
			{
				var cicloev = new Array();
				for (j=0; j<phptracks[i].Ev.length;j++)
				{	
					cicloev.push(phptracks[i].Ev[j].shortname);
				}

				var vlf= phptracks[i].Segment.gpstrack.evalJSON();
				for (var key in vlf)
				{	
					var f = inobj.read(vlf[key]);
					if (cicloev.length>0)
					{
						var copia = new Array();
						for (j=0; j<f.length;j++)
						{
							var tmpf = new OpenLayers.Feature.Vector(f[j].geometry.clone());
							tmpf.attributes.ev=true;
							copia.push(tmpf);
						}
						clayer.addFeatures(copia);
					}

					for (j=0; j<f.length;j++)
					{
						f[j].attributes.ciclovia=false;
						f[j].attributes.segment_id = phptracks[i].Segment.id;
						f[j].attributes.name = phptracks[i].Segment.name;
						f[j].attributes.alternative_name = phptracks[i].Segment.alternative_name;
						f[j].attributes.start = phptracks[i].Segment.start;
						f[j].attributes.end = phptracks[i].Segment.end;
						f[j].attributes.paving_name = phptracks[i].Paving.name;
						f[j].attributes.road_name = phptracks[i].Road.name;
						f[j].attributes.length2 = phptracks[i].Segment.length2;
						f[j].attributes.cycleway_id = phptracks[i].Segment.cycleway_id;
						f[j].attributes.cycleway = phptracks[i].Cycleway.name;
						f[j].attributes.part = phptracks[i].Part.name;
						f[j].attributes.province = phptracks[i].Province.name;
						f[j].attributes.lenciclovia=phptracks[i].Cycleway.length;
						if (cicloev.length>0)
						{
							f[j].attributes.evNames = cicloev.join(', ');
						}
					}
					clayer.addFeatures(f);
				}
			}
		}
	} catch(err) {
		alert('Errore caricando le tracce: ' + err);
	}
}

	if (!homepage)
	{
		$$('div.olMap')[0].setStyle({height: ($('sx2').getHeight())+'px'});
	}

	var lonLat = new OpenLayers.LonLat(lon, lat).transform(map.displayProjection, map.projection);
 	map.setCenter(lonLat, zoom);	

// 	overTraccia();	//abilita l'over sul nome delle ciclovie	

	if (homepage)
	{
		$("sx").writeAttribute($("centro").getDimensions());
		$("dx").writeAttribute($("centro").getDimensions());
	}
	
	caricaTracceAjax(vlayer);
	

} /*olrete*/


function selezionaTracce(vlayer, clayer, f, ctrl)
{
	if (f.feature.attributes.hl)
	{
		return;
	}

	//trova tutte le tracce della stessa ciclovia
	var campo1='';
	var campo2='';
	if (f.feature.attributes.ciclovia)
	{
		campo1='cycleway_id';
		campo2='pezzo';
		for (var i=0; i<clayer.features.length; i++)
		{
			if (clayer.features[i].attributes[campo1]==f.feature.attributes[campo1] && clayer.features[i].attributes[campo2]!=f.feature.attributes[campo2])
			{	
				clayer.features[i].attributes.hl=true;
				ctrl.highlight(clayer.features[i]);
			}
		}				
	} else {
		campo1='cycleway_id';
		campo2='segment_id';				
		for (var i=0; i<vlayer.features.length; i++)
		{
		//	console.log(vlayer.features[i].attributes[campo1], f.feature.attributes[campo1]);
			if (vlayer.features[i].attributes[campo1]==f.feature.attributes[campo1] && vlayer.features[i].attributes[campo2]!=f.feature.attributes[campo2])
			{	
				vlayer.features[i].attributes.hl=true;
				ctrl.highlight(vlayer.features[i]);
			}
		}				
	}
	f.feature.attributes.hl=true;

}

function deselezionaTracce(vlayer, clayer, f, ctrl)
{
	if (!f.feature.attributes.hl)
	{
		return;
	}
	if (f.feature.attributes.ciclovia)
	{
		for (var i=0; i<clayer.features.length; i++)
		{
			if (clayer.features[i].attributes.cycleway_id==f.feature.attributes.cycleway_id && clayer.features[i].attributes.pezzo!=f.feature.attributes.pezzo)
			{	
				clayer.features[i].attributes.hl=false;
				ctrl.unhighlight(clayer.features[i]);
			}
		}				
	} else {
		for (var i=0; i<vlayer.features.length; i++)
		{
			if (vlayer.features[i].attributes.cycleway_id==f.feature.attributes.cycleway_id && vlayer.features[i].attributes.segment_id!=f.feature.attributes.segment_id)
			{	
				vlayer.features[i].attributes.hl=false;
				ctrl.unhighlight(vlayer.features[i]);
			}
		}				
	}
	f.feature.attributes.hl=false;
}


function overTraccia()
{
	$$('dt.ciclovie').each( function(el)
	{
		Event.observe($(el),'mouseover', function(event)
		{
			//this contiene id="ciclovia_57" 
			if (this.id.startsWith('ciclovia_'))
			{
				var id = this.id.substr(9);
				for (var i=0; i<map.layers.length; i++)
				{
					if (map.layers[i].name=="Ciclovie Bicitalia")
					{
						var layer = map.layers[i];
						//prima deseleziona tutte le tracce
						//trova il select control 
						var sc = map.getControlsBy('id', 'hilite_ciclovia');		
						//cerca nel layer 
						for (var j=0; j < layer.features.length; j++)
						{
							if (layer.features[j].attributes.cycleway_id==id)
							{
								if (sc.length==1)	//si suppone ce ne sia uno solo
								{	
									sc[0].highlight(layer.features[j]);
								}
							} else
							{
								sc[0].unhighlight(layer.features[j]);
							}
						}
						break;
					}
				}
			}
			$(this).addClassName('evidenzia');
			$(this).next('dd').addClassName('evidenzia');

		});
		Event.observe($(el),'mouseout', function(event)
		{
			for (var i=0; i<map.layers.length; i++)
			{
				if (map.layers[i].name=="Ciclovie Bicitalia")
				{
					var layer = map.layers[i];
					//prima deseleziona tutte le tracce
					//trova il select control 
					var sc = map.getControlsBy('id', 'hilite_ciclovia');		
					//cerca nel layer 
					for (var j=0; j < layer.features.length; j++)
					{
						sc[0].unhighlight(layer.features[j]);
					}
				}
			}
			$(this).removeClassName('evidenzia');
			$(this).next('dd').removeClassName('evidenzia');

		});	
	});
}

function adb()
{
	var a = document.getElementsByName('adb')[0];
	return a.checked;
}


function OLciclovia(stampa)
{
	if (!stampa)
	{ 
		stampa = false;
	}

	//disegnaPendenza();
	
	OpenLayers.Lang.setCode('it'); 

	var options = {
		projection: new OpenLayers.Projection("EPSG:900913"),
		displayProjection: new OpenLayers.Projection("EPSG:4326"),
		units: "degree",
		maxResolution: 156543.0339,
		maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34,
							20037508.34, 20037508.34),
		numZoomLevels: 22,
		eventListeners: {
			'movestart': function(e) {
				var a = e;
			},
			'zoomend': function(e) {
				var a = e;
			}
		}
	};
		
	map = new OpenLayers.Map('map', options);

	map.addLayers(caricaMappe());

// 	var cdefaultStyle = new OpenLayers.Style({
//   		strokeWidth: 3,
// 		strokeOpacity: 0.8,
// 		strokeColor: "#ff0000",
// 		pointRadius: 3,
// 		fillColor: "#000000"
// 	});

	var cdefaultStyle=new OpenLayers.Style(
	OpenLayers.Util.applyDefaults(
	{
		strokeWidth: 3,
		strokeOpacity: 0.8,
		strokeColor: "${colore}",
		pointRadius: 0,
/*		fillColor: "#000000",*/
		externalGraphic: "${getMarker}",
// 		stroke: false,
		graphicWidth: 24,
		graphicHeight: 22,
		graphicYOffset: -11, 
		graphicOpacity: 1,
		display: "${getDisplay}",
		graphicZIndex: "${getGraphicZIndex}"
	}, OpenLayers.Feature.Vector.style["default"]),
	{
		context: 
		{
			colore: function(feature) //importante l'ordine! Stesso presente nello stile
			{
				var col=0;
				switch (feature.attributes.colore)
				{
					case 1:	//variante
						col = "#0081FF";
						break;
					case 2:	//alternativa
						col = "#990099";
						break;
					default:	//ciclovia (0)
						col = "#db0000";
				}
				return col;
			},
			getStroke: function(feature)
			{
				var tmpret = 3;
				if (feature.attributes.pericolo)
				{
					tmpret = 0;
				}
				return tmpret;
			},
			getMarker: function(feature)
			{
				var tmpret = '';
				if (feature.attributes.pericolo)
				{
					if (feature.layer.map.getZoom()>11)	//vedi anche getDisplay (circa 1/100000)
					{
						tmpret = base + "img/OL/pericolo.png";
					}
				}/* else if (feature.attributes.alternative_name) {
					if (feature.layer.map.getZoom()>11)	//vedi anche getDisplay (circa 1/100000)
					{
						tmpret = base + "img/OL/variante.png";
					}			
				}*/
				return tmpret;
			},
			getDisplay: function(feature)
			{
				var tmpret='';
		// 		if (feature.attributes.pericolo || feature.attributes.alternative_name)
				if (feature.attributes.pericolo)
				{
					if (feature.layer.map.getZoom()<=11) //vedi anche getMarker (circa 1/100000)
					{
						tmpret = 'none';
					}
				} 
				return tmpret;
			},
			getGraphicZIndex: function(feature)
			{
				var tmpret=1;	//default per tratto "normale"
				if (feature.attributes.ev)
				{
					tmpret = 0;
				}		
				if (feature.attributes.pericolo)	//deve prevalere su ev
				{
					tmpret = 2;
				}
				return tmpret;
			}
		}
	});

	var cselectStyle = new OpenLayers.Style({
  		strokeWidth: 5,
		strokeOpacity: 0.8,
		strokeColor: "#00ff00"
	});

	var cstyleMap = new OpenLayers.StyleMap(
		{
			'default': cdefaultStyle,
			'temporary': cselectStyle,
 			'select': cselectStyle
			//strokeColor: '${Road.key_color}'  //???
		}
	);

	clayer = new OpenLayers.Layer.Vector("Ciclovie Bicitalia",
		{
			projection: map.displayProjection,
			transitionEffect: 'resize',
			styleMap: cstyleMap
		//	strategies: [strategy]
		}
	);

	map.addLayer(clayer);

	try
	{
		ciclovia = [];
		var colore = 0;	/*	0 = ciclovia,  1 = variante, 2 = alternativa*/
		var inobj = new OpenLayers.Format.GML();
		for (var i=0; i< phptracks.length; i++)
		{
			if (phptracks[i].Segment.gpstrack)
			{
				colore = (phptracks[i].Cycleway.parent_id===null) ? 0 : 1;
				if (phptracks[i].Segment.alternative_id!=="148")
				{
					colore=2;
				}
				var cicloev = new Array();
				for (j=0; j<phptracks[i].Ev.length;j++)
				{	
					cicloev.push(phptracks[i].Ev[j].shortname);
				}

				var vlf= phptracks[i].Segment.gpstrack.evalJSON();
				for (var key in vlf)
				{	
					var f = inobj.read(vlf[key]);
					if (cicloev.length>0)
					{
						var copia = new Array();
						for (j=0; j<f.length;j++)
						{
							var tmpf = new OpenLayers.Feature.Vector(f[j].geometry.clone());
							tmpf.attributes.ev=true;
							copia.push(tmpf);
						}
						clayer.addFeatures(copia);
					}

					for (j=f.length-1; j>=0; j--)
					{
						f[j].attributes.ciclovia=false;
						f[j].attributes.segment_id = phptracks[i].Segment.id;
						f[j].attributes.name = phptracks[i].Segment.name;
						f[j].attributes.alternative_name = phptracks[i].Segment.alternative_name;
						f[j].attributes.start = phptracks[i].Segment.start;
						f[j].attributes.end = phptracks[i].Segment.end;
						f[j].attributes.paving_name = phptracks[i].Paving.name;
						f[j].attributes.road_name = phptracks[i].Road.name;
						f[j].attributes.length2 = phptracks[i].Segment.length2;
						f[j].attributes.cycleway_id = phptracks[i].Segment.cycleway_id;
						f[j].attributes.cycleway = phptracks[i].Cycleway.name;
						f[j].attributes.part = phptracks[i].Part.name;
						f[j].attributes.part_id = phptracks[i].Part.id;
						f[j].attributes.province = phptracks[i].Province.name;
						f[j].attributes.province_id = phptracks[i].Province.id;
						f[j].attributes.lenciclovia=phptracks[i].Cycleway.length;
						f[j].attributes.colore=colore;
						if (cicloev.length>0)
						{
							f[j].attributes.evNames = cicloev.join(', ');
						}
						ciclovia.push(f[j].geometry);
						if (f[j].geometry.CLASS_NAME=="OpenLayers.Geometry.Point")
						{
// 							f.splice(j,1);	//da sistemare 
						}
						
					}
					clayer.addFeatures(f);
				}
			}
		}
	} catch(err) {
		alert('Errore caricando le tracce: ' + err);
	}

//  var cl = new OpenLayers.Geometry.Collection(ciclovia);
//  var punto = new OpenLayers.Geometry.Point(100000.0, 100000.0);
// 	console.log(cl.distanceTo(punto));

	vlayer = new OpenLayers.Layer.Vector("Altre ciclovie Bicitalia",
		{
			projection: map.displayProjection,
			transitionEffect: 'resize',
			styleMap: cstyleMap
		//	strategies: [strategy]
		}
	);

	map.addLayer(vlayer);
	vlayer.setOpacity(0.5);

	if (!stampa)
	{
		var hoverCiclovia = new OpenLayers.Control.SelectFeature(clayer, 
		{
			hover: true,
			highlightOnly: true,
			multiple: false,
			id: "hoverciclovia"
		});
		map.addControl(hoverCiclovia);
		hoverCiclovia.activate();
	
		var selectCiclovia = new OpenLayers.Control.SelectFeature(clayer, 
		{
			hover: false,
			multiple: false,
			onSelect: function(f)
				{
					mostraTratto(f.attributes.segment_id);
				}
/*			eventListeners:
			{
				featurehighlighted: function(f)
				{
					mostraTratto(f.feature.attributes.segment_id);
				}
			}*/,
			id: "selectciclovia"
		});
		map.addControl(selectCiclovia);
		selectCiclovia.activate();

		//albergabici
		var percorso='';
		var j=0;
		var folder=location.href.split('/');
		for (i=0;i<folder.length;i++)
		{
			if (folder[i]=='ciclovia')	//!!!!!!!!!!!
			{
				break;
			}
			j++;
		}
	
		percorso=folder.slice(0,j-1).join('/')+'/P1s/altriPoi' ;
		var ciclovia = folder.slice(j+1);	//usato piu' sotto da caricatracceajax
		
		var strategy1 = new OpenLayers.Strategy.Cluster({distance: 15, threshold: 2});
		var strategy2 = new OpenLayers.Strategy.BBOX({resFactor: 1.1});
		var p2layer = new OpenLayers.Layer.Vector("Poi", {
			strategies: [strategy1, strategy2],
			protocol: new OpenLayers.Protocol.HTTP({
				url: percorso,
				params: {
					'livello': "all",
					'id': folder.slice(j+1)
				},
				format: new OpenLayers.Format.GML()
			}),
			styleMap: getStileMapPoi(),
			visibility: false,
			displayInLayerSwitcher: false
		});
		map.addLayer(p2layer);
	
		percorso=folder.slice(0,j-1).join('/')+'/Hotels/altriPoi';
	
		var strategy3 = new OpenLayers.Strategy.Cluster({distance: 30, threshold: 2});
		var strategy4 = new OpenLayers.Strategy.BBOX({resFactor: 1.1});
		var p3layer = new OpenLayers.Layer.Vector("Albergabici", {
			strategies: [strategy3, strategy4],
			protocol: new OpenLayers.Protocol.HTTP({
				url: percorso,
				params: {
					'livello': folder.slice(j-1,j),
					'id': folder.slice(j+1),
					'adb': adb()
				},
				format: new OpenLayers.Format.GeoJSON()
			}),
			styleMap: getStileMapPoi(),
			visibility: false,
			displayInLayerSwitcher: false,
			eventListeners:
			{
				'loadstart': function(evt)
				{
				},
				'loadend': function(evt)
				{
	/*				var a = tree.getCheckedBranches();
					a.invoke('setIcons',"page.gif"); */
				}
			}
		});
		map.addLayer(p3layer);
	
//AIG

/*		var aigdefaultStyle = new OpenLayers.Style({
				externalGraphic: "${icona}",
				pointRadius: 10,
				graphicWidth: 32,
				graphicHeight: 31,
				graphicXOffset: -16,
				graphicYOffset: -31,
				graphicOpacity: 1
		});*/
		var aigdefaultStyle=new OpenLayers.Style(
		OpenLayers.Util.applyDefaults(
		{
			externalGraphic: "${getMarker}",
					pointRadius: 10,
					graphicWidth: 32,
					graphicHeight: 31,
					graphicXOffset: -16,
					graphicYOffset: -31,
					graphicOpacity: 1
	
		}, OpenLayers.Feature.Vector.style["default"]),
		{
			context: 
			{
				getMarker: function(feature) //importante l'ordine! Stesso presente nello stile
				{
					var icona;
					if (feature.cluster)
					{
						icona = "aig_gruppo.png";
					} else {
						icona = "aig.png";						
					}
					return base + "img/OL/" + icona;
				}
			}
		});
	
		var aigstyleMap = new OpenLayers.StyleMap(
			{
				'default': aigdefaultStyle,
				'temporary': aigdefaultStyle,
				'select': aigdefaultStyle
			}
		);

		percorso = trovaPath('cycleways', '/albe_aigs/ostelli/');

		var strategy5 = new OpenLayers.Strategy.Cluster({distance: 30, threshold: 2});
		var strategy6 = new OpenLayers.Strategy.BBOX({resFactor: 1.1});
		var p4layer = new OpenLayers.Layer.Vector("AIG", {
			strategies: [strategy5, strategy6],
			protocol: new OpenLayers.Protocol.HTTP({
				url: percorso,
				params: {
					'livello': folder.slice(j-1,j),
					'id': folder.slice(j+1)
				},
				format: new OpenLayers.Format.GeoJSON()
			}),
			styleMap: aigstyleMap,
			visibility: false,
			displayInLayerSwitcher: false,
			eventListeners:
			{
				'loadstart': function(evt)
				{
				},
				'loadend': function(evt)
				{
	/*				var a = tree.getCheckedBranches();
					a.invoke('setIcons',"page.gif"); */
				}
			}
		});
		map.addLayer(p4layer);
	
	
		var overAlbergo = new OpenLayers.Control.SelectFeature(p3layer, 
		{
			hover: true,
			highlightOnly: true,
			multiple: false,
			popupFeature: null,
			popupDelay: function(f)
			{
				if (f.feature.popup)
				{
					map.removePopup(f.feature.popup);
					f.feature.popup.destroy();
					f.feature.popup = null;
				}
			},
			eventListeners:
			{
				featurehighlighted: function(f)
				{
					if (f.feature.attributes.banner)	
					{
						popup = new OpenLayers.Popup("Albergabici",
							f.feature.geometry.getBounds().getCenterLonLat(),
							null,
							bannerRapido(f.feature),
							false,
							null
						);
						popup.autoSize=true;
						popup.panMapIfOutOfView=true;
	// 					popup.keepInMap=true;
						map.addPopup(popup);
						if (f.feature.popup)
						{
							map.removePopup(f.feature.popup);
							f.feature.popup.destroy();
							f.feature.popup = null;
						}
						if (this.popupFeature)
						{
							if (this.popupFeature.popup)
							{
								map.removePopup(this.popupFeature.popup);
								this.popupFeature.popup.destroy();
								this.popupFeature.popup=null;
							}
						}
						f.feature.popup=popup;
						this.popupFeature = f.feature;	
						//cancellazione popup ritardata
						var tmp = this.popupDelay;
						this.timer=setTimeout(function(){tmp(f);}, 5000);
					}
				},
				featureunhighlighted: function(f)
				{
					if (f.feature.popup)
					{
					//cancellazione popup ritardata
					var tmp = this.popupDelay;
					this.timer=setTimeout(function(){tmp(f);}, 5000);
					}
				}
			},
			id: 'hoveralbergabici'
		});
	
		map.addControl(overAlbergo);
		overAlbergo.activate();
	
		var selectAlbergo = new OpenLayers.Control.SelectFeature([p3layer, p4layer], 
		{
			hover: false,
			highlightOnly: true,
			multiple: false,
			popupFeature: null,
			popupResponse: function(response)
			{
				popup = new OpenLayers.Popup.FramedCloud("Albergabici",
					this.popupFeature.geometry.getBounds().getCenterLonLat(),
					null,
					response.responseText,
					null,
					true,
					null
				);
				popup.autoSize=true;
				map.addPopup(popup);
				this.popupFeature = null;
	// 			this.popupFeature.popup = popup;					
	// 			if (this.popupFeature.popup)
	// 			{
	// 				//this.unselect(this.popupFeature);
	// 				map.removePopup(this.popupFeature.popup);
	// 				this.popupFeature.popup.destroy();
	// 				this.popupFeature = null;
	// 			}
	
			},
			popupError: function(e)
			{
				alert('errore');
			},
			eventListeners:
			{
				featurehighlighted: function(f)
				{
					var testo="";
					if (f.feature.cluster)
					{					
						if (f.feature.cluster[0].attributes.aig)
						{
							popup = new OpenLayers.Popup.FramedCloud("Albergabici",
								f.feature.geometry.getBounds().getCenterLonLat(),
								null,
								"<p>Ingrandire la mappa per visualizzare i dettagli di questi ostelli</p>",
								null,
								true,
								null);
							popup.autoSize=true;
							map.addPopup(popup);							
							return true;
						}

						if (Object.isHash(f.feature.attributes.filtro))	//molte strutture nel cluster
						{
							if (f.feature.attributes.banner)	
							{
								//banner + elenco
								testo = bannerTemplate(f.feature);
							}
							testo += elencoTemplate(f.feature); //elenco
						} else {	//una sola struttura nel cluster
							if (f.feature.attributes.banner)	
							{
								//banner
								testo = bannerTemplate(f.feature);
							} else {
								//download f.feature.attributes.filtro (contiene l'id)
								f.feature.attributes.id = f.feature.attributes.filtro;
							}					
						}
					} else {
						if (f.feature.attributes.banner)	
						{
							//banner
							testo = bannerTemplate(f.feature);
						} else {
							//download f.feature.attributes.id 
						}										
					}
					if (testo.length>0)
					{
						popup = new OpenLayers.Popup.FramedCloud("Albergabici",
										f.feature.geometry.getBounds().getCenterLonLat(),
										null,
										testo,
										null,
										true,
										null);
						popup.autoSize=true;
						map.addPopup(popup);
	/*					if (this.popupFeature)
						{
							if (this.popupFeature.popup)
							{
								//this.unselect(this.popupFeature);
								map.removePopup(this.popupFeature.popup);
								this.popupFeature.popup.destroy();
							}
						}
						f.feature.popup = popup;
						this.popupFeature = f.feature;*/
					}  else {
						var vista='';
						var livello = null;
						if (f.feature.attributes.aig)
						{
							vista = '/AlbeAigs/popupPoi/'
						} else {
							vista = '/Hotels/popupPoi/';
							livello = f.feature.attributes.livello;
						}
						var percorso = trovaPath('cycleways', vista + f.feature.attributes.id);

						
						if (this.popupFeature)
						{
							if (this.popupFeature.popup)
							{
								map.removePopup(this.popupFeature.popup);
								this.popupFeature.popup.destroy();
								this.popupFeature.popup=null;
							}
						}
						this.popupFeature = f.feature;
						OpenLayers.loadURL(percorso, livello, selectAlbergo, selectAlbergo.popupResponse, selectAlbergo.popupError);
					}
					this.unselect(f.feature);
				},
				featureunhighlighted: function(f)
				{
	/*				if (f.feature.popup)
					{
						map.removePopup(f.feature.popup);
						f.feature.popup.destroy();
						f.feature.popup = null;
					}*/
				}
			},
			id: "selectalbergabici"
		});
	
		map.addControl(selectAlbergo);
		selectAlbergo.activate();
	
		var selectPoi = new OpenLayers.Control.SelectFeature(p2layer, 
		{
			hover: false,
			highlightOnly: true,
			multiple: false,
			eventListeners:
			{
				featurehighlighted: function(f)
				{
					mostraPoi(f.feature.attributes.id);
				}
			},
			id: "selectpoi",
			displayInLayerSwitcher: false
		});
	
		map.addControl(selectPoi);
// 		selectPoi.activate();		
		
	}	//stampa

	//LayerSwitcher
	map.addControl(new OpenLayers.Control.LayerSwitcher());

	if (stampa)
	{
		$$('div.olMap')[0].setStyle({height: (document.viewport.getHeight())+'px'});
	} else {
// 		$$('div.olMap')[0].setStyle({height: ($('sx2').getHeight())+'px'});		
	}
/*	var lonLat = new OpenLayers.LonLat(lon, lat).transform(map.displayProjection, map.projection);
 	map.setCenter(lonLat, zoom);	*/
	if (clayer.getDataExtent()!==null)
	{
		map.zoomToExtent(clayer.getDataExtent());
	} else {
		var lonLat = new OpenLayers.LonLat(lon, lat).transform(map.displayProjection, map.projection);
		map.setCenter(lonLat, zoom);		
	}
	if (stampa && false)
	{
// 		var l = map.getLayerIndex(clayer);
		map.setLayerIndex(clayer, map.getNumLayers()-1);
	}
	
	caricaTracceAjax(vlayer, ciclovia);
	
} /*fine OLCiclovia*/

//prepara html per banner
function bannerTemplate(f)
{
	testo = '<div class="popupAlbergabici">'
	if (f.attributes.nome)
	{
		testo += '<h4 class="popupTratto">' + f.attributes.nome + '</h4>';
	}
	testo += '<p><a href="' + f.attributes.link + '" target="_blank"><img src="http://www.albergabici.it/albergab/disegni/' + f.attributes.banner + '"></a></p>';
	testo += '</div>';
	return testo;
}

//prepara html per banner su over
function bannerRapido(f)
{
	testo = '<a href="' + f.attributes.link + '" target="_blank"><img src="http://www.albergabici.it/albergab/disegni/' + f.attributes.banner + '"></a>';
	return testo;
}

//prepara html per elenco strutture
function elencoTemplate(f)
{
	var q = f.attributes.filtro;
	//trova strutture aventi le stesse coordinate
// 	f.geometry
	
	testo = 'Altre strutture presenti in zona:<br />';
	testo += q.keys().zip(
		q.values(), function(a) 
		{ 
			return a.join(': '); 
		}
	).join('<br />');
	var b='';
	if (map.getZoom()==map.getNumZoomLevels()-1)
	{
		testo += '<p>' + sovrapposti(f.cluster) + '</p>';
	} else {
		testo += "<p>Ingrandire la mappa per visualizzare i dettagli di queste strutture</p>";
	}
	return testo;
}

//trova eventuali strutture sovrapposte all'interno del cluster
//c contiene il cluster, 
function sovrapposti(c)
{
	var trovati=[];
	for (var i=0; i<c.length; i++)
	{
		//confronto le varie geometry alla ricerca di quelle uguali appartenenti alla stessa categoria
/*		if (c[i].attributes.categoria==categoria)
		{*/
			for (var j=i+1; j<c.length; j++)
			{
// 				if (c[j].attributes.categoria==categoria && c[j].geometry.equals(c[i].geometry))
				if (c[j].geometry.distanceTo(c[i].geometry)<100)
				{
					trovati.push(i);
					trovati.push(j);
					//break;
				}
			}
// 		}
	}
	var q = trovati.uniq();
	var testo = q.collect( function(a) 
		{ 
			return '<a class="albergabici" href="' +  c[a].attributes.link + '" target="_blank">' + c[a].attributes.nome + ' (' + c[a].attributes.categoria + ')</a>';
		}
	).join('<br />');
	return testo;
}

//mostra ostello aig
function showAig(f, cluster)
{
}

function changeTab(tab)
{
	var poi = false;
	var albergabici = false;
	var cont = false;
	var sx=false;
	var dx=false;
	var cont2=false;
	switch (tab)
	{
		case 1:
			cont2=true;
			sx=true;
			dx=true;
		break;
		case 2:	
			albergabici=true;
			sx=true;
			dx=true;
		break;	
		case 3:	
			sx=true;
			dx=true;
		break;		
		case 4:			
			poi=true;			
			sx=true;
			dx=true;
		break;	
		case 5:
			sx=true;
			dx=true;
		break;	
		case 6:
			cont=true;
		break;		
	}	
	

// 	[$('contenuto')].invoke((cont)?'show':'hide');
	[$('contenuto')].invoke('show');
	[$('sx2')].invoke((sx)?'show':'hide');
	[$('dx2')].invoke((dx)?'show':'hide');
	[$('contenuto2')].invoke((cont2)?'show':'hide');

	for (var i=1; i<=4; i++)
	{
		$$('div.tab'+i).invoke('hide');
		$('t'+i).removeClassName('current');
	}
	$$('div.tab'+tab).invoke('show');	//!!!!! NON usare appear(), si incasina la mappa in inserimento tratto
// 	$$('div.tab'+tab).each( function(el)
// 	{
// 		$(el).invoke('show');
// 	});

	$('t'+tab).addClassName('current');

	var layer;

	switch (tab)
	{
		case 1:
		case 3:	
			layer = map.getLayersByName("Albergabici")[0];
			layer.setVisibility(false);
			layer = map.getLayersByName("AIG")[0];
			layer.setVisibility(false);
			layer = map.getLayersByName("Poi")[0];
			layer.setVisibility(false);
			map.getControlsBy('id', 'selectalbergabici')[0].deactivate();
			map.getControlsBy('id', 'hoveralbergabici')[0].deactivate();
			map.getControlsBy('id', 'selectpoi')[0].deactivate();
			map.getControlsBy('id', 'hoverciclovia')[0].activate();				
			map.getControlsBy('id', 'selectciclovia')[0].activate();
		break;	
		case 2:	
			layer = map.getLayersByName("Albergabici")[0];
			layer.setVisibility(true);
			layer = map.getLayersByName("AIG")[0];
			layer.setVisibility(false);
			layer = map.getLayersByName("Poi")[0];
			layer.setVisibility(false);
			map.getControlsBy('id', 'selectciclovia')[0].deactivate();
			map.getControlsBy('id', 'hoverciclovia')[0].deactivate();		
			map.getControlsBy('id', 'selectpoi')[0].deactivate();
			map.getControlsBy('id', 'hoveralbergabici')[0].activate();			
			map.getControlsBy('id', 'selectalbergabici')[0].activate();
		break;		
		case 4:			
			layer = map.getLayersByName("Albergabici")[0];
			layer.setVisibility(false);
			layer = map.getLayersByName("AIG")[0];
			layer.setVisibility(false);
			layer = map.getLayersByName("Poi")[0];
			layer.setVisibility(true);
			map.getControlsBy('id', 'selectciclovia')[0].deactivate();
			map.getControlsBy('id', 'hoverciclovia')[0].deactivate();		
			map.getControlsBy('id', 'selectalbergabici')[0].deactivate();
			map.getControlsBy('id', 'hoveralbergabici')[0].deactivate();
			map.getControlsBy('id', 'selectpoi')[0].activate();
		break;	
	}	


/*	var layer = map.getLayersByName("Albergabici")[0];
	layer.setVisibility(albergabici);
	var layer = map.getLayersByName("AIG")[0];
	layer.setVisibility(albergabici);
	layer = map.getLayersByName("Poi")[0];
	layer.setVisibility(poi);
	map.getControlsBy('id', 'selectpoi')[0].activate();*/
/*		var a = map.getControlsBy('id', 'selectpoi')[0];
		var b = a.activate();
		map.getControlsBy('id', 'selectalbergabici')[0].deactivate();
		map.getControlsBy('id', 'hoveralbergabici')[0].deactivate();*/
// 	if (albergabici || poi)
// 	{	
// 		map.getControlsBy('id', 'selectciclovia')[0].deactivate();
// 		map.getControlsBy('id', 'hoverciclovia')[0].deactivate();	
// 	} else if (!albergabici && !poi) {
// 		map.getControlsBy('id', 'selectciclovia')[0].activate();
// 		map.getControlsBy('id', 'hoverciclovia')[0].activate();		
// 	}

}

function getStileMapPoi()
{
		var stilePoi=new OpenLayers.Style(
		OpenLayers.Util.applyDefaults(
		{
			externalGraphic: "${icona}",
			display: "${filtro}",
			pointRadius: 10,
			graphicWidth: 21,
			graphicHeight: 25,
			graphicXOffset: -10,
			graphicYOffset: -25,
			graphicOpacity: 1
		}, OpenLayers.Feature.Vector.style["default"]),
		{
			context: 
			{
				icona: function(feature) //importante l'ordine! Stesso presente nello stile
				{
					var filtro = getStrutture();
					var tmp='marker.png';	/*default*/
					var iconabanner = "";
					if (feature.cluster)
					{
						if (feature.cluster[0].attributes.albergabici)	/*A*/
						{
							//stabilisco quale icona visualizzare in base a livello
							var categorie = [];
							var livellomax = 0;
							var idmax=-1;
							for (var i=0; i<feature.cluster.length; i++)
							{
								//quali categorie visualizzare in base alla selezione?
								if (filtro.any( function(ele) { return (ele==feature.cluster[i].attributes.categoria);}))
								{
									categorie.push(feature.cluster[i].attributes.categoria);
									if (feature.cluster[i].attributes.livello.livello > livellomax)
									{	
										livellomax = feature.cluster[i].attributes.livello.livello;
										idmax = i;
									}
								}
							}
							var elem = categorie.uniq();
							var qta = $H();
							elem.each( function(a)
								{
									var  d = categorie.findAll( function(b)
										{
											return a==b;
										}
									);
									qta.set(a, d.length);
								}
							)
							feature.attributes.categorie = qta;
							if (idmax>=0)
							{
								//tmp = base +  "img/OL/albergabici/" + feature.cluster[idmax].attributes.icona;
								if (feature.cluster[idmax].attributes.livello.livello>=20)
								{
									var banner = '';
									if (feature.cluster[idmax].attributes.livello.bannerRegione)
									{
										banner = feature.cluster[idmax].attributes.livello.bannerRegione;
									} else if (feature.cluster[idmax].attributes.livello.bannerProvincia) {
										banner = feature.cluster[idmax].attributes.livello.bannerProvincia;
									} else if (feature.cluster[idmax].attributes.livello.bannerScheda) {
										banner = feature.cluster[idmax].attributes.livello.bannerScheda;
									}
									feature.attributes.banner = banner;
									feature.attributes.link = feature.cluster[idmax].attributes.link;
									feature.attributes.nome = feature.cluster[idmax].attributes.nome;
									iconabanner="b";
								}
							}
							//se c'e' un solo elemento usa la sua icona, altrimenti usa quella generica
							switch (qta.values().inject(0, function(acc, n) { return acc + n; }))
							{
								case 0:
									feature.attributes.filtro = "none";
								break;
								case 1:	
									var st = feature.cluster.find( function(el) {return (el.attributes.categoria==elem[0]);});
									feature.attributes.filtro = st.attributes.id; //visualizza l'icona e passa info su struttura da visualizzare
									//tmp = base + "img/OL/albergabici/" + st.attributes.icona;
									tmp = base + "img/OL/albergabici/hotel" + iconabanner + ".png";
								break;
								default:
									feature.attributes.filtro = qta; 	//visualizza l'icona. 
									//tmp = base + 'img/OL/albergabici/albergabici.gif';/* default*/
									tmp = base + "img/OL/albergabici/albergabici" + iconabanner + ".png";
							}
						} else {
							tmp = base + 'img/OL/cluster.png'; //???
							feature.attributes.filtro = "none";
						} /*A*/
					} else if (feature.attributes.albergabici) {
						if (feature.attributes.livello.livello>=20)
						{
							var banner = '';
							if (feature.attributes.livello.bannerRegione)
							{
								banner = feature.attributes.livello.bannerRegione;
							} else if (feature.attributes.livello.bannerProvincia) {
								banner = feature.attributes.livello.bannerProvincia;
							} else if (feature.attributes.livello.bannerScheda) {
								banner = feature.attributes.livello.bannerScheda;
							}
							feature.attributes.banner = banner;
							iconabanner="b";
						}
						
						//tmp = base + "img/OL/albergabici/" + feature.attributes.icona;
						tmp = base + "img/OL/albergabici/hotel" + iconabanner + ((feature.attributes.cert) ? "_cert.gif" : ".png");
						var f = filtro.any( function(ele) { return (ele==feature.attributes.categoria);});
						feature.attributes.filtro = (f ? 1 : "none"); 
					} else {
						if (feature.attributes.livello==="undefined")
						{
						} else if (feature.attributes.livello=="cycleways")
						{
							tmp='marker.png';
						} else if (feature.attributes.livello=="parts")
						{
							tmp='marker-gold.png';
						} else if (feature.attributes.livello=="provinces")
						{
							tmp='marker-green.png';
						} else if (feature.attributes.livello=="segments")
						{
							tmp='marker-blue.png';
						}
						tmp = base + "img/OL/" + tmp
					}
					return  tmp;
				},
				filtro: function(feature) { return feature.attributes.filtro; }
			}
		}
	);
	
	var stilePoiSelect=new OpenLayers.Style({externalGraphic: ""});
	
	var stilePoiTemp=new OpenLayers.Style({externalGraphic: base + "img/OL/ajax-loader.gif"});
	
	var stileMapPoi = new OpenLayers.StyleMap({'default': stilePoi,
				'select': stilePoi,    'temporary': stilePoi});
	
	return stileMapPoi;

}


//array contenente le categorie di albergabici da visualizzare
function getStrutture()
{
	//tree e' la variabile contenente l'oggetto TafelTree. E' definita nel file cycleways/ciclovia.ctp
	var a = tree.getCheckedBranches();
	return a.invoke('getText'); 
}

function updateStrutture(branch, status)
{
// 	branch.setIcons("wait.gif");
	//alert(branch.getId() + " is now " + str);
	if (!branch.getAncestor())	//root, seleziono o deseleziono tutti
	{
		var children = branch.getChildren();
		for (var i = 0; i < children.length; i++) 
		{
			children[i].check(status ? 1:0);
		}
	}
	//disabilita aig
	
	if (noloop)
	{
		noloop=false;
/*		return true;*/		
	} else {
 		noloop=true;		
		var a = document.getElementsByName('aig')[0];
		a.checked=false;
		attivaAig(a);
	}

	var l = map.getLayersByName("Albergabici");
	if (l.length==1)
	{
		//l[0].refresh({force: true});
		l[0].redraw();
	}
}

//funzione per gestire la visualizzazione degli ostelli Aig
function attivaAig(el)
{
	var branch = tree.getBranchById("Albergabici");
	if (el.checked && !noloop)	//disabilita albergabici
	{
		noloop=true;
		branch.check(0);
 		updateStrutture(branch, 0);
	} else {
		noloop=false;
// 		return false;
	}	
	var l = map.getLayersByName("AIG");
	if (l.length==1)
	{
		//l[0].refresh({force: true});
		l[0].setVisibility(el.checked);
// 		l[0].redraw();
	}

}

function attivaAdb(el)
{
	var l = map.getLayersByName("Albergabici");
	if (l.length==1)
	{
 		
 		var a = document.getElementsByName('adb')[0];
// 		a.checked=false;
 		
 		l[0].protocol.params.adb = a.checked;
		l[0].refresh({force: true});
// 		l[0].setVisibility(true);
//  		l[0].redraw();
	}

}

function caricaTracceAjax(layer, ciclovia)
{
	var k = 0;
	var manageTracks = {
		onComplete: function(response)
		{			
/*			var tmp = 'ad' + k++;
			var divtxt = new Element('div', { 'id': tmp});
			$('ajaxdiv').insert({bottom: divtxt});*/
/*			$(tmp).innerHTML = response.responseText;
 			var obj= $(tmp).getElementsByTagName('SCRIPT');*/
// 			divtxt.innerHTML = response.responseText;
/*			$(divtxt).insert({top: response.responseText});
			var obj= $(divtxt).getElementsByTagName('SCRIPT');*/
/*			for(var i=0; i<obj.length; i++)
			{
				eval(obj[i].text);   // execute the scripts.
			}*/
/*			if (obj.length==1)
			{
				caricaCiclovia(layer, obj[0].text.evalJSON());
			}
			$(tmp).remove();*/

			var tmp = 'ad' + k++;
			var divtxt = new Element('div', { 'id': tmp});
			divtxt.innerHTML = '<br />' + response.responseText;
			$('ajaxdiv').insert({bottom: divtxt});
			var obj= $(divtxt).getElementsByTagName('SCRIPT');
			if (obj.length==1)
			{
				try
				{
					var tmptrack = obj[0].text.evalJSON();
					caricaCiclovia(layer, tmptrack);
				} catch (err) {
					console.log('Errore caricando le tracce: ' + err);
				}
			}
			$$('div.spinning').each( function(el)
				{
					var a = parseInt(el.title)-1;
					el.title = a;
					if (a==0)
					{
						el.hide();
						el.title = "";
					}
				}
			);

/*			if (response.responseText.length>0)
			{
				caricaCiclovia(layer, response.responseText.evalJSON());
			}*/
			$(divtxt).remove();
		},
		onFailure: function(e)
		{
			$$('div.spinning').each( function(el)
				{
					var a = parseInt(el.title)-1;
					el.title = a;
					if (a==0)
					{
						el.hide();
						el.title = "";
					}
				}
			);
			alert('errore caricando ciclovie');
		}
	};
/*	var percorso='';
	var j=0;
	var folder=location.href.split('/');
	for (i=0;i<folder.length;i++)
	{
		if (folder[i].toLowerCase()=='networks')
		{
			break;
		}
		j++;
	}
	percorso=folder.slice(0,j).join('/')+'/cycleways/getciclovia/' ;*/
	var percorso='';
	percorso = trovaPath((ciclovia) ? 'cycleways' : 'networks', '/cycleways/getciclovia/');

	for (var i=0; i< phptracksprog.length; i++)
	{
		if (phptracksprog[i].Cycleway.id!=ciclovia)	//esclude la ciclovia selezionata
		{
			$$('div.spinning').each( function(el)
				{
					el.show();
					el.title = parseInt((el.title) ? el.title:0) + 1;
				}
			);
			OpenLayers.loadURL(percorso + phptracksprog[i].Cycleway.id, null, manageTracks, manageTracks.onComplete, manageTracks.onFailure);
		} 
	}
}

function caricaCiclovia(layer, dati)
{
	try
	{
		var colore = 0;
		var inobj = new OpenLayers.Format.GeoJSON();
		for (var i=0; i< dati.length; i++)
		{
			colore = (dati[i].Cycleway.parent_id===null) ? 0 : 1;
/*			if (dati[i].Segment.alternative_id!==null && dati[i].Segment.alternative_id!==undefined)
			{
				colore=2;
			}*/
			if (dati[i].Segment.gpstrack)
			{
				var cicloev = new Array();
				for (j=0; j<dati[i].Ev.length;j++)
				{	
					cicloev.push(dati[i].Ev[j].shortname);
				}

				var vlf= dati[i].Segment.gpstrack;
				for (var key=0; key<vlf.features.length; key++)
				{	
					var f = inobj.read(vlf.features[key]);
// 					if (cicloev.length>0)
// 					{
// 						var copia = new Array();
// 						for (j=0; j<f.length;j++)
// 						{
// 							var tmpf = new OpenLayers.Feature.Vector(f[j].geometry.clone());
// 							tmpf.attributes.ev=true;
// 							copia.push(tmpf);
// 						}
// 						layer.addFeatures(copia);
// 					}

/*					for (j=0; j<f.length;j++)
					{
						f[j].attributes.ciclovia=false;
						f[j].attributes.segment_id = dati[i].Segment.id;
						f[j].attributes.name = dati[i].Segment.name;
						f[j].attributes.alternative_name = dati[i].Segment.alternative_name;
						f[j].attributes.start = dati[i].Segment.start;
						f[j].attributes.end = dati[i].Segment.end;
						f[j].attributes.paving_name = dati[i].Paving.name;
						f[j].attributes.road_name = dati[i].Road.name;
						f[j].attributes.length2 = dati[i].Segment.length2;
						f[j].attributes.cycleway_id = dati[i].Segment.cycleway_id;
						f[j].attributes.cycleway = dati[i].Cycleway.name;
						f[j].attributes.part = dati[i].Part.name;
						f[j].attributes.province = dati[i].Province.name;
						f[j].attributes.lenciclovia=dati[i].Cycleway.length;
						if (cicloev.length>0)
						{
							f[j].attributes.evNames = cicloev.join(', ');
						}
					}*/

					for (j=0; j<f.length;j++)
					{
						f[j].attributes.segment_id = dati[i].Segment.id;
						f[j].attributes.cycleway_id = dati[i].Cycleway.id;
						f[j].attributes.colore = colore;
					}
					layer.addFeatures(f);
				}
			}
		}
	} catch(err) {
		alert('Errore caricando le tracce: ' + err);
	}

	return;
}

function caricaCiclovia2(layer, dati)
{
	try
	{
		var colore = 0;
		var inobj = new OpenLayers.Format.GeoJSON();

	
					var f = inobj.read(dati);
// 					if (cicloev.length>0)
// 					{
// 						var copia = new Array();
// 						for (j=0; j<f.length;j++)
// 						{
// 							var tmpf = new OpenLayers.Feature.Vector(f[j].geometry.clone());
// 							tmpf.attributes.ev=true;
// 							copia.push(tmpf);
// 						}
// 						layer.addFeatures(copia);
// 					}

/*					for (j=0; j<f.length;j++)
					{
						f[j].attributes.ciclovia=false;
						f[j].attributes.segment_id = dati[i].Segment.id;
						f[j].attributes.name = dati[i].Segment.name;
						f[j].attributes.alternative_name = dati[i].Segment.alternative_name;
						f[j].attributes.start = dati[i].Segment.start;
						f[j].attributes.end = dati[i].Segment.end;
						f[j].attributes.paving_name = dati[i].Paving.name;
						f[j].attributes.road_name = dati[i].Road.name;
						f[j].attributes.length2 = dati[i].Segment.length2;
						f[j].attributes.cycleway_id = dati[i].Segment.cycleway_id;
						f[j].attributes.cycleway = dati[i].Cycleway.name;
						f[j].attributes.part = dati[i].Part.name;
						f[j].attributes.province = dati[i].Province.name;
						f[j].attributes.lenciclovia=dati[i].Cycleway.length;
						if (cicloev.length>0)
						{
							f[j].attributes.evNames = cicloev.join(', ');
						}
					}*/


					layer.addFeatures(f);


	} catch(err) {
		alert('Errore caricando le tracce: ' + err);
	}

	return;
}



		//
		//	Set up all accordions
		//
function loadAccordions(regioni, province) {
	var topAccordion = new accordion('regioni_container', {
		classNames : {
			toggle : 'regione_accordion_toggle',
			toggleActive : 'regione_accordion_toggle_active',
			content : 'regione_accordion_content'
		}
	});
	
	var nestedVerticalAccordion = [];
	for (var i=0; i<regioni.length; i++)
	{
		var tmp = 	new accordion('regione_container_'+regioni[i], {
			classNames : {
				toggle : 'provincia_accordion_toggle',
				toggleActive : 'provincia_accordion_toggle_active',
				content : 'provincia_accordion_content'
			}
		});		
		nestedVerticalAccordion.push(tmp);
	}

	var nested2VerticalAccordion = [];
	for (var i=0; i<province.length; i++)
	{
		var tmp = 	new accordion('provincia_container_'+province[i], {
			classNames : {
				toggle : 'segmento_accordion_toggle',
				toggleActive : 'segmento_accordion_toggle_active',
				content : 'segmento_accordion_content'
			}
		});		
		nested2VerticalAccordion.push(tmp);
	}


//eventi per gestire il click sul nome delle regioni o delle province

	$$("h3.regione_accordion_toggle").each( function(s) 
	{	
		$(s.id).observe('click', zoomOnSelect);
	});

	$$("h4.provincia_accordion_toggle").each( function(s) 
	{	
		$(s.id).observe('click', zoomOnSelect);
	});

	$$("h5.segmento_accordion_toggle").each( function(s) 
	{	
		$(s.id).observe('click', zoomOnSelect);
	});

}
		
function zoomOnSelect(event)
{	
	//zoom sulla regione
	var layer = map.getLayersByName("Ciclovie Bicitalia")[0];
	var bounds = new OpenLayers.Bounds();
	
	var campo;
	switch (this.id.slice(0,4))
	{
		case "reg_":
			campo = 'part_id';
			break;
		case "pro_":
			campo = 'province_id';
			break;
		case "seg_":
			campo = 'segment_id';
		break;
	}

//elimina estremi gia' esistenti
	var eliminandi = [];
	for (var i=0; i<layer.features.length; i++)
	{
		if (layer.features[i].attributes.estremo)
		{
			eliminandi.push(layer.features[i]);
		}	
	}
	if (eliminandi.length>0)
	{
		layer.removeFeatures(eliminandi);
	}
	
	var ctrl = map.getControl("selectciclovia");
	
	var id = this.id.slice(4);

	for (var i=0; i<layer.features.length; i++)
	{

		if (layer.features[i].attributes[campo]==id)
		{
			if (campo=='segment_id')
			{
				limitiSegmenti(layer, layer.features[i], i);
			}
			var tmp = layer.features[i].geometry.getBounds();
			bounds.extend(tmp);
		} else {
			ctrl.unhighlight(layer.features[i]);	
		}
	}	

	if (bounds.left!==null)
	{
		//map.zoomToExtent(bounds,true);	
		var teorico = map.getZoomForExtent(bounds);
		var reale = map.getNumZoomLevels();
		map.setCenter(bounds.getCenterLonLat());
		map.zoomTo((reale<=teorico) ? reale : teorico);
	}
}

function limitiSegmenti(layer, features, index) {
	if(!index) {
		index = 0;
	}
// 	var current = features[index];
	var current = features;
	var ctrl = map.getControl("selectciclovia");
	ctrl.highlight(features);
	
	vertici = current.geometry.getVertices(true);

	var style_mark = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);

	// if graphicWidth and graphicHeight are both set, the aspect ratio
	// of the image will be ignored
	style_mark.graphicWidth = 16;
	style_mark.graphicHeight = 16;
	style_mark.graphicXOffset = -(style_mark.graphicWidth/2);  // this is the default value
	style_mark.graphicYOffset = -style_mark.graphicHeight;
	style_mark.externalGraphic = base + "img/OL/marker.png";

	var pointFeature0 = new OpenLayers.Feature.Vector(vertici[0],{estremo: true},style_mark);
	var pointFeature1 = new OpenLayers.Feature.Vector(vertici[1],{estremo: true},style_mark);
	layer.addFeatures([pointFeature0, pointFeature1]);

	++index;
	if(index < features.length-1) {
		window.setTimeout(function() {limitiSegmenti(layer, features, index);}, 100);
	}
}

function mostraPoi(id)
{
	//zoom sul poi
	if (false)
	{
		map.zoomToMaxExtent();	//allargo per far ricaricare i poi
		var layer = map.getLayersByName("Poi")[0];
		for (var i=0; i<layer.features.length; i++)
		{
			if (layer.features[i].attributes.id==id)
			{
				map.zoomToExtent(layer.features[i].geometry.getBounds(), false);
				break;
			}
		}	
	}
	var percorso='';
	percorso = trovaPath('cycleways', '/p1s/popupPoi/'+id);
	piwikTracker.trackLink(percorso, 'link');
	Modalbox.show(percorso, {title: 'Poi', width: 700, height: 500});
}

function mostraTratto(id, livello)
{
	var percorso='';
	percorso = trovaPath('cycleways', '/segments/popupSegment/'+id);
	try
	{
		piwikTracker.trackLink(percorso, 'link');
	} catch(err)
	{
	}
	//Modalbox.show(percorso, {title: 'Tratto', width: 700, height: 500});
	
	var parametri = [];
	switch (livello)
	{
		case 0:	//ciclovia
		parametri = stampaDescrizioni();
		break;
		case 1: //regione
		break;
		case 2:	//provincia
		break;
		default: //segmento
	}
	
	Modalbox.show(percorso, 
		{
			title: 'Tratto', 
			width: 700,
			height: 500,
			method: 'post',
			params: {
				'livello': livello,
				'elenco[]': parametri
			}
		}
	);
	
	
}

function trovaPath(model, pagina, last)
{
	var j=0;
	var folder=location.href.split('/');
	for (i=0;i<folder.length;i++)
	{
		if (folder[i].toLowerCase()==model)
		{
			break;
		}
		j++;
	}
	if (last)
	{j--;}
	
	return folder.slice(0,j).join('/') + pagina ;
}

// this assumes that the Map object is a JavaScript variable named "map"
// changed 20090928:
// * fixed the weird references about iframes, since they're not the usual use case
// * added the Please Wait window
// * used newer-style OpenLayers.Request.POST() for final AJAX call

function PrintMap() {
    //-- post a wait message
    print_wait_win = window.open("/cakebi/printwait.html", "print_wait_win", "scrollbars=no, status=0, height=5, width=10, resizable=1");

    // go through all layers, and collect a list of objects
    // each object is a tile's URL and the tile's pixel location relative to the viewport
    var size  = map.getSize();
    var tiles = [];
    for (var layername = 0; layername< map.layers.length; layername++) {
        // if the layer isn't visible at this range, or is turned off, skip it
        var layer = map.layers[layername];
        if (!layer.getVisibility()) continue;
        if (!layer.calculateInRange()) continue;
        // iterate through their grid's tiles, collecting each tile's extent and pixel location at this moment
		if (!layer.grid)
		{
			continue;
		}
        for (var tilerow=0; tilerow<layer.grid.length; tilerow++) {
            for (var tilei=0; tilei < layer.grid[tilerow].length; tilei++) {
                var tile     = layer.grid[tilerow][tilei]
                var url      = layer.getURL(tile.bounds);
                var position = tile.position;
                var opacity  = layer.opacity ? parseInt(100*layer.opacity) : 100;
                tiles[tiles.length] = {url:url, x:position.x, y:position.y, opacity:opacity};
            }
        }
    }

    // hand off the list to our server-side script, which will do the heavy lifting
    var tiles_json = JSON.stringify(tiles);
    var printparams = 'width='+size.w + '&height='+size.h + '&tiles='+escape(tiles_json) ;
    OpenLayers.Request.POST(
      { url: '/cakebi/printmap.php',
        data:OpenLayers.Util.getParameterString({width:size.w,height:size.h,tiles:tiles_json}),
        headers:{'Content-Type':'application/x-www-form-urlencoded'},
        callback: function(request) {
           print_wait_win.close();
           window.open(request.responseText);
        }
      }
    );
}


function printDiv2(el)
{
// 	$("exportedImage").writeAttribute($("map").getDimensions());	
// 
// 	var exportMapControl = new OpenLayers.Control.ExportMap();
// 	map.addControl(exportMapControl);
// 	
// 	var canvas = OpenLayers.Util.getElement("exportedImage");
// 	exportMapControl.trigger(canvas);   
// 

  var divToPrint=document.getElementById(el);
  var newWin=window.open('','Print-Window','width=600,height=500');
  newWin.document.open();
  newWin.document.write('<html><body onload="window.print()">'+divToPrint.innerHTML+'</body></html>');
  newWin.document.close();
  setTimeout(function(){newWin.close();},10);
}

function printDiv(id, livello)
{
/*  	var newWin=window.open('','Print-Window','width=600,height=500');
  	newWin.document.open();
    var map2 = new OpenLayers.Map("map2");
    var layer = map.getLayersByName("Ciclovie Bicitalia")[0];
	map2.addLayers([layer]);
	      //map2.addControl(new OpenLayers.Control.LayerSwitcher);
	map2.zoomToMaxExtent();
	

  	newWin.document.write('<html><body onload="window.print"><div id="map2"></body></html>');
  	newWin.document.close();
  	setTimeout(function(){newWin.close();},10);	*/
  	
  	var percorso='';
	percorso = trovaPath('cycleways', '/cycleways/printMap/'+ id + "/" + livello);
	//Modalbox.show(percorso, {title: 'Stampa', width: 700, height: 500});
	var newWin=window.open(percorso, "stampa", 'width=650,height=600');
  	
}


//esporta la traccia in formato KML
function exportTrack(tipo, livello, id)
{
	var out;
	var exportTraccia=[];
	var esterna = false;
	var output;	
	
	var campo;
	switch (livello)
	{
		case 1:
			campo = 'cycleway_id';
			break;
		case 2:
			campo = 'part_id';
			break;
		case 3:
			campo = 'province_id';
			break;
		case 4:
			campo = 'segment_id';
		break;
	}

	switch (tipo)
	{
		case 0:
			out = new OpenLayers.Format.GeoJSON();
		break;
		case 1:			
			out = new OpenLayers.Format.KML();
		break;
		case 2:
			out = new OpenLayers.Format.GML();
		break;
		case 3:
			out = new OpenLayers.Format.GPX();
			output = creaGPX(campo, id);
			esterna=true;
		break;
	}
	
	if (!esterna)
	{
		var tmp;
	//creo un array delle features riproiettato
// 		var layer = map.getLayersByName("Ciclovie Bicitalia")[0];	//!!!!!!!!!???????????
		
		var inobj = new OpenLayers.Format.GeoJSON();
		var layer = inobj.read(esporta);
		
		for (var i=0; i<layer.length; i++)
		{
			if (layer[i].attributes[campo]==id)
			{
				tmp = layer[i].clone();
				tmp.geometry.transform(map.projection, map.displayProjection);
// 				tmp.attributes.lunghezza=tmp.geometry.getGeodesicLength();
				exportTraccia.push(tmp);
			}
		}

		output = out.write(exportTraccia);
	}
	
	var traccia = {'data[Cycleway][filename]': output};

	var percorso=trovaPath("cycleways", "/cycleways/getTrack");

// 	var request = OpenLayers.Request.POST({
// 		url: percorso,
// 		data: OpenLayers.Util.getParameterString({'data[Cycleway][filename]': out.write(exportTraccia)}),
// 		headers: {"Content-Type": "application/x-www-form-urlencoded" },
// 		callback: manageTrack
// 	});
// 
	var iframe = $("downloadIframe");
	iframe.contentWindow.document.body.innerHTML='';

	var hform = new Element('form',
	{ 
		'action': percorso,
		'name': "esportazione",
		'method': "POST"
	});
	var hfield = new Element('input', 
	{
		'type': 'hidden',
		'name': 'data[Cycleway][filename]', 
		'value': output
	});
	var htype = new Element('input', 
	{
		'type': 'hidden',
		'name': 'data[Cycleway][ext]', 
		'value': out.CLASS_NAME.split(".").slice(-1).toString().toLowerCase()
	});	
	var hsub = new Element('input', 
	{
		'type': 'submit',
		'name': 'submitbutton',  
		'value': 'submit'
	});	
	
	hform = hform.insert({bottom: hfield});
	hform = hform.insert({bottom: htype});
	hform = hform.insert({bottom: hsub});

// 	$("downloadIframe").update(hform);
	
	iframe.contentWindow.document.body.appendChild(hform);
	hform.submit();

}


//usa xml per creare il file gpx
function creaGPX(campo, id)
{
	var format = new OpenLayers.Format.XML();
	var doc = null;
	
	var uri = "http://www.topografix.com/GPX/1/1";
	var name = "gpx";
	var gpx = format.createElementNS(uri, name);
	//doc.documentElement.appendChild(node);
	format.setAttributeNS(gpx, "", "version", "1.1");
	format.setAttributeNS(gpx, "", "creator", "http://www.bicitalia.org");

	var meta = format.createElementNS(uri,"metadata");
	var l1 = gpx.appendChild(meta);
	var e2 = format.createElementNS(uri,"name");
	var l2 = l1.appendChild(e2);
	var e2v = format.createTextNode("ciclovia.gpx");
	l2.appendChild(e2v);
	e2 = format.createElementNS(uri,"desc");
	l2 = l1.appendChild(e2);
	var nomeCiclovia = $$('h2.titolo_ciclovia')[0];
	e2v = format.createTextNode(nomeCiclovia.innerHTML);
	l2.appendChild(e2v);	
	e2 = format.createElementNS(uri,"author");
	l2 = l1.appendChild(e2);
		var e3 = format.createElementNS(uri,"name");
		var l3 = l2.appendChild(e3);
		var e3v = format.createTextNode("Coordinatori BicItalia");
		l3.appendChild(e3v);
/*		e3 = format.createElementNS(uri,"email");
		format.setAttributeNS(e3, "", "id", "bicitalia");
		format.setAttributeNS(e3, "", "domain", "fiab-onlus.it");
		l3 = l2.appendChild(e3);*/
// 		e3v = format.createTextNode("bicitalia@fiab-onlus.it");
// 		l3.appendChild(e3v);
	e2 = format.createElementNS(uri,"copyright");
	format.setAttributeNS(e2, "", "author", "Fiab Onlus - Tutti i diritti riservati");
	l2 = l1.appendChild(e2);
// 	l2.appendChild(e2v);
/*	e2 = format.createElementNS(uri,"time");
	l2 = l1.appendChild(e2);
	var d=new Date();
	e2v = format.createTextNode(d.toLocaleString());
	l2.appendChild(e2v);*/
	// fine metadata

	//var vlayer = map.getLayersByName("Ciclovie Bicitalia")[0];	//!!!!!!!!!???????????
	
	var inobj = new OpenLayers.Format.GeoJSON();
	var vlayer = inobj.read(esporta);
	
	for (var i=0; i<vlayer.length; i++)
	{
		if (vlayer[i].attributes[campo]==id)
		{
			var trk = format.createElementNS(uri,"rte");
			l1 = gpx.appendChild(trk);
				var nm = format.createElementNS(uri,"name");
				var nm2 = trk.appendChild(nm);
				var nmtxt = format.createTextNode("[" + ((Math.pow(10, 3) + i) + '').substr(1) + "] " + vlayer[i].attributes.segment_name);
				nm2.appendChild(nmtxt);
/*				nm = format.createElementNS(uri,"number");	//non compatibile con mapsource
				nm2 = trk.appendChild(nm);
				nmtxt = format.createTextNode(i);
				nm2.appendChild(nmtxt);*/
				nm = format.createElementNS(uri,"cmt");
				nm2 = trk.appendChild(nm);
				var commento = 'Ciclovia: ' + vlayer[i].attributes.cycleway_name + ', regione: ' + vlayer[i].attributes.part_name + ', provincia: ' + vlayer[i].attributes.province_name + ', fondo - ' + vlayer[i].attributes.paving + ', traffico: ' + vlayer[i].attributes.road + ', mezzo: ' +  vlayer[i].attributes.mezzo + ', direzione: ' + vlayer[i].attributes.direzione;
				if (vlayer[i].attributes.ponte)
				{
					commento += ', ponte'; 
				}
				if (vlayer[i].attributes.galleria)
				{
					commento += ', galleria'; 
				}
				nmtxt = format.createTextNode(commento);
				nm2.appendChild(nmtxt);
			var tmp = vlayer[i].clone();
			tmp.geometry.transform(map.projection, map.displayProjection);
			if (tmp.geometry.CLASS_NAME=="OpenLayers.Geometry.LineString")
			{
				var indice=0;
				for (var j=0; j<tmp.geometry.components.length;j++)
				{
					if (vlayer[i].attributes.ordine==1)
					{
						indice = tmp.geometry.components.length -1 - j;
					} else {
						indice=j;
					}	
					e3 = format.createElementNS(uri,"rtept");
					format.setAttributeNS(e3, "", "lon", tmp.geometry.components[indice].x);
					format.setAttributeNS(e3, "", "lat", tmp.geometry.components[indice].y);
					l3 = l1.appendChild(e3);
				}	
			}
		}
	}

	var x = '<?xml version="1.0" encoding="UTF-8" ?>' + format.write(gpx);
	return x;
}



//usa xml per creare il file gpx (vecchia versione)
function creaGPX2(campo, id)
{
	var format = new OpenLayers.Format.XML();
	var doc = null;
	
	var uri = "http://www.topografix.com/GPX/1/1";
	var name = "gpx";
	var gpx = format.createElementNS(uri, name);
	//doc.documentElement.appendChild(node);
	format.setAttributeNS(gpx, "", "version", "1.1");
	format.setAttributeNS(gpx, "", "creator", "http://www.bicitalia.org");

	var meta = format.createElementNS(uri,"metadata");
	var l1 = gpx.appendChild(meta);
	var e2 = format.createElementNS(uri,"name");
	var l2 = l1.appendChild(e2);
	var e2v = format.createTextNode("ciclovia.gpx");
	l2.appendChild(e2v);
	e2 = format.createElementNS(uri,"desc");
	l2 = l1.appendChild(e2);
	var nomeCiclovia = $$('h2.titolo_ciclovia')[0];
	e2v = format.createTextNode(nomeCiclovia.innerHTML);
	l2.appendChild(e2v);	
	e2 = format.createElementNS(uri,"author");
	l2 = l1.appendChild(e2);
		var e3 = format.createElementNS(uri,"name");
		var l3 = l2.appendChild(e3);
		var e3v = format.createTextNode("Coordinatori BicItalia");
		l3.appendChild(e3v);
		e3 = format.createElementNS(uri,"email");
		format.setAttributeNS(e3, "", "id", "bicitalia");
		format.setAttributeNS(e3, "", "domain", "fiab-onlus.it");
		l3 = l2.appendChild(e3);
// 		e3v = format.createTextNode("bicitalia@fiab-onlus.it");
// 		l3.appendChild(e3v);
	e2 = format.createElementNS(uri,"copyright");
	format.setAttributeNS(e2, "", "author", "Fiab Onlus - Tutti i diritti riservati");
	l2 = l1.appendChild(e2);
// 	l2.appendChild(e2v);
/*	e2 = format.createElementNS(uri,"time");
	l2 = l1.appendChild(e2);
	var d=new Date();
	e2v = format.createTextNode(d.toLocaleString());
	l2.appendChild(e2v);*/
	// fine metadata

	var vlayer = map.getLayersByName("Ciclovie Bicitalia")[0];	//!!!!!!!!!???????????
	for (var i=0; i<vlayer.features.length; i++)
	{
		if (vlayer.features[i].attributes[campo]==id)
		{
			var trk = format.createElementNS(uri,"rte");
			l1 = gpx.appendChild(trk);
				var nm = format.createElementNS(uri,"name");
				var nm2 = trk.appendChild(nm);
				var nmtxt = format.createTextNode(vlayer.features[i].attributes.name);
				nm2.appendChild(nmtxt);

			var tmp = vlayer.features[i].clone();
			tmp.geometry.transform(map.projection, map.displayProjection);
			if (tmp.geometry.CLASS_NAME=="OpenLayers.Geometry.LineString")
			{			
				for (var j=0; j<tmp.geometry.components.length;j++)
				{
					e3 = format.createElementNS(uri,"rtept");
					format.setAttributeNS(e3, "", "lon", tmp.geometry.components[j].x);
					format.setAttributeNS(e3, "", "lat", tmp.geometry.components[j].y);
					l3 = l1.appendChild(e3);
				}	
			}
		}
	}

	var x = '<?xml version="1.0" encoding="UTF-8" ?>' + format.write(gpx);
	return x;
}

//usa xml per creare il file gpx
function creaGPXTrack(campo, id)
{
	var format = new OpenLayers.Format.XML();
	var doc = null;
	
	var uri = "http://www.topografix.com/GPX/1/1";
	var name = "gpx";
	var gpx = format.createElementNS(uri, name);
	//doc.documentElement.appendChild(node);
	format.setAttributeNS(gpx, "", "version", "1.1");
	format.setAttributeNS(gpx, "", "creator", "http://www.bicitalia.org");

	var meta = format.createElementNS(uri,"metadata");
	var l1 = gpx.appendChild(meta);
	var e2 = format.createElementNS(uri,"name");
	var l2 = l1.appendChild(e2);
	var e2v = format.createTextNode("ciclovia.gpx");
	l2.appendChild(e2v);
	e2 = format.createElementNS(uri,"desc");
	l2 = l1.appendChild(e2);
	e2v = format.createTextNode("Ciclovia abc");
	l2.appendChild(e2v);	
	e2 = format.createElementNS(uri,"author");
	l2 = l1.appendChild(e2);
		var e3 = format.createElementNS(uri,"name");
		var l3 = l2.appendChild(e3);
		var e3v = format.createTextNode("Coordinatori BicItalia");
		l3.appendChild(e3v);
		e3 = format.createElementNS(uri,"email");
		format.setAttributeNS(e3, "", "id", "bicitalia");
		format.setAttributeNS(e3, "", "domain", "fiab-onlus.it");
		l3 = l2.appendChild(e3);
// 		e3v = format.createTextNode("bicitalia@fiab-onlus.it");
// 		l3.appendChild(e3v);
	e2 = format.createElementNS(uri,"copyright");
	format.setAttributeNS(e2, "", "author", "Fiab Onlus - Tutti i diritti riservati");
	l2 = l1.appendChild(e2);
// 	l2.appendChild(e2v);
/*	e2 = format.createElementNS(uri,"time");
	l2 = l1.appendChild(e2);
	var d=new Date();
	e2v = format.createTextNode(d.toLocaleString());
	l2.appendChild(e2v);*/
	// fine metadata

	var trk = format.createElementNS(uri,"trk");
	l1 = gpx.appendChild(trk);
	var vlayer = map.getLayersByName("Ciclovie Bicitalia")[0];	//!!!!!!!!!???????????
	for (var i=0; i<vlayer.features.length; i++)
	{
		if (vlayer.features[i].attributes[campo]==id)
		{
			var trkseg = format.createElementNS(uri,"trkseg");
			l2 = l1.appendChild(trkseg);
			var tmp = vlayer.features[i].clone();
			tmp.geometry.transform(map.projection, map.displayProjection);
			if (tmp.geometry.CLASS_NAME=="OpenLayers.Geometry.LineString")
			{			
				for (var j=0; j<tmp.geometry.components.length;j++)
				{
					e3 = format.createElementNS(uri,"trkpt");
					format.setAttributeNS(e3, "", "lon", tmp.geometry.components[j].x);
					format.setAttributeNS(e3, "", "lat", tmp.geometry.components[j].y);
					l3 = l2.appendChild(e3);
				}	
			}
		}
	}

	var x = '<?xml version="1.0" encoding="UTF-8" ?>' + format.write(gpx);
	return x;
}

//stampa le descrizioni dei tratti tutte insieme, in modo da poterle stampare facilmente 
function stampaDescrizioni()
{
	//creo un array con l'elenco degli id dei segmenti ordinato
	var elenco = [];
	for (var i=0; i < esporta.features.length; i++)
	{
		elenco.push(esporta.features[i].properties.segment_id);
	}
	return elenco;
}


//in base ai valori di pars apre tabs e accordion
// formato pars: [id] oppure [id, model, id_model]
function searchResults(pars)
{
	if (pars.length==3)
	{
		switch (pars[1])
		{
			case 'segments':
				changeTab(3);
				$("seg_"+pars[2]).ancestors()[3].previous().simulate('click');
				$("seg_"+pars[2]).ancestors()[1].previous().simulate('click');
				$("seg_"+pars[2]).simulate('click').addClassName('searchHighlight');
			break;
			case 'p1s':
				changeTab(4);
				$("poi_"+pars[2]).addClassName('searchHighlight');
			break;
		}
	}
}

function OLregioni()
{
	OpenLayers.Lang.setCode('it'); 

	var options = {
	projection: new OpenLayers.Projection("EPSG:900913"),
	displayProjection: new OpenLayers.Projection("EPSG:4326"),
	units: "degree",
	maxResolution: 156543.0339,
	maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34,
						20037508.34, 20037508.34)
	};
		
	map = new OpenLayers.Map('map', options);

	map.addLayers(caricaMappe());


	var cdefaultStyle = new OpenLayers.Style({
  		strokeWidth: 2,
		strokeOpacity: 0.5,
		strokeColor: "#FF9966",
		pointRadius: 3,
		fillColor: "#FFCC66",
		fillOpacity: 0.5
		/*,
strokeDashstyle: "dash"*/
	});

	var ctempStyle = new OpenLayers.Style({
//   		strokeWidth: 3,
// 		strokeOpacity: 0.8,
// 		strokeColor: "#ffff00"
		fillColor: "#0099FF"

	});

	var cselectStyle = new OpenLayers.Style({
//   		strokeWidth: 3,
// 		strokeOpacity: 0.8,
// 		strokeColor: "#ffff00"
		fillColor: "#ffff00"

	});

	var cstyleMap = new OpenLayers.StyleMap(
		{
			'default': cdefaultStyle,
			'temporary': ctempStyle,
 			'select': cselectStyle
		}
	);

	var vlayer = new OpenLayers.Layer.Vector("Ciclovie in Italia",
		{
			projection: map.displayProjection,
			transitionEffect: 'resize',
			styleMap: cstyleMap
		}
	);

	map.addLayer(vlayer);

/*	$$('td.contour').each( function(el)
	{
		var inobj = new OpenLayers.Format.GeoJSON();
		var tmp = inobj.read(el.innerHTML.evalJSON());
		vlayer.addFeatures(tmp);
	});*/
	
	for (var i=0; i<contorni.length; i++)
	{
		var inobj = new OpenLayers.Format.GeoJSON();
		var tmp = inobj.read(contorni[i].IterRegion.gpstrack.evalJSON());
		vlayer.addFeatures(tmp);		
	}
	

	var rdefaultStyle = new OpenLayers.Style({
  		strokeWidth: 3,
		strokeOpacity: 0.8,
		strokeColor: "#FF0000",
		pointRadius: 3,
		fillColor: "#000000"/*,
strokeDashstyle: "dash"*/
	});

	var rstyleMap = new OpenLayers.StyleMap(
		{
			'default': rdefaultStyle,
			'temporary': cselectStyle,
 			'select': cselectStyle
		}
	);

	var clayer = new OpenLayers.Layer.Vector("Ciclovie Bicitalia non rilevate",
		{
			projection: map.displayProjection,
			transitionEffect: 'resize',
			styleMap: rstyleMap
		}
	);

	map.addLayer(clayer);
	clayer.setOpacity(0.5);

	//LayerSwitcher
	map.addControl(new OpenLayers.Control.LayerSwitcher());
	
	var highlightCtrl = new OpenLayers.Control.SelectFeature(vlayer, {
		hover: true,
		highlightOnly: true,
		multiple: false,
		renderIntent: "temporary"
	});
		
	map.addControl(highlightCtrl);
	highlightCtrl.activate();
	
	var selectCtrl = new OpenLayers.Control.SelectFeature(vlayer, {
		hover: false,
		highlightOnly: false,
		multiple: false,
		eventListeners:
		{
				featurehighlighted: function(f)
				{
					map.zoomToExtent(f.feature.geometry.getBounds(), false);
					
					if (!f.feature.attributes.provincia)
					{					
						$$('#lista_regioni dt').invoke('hide');
						$$('#lista_regioni dd').invoke('hide');
						$$('dt.regione_' + f.feature.attributes.id).each( function(el)
							{
								el.show().next('dd').show();
							}
						);

						var percorso=trovaPath("iterRegions", "/iterProvinces/regione/"+f.feature.attributes.id, true);
						OpenLayers.loadURL(percorso, null, selectCtrl, selectCtrl.onComplete, selectCtrl.onFailure);
					} else {
						$('provincia').update('<h4>'+f.feature.attributes.name+'</h4><p>'+f.feature.attributes.description+'</p>');
						var percorso=trovaPath("iterRegions", "/iterCards/provincia/"+f.feature.attributes.id, true);
						OpenLayers.loadURL(percorso, null, selectCtrl, selectCtrl.onComplete2, selectCtrl.onFailure);						
					}
				}
		},
		onComplete: function(response)
		{
			
			var inobj = new OpenLayers.Format.GeoJSON();
			var tmp = response.responseText.evalJSON();
			var rimuovere = [];
			for (var i=0; i<vlayer.features.length; i++)
			{
				if (vlayer.features[i].attributes.provincia)
				{
					rimuovere.push(vlayer.features[i]);
				}
			}
			vlayer.destroyFeatures(rimuovere);
			for (var i=0; i<tmp.length; i++)
			{
				var f = inobj.read(tmp[i].IterProvince.gpstrack.evalJSON())[0];
				f.attributes.id = tmp[i].IterProvince.id;
				f.attributes.name = tmp[i].IterProvince.name;
				f.attributes.description = tmp[i].IterProvince.description;
				f.attributes.provincia = true;
				vlayer.addFeatures(f);
			}
		},
		onComplete2: function(response)
		{
			$('lista_cards').update(response.responseText);
		},

		onFailure: function(e)
		{
			alert('errore');
		}
	});

	map.addControl(selectCtrl);
	selectCtrl.activate();

	
//gestione della visualizzazione delle province

	var percorso=trovaPath("iterRegions", "/iterProvinces/regione");

	var player = new OpenLayers.Layer.Vector("Province", {

	});
	map.addLayer(player);

	var lonLat = new OpenLayers.LonLat(lon, lat).transform(map.displayProjection, map.projection);
 	map.setCenter(lonLat, zoom);	

}



