(function($) {
    $.fn.reverse = function() {
        return this.pushStack(this.get().reverse(), arguments);
    };
	$.fn.pager = function(opts) {
		$.fn.pager.defaults = { 
		    splitter: "hr",
		    removeSplitter: true
		};
		var opts = $.extend({}, $.fn.pager.defaults, opts);

		return this.each(function(idx) {
		    var contentArea = this;
		    var splitters = $(this).find(opts.splitter);
		    var numPages = splitters.length;
		    
		    if (!numPages) return;
		    
		    numPages++;

		    splitters.each(function(idx) {
		        
		        var contentBlocks = $(this).prevAll(":not(hr,div.page)").reverse();
		        contentBlocks.wrapAll('<div class="page"></div>');
		        if (idx + 1 == numPages - 1) {
		            contentBlocks = $(this).nextAll(":not(hr)");
    		        contentBlocks.wrapAll('<div class="page"></div>');
		        }
		    });
		    splitters.remove();

		    var pagerUl = $('<ul></ul>');
		    for (var x=1; x<=numPages; x++) {
		        var a = $('<li><a href="#' + x + '">' + x + '</a></li>');
		        pagerUl.append(a);
		    }
		    pagerUl.append('<li class="continue"><a href="#">Continue</a></li>');
		    pagerUl.wrapAll('<div class="pager"></div>');
		    
		    var pager = pagerUl.parent();
		    pager.insertAfter($(this));
		    
		    $(function() {
                $(window).bind( 'hashchange', function(e) {
                    var url = $.param.fragment();
                    if (!url) url = 1;
                    $(contentArea).find("div.page").removeClass("active").eq(url-1).addClass("active");
                    var cont = $(contentArea).next("div.pager").find("ul li").removeClass("active").eq(url-1).addClass("active").end().children("a").blur().end().filter(".continue");
                    if (url < numPages) {
                        cont.show().children("a").attr("href", "#" + (parseInt(url) + 1));
                    } else {
                        cont.hide();
                    }
                }); 
                $(window).trigger('hashchange');   
        	});
	    });
	};
})(jQuery);
