google.load("maps", "2");

gMap             = null;
gGeocoder        = null;
gMarkerArray     = new Object();
gMarkerCounter   = 0;
gDisplayInterval = 0;

function initGMap(initialAddress) {
	if (!google.maps.BrowserIsCompatible()) {
		return false;
	}
	
	gMap      = new google.maps.Map2(document.getElementById("googleMapCanvas"));
	gGeocoder = new google.maps.ClientGeocoder();

	gMap.enableScrollWheelZoom();

	gMap.addControl(new google.maps.MapTypeControl());
	gMap.addControl(new google.maps.LargeMapControl());
	
	zoomLevel = 1;
	if (initialAddress.split(" ").length >= 1)
		zoomLevel = 6;
	if (initialAddress.split(" ").length >= 2)
		zoomLevel = 12;
	if (initialAddress.split(" ").length >= 4)
		zoomLevel = 15;

	gGeocoder.getLatLng(initialAddress, function(point) {
		if (!point) {
			return;
		}

		gMap.setCenter(point, zoomLevel);
	});
	
}

function addGMarker(infoWindowNodeId, markerAddress) {
	gMarkerCounter ++;
	gGeocoder.getLatLng(markerAddress, function(point) {
		if (!point)
			return;
		
		var pointMarker = new google.maps.Marker(point);
		pointMarker.bindInfoWindow(document.getElementById(infoWindowNodeId).cloneNode(true));
		
		gMarkerArray[infoWindowNodeId] = pointMarker;
		gMarkerCounter --;
	});
}

function displayGMap() {
	gDisplayInterval = window.setInterval(function() {
		if (gMarkerCounter > 0)
			return;
		
		var i = 0, latMin = -1, latMax = -1, lngMin = -1, lngMax = -1;
		for (var index in gMarkerArray) {
			var gMarker = gMarkerArray[index];
			var gLatLng = gMarker.getLatLng();
			latMin = latMin == -1 ? gLatLng.lat() : Math.min(latMin, gLatLng.lat());
			latMax = latMax == -1 ? gLatLng.lat() : Math.max(latMax, gLatLng.lat());
			lngMin = lngMin == -1 ? gLatLng.lng() : Math.min(lngMin, gLatLng.lng());
			lngMax = lngMax == -1 ? gLatLng.lng() : Math.max(lngMax, gLatLng.lng());
			
			gMap.addOverlay(gMarker);
			
			i ++;
		}
		
		if (i > 0) {
			var gLatLngBounds = new google.maps.LatLngBounds(
					new google.maps.LatLng(latMin, lngMin),
					new google.maps.LatLng(latMax, lngMax)
			);
			var zoomLevel = gMap.getBoundsZoomLevel(gLatLngBounds);
			zoomLevel = 11;	
			gMap.setCenter(gLatLngBounds.getCenter(), zoomLevel);
		}
		
		window.clearInterval(gDisplayInterval);
	}, 100);
}

function zoomGMapAddress(infoWindowNodeId) {
	
	gMap.setCenter(gMarkerArray[infoWindowNodeId].getLatLng(), 15);
	gMarkerArray[infoWindowNodeId].openInfoWindow(document.getElementById(infoWindowNodeId).cloneNode(true));
}



