﻿
$.fn.extend({
    paginering: function(options) {
        var defaults = {
            itemsAPage  : 12,
            pageTag     : ".pagegroup",
            itemTag     : ".pirobox_gall",
            nextBtn     : ".next",
            prevBtn     : ".prev",
            pageBtn     : ".gopage",
            pageNrAttr  : "page",
            curPage     : 1,
            selectedClass   : "selected",
            textTag     : ".xvany"
        };

        var options = $.extend(defaults, options);

        return this.each(function() {
            $obj = $(this);
            
            // Select default page
            selectCurPagePaging();
            
            // Hide all pages that should not be shown            
            $(options.pageTag).eq(options.curPage - 1).prevAll().hide();
            $(options.pageTag).eq(options.curPage - 1).nextAll().hide();
            
            // Hide next/prev button if needed
            if(options.curPage == 1) $(options.prevBtn).hide();                
            if(options.curPage == $(options.pageTag).length) $(options.nextBtn).hide();
            
            // Set text
            setText();
            
            // Buffer
            $(this).buffer({    containerTag: options.pageTag,
                                excludeStart : options.curPage - 2,
                                excludeLength   : 3
                            });
            
            // Click on a page
            $(options.pageBtn).click(function(){
                var newpage = $(this).attr(options.pageNrAttr);
                selectPage(newpage);
                
                return false;
            });
            
            // Go to next page
            $(options.nextBtn).click(function(){
                var newpage = parseInt(options.curPage) + 1;
                selectPage(newpage);
                
                return false;
            });
            
            // Go to prev page
            $(options.prevBtn).click(function(){
                var newpage = parseInt(options.curPage) - 1;
                selectPage(newpage);
                
                return false;
            });
            
            // Selects the page
            function selectPage(newpage)
            {
                // Page settings
                var oldpage = options.curPage;
                options.curPage = newpage;
                
                // Disable next/prev btn
                if(newpage == 1) $(options.prevBtn).hide();
                else $(options.prevBtn).show();
                
                if(newpage == $(options.pageTag).length) $(options.nextBtn).hide();
                else $(options.nextBtn).show();
                
                // Unbuffer
                 $($obj).unbuffer({    
                                containerTag: options.pageTag,
                                unbufferStart : newpage - 2,
                                unbufferLength   : 3
                            });
                            
                // Fix paging
                selectCurPagePaging();
                
                // Update text
                setText();
                
                // Select new page
                $(options.pageTag).eq(oldpage - 1).fadeOut();
                $(options.pageTag).eq(newpage - 1).fadeIn();
            }
            
            // Selects the current page paging
            function selectCurPagePaging()
            {
                $(options.pageBtn).removeClass("selected");
                $(options.pageBtn + "[" + options.pageNrAttr + "='" + options.curPage + "']")
                    .addClass("selected");
            }
            
            function setText()
            {
                var start = ( options.curPage * options.itemsAPage ) - options.itemsAPage + 1;
                var end = ( options.curPage * options.itemsAPage );
                if(end > $(options.itemTag).length) end = $(options.itemTag).length;
                $(options.textTag).html( start +  " - " + end + " van " + $(options.itemTag).length);
            }
            
            // Altijd this returnen
            return this;
        });
    }
});