var map;
var geocoder;
var userAdded = 1;
var server = "http://www.alek4u.it/KMZ_/bici/"
if (document.domain == "provincia.milano.it" || document.domain == "www.provincia.milano.it") {
	server = "http://www.provincia.milano.it/mappe/pianificazione_territoriale/KMZ/"
} else if (document.domain == "provincia.mi.it" || document.domain == "www.provincia.mi.it") {
	server = "http://www.provincia.mi.it/mappe/pianificazione_territoriale/KMZ/"
}

var riconosciuti = {
 "altomilanese":{			"url" : server+"parchi_riconosciuti/parco_alto_milanese.kmz", 
 				 			"name" : "Parco Alto Milanese"
				},
 "rugaredo":{				"url" : server+"parchi_riconosciuti/parco_rugaredo.kmz", 
 				 			"name" : "Parco del Bosco del Rugaredo"
				},
 "cascine":{				"url" : server+"parchi_riconosciuti/parco_cascine.kmz", 
 				 			"name" : "Parco delle cascine"
				},
 "parco_colombano":{		"url" : server+"parchi_riconosciuti/parco_colombano.kmz", 
 				 			"name" : "Parco della collina di San Colombano"
				},
 "parco_grugnotorto":{		"url" : server+"parchi_riconosciuti/parco_grugnotorto_villoresi.kmz", 
 				 			"name" : "Parco del Grugnotorto - Villoresi"
				},
 "parco_agricolo_balossa":{	"url" : server+"parchi_riconosciuti/parco_agricolo_balossa.kmz", 
 				 			"name" : "Parco agricolo della Balossa"
				},
 "parco_molgora":{			"url" : server+"parchi_riconosciuti/parco_molgora.kmz", 
 				 			"name" : "Parco del Molgora"
				},
 "parco_roccolo":{			"url" : server+"parchi_riconosciuti/parco_roccolo.kmz", 
 				 			"name" : "Parco del Roccolo"
				},
 "parco_brianza_centrale":{	"url" : server+"parchi_riconosciuti/parco_brianza_centrale.kmz", 
 				 			"name" : "Parco della Brianza Centrale"
				},
 "parco_brughiera_briantea":{"url" : server+"parchi_riconosciuti/parco_brughiera_briantea.kmz", 
 				 			 "name" : "Parco della Brughiera Briantea"
				},
 "parco_colline_briantee":{ "url" : server+"parchi_riconosciuti/parco_colline_briantee.kmz", 
 				 			 "name" : "Parco delle colline Briantee"
				},
 "parco_lambro":{			"url" : server+"parchi_riconosciuti/parco_lambro.kmz", 
 				 			"name" : "Parco delle Media valle del Lambro"
				},
 "parco_mulini":{			"url" : server+"parchi_riconosciuti/parco_mulini.kmz", 
 				 			"name" : "Parco dei Mulini"
				},
 "parco_colline_briantee":{	"url" : server+"parchi_riconosciuti/parco_colline_briantee.kmz", 
 				 			"name" : "Parco delle Colline Briantee"
				},
 "parco_riovallone":{		"url" : server+"parchi_riconosciuti/parco_riovallone.kmz", 
 				 			"name" : "Parco del Rio Vallone"
				},
 "parco_roggie":{			"url" : server+"parchi_riconosciuti/parco_roggie.kmz", 
 				 			"name" : "Parco delle Roggie"
				},
 "valletta":{				"url" : server+"parchi_riconosciuti/parco_valletta.kmz", 
 				 			"name" : "Parco della Valletta"
				}
}

