$.DivPaginator = function(obj,opt)
{    
    var obj = obj, opt = opt;
    var defaults = {
        per_page: 4,
        cur_page: 0,
        obj_visible_class: 'visible',
        obj_hidden_class: 'hidden',
        paginator_container: '.pages',
        next_button: '<a href="javascript:;" title="strona następna" class="next1">&nbsp;</a>',
        prev_button: '<a href="javascript:;" title="strona poprzednia" class="prev1">&nbsp;</a>',
        first_button: '<a href="javascript:;" title="strona pierwsza" class="prev2">&nbsp;</a>',
        last_button: '<a href="javascript:;" title="strona ostatnia" class="next2">&nbsp;</a>',
        button_active: '<a href="javascript:;" class="pager active">{{page}}</a><span>|</span>',
        button_inactive: '<a href="javascript:;" class="pager no_active">{{page}}</a><span>|</span>'
    }
    var options = defaults;
    setOptions(opt);
    var divs = obj.children();
    var pages = get_pages();
    set_page(options.cur_page);
    current_page = options.cur_page;
    
    function setOptions(opt)
    {
        if (typeof(opt) != 'object') opt = { };
        options = $.extend(options,opt);
    };
    
    function get_pages(){
        pages = new Array;
        pages[0] = new Array;
        i = 0;
        j = 0;
        if (options.divs_ident){
            $(options.divs_ident).each(function(){
                if (i == options.per_page){
                    j++;
                    i=0;
                    pages[j] = new Array;
                }
                pages[j][i] = this;
                i++;
            });
        } else {
        divs.each(function(){
            if (i == options.per_page){
                j++;
                i=0;
                pages[j] = new Array;
            }
            pages[j][i] = this;
            i++;    
        });}
        return pages;
    }
    
    function set_page(page){
        for(i=0; i<pages.length; i++){
            $(pages[i]).each(function(){
                if (i==page){
                    set_visible(this);
                }else{
                    set_hidden(this);
                }
            });
        }
        write_paginator(page);
    }
    
    function set_visible(el){
        $(el).attr('class', options.obj_visible_class);
    }
    
    function set_hidden(el){
        $(el).attr('class', options.obj_hidden_class);
    }
    
    function write_paginator(page){
        paginator = '';
        if (pages.length > 1){
            paginator += options.first_button.replace('{call_function}', options.call_function).replace('{page}', 0);
            prev_page = page -1; 
            if (prev_page < 0){
                prev_page = 0;
            }
            paginator += options.prev_button.replace('{call_function}',options.call_function).replace('{page}', prev_page);
            for (i=0; i < pages.length; i++){
                if (i==page){
                    paginator += options.button_inactive.replace('{page}', i+1).replace('{call_function}',options.call_function).replace('{page}', i);
                } else {
                    paginator += options.button_active.replace('{page}', i+1).replace('{call_function}',options.call_function).replace('{page}', i);
                }
            }
            next_page = page + 1;
            if (next_page > pages.length - 1){
                next_page = pages.length - 1;
            }
            paginator += options.next_button.replace('{call_function}',options.call_function).replace('{page}', next_page);
            paginator += options.last_button.replace('{call_function}',options.call_function).replace('{page}', pages.length - 1);
        }                      
        
        $(options.paginator_container).html(paginator);
        if ($('.pager_page_of').length > 0){ 
            $('.pager_page_of').text((page+1) + ' z ' + pages.length);
        }
                         
    }
}