
function Google_Load()
{
    $(document).ready(function(){
       // Fixes IE issues
       $('.brightspark-map').each(function(){
           var data = $(this).data('map', data);
           data.map.checkResize();
           Google_ShowAllMarkers(data);
       });
    });
}

function Google_Unload()
{
    GUnload();
}

function Google_FocusMarker(data, pos, marker_info_html)
{
    data.map.openInfoWindowHtml(pos, marker_info_html);
}

function Google_CreateMarker(data, lat, lng)
{
    Google_Load();
    
    var marker = null;
    var args = {};
    var pos = new GLatLng(lat, lng);
    var options = {
        draggable:false,
        icon:null
    };

    if (arguments.length > 3) args = arguments[3];

    if ("image" in args)
    {
        options.icon = new GIcon();
        options.icon.image = args.image;
        options.icon.iconSize = new GSize(args.marker_x || 40, args.marker_y || 40);
        options.icon.iconAnchor = new GPoint(args.anchor_x || 12, args.anchor_y || 38);
    }

    marker = new GMarker(pos, options);

    if (("html" in args) && (args.html.length > 0))
    {
        GEvent.addListener(marker, 'click', function() {
            Google_FocusMarker(data, pos, args.html);
        });
    }
    
    data.bounds.extend(pos);

    return marker;
}

function Google_ShowAllMarkers(data)
{
    data.map.closeInfoWindow();
    zoom = data.map.getBoundsZoomLevel(data.bounds);
    if (zoom > data.zoom) zoom = data.zoom;
    data.map.setZoom(zoom);
    data.map.setCenter(data.bounds.getCenter());

}

function Google_ProcessOverlays(data)
{
    if ((data != null) && (data.overlays != null))
    {
        if (data.map != null)
        {
            while (data.overlays.length > 0)
            {
                data.map.addOverlay(data.overlays.pop());
            }
        }

        data.overlays = null;
        Google_ShowAllMarkers(data);
    }
}

function Google_InitMap(map_id, lat, lng)
{
    Google_Load();

    var data = {
        map:null,
        overlays:null,
        bounds:new GLatLngBounds(),
        zoom:15
        };
    var div = $("#"+map_id);

    div.data('map', data);
    div.addClass('brightspark-map');

    if (arguments.length > 3)
    {
        options = arguments[3];

        if ("zoom" in options) data.zoom = options.zoom;
    }

    if (GBrowserIsCompatible())
    {
        data.map = new GMap2($("#" + map_id)[0]);
        data.map.setCenter(new GLatLng(lat, lng), data.zoom);

        if (("controls" in options) && (options.controls == "small"))
        {
            data.map.addControl(new GSmallMapControl());
        }

        if (("draggable" in options) && options.draggable)
        {
            data.map.enableDragging();
        }
        else
        {
            data.map.disableDragging();
        }

        if (("zoomable" in options) && options.zoomable)
        {
            data.map.enableDoubleClickZoom();
        }
        else
        {
            data.map.disableDoubleClickZoom();
        }

        GEvent.addListener(
            data.map,
            'infowindowclose',
            function()
            {
                Google_ShowAllMarkers(data);
                //google_map.setCenter(new GLatLng(lat, lng));
            }
        );

        Google_ProcessOverlays(data);
    }

}

function Google_AddMarker(map_id, lat, lng)
{
    var options = {};
    var div = $("#" + map_id);
    var data = div.data('map');

    if (arguments.length > 3)
    {
        options = arguments[3];
    }

    if (data.overlays == null)
    {
        data.overlays = new Array();
    }

    var marker = Google_CreateMarker(data, lat, lng, options);

    data.overlays.push(marker);

    Google_ProcessOverlays(data);

    if ("link" in options)
    {
        elem = $(options.link).hover(
            function(){
                Google_FocusMarker(data, marker.getLatLng(), options.html);
            },
            function(){
                Google_ShowAllMarkers(data);
            }
        )

    }

    return marker;
}

function Google_ClearMarkers(map_id)
{
    var div = $("#"+map_id);
    var data = div.data('map');

    if (data.map != null)
    {
        data.map.clearOverlays();
    }
}

