/* Copyright (c) 2006 Kelvin Luck (kelvin AT kelvinluck DOT com || http://www.kelvinluck.com)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * 
 * See http://kelvinluck.com/assets/jquery/jScrollPane/
 * $Id: jScrollPane.js 19 2008-11-13 06:00:09Z kelvin.luck $
 */
jQuery.jScrollPane={active:[]};jQuery.fn.jScrollPane=function(b){b=jQuery.extend({},jQuery.fn.jScrollPane.defaults,b);var a=function(){return false};return this.each(function(){var n=jQuery(this);n.css("overflow","hidden");var x=this;if(jQuery(this).parent().is(".jScrollPaneContainer")){var ab=b.maintainPosition?n.offset({relativeTo:jQuery(this).parent()[0]}).top:0;var k=jQuery(this).parent();var D=k.innerWidth();var ac=k.outerHeight();var l=ac;jQuery(">.jScrollPaneTrack, >.jScrollArrowUp, >.jScrollArrowDown",k).remove();n.css({top:0})}else{var ab=0;this.originalPadding=n.css("paddingTop")+" "+n.css("paddingRight")+" "+n.css("paddingBottom")+" "+n.css("paddingLeft");this.originalSidePaddingTotal=(parseInt(n.css("paddingLeft"))||0)+(parseInt(n.css("paddingRight"))||0);var D=n.innerWidth();var ac=n.innerHeight();var l=ac;n.wrap(jQuery("<div></div>").attr({className:"jScrollPaneContainer"}).css({height:ac+"px",width:D+"px"}));jQuery(document).bind("emchange",function(ad,ae,p){n.jScrollPane(b)})}if(b.reinitialiseOnImageLoad){var m=$.data(x,"jScrollPaneImagesToLoad")||$("img",n);var f=[];if(m.length){m.each(function(p,ad){$(this).bind("load",function(){if(jQuery.inArray(p,f)==-1){f.push(ad);m=$.grep(m,function(af,ae){return af!=ad});$.data(x,"jScrollPaneImagesToLoad",m);b.reinitialiseOnImageLoad=false;n.jScrollPane(b)}}).each(function(ae,af){if(this.complete||this.complete===undefined){this.src=this.src}})})}}var O=this.originalSidePaddingTotal;var L={height:"auto",width:D-b.scrollbarWidth-b.scrollbarMargin-O+"px"};if(b.scrollbarOnLeft){L.paddingLeft=b.scrollbarMargin+b.scrollbarWidth+"px"}else{L.paddingRight=b.scrollbarMargin+"px"}n.css(L);var M=n.outerHeight();var I=ac/M;if(I<0.99){var g=n.parent();g.append(jQuery("<div></div>").attr({className:"jScrollPaneTrack"}).css({width:b.scrollbarWidth+"px"}).append(jQuery("<div></div>").attr({className:"jScrollPaneDrag"}).css({width:b.scrollbarWidth+"px"}).append(jQuery("<div></div>").attr({className:"jScrollPaneDragTop"}).css({width:b.scrollbarWidth+"px"}),jQuery("<div></div>").attr({className:"jScrollPaneDragBottom"}).css({width:b.scrollbarWidth+"px"}))));var Y=jQuery(">.jScrollPaneTrack",g);var o=jQuery(">.jScrollPaneTrack .jScrollPaneDrag",g);if(b.showArrows){var G;var aa;var s;var Q;var J=function(){if(Q>4||Q%4==0){X(T+aa*B)}Q++};var j=function(p){jQuery("html").unbind("mouseup",j);G.removeClass("jScrollActiveArrowButton");clearInterval(s)};var z=function(){jQuery("html").bind("mouseup",j);G.addClass("jScrollActiveArrowButton");Q=0;J();s=setInterval(J,100)};g.append(jQuery("<a></a>").attr({href:"javascript:;",className:"jScrollArrowUp"}).css({width:b.scrollbarWidth+"px"}).html("Scroll up").bind("mousedown",function(){G=jQuery(this);aa=-1;z();this.blur();return false}).bind("click",a),jQuery("<a></a>").attr({href:"javascript:;",className:"jScrollArrowDown"}).css({width:b.scrollbarWidth+"px"}).html("Scroll down").bind("mousedown",function(){G=jQuery(this);aa=1;z();this.blur();return false}).bind("click",a));var q=jQuery(">.jScrollArrowUp",g);var i=jQuery(">.jScrollArrowDown",g);if(b.arrowSize){l=ac-b.arrowSize-b.arrowSize;Y.css({height:l+"px",top:b.arrowSize+"px"})}else{var R=q.height();b.arrowSize=R;l=ac-R-i.height();Y.css({height:l+"px",top:R+"px"})}}var V=jQuery(this).css({position:"absolute",overflow:"visible"});var c;var y;var B;var T=0;var v=I*ac/2;var A=function(ad,af){var ae=af=="X"?"Left":"Top";return ad["page"+af]||(ad["client"+af]+(document.documentElement["scroll"+ae]||document.body["scroll"+ae]))||0};var F=function(){return false};var U=function(){N();c=o.offset(false);c.top-=T;y=l-o[0].offsetHeight;B=2*b.wheelSpeed*y/M};var d=function(p){U();v=A(p,"Y")-T-c.top;jQuery("html").bind("mouseup",t).bind("mousemove",H);if(jQuery.browser.msie){jQuery("html").bind("dragstart",F).bind("selectstart",F)}return false};var t=function(){jQuery("html").unbind("mouseup",t).unbind("mousemove",H);v=I*ac/2;if(jQuery.browser.msie){jQuery("html").unbind("dragstart",F).unbind("selectstart",F)}};var X=function(ad){ad=ad<0?0:(ad>y?y:ad);T=ad;o.css({top:ad+"px"});var ae=ad/y;V.css({top:((ac-M)*ae)+"px"});n.trigger("scroll");if(b.showArrows){q[ad==0?"addClass":"removeClass"]("disabled");i[ad==y?"addClass":"removeClass"]("disabled")}};var H=function(p){X(A(p,"Y")-c.top-v)};var P=Math.max(Math.min(I*(ac-b.arrowSize*2),b.dragMaxHeight),b.dragMinHeight);o.css({height:P+"px"}).bind("mousedown",d);var K;var r;var h;var S=function(){if(r>8||r%4==0){X((T-((T-h)/2)))}r++};var Z=function(){clearInterval(K);jQuery("html").unbind("mouseup",Z).unbind("mousemove",E)};var E=function(p){h=A(p,"Y")-c.top-v};var u=function(p){U();E(p);r=0;jQuery("html").bind("mouseup",Z).bind("mousemove",E);K=setInterval(S,100);S()};Y.bind("mousedown",u);g.bind("mousewheel",function(ad,af){U();N();var ae=T;X(T-af*B);var p=ae!=T;return !p});var e;var w;function C(){var p=(e-T)/b.animateStep;if(p>1||p<-1){X(T+p)}else{X(e);N()}}var N=function(){if(w){clearInterval(w);delete e}};var W=function(ae,p){if(typeof ae=="string"){$e=jQuery(ae,this);if(!$e.length){return}ae=$e.offset().top-n.offset().top}N();var ad=-ae/(ac-M)*y;if(p||!b.animateTo){X(ad)}else{e=ad;w=setInterval(C,b.animateInterval)}};n[0].scrollTo=W;n[0].scrollBy=function(ad){var p=-parseInt(V.css("top"))||0;W(p+ad)};U();W(-ab,true);$("*",this).bind("focus",function(af){var ah=$(this).position().top;var p=-parseInt(V.css("top"))||0;var ag=p+ac;var ae=ah>p&&ah<ag;if(!ae){g.scrollTop(0);var ad=ah-b.scrollbarMargin;if(ah>p){ad+=$(this).height()+15+b.scrollbarMargin-ac}W(ad)}});if(location.hash){setTimeout(function(){$(location.hash,n).trigger("focus")},$.browser.msie?100:0)}$(document).bind("click",function(ad){$target=$(ad.target);if($target.is("a")){var p=$target.attr("href");if(p.substr(0,1)=="#"){$linkedEle=$(p,n);if($linkedEle.length){$linkedEle.trigger("focus");return false}}}});jQuery.jScrollPane.active.push(n[0])}else{n.css({height:ac+"px",width:D-this.originalSidePaddingTotal+"px",padding:this.originalPadding})}})};jQuery.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};jQuery(window).bind("unload",function(){var b=jQuery.jScrollPane.active;for(var a=0;a<b.length;a++){b[a].scrollTo=b[a].scrollBy=null}});
