var map;
var geocoder;
var directions;
var locale = "it_IT";
var percorso_libero = false;
var percorso_vicino = false;
var mapPanel = document.getElementById('map_canvas');
var pathPanel = document.getElementById('path');
var da_scheda = true;

function initialize() {
	if (GBrowserIsCompatible()) {
		mapPanel = document.getElementById('map_canvas');
	 	pathPanel = document.getElementById('path');
	    geocoder = new GClientGeocoder();
		map = new GMap2(mapPanel);
		map.setCenter(new GLatLng(45.423034,11.876564), 10);
		map.setUIToDefault();
	}
}


function initDirections() {
	directions = new GDirections(map, pathPanel);
    GEvent.addListener(directions, "error", handleErrors);
    GEvent.addListener(directions,"load",function(){
    		if(percorso_libero) {
    			document.getElementById("riassunto_vicino").innerHTML = "";
    			document.getElementById("riassunto_libero").innerHTML = document.getElementById("textfield4").value+"<br/>"+directions.getSummaryHtml();
		    	percorso_libero = false;
		    } else if(percorso_vicino) {
		    	document.getElementById("riassunto_libero").innerHTML = "";
		    	document.getElementById("riassunto_vicino").innerHTML += directions.getSummaryHtml();
		    	percorso_vicino =false;
		    }
    	});
}

function calcolaPercorsoLibero() {
	map.clearOverlays();
	document.getElementById("riassunto_libero").innerHTML = "<br /><br />";
	document.getElementById("riassunto_vicino").innerHTML = "<br /><br />";
	
	var start = document.getElementById("textfield3").value;
	var arrival;
	if(da_scheda && document.getElementById("lat_lng").value != '')
		arrival = document.getElementById("lat_lng").value;
	else
		arrival = document.getElementById("textfield4").value;
	var path = "from:"+start+" to:"+arrival;
	percorso_libero = true;
    directions.load(path);
    return false;
}


function initADM() {
	initialize();
	map.setCenter(marker[0].getLatLng(), 8);
	for(var i = 0; i < marker.length; i++) {
		marker[i].disableDragging();
		map.addOverlay(marker[i]);
	}
}

function initUSR() {
	initialize();
	initDirections();
	for(var i = 0; i < marker.length; i++) {
		marker[i].disableDragging();
		map.addOverlay(marker[i]);	
	}
	map.setCenter(marker[0].getLatLng(), 7);
}

function initUSR(a) {
	initialize();
	initDirections();
	var minLat = 90;
	var minLng = 180;
	var maxLat = -90;
	var maxLng = -180;
	for(var i = 0; i < marker.length; i++) {
		marker[i].disableDragging();
		minLat = Math.min(minLat, marker[i].getLatLng().lat());
		minLng = Math.min(minLng, marker[i].getLatLng().lng());
		maxLat = Math.max(maxLat, marker[i].getLatLng().lat());
		maxLng = Math.max(maxLng, marker[i].getLatLng().lng());
		map.addOverlay(marker[i]);	
	}
	var cLat = (minLat + maxLat) / 2;
	var cLng = (minLng + maxLng) / 2;
	var cLatLng = new GLatLng(cLat, cLng);
	map.setCenter(cLatLng, 9);
}


function initSCH(lat, lng, tipo) {
	initialize();
	var myIcon = new GIcon();

	myIcon.image = 'ico_distributori/'+tipo+'.png';
	myIcon.iconSize = new GSize(50,60);
	myIcon.iconAnchor = new GPoint(6, 30)
	
	var latlng = new GLatLng(lat,lng);
	marker = new GMarker(latlng, {draggable: false, icon: myIcon});
	map.addOverlay(marker);
	map.setCenter(marker.getLatLng(), 10);
	da_scheda = true;
	
}

