(function($) {

	$.fn.ajaxPager = function(options) {

            var defaults = {
                        container : '',
                        link: '',
                        pagesNumber: 1,
                        currPage: 1
            };

            options = $.extend(defaults, options);
            
            var pager = $(this);

            function buildPager(currPage, pagesNumber){
                currPage = parseInt(currPage);
                var retStr = '';

                if(pagesNumber > 1){
                    if(currPage > 1){
                        retStr += '<a class="first" title="pierwsza strona" page="1"></a>';
                        retStr += '<a class="prev" page="'+(currPage-1)+'" title="poprzednia strona"></a>';
                    }
                    var showPages = 5;
                    var interval = parseInt(showPages / 2);
                    var loopStart = currPage > interval ? (pagesNumber - currPage < interval ? Math.max(pagesNumber - showPages + 1, 1) : currPage - interval) : 1;
                    var loopEnd = (pagesNumber - currPage >= interval) ? (currPage + interval < showPages ? Math.min(showPages, parseInt(pagesNumber)) : currPage + interval) : pagesNumber;

                    for(var i = loopStart; i <= loopEnd; i++){
                        var active = i == currPage ? ' active' : '';
                        retStr += '<a id="page'+i+'" page="'+i+'" class="page'+active+'" title="strona '+i+'">' + i + '</a>';
                    }

                    if(currPage < pagesNumber){
                        retStr += '<a class="next" page="'+(currPage+1)+'" title="następna strona"></a>';
                        retStr += '<a class="last" title="ostatnia strona" page="'+pagesNumber+'"></a>'
                    }
                }
                pager.html(retStr);
            }

            function loadPage(pageNumber){
                var url = options.link + (options.link.match(/\?/) ? '&' : '?') +'apage=' + pageNumber;
                var preloader_width = 150;
                var pos = findPos($(options.container));
                var preloader_top = pos.top + ($(options.container).height()) / 2 ;
                var preloader_left = pos.left + ($(options.container).width() - preloader_width) / 2 ;
                $(options.container).append("<div style='background-color: white; border: 1px solid gray; position: absolute; z-index: 1000; width: " + preloader_width + "px; left: " +preloader_left+ "px; top: " + preloader_top +  "px; text-align: center;padding: 10px 10px 10px 10px'>wczytywanie danych....<br><img src='/images/preloader.gif'></div>");
                $.get(url, null,
                        function(data){
                            setTimeout(function(){$(options.container).html(data);buildPager(pageNumber, options.pagesNumber);assignEvents();}, 10);
                        }
                    );
                //$(options.container).load(, null, buildPager(pageNumber, options.pagesNumber));
                
            }

            $('#'+$(this).attr('id')+' .first').die('click');
            $('#'+$(this).attr('id')+' .prev').die('click');
            $('#'+$(this).attr('id')+' .next').die('click');
            $('#'+$(this).attr('id')+' .last').die('click');
            $('#'+$(this).attr('id')+' .page').die('click');

            $('#'+$(this).attr('id')+' .first').live('click', function(){
                loadPage(1);
            });
            $('#'+$(this).attr('id')+' .prev').live('click', function(){
                loadPage($(this).attr('page'));
            });
            $('#'+$(this).attr('id')+' .next').live('click', function(){
                loadPage($(this).attr('page'));
            });
            $('#'+$(this).attr('id')+' .last').live('click', function(){
                loadPage(options.pagesNumber);
            });
            $('#'+$(this).attr('id')+' .page').live('click', function(){
                loadPage($(this).attr('page'));
            });

            buildPager(1, options.pagesNumber);
            if(options.currPage != 1)
                loadPage(options.currPage);
        }
})(jQuery);

