function loadMap(latitude, longitude, zoom) {

	if (GBrowserIsCompatible()) {

		// Create tiny marker icons
		var houseIcon = new GIcon();
		houseIcon.image = "/images/maps/house.png";
		houseIcon.iconSize = new GSize(20, 20);
		houseIcon.iconAnchor = new GPoint(6, 20);
		houseIcon.infoWindowAnchor = new GPoint(5, 1);

		function createMarker(point, html, tooltip) {
			var marker = new GMarker(point, {icon:houseIcon, title:tooltip});
			GEvent.addListener(marker, "click", function() {
				marker.openInfoWindowHtml(html);
			});
			return marker;
		}

		function createPropertyHtml(xmlData) {
			var html = 
				"<div style=\"width: 360px; font-family: Arial, Helvetica, sans-serif; font-size: 10pt; text-align: left;\">" +
				"<div style=\"float: right; width: 180px;\">" + 
				"<img src=\"/properties/" + GXml.value(xmlData.getElementsByTagName("name")[0]) + "/search.jpg\" width=180 height=120>" +
				"</div>" +
				"<p style=\"font-weight: bold;\">" + GXml.value(xmlData.getElementsByTagName("fullname")[0]) + "</p>" +
				GXml.value(xmlData.getElementsByTagName("description")[0]) +
				"<ul>" +
				"<li>" + GXml.value(xmlData.getElementsByTagName("bedrooms")[0]) + " bedrooms, sleeps " + GXml.value(xmlData.getElementsByTagName("sleeps")[0]) + "</li>" +
				"<li>" + GXml.value(xmlData.getElementsByTagName("bathrooms")[0]) + " bathrooms" + "</li>" +
				"<li>" + GXml.value(xmlData.getElementsByTagName("pricedescription")[0]) + "</li>" +
				"</ul>" +
				"<input type=\"submit\" value=\"Add to basket\" onclick=\"javascript:ajaxAddToBasket('" + GXml.value(xmlData.getElementsByTagName("name")[0])+ "', '" + GXml.value(xmlData.getElementsByTagName("fullname")[0]) + "');\">";
			if (GXml.value(xmlData.getElementsByTagName("noflash")[0]) != 1) {
				html = html +
					"&nbsp;<input type=\"submit\" value=\"More details\" onclick=\"javascript:openPropertyDetails('" + GXml.value(xmlData.getElementsByTagName("name")[0]) + "');\">";
			}
			html = html + 
				"&nbsp;<input type=\"submit\" value=\"Photos\" onclick=\"javascript:openPropertyPhotos('" + GXml.value(xmlData.getElementsByTagName("name")[0]) + "');\">" +
				"</div>";

			return html;
		}

		var map = new GMap2(document.getElementById("areaMap"));
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(latitude, longitude), zoom, G_SATELLITE_MAP);

		var clusterer = new Clusterer(map);

		var request = GXmlHttp.create();
		request.open("GET", "../properties/properties.xml", true);
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				var xmlDoc = request.responseXML;
				var markers = xmlDoc.documentElement.getElementsByTagName("property");
				for (var i = 0; i < markers.length; i++) {
					var lat = parseFloat(GXml.value(markers[i].getElementsByTagName("latitude")[0]));
					var lng = parseFloat(GXml.value(markers[i].getElementsByTagName("longitude")[0]));
					if (!isNaN(lat) && !isNaN(lng)) {
						var point = new GLatLng(lat, lng);
						var units = markers[i].getElementsByTagName("unit");
						var html = "";
						if (units.length > 1) {
							html = 
								"<div style=\"width: 400px; height: 250px; overflow: auto; font-family: Arial, Helvetica, sans-serif; font-size: 10pt; text-align: left;\">" +
								"<p style=\"font-size: 1.2em; font-variant: small-caps; font-weight: bold; text-decoration: underline;\">" + GXml.value(markers[i].getElementsByTagName("fullname")[0]) + "</p>" +
								"<p style=\"font-style: italic;\">This property consists of several units. Please scroll down below to find the unit that best suits your requirements.</p>";
						}
						for (var j = 0; j < units.length; j++) {
							html = html + createPropertyHtml(units[j]);
							if (j < (units.length-1)) {
								html = html + "<hr/>";
							}
						}
						if (units.length > 1) {
							html = html +
								"</div>";
						}
						var tooltip = GXml.value(markers[i].getElementsByTagName("fullname")[0]) + " - click for more information";
						var marker = createMarker(point, html, tooltip);
						clusterer.AddMarker(marker);
					}
				}
			}
		}
		request.send(null);
	}
}
