/**
 * @file
 * GMap Markers
 * Martin Pearman's ClusterMarker version
 */

/*global ClusterMarker, Drupal, GMarker */

// Replace to override marker creation
Drupal.gmap.factory.marker = function (loc, opts) {
    return new GMarker(loc, opts);
};

Drupal.gmap.addHandler('gmap', function (elem) {
    var obj = this;

    obj.bind('init', function () {
        obj.clusterMarker = 0;
    });

    obj.bind('iconsready', function () {
        if (!obj.clusterMarker) {
            // Force copying the settings so we don't overwrite them.
            var options = jQuery.extend(true, {}, Drupal.settings.gmap_markermanager);
            if (options.clusterMarkerIcon.length) {
                options.clusterMarkerIcon = Drupal.gmap.getIcon(options.clusterMarkerIcon, 0);
            }
            else {
                delete options.clusterMarkerIcon;
            }
            options.borderPadding = +options.borderPadding;
            options.fitMapMaxZoom = +options.fitMapMaxZoom;
            options.intersectPadding = +options.intersectPadding;
            obj.clusterMarker = new ClusterMarker(obj.map, options);
        }
    });

    obj.bind('addmarker', function (marker) {
        obj.clusterMarker.addMarkers([marker.marker]);
    });

    obj.bind('delmarker', function (marker) {
        // @@@TODO: Implement this!
    });

    obj.bind('clearmarkers', function () {
        obj.clusterMarker.removeMarkers();
    });

    obj.bind('markersready', function () {
        obj.clusterMarker.refresh();
    });
});