var proposti = {
 "parco_agricolo_vimercatese_vavallera":{	"url" : server+"parchi_proposti/parco_agricolo_vimercatese_vavallera.kmz", 
 				 			"name" : "Parco Agricolo del Vimercatese"
				},
 "cascine":{				"url" : server+"parchi_proposti/parco_cascine.kmz", 
 				 			"name" : "Parco delle Cascine"
				},
 "parco_cave":{				"url" : server+"parchi_proposti/parco_cave.kmz", 
 				 			"name" : "Parco Est delle Cave"
				},
 "parco_basso_olona":{		"url" : server+"parchi_proposti/parco_basso_olona.kmz", 
 				 			"name" : "Parco del Basso Olona"
				},
 "parco_riovallone":{		"url" : server+"parchi_proposti/parco_vallone.kmz", 
 				 			"name" : "Parco del Rio Vallone"
				},
 "valletta":{				"url" : server+"parchi_proposti/parco_valletta.kmz", 
 				 			"name" : "Parco della Valletta"
				},
 "parco_mulini":{			"url" : server+"parchi_proposti/parco_mulini.kmz", 
 				 			"name" : "Parco dei Mulini"
				},
 "parco_gelso":{			"url" : server+"parchi_proposti/parco_gelso.kmz", 
 				 			"name" : "Parco del Gelso"
				},
 "parco_lura":{				"url" : server+"parchi_proposti/parco_lura.kmz", 
 							"name" : "Parco del Lura"
				},
 "parco_colombano":{		"url" : server+"parchi_proposti/parco_colombano.kmz", 
 				 			"name" : "Parco della collina di San Colombano"
				}
}

var visualizza = {
	 "milano":					{"url" : server+"confini_provincia_milano.kmz"},
	 "monza":					{"url" : server+"confini_provincia_monza.kmz"},
	 "comuni":					{"url" : server+"confini_comuni_milano.kmz"},
	 "canali":					{"url" : server+"canali.kmz"},
	 "dorsale":					{"url" : server+"dorsale_verde_nord.kmz"},
	 "regionale_nordmilano":	{"url" : server+"parchi_regionali/parco_nord_milano.kmz"},
	 "regionale_addanord":		{"url" : server+"parchi_regionali/parco_adda_nord.kmz"},
	 "regionale_lambro":		{"url" : server+"parchi_regionali/parco_valle_del_lambro.kmz"},
	 "regionale_groane":		{"url" : server+"parchi_regionali/parco_groane.kmz"},
	 "regionale_ticino":		{"url" : server+"parchi_regionali/parco_ticino.kmz"},
	 "regionale_sudmilano":		{"url" : server+"parchi_regionali/parco_sud_milano.kmz"}
}

var eventi = {
	1:{		"img" : "1_ampliamenti", "name" : "Ampliamento della Dorsale"},
	2:{		"img" : "2_ampliamenti-in-ambiti-agr", "name" : "Ampliamento della Dorsale in ambito agricolo"},
	3:{		"img" : "3_connessioni", "name" : "Connessione"},
	4:{		"img" : "4_ampl-e-con-lungo-corsi-ac", "name" : "Ampliamento - connessione lungo corso d'acqua"},
	5:{		"img" : "5_progettualita-funzionali", "name" : "Progettualita' funzionale alla Dorsale"},
	6:{		"img" : "6_idee-progettuali", "name" : "Idea progettuale"},
	7:{		"img" : "7_aree-compensazione-Pedem", "name" : "Area di compensazione di Autostrada Pedemontana"},
	8:{		"img" : "8_interferenze-infrastruttu", "name" : "Area di pregio ambientale"},
	9:{		"img" : "9_interferenze-produt-comm", "name" : "Interferenza con contenitore commerciale, produttivo, logistico"},
	10:{	"img" : "10_espansioni-residenziali", "name" : "Espansione residenziale"},
	11:{	"img" : "11_aree-pregio-ambientale", "name" : "Area di pregio ambientale"},
	12:{	"img" : "12_aree-degrado-ambientale", "name" : "Area di degrado ambientale"},
	13:{	"img" : "13_cave", "name" : "Cava"},
	14:{	"img" : "14_aziende-agricole","name" : "Azienda agricola 'verde'"},
	15:{	"img" : "15_biomasse", "name" : "Produzione di biomasse"},
	16:{	"img" : "16_spazi-aperti-fruiti", "name" : "Spazio aperto fruito"},
	17:{	"img" : "17_attrezzature-tempo-liber", "name" : "Area di pregio ambientale"},
	18:{	"img" : "18_pregio-architettonico", "name" : "Elemento di pregio architettonico"}
}


