// ARTIST ROOMS touring programme map configuration

// flag whether to cache map or not.  
// By default Google maps caches KML files.
var TO_CACHE = true;

// map feed URL
var FEED_URL = "http://www.tate.org.uk/collection/artistrooms/mapfeed.do";

// initial centre
var INIT_CENTRE = new GLatLng(55, -3.5);

// boundaries for map centre (panning)
var MIN_LNG = -8;
var MIN_LAT = 50;
var MAX_LNG = 4;
var MAX_LAT = 62;
var BOUNDS = new GLatLngBounds(new GLatLng(MIN_LAT, MIN_LNG), new GLatLng(MAX_LAT,
		MAX_LNG));

// zoom boundaries
var MIN_ZOOM = 5;
var MAX_ZOOM = 15;

function showMap() {
	if (GBrowserIsCompatible()) {
		var kmlUrl = FEED_URL;
		if (!TO_CACHE) {
			var avoidCaching = "?nocache=" + (new Date()).valueOf();
			kmlUrl = kmlUrl + avoidCaching;
		}
		var map = new GMap2(document.getElementById("map"));
		map.setUIToDefault();
		map.setMapType(G_PHYSICAL_MAP);
		restrictZooming(map);
		GEvent.addListener(map, "move", function() {
			restrictPanning(map);
		});
		map.setCenter(INIT_CENTRE, MIN_ZOOM);
		geoXml = new GGeoXml(kmlUrl);
		map.addOverlay(geoXml);
	}
}

function unloadMap() {
	GUnload();
}

function restrictZooming(map) {
	var types = map.getMapTypes();
	for ( var i = 0; i < types.length; i++) {
		types[i].getMinimumResolution = function() {
			return MIN_ZOOM;
		};
		types[i].getMaximumResolution = function() {
			return MAX_ZOOM;
		};
	}
}

function restrictPanning(map) {
	if (!BOUNDS.contains(map.getCenter())) {
		var centre = map.getCenter();
		var centreLng = centre.lng();
		var centreLat = centre.lat();
		if (centreLng < MIN_LNG) {
			centreLng = MIN_LNG;
		}
		if (centreLng > MAX_LNG) {
			centreLng = MAX_LNG;
		}
		if (centreLat < MIN_LAT) {
			centreLat = MIN_LAT;
		}
		if (centreLat > MAX_LAT) {
			centreLat = MAX_LAT;
		}
		map.setCenter(new GLatLng(centreLat, centreLng));
	}
}
