/**
 * @author psayre
 */

function GoogleMap(id, lat, lng, zoom) {
	document.writeln('<div id="'+id+'" class="google-map"></div>');
	var mapElem = document.getElementById(id);
	if(!GBrowserIsCompatible()) {
		mapElem.innerHTML = '<p class="error">An error occured generating the google maps.</p>';
		return;
	}
	var map = new GMap2(mapElem);
	map.setCenter(new GLatLng(lat, lng), zoom);
	map.addControl(new GSmallMapControl());
	
	// To prevent memory leaks
	GEvent.addListener(window, 'unload', GUnload);
		
	var markers = {};
	var bounds = new GLatLngBounds();
	this.addPoint = function(lat, lng, html, id) {
		var marker = new GMarker(new GLatLng(lat, lng));
		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(html);
			map.panTo(new GLatLng(lat, lng));
		});
		map.addOverlay(marker);
		bounds.extend(marker.getPoint());
		if(id) markers[id] = marker;
	};
	
	this.viewMarker = function(id) {
		GEvent.trigger(markers[id], 'click');
	};

	this.centerAt = function(lat, lng, html) {
		map.panTo(new GLatLng(lat, lng));
		if(html) map.openInfoWindowHtml(map.getCenter(), html);
	};
	
	this.centerAndZoom = function() {
		var newZoom = map.getBoundsZoomLevel(bounds);
		var newCenter = bounds.getCenter();
		if(newZoom < zoom) map.setZoom(newZoom);
		map.setCenter(newCenter);
	}
}