function delElementById(id) {
	var	node,
		result;
	node = 	document.getElementById ? 
		document.getElementById(id) : 
		document.all[id];
	result = (node && node.parentNode);
	if(result)
		node.parentNode.removeChild(node);
	return result;
}
function selectall(div){
	var input = document.getElementById(div).getElementsByTagName('input');
	//for (var x in input){input[x].checked = true};
	for(x=0; x<input.length; x++){input[x].checked = true}
}
function deselectall(div){
	var input = document.getElementById(div).getElementsByTagName('input');
	for (var x in input){input[x].checked = false};	
}

function onLoad() {
  var inputric = document.getElementById('ricerca').getElementsByTagName('input');  for (var xy in inputric){inputric[xy].checked = false};
  map=new GMap2(document.getElementById("map"),{draggableCursor: 'crosshair', draggingCursor: 'move'});
  map.setCenter(new GLatLng(45.383, 9.1873), 10);
  map.addControl(new GLargeMapControl());
  map.addControl(new GOverviewMapControl());
  map.addControl(new GScaleControl());
  map.addControl(new GMapTypeControl());
  map.enableScrollWheelZoom();
  map.enableDoubleClickZoom();
  map.enableContinuousZoom();
  geocoder = new GClientGeocoder();
  for(var riconosciuto in riconosciuti) { addLI(riconosciuto, riconosciuti, "parchiriconosciutiul"); }
  toggleGeoXML(riconosciuto, false, riconosciuti);
  for(var proposto in proposti) { addLI(proposto, proposti, "parchipropostiul"); } 
  toggleGeoXML(proposto, false, proposti);
  for(var evento in eventi) { addLI(evento, eventi, "elencoeventi"); }
  
  document.getElementById('dorsalecheck').checked=true;
  toggleGeoXML('dorsale', true, visualizza);
} 

function resetall(){
	map.clearOverlays()
	var inputric = document.getElementById('ricerca').getElementsByTagName('input');  for (var xy in inputric){inputric[xy].checked = false};
	var inputric = document.getElementById('ricercavanzata').getElementsByTagName('input');  for (var xy in inputric){inputric[xy].checked = false};
	document.getElementById('punti').innerHTML = "";
	changelight('ricerca','risultati', 'riclink', 'rislink');
	map.setCenter(new GLatLng(45.383, 9.1873), 10);
}

// PER AGGIUNGERE A DX
function addLI(id, arra, div) {
  var inputLI = document.createElement("li");
  var input = document.createElement("input");
 	  input.type = "checkbox";
 	  input.id = id;
  	  inputLI.appendChild(input);
	  input.checked = true;
  var name = document.createTextNode(arra[id].name);
  inputLI.appendChild(name);
  document.getElementById(div).appendChild(inputLI);
}

var temprico=[];
function avanzinvia(div, arra){
/*	for (var x = 0; x < markerArray.length; x++) {
		if(markerArray[x]){map.removeOverlay(markerArray[x]);}
	}*/
	var input = document.getElementById(div).getElementsByTagName('input');
	for (i = 0; i < input.length; i++){
		toggleGeoXML(input[i].id, input[i].checked, arra);
		showicon(input[i].id, input[i].checked, arra)
	};
	closeavanzata()
	changelight('risultati','ricerca', 'rislink', 'riclink');
}

function toggleGeoXML(id, checked, layers) {
	if (checked) {
		if(!layers[id].geoXml){
  			var geoXml = new GGeoXml(layers[id].url);
			layers[id].geoXml = geoXml;
			map.addOverlay(geoXml);
		}
	} 
	else if (layers[id].geoXml) {
		map.removeOverlay(layers[id].geoXml);
		layers[id].geoXml=false
	}
}


// ------ Geocode del Cerca indirizzo
function showLocation() {
      var address = document.getElementById('indirizzoinserito').value;
      geocoder.getLocations(address, addAddressToMap);
    }
function addAddressToMap(response) {
      map.clearOverlays();
      if (!response || response.Status.code != 200) {
        alert("Sorry, we were unable to geocode that address");
      } else {
        place = response.Placemark[0];
        point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
		map.setCenter(point, 13);
        marker = new GMarker(point);
        map.addOverlay(marker);
        marker.openInfoWindowHtml('<span class="fumetto">' + place.address + '<br>' + '<b>Stato:</b> ' + place.AddressDetails.Country.CountryNameCode + '</span>');
      }
    }
