var map;
var geocoder;

if (document.domain == "provincia.milano.it" || document.domain == "www.provincia.milano.it") {
	server = "http://www.provincia.milano.it/mappe/pattonordmilano/"
} else if (document.domain == "provincia.mi.it" || document.domain == "www.provincia.mi.it") {
	server = "http://www.provincia.mi.it/mappe/pattonordmilano/"
}


function onLoad() {
  map = new GMap2(document.getElementById("map"),{draggableCursor: 'crosshair', draggingCursor: 'move'});
  map.setCenter(new GLatLng(45.457028, 9.186067), 11);
  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();
} 
var visualizza = {
	 "milano":					{"url" : server+"confini_provincia_milano.kmz"},
	 "monza":					{"url" : server+"confini_provincia_monza.kmz"},
	 "comuni":					{"url" : server+"confini_comuni_milano.kmz"}
}
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
	}
}

function resetall(){
	map.clearOverlays();
	var inputric = document.getElementById('ricerca').getElementsByTagName('input');  for (var xy in inputric){inputric[xy].checked = false};
	changelight('ricerca','risultati', 'riclink', 'rislink');
	document.getElementById('strade').innerHTML = "<div style=\"padding:10px;\">Nessun Percorso selezionato</div>";
	document.getElementById('calendario').innerHTML= "";
	loadxml();
	map.setCenter(new GLatLng(45.457028, 9.186067), 11);
	}


// ------ 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;
	document.getElementById('strade').innerHTML = "";
	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
var markerArray = [];
var myxml = [];
function loadxml(){
	GDownloadUrl("patto_nord.xml?&nocache="+Math.random(), 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 data = markers[i].getAttribute("data");
			var ore = markers[i].getAttribute("ore");
			var title = markers[i].getAttribute("title");
            var indirizzo = markers[i].getAttribute("indirizzo");
			var comune = markers[i].getAttribute("comune");
			var links = markers[i].getAttribute("link");
			var lat = markers[i].getAttribute("lat");
			var long = markers[i].getAttribute("long")
            var point = new GLatLng(parseFloat(lat),
                                    parseFloat(long)
									);
			myxml[myid] = new Array(point, data, ore, title, indirizzo, comune, links, lat, long);
			//var sidebarEntry = createSidebarEntry(myid);
			showicon(myid)
		}
	})
}

function createSidebarEntry(id) {
      var div = document.createElement('div');
	  div.id = "ris_"+id;
	  div.className = "divris";
	  div.style.padding = "4px 10px 4px 10px";
      var html = myxml[id][1]+'<br /><strong>' + myxml[id][3] + '</strong><div style="clear:both"></div>';
      div.innerHTML = html;
      div.style.cursor = 'pointer';
      GEvent.addDomListener(div, 'click', function() {
        GEvent.trigger(markerArray[id], 'click');
      });
      GEvent.addDomListener(div, 'mouseover', function() {
        div.style.backgroundColor = '#666699';
		div.style.color="#FFFFFF"
      });
      GEvent.addDomListener(div, 'mouseout', function() {
        div.style.backgroundColor = '#FFA900';
		div.style.color="#000000"
      });
      return div;
}


function showicon(id){
  	var marker = createMarker(myxml[id][0], myxml[id][1], myxml[id][2], myxml[id][3], myxml[id][4], myxml[id][5], myxml[id][6]);
	map.addOverlay(marker);
	markerArray[id] = marker;
	var sidebarEntry = createSidebarEntry(id);
    document.getElementById('calendario').appendChild(sidebarEntry);
}
function createMarker(point, data, ore, title, indirizzo, comune, links) {
    var imgage = new GIcon();
    imgage.image = server + "img/icona_pattonord.png";
    imgage.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png';
    imgage.iconSize = new GSize(35, 32);
    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\">"+data+" - ore " + ore + "<h3>"+ title + "</h3>" + comune + ", " +indirizzo + "<br /><br /><a href=\""+ links +"\" title=\"Vai alla pagina di dettaglio\" target=\"_blank\">&raquo; Vai alla pagina di dettaglio</a></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;
}

