(function($) {
    $.fn.aqPaging = function(options) {
        var opts = $.extend({}, $.fn.aqPaging.defaults, options);

        return this.each(function() {
            if (opts.pages <= 1) return false;

            if (!$('.aqPaging', this).length) {
                $.fn.aqPaging.defaults.uniqID++;
                $('<div class="aqPaging" id="aqPaging_'
				+ $.fn.aqPaging.defaults.uniqID + '"><\/div>')
				.appendTo(this);

                $.fn.aqPaging.defaults.cbs[$.fn.aqPaging.defaults.uniqID]
				= opts.cb;

                $('.aqPaging', this).css(opts.css);
            }

            var $pager = $('.aqPaging', this);
            var pid = $pager.attr('id');

            var s = 1, e = opts.pages;
            var html = '';

            var offset = (opts.current > opts.max) ? 1 : 0;

            if (opts.pages > opts.max) {
                if (opts.current > opts.max)
                    s = opts.max * parseInt((opts.current - offset) / opts.max);

                if (opts.current - offset + opts.max < opts.pages)
                    e = s + opts.max + offset;
            }

            for (var p = s; p <= e; p++)
                html += '<a href="javascript:$.fn.aqPaging.flip(\'' + pid + '\''
				+ ',' + p + ',' + opts.pages + ');">' + p + '<\/a> ';

            $pager.html(html);

            if (opts.current >= s && opts.current - opts.max > 0) {
                $pager.prepend('<a href="javascript:$.fn.aqPaging.flip(\''
				+ pid + '\'' + ',1,' + opts.pages + ')">1<\/a> <i>&hellip;<\/i> ');
            }
            if ((opts.current - offset + opts.max) <= opts.pages && e != opts.pages) {
                $pager.append('<i>&hellip;<\/i>'
				+ ' <a href="javascript:$.fn.aqPaging.flip(\'' + pid + '\'' + ','
				+ opts.pages + ',' + opts.pages + ')">' + opts.pages + '<\/a> ');
            }

            var hi = ((opts.current - 1) % opts.max) + ((offset + 1) * offset);
            if (opts.css) {
                var _bg = $pager.css('backgroundColor');
                var _fg = $pager.css('color');
                var _bg2 = (_bg == 'transparent') ? '#4844E8' : _bg;

                $pager.find('a').css(opts.blockCss).css({
                    margin: '0px 3px 0px 0px', padding: '2px 0px 0px 0px', color:'#0044DD',
                    borderWidth: '1px', borderStyle: 'solid', borderColor:'#CCCCCC'
                })
			.not(':eq(' + hi + ')').hover(
				function() { $(this).css({ backgroundColor: '#FFE5E1', borderColor: '#FD2901', color:'#FD2901',fontWeight:'bold' }) },
				function() { $(this).css({ backgroundColor: '#ffffff', borderColor: '#CCCCCC', color:'#0044DD',fontWeight:'normal' }) }
			);
                $pager.find('a').eq(hi).css({ backgroundColor:'#FFE5E1', borderColor:'#FD2901', color:'#FD2901',fontWeight:'bold' });
                $pager.find('i').css(opts.blockCss);
            } else
                $pager.find('a').removeClass('aqPagingHi')
				.eq(hi).addClass('aqPagingHi');

            if (opts.flip)
                $.fn.aqPaging.flip(pid, opts.current, opts.pages);
        });
    };

    $.fn.aqPaging.flip = function(id, p, total) {
        var idx = id.replace(/aqPaging_/, '');
        var func = $.fn.aqPaging.defaults.cbs[idx];
        if (func) func(p);
        $('#' + id).parent().aqPaging({ current: p, pages: total });
        return false;
    };

    $.fn.aqPaging.defaults = {
        cbs: [], pages: 0, current: 0, max: 10, uniqID: 0, flip: false,
        css: { padding: '0px' }
        //blockCss: { display: 'block', float: 'left' },
        //blockCss: { float: 'left' },
        //borderColor: '#444'
    };
})(jQuery);

