// JavaScript Document

var map; // oggetto mappa
var side_bar_html = ""; // menu laterale
var points = []; // punti lat / lng
var gmarkers = []; // array marker sulla mappa
var htmls = []; // array contenuto info windows
var initZoom; // Zoom iniziale
var initCenter; // Centro iniziale

function getUrl(){
	if(window.location.href.indexOf('#') > -1) {
		return window.location.href.substring(0, window.location.href.indexOf('#'));
    } else {
		return window.location.href;
    }
}

function showInfoWin(i){
	GEvent.trigger(gmarkers[i], "click");
}

function zoomIn(id){
	var point = points[id];
	var lat = parseFloat(point.lat);
	var lng = parseFloat(point.lng);
	var point = new GLatLng(lat, lng);
	map.setZoom(16);
	map.setCenter(point);
	map.closeInfoWindow();
}

function zoomOut(){
	map.setZoom(initZoom);
	map.setCenter(initCenter);
	map.closeInfoWindow();
	hideCircoli();
}

var PromoControl = function(url){
	this.url_ = url;
}
PromoControl.prototype = new GControl(true);
PromoControl.prototype.initialize = function(map){
	var container = document.createElement("div");
	container.innerHTML = '<img style="cursor: pointer" src="images/zoomUp.gif" border="0" alt="Tutti i circoli">';
	container.style.width = '43px';
	container.style.height = '11px';
	 
	GEvent.addDomListener(container, "click", function(){
		zoomOut();
	});
	 
	map.getContainer().appendChild(container);
	 
	return container;
}
PromoControl.prototype.getDefaultPosition = function(){
	return new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(30, 15));
}

function showCircolo(id, ifw){
	elem = $$('div.schedaCircolo'); 	
	elem.each(function(s, index) {
					   s.style.display = 'none';
					   });
	
	$('circolo-' + id).style.display = 'block';
	if(ifw == true) showInfoWin(id);
	
	if(map.getZoom() >= 16){
		$('zoomin-' + id).style.display = 'none';
		$('zoomout-' + id).style.display = 'inline';
	} else if(map.getZoom() <= initZoom){
		$('zoomin-' + id).style.display = 'inline';
		$('zoomout-' + id).style.display = 'none';
	} else{
		$('zoomin-' + id).style.display = 'inline';
		$('zoomout-' + id).style.display = 'inline';
	}
	
	url = getUrl();
	window.location.href = url + "#circolo" + id;
}

function hideCircoli(){
	elem = document.getElementsByClassName('schedaCircolo'); 	
	elem.each(function(s, index) {
					   s.style.display = 'none';
					   });
	
	url = getUrl();
	window.location.href = url + "#";
}

function showCircoloOnLoad(){
	if(window.location.hash != ''){
		if(window.location.hash.indexOf('#circolo') > -1) {
			id = window.location.hash.replace('#circolo', "");
			showCircolo(id, true);
		}
	}
}

function loadMapCircoli(idMap, idSidebar){
	if(GBrowserIsCompatible()){
	
		var prcIcon = new GIcon();
		prcIcon.image = "images/mm_20_3d_red.png";
		prcIcon.iconSize = new GSize(12, 20);
		prcIcon.iconAnchor = new GPoint(6, 20);
		prcIcon.infoWindowAnchor = new GPoint(6, 4);
		
		function createMarker(point, name, html, id){
			var marker = new GMarker(point, prcIcon);
			GEvent.addListener(marker, "click", function(){
				marker.openInfoWindowHtml(html);
				showCircolo(id, false);
			});
			gmarkers[i] = marker;
			htmls[i] = html;
			side_bar_html += '<tr class="odd" id="trMenu-' + i + '" onmouseover="$(\'trMenu-' + i + '\').addClassName(\'oddOver\');" onmouseout="$(\'trMenu-' + i + '\').removeClassName(\'oddOver\');"><td>' + name + '</td></tr>';
			return marker;
		}
		
		map = new GMap2($(idMap));
		map.addControl(new GSmallZoomControl());
		map.addControl(new GMapTypeControl());
		map.addControl(new PromoControl());
		map.setCenter(new GLatLng(0,0),0);
		map.setMapType(G_HYBRID_MAP);
		
		var bounds = new GLatLngBounds();
		
		side_bar_html = '<table width="100%" cellpadding="5" class="tableCircoli">';
		
		for(i in points){
			i =	parseInt(i);
			if(i > 0){
				var lat = parseFloat(points[i].lat);
				var lng = parseFloat(points[i].lng);
				var point = new GLatLng(lat,lng);
				var html = points[i].html;
				var label = points[i].label;
				var marker = createMarker(point, label, html, i);
				map.addOverlay(marker);
				
				bounds.extend(point);
			}
		}
		
		side_bar_html += '</table>';
		
		$(idSidebar).innerHTML = side_bar_html;
		
		initZoom = map.getBoundsZoomLevel(bounds);
		map.setZoom(initZoom);
		
		initCenter = bounds.getCenter();
		map.setCenter(initCenter);
		
		showCircoloOnLoad();
	} else{
		alert("Spiacente, il tuo browser non è compatibile con Google Maps API");
	}
}

