/* Copyright 2007-2009 SCube NewMedia. */
/** ============ API ============= */
document.write('<script src="script/common.js" type="text/javascript"></script>');
document.write('<script src="script/listatitoli.js" type="text/javascript"></script>');
document.write('<script src="slider/js/range.js" type="text/javascript"></script>');
document.write('<script src="slider/js/timer.js" type="text/javascript"></script>');
document.write('<script src="slider/js/slider.js" type="text/javascript"></script>');
document.write('<link type="text/css" rel="stylesheet" href="slider/css/luna/luna.css" />');
document.write('<script src="script/menu.more.js" type="text/javascript"></script>');

/** ============ COSTANTI ============= */
var SLIDER_MININUM_RADIUS = 100;
/** occupazione ricerca avanzata */
var AVANZATA_WIDTH = 626;
var AVANZATA_HEIGHT = 560;

/** ============ VARIABILI ============= */
// oggetti presenti nel template
var ricerca, risultati, ricercavanzata, slider;
// esportazione per "Google Earth"
var ActiveTabbedEarth, gearth, gearth_query;

// coordinate dell'indirizzo su mappa ottenuto da una ricerca per vicinanza
var PointNearAddress = null;

// gestiore dello slider
var SliderObj = null;

// struttura dati da mandare in stampa
var PrintParameters = {};

/** ============ EVENTI ============= */
//gestione evento "onload"
if (window.addEventListener) {
	window.addEventListener("load", loadTemplate, false);
	window.addEventListener("resize", resizeTemplate, false);
} else if (window.attachEvent) {
	window.attachEvent("onload", loadTemplate);
	window.attachEvent("onresize", resizeTemplate);
};

/**
 * Gestione evento "load".
 */
