function setupZoomToMarkers(map) {
	if(typeof(map.zoomToMarkers) == 'function')
		return;

	map.zoomToMarkers = function(margin,points,maxZoom) {
		// if there are no points specified, use the mapped markers' points
	  if(!points) {
		  var m = this.getMarkers();
		  if(m.length == 0)
		  	return; // return if we don't know where to zoom

			// get the points of the markers
	    var points = [];
	    for(var i = 0; i < m.length; i++)
	      points.push(m[i].getPoint());
	  } else if(points.length && typeof(points[0].getPoint) == 'function') {
			// there are markers specified, so get their points
	    var p = [];
	    for(var i = 0; i < points.length; i++)
	      p.push(points[i].getPoint());
	    points = p;
	  }

		if(!points[0])
			return;

		margin = margin || 0; // set the default (a percentage of the span)

		// create the bounds to zoom to
		var bounds = new GLatLngBounds(points[0]);
		for(var i = 1; i < points.length; i++) {
			bounds.extend(points[i]);
		}
		var span = bounds.toSpan();
		var ne = bounds.getNorthEast();
		var sw = bounds.getSouthWest();
		var newNE = new GLatLng(ne.lat()+margin*span.lat(),ne.lng()+margin*span.lng());
		bounds.extend(newNE);
		var newSW = new GLatLng(sw.lat()-margin*span.lat(),sw.lng()-margin*span.lng());
		bounds.extend(newSW);

		var lat = bounds.getSouthWest().lat() + .5 * bounds.toSpan().lat();
		var lng = bounds.getSouthWest().lng() + .5 * bounds.toSpan().lng();
		var center = new GLatLng(lat,lng);

		var zoom = this.getBoundsZoomLevel(bounds);
	  if(arguments.length > 2 && zoom > maxZoom)
	    zoom = maxZoom;

		this.setCenter(center,zoom);
	};
}

