(function(a){a.fn.hoverscroll=function(b){if(!b){b={}}b=a.extend({vertical:a.fn.hoverscroll.params.vertical,width:a.fn.hoverscroll.params.width,height:a.fn.hoverscroll.params.height,arrows:a.fn.hoverscroll.params.arrows,arrowsOpacity:a.fn.hoverscroll.params.arrowsOpacity,debug:a.fn.hoverscroll.params.debug},b);this.each(function(){var k=a(this);if(b.debug){a.log("[HoverScroll] Trying to create hoverscroll on element "+this.tagName+"#"+this.id)}k.wrap('<div class="listcontainer"></div>');k.addClass("list").addClass("ui-helper-clearfix");var l=k.parent();l.wrap('<div class="ui-widget-content hoverscroll"></div>');var c=l.parent();if(b.debug){if(c.hasClass("hoverscroll")){a.log("[HoverScroll] Wrapper created successfully")}else{a.log("[HoverScroll] Could not create or select wrapper")}}if(b.arrows){if(!b.vertical){l.append('<div class="arrowleft"></div>').append('<div class="arrowright"></div>')}else{l.append('<div class="arrowtop"></div>').append('<div class="arrowbottom"></div>')}}c.width(b.width).height(b.height);l.width(b.width).height(b.height);var m=0;if(!b.vertical){k.children().each(function(){m+=a(this).addClass("horizontal-item").outerWidth(true)});k.width(m);m=c.outerWidth()}else{k.children().each(function(){m+=a(this).addClass("vertical-item").outerHeight(true)});k.height(m);m=c.outerHeight()}var j={1:{action:"move",from:0,to:0.06*m,direction:-1,speed:16},2:{action:"move",from:0.06*m,to:0.15*m,direction:-1,speed:8},3:{action:"move",from:0.15*m,to:0.25*m,direction:-1,speed:4},4:{action:"move",from:0.25*m,to:0.4*m,direction:-1,speed:2},5:{action:"stop",from:0.4*m,to:0.6*m},6:{action:"move",from:0.6*m,to:0.75*m,direction:1,speed:2},7:{action:"move",from:0.75*m,to:0.85*m,direction:1,speed:4},8:{action:"move",from:0.85*m,to:0.94*m,direction:1,speed:8},9:{action:"move",from:0.94*m,to:m,direction:1,speed:16}};c[0].isChanging=false;c[0].direction=0;c[0].speed=1;function f(n,p){n=n-c.offset().left;p=p-c.offset().top;var o;if(!b.vertical){o=n}else{o=p}for(i in j){if(o>=j[i].from&&o<j[i].to){if(j[i].action=="move"){e(j[i].direction,j[i].speed)}else{g()}}}}function h(){if(!b.arrows){return}var q;var n;if(!b.vertical){q=l[0].scrollWidth-l.width();n=l[0].scrollLeft}else{q=l[0].scrollHeight-l.height();n=l[0].scrollTop}var p=(n/q);var o=b.arrowsOpacity;if(p<=0){a(".arrowleft, .arrowtop",c).hide()}else{if(p>=o){a(".arrowright, .arrowbottom",c).hide()}else{a(".arrowleft, .arrowtop",c).show().css("opacity",(p>o?o:p));a(".arrowright, .arrowbottom",c).show().css("opacity",(1-p>o?o:1-p))}}}function e(o,n){if(c[0].direction!=o){if(b.debug){a.log("[HoverScroll] Starting to move. direction: "+o+", speed: "+n)}g();c[0].direction=o;c[0].isChanging=true;d()}if(c[0].speed!=n){if(b.debug){a.log("[HoverScroll] Changed speed: "+n)}c[0].speed=n}}function g(){if(c[0].isChanging){if(b.debug){a.log("[HoverScroll] Stoped moving")}c[0].isChanging=false;c[0].direction=0;c[0].speed=1;clearTimeout(c[0].timer)}}function d(){if(c[0].isChanging==false){return}h();var n;if(!b.vertical){n="scrollLeft"}else{n="scrollTop"}l[0][n]+=c[0].direction*c[0].speed;c[0].timer=setTimeout(function(){d()},50)}c.mousemove(function(n){f(n.pageX,n.pageY)}).mouseleave(function(){g()});if(b.arrows){h()}else{a(".arrowleft, .arrowright, .arrowtop, .arrowbottom",c).hide()}});return this};a.fn.hoverscroll.params={vertical:true,width:40,height:390,arrows:false,arrowsOpacity:0.5,debug:false};a.log=function(b){if(console&&console.log){console.log(b)}}})(jQuery);