function loadTemplate() {
	// creazione mappa e gestione parti comuni
	initialize();
	
	// Creates a collapsible overview map in the corner of the screen.
	Gmap.addOverviewMapControl();
	// Creates a control with buttons to switch between map types.
	Gmap.addHierarchicalMapTypeControl();
	// Creates a drop-down map type control for switching between supported map types.
	//Gmap.addMenuMapTypeControl(); 
	// enables double click to zoom in and out (disabled by default).
	Gmap.enableDoubleClickZoom();
	// Installs keyboard event handler for the map passed as argument.
	Gmap.enableKeyboardHandler();
	// Creates a control with buttons to pan in four directions, and zoom in and zoom out, and a zoom slider.
	Gmap.addLargeMapControl();
	// Enables wheel zoom
	Gmap.enableScrollWheelZoom();
	// Enables continuous smooth zooming for select browsers (disabled by default).
	Gmap.enableContinuousZoom();
	// Creates a collapsible overview map in the corner of the screen.
	Gmap.addOverviewMapControl();
	// Selects the given new map type. The type must be known to the map.
	Gmap.setMapType(G_PHYSICAL_MAP);
	
	// load "More..." control
	loadMomeControl(Gmap);
	
	// gestione aree di scorrimento
	init()

	// caricamento layer porgetto per definizione stili grafici 
	Gmap.getListLayerAsync(function(){});
	
	// gestione ricerca indirizzo
	var cercaindirizzo = document.forms["cercaindirizzo"];
	cercaindirizzo.onsubmit = function(){searchAddress(this.q.value);return false;};
	// gestione calcola percorso
	var calcolapercorso = document.forms["calcolapercorso"];
	calcolapercorso.onsubmit = function(){calcolaPercorso(this.saddr.value, this.daddr.value, null, this.mode.value);return false;};

	// gestione ricerca "vicinoa"
	var vicinoa = document.forms["vicinoa"];
	vicinoa.onsubmit = function(){searchDataNearAddress(this);return false;};
	vicinoa.reset();
	
	// gestione ricerca "cercaper"
	var cercaper = document.forms["cercaper"];
	cercaper.nation.disabled = true;
	cercaper.city.disabled = true;	
	cercaper.onsubmit = function(){searchData(this);return false;};
	cercaper.reset();

	// gestione ricerca "google earth"
	gearth = document.forms["gearth"];
	gearth.nation.disabled = true;
	gearth.city.disabled = true;	
	gearth.onsubmit = function() {
		var url = "http://" + HOST + "/Server/servlet/S3JXServletCall?method_name=GetObject&json=0&output=kmz&frontend=gearth&progetto=" + PROGETTO + "&licenza=" + LICENSE;
		if (ActiveTabbedEarth == 1) {
			var temp = PrintParameters[PRINT_DATA_LAYER];
			if (temp) {url += "&idLayer=" + temp;}
			temp = PrintParameters[PRINT_DATA_QUERY];
			if (temp) {url += "&query=" + encodeURIComponent(temp);}
			temp = PrintParameters[PRINT_DATA_PROXIMITY];
			if (temp) {
				url += "&distanza=" + temp;
				url += "&x=" + PointNearAddress.lng();
				url += "&y=" + PointNearAddress.lat();
			}

		} else {
			url += "&idLayer=" + LAYERS.SAMPLE;

			// costruzioen query
			var query = NO_QUERY;
			var nation = this.nation.value;
			var city = this.city.value;

			if (city != "NONE") {
				// gestione filtro city
				if (query != NO_QUERY) {query += OPERATOR_AND;}
				query += "[city]=[" + city + "]";
			} else if (nation != "NONE") {
				// gestione filtro nazione
				if (query != NO_QUERY) {query += OPERATOR_AND;}
				query += "[nation]=[" + nation + "]";
			}
			
			if (query != NO_QUERY) {url += "&query=" + encodeURIComponent(query);}
		}

		window.location = url;
		return false;
	};
	
	/* Nazione */
	Gmap.getListUserdataAsync("nation", /*query*/null, "default", function(listUserdata) {
		loadSelectOptions(cercaper.nation, listUserdata, "Select a Country");
		loadSelectOptions(gearth.nation, listUserdata, "All available");
	});
	// caricamento opzioni di ricerca (City)
	cercaper.nation.onchange = function(){
		// recupero il valore selezionato
		var valore = this.value;

		// selezioniamo la corrispettiva
		gearth.nation.selectedIndex = this.selectedIndex;
		
		// gestione opzioni di ricerca
		cercaper.city.disabled = true;
		cercaper.city.length = 0;

		// costruzione query
		var query = NO_QUERY;
		if (valore != "NONE") {
			// gestione opzioni di ricerca
			cercaper.nation.disabled = true;
			attachOption(cercaper.city, "NONE", "Loading, please wait ...");

			// caricamento opzioni di ricerca (Regione)
			Gmap.getListUserdataAsync("city", /*query*/"[nation]=[" + valore + "]", "default", function(listUserdata){
				// caricamento opzioni di ricerca
				loadSelectOptions(cercaper.city, listUserdata, "All available", false)

				// gestione opzioni di ricerca
				cercaper.nation.disabled = false;
			});
		} else {
			attachOption(cercaper.city, "NONE", "Select a City");
		}
	};
	gearth.nation.onchange = function(){
		// recupero il valore selezionato
		var valore = this.value;

		// gestione opzioni di ricerca
		gearth.city.disabled = true;
		gearth.city.length = 0;

		// costruzione query
		var query = NO_QUERY;
		if (valore != "NONE") {
			// gestione opzioni di ricerca
			gearth.nation.disabled = true;
			attachOption(gearth.city, "NONE", "Loading, please wait ...");

			// caricamento opzioni di ricerca (Regione)
			Gmap.getListUserdataAsync("city", /*query*/"[nation]=[" + valore + "]", "default", function(listUserdata){
				// caricamento opzioni di ricerca
				loadSelectOptions(gearth.city, listUserdata, "All available", false)

				// gestione opzioni di ricerca
				gearth.nation.disabled = false;
			});
		} else {
			attachOption(gearth.city, "NONE", "Select a City");
		}
	};
	
	// grafica
	ricerca = document.getElementById("ricerca");
	risultati = document.getElementById("risultati");
	ricercavanzata = document.getElementById("ricercavanzata");
	gearth_query = document.getElementById("gearth_query");
	

	// disabilitazione tabbed "risutlati"
	disableTabResult();
	
	// gestione resize template
	resizeTemplate();
	
	// settaggio posizione mappa
	Gmap.setCenter(LATITUDINE, LNGITUDINE, ZOOM);
	
	// gestione slider
	slider = document.getElementById("slider");
	var slider_value = document.getElementById("slider_value");
	SliderObj = new Slider(document.getElementById("slider-1"), document.getElementById("slider-input-1"));
	// SliderObj.setBlockIncrement(SLIDER_MININUM_RADIUS);
	// SliderObj.setUnitIncrement(SLIDER_MININUM_RADIUS);
	SliderObj.setMaximum(SLIDER_MININUM_RADIUS*2);
	SliderObj.setMinimum(SLIDER_MININUM_RADIUS);
	SliderObj.onchange = function () {
		if (PointNearAddress) {
			var value = SliderObj.getValue();
			// disegnamo un cerchio su mappa partendo secondo i parametri specificati.
			var raggio = (value / 1000);
			var quality = (raggio * 10);
			if (quality < 40) {quality = 40;}
			drawCircle(PointNearAddress, raggio, quality);

			// settaggio infomrazioni
			if (value >= 1000) {value = (value / 1000) + " KM"}
			else {value += " meters"}
			slider_value.innerHTML = value;
		}
	};
	// gestione notifica eventi
	var e = SliderObj.element;
	if (e.addEventListener) {
		e.addEventListener("mouseup", searchNearLatLngFromSlider, true);
	} else if (e.attachEvent) {
		e.attachEvent("onmouseup", searchNearLatLngFromSlider);
	};		
}
/**
 * Gestione evento "resize".
 */
