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