/*
 * jScrollPane - v2.0.0beta2 - 2010-08-18
 * http://jscrollpane.kelvinluck.com/
 *
 * Copyright (c) 2010 Kelvin Luck
 * Dual licensed under the MIT and GPL licenses.
 */
(function(b,a,c){b.fn.jScrollPane=function(f){function d(ai,af){var ap,h=this,ae,S,av,X,an,ad,F,q,at,m,Y,A,p,ar,E,Q,ag,W,o,T,D,ab,G,I,P,n,K,y,aq,z,L,C,am;L=ai.css("paddingTop")+" "+ai.css("paddingRight")+" "+ai.css("paddingBottom")+" "+ai.css("paddingLeft");C=(parseInt(ai.css("paddingLeft"))||0)+(parseInt(ai.css("paddingRight"))||0);J(af);function J(ay){var aC,aB,aA,ax,aw,az;ap=ay;if(ae==c){ai.css({overflow:"hidden",padding:0});S=ai.innerWidth()+C;av=ai.innerHeight();ai.css("width","auto");ae=b('<div class="jspPane" />').wrap(b('<div class="jspContainer" />').css({width:S+"px",height:av+"px"}));ai.wrapInner(ae.parent());X=ai.find(">.jspContainer");ae=X.find(">.jspPane");ae.css("padding",L)}else{az=ai.outerWidth()!=S||ai.outerHeight()!=av;if(az){S=ai.innerWidth();av=ai.innerHeight();X.css({width:S+"px",height:av+"px"})}am=ae.innerWidth();ae.css("width",null);if(!az&&ae.outerWidth()==an&&ae.outerHeight()==ad){if(m||at){ae.css("width",am+"px")}return}X.find(">.jspVerticalBar,>.jspHorizontalBar").remove().end()}aC=ae.clone().css("position","absolute");aB=b('<div style="width:1px; position: relative;" />').append(aC);b("body").append(aB);an=Math.max(ae.outerWidth(),aC.outerWidth());aB.remove();ad=ae.outerHeight();F=an/S;q=ad/av;at=q>1;m=F>1;if(!(m||at)){ai.removeClass("jspScrollable");ae.css("top",0);R();r();u()}else{ai.addClass("jspScrollable");aA=ap.maintainPosition&&(p||Q);if(aA){ax=j();aw=g()}x();ak();k();if(aA){w(ax);v(aw)}t();au();if(ap.hijackInternalLinks){i()}}if(ap.autoReinitialise&&!z){z=setInterval(function(){J(ap)},ap.autoReinitialiseDelay)}else{if(!ap.autoReinitialise&&z){clearInterval(z)}}}function x(){if(at){X.append(b('<div class="jspVerticalBar" />').append(b('<div class="jspCap jspCapTop" />'),b('<div class="jspTrack" />').append(b('<div class="jspDrag" />').append(b('<div class="jspDragTop" />'),b('<div class="jspDragBottom" />'))),b('<div class="jspCap jspCapBottom" />')));ag=X.find(">.jspVerticalBar");W=ag.find(">.jspTrack");Y=W.find(">.jspDrag");if(ap.showArrows){ab=b('<a href="#" class="jspArrow jspArrowUp">Scroll up</a>').bind("mousedown.jsp",H(0,-1)).bind("click.jsp",aj);G=b('<a href="#" class="jspArrow jspArrowDown">Scroll down</a>').bind("mousedown.jsp",H(0,1)).bind("click.jsp",aj);if(ap.arrowScrollOnHover){ab.bind("mouseover.jsp",H(0,-1,ab));G.bind("mouseover.jsp",H(0,1,G))}V(W,ap.verticalArrowPositions,ab,G)}T=av;X.find(">.jspVerticalBar>.jspCap:visible,>.jspVerticalBar>.jspArrow").each(function(){T-=b(this).outerHeight()});Y.hover(function(){Y.addClass("jspHover")},function(){Y.removeClass("jspHover")}).bind("mousedown.jsp",function(aw){b("html").bind("dragstart.jsp selectstart.jsp",function(){return false});Y.addClass("jspActive");var s=aw.pageY-Y.position().top;b("html").bind("mousemove.jsp",function(ax){M(ax.pageY-s,false)}).bind("mouseup.jsp mouseleave.jsp",B);return false});O();ah();l()}else{R()}}function O(){W.height(T+"px");p=0;o=ap.verticalGutter+W.outerWidth();ae.width(S-o-C);if(ag.position().left==0){ae.css("margin-left",o+"px")}}function ak(){if(m){X.append(b('<div class="jspHorizontalBar" />').append(b('<div class="jspCap jspCapLeft" />'),b('<div class="jspTrack" />').append(b('<div class="jspDrag" />').append(b('<div class="jspDragLeft" />'),b('<div class="jspDragRight" />'))),b('<div class="jspCap jspCapRight" />')));I=X.find(">.jspHorizontalBar");P=I.find(">.jspTrack");ar=P.find(">.jspDrag");if(ap.showArrows){y=b('<a href="#" class="jspArrow jspArrowLeft">Scroll left</a>').bind("mousedown.jsp",H(-1,0)).bind("click.jsp",aj);aq=b('<a href="#" class="jspArrow jspArrowRight">Scroll right</a>').bind("mousedown.jsp",H(1,0)).bind("click.jsp",aj);if(ap.arrowScrollOnHover){y.bind("mouseover.jsp",H(-1,0,y));aq.bind("mouseover.jsp",H(1,0,aq))}V(P,ap.horizontalArrowPositions,y,aq)}ar.hover(function(){ar.addClass("jspHover")},function(){ar.removeClass("jspHover")
}).bind("mousedown.jsp",function(aw){b("html").bind("dragstart.jsp selectstart.jsp",function(){return false});ar.addClass("jspActive");var s=aw.pageX-ar.position().left;b("html").bind("mousemove.jsp",function(ax){N(ax.pageX-s,false)}).bind("mouseup.jsp mouseleave.jsp",B);return false});n=X.innerWidth();ac();ao()}else{}}function ac(){X.find(">.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow").each(function(){n-=b(this).outerWidth()});P.width(n+"px");Q=0}function k(){if(m&&at){var aw=P.outerHeight(),s=W.outerWidth();T-=aw;b(I).find(">.jspCap:visible,>.jspArrow").each(function(){n+=b(this).outerWidth()});n-=s;av-=s;S-=aw;P.parent().append(b('<div class="jspCorner" />').css("width",aw+"px"));O();ac()}if(m){ae.width((X.outerWidth()-C)+"px")}ad=ae.outerHeight();q=ad/av;if(m){K=1/F*n;if(K>ap.horizontalDragMaxWidth){K=ap.horizontalDragMaxWidth}else{if(K<ap.horizontalDragMinWidth){K=ap.horizontalDragMinWidth}}ar.width(K+"px");E=n-K}if(at){D=1/q*T;if(D>ap.verticalDragMaxHeight){D=ap.verticalDragMaxHeight}else{if(D<ap.verticalDragMinHeight){D=ap.verticalDragMinHeight}}Y.height(D+"px");A=T-D}}function V(ax,az,aw,s){var aB="before",ay="after",aA;if(az=="os"){az=/Mac/.test(navigator.platform)?"after":"split"}if(az==aB){ay=az}else{if(az==ay){aB=az;aA=aw;aw=s;s=aA}}ax[aB](aw)[ay](s)}function H(aw,s,ax){return function(){al(aw,s,this,ax);this.blur();return false}}function al(ay,aw,aB,aA){aB=b(aB).addClass("jspActive");var az,s=function(){if(ay!=0){N(Q+ay*ap.arrowButtonSpeed,false)}if(aw!=0){M(p+aw*ap.arrowButtonSpeed,false)}},ax=setInterval(s,ap.arrowRepeatFreq);s();az=aA==c?"mouseup.jsp":"mouseout.jsp";aA=aA||b("html");aA.bind(az,function(){aB.removeClass("jspActive");clearInterval(ax);aA.unbind(az)})}function B(){b("html").unbind("dragstart.jsp selectstart.jsp mousemove.jsp mouseup.jsp mouseleave.jsp");Y&&Y.removeClass("jspActive");ar&&ar.removeClass("jspActive")}function M(s,aw){if(!at){return}if(s<0){s=0}else{if(s>A){s=A}}if(aw==c){aw=ap.animateScroll}if(aw){h.animate(Y,"top",s,Z)}else{Y.css("top",s);Z(s)}}function Z(aw){if(aw==c){aw=Y.position().top}X.scrollTop(0);p=aw;var az=p==0,ax=p==A,ay=aw/A,s=-ay*(ad-av);ah(az,ax);ae.css("top",s);ai.trigger("jsp-scroll-y",[-s,az,ax])}function N(aw,s){if(!m){return}if(aw<0){aw=0}else{if(aw>E){aw=E}}if(s==c){s=ap.animateScroll}if(s){h.animate(ar,"left",aw,aa)}else{ar.css("left",aw);aa(aw)}}function aa(aw){if(aw==c){aw=ar.position().left}X.scrollTop(0);Q=aw;var az=Q==0,ay=Q==A,ax=aw/E,s=-ax*(an-S);ao(az,ay);ae.css("left",s);ai.trigger("jsp-scroll-x",[-s,az,ay])}function ah(aw,s){if(ap.showArrows){ab[aw?"addClass":"removeClass"]("jspDisabled");G[s?"addClass":"removeClass"]("jspDisabled")}}function ao(aw,s){if(ap.showArrows){y[aw?"addClass":"removeClass"]("jspDisabled");aq[s?"addClass":"removeClass"]("jspDisabled")}}function v(s,aw){var ax=s/(ad-av);M(ax*A,aw)}function w(aw,s){var ax=aw/(an-S);N(ax*E,s)}function U(aE,aC,aw){var aA,ay,s=0,ax,aB,aD;try{aA=b(aE)}catch(az){return}ay=aA.outerHeight();X.scrollTop(0);while(!aA.is(".jspPane")){s+=aA.position().top;aA=aA.offsetParent();if(/^body|html$/i.test(aA[0].nodeName)){return}}ax=g();aB=ax+av;if(s<ax||aC){aD=s-ap.verticalGutter}else{if(s+ay>aB){aD=s-av+ay+ap.verticalGutter}}if(aD){v(aD,aw)}}function j(){return -ae.position().left}function g(){return -ae.position().top}function l(){X.unbind("mousewheel.jsp").bind("mousewheel.jsp",function(s,ax){var aw=p;M(p-ax*ap.mouseWheelSpeed,false);return aw==p})}function R(){X.unbind("mousewheel.jsp")}function aj(){return false}function t(){ae.find(":input,a").bind("focus.jsp",function(){U(this,false)})}function r(){ae.find(":input,a").unbind("focus.jsp")}function au(){if(location.hash&&location.hash.length>1){var ax,aw;try{ax=b(location.hash)}catch(s){return}if(ax.length&&ae.find(ax)){if(X.scrollTop()==0){aw=setInterval(function(){if(X.scrollTop()>0){U(location.hash,true);b(document).scrollTop(X.position().top);clearInterval(aw)}},50)}else{U(location.hash,true);b(document).scrollTop(X.position().top)}}}}function u(){b("a.jspHijack").unbind("click.jsp-hijack").removeClass("jspHijack")
}function i(){u();b("a[href^=#]").addClass("jspHijack").bind("click.jsp-hijack",function(){var s=this.href.split("#"),aw;if(s.length>1){aw=s[1];if(aw.length>0&&ae.find("#"+aw).length>0){U("#"+aw,true);return false}}})}b.extend(h,{reinitialise:function(aw){aw=b.extend({},aw,ap);J(aw)},scrollToElement:function(ax,aw,s){U(ax,aw,s)},scrollTo:function(ax,s,aw){w(ax,aw);v(s,aw)},scrollToX:function(aw,s){w(aw,s)},scrollToY:function(s,aw){v(s,aw)},scrollBy:function(aw,s,ax){h.scrollByX(aw,ax);h.scrollByY(s,ax)},scrollByX:function(s,ax){var aw=j()+s,ay=aw/(an-S);N(ay*E,ax)},scrollByY:function(s,ax){var aw=g()+s,ay=aw/(ad-av);M(ay*A,ax)},animate:function(aw,az,s,ay){var ax={};ax[az]=s;aw.animate(ax,{duration:ap.animateDuration,ease:ap.animateEase,queue:false,step:ay})},getContentPositionX:function(){return j()},getContentPositionY:function(){return g()},getContentPane:function(){return ae},scrollToBottom:function(s){M(A,s)},hijackInternalLinks:function(){i()}})}f=b.extend({},b.fn.jScrollPane.defaults,f);var e;this.each(function(){var g=b(this),h=g.data("jsp");if(h){h.reinitialise(f)}else{h=new d(g,f);g.data("jsp",h)}e=e?e.add(g):g});return e};b.fn.jScrollPane.defaults={showArrows:false,maintainPosition:true,autoReinitialise:false,autoReinitialiseDelay:500,verticalDragMinHeight:0,verticalDragMaxHeight:99999,horizontalDragMinWidth:0,horizontalDragMaxWidth:99999,animateScroll:false,animateDuration:300,animateEase:"linear",hijackInternalLinks:false,verticalGutter:4,horizontalGutter:4,mouseWheelSpeed:10,arrowButtonSpeed:10,arrowRepeatFreq:100,arrowScrollOnHover:false,verticalArrowPositions:"split",horizontalArrowPositions:"split"}})(jQuery,this);
