(function(a){a.jScrollPane={active:[]};a.fn.jScrollPane=function(b){b=a.extend({},a.fn.jScrollPane.defaults,b);var c=function(){return false};return this.each(function(){var d=a(this),cb=this,Q=0,t,f,m,J=b.topCapHeight,e;if(a(this).parent().is(".jScrollPaneContainer")){e=a(this).parent();Q=b.maintainPosition?d.position().top:0;var O=a(this).parent();t=O.innerWidth();f=O.outerHeight();a(">.jScrollPaneTrack, >.jScrollArrowUp, >.jScrollArrowDown, >.jScrollCap",O).remove();d.css({"top":0})}else{d.data("originalStyleTag",d.attr("style"));d.css("overflow","hidden");this.originalPadding=d.css("paddingTop")+" "+d.css("paddingRight")+" "+d.css("paddingBottom")+" "+d.css("paddingLeft");this.originalSidePaddingTotal=(parseInt(d.css("paddingLeft"))||0)+(parseInt(d.css("paddingRight"))||0);t=d.innerWidth();f=d.innerHeight();e=a("<div></div>").attr({"className":"jScrollPaneContainer"}).css({"height":f+"px","width":t+"px"});if(b.enableKeyboardNavigation)e.attr("tabindex",b.tabIndex);d.wrap(e);e=d.parent();a(document).bind("emchange",function(){d.jScrollPane(b)})}m=f;if(b.reinitialiseOnImageLoad){var q=a.data(cb,"jScrollPaneImagesToLoad")||a("img",d),Z=[];if(q.length)q.each(function(e,c){a(this).bind("load readystatechange",function(){if(a.inArray(e,Z)==-1){Z.push(c);q=a.grep(q,function(a){return a!=c});a.data(cb,"jScrollPaneImagesToLoad",q);var f=a.extend(b,{reinitialiseOnImageLoad:false});d.jScrollPane(f)}}).each(function(){if(this.complete||this.complete===undefined)this.src=this.src})})}var nb=this.originalSidePaddingTotal,jb=t-b.scrollbarWidth-b.scrollbarMargin-nb,K={"height":"auto","width":jb+"px"};if(b.scrollbarOnLeft)K.paddingLeft=b.scrollbarMargin+b.scrollbarWidth+"px";else K.paddingRight=b.scrollbarMargin+"px";d.css(K);var r=d.outerHeight(),A=f/r,Y=A<.99;e[Y?"addClass":"removeClass"]("jScrollPaneScrollable");if(Y){e.append(a("<div></div>").addClass("jScrollCap jScrollCapTop").css({height:b.topCapHeight}),a("<div></div>").attr({"className":"jScrollPaneTrack"}).css({"width":b.scrollbarWidth+"px"}).append(a("<div></div>").attr({"className":"jScrollPaneDrag"}).css({"width":b.scrollbarWidth+"px"}).append(a("<div></div>").attr({"className":"jScrollPaneDragTop"}).css({"width":b.scrollbarWidth+"px"}),a("<div></div>").attr({"className":"jScrollPaneDragBottom"}).css({"width":b.scrollbarWidth+"px"}))),a("<div></div>").addClass("jScrollCap jScrollCapBottom").css({height:b.bottomCapHeight}));var db=a(">.jScrollPaneTrack",e),E=a(">.jScrollPaneTrack .jScrollPaneDrag",e),o,j=[],l,k=function(){if(l>4||l%4==0)h(g+o*F);l++};if(b.enableKeyboardNavigation)e.bind("keydown.jscrollpane",function(a){switch(a.keyCode){case 38:o=-1;l=0;k();j[j.length]=setInterval(k,100);return false;case 40:o=1;l=0;k();j[j.length]=setInterval(k,100);return false;case 33:case 34:return false}}).bind("keyup.jscrollpane",function(b){if(b.keyCode==38||b.keyCode==40){for(var a=0;a<j.length;a++)clearInterval(j[a]);return false}});if(b.showArrows){var w,R,W=function(){a("html").unbind("mouseup",W);w.removeClass("jScrollActiveArrowButton");clearInterval(R)},U=function(){a("html").bind("mouseup",W);w.addClass("jScrollActiveArrowButton");l=0;k();R=setInterval(k,100)};e.append(a("<a></a>").attr({"href":"javascript:;","className":"jScrollArrowUp","tabindex":-1}).css({"width":b.scrollbarWidth+"px","top":b.topCapHeight+"px"}).html("Scroll up").bind("mousedown",function(){w=a(this);o=-1;U();this.blur();return false}).bind("click",c),a("<a></a>").attr({"href":"javascript:;","className":"jScrollArrowDown","tabindex":-1}).css({"width":b.scrollbarWidth+"px","bottom":b.bottomCapHeight+"px"}).html("Scroll down").bind("mousedown",function(){w=a(this);o=1;U();this.blur();return false}).bind("click",c));var M=a(">.jScrollArrowUp",e),bb=a(">.jScrollArrowDown",e)}if(b.arrowSize){m=f-b.arrowSize-b.arrowSize;J+=b.arrowSize}else if(M){var I=M.height();b.arrowSize=I;m=f-I-bb.height();J+=I}m-=b.topCapHeight+b.bottomCapHeight;db.css({"height":m+"px",top:J+"px"});var N=a(this).css({"position":"absolute","overflow":"visible"}),s,i,F,g=0,B=A*f/2,D=function(b,a){var c=a=="X"?"Left":"Top";return b["page"+a]||b["client"+a]+(document.documentElement["scroll"+c]||document.body["scroll"+c])||0},x=function(){return false},C=function(){y();s=E.offset(false);s.top-=g;i=m-E[0].offsetHeight;F=2*b.wheelSpeed*i/r},lb=function(b){C();B=D(b,"Y")-g-s.top;a("html").bind("mouseup",L).bind("mousemove",ab).bind("mouseleave",L);if(a.browser.msie)a("html").bind("dragstart",x).bind("selectstart",x);return false},L=function(){a("html").unbind("mouseup",L).unbind("mousemove",ab);B=A*f/2;if(a.browser.msie)a("html").unbind("dragstart",x).unbind("selectstart",x)},h=function(a){e.scrollTop(0);a=a<0?0:a>i?i:a;g=a;E.css({"top":a+"px"});var c=a/i;d.data("jScrollPanePosition",(f-r)*-c);N.css({"top":(f-r)*c+"px"});d.trigger("scroll");if(b.showArrows){M[a==0?"addClass":"removeClass"]("disabled");bb[a==i?"addClass":"removeClass"]("disabled")}},ab=function(a){h(D(a,"Y")-s.top-B)},mb=Math.max(Math.min(A*(f-b.arrowSize*2),b.dragMaxHeight),b.dragMinHeight);E.css({"height":mb+"px"}).bind("mousedown",lb);var S,z,T,X=function(){if(z>8||z%4==0)h(g-(g-T)/2);z++},V=function(){clearInterval(S);a("html").unbind("mouseup",V).unbind("mousemove",H)},H=function(a){T=D(a,"Y")-s.top-B},kb=function(b){C();H(b);z=0;a("html").bind("mouseup",V).bind("mousemove",H);S=setInterval(X,100);X();return false};db.bind("mousedown",kb);e.bind("mousewheel",function(a,b){b=b||(a.wheelDelta?a.wheelDelta/120:a.detail?-a.detail/3:0);C();y();var d=g;h(g-b*F);var c=d!=g;return !c});var v,G;function ib(){var a=(v-g)/b.animateStep;if(a>1||a<-1)h(g+a);else{h(v);y()}}var y=function(){if(G){clearInterval(G);delete v}},n=function(c,k){if(typeof c=="string"){try{$e=a(c,d)}catch(l){return}if(!$e.length)return;c=$e.offset().top-d.offset().top}y();var g=r-f;c=c>g?g:c;d.data("jScrollPaneMaxScroll",g);var j=c/g*i;if(k||!b.animateTo)h(j);else{e.scrollTop(0);v=j;G=setInterval(ib,b.animateInterval)}};d[0].scrollTo=n;d[0].scrollBy=function(b){var a=-parseInt(N.css("top"))||0;n(a+b)};C();n(-Q,true);a("*",this).bind("focus",function(){var e=a(this),c=0,i=100;while(e[0]!=d[0]){c+=e.position().top;e=e.offsetParent();if(!i--)return}var g=-parseInt(N.css("top"))||0,j=g+f,k=c>g&&c<j;if(!k){var h=c-b.scrollbarMargin;if(c>g)h+=a(this).height()+15+b.scrollbarMargin-f;n(h)}});if(b.observeHash){if(location.hash&&location.hash.length>1)setTimeout(function(){n(location.hash)},a.browser.safari?100:0);a(document).bind("click",function(d){$target=a(d.target);if($target.is("a")){var c=$target.attr("href");if(c&&c.substr(0,1)=="#"&&c.length>1)setTimeout(function(){n(c,!b.animateToInternalLinks)},a.browser.safari?100:0)}})}function fb(){a(document).bind("mousemove.jScrollPaneDragging",eb);a(document).bind("mouseup.jScrollPaneDragging",hb)}var u,p;function gb(){direction=u<0?-1:1;d[0].scrollBy(u/2)}function P(){if(p){clearInterval(p);p=undefined}}function eb(e){var b=d.parent().offset().top,c=b+f,a=D(e,"Y");u=a<b?a-b:a>c?a-c:0;if(u==0)P();else if(!p)p=setInterval(gb,100)}function hb(){a(document).unbind("mousemove.jScrollPaneDragging").unbind("mouseup.jScrollPaneDragging");P()}e.bind("mousedown.jScrollPane",fb);a.jScrollPane.active.push(d[0])}else{d.css({"height":f+"px","width":t-this.originalSidePaddingTotal+"px","padding":this.originalPadding});d[0].scrollTo=d[0].scrollBy=function(){};d.parent().unbind("mousewheel").unbind("mousedown.jScrollPane").unbind("keydown.jscrollpane").unbind("keyup.jscrollpane")}})};a.fn.jScrollPaneRemove=function(){a(this).each(function(){$this=a(this);var b=$this.parent();if(b.is(".jScrollPaneContainer")){$this.css({"top":"","height":"","width":"","padding":"","overflow":"","position":""});$this.attr("style",$this.data("originalStyleTag"));b.after($this).remove()}})};a.fn.jScrollPane.defaults={scrollbarWidth:10,scrollbarMargin:5,wheelSpeed:18,showArrows:false,arrowSize:0,animateTo:false,dragMinHeight:1,dragMaxHeight:99999,animateInterval:100,animateStep:3,maintainPosition:true,scrollbarOnLeft:false,reinitialiseOnImageLoad:false,tabIndex:0,enableKeyboardNavigation:true,animateToInternalLinks:false,topCapHeight:0,bottomCapHeight:0,observeHash:true};a(window).bind("unload",function(){var c=a.jScrollPane.active;for(var b=0;b<c.length;b++)c[b].scrollTo=c[b].scrollBy=null})})(jQuery)
