var map;
function load(defLat, defLng, defZoom, clickText) {
	if (GBrowserIsCompatible()) {
		var mapOptions = {
			googleBarOptions : {
				style: "new",
				adsOptions: {
					client: "partner-google-maps-api",
					channel: "Webcams in Norway-country map",
					adsafe: "high",
					language: "en"
				}
			}
		}
		map = new GMap2(document.getElementById("map"), mapOptions);
		var customUI = map.getDefaultUI();
		customUI.controls.scalecontrol = false;
		map.setUI(customUI);
		map.addControl(new GScaleControl(), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(80,20)));
		map.enableGoogleBar();

		// Read map state from cookie
		var state = null;
		if (document.cookie) {
			var cookie = document.cookie.split('; ');
			for (var x=0; x<cookie.length; x++) {
				var cookieval = cookie[x].split('=');
				if (cookieval[0] == 'map_state' && cookieval[1]) {
					state = unescape(cookieval[1]);
				}
			}
		}

		// Set map centre and zoom
		if (state == null) {
			map.setCenter(new GLatLng(defLat, defLng), defZoom);
		} else {
			state = state.split(',');
			lat = Number(state[0]);
			lng = Number(state[1]);
			zoom = Number(state[2]);
			map.setCenter(new GLatLng(lat, lng), zoom);
		}

		var myIcon = new GIcon(G_DEFAULT_ICON);
		myIcon.shadow = null; // hide shadow to avoid clutter and possibly speed things up a bit

		function createMarker(point, id, name) {
			var marker = new GMarker(point, myIcon);
			marker.value = id;
			var myHtml = '<b>' + name + '</b><br /><a href="/webcams.php?viewcam=' + id + '">' + clickText + '</a>';
			GEvent.addListener(marker, "click", function() { map.openInfoWindow(point, myHtml); });
			return marker;
		}
		
		var multiIcon = new GIcon(G_DEFAULT_ICON);
		multiIcon.image = "marker-multi.png";
		multiIcon.iconSize = new GSize(20,34);
		multiIcon.shadow = null;
		function createMulticamMarker(point, name, html) {
			var marker = new GMarker(point, multiIcon);
			marker.value = name;
			var myHtml = '<b>' + name + '</b><br />' + html;
			GEvent.addListener(marker, "click", function() { map.openInfoWindow(point, myHtml); });
			return marker;
		}

		// Load map data
		var allcams = [];
		for (cam in camdata) {
			var point = new GLatLng(camdata[cam][0], camdata[cam][1]);
			allcams.push(createMarker(point, cam, camdata[cam][2]));
		}
		for (town in multidata) {
			var content = '<ul>';
			for (camID in multidata[town][2]) { // 'camID' is ID, multidata[town][2][camID] is place
				content = content + '<li><a href="/webcams.php?viewcam=' + camID + '">' + multidata[town][2][camID] + '</a><br />';
			}
			content = content + '</ul>';
			var point = new GLatLng(multidata[town][0], multidata[town][1]);
			allcams.push(createMulticamMarker(point, town, content));
		}
		
		// Load clusterer
		var mcOptions = {gridSize: 25, maxZoom: 8};
		var markerCluster = new MarkerClusterer(map, allcams, mcOptions);
	}
}

function saveState()
{
	var centre = map.getCenter();
	var state = String(centre.lat()) + ',' + String(centre.lng()) + ',' + String(map.getZoom());
	document.cookie = 'map_state=' + escape(state);
}