var onresizeRunning = false;
function resizeTemplate() {
	// gestione temporizzazione resize
	if (xMac == false && xIE6 == false) {
		if (onresizeRunning == true) {return;}
		onresizeRunning = true;
	}
	
	if (navigator.appName=="Microsoft Internet Explorer"){
		x=document.documentElement.clientWidth;
		y=document.documentElement.clientHeight;
	} else {
		x=window.innerWidth;
		y=window.innerHeight;
	}

	/** Ricerca avanzata */
	var offsetLeft = ((x - AVANZATA_WIDTH) / 2);
	var offsetTop = ((y - AVANZATA_HEIGHT) / 2);
	ricercavanzata.style.top = ((offsetTop < 0)? 0:offsetTop) + "px";
	ricercavanzata.style.left = ((offsetLeft < 0)? 0:offsetLeft) + "px";

	// calcolo occupazione verticale
	y = y - (footerHeight+headerHeight);
	
	// gestione mappa
	resizemap(y);
	// Notifies the map of a change of the size of its container.
	Gmap.checkResize();

	// 30=occupazione tabbed "ricerca" e "risultati"
	spaz=20;
	ricerca.style.height = y-spaz + "px";
	risultati_cointainer = document.getElementById("risultati_cointainer");
	if (risultati_cointainer) {
		risultati.style.height = y-spaz + "px";
		risultati_cointainer.style.height = y-spaz-80 + "px";
	}
	else {risultati.style.height = y-spaz-10 + "px";}

	
	// gestione temporizzazione resize
	if (xMac == false && xIE6 == false) {window.setTimeout("onresizeRunning = false", 200);}

}
/** ============ BOTTOM ============= */
/**
 * Ricerca di un indirizzo tramite parametro
 */
function placeAddress(q) {
	var cercaindirizzo = document.forms["cercaindirizzo"];
	cercaindirizzo.q.value = q;
	searchAddress(q);
}
/**
 * Ricerca di un indirizzo
 */
