var map;
var geocoder;
var latitude = 41.91633;
var longitude = 12.482185;
var zoom = 6;
var markers = new Array();
var updateDraggableMarkerFlag = false;

function initialize()
{
	map = new google.maps.Map2(document.getElementById("map"));	
	map.addControl(new GMapTypeControl(1));
	map.addControl(new GLargeMapControl());
	map.enableContinuousZoom();
	map.enableDoubleClickZoom();
	geocoder = new GClientGeocoder();
	map.setCenter(new GLatLng(latitude, longitude), zoom);

	for (i = 0; i < markers.length; ++i) 
	{
		map.addOverlay(markers[i]);
	}
	if (updateDraggableMarkerFlag)
	{		
		map.addOverlay(markers[0]);
		markers[0].enableDragging();

		GEvent.addListener(markers[0], "drag", function(){
		document.getElementById("latitude").value = markers[0].getPoint().y;
		document.getElementById("longitude").value = markers[0].getPoint().x;
		});
	 	document.getElementById("latitude").value = markers[0].getPoint().y;
		document.getElementById("longitude").value = markers[0].getPoint().x;
	}
}

function refreshMarkers()
{
	map.clearOverlays();
	for (i = 0; i < markers.length; ++i) 
	{
		map.addOverlay(markers[i]);
	}
}

function addDraggableMarker()
{
	var bounds = map.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	var lngSpan = northEast.lng() - southWest.lng();
	var latSpan = northEast.lat() - southWest.lat();

	var point = new GLatLng(southWest.lat() + latSpan / 2, southWest.lng() + lngSpan / 2);
	if (!markers[0])
	{
		markers[0] = new GMarker(point, {icon:G_DEFAULT_ICON, draggable: true}); 
		map.addOverlay(markers[0]);
		markers[0].enableDragging();
		GEvent.addListener(markers[0], "drag", function(){
		document.getElementById("latitude").value = markers[0].getPoint().y;
		document.getElementById("longitude").value = markers[0].getPoint().x;
		});
	}
	else
	{
		markers[0].setLatLng(point);
	}
	document.getElementById("latitude").value = markers[0].getPoint().y;
	document.getElementById("longitude").value = markers[0].getPoint().x;
}

function addDraggableMarkerAtPos(lat, lng)
{
	var point = new GLatLng(lat, lng);
	if (!markers[0])
	{
		markers[0] = new GMarker(point, {icon:G_DEFAULT_ICON, draggable: true}); 
		updateDraggableMarkerFlag = true;
	}
}

function setLatLngZoom(lat, lng, z)
{
	latitude=lat;
	longitude=lng;
	zoom=z;
}

function clearMarkers()
{
	markers = null;
	markers = new Array();
}

function addMarker(lat, lng, msg, phase)
{
	var new_marker;
	var icon = new GIcon();
	icon.image = "/images/icons/phase" + phase + ".png";
	icon.shadow = "/images/icons/shadow.png";
	icon.iconSize = new GSize(12, 20);
	icon.shadowSize = new GSize(22, 20);
	icon.iconAnchor = new GPoint(6, 20);
	icon.infoWindowAnchor = new GPoint(5, 1);

	new_marker = new GMarker(new GLatLng(lat, lng), icon);
    GEvent.addListener(new_marker, "click", function() {
      new_marker.openInfoWindowHtml(msg);})
	markers.push(new_marker);
}

function centerMapOnAddress(province,town,address,addMarker)
{
	var completeaddress=province+', '+town;
	if (address!='') completeaddress=completeaddress+", "+address;
	if (geocoder) 
	{
		geocoder.getLatLng(
			completeaddress,
			function(point)
			{
				if (!point)
				{
					alert(completeaddress + " non trovato");
				} 
				else 
				{
					map.setCenter(point, 13);
					if (addMarker)
					{
						if (!markers[0])
						{
							markers[0] = new GMarker(point, {icon:G_DEFAULT_ICON, draggable: true}); 
							map.addOverlay(markers[0]);
							markers[0].enableDragging();

							GEvent.addListener(markers[0], "drag", function(){
							document.getElementById("latitude").value = markers[0].getPoint().y;
							document.getElementById("longitude").value = markers[0].getPoint().x;
							});
						}
						else
						{
							markers[0].setLatLng(point);
						}
					}
					document.getElementById("latitude").value = markers[0].getPoint().y;
					document.getElementById("longitude").value = markers[0].getPoint().x;
				}
			}
		);
	}
}