function handleErrors(){
   if (directions.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
	 alert("Indirizzo non trovato");
   else if (directions.getStatus().code == G_GEO_SERVER_ERROR)
	 alert("Si è verificato un errore nella geocodifica degli indirizzi");
   
   else if (directions.getStatus().code == G_GEO_MISSING_QUERY)
	 alert("Manca un parametro");
	 
   else if (directions.getStatus().code == G_GEO_BAD_KEY)
	 alert("Errore nella Key Api.");

   else if (directions.getStatus().code == G_GEO_BAD_REQUEST)
	 alert("La richiesta non puo' essere correttamente risolta.");
	
   else alert("Si è verificato un errore");
   
}

function dragendMarker(marker) {
	GEvent.addListener(marker, "dragend", 
		function() {
			var point = marker.getPoint();
			document.getElementById("lat").value = point.lat().toFixed(6);
			document.getElementById("lng").value = point.lng().toFixed(6);
			getMarkerAddress(point);			//output indirizzo
		});
}

function getMarkerAddress(latlng) {
	geocoder.getLocations(latlng, 
		function(addresses) {
			if(addresses.Status.code != 200) {
				alert("reverse geocoder failed to find an address for " + latlng.toUrlValue());
			} else {
				address = (addresses.Placemark[0]).address;
				document.getElementById("address").value = address;
			}
		});
}

//funzione di ricerca dell'indirizzo e posiziona la mappa
function findAddress(address) {
	if (geocoder) {
		geocoder.getLatLng(
			address,
			function(point) {					//funzione di callback: se la ricerca non ha avuto risultato point=null
				if (!point) {
					alert(address + " non trovato");
				} else {
					document.getElementById("lat").value = point.lat().toFixed(6);
					document.getElementById("lng").value = point.lng().toFixed(6);
					map.clearOverlays()
					map.setCenter(point, 14);
					marker = new GMarker(point, {draggable: true});  
					map.addOverlay(marker);
					dragendMarker(marker);		//gestione drag del marker
			    }
			});
	}
}

function findLatLng(formData, jqForm, options) {
	document.getElementById("riassunto_libero").innerHTML = "<br /><br />";
	document.getElementById("riassunto_vicino").innerHTML = "<br /><br />";
	var partenza = $.param(formData).split("&");
	var address = partenza[0].split("=");
	address = address[1].replace(/\+/g, " ");
	if (geocoder) {
		geocoder.getLatLng(
			address,
			function(point) {					//funzione di callback: se la ricerca non ha avuto risultato point=null
				if (point) {
					document.getElementById("lat_start").value = point.lat().toFixed(6);
					document.getElementById("lng_start").value = point.lng().toFixed(6);
					$.ajax({
						async: false,
						data: "type=findnearest&lat=" + document.getElementById("lat_start").value + "&lng=" + document.getElementById("lng_start").value,
						success: getRoute
					});
			    }
			});
	}
	return false;
}

function getRoute() {
	map.clearOverlays();
	var lat_start = document.getElementById("lat_start").value;
	var lng_start = document.getElementById("lng_start").value;
	var lat_arrival = document.getElementById("lat_arrival").value;
	var lng_arrival = document.getElementById("lng_arrival").value;
	var path = "from:"+lat_start+","+lng_start+" to:"+lat_arrival+","+lng_arrival;
	percorso_vicino = true;
    directions.load(path);
    return false;
}

function cambiaIcona(valore) {
	var myIcon = creaGIcon(valore);
	
	map.clearOverlays();
	var latlng = new GLatLng(document.getElementById("lat").value,document.getElementById("lng").value);
	marker = new GMarker(latlng, {draggable: true, icon: myIcon});
	map.addOverlay(marker);
}

function creaGIcon(valore) {
	var myIcon = new GIcon();
	
	myIcon.image = 'ico_distributori/'+valore+'.png';
	myIcon.iconSize = new GSize(37,45);
	myIcon.iconAnchor = new GPoint(3, 45)
	return myIcon;	
}

function createMarker(point, myIcon, id) {
	var marker = new GMarker(point, {icon:myIcon});
	
	GEvent.addListener(marker, "click", function() {
			location.href="./scheda_distributore.php?id="+id;
	});
	
	return marker;
}

