function get(el) {
	if (document.all) {
		return el.innerText;
	} else {
		return el.textContent;
	}
}

function addMarkers(places) {

	var markerImage = [
		"/images/maps/markers/green-dot.png",
		"/images/maps/markers/orange-dot.png",
		"/images/maps/markers/red-dot.png"
	]
	var markerShadow = "/images/maps/markers/markershadow.png";

	var greenIcon = new GIcon();
	greenIcon.image = markerImage[0];
	greenIcon.iconSize = new GSize(32, 32);
	greenIcon.iconAnchor = new GPoint(15, 31);
	greenIcon.shadow = markerShadow;
	greenIcon.shadowSize = new GSize(59, 32);

	var blueIcon = new GIcon();
	blueIcon.image = markerImage[1];
	blueIcon.iconSize = new GSize(32, 32);
	blueIcon.iconAnchor = new GPoint(15, 31);
	blueIcon.shadow = markerShadow;
	blueIcon.shadowSize = new GSize(59, 32);

	var redIcon = new GIcon();
	redIcon.image = markerImage[2];
	redIcon.iconSize = new GSize(32, 32);
	redIcon.iconAnchor = new GPoint(15, 31);
	redIcon.shadow = markerShadow;
	redIcon.shadowSize = new GSize(59, 32);

	var i = 0;
	places.each(function(el) {
		var lat = get(el.down('.lat'));
		var lng = get(el.down('.long'));
		var displayName = get(el.down('.displayName'));
		var uri = get(el.down('.uri'));
//		console.log('ID: ', el.identify(), ' Lat: ', lat, ' Lng: ', lng, ' Name: ', displayName, ' URI: ', uri);
		if (typeof lat != 'undefined' && typeof lng != 'undefined' && lat.length != 0 && lng.length != 0) {
			var point = new GLatLng(lat, lng);

			points[i] = point;

			switch (i) {
				case 0:
					var marker = new GMarker(point, { icon: greenIcon });
				break;
				case places.length -1:
					var marker = new GMarker(point, { icon: redIcon });
				break;
				default:
					var marker = new GMarker(point, { icon: blueIcon });
				break;
			}

			marker.title = displayName;
			markers.push(marker);
			var html = '<h3><a href="' + uri + '" title="View this place">' + displayName + '</a></h3>';
			GEvent.addListener(marker, 'click', function() {
				map.openInfoWindowHtml(point, html);
			});
			map.addOverlay(marker);
		}
		i++;
	});

	// Add polylines to join the itinerary locations
	var polyline = new GPolyline(points, "#0000ff", 2);
	map.addOverlay(polyline);
}

var map;

document.observe('dom:loaded', function(ev) {

	allowMapControl = true;

	if (GBrowserIsCompatible() && document.getElementById("map") != null) {

		map = new GMap2(document.getElementById("map"));
		map.setMapType(G_PHYSICAL_MAP);

		if (allowMapControl) {
			map.setUIToDefault();
			map.enableContinuousZoom();
			map.disableScrollWheelZoom();
		} else {
			map.disableDragging();
			map.disableDoubleClickZoom();
		}

		// Add the markers and polylines to the map
		points = new Array();
		markers = new Array();
		addMarkers($$('.dataset li.place'));

		// Set center and zoom level around place markers
		var latlngbounds = new GLatLngBounds();
		for (var i = 0; i < points.length; i++) {
			latlngbounds.extend(points[i]);
		}
		map.setCenter(latlngbounds.getCenter(), map.getBoundsZoomLevel(latlngbounds));

	}
});
