/*
 * jScrollPane - v2.0.0beta6 - 2010-12-06
 * 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(al,ah){var au,h=this,ag,S,az,X,aq,af,F,q,ax,m,Y,A,p,aw,E,Q,ai,W,o,T,D,ab,G,I,P,n,K,y,av,z,L,C,ap;wasAtTop=true,wasAtLeft=true,wasAtBottom=false,wasAtRight=false,mwEvent=b.fn.mwheelIntent?"mwheelIntent.jsp":"mousewheel.jsp";L=al.css("paddingTop")+" "+al.css("paddingRight")+" "+al.css("paddingBottom")+" "+al.css("paddingLeft");C=(parseInt(al.css("paddingLeft"))||0)+(parseInt(al.css("paddingRight"))||0);J(ah);function J(aC){var aG,aF,aE,aB,aA,aD;au=aC;if(ag==c){al.css({overflow:"hidden",padding:0});S=al.innerWidth()+C;az=al.innerHeight();al.width(S);ag=b('<div class="jspPane" />').wrap(b('<div class="jspContainer" />').css({width:S+"px",height:az+"px"}));al.wrapInner(ag.parent());X=al.find(">.jspContainer");ag=X.find(">.jspPane");ag.css("padding",L)}else{al.css("width","");aD=al.outerWidth()+C!=S||al.outerHeight()!=az;if(aD){if(al.parent().is("td")){al.width(C);S=al.parent().innerWidth()+C}else{S=al.innerWidth()+C}az=al.innerHeight();X.css({width:S+"px",height:az+"px"})}ap=ag.innerWidth();if(!aD&&ag.outerWidth()==aq&&ag.outerHeight()==af){if(m||ax){ag.css("width",ap+"px");al.css("width",(ap+C)+"px")}return}ag.css("width","");al.css("width",(S)+"px");X.find(">.jspVerticalBar,>.jspHorizontalBar").remove().end()}aG=ag.clone().css("position","absolute");aF=b('<div style="width:1px; position: relative;" />').append(aG);b("body").append(aF);aq=Math.max(ag.outerWidth(),aG.outerWidth());aF.remove();af=ag.outerHeight();F=aq/S;q=af/az;ax=(au.enableVscroll)?q>1:false;m=(au.enableHscroll)?F>1:false;if(!(m||ax)){al.removeClass("jspScrollable");ag.css({top:0,width:X.width()-C});R();r();ar();ad();u()}else{al.addClass("jspScrollable");aE=au.maintainPosition&&(p||Q);if(aE){aB=j();aA=g()}if(au.enableVscroll){x()}if(au.enableHscroll){an()}k();if(aE){w(aB);v(aA)}t();l();if(au.enableKeyboardNavigation){ac()}if(au.clickOnTrack){ak()}ay();if(au.hijackInternalLinks){i()}}if(au.autoReinitialise&&!z){z=setInterval(function(){J(au)},au.autoReinitialiseDelay)}else{if(!au.autoReinitialise&&z){clearInterval(z)}}al.trigger("jsp-initialised",[m||ax])}function x(){if(ax){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" />')));ai=X.find(">.jspVerticalBar");W=ai.find(">.jspTrack");Y=W.find(">.jspDrag");if(au.showArrows){ab=b('<a class="jspArrow jspArrowUp" />').bind("mousedown.jsp",H(0,-1)).bind("click.jsp",am);G=b('<a class="jspArrow jspArrowDown" />').bind("mousedown.jsp",H(0,1)).bind("click.jsp",am);if(au.arrowScrollOnHover){ab.bind("mouseover.jsp",H(0,-1,ab));G.bind("mouseover.jsp",H(0,1,G))}V(W,au.verticalArrowPositions,ab,G)}T=az;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(aA){b("html").bind("dragstart.jsp selectstart.jsp",function(){return false});Y.addClass("jspActive");var s=aA.pageY-Y.position().top;b("html").bind("mousemove.jsp",function(aB){M(aB.pageY-s,false)}).bind("mouseup.jsp mouseleave.jsp",B);return false});O()}}function O(){W.height(T+"px");p=0;o=au.verticalGutter+W.outerWidth();ag.width(S-o-C);if(ai.position().left==0){ag.css("margin-left",o+"px")}}function an(){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");aw=P.find(">.jspDrag");if(au.showArrows){y=b('<a class="jspArrow jspArrowLeft" />').bind("mousedown.jsp",H(-1,0)).bind("click.jsp",am);av=b('<a class="jspArrow jspArrowRight" />').bind("mousedown.jsp",H(1,0)).bind("click.jsp",am);if(au.arrowScrollOnHover){y.bind("mouseover.jsp",H(-1,0,y));av.bind("mouseover.jsp",H(1,0,av))}V(P,au.horizontalArrowPositions,y,av)}aw.hover(function(){aw.addClass("jspHover")},function(){aw.removeClass("jspHover")}).bind("mousedown.jsp",function(aA){b("html").bind("dragstart.jsp selectstart.jsp",function(){return false});aw.addClass("jspActive");var s=aA.pageX-aw.position().left;b("html").bind("mousemove.jsp",function(aB){N(aB.pageX-s,false)}).bind("mouseup.jsp mouseleave.jsp",B);return false});n=X.innerWidth();ae()}else{}}function ae(){X.find(">.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow").each(function(){n-=b(this).outerWidth()});P.width(n+"px");Q=0}function k(){if(m&&ax){var aA=P.outerHeight(),s=W.outerWidth();T-=aA;b(I).find(">.jspCap:visible,>.jspArrow").each(function(){n+=b(this).outerWidth()});n-=s;az-=s;S-=aA;P.parent().append(b('<div class="jspCorner" />').css("width",aA+"px"));O();ae()}if(m){ag.width((X.outerWidth()-C)+"px")}af=ag.outerHeight();q=af/az;if(m){K=1/F*n;if(K>au.horizontalDragMaxWidth){K=au.horizontalDragMaxWidth}else{if(K<au.horizontalDragMinWidth){K=au.horizontalDragMinWidth}}aw.width(K+"px");E=n-K;aa(Q)}if(ax){D=1/q*T;if(D>au.verticalDragMaxHeight){D=au.verticalDragMaxHeight}else{if(D<au.verticalDragMinHeight){D=au.verticalDragMinHeight}}Y.height(D+"px");A=T-D;Z(p)}}function V(aB,aD,aA,s){var aF="before",aC="after",aE;if(aD=="os"){aD=/Mac/.test(navigator.platform)?"after":"split"}if(aD==aF){aC=aD}else{if(aD==aC){aF=aD;aE=aA;aA=s;s=aE}}aB[aF](aA)[aC](s)}function H(aA,s,aB){return function(){ao(aA,s,this,aB);this.blur();return false}}function ao(aC,aA,aF,aE){aF=b(aF).addClass("jspActive");var aD,s=function(){if(aC!=0){N(Q+aC*au.arrowButtonSpeed,false)}if(aA!=0){M(p+aA*au.arrowButtonSpeed,false)}},aB=setInterval(s,au.arrowRepeatFreq);s();aD=aE==c?"mouseup.jsp":"mouseout.jsp";aE=aE||b("html");aE.bind(aD,function(){aF.removeClass("jspActive");clearInterval(aB);aE.unbind(aD)})}function ak(){ad();if(ax){W.bind("mousedown.jsp",function(aC){if(aC.originalTarget==c||aC.originalTarget==aC.currentTarget){var aB=b(this),s=setInterval(function(){var aD=aB.offset(),aE=aC.pageY-aD.top;if(p+D<aE){M(p+au.trackClickSpeed)}else{if(aE<p){M(p-au.trackClickSpeed)}else{aA()}}},au.trackClickRepeatFreq),aA=function(){s&&clearInterval(s);s=null;b(document).unbind("mouseup.jsp",aA)};b(document).bind("mouseup.jsp",aA);return false}})}if(m){P.bind("mousedown.jsp",function(aC){if(aC.originalTarget==c||aC.originalTarget==aC.currentTarget){var aB=b(this),s=setInterval(function(){var aD=aB.offset(),aE=aC.pageX-aD.left;if(Q+K<aE){N(Q+au.trackClickSpeed)}else{if(aE<Q){N(Q-au.trackClickSpeed)}else{aA()}}},au.trackClickRepeatFreq),aA=function(){s&&clearInterval(s);s=null;b(document).unbind("mouseup.jsp",aA)};b(document).bind("mouseup.jsp",aA);return false}})}}function ad(){P&&P.unbind("mousedown.jsp");W&&W.unbind("mousedown.jsp")}function B(){b("html").unbind("dragstart.jsp selectstart.jsp mousemove.jsp mouseup.jsp mouseleave.jsp");Y&&Y.removeClass("jspActive");aw&&aw.removeClass("jspActive")}function M(s,aA){if(!ax){return}if(s<0){s=0}else{if(s>A){s=A}}if(aA==c){aA=au.animateScroll}if(aA){h.animate(Y,"top",s,Z)}else{Y.css("top",s);Z(s)}}function Z(aA){if(aA==c){aA=Y.position().top}X.scrollTop(0);p=aA;var aD=p==0,aB=p==A,aC=aA/A,s=-aC*(af-az);if(wasAtTop!=aD||wasAtBottom!=aB){wasAtTop=aD;wasAtBottom=aB;al.trigger("jsp-arrow-change",[wasAtTop,wasAtBottom,wasAtLeft,wasAtRight])}aj(aD,aB);ag.css("top",s);al.trigger("jsp-scroll-y",[-s,aD,aB])}function N(aA,s){if(!m){return}if(aA<0){aA=0}else{if(aA>E){aA=E}}if(s==c){s=au.animateScroll}if(s){h.animate(aw,"left",aA,aa)}else{aw.css("left",aA);aa(aA)}}function aa(aA){if(aA==c){aA=aw.position().left}X.scrollTop(0);Q=aA;var aD=Q==0,aC=Q==E,aB=aA/E,s=-aB*(aq-S);if(wasAtLeft!=aD||wasAtRight!=aC){wasAtLeft=aD;wasAtRight=aC;al.trigger("jsp-arrow-change",[wasAtTop,wasAtBottom,wasAtLeft,wasAtRight])}at(aD,aC);ag.css("left",s);al.trigger("jsp-scroll-x",[-s,aD,aC])}function aj(aA,s){if(au.showArrows){ab[aA?"addClass":"removeClass"]("jspDisabled");G[s?"addClass":"removeClass"]("jspDisabled")}}function at(aA,s){if(au.showArrows){y[aA?"addClass":"removeClass"]("jspDisabled");av[s?"addClass":"removeClass"]("jspDisabled")}}function v(s,aA){var aB=s/(af-az);M(aB*A,aA)}function w(aA,s){var aB=aA/(aq-S);N(aB*E,s)}function U(aM,aH,aB){var aF,aC,aD,s=0,aL=0,aA,aG,aJ,aI,aK;try{aF=b(aM)}catch(aE){return}aC=aF.outerHeight();aD=aF.outerWidth();X.scrollTop(0);X.scrollLeft(0);while(!aF.is(".jspPane")){s+=aF.position().top;aL+=aF.position().left;aF=aF.offsetParent();if(/^body|html$/i.test(aF[0].nodeName)){return}}aA=g();aG=aA+az;if(s<aA||aH){aI=s-au.verticalGutter}else{if(s+aC>aG){aI=s-az+aC+au.verticalGutter}}if(aI){v(aI,aB)}viewportLeft=j();aJ=viewportLeft+S;if(aL<viewportLeft||aH){aK=aL-au.horizontalGutter}else{if(aL+aD>aJ){aK=aL-S+aD+au.horizontalGutter}}if(aK){w(aK,aB)}}function j(){return -ag.position().left}function g(){return -ag.position().top}function l(){X.unbind(mwEvent).bind(mwEvent,function(aD,aE,aC,aA){var aB=Q,s=p;N(Q+aC*au.mouseWheelSpeed*S/(aq-S),false);M(p-aA*au.mouseWheelSpeed*az/(af-az),false);return aB==Q&&s==p})}function R(){X.unbind(mwEvent)}function am(){return false}function t(){ag.unbind("focus.jsp").bind("focus.jsp",function(s){if(s.target===ag[0]){return}U(s.target,false)})}function r(){ag.unbind("focus.jsp")}function ac(){var aA,s;al.attr("tabindex",0).unbind("keydown.jsp").bind("keydown.jsp",function(aE){if(aE.target!==al[0]){return}var aC=Q,aB=p,aD=aA?2:16;switch(aE.keyCode){case 40:M(p+aD,false);break;case 38:M(p-aD,false);break;case 34:case 32:v(g()+Math.max(32,az)-16);break;case 33:v(g()-az+16);break;case 35:v(af-az);break;case 36:v(0);break;case 39:N(Q+aD,false);break;case 37:N(Q-aD,false);break}if(!(aC==Q&&aB==p)){aA=true;clearTimeout(s);s=setTimeout(function(){aA=false},260);return false}});if(au.hideFocus){al.css("outline","none");if("hideFocus" in X[0]){al.attr("hideFocus",true)}}else{al.css("outline","");if("hideFocus" in X[0]){al.attr("hideFocus",false)}}}function ar(){al.attr("tabindex","-1").removeAttr("tabindex").unbind("keydown.jsp")}function ay(){if(location.hash&&location.hash.length>1){var aB,aA;try{aB=b(location.hash)}catch(s){return}if(aB.length&&ag.find(aB)){if(X.scrollTop()==0){aA=setInterval(function(){if(X.scrollTop()>0){U(location.hash,true);b(document).scrollTop(X.position().top);clearInterval(aA)}},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("#"),aA;if(s.length>1){aA=s[1];if(aA.length>0&&ag.find("#"+aA).length>0){U("#"+aA,true);return false}}})}b.extend(h,{reinitialise:function(aA){aA=b.extend({},aA,au);J(aA)},scrollToElement:function(aB,aA,s){U(aB,aA,s)},scrollTo:function(aB,s,aA){w(aB,aA);v(s,aA)},scrollToX:function(aA,s){w(aA,s)},scrollToY:function(s,aA){v(s,aA)},scrollBy:function(aA,s,aB){h.scrollByX(aA,aB);h.scrollByY(s,aB)},scrollByX:function(s,aB){var aA=j()+s,aC=aA/(aq-S);N(aC*E,aB)},scrollByY:function(s,aB){var aA=g()+s,aC=aA/(af-az);M(aC*A,aB)},animate:function(aA,aD,s,aC){var aB={};aB[aD]=s;aA.animate(aB,{duration:au.animateDuration,ease:au.animateEase,queue:false,step:aC})},getContentPositionX:function(){return j()},getContentPositionY:function(){return g()},getIsScrollableH:function(){return m},getIsScrollableV:function(){return ax},getContentPane:function(){return ag},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,clickOnTrack:true,autoReinitialise:false,autoReinitialiseDelay:1000,verticalDragMinHeight:300,verticalDragMaxHeight:300,horizontalDragMinWidth:0,horizontalDragMaxWidth:99999,animateScroll:false,animateDuration:300,animateEase:"linear",hijackInternalLinks:false,verticalGutter:4,horizontalGutter:4,mouseWheelSpeed:30,arrowButtonSpeed:30,arrowRepeatFreq:100,arrowScrollOnHover:false,trackClickSpeed:30,trackClickRepeatFreq:100,verticalArrowPositions:"split",horizontalArrowPositions:"split",enableKeyboardNavigation:true,hideFocus:false,enableVscroll:true,enableHscroll:false}})(jQuery,this);
