﻿// Funzioni
var initGMaps;
var toggleLayer;
var loadMarker;

// Oggetti
var map;
var layers = [];
var layerControl;
var imageCache;

(function($){
	var markerId = [];
	var gmarkers = [];
	var labels = [];
	var htmls = [];
	var gicons = [];
	var gicon_markers = [];
	var gindex = 0;
	var urlBaseMarker;
	
	G_DEFAULT_ICON.iconSize=new GSize(24, 32);
	G_DEFAULT_ICON.iconAnchor=new GPoint(12, 32);
	G_DEFAULT_ICON.infoWindowAnchor=new GPoint(12, 18);

	var createMarker = function(point,name,html,gicon){
		var marker = new GMarker(point,gicon);
		if(html!='') GEvent.addListener(marker, "click", function(){
			// Precaching dell'immagine prima di caricare il palloncino
			var pippo = html.match(/<\s*img[^>]+src\s*=\s*("(.*?)"|'(.*?)')/i);
			var t;
			if(pippo) t = (pippo[2]) ? pippo[2] : pippo[3];
			if(t){
				// Queste istruzioni servono per mantenere le immagini, sennò il garbage collector di Firefox pensa che siano cose che non servono più
				if(imageCache) imageCache = $('body').append('<div id="img-cache" style="display:none/>').children('#img-cache');
				$('<img/>').attr('src', t).appendTo(imageCache);
			}
			// Istruzione per aprire il palloncino
			marker.openInfoWindowHtml(html,{maxWidth:600});
		});
		gmarkers[gindex] = marker;
		htmls[gindex] = html;
		labels[gindex] = name;
		gindex++;
		return marker;
	}

	var showhideMarker = function(nID){
		$.each(gicon_markers[nID],function(i,v){
			if(gmarkers[v].isHidden()) gmarkers[v].show()
			else gmarkers[v].hide()
		});
	}

	var markerClick = function(nIndex){
		gmarkers[nIndex].openInfoWindowHtml(htmls[nIndex],{maxWidth:600});
	}

	var searchString = function(arrayToSearch,stringToSearch){
		$.each(arrayToSearch,function(i,v){if(v == stringToSearch) return true});
		return false;
	}
	  
	var Gmaps_onmove = function() {
		var sQuery = 'OLat=' + map.getBounds().getSouthWest().lat() + '&ELat=' + map.getBounds().getNorthEast().lat() + '&NLng=' + map.getBounds().getNorthEast().lng() + '&SLng=' + map.getBounds().getSouthWest().lng() 
		if ($('#gmap_info')){
			$.ajax({type: "GET",url:urlBaseMarker,dataType:"json",data:sQuery,success:loadMarker});
			$('#gmap_info').empty();
		}
	}

	var Gmaps_onzoom = function() {
		if ($('#gmap_info')){
			if (map.getZoom() >= 15)
				$('#gmap_info').empty();
			else
				$('#gmap_info').html('A queto livello di zoom non è possibile visulizzare le fermate');
		}
	}	
		
	loadMarker = function(jsonData){
		if ($('#side_bar_tipologie')){
			side_bar_tipologie_html = '<ul id="nav">';
			$.each(jsonData.icontype,function(i,v){
				if (!gicons[v.id]){
					var cGIcon = new GIcon(G_DEFAULT_ICON, v.url) ;
					cGIcon.printImage = v.url;
					cGIcon.mozPrintImage = v.url;
					gicons[v.id] = cGIcon;
					gicon_markers[v.id] = [];
				}
				side_bar_tipologie_html += '<li id="li-gicon-'+v.id+'"><div class="contentli">';
				side_bar_tipologie_html += '<img src="'+v.url+'" /><input type="checkbox" id="chk'+v.id+'" name="chk'+v.id+'" checked="checked" onClick="showhideMarker('+v.id+');" /><label for="chk'+v.id+'"><span>'+v.label+'</span></label></div>';
				side_bar_tipologie_html += '</li>';
			});
			side_bar_tipologie_html += '</ul>';
			$('#side_bar_tipologie').html(side_bar_tipologie_html);
		}
		
		$.each(jsonData.markers,function(i,v){
			if(!markerId[v.id]){
				markerId[v.id] = 1;
				gicon_markers[v.idicona].push(gindex);
				var point = new GLatLng(v.lat, v.lng);
				var marker = createMarker(point,v.label,v.html,gicons[v.idicona]);
				map.addOverlay(marker,0,17);
			}
		});
		
		// Abilitare questo pezzo di codice se si vuole stampare i figli delle tipologie
		$.each(jsonData.icontype,function(i,v){
			var li = $('#li-gicon-'+v.id);
			var side_bar_tipologie_html_markers = ''
			if(li){
				side_bar_tipologie_html_markers = '<ul>';
				$.each(gicon_markers[v.id],function(i,v){side_bar_tipologie_html_markers += '<li><a href="javascript:markerClick('+v+');"><span>'+labels[v]+'</span></a></li>';});
				side_bar_tipologie_html_markers += '</ul>';	
				li.append(side_bar_tipologie_html_markers);
			}
		});
	}

	initGMaps = function(sDivMap,dLat,dLng,dZoom,sUrlBaseMarkers,nIDIcona){
		if (GBrowserIsCompatible()){
			window.unload = GUnload();
			map = new GMap2(document.getElementById(sDivMap)); 
			map.enableScrollWheelZoom();
			map.setCenter(new GLatLng(dLat,dLng),dZoom);
			GEvent.addListener(map, "moveend", Gmaps_onmove);
			//GEvent.addListener(map, "zoomend", Gmaps_onzoom);	   
			urlBaseMarker = sUrlBaseMarkers;
			if (sUrlBaseMarkers!=''){
				map.addControl(new GLargeMapControl());
				map.addControl(new GMapTypeControl());
				map.enableGoogleBar();

				//fine comandi per attivazione controllo wikipedia e panoramio
				Gmaps_onmove()
			}
			else{
				map.addControl(new GSmallZoomControl3D());
				var cGIcon = 	new GIcon(G_DEFAULT_ICON, nIDIcona ) ;
				cGIcon.printImage =  nIDIcona ;
				cGIcon.mozPrintImage =  nIDIcona ;
				var marker = createMarker(new GLatLng(dLat,dLng), '', '', cGIcon);
				map.addOverlay(marker);
			}
		}
		else alert("Sorry, the Google Maps API is not compatible with this browser");
	}
})(jQuery);