function searchAddress(q) {
	try {
		// verifichiamo che l'informazione sia valida
		if (q.replace(/[^A-Za-z0-9]/g,"").length == 0) {
			// gestioen errore
			alert("No address entered");
		} else {

			// ricerchiamo l'indirizzo richiesto
			Gmap.searchAddress(q, /*countryCode*/ null, function(statusCode, name, response) {
				// disabilitazione tabbed "risutlati"
				disableTabResult();

				if (statusCode != SGEO_SUCCESS) {
					alert("Unable to locate address: \"" + name + "\"");
				} else {
					// numero di risultati prodotti dalla ricerca
					var nFound = response.length;
					
					if (nFound > 1) {
						// comunicazione messaggio utente
						var didyouHTML = "";

						// risultati multipli
						didyouHTML += "<h3>Did you mean:</h3>";
						didyouHTML += "<div id=\"risultati_cointainer\">"
						
						// Loop through the results
						for (var i = 0; i < nFound; i++) {
							var location = response[i];
							didyouHTML += "<div class=\"ref\"><a href=\"javascript:placeAddress('" + encodeURIComponent(location.getAddress().replace("'", "\\'")) + "')\">" + location.getAddress() + "</a></div>";
						}
						
						didyouHTML += "</div>"
						// comunicazione messaggio utente
						risultati.innerHTML = didyouHTML;

						// abilitazione tabbed "risutlati"
						enableTabResult();

						// gestione resize template
						resizeTemplate();
					}
				}
			});		
		}
	} catch(e) {
		toException(e);
	}
}
/**
 * Calcolo del percorso.
 * @param saddr indirizzo di partenza.
 * @param daddr indirizzo di arrivo.
 * @param dlatlng indirizzo di arrivo nel sistema cartografico WSG-84.
 * @param type tipologia di percorso, nel dettaglio: w=G_TRAVEL_MODE_WALKING (percorso "a pidie"), c=true (autostrade di preferenza) o c=false (alternatica alel autostrade).
 */
 function calcolaPercorso(saddr, daddr, dlatlng, type) {
	try {

		// verifichiamo che l'informazione sia valida
		if (saddr.replace(/[^A-Za-z0-9]/g,"").length == 0) {
			// gestione errore
			alert("Start address none");
			return false;
		}
		
		var indirizzo = daddr;

		// gestione coordinate
		if (dlatlng != null) {indirizzo = dlatlng;}
		// verifichiamo che l'informazione sia valida
		if (indirizzo.replace(/[^A-Za-z0-9]/g,"").length == 0) {
			// gestione errore
			alert("Destination address none");
			return false;
		}

		// opzioni di ricerca
		//var option = {"getSteps":"false","locale":"IT"};
		var option = {"getSteps":"false"};
		if (type == "w") {
			option.travelMode = G_TRAVEL_MODE_WALKING;
		} else if (type == "c") {
			option.avoidHighways = "false";
		}
		
		// calcolo percorso
		Gmap.getDirections([saddr, indirizzo], "risultati", option, function(statusCode) {
			// gestione errore
			if (statusCode != SGEO_SUCCESS) {
				// disabilitazione tabbed "risutlati"
				disableTabResult();
	
				// costruzione messaggio di errore
				var message = ERROR_PATH;
				message = message.replace("ERROR_PATH_FROM", saddr);
				message = message.replace("ERROR_PATH_TO", daddr);
				
				// gestione errore
				alert(message);
	
			} else {
				// elimianiamo le infomrazini caricate in precedenza
				risultati.innerHTML = "";
				risultati.style.height = parseInt(risultati.style.height)-10 + "px";
				
				// salvataggio informazioni di stampa
				savePrintDirection(saddr, indirizzo, type)

				// disabilitazione slider grafico
				slider.style.display = 'none';

				// eliminiamo i contenuti caricati
				Gmap.clear();
				// eliminiamo il possibile indirizzo (se presente) su mappa
				Gmap.removeAddress();
				// eliminiamo il possibile cerchio (se presente) su mappa
				Gmap.removeCircle();
	
				// abilitazione tabbed "risutlati"
				enableTabResult();
			}
		});
	} catch(e) {
		toException(e);
	}
}
/** ============ FUNZIONI ============= */
/**
 * Cancella tutti i contenuti caricati su mappa.
 */
 function resetall() {
	// eliminiamo le possibnili informazioni salvate per la stamap
	clearPrint();

	// disabilitazione slider grafico
	slider.style.display = 'none';
	 
	// eliminiamo tutti i contentui caricati su mappa
	Gmap.clearAll();
	 // settaggio posizione mappa
	Gmap.setCenter(LATITUDINE, LNGITUDINE, ZOOM);

	// disabilitazione tabbed "risutlati"
	disableTabResult();
}
 /**
  * Naviga su l'oggetto richiesto.
  * @param idPOI identificatore punto da raggiungere.
  * @param idLevel livello di appartenenza [opzionale].
  * @param bZoom true nel caso in cui si vule effetture lo zoom della mappa, false in caso contrario (false by default) [opzionale].
  * @param bSetCenter true per centrare la mappa sul POI, false in caso contrario (false by default) [opzionale].
  */
 function goToPOI(idPOI, idLevel, bZoom, bSetCenter) {
 	// focus su oggetto richiesto
 	Gmap.setObjectFocus(idPOI, idLevel, ((bZoom == true)? 16:null), (bSetCenter == true)?true:false);
 }

/** ============ BALLOON ============= */
/**
 * Calcola un percorso partendo dal balloon.
 * @param dlat latitudine del POI.
 * @param dlng longitudine del POI.
 */
function balloonPercorso(dlat, dlng) {
 	// recuperiamo i valori untente
	var balloonpercorso = document.forms["balloonpercorso"];
 	var saddr = balloonpercorso.saddr.value;
 	var daddr = document.getElementById("daddr").innerHTML;
 	var mode = balloonpercorso.mode.value;

 	// abilitiamo la sezione "calco percorso"
 	changelight('cercaiitinerario', 'cercaddress', 'ctlink', 'czlink');
 	var calcolapercorso = document.forms["calcolapercorso"];
 	calcolapercorso.saddr.value = saddr;
 	calcolapercorso.daddr.value = daddr;
 	calcolapercorso.mode.selectedIndex = balloonpercorso.mode.selectedIndex;

	// esecuzione calcolo percorso
	calcolaPercorso(saddr, daddr, (dlat+","+dlng), mode);
}
/**
 * Massimizza la finestra attiva su mappa.
 */
function maximizeInfoWindow() {
	// gestione massimizzazione la finestra attiva su mappa.
	Gmap.maximizeInfoWindow();	
}
 
/** ============ STAMPA ============= */
/**
 * Stampa i contenuti presenti sulla mappa.
 */
function stampa() {
 	try {

		// richiamo la pagina di stampa
		var paramURL = "";
		for (var key in PrintParameters) {
			paramURL += "&" + key + "=" + encodeURIComponent(PrintParameters[key]);
		}
		
		window.open("print.html?" + paramURL, 'stampa', "height=600,width=800,menubar=yes,toolbar=yes,location=no,scrollbars=yes");
 		
 	} catch(e) {
		toException(e);
 	}
}

/**
 * Elimina le informazioni salvate per la stampa.
 */
function clearPrint() {
	PrintParameters = {};

	// esportazione per "Google Earth"
	gearth_query.style.display = "none";
	changeearth(2);
}
/**
 * Salva le informazioni per la stampa del percorso.
 * @param saddr @see#calcolaPercorso
 * @param daddr @see#calcolaPercorso
 * @param type @see#calcolaPercorso
 */
function savePrintDirection(saddr, daddr, type) {
	// elimina le informazioni salvate per la stampa 
	clearPrint();

	// salvataggio stato stampa
	PrintParameters[PRINT_MODE] = PRINT_DIRECTION;
	PrintParameters[PRINT_DIRECTION_START_ADDRESS] = saddr;
	PrintParameters[PRINT_DIRECTION_END_ADDRESS] = daddr;
	PrintParameters[PRINT_DIRECTION_TYPE] = type;
}
/**
 * Salva le informazioni per la stampa dei dati.
 * @param parameters parametri da salvare.
 */
function savePrintData(parameters) {
	// elimina le informazioni salvate per la stampa 
	clearPrint();

	// esportazione per "Google Earth"
	gearth_query.style.display = "";
	changeearth(1);
	
	// salvataggio stato stampa
	PrintParameters[PRINT_MODE] = PRINT_DATA;
	for (var key in parameters) {
		PrintParameters[eval(key)] = parameters[key];
	}
}
/** ============ FRONTEND ============= */

/**
 * Carica la lista delle opzioni legate.
 * @param object oggetto da gestire.
 * @param values lista dei valori da caricare.
 * @param text testo descrittivo della combo da utilizzare come primo valore [opzionale].
 */
