
function ExtentMarkers() {
	this.bFirstTime = true;
	this.xMin = 0;
	this.xMax = 0;
	this.yMin = 0;
	this.yMax = 0;
}

ExtentMarkers.prototype.calcCenter = function() {
	var xCenter = this.xMin + ((this.xMax - this.xMin)/2);
	var yCenter = this.yMin + ((this.yMax - this.yMin)/2);
	return new GLatLng(yCenter, xCenter);
}

ExtentMarkers.prototype.calcBound = function() {
	return new GLatLngBounds(new GLatLng(this.yMin, this.xMin), new GLatLng(this.yMax, this.xMax));
}

function addMarker(map, geocoder, extent, gaddress, address, city, state, zip, url, storeName, lat, lng) {
		if (lat && lng) {
			var marker = new GMarker(new GLatLng(lat,lng));
			if (extent.bFirstTime) {
				extent.xMin = extent.xMax = lng;
				extent.yMin = extent.yMax = lat;
				extent.bFirstTime = false;
				map.setCenter(new GLatLng(lat,lng), 4);
			}
			else {
				if (extent.xMin > lng)
					extent.xMin = lng;
				if (extent.yMin > lat)
					extent.yMin = lat;
				if (extent.xMax < lng)
					extent.xMax = lng;
				if (extent.yMax < lat)
					extent.yMax = lat;
				
				map.setCenter(extent.calcCenter(), map.getBoundsZoomLevel(extent.calcBound()));
			}
			map.addOverlay(marker);
			GEvent.addListener(marker, "click", function() {
				if (url != '')
					marker.openInfoWindowHtml("<span style=\"font-size: 14px;\"><strong>" + storeName + "</strong><br />" + address + "<br/>" + city + ", " + state + " " + zip + "<br /><a href=\"" + url + "\">Visit Site</a></span>");
				else
					marker.openInfoWindowHtml("<span style=\"font-size: 14px;\"><strong>"  + storeName + "</strong><br />" + address + "<br/>" + city + ", " + state + " " + zip + "</span>");
			});
		}
}

function initialize(idContainer, arDataMarker) {
	if (GBrowserIsCompatible()) {
		var geocoder = new GClientGeocoder();
        var map = new GMap2(document.getElementById(idContainer));
        var extent = new ExtentMarkers();
        map.enableScrollWheelZoom();
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(37.4419, -122.1419), 5);
        for (var i = 0; i < arDataMarker.length; i++) { 
			addMarker(map, geocoder, extent, arDataMarker[i].gaddress, arDataMarker[i].address, arDataMarker[i].city, arDataMarker[i].state, arDataMarker[i].zip, arDataMarker[i].url, arDataMarker[i].storeName, arDataMarker[i].lat, arDataMarker[i].lng);
		}
	}
}

