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

function addMarkers(places)
{
	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'));
		// alert(displayName + '\n' + 'lat: ' + lat);
		if(typeof lat != 'undefined' && typeof lng != 'undefined' && lat.length != 0 && lng.length != 0)
		{
			var point = new GLatLng(lat, lng);
			var marker = new GMarker(point);
			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);
//			bounds.extend(point);
		}
	});
}

function clearMarkers()
{
	for(var i=0; i<markers.length; i++)
	{
		markers[i].remove();
		markers[i].closeInfoWindow();
	}
	
	markers = new Array();
}

function updateBounding() {
	var zoom = map.getBoundsZoomLevel(bounds);
	zoom = (zoom > 0) ? zoom - 1 : zoom;
	map.setZoom(map.getBoundsZoomLevel(bounds) - 1);
	map.setCenter(bounds.getCenter());
}

function setBounding() {
	map.setCenter(bounds.getCenter());	
	map.setZoom(map.getBoundsZoomLevel(bounds));
}

document.observe('dom:loaded', function(ev){
	
	allowMapControl = true;
	
	/* extendMapEast - if true, extends the bounding box 20% east to cover map category control */
	extendMapEast = true;
	
	if (GBrowserIsCompatible()) {
		
		var bbNorth = parseFloat(get($$('.countryMapData .bbNorth')[0]));
		var bbWest = parseFloat(get($$('.countryMapData .bbWest')[0]));
		var bbSouth = parseFloat(get($$('.countryMapData .bbSouth')[0]));
		var bbEast = parseFloat(get($$('.countryMapData .bbEast')[0]));
		
		if(extendMapEast)
		{
			bbEast = bbEast + ((bbEast - bbWest)/5);
		}
		
		bounds = new GLatLngBounds();
		bounds.extend(new GLatLng(bbNorth, bbWest));
		bounds.extend(new GLatLng(bbSouth, bbEast));
		map = new GMap2(document.getElementById("locationMap"));
		map.setMapType(G_PHYSICAL_MAP);
		map.setCenter(bounds.getCenter());
		map.setZoom(map.getBoundsZoomLevel(bounds));
		if(allowMapControl) {
			map.setUIToDefault();
			map.enableContinuousZoom();
		} else {
			map.disableDragging();
			map.disableScrollWheelZoom();
			map.disableDoubleClickZoom();
		}
		map.disableScrollWheelZoom();
				
		markers = new Array();

		addMarkers($$('.dataset li.place.iconic'));
		
		// updateBounding();
	}
	
	// attach event to map control
	$$('.categoryControl input').each(function(el){
		el.observe('click', function(ev){
			el = Event.element(ev);
			key = $F(el);
			clearMarkers();
			if(key == 'all') {
				addMarkers($$('.dataset .place'));
			} else {
				addMarkers($$('.dataset .' + key));
			}
			setBounding();
			// updateBounding();
		});
	});
});
