/**
 * Created by jdalk on 07.07.2017.
 */
(function ( $ ) {

    $.fn.ajaxPagination = function ( options ) {
        var settings = $.extend({
            number: 10,
            numFound: 10,
            wrapperID: ''
        }, options);

        var wrapper = $('#' + settings.wrapperID),
            pages = Math.ceil( settings.numFound / settings.number ),
            listNext = wrapper.find( 'li.next' ),
            listPrev = wrapper.find( 'li.previous' ),
            form = wrapper.find( 'form.paginatedForm' ),
            pagerFormField = wrapper.find( '.pagination-pager' ),
            pager = 1;

        // pagenumbers must be rendered first
        var pagenumbers = this.find( 'ul.pagination li.pagelink' );

        listNext.click( function (e) {
            e.preventDefault();

            if( pager < pages ) {
                pager++;
                pagerFormField.val( pager );
                setPagination( pager, wrapper );
                if( pager >= 2 ) listPrev.removeClass( 'disabled' );
                if( pager == pages ) listNext.addClass( 'disabled' );
                var action = form.attr( 'action' ),
                    method = form.attr( 'method' ),
                    data = form.serialize();
                ajaxPaginated(action, method, data, wrapper, settings.wrapperID);
            }
        });

        listPrev.click( function (e) {
            e.preventDefault();
            if( pager > 1 ) {
                pager--;
                pagerFormField.val( pager );
                setPagination( pager, wrapper );
                if( pager < pages ) listNext.removeClass( 'disabled' );
                if( pager < 2 ) listPrev.addClass( 'disabled' );
                var action = form.attr( 'action' ),
                    method = form.attr( 'method' ),
                    data = form.serialize();
                ajaxPaginated(action, method, data, wrapper, settings.wrapperID);
            }
        });

        pagenumbers.click( function (e) {
            e.preventDefault();
            pager = $(this).val();
            pagerFormField.val( pager );
            ( pager < 2 ) ? listPrev.addClass( 'disabled' ) : listPrev.removeClass('disabled');
            ( pager == pages ) ? listNext.addClass( 'disabled' ) : listNext.removeClass('disabled');
            wrapper.find( 'ul.pagination li#' + pager ).addClass( 'active' );
            if( pager + 5 < pages ) setPagination( pager, wrapper );
            var action = form.attr( 'action' ),
                method = form.attr( 'method' ),
                data = form.serialize();
            ajaxPaginated(action, method, data, wrapper, settings.wrapperID);
        });

        return this;
    }

})(jQuery);

function ajaxPaginated(action, method, data, wrapper, wrapperID) {
    $( 'html, body' ).animate({
        scrollTop: ( $( '#' + wrapperID ).offset().top - 80 )
    },500 );
    // $(document).scrollTop(wrapper.find( 'form.paginatedForm' ), 600);
    $( '#spinner-modal' ).modal( 'show' );
    $( 'body' ).addClass( 'modal-open' );
    $.ajax({
        url: action,
        type: method,
        data: data
    }).done( function ( data ) {
        wrapper.find( '.formresult-paginated' ).html( data );

        //refresh stroertags
        jQuery(document).ready(function() {
            SDG.Publisher.unregisterSlot('rectangle', true);
            SDG.Publisher.unregisterSlot('gpt_rectangle', true);

            SDG.Publisher.registerSlot('rectangle', 'gpt_rectangle');

            SDG.Publisher.finalizeSlots();
            SDG.Publisher.loadAllSlots(true);
        });

        // googletag.pubads().refresh([slots['gpt_rectangle'], slots['gpt_superbanner'], slots['gpt_skyscraper']]);
    }).fail( function () {
        wrapper.find( '.formresult-paginated' ).html( '<p>Verzeihung. Es ist ein Fehler aufgetreten. Bitte laden Sie die Seite neu.</p>' )
    }).always( function () {
        $( '#spinner-modal' ).modal( 'hide' );
    });
}
//
function setPagination(pager, wrapper) {
    var lis = wrapper.find( 'ul.pagination li.pagelink' );
    var i;
    if( pager <= 3 ) {
        i = 1;
    }else{
        i = pager - 2;
    }

    lis.each( function () {
        $( this ).val( i ).attr( 'id', i ).find( 'a' ).text( i );
        i++;
    });
    wrapper.find( 'ul.pagination li' ).removeClass( 'active' );
    wrapper.find( 'ul.pagination li#' + pager ).addClass( 'active' );
}