function showMunicipio(id){
	elem = $$('div.schedaMunicipio'); 
	elem.each(function(s, index) {
					   s.style.display = 'none';
					   });
	
	$('municipio-' + id).style.display = 'block';
	
	url = getUrl();
	window.location.href = url + "#municipio" + id;
}

function showMunicipioOnLoad(){
	if(window.location.hash != ''){
		if(window.location.hash.indexOf('#municipio') > -1) {
			id = window.location.hash.replace('#municipio', "");
			showMunicipio(id);
		}
	}
}

function loadMapMunicipi(idMap){
	if(GBrowserIsCompatible()){
	
		function createMarkerLabel(point, label){ // Overlay di tipo label
			var mrk = new ELabel(point, label, "labelStyle");
			return mrk;
			
		}

		/*function getCoord(overlay, point){
			html = "Lat: " + point.lat();
			html += "<br />";
			html += "Lon: " + point.lng();
			$('coordinate').innerHTML = html;
		}*/
		
		map = new GMap2($(idMap));
		map.addControl(new GSmallZoomControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(0,0),0);
		map.setMapType(G_HYBRID_MAP);
		
		//GEvent.addListener(map, "click", getCoord);
		
		var bounds = new GLatLngBounds();
		
		for(var i = 0; i < points.length; i++){
			var lat = parseFloat(points[i].lat);
			var lng = parseFloat(points[i].lng);
			var point = new GLatLng(lat,lng);
			var label = points[i].label;
			var marker = createMarkerLabel(point, label);
			map.addOverlay(marker);
			
			bounds.extend(point);
		}
				
		initZoom = map.getBoundsZoomLevel(bounds);
		map.setZoom(initZoom);
		
		initCenter = bounds.getCenter();
		map.setCenter(initCenter);
		
		showMunicipioOnLoad();
	} else{
		alert("Spiacente, il tuo browser non è compatibile con Google Maps API");
	}
}

function loadMapNews(title) {

	var prcIcon = new GIcon();
	prcIcon.image = "images/mm_20_3d_red.png";
	prcIcon.iconSize = new GSize(12, 20);
	prcIcon.iconAnchor = new GPoint(6, 20);
	prcIcon.infoWindowAnchor = new GPoint(6, 4);

	// Crea un punto di ancoraggio sulla mappa
	function createMarker(point, label, addr) {
		var marker = new GMarker(point);
		GEvent.addListener(marker, "click", function() {
			marker.openInfoWindowHtml(label);
		});
		return marker;
	}
					  
	if (GBrowserIsCompatible()) {
		var map = new GMap2($("map_city"));
		map.addControl(new GSmallZoomControl());
		map.setCenter(new GLatLng(0,0),0);
		map.setMapType(G_NORMAL_MAP);
		var bounds = new GLatLngBounds();
		for(i = 0; i < points.length; i++){
			point = new GLatLng(points[i]['lat'],points[i]['lon']);
			map.addOverlay(createMarker(point, points[i]['lbl'], points[i]['ind']));
			bounds.extend(point);
		}
		map.setZoom(map.getBoundsZoomLevel(bounds));
		map.setCenter(bounds.getCenter());
	}
}

function initScrollLayer() {
	var wndo = new dw_scrollObj('wn', 'side_bar');
	wndo.setUpScrollbar("dragBar", "track", "v", 1, 1);
	dw_scrollObj.GeckoTableBugFix('wn'); 
}
