/**
 * JavaScript for Leaflet in the Semantic Maps extension.
 * @see https://www.mediawiki.org/wiki/Extension:Semantic_Maps
 *
 * @licence GNU GPL v2+
 * @author Peter Grassberger < petertheone@gmail.com >
 */


(function( $, sm ) {
    var ajaxRequest = null;

    var mapEvents = ['dragend', 'zoomend'];

    $( document ).ready( function() {
        // todo: find a way to remove setTimeout.
        setTimeout(function() {
            $( window.maps.leafletList ).each( function( index, map ) {
                if (!map.options.ajaxquery || !map.options.ajaxcoordproperty) {
                    return;
                }
                map.map.on( mapEvents.join( ' ' ), function() {
                    var bounds = map.map.getBounds();
                    var query = sm.buildQueryString(
                        decodeURIComponent(map.options.ajaxquery.replace(/\+/g, ' ')),
                        map.options.ajaxcoordproperty,
                        bounds.getNorthEast().lat,
                        bounds.getNorthEast().lng,
                        bounds.getSouthWest().lat,
                        bounds.getSouthWest().lng
                    );

                    if ( ajaxRequest !== null ) {
                        ajaxRequest.abort();
                    }
                    ajaxRequest = sm.ajaxUpdateMarker( map, query, map.options.icon ).done( function () {
                        map.createMarkerCluster();
                        ajaxRequest = null;
                    } );
                } );
            } );
        }, 1000 );
    } );
})( window.jQuery, window.sm );
