/*
* Hiveon Google Maps 1.0
* Uses Google Maps Mapping API to create customizable
* Google Maps that can be embedded on your website
*
* @class        Hiveon Google Maps 1.0
* @author       Tommaso Soprana <info@lifecode.it>
* @copyright    2009 Lifecode srl
*/


var toggleState = 1;
var markerOptions;
		
// Create our "tiny" marker icon

						

function customIcon (icon) {
	var custom_icon = new GIcon();
	
	if (icon) {
		custom_icon.image = icon;  
		custom_icon.size = new GSize(16,16);
		custom_icon.iconAnchor = new GPoint(8,16);
		custom_icon.infoWindowAnchor = new GPoint(7,7);
	}
	else {
		custom_icon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
		custom_icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
		custom_icon.iconSize = new GSize(12, 20);
		custom_icon.shadowSize = new GSize(22, 20);
		custom_icon.iconAnchor = new GPoint(6, 20);
		custom_icon.infoWindowAnchor = new GPoint(5, 1);
	}
	var myOpt = { icon: custom_icon };
	return myOpt;
}


function showMark (mapId, latitude, longitude, cloudcontent, icon) {
	 if (longitude && latitude) {
		var point = new GLatLng(latitude, longitude);
		if (point) {
        	var marker = new GMarker(point, customIcon(icon));
        	marker.bindInfoWindowHtml(cloudcontent);
        	eval('map' + mapId + '.addOverlay(marker);');
			return marker;
		}
	}
	return null;
}


function activateMark (key) {
	var obj = eval('hvnMarker_' + key);
	var cloudcontent = eval('hvnMarkerCloudContent_' + key);
	obj.openInfoWindow(cloudcontent);
}


function centerMap (key, latitude, longitude, zoom) {
	if (GBrowserIsCompatible()) {
		var keyMap = 'hvnGoogleMapId_' + key;
    	
		var map = new GMap2(document.getElementById(keyMap));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		var center = new GLatLng(latitude, longitude);
		map.setCenter(center, zoom);
		geocoder = new GClientGeocoder();
		
		var marker = new GMarker(center, {draggable: true});  
		map.addOverlay(marker);
		setFormData (key, center.lat().toFixed(5), center.lng().toFixed(5), map.getZoom());

		GEvent.addListener(marker, "dragend", function() {
			var point = marker.getPoint();
			map.panTo(point);
			setFormData (key, point.lat().toFixed(5), point.lng().toFixed(5), map.getZoom());
		});

		GEvent.addListener(map, "moveend", function() {
			map.clearOverlays();
			var center = map.getCenter();
			var marker = new GMarker(center, {draggable: true});
			map.addOverlay(marker);
			setFormData (key, center.lat().toFixed(5), center.lng().toFixed(5), map.getZoom());

			GEvent.addListener(marker, "dragend", function() {
				var point =marker.getPoint();
				map.panTo(point);
				setFormData (key, point.lat().toFixed(5), point.lng().toFixed(5), map.getZoom());
			});
		});
	}
}	  


function centerMapFromAddress (key, address) {
	var keyMap = 'hvnGoogleMapId_' + key;
	
	if (address != '') {
		var map = new GMap2(document.getElementById(keyMap));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		if (geocoder) {
			geocoder.getLatLng(
				address,
				function(point) {
					if (!point) {
						alert(address + " non trovato");
					} 
					else {
						var keyZoom = 'hvnGoogleMapId_' + key + '_zoom';
						var zoom = document.getElementById(keyZoom).innerHTML;
						
						map.clearOverlays()
						map.setCenter(point, parseInt(zoom));
						var marker = new GMarker(point, {draggable: true});  
						map.addOverlay(marker);
						setFormData (key, point.lat().toFixed(5), point.lng().toFixed(5), map.getZoom());
						GEvent.addListener(marker, "dragend", function() {
							var pt = marker.getPoint();
							map.panTo(pt);
							setFormData (key, pt.lat().toFixed(5), pt.lng().toFixed(5), map.getZoom());
						});

						GEvent.addListener(map, "moveend", function() {
							map.clearOverlays();
							var center = map.getCenter();
							var marker = new GMarker(center, {draggable: true});
							map.addOverlay(marker);
							setFormData (key, center.lat().toFixed(5), center.lng().toFixed(5), map.getZoom());

							GEvent.addListener(marker, "dragend", function() {
								var pt =marker.getPoint();
								map.panTo(pt);
								setFormData (key, pt.lat().toFixed(5), pt.lng().toFixed(5), map.getZoom());
							});
						});
					}
				}
			);
		}
	}
}

function setFormData (key, latitude, longitude, zoom) {
	var keyLongitude = 'hvnGoogleMapId_' + key + '_longitude';
	var keyLatitude = 'hvnGoogleMapId_' + key + '_latitude';
	var keyZoom = 'hvnGoogleMapId_' + key + '_zoom';
	var keyType = 'hvnGoogleMapId_' + key + '_type';
	var keyForm = key;
	
	document.getElementById(keyLatitude).innerHTML = latitude;
	document.getElementById(keyLongitude).innerHTML = longitude;
	document.getElementById(keyZoom).innerHTML = zoom;
	//document.getElementById(keyType).innerHTML = '';
	var formData = latitude + ';' + longitude + ';' + zoom;
	document.getElementById(keyForm).value = formData;
}