function loadSelectOptions(object, values, text) {

	// verifichiamo che l'informazione sia valida
	if (values != null) {
		var len = values.length;
		var indexToSelect = -1;
		var valueToSelect = object.getAttribute("defaultValue");
		
		if (text) {
			// creazione opzione
			object.length = 0;
			attachOption(object, "NONE", text + " (" + len + ")");
		}
		
		// cicliamo su i risultati della pagina corrente
		for (var i = 0; i < len; ++i) {
			var valore = values[i];
			// creazione opzione
			attachOption(object, valore, valore);
			if (valore == valueToSelect) {indexToSelect = (i + 1)}
		}
		
		// abilitazione oggetto
		object.disabled = !(len > 0);

		if (indexToSelect != -1) {object.selectedIndex = indexToSelect;}
		else if (len == 1) {object.selectedIndex = 1;}
	}
}

/**
 * Carica una opzione nell'oggetto specificato.
 * @param object oggetto da gestire.
 * @param value valore associata alla opzione.
 * @param description descrizione associata alla opzione.
 */
function attachOption(object, value, description) {
	// creazione contenitore
	var option = document.createElement("option");
	option.setAttribute("value", value);
	option.appendChild(document.createTextNode(description));
	object.appendChild(option);
}

/** ============ LEFTCOL ============= */
/**
 * Effettua la ricerca dei contenuti su mapap secondo parametri utente.
 * @param objectForm gestore della form di ricerca.
 */
function searchData(objectForm) {
	try {
		// disabilitazione slider grafico
		slider.style.display = 'none';

		// eliminiamo le informazioni caricate su mappa
		// Gmap.clearLayer(LAYERS.SAMPLE);
		// eliminiamo tutti i contentui caricati su mappa
		Gmap.clearAll();
		
		// costruzioen query
		var query = NO_QUERY;
		var nation = objectForm.nation.value;
		var city = objectForm.city.value;

		if (city != "NONE") {
			// gestione filtro city
			if (query != NO_QUERY) {query += OPERATOR_AND;}
			query += "[city]=[" + city + "]";
		} else if (nation != "NONE") {
			// gestione filtro nazione
			if (query != NO_QUERY) {query += OPERATOR_AND;}
			query += "[nation]=[" + nation + "]";
		}

		if (query == NO_QUERY) {
			alert("Select at least one country before proceeding with the request.")
		} else {
			// caricamento contenuti layer secondo parametri
			Gmap.showLayerAsync(/*layer*/LAYERS.SAMPLE, /*query*/query, /*focus*/true, /*frontend*/null, function (idLayer, listObject) {
				if (listObject.length == 0) {
					alert("Sorry.\nNo results found.")
				} else {
					// salvataggio stato stampa
					savePrintData({PRINT_DATA_LAYER:idLayer,PRINT_DATA_QUERY:query})
	
					// caricamento lista titoli
					loadResult(listObject)
				}	
			});
		}
	} catch(e) {
		toException(e);
	}
}

/**
 * Effettua la ricerca dei contenuti su mapap secondo parametri utente.
 * @param objectForm gestore della form di ricerca.
 */
