--- /dev/null
+$.fn.clone = function(){
+ return this.pushStack( $.map(this,"a.cloneNode(true)"), arguments );
+};
+
+
+$.fn.pager = function(step,fn) {
+ var types = {
+ UL: "li",
+ OL: "li",
+ DL: "dt",
+ TABLE: "tbody > tr"
+ };
+
+ return this.each(function(){
+ var pagedUI = this;
+ var rows = $(types[this.nodeName], this);
+ var curPage = 0;
+ var names = [], num = [];
+
+ if ( !step || step.constructor != Function ) {
+ step = step || 10;
+
+ if (rows.length > step)
+ for ( var i = 0; i <= rows.length; i += step ) {
+ names.push( names.length + 1 );
+ num.push( [ i * step, step ] );
+ }
+ } else {
+ var last;
+ rows.each(function(){
+ var l = step.apply( this ).substr(0,1);
+ if ( l != last ) {
+ names.push( l.toUpperCase() );
+ var pre = num.length ? num[ num.length - 1 ][0] + num[ num.length - 1 ][1] : 0;
+
+ num.push( [ pre, 0 ] );
+ last = l;
+ }
+
+ num[ num.length - 1 ][1]++;
+ });
+ }
+
+ if ( names.length ) {
+ var pager = $("<ul class='nav-page'></ul>");
+
+ for ( var i = 0; i < names.length; i++ )
+ $("<a href=''></a>").rel( i ).html( names[i] ).click(function() {
+ return handleCrop( this.rel );
+ }).wrap("<li></li>").parent().appendTo(pager);
+
+ pager.insertBefore( this );
+
+ var prev = $("<a href=''>« Prev</a>").click(function(){
+ return handleCrop( --curPage );
+ }).wrap("<li class='prev'></li>").parent().prependTo(pager);
+
+ var next = $("<a href=''>Next »</a>").click(function(){
+ return handleCrop( ++curPage );
+ }).wrap("<li class='next'></li>").parent().appendTo(pager);
+
+ handleCrop( 0 );
+ }
+
+ function handleCrop( page ) {
+ curPage = page - 0;
+ var s = num[ curPage ][0];
+ var e = s + num[ curPage ][1];
+
+ if ( !curPage ) prev.hide();
+ else prev.show();
+
+ if ( curPage == names.length - 1 ) next.hide();
+ else next.show();
+
+ $("li",pager)
+ .removeClass("cur")
+ .eq( curPage + 1 )
+ .addClass("cur");
+
+ rows
+ .hide()
+ .gt(s - 1).lt(e)
+ .show()
+ .end().end();
+
+ if ( fn )
+ fn.apply( pagedUI, [ s, e ] );
+
+ return false;
+ }
+ });
+};