/* 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 $
 */

$.jScrollPane={active:[]};$.fn.jScrollPane=function(bi){bi=$.extend({},$.fn.jScrollPane.defaults,bi);var bj=function(){return false};return this.each(function(){var g=$(this);g.css('overflow','hidden');var j=this;if($(this).parent().is('.jScrollPaneContainer')){var k=bi.maintainPosition?g.offset({relativeTo:$(this).parent()[0]}).top:0;var l=$(this).parent();var m=l.innerWidth();var o=l.outerHeight();var q=o;$('>.jScrollPaneTrack, >.jScrollArrowUp, >.jScrollArrowDown',l).remove();g.css({'top':0})}else{var k=0;this.originalPadding=g.css('paddingTop')+' '+g.css('paddingRight')+' '+g.css('paddingBottom')+' '+g.css('paddingLeft');this.originalSidePaddingTotal=(parseInt(g.css('paddingLeft'))||0)+(parseInt(g.css('paddingRight'))||0);var m=g.innerWidth();var o=g.innerHeight();var q=o;g.wrap($('<div></div>').attr({'className':'jScrollPaneContainer'}).css({'height':o+'px','width':m+'px'}));$(document).bind('emchange',function(e,a,b){g.jScrollPane(bi)})};if(bi.reinitialiseOnImageLoad){var r=$.data(j,'jScrollPaneImagesToLoad')||$('img',g);var s=[];if(r.length){r.each(function(i,b){$(this).bind('load',function(){if($.inArray(i,s)==-1){s.push(b);r=$.grep(r,function(n,i){return n!=b});$.data(j,'jScrollPaneImagesToLoad',r);bi.reinitialiseOnImageLoad=false;g.jScrollPane(bi)}}).each(function(i,a){if(this.complete||this.complete===undefined){this.src=this.src}})})}};var p=this.originalSidePaddingTotal;var t={'height':'auto','width':m-bi.scrollbarWidth-bi.scrollbarMargin-p+'px'};if(bi.scrollbarOnLeft){t.paddingLeft=bi.scrollbarMargin+bi.scrollbarWidth+'px'}else{t.paddingRight=bi.scrollbarMargin+'px'};g.css(t);var u=g.outerHeight();var v=o/u;if(v<.99){var w=g.parent();w.append($('<div></div>').attr({'className':'jScrollPaneTrack'}).css({'width':bi.scrollbarWidth+'px'}).append($('<div></div>').attr({'className':'jScrollPaneDrag'}).css({'width':bi.scrollbarWidth+'px'}).append($('<div></div>').attr({'className':'jScrollPaneDragTop'}).css({'width':bi.scrollbarWidth+'px'}),$('<div></div>').attr({'className':'jScrollPaneDragBottom'}).css({'width':bi.scrollbarWidth+'px'}))));var x=$('>.jScrollPaneTrack',w);var y=$('>.jScrollPaneTrack .jScrollPaneDrag',w);if(bi.showArrows){var z;var A;var B;var C;var D=function(){if(C>4||C%4==0){U(N+A*M)}C++};var E=function(a){$('html').unbind('mouseup',E);z.removeClass('jScrollActiveArrowButton');clearInterval(B)};var F=function(){$('html').bind('mouseup',E);z.addClass('jScrollActiveArrowButton');C=0;D();B=setInterval(D,100)};w.append($('<a></a>').attr({'href':'javascript:;','className':'jScrollArrowUp'}).css({'width':bi.scrollbarWidth+'px'}).html('Scroll up').bind('mousedown',function(){z=$(this);A=-1;F();this.blur();return false}).bind('click',bj),$('<a></a>').attr({'href':'javascript:;','className':'jScrollArrowDown'}).css({'width':bi.scrollbarWidth+'px'}).html('Scroll down').bind('mousedown',function(){z=$(this);A=1;F();this.blur();return false}).bind('click',bj));var G=$('>.jScrollArrowUp',w);var H=$('>.jScrollArrowDown',w);if(bi.arrowSize){q=o-bi.arrowSize-bi.arrowSize;x.css({'height':q+'px',top:bi.arrowSize+'px'})}else{var I=G.height();bi.arrowSize=I;q=o-I-H.height();x.css({'height':q+'px',top:I+'px'})}};var J=$(this).css({'position':'absolute','overflow':'visible'});var K;var L;var M;var N=0;var O=v*o/2;var P=function(a,c){var p=c=='X'?'Left':'Top';return a['page'+c]||(a['client'+c]+(document.documentElement['scroll'+p]||document.body['scroll'+p]))||0};var Q=function(){return false};var R=function(){bq();K=y.offset(false);K.top-=N;L=q-y[0].offsetHeight;M=2*bi.wheelSpeed*L/u};var S=function(a){R();O=P(a,'Y')-N-K.top;$('html').bind('mouseup',T).bind('mousemove',V);if($.browser.msie){$('html').bind('dragstart',Q).bind('selectstart',Q)}return false};var T=function(){$('html').unbind('mouseup',T).unbind('mousemove',V);O=v*o/2;if($.browser.msie){$('html').unbind('dragstart',Q).unbind('selectstart',Q)}};var U=function(a){a=a<0?0:(a>L?L:a);N=a;y.css({'top':a+'px'});var p=a/L;J.css({'top':((o-u)*p)+'px'});g.trigger('scroll');if(bi.showArrows){G[a==0?'addClass':'removeClass']('disabled');H[a==L?'addClass':'removeClass']('disabled')}};var V=function(e){U(P(e,'Y')-K.top-O)};var W=Math.max(Math.min(v*(o-bi.arrowSize*2),bi.dragMaxHeight),bi.dragMinHeight);y.css({'height':W+'px'}).bind('mousedown',S);var X;var Y;var Z;var bk=function(){if(Y>8||Y%4==0){U((N-((N-Z)/2)))}Y++};var bl=function(){clearInterval(X);$('html').unbind('mouseup',bl).unbind('mousemove',bm)};var bm=function(a){Z=P(a,'Y')-K.top-O};var bn=function(a){R();bm(a);Y=0;$('html').bind('mouseup',bl).bind('mousemove',bm);X=setInterval(bk,100);bk()};x.bind('mousedown',bn);w.bind('mousewheel',function(a,b){R();bq();var d=N;U(N-b*M);var c=d!=N;return!c});var bo;var bp;function animateToPosition(){var a=(bo-N)/bi.animateStep;if(a>1||a<-1){U(N+a)}else{U(bo);bq()}};var bq=function(){if(bp){clearInterval(bp);delete bo}};var br=function(a,b){if(typeof a=="string"){$e=$(a,this);if(!$e.length)return;a=$e.offset().top-g.offset().top};bq();var c=-a/(o-u)*L;if(b||!bi.animateTo){U(c)}else{bo=c;bp=setInterval(animateToPosition,bi.animateInterval)}};g[0].scrollTo=br;g[0].scrollBy=function(a){var b=-parseInt(J.css('top'))||0;br(b+a)};R();br(-k,true);$('*',this).bind('focus',function(a){var b=$(this).position().top;var c=-parseInt(J.css('top'))||0;var d=c+o;var e=b>c&&b<d;if(!e){w.scrollTop(0);var f=b-bi.scrollbarMargin;if(b>c){f+=$(this).height()+15+bi.scrollbarMargin-o};br(f)}});if(location.hash){setTimeout(function(){$(location.hash,g).trigger('focus')},$.browser.msie?100:0)};$(document).bind('click',function(e){$target=$(e.target);if($target.is('a')){var h=$target.attr('href');console.log(h);if(h.substr(0,1)=='#'){$linkedEle=$(h,g);console.log($linkedEle);if($linkedEle.length){$linkedEle.trigger('focus');return false}}}});$.jScrollPane.active.push(g[0])}else{g.css({'height':o+'px','width':m-this.originalSidePaddingTotal+'px','padding':this.originalPadding})}})};$.fn.jScrollPane.defaults={scrollbarWidth:10,scrollbarMargin:0,wheelSpeed:18,showArrows:false,arrowSize:0,animateTo:false,dragMinHeight:1,dragMaxHeight:99999,animateInterval:100,animateStep:3,maintainPosition:true,scrollbarOnLeft:false,reinitialiseOnImageLoad:false};$(window).bind('unload',function(){var a=$.jScrollPane.active;for(var i=0;i<a.length;i++){a[i].scrollTo=a[i].scrollBy=null}});
