/**
 * jsScrollbar v0.9.1
 * Copyright (c) 2009-2010 Nathan Faubion
 *
 * Licensed under the MIT license:
 * http://www.opensource.org/licenses/mit-license.php
 */

(function(){function r(a,b,c){this.el=a;this.axis=b;this.track=new p(i("jssb-"+b+"-track",a),b);this.thumb=new p(i("jssb-"+b+"-thumb",this.track.el),b);this.prev=new p(b=="x"?i("jssb-x-left",a):i("jssb-y-up",a),b);this.next=new p(b=="x"?i("jssb-x-right",a):i("jssb-y-down",a),b);this.minThumb=typeof c=="undefined"?this.thumb.relevantDim():c}function p(a,b){this.el=a;this.axis=b}function w(a,b){var c={},d;if(typeof a!=undefined&&a!=null)for(d in a)c[d]=a[d];for(d in b)c[d]=b[d];return c}function v(a){if(!a)return false; if(m(a,"jssb-applied"))return false;var b,c;b=i("jssb-content",a);if(!b)return false;k(a,"jssb-applied");b=b.currentStyle?b.currentStyle.overflow:document.defaultView.getComputedStyle(b,null).getPropertyValue("overflow");c=a.currentStyle?a.currentStyle.position:document.defaultView.getComputedStyle(a,null).getPropertyValue("position");n(a,"jssb-applied");if(b=="hidden"){if(c=="static")a.style.position="relative";return true}return false}function j(a,b,c){a.addEventListener?a.addEventListener(b,c, false):a.attachEvent("on"+b,c)}function h(a,b,c){a.removeEventListener?a.removeEventListener(b,c,false):a.detachEvent("on"+b,c)}function s(a){if(!a)a=window.event;a.stopPropagation&&a.stopPropagation();a.preventDefault&&a.preventDefault();a.cancelBubble=true;a.cancel=true;return a.returnValue=false}function q(a){a=a?a:window.event;if(typeof a.target=="undefined")a.target=a.srcElement;if(typeof a.pageX=="undefined")a.pageX=a.clientX+document.body.scrollLeft;if(typeof a.pageY=="undefined")a.pageY=a.clientY+ document.body.scrollTop;return a}function i(a,b){if(typeof b!="undefined"){b=b.getElementsByTagName("*",b);var c,d;c=0;for(d=b.length;c<d;c++)if(b[c].className&&m(b[c],a))return b[c];return null}else return document.getElementById(a)}function k(a,b){if(!m(a,b))if(a.className.length==0)a.className=b;else a.className+=" "+b}function n(a,b){var c,d=a.className.split(" ");for(c=0;c<d.length;c++)if(typeof b=="string"){if(d[c]==b)d[c]=""}else if(d[c].match(b))d[c]="";a.className=d.join(" ")}function m(a, b,c){if(typeof c=="undefined"){c=a.className.split(" ");for(a=0;a<c.length;a++)if(c[a]==b)return true}else if(a.className.indexOf(b)>-1)return true;return false}function t(a){var b=0;if(a.offsetParent)for(;a.offsetParent;){b+=a.offsetTop;a=a.offsetParent}return b}function u(a){var b=0;if(a.offsetParent)for(;a.offsetParent;){b+=a.offsetLeft;a=a.offsetParent}return b}function g(a,b){var c=window.jsScrollbar._closures.objs,d=window.jsScrollbar._closures.fns,f=b.__objId,e=a.__fnId;if(!f)c[f=b.__objId= c.length]=b;if(!e)d[e=a.__fnId=d.length]=a;if(!b.__closures)b.__closures=[];if(b.__closures[e])return b.__closures[e];b=a=c=d=null;return window.jsScrollbar._closures.objs[f].__closures[e]=function(){return window.jsScrollbar._closures.fns[e].apply(window.jsScrollbar._closures.objs[f],arguments)}}this.jsScrollbar=function(a,b){var c=[],d;if(typeof b==="undefined")b=null;if(typeof a==="string"){a=a.replace(/\s/g,"").replace(/,$/,"").replace(/#/g,"").split(",");for(d=0;d<a.length;d++)v(i(a[d]))&&c.push(new jsScrollbar.init(i(a[d]), b))}else if(a.nodeType&&a.nodeType==1)v(a)&&c.push(new jsScrollbar.init(a,b));else if(a.length&&a.length>0)for(d=0;d<a.length;d++)v(a[d])&&c.push(new jsScrollbar.init(a[d],b));return c.length==0?null:c.length==1?c[0]:c};jsScrollbar.scrollbars=[];jsScrollbar.defaults={scrollSpeed:30,scrollDistance:10,wheelDistance:40,tweenFn:function(a){return-Math.pow(a-1,4)+1},tweenDuration:300,disableTweening:false,horizontalScrolling:true,verticalScrolling:true,fixedThumb:false,template:'<div class="jssb"><div class="jssb-up"></div><div class="jssb-track"><div class="jssb-track-mid"></div><div class="jssb-track-end"></div><div class="jssb-thumb"><div class="jssb-thumb-mid"></div><div class="jssb-thumb-end"></div></div></div><div class="jssb-down"></div></div>'}; this.jsScrollbar._closures={objs:[],fns:[]};j(window,"unload",function(){this.jsScrollbar._closures.objs=null;this.jsScrollbar._closures.fns=null;this.jsScrollbar._closures=null;this.jsScrollbar.scrollbars=null});jsScrollbar.init=function(a,b){jsScrollbar.scrollbars.push(this);this.parent=a;this._prefs=w(jsScrollbar.defaults,b);this._init()};jsScrollbar.init.prototype={_enabled:true,_doScrollX:false,_doScrollY:false,_isAnimating:false,_hasFocus:false,_temp:null,_scrollX:null,_scrollY:null,_prefs:null, content:null,parent:null,_init:function(){var a=this.parent,b=this.content,c=this._prefs;if(!this._temp)this._temp={};k(a,"jssb-applied");if(c.horizontalScrolling&&!i("jssb-x",a)&&(!this._scrollX||!this._scrollX.el))a.innerHTML+=c.template.replace(/jssb/g,"jssb-x").replace(/-up/g,"-left").replace(/-down/g,"-right");if(c.verticalScrolling&&!i("jssb-y",a)&&(!this._scrollY||!this._scrollY.el))a.innerHTML+=c.template.replace(/jssb/g,"jssb-y");if(!b||b&&!b.parentNode)b=this.content=i("jssb-content",a); this._doScrollX=c.horizontalScrolling&&b.scrollWidth>b.clientWidth?true:false;this._doScrollY=c.verticalScrolling&&b.scrollHeight>b.clientHeight?true:false;if(this._doScrollX){k(a,"jssb-scrollx");if(c.verticalScrolling&&b.scrollHeight>b.clientHeight)this._doScrollY=true}else n(a,"jssb-scrollx");if(this._doScrollY){k(a,"jssb-scrolly");if(!this._doScrollX&&c.horizontalScrolling&&b.scrollWidth>b.clientWidth){this._doScrollX=true;k(a,"jssb-scrollx")}}else n(a,"jssb-scrolly");if(c.horizontalScrolling){if(this._scrollX=== null)this._scrollX=new r(i("jssb-x",a),"x");this._prepComponent(this._scrollX,this._doScrollX)}if(c.verticalScrolling){if(this._scrollY===null)this._scrollY=new r(i("jssb-y",a),"y");this._prepComponent(this._scrollY,this._doScrollY)}j(a,"mousewheel",g(this._mouseWheel,this));j(a,"DOMMouseScroll",g(this._mouseWheel,this));j(a,"mousedown",g(this._focus,this));j(document,"mousedown",g(this._blur,this));j(b,"mousedown",g(this._selectStart,this));j(b,"scroll",g(this._keepUp,this))},_prepComponent:function(a, b){if(a.el&&!a.el.parentNode){h(a.el,"mousedown",g(this._mouseDown,this));a=new r(i("jssb-"+a.axis,this.parent),a.axis,a.minThumb)}if(b){var c=this.content;b=a.track.relevantDim();var d=a.thumb.relevantDim(),f=a.axis=="x"?c.clientWidth:c.clientHeight;c=a.axis=="x"?c.scrollWidth:c.scrollHeight;this._prefs.fixedThumb||(d=a.thumb.relevantDim(Math.round(b*f/c>=a.minThumb?b*f/c:a.minThumb)));a.ratio=(c-f)/(b-d);h(a.el,"mousedown",g(this._mouseDown,this));j(a.el,"mousedown",g(this._mouseDown,this))}},_mouseDown:function(a){a= q(a);var b=this._prefs,c=this.content,d=this._temp,f=m(a.target,"jssb-x",true)?"x":"y",e=f=="x"?this._scrollX:this._scrollY,o;if(m(a.target,"jssb-"+f+"-thumb",true)){k(e.thumb.el," jssb-"+f+"-thumb-click");d.clicked=e.thumb.el;d.trackPos=f=="x"?u(e.track.el):t(e.track.el);d.grabPoint=f=="x"?a.pageX-u(e.thumb.el):a.pageY-t(e.thumb.el);d.axis=f;h(this.content,"scroll",g(this._keepUp,this));j(document,"mousemove",g(this._drag,this))}else if(m(a.target,"jssb-"+f+"-track",true)){k(e.track.el," jssb-"+ f+"-track-click");d.clicked=e.track.el;o=f=="x"?u(e.track.el):t(e.track.el);if(b.disableTweening){d.newPos=(a["page"+f.toUpperCase()]-o)*e.ratio;f=="x"?this._startScroll(d.newPos<c.scrollLeft?-c.clientWidth:c.clientWidth,0):this._startScroll(0,d.newPos<c.scrollTop?-c.clientHeight:c.clientHeight)}else{b=(a["page"+f.toUpperCase()]-o-e.thumb.relevantDim()/2)*e.ratio;f=="x"?this.tweenTo(b,null):this.tweenTo(null,b)}}else if(m(a.target,"jssb-y-up",true)){k(e.prev.el,"jssb-y-up-click");d.clicked=e.prev.el; this._startScroll(0,-b.scrollDistance)}else if(m(a.target,"jssb-y-down",true)){k(e.next.el,"jssb-y-down-click");d.clicked=e.next.el;this._startScroll(0,b.scrollDistance)}else if(m(a.target,"jssb-x-left",true)){k(e.prev.el,"jssb-x-left-click");d.clicked=e.prev.el;this._startScroll(-b.scrollDistance,0)}else if(m(a.target,"jssb-x-right",true)){k(e.next.el,"jssb-x-right-click");d.clicked=e.next.el;this._startScroll(b.scrollDistance,0)}j(document,"mouseup",g(this._mouseUp,this));j(document,"selectstart", s);a.preventDefault&&a.preventDefault()},_mouseUp:function(){var a=this._temp;n(a.clicked,/jssb-[x|y]-[a-z]*-click/g);if(a.scrollTimer){window.clearInterval(a.scrollTimer);a.scrollTimer=null}if(typeof a.newPos=="number")a.newPos=null;h(document,"mousemove",g(this._drag,this));h(document,"mouseup",g(this._mouseUp,this));h(document,"selectstart",s);j(this.content,"scroll",g(this._keepUp,this))},_drag:function(a){a=q(a);window.ActiveXObject&&a.button==0&&this._mouseUp();var b=this._temp,c=b.axis,d=c== "x"?this._scrollX:this._scrollY;a=a["page"+c.toUpperCase()]-b.trackPos-b.grabPoint;c=="x"?this._scroll(a*d.ratio,null):this._scroll(null,a*d.ratio);this._keepUp()},_mouseWheel:function(a){a=a?a:event;var b=0,c=this.content;if(typeof a.wheelDelta=="undefined"){if(a.detail>0)b=1;if(a.detail<0)b=-1}else{if(a.wheelDelta>=120)b=-1;if(a.wheelDelta<=-120)b=1}this._prefs.verticalScrolling===false?this.scrollBy(b*this._prefs.wheelDistance,null):this.scrollBy(null,b*this._prefs.wheelDistance);if(c.scrollTop> 0&&c.scrollTop<c.scrollHeight-c.clientHeight)return s(a)},_focus:function(a){q(a);this._focusFlag=true;if(!this._hasFocus){this._hasFocus=true;k(this.parent,"jssb-focus");j(document,"keydown",g(this._keyDown,this))}},_blur:function(){if(!this._focusFlag&&this._hasFocus){this._hasFocus=false;n(this.parent,"jssb-focus");h(document,"keydown",g(this._keyDown,this))}this._focusFlag=false},_keyDown:function(a){a=q(a);var b=this.content,c=this._prefs,d=a.target.tagName.toLowerCase(),f=c.disableTweening? this.scrollTo:this.tweenTo,e=c.disableTweening?this.scrollBy:this.tweenBy;if(!(d=="input"||d=="select")){switch(a.keyCode){case 33:e.call(this,0,-b.clientHeight);break;case 32:case 34:e.call(this,0,b.clientHeight);break;case 35:f.call(this,b.scrollLeft,b.scrollHeight);break;case 36:f.call(this,b.scrollLeft,0);break;case 37:this.scrollBy(-c.scrollDistance,0);break;case 38:this.scrollBy(0,-c.scrollDistance);break;case 39:this.scrollBy(c.scrollDistance,0);break;case 40:this.scrollBy(0,c.scrollDistance); break}return a.keyCode>=32&&a.keyCode<=40?s(a):true}},_keepUp:function(){var a=this._scrollX,b=this._scrollY;this._doScrollX&&a.thumb.x(Math.round(this.content.scrollLeft/a.ratio));this._doScrollY&&b.thumb.y(Math.round(this.content.scrollTop/b.ratio))},_scroll:function(a,b){if(a!==null&&typeof a!=="undefined")this.content.scrollLeft=a;if(b!==null&&typeof b!=="undefined")this.content.scrollTop=b},_startScroll:function(a,b){this.scrollBy(a,b);this._temp.scrollByX=a;this._temp.scrollByY=b;this._temp.scrollTimer= setTimeout(g(this._startScrollDelay,this),300)},_startScrollDelay:function(){this._temp.scrollTimer=setInterval(g(this._startScrollInterval,this),this._prefs.scrollSpeed)},_startScrollInterval:function(){var a=this.content,b=this._temp,c=b.scrollByX,d=b.scrollByY;if(typeof b.newPos=="number")if(c&&b.newPos>=a.scrollLeft&&b.newPos<=a.scrollLeft+a.clientWidth||d&&b.newPos>=a.scrollTop&&b.newPos<=a.scrollTop+a.clientHeight){clearTimeout(b.scrollTimer);b.scrollByX=0;b.scrollByY=0;return}this.scrollBy(c, d)},_selectStart:function(){this._temp.coTop=t(this.content);this._temp.coLeft=u(this.content);j(document,"mousemove",g(this._select,this));j(document,"mouseup",g(this._selectStop,this))},_select:function(a){a=q(a);var b=this.content,c=this._temp,d=this._prefs,f=0,e=0;if(d.horizontalScrolling)if(a.pageX<c.coLeft)f=-d.scrollDistance;else if(a.pageX>c.coLeft&&a.pageX<c.coLeft+b.clientWidth)f=0;else if(a.pageX>c.coLeft+b.clientWidth)f=d.scrollDistance;if(d.verticalScrolling)if(a.pageY<c.coTop)e=-d.scrollDistance; else if(a.pageY>c.coTop&&a.pageY<c.coTop+b.clientHeight)e=0;else if(a.pageY>c.coTop+b.clientHeight)e=d.scrollDistance;if(!c.isScrolling&&(f!==0||e!==0)){this._startScroll(f,e);c.isScrolling=true}else if(c.isScrolling&&f===0&&e===0){clearInterval(c.scrollTimer);c.isScrolling=false}else{c.scrollByX=f;c.scrollByY=e}},_selectStop:function(){clearInterval(this._temp.scrollTimer);h(document,"mousemove",g(this._select,this));h(document,"mouseup",g(this._selectStop,this))},scrollTo:function(a,b){if(typeof b== "undefined")this._prefs.horizontalScrolling===false?this._scroll(null,a):this._scroll(a,null);else this._scroll(a,b)},scrollBy:function(a,b){if(typeof b=="undefined")this._prefs.horizontalScrolling===false?this._scroll(null,this.content.scrollTop+a):this._scroll(this.content.scrollLeft+a,null);else this._scroll(this.content.scrollLeft+a,this.content.scrollTop+b)},tweenTo:function(a,b){if(!this._isAnimating){var c=this.content,d=this._prefs,f=this._temp,e=c.scrollLeft,o=c.scrollTop,l,x,y,z=+new Date; if(typeof b=="undefined")if(d.horizontalScrolling===false){l=null;a=a}else{l=a;a=null}else{l=a;a=b}if(l!==null&&l!=c.scrollLeft){if(l<0)l=0;if(l>c.scrollWidth-c.clientWidth)l=c.scrollWidth-c.clientWidth;x=l-e}if(a!==null&&a!=c.scrollTop){if(a<0)a=0;if(a>c.scrollHeight-c.clientHeight)a=c.scrollHeight-c.clientHeight;y=a-o}this._isAnimating=true;f.tweenData={start:z,fin:z+d.tweenDuration,sx:e,sy:o,dx:x,dy:y,x:l,y:a};f.tweenTimer=setInterval(g(this._tweenToFn,this),10)}},_tweenToFn:function(){var a=this._temp.tweenData, b=this._prefs,c=+new Date,d=c>a.fin?1:(c-a.start)/b.tweenDuration;if(b.tweenFn)d=b.tweenFn(d);this.scrollTo(a.x===null?null:a.sx+a.dx*d,a.y===null?null:a.sy+a.dy*d);if(c>a.fin){clearInterval(this._temp.tweenTimer);this._isAnimating=false}},tweenBy:function(a,b){if(typeof b=="undefined")this._prefs.horizontalScrolling===false?this.tweenTo(null,this.content.scrollTop+a):this.tweenTo(this.content.scrollLeft+a,null);else this.tweenTo(this.content.scrollLeft+a,this.content.scrollTop+b)},recalc:function(){if(this._enabled){var a= this.parent,b=this.content;h(a,"mousewheel",g(this._mouseWheel,this));h(a,"DOMMouseScroll",g(this._mouseWheel,this));h(a,"mousedown",g(this._focus,this));h(document,"mousedown",g(this._blur,this));h(b,"mousedown",g(this._selectStart,this));h(b,"scroll",g(this._keepUp,this));this._init();this._keepUp();b.scrollWidth-b.clientWidth-b.scrollLeft<0&&this._scroll(b.scrollWidth-b.clientWidth,null);b.scrollHeight-b.clientHeight-b.scrollTop<0&&this._scroll(null,b.scrollHeight-b.clientHeight)}},disable:function(){if(this._enabled){var a= this.content,b=this.parent;this._enabled=false;this._blur();n(b,"jssb-applied");n(b,"jssb-scrolly");n(b,"jssb-scrollx");h(a,"mousedown",g(this._selectStart,this));h(a,"scroll",g(this._keepUp,this));h(b,"mousedown",g(this._focus,this));h(document,"mousedown",g(this._blur,this))}},enable:function(){if(!this._enabled){this._enabled=true;this.recalc()}},prefs:function(a,b){if(b||typeof a=="object"){if(typeof a=="string")this._prefs[a]=b;else if(typeof a=="object")this._prefs=w(a,this._prefs);return true}return this._prefs[a]}}; r.prototype={track:null,thumb:null,prev:null,next:null,minThumb:0,ratio:0};p.prototype={width:function(a){if(typeof a!="undefined")this.el.style.width=a+"px";if(!this.el.style.width)return this.el.offsetWidth;return parseFloat(this.el.style.width)},height:function(a){if(typeof a!="undefined")this.el.style.height=a+"px";if(!this.el.style.height)return this.el.offsetHeight;return parseFloat(this.el.style.height)},x:function(a){if(typeof a!="undefined")this.el.style.left=a+"px";return parseFloat(this.el.style.left)}, y:function(a){if(typeof a!="undefined")this.el.style.top=a+"px";return parseFloat(this.el.style.top)},relevantDim:function(a){return this.axis=="x"?this.width(a):this.height(a)},relevantPos:function(a){return this.axis=="x"?this.x(a):this.y(a)}}})();