// ----------------------


function getDirections() {
	var saddr = document.getElementById("saddr").value;
	var daddr = document.getElementById("daddr").value;
	gdir = new GDirections(map, document.getElementById("strade"));
	changelight('risultati','ricerca', 'rislink', 'riclink');
	gdir.load("from: "+saddr+" to: "+daddr);
      // === Array for decoding the failure codes ===
      var reasons=[];
      reasons[G_GEO_SUCCESS]            = "Success";
      reasons[G_GEO_MISSING_ADDRESS]    = "Missing Address: The address was either missing or had no value.";
      reasons[G_GEO_UNKNOWN_ADDRESS]    = "Unknown Address:  No corresponding geographic location could be found for the specified address.";
      reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";
      reasons[G_GEO_BAD_KEY]            = "Bad Key: The API key is either invalid or does not match the domain for which it was given";
      reasons[G_GEO_TOO_MANY_QUERIES]   = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
      reasons[G_GEO_SERVER_ERROR]       = "Server error: The geocoding request could not be successfully processed.";
      reasons[G_GEO_BAD_REQUEST]        = "A directions request could not be successfully parsed.";
      reasons[G_GEO_MISSING_QUERY]      = "No query was specified in the input.";
      reasons[G_GEO_UNKNOWN_DIRECTIONS] = "The GDirections object could not compute directions between the points.";
      // === catch Directions errors ===
      GEvent.addListener(gdir, "error", function() {
        var code = gdir.getStatus().code;
        var reason="Code "+code;
        if (reasons[code]) {
          reason = reasons[code]
        } 
        alert("Failed to obtain directions, "+reason);
	}); 
}


//-------- ICONCINE PARCHI
var markerArray = [];
var myxml = [];
function loadxml(){
	GDownloadUrl(server+"parchi.xml", function(data) {
	var xml = GXml.parse(data);
	var markers = xml.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length; i++) {
            var myid = markers[i].getAttribute("id");
			var title = markers[i].getAttribute("title");
            var label1 = markers[i].getAttribute("label1");
			var label2 = markers[i].getAttribute("label2");
			var ico = markers[i].getAttribute("ico");
			var lat = markers[i].getAttribute("lat");
			var long = markers[i].getAttribute("long")
			
			if(label2!=""){label2="<a href="+label2+" target=\"_blank\">&raquo; Vai al sito del parco</a><br />"}
            var point = new GLatLng(parseFloat(lat),
                                    parseFloat(long)
									);
			myxml[myid] = new Array(point, title, label1, label2, ico, lat, long);
		}
	var markereve = xml.documentElement.getElementsByTagName("markereve");
        for (var i = 0; i < markereve.length; i++) {
            myid = markereve[i].getAttribute("id");
            area = markereve[i].getAttribute("area");
			sede = markereve[i].getAttribute("sede");
			comuni = markereve[i].getAttribute("comuni");
			code = markereve[i].getAttribute("code");
			oggetto = markereve[i].getAttribute("oggetto");
			lat = markereve[i].getAttribute("lat");
			long = markereve[i].getAttribute("long")
            point = new GLatLng(parseFloat(lat),
                                parseFloat(long)
								);		
			myxml[myid] = new Array(point, area, sede, comuni, eventi[code]['img'], oggetto, code, myid, lat, long);
		}
	})
}

function createSidebarEntry(icona, testo, id) {
      var div = document.createElement('div');
	  div.id = "ris_"+id;
	  div.style.padding = "10px";
	  div.style.position = "relative";   
	  eimg = document.createElement("img");// img
	  eimg.setAttribute("src", icona);
	  eimg.className="alignleft"
	  eimg.style.position = "relative";   
	  breaker = document.createElement("div");// Breaker
	  breaker.style.clear="both";
	  div.appendChild(eimg);
	  div.appendChild(document.createTextNode(testo)); //nome
	  div.appendChild(breaker);
      div.style.cursor = 'pointer';
      GEvent.addDomListener(div, 'click', function() {
        GEvent.trigger(markerArray[id], 'click');
      });
      GEvent.addDomListener(div, 'mouseover', function() {
        div.style.backgroundColor = '#61881A';
		div.style.color="#FFFFFF"
      });
      GEvent.addDomListener(div, 'mouseout', function() {
        div.style.backgroundColor = '#E8F1D4';
		div.style.color="#000000"
      });
      return div;
}


