(function(A){A.fn.extend({scrollable:function(D,C,B){return this.each(function(){if(typeof D=="string"){var E=A.data(this,"scrollable");E[D].apply(E,[C,B])}else{new A.scrollable(this,D,C)}})}});A.scrollable=function(B,C){A.data(B,"scrollable",this);this.init(B,C)};A.extend(A.scrollable.prototype,{init:function(F,D){var C=this;var G={size:5,horizontal:false,activeClass:"active",speed:300,onSeek:null,items:".items",prev:".prev",next:".next",navi:".navi",naviItem:"span"};this.opts=A.extend(G,D);var B=this.root=A(F);var E=A(G.items,B);if(!E.length){E=B}E.css({position:"relative",overflow:"hidden",visibility:"visible"});E.children().wrapAll('<div class="__scrollable" style="position:absolute"/>');this.wrap=E.children(":first");this.wrap.css(G.horizontal?"width":"height","200000em").after('<br clear="all"/>');this.items=this.wrap.children();this.index=0;if(G.horizontal){E.width(G.size*(this.items.eq(1).offset().left-this.items.eq(0).offset().left)-2)}else{E.height(G.size*(this.items.eq(1).offset().top-this.items.eq(0).offset().top)-2)}if(A.isFunction(A.fn.mousewheel)){B.bind("mousewheel.scrollable",function(H,I){C.move(-I,50);return false})}A(window).bind("keypress.scrollable",function(H){if(A(H.target).parents(".__scrollable").length){if(G.horizontal&&(H.keyCode==37||H.keyCode==39)){C.move(H.keyCode==37?-1:1);return false}if(!G.horizontal&&(H.keyCode==38||H.keyCode==40)){C.move(H.keyCode==38?-1:1);return false}}return true});this.items.each(function(I,H){A(this).bind("click.scrollable",function(){C.click(I)})});this.activeIndex=0;A(G.prev,B).click(function(){C.prev()});A(G.next,B).click(function(){C.next()});A(G.navi,B).each(function(){var K=A(this);var H=C.getStatus();if(K.is(":empty")){for(var I=0;I<H.pages;I++){var J=A("<"+G.naviItem+"/>").attr("page",I).click(function(){var L=A(this);L.parent().children().removeClass(G.activeClass);L.addClass(G.activeClass);C.setPage(L.attr("page"))});if(I==0){J.addClass(G.activeClass)}K.append(J)}}else{K.children().each(function(L){var M=A(this);M.attr("page",L);if(L==0){M.addClass(G.activeClass)}M.click(function(){M.parent().children().removeClass(G.activeClass);M.addClass(G.activeClass);C.setPage(M.attr("page"))})})}})},click:function(C){var E=this.items.eq(C);var B=this.opts.activeClass;if(!E.hasClass(B)&&(C>=0||C<this.items.size())){var D=this.items.eq(this.activeIndex).removeClass(B);E.addClass(B);this.seekTo(C-Math.floor(this.opts.size/2));this.activeIndex=C}},getStatus:function(){var B=this.items.size();var C={length:B,index:this.index,size:this.opts.size,pages:Math.round(B/this.opts.size),page:Math.round(this.index/this.opts.size)};return C},seekTo:function(C,I){if(C<0){C=0}C=Math.min(C,this.items.length-this.opts.size);var E=this.items.eq(C);if(E.size()==0){return false}this.index=C;if(this.opts.horizontal){var H=this.wrap.offset().left-E.offset().left;this.wrap.animate({left:H},I||this.opts.speed)}else{var G=this.wrap.offset().top-E.offset().top;this.wrap.animate({top:G},I||this.opts.speed)}if(A.isFunction(this.opts.onSeek)){this.opts.onSeek.call(this.getStatus())}var D=A(this.opts.navi,this.root);if(D.length){var B=this.opts.activeClass;var F=Math.round(C/this.opts.size);D.children().removeClass(B).eq(F).addClass(B)}return true},move:function(C,B){this.seekTo(this.index+C,B)},next:function(B){this.move(1,B)},prev:function(B){this.move(-1,B)},movePage:function(C,B){this.move(this.opts.size*C,B)},setPage:function(B,C){this.seekTo(this.opts.size*B,C)},begin:function(B){this.seekTo(0,B)},end:function(B){this.seekTo(this.items.size()-this.opts.size,B)}})})(jQuery);