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