    Event.observe(window, 'unload', GUnload);
    function one_or_negative_one () {
        var seed = Math.ceil(Math.random() * 2);
        return (seed % 2)?(1):(-1);
    }

    function createMarker(map, point, user) 
    {
        var marker = new GMarker(point);
        GEvent.addListener(marker, "click", function() {
            map.openInfoWindow(point, $(user.id).cloneNode(true));
        });
        if (user.trigger_id) 
        {
            GEvent.addDomListener($(user.trigger_id), 'click', function () 
            {
                map.openInfoWindow(point, $(user.id).cloneNode(true));
            });
        }
        return marker;
    }

    var loaded_maps = [];
    function load_map(id, center_lat, center_lng, a_points)
    {
        if ( ! GBrowserIsCompatible || ! GBrowserIsCompatible() ) 
        {
        	return;
        }

        if ( loaded_maps[ id ] == id )
        {
        	return;
        }

        loaded_maps[ id ] = id;
        var map = new GMap2($(id));
        map.disableDragging();
        map.disableDoubleClickZoom();
        map.disableContinuousZoom();
        map.disableScrollWheelZoom();
 
        center = new GLatLng(center_lat, center_lng);
        map.setCenter(center, 11);

        if ( a_points.size() == 0 ) { return; }

        var latSpan = 0.01;
        var lngSpan = 0.01;
        var bounds = new GLatLngBounds();
        var first_info = [];
        a_points.each(function (point_iterator)  {
            var glatlng_point = new GLatLng(
                point_iterator.city_latitude + 
                    one_or_negative_one() * 
                    (latSpan * Math.random()), 
                point_iterator.city_longitude + 
                    one_or_negative_one() * 
                    (lngSpan * Math.random())
            );
            if ( ! first_info.glatlng_point )
            {
            	first_info.glatlng_point = glatlng_point;
            	first_info.point_id = point_iterator.id;
            }
            bounds.extend(glatlng_point);
            map.addOverlay(createMarker(map,glatlng_point, point_iterator));
    	});

        boundsZoom = map.getBoundsZoomLevel(bounds);

        if (boundsZoom >= 14) 
        {
            map.setZoom(14)
        }
        else
        {
            map.setZoom(boundsZoom);
        }

        map.setCenter(bounds.getCenter());

        if ( first_info.glatlng_point )
        {
            map.openInfoWindow(first_info.glatlng_point, $(first_info.point_id).cloneNode(true));
        }
    }


