﻿// Funzioni
var initGMaps;
var loadMarker;
var showhideMarker;
var showhideList;
var checkUncheckCheckboxes;

(function($){
	var IDChecked = [];
	var urlBaseMarker;
	var bWithCB;
	// Oggetti
	var map;
	var gmarkers = [];
	var imageCache;
	
	if(typeof G_DEFAULT_ICON != 'undefined'){
		G_DEFAULT_ICON.iconSize=new GSize(32,37);
		G_DEFAULT_ICON.iconAnchor=new GPoint(12,32);
		G_DEFAULT_ICON.infoWindowAnchor=new GPoint(12,18);
	}

	showhideMarker = function(o,nID,father){
		if(father){
			$.each(gmarkers[nID],function(i,v){($(o).attr('checked')?v.marker.show():v.marker.hide());found=true});
			$.each(gmarkers[nID].submarkers,function(i,v){if(v)$.each(v,function(i,v){($(o).attr('checked')?v.marker.show():v.marker.hide())})});
		}else{
			$.each(gmarkers,function(i,v){if(v&&v.submarkers[nID])$.each(v.submarkers[nID],function(i,v){(v.marker.isHidden()?v.marker.show():v.marker.hide())})});
		}
	}
	
	showhideList = function(o){
		$(o).parent().next().toggle('blind',{},200,function(){$(o).children().text(($(o).parent().next().is(":visible")?'-':'+'))});		
	}
	
	checkUncheckCheckboxes = function(o){
		if(o.checked)$(o).parent().parent().find('ul li input').not(':checked').click();
		else $(o).parent().parent().find('ul li input:checked').click();
	}

	var Gmaps_onmove = function(){
		if ($('#gmap_info')){
			$('#mbincaricamento').css('display','block');
			$.ajax({type: "GET",url:urlBaseMarker,dataType:"json",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');
		}
	}
	
	var isChecked = function(id){
		if(IDChecked.length){
			if($.inArray(id,IDChecked) > -1) return true;
			else return false;
		}else return true;
	}
	
	var isWithCB = function(b){
		if(b && b == false) return false;
		return true;
	}
	
	var getHTMLElementList = function(id,label,imgsrc,grpcb,withmnu){
		return '<div class="contentli">'+(imgsrc>''?'<img src="'+imgsrc+'"/>':'')+'<input type="checkbox" id="chk'+id+'" name="chk'+id+'" '+((isChecked(id)) ? 'checked="checked"' : '')+' onClick="'+(grpcb?'checkUncheckCheckboxes(this);':'')+'showhideMarker(this,'+id+(grpcb?',1':',0')+');$(this).parents(\'li\').find(\'>ul.list\').toggleClass(\'show\')" /><label for="chk'+id+'"><span>'+label+'</span></label>'+((withmnu)?'<a href="javascript:;" onclick="showhideList(this)" title="Mostra altri elementi"><span>+</span></a>':'')+'</div>';
	}
	
	var createElementsList = function(){
		var html = '';
		
		// Aggiunto la categoria alla lista
		$.each(gmarkers,function(i,v){
			if(v){
				html += '<li id="li-gicon-'+v.id+'">'+getHTMLElementList(v.id,v.label,v.url,true,(v.submarkers.length>0))+'<ul class="nav" style="display:none">';
				$.each(v.submarkers,function(i,v){
					if(v)html += '<li id="li-gicon-'+v.id+'">'+getHTMLElementList(v.id,v.label,v.url)+'</ll>';
				});
				html += '</ul></li>';
			}
		});
		return html;
	}
		
	loadMarker = function(jsonData){
		if ($('#side_bar_tipologie')){
			$.each(jsonData.icontype,function(i,vv){
				var idicona = vv.id;
				
				// Setto l'icona del punto
				var cGIcon = new GIcon(G_DEFAULT_ICON, vv.url) ;
				cGIcon.printImage = vv.url;
				cGIcon.mozPrintImage = vv.url;
				cGIcon.shadow = null;
				
				// Setto il punto
				$.each(jsonData.markers,function(i,v){
					if(v.idicona == idicona){
						if(v.show){
							var marker;
							var point = new GLatLng(v.lat, v.lng);
							
							if(!isChecked(v.idicona) && isWithCB(bWithCB))marker = new GMarker(point,{icon:cGIcon,hide:true});
							else marker = new GMarker(point,{icon:cGIcon});
							if(v.html!='') GEvent.addListener(marker, "click", function(){
								// Precaching dell'immagine prima di caricare il palloncino
								var s = v.html.match(/<\s*img[^>]+src\s*=\s*("(.*?)"|'(.*?)')/i);
								var t;
								if(s) t = (s[2]) ? s[2] : s[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(v.html);
							});
							map.addOverlay(marker);
						}
						var id = idicona;
						if(!v.idpadre){
							if(!gmarkers[id]){
								gmarkers[id] = [];
								gmarkers[id].id = idicona;
								gmarkers[id].label = vv.label;
								gmarkers[id].url = vv.url;
								gmarkers[id].submarkers = [];
							}
							if(v.show)gmarkers[id].push({marker:marker,id:v.idicona,html:v.html,label:v.label});
						}else{
							id = v.idpadre;
							if(!gmarkers[id].submarkers[v.idicona]){
								gmarkers[id].submarkers[v.idicona] = [];
								gmarkers[id].submarkers[v.idicona].id = idicona;
								gmarkers[id].submarkers[v.idicona].label = vv.label;
								gmarkers[id].submarkers[v.idicona].url = vv.url;
							}
							if(v.show)gmarkers[id].submarkers[v.idicona].push({marker:marker,id:v.idicona,html:v.html,label:v.label});
						}
					}
				});
			});
			$('#side_bar_tipologie').html('<ul><li><ul class="nav">' + createElementsList() + '</ul></li></ul>');
		}
		$('#side_bar_tipologie a[title]').qtip();
		$('#mbincaricamento').css('display','none');
	}

	initGMaps = function(sDivMap,dLat,dLng,dZoom,sUrlBaseMarkers,nIDIcona,WithCB){
		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 GLargeMapControl3D());
				map.addMapType(G_PHYSICAL_MAP);
				map.addMapType(G_SATELLITE_3D_MAP);
				map.addControl(new GScaleControl()); // impongo che i comandi per selezionare la mappa si visualizzino in una tendina
				map.addControl(new GMenuMapTypeControl());
				map.getPane(G_MAP_FLOAT_SHADOW_PANE).style.visibility="hidden";
				
				bWithCB = WithCB;
				//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 ;
				marker = new GMarker(new GLatLng(dLat,dLng),{icon:cGIcon});
				map.addOverlay(marker);
			}
		}
		else alert("Sorry, the Google Maps API is not compatible with this browser");
	}
})(jQuery);