function showicon(id, checked, arra){
	if(checked){
		if(myxml[id]){
			if(!markerArray[id]){
  				var marker = createMarker(myxml[id][0], myxml[id][1], myxml[id][2], myxml[id][3], myxml[id][4]);
				map.addOverlay(marker);
				markerArray[id] = marker;
				var sidebarEntry = createSidebarEntry(myxml[id][4], myxml[id][1]);
         		document.getElementById('punti').appendChild(sidebarEntry);
			}
		}
	}
	else if (markerArray[id]){
		if(riconosciuti[id]!=undefined && proposti[id]!=undefined ){
			if (arra==proposti || arra==riconosciuti){
				if((proposti[id].geoXml==false || proposti[id].geoXml==undefined) && (riconosciuti[id].geoXml==false || riconosciuti[id].geoXml==undefined)){
					map.removeOverlay(markerArray[id])
					markerArray[id]=false;
					delElementById('ris_'+id);
				}
			}
		}
		else{
			map.removeOverlay(markerArray[id])
			markerArray[id]=false;
			delElementById('ris_'+id);
		}
	}
}
function createMarker(point, title, label1, label2, ico) {
    var imgage = new GIcon();
    imgage.image = ico;
    imgage.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png';
    imgage.iconSize = new GSize(20, 20);
    imgage.shadowSize = new GSize(22, 20);
    imgage.iconAnchor = new GPoint(4, 32);
    imgage.infoWindowAnchor = new GPoint(5, 1);
	var marker = new GMarker(point, imgage);
	var infoTabs = [
		new GInfoWindowTab("Indirizzo", "<div class=\"fumetto\"><h3>"+ title +"</h3>"+label2+"<br />" + label1 + "</div>"),
		new GInfoWindowTab("Percorso", "<div class=\"fumetto\"><form action=\"javascript:getDirections()\"><h3>Partenza:</h3><br />Indirizzo (ad es. 'Via Vivaio 1, Milano')<br /><br /><input type=\"text\" size=\"50\" maxlength=\"50\" name=\"daddr\" id=\"daddr\" value=\"\" /> <input type=\"hidden\" id=\"saddr\" value=\""+point.lat()+","+point.lng()+"\"><input type=\"submit\" value=\"Calcola\"></form></div>")
	];
    GEvent.addListener(marker, 'click', function(){
    	marker.openInfoWindowTabsHtml(infoTabs);
    });
	return marker;
}

function eventinvia(){
	var input = document.getElementById('eventi').getElementsByTagName('input');
			for (i = 0; i < input.length; i++){
				if(input[i].checked==true){
				for(x in myxml){
					if(myxml[x][6]==input[i].id && !markerArray[x]) {
						  	var marker = createMarker(myxml[x][0], eventi[input[i].id]['name'], "<img style=\"float:left; margin-right:8px;\" src=\"img/JPG/"+myxml[x][4]+".jpg\"><div style=\"margin-left:90px;\"><strong>Area</strong>:<br/>" + myxml[x][1]+"<br/><br/><strong>Tipologia di segnalazione</strong>:<br/>"+myxml[x][2]+"<br/><br/><strong>Comuni interessati</strong>:<br/>"+myxml[x][3]+"<br/><br/><strong>Oggetto segnalazione</strong>:<br />"+myxml[x][5]+"</div>", "", "img/GIF/"+myxml[x][4]+".gif");
							map.addOverlay(marker);
							markerArray[x] = marker;
							var sidebarEntry = createSidebarEntry("img/GIF/"+myxml[x][4]+".gif", myxml[x][5], x);
         					document.getElementById('punti').appendChild(sidebarEntry);
						}
					}

				}
				else{
					for(x in myxml){
						if(markerArray[x] && myxml[x][6]==input[i].id){
								map.removeOverlay(markerArray[x])
								markerArray[x]=false;
								delElementById('ris_'+x);
						}
					}
				}
			};
	closeavanzata()
	changelight('risultati','ricerca', 'rislink', 'riclink');
	}