function searchDataNearAddress(objectForm) {
	try {
		// lettura parametri utente
		var address = objectForm.q.value;
		var raggio = objectForm.r.value;
		var distanza = raggio;
	
		// verifichiamo che l'informazione sia valida
		if (address.replace(/[^A-Za-z0-9]/g,"").length == 0) {
			// gestione errore
			alert("Warning.\nNo address entered");
			return false;
		}
		// verifichiamo che l'informazione sia valida
		if (isNaN(raggio)) {
			// gestione errore
			alert("Warning.\nThe range specified is invalid.");
			return false;
		} else {
			// unità di misura
			var u = objectForm.u.value;
			if (u == "m") {
				// condizione di uscita
				if (raggio < SLIDER_MININUM_RADIUS) {
					alert("Warning.\nYou can't select a radius less than " + SLIDER_MININUM_RADIUS + " meters.");
					return false;
				}
				// conversione del raggio in KM
				raggio = raggio / 1000;
			} else {
				distanza = distanza * 1000;
			}
		}

		// disabilitazione slider grafico
		slider.style.display = 'none';

		// eliminiamo le informazioni caricate su mappa
		// Gmap.clearLayer(LAYERS.SAMPLE);
		// eliminiamo tutti i contentui caricati su mappa
		Gmap.clearAll();
	
		// caricamento contenuti per vicinanza
		Gmap.showObjectsNearAddressAsync(/*address*/address, /*distance*/distanza, /*maxresult*/NEAR_ADDRESS_MAX_RESULTS, /*layer*/LAYERS.SAMPLE, /*query*/null, /*focus*/false, /*frontend*/null, function(statusCode, point, idLayer, listObject) {
			if (statusCode != SGEO_SUCCESS) {
				// disabilitazione tabbed "risutlati"
				disableTabResult();

				alert("Unable to locate address: \"" + address + "\"");

			} else if (listObject.length == 0) {
				// disabilitazione tabbed "risutlati"
				disableTabResult();
				
				// settaggio posizione mappa
				Gmap.setCenter(point.lat(), point.lng());
				
				alert("Sorry. No results found.\nSuggestions:\n - Try broad the radius of search. ")

			} else {
				// salvataggi stato
				PointNearAddress = point;

				// condizione per abilitare lo slider
				if (listObject.length > 1) {
					// abilitazione slider grafico
					slider.style.display = '';
					// gestione slider
					SliderObj.setMaximum(raggio * 1000);
					var mininum = parseInt(listObject[0].getUserdata("GeoCMS_Distance")) + 1;
					if (mininum < SLIDER_MININUM_RADIUS) {mininum = SLIDER_MININUM_RADIUS;}
					SliderObj.setMinimum(mininum);
					SliderObj.setValue(raggio * 1000);				
				}

				// disegnamo un cerchio su mappa partendo secondo i parametri specificati.
				var quality = (raggio * 10);
				if (quality < 40) {quality = 40;}
				drawCircle(point, raggio, quality);

				// caricamento lista titoli
				loadResult(listObject);

				// salvataggio stato stampa
				savePrintData({PRINT_DATA_LAYER:idLayer,PRINT_DATA_LAT:PointNearAddress.lat(),PRINT_DATA_LNG:PointNearAddress.lng(),PRINT_DATA_PROXIMITY:distanza})
			}				
		});

	} catch(e) {
		toException(e);
	}
}
/**
 * Richiamata sul l'evento "onmouseup" dello slider.
 * Ricerca le informazioni che ricadono nel raggio selezionato dall'utente.
 */
function searchNearLatLngFromSlider() {
	// definizione variabili
	var distanza = SliderObj.getValue();

	// eliminiamo le informazioni caricate su mappa
	Gmap.clearLayer(LAYERS.SAMPLE);

	// caricamento contenuti per vicinanza
	Gmap.showObjectsNearLatLngAsync(PointNearAddress, /*distance*/distanza, /*maxresult*/NEAR_ADDRESS_MAX_RESULTS, /*layer*/LAYERS.SAMPLE, /*query*/null, /*focus*/false, /*frontend*/null, function(idLayer, listObject) {
		if (listObject.length == 0) {
			// disabilitazione tabbed "risutlati"
			disableTabResult();

			alert("Sorry.\nNo results found.");
		} else {

			// salvataggio stato stampa
			savePrintData({PRINT_DATA_LAYER:idLayer,PRINT_DATA_LAT:PointNearAddress.lat(),PRINT_DATA_LNG:PointNearAddress.lng(),PRINT_DATA_PROXIMITY:distanza})

			// caricamento lista risultati
			loadResult(listObject, true);
		}
	});	
}

/** ============ GOOGLE EARTH ============= */
/**
 * 
 */
function changeearth(myActiveTabbed) {
	// settaggio stato
	ActiveTabbedEarth = myActiveTabbed;
	// verifichiamo il tabbed attivo
	if (ActiveTabbedEarth == 1) {
		changelight('gearth_tab1_content','gearth_tab2_content', 'gearth_tab1_name', 'gearth_tab2_name');
	} else {
		changelight('gearth_tab2_content','gearth_tab1_content', 'gearth_tab2_name', 'gearth_tab1_name');
	}
	
}