function Pager() {
    var defaults = {
            target: 'body',
            urlTemplate: null,
            currentPage: 1,
            pageNum: 1,
            intervall: 5,
            spacer: ' ... '
            },
        options = {},
        pager = null;

    
    var startPage = function() {
//        if (options.currentPage == null)
//            options.currentPage = getCurrentPage();
    
        var hintervall = Math.floor(options.intervall/2),
            mod = options.intervall % 2 == 0 ? 0 : 1,
            right = options.currentPage + hintervall,
            left = options.currentPage - hintervall;
    
        if (right >= options.pageNum) left -= right - options.pageNum + mod;
    
        if (left <= 0) return 1;
        else return left;
        };
    

    var update = function(e) {
        options.currentPage = e.data.page;
    
        build();
        $('.pager', options.target).replaceWith(pager);
        ajaxlinks(options.target); //XXX
        };
    

    var attach = function() {
        $(options.target).append(pager);
        };


    var makeSpacer = function() {
        pager.append(options.spacer);
        };


    var makeBookmark = function(page) {
        $.tmpl(options.urlTemplate, {page: page})
            .click({page: page}, update)
            .appendTo(pager);
        };

    var build = function() {
        var start = startPage();
    
        pager = $('<div></div>').addClass('pager');
        
        if (start != 1) {
            makeBookmark(1);
            makeSpacer();
            }
            
        for (var i = start; i <= start + options.intervall && i <= options.pageNum; i++)
            makeBookmark(i);
            
        if (start + options.intervall < options.pageNum) {
            makeSpacer();
            makeBookmark(options.pageNum);
            }
        };


    this.__constructor = function(opts) {
        options = $.extend(defaults, opts);
        
        build();
        attach();
        };

        
    this.__constructor.apply(this, arguments);
};

