window.addEvent('domready', function() {

	var mapCoordinates = $('map_coordinates');
	if (!mapCoordinates || !(mapCoordinates = mapCoordinates.get('text')) || !(mapCoordinates = mapCoordinates.split(';')) || mapCoordinates.length != 5) return;
	
	for (var i = 0; i < mapCoordinates.length; ++i) {
		mapCoordinates[i] = parseFloat(mapCoordinates[i]);
	}

	// Get the map container.
	var mapContainer = new Element('div', {
		id : 'google_map'
	}).inject('content', 'bottom');
	
	// Set the initial marker position.
	var markerPosition = new google.maps.LatLng(mapCoordinates[0], mapCoordinates[1]);
	var mapCentre = new google.maps.LatLng(mapCoordinates[2], mapCoordinates[3]);
	
	// Create the map.
	var map = new google.maps.Map(
		mapContainer,
		{
			zoom: mapCoordinates[4],
			center: mapCentre,
			mapTypeId: google.maps.MapTypeId.ROADMAP
		}
	);
	
	// Add the marker.
	var marker = new google.maps.Marker({
		position : markerPosition, 
		map : map
	});
	
	if ($('map_coordinates').hasClass('editable')) {
		google.maps.event.addListener(map, 'click', function(e) {
			marker.setPosition(e.latLng);
		});
		new Element('button', {
			text : 'Save Map',
			styles : {
				padding : '0 1em'
			},
			events : {
				click : function() {
					var markerPosition = marker.getPosition();
					var mapCentre = map.getCenter();
					var mapZoom = map.getZoom();
					new Request({
						url : Uri.create('/services/save_static_page_element.php'),
						onComplete: function(e) {
							if (e != 'OK') {
								alert('Error saving: ' + e);
							} else {
								alert('Map saved.');
							}
						}
					}).post({
						page : document.getElement('meta[name=framework-page]').get('content'),
						id : 'google_map',
						content : markerPosition.lat() + ';' + markerPosition.lng() + ';' + mapCentre.lat() + ';' + mapCentre.lng() + ';' + mapZoom,
						type : 'text'
					});
				}
			}
		}).inject(new Element('p').inject(mapContainer, 'after'));
	}
});
