
((function(){function Scrollbar(selector,options){Scrollbar.instance[(this.index=Scrollbar.instance.length)]=this;if(Scrollbar.instance.length==1){Scrollbar.monitor(true);}
var defaultOptions={facing:'vertical',animate:false};var mergedOptions=options||{};for(var i in defaultOptions){if(typeof mergedOptions[i]==="undefined"){mergedOptions[i]=defaultOptions[i];}}
this.init(selector,mergedOptions);}
YAHOO.lang.extend(Scrollbar,YAHOO.util.EventProvider,{index:-1,target:null,slider:null,scrollbar:null,thumb:null,options:null,animate:true,_auto:null,_autoThread:-1,last:null,_buttonOffset:0,vertical:false,horizontal:false,eventsApplied:false,init:function(selector,options){this.createEvent('onHidden');this.createEvent('onVisible');this.options=options;this.target=Sizzle(selector);this.target.addClass('sm-scrolled').css('overflow','hidden');this.animate=this.options.animate;this.vertical=this.options.facing==="vertical";this.horizontal=!this.vertical;if(this.options.mouseWheel!==false&&this.vertical){this.useMouseWheel=!!(window.SM&&SM.tools&&SM.tools.MouseWheel);}
this.last={client:-1,scroll:-1,x:-1,y:-1};this._generateMarkup();this._applyStyles();this._applyEvents();this._resizeThumb();YAHOO.util.Event.on(window,'resize',Scrollbar.windowResized);},isHidden:function(){return!this.scrollbar.is(':visible');},hide:function(dirty){this.scrollbar.addClass('scrollbar-hidden').css('visibility','hidden');if(!!dirty===true){this.last.client=-1;this.last.scroll=-1;}
this.fireEvent('onHidden');},show:function(){this.scrollbar.removeClass('scrollbar-hidden').css({visibility:'',opacity:'',display:''});this.fireEvent('onVisible');},update:function(){this._reposition();this._resizeThumb();},autoScroll:function(){if(this._auto){var fn=this[this._auto.fnName||'scrollBy'];var delta=this._auto.delta||0;fn.call(this,delta);}},scrollBy:function(offset){this.slider.setValue(this.slider.getValue()+this._calculateLeading()+offset);},scrollByPercent:function(percent){percent=(percent/100.0);var leading=this._calculateLeading();var max=this.slider.thumb.bottomConstraint||this.slider.thumb.rightConstraint;this.slider.setValue(this.slider.getValue()+leading+(percent*max));},scrollTo:function(sliderValue){this.slider.setValue(this._calculateLeading()+sliderValue);},scrollPercent:function(percent){percent=(Math.max(0,Math.min(percent,100))/100.0);var leading=this._calculateLeading();var max=this.slider.thumb.bottomConstraint||this.slider.thumb.rightConstraint;this.slider.setValue(percent*max);},_reset:function(){var value=this.slider.getValue()+this._calculateLeading();var val=this.vertical?this.thumb.height():this.thumb.width();var max=this.vertical?this.slider.thumb.maxY:this.slider.thumb.maxX;if((value+val)>max){value=0;}
if(YAHOO.env.ua.ie&&this.slider.getValue()<0&&this.target[0].scrollTop==0){value=0;}
this.slider.setValue(value||0,true,true,true);},_reposition:function(){var isBody=this.target.parent().is('body');var targetLoc=isBody?this.target.offset():this.target.position();var thumbSize={w:this.thumb.width(),h:this.thumb.height()};var targetSize={w:this.target.outerWidth(),h:this.target.outerHeight()};var scrollTop=this.target.parent()[0].scrollTop;var scrollLeft=this.target.parent()[0].scrollLeft;var limits={top:0,right:0,bottom:0,left:0};var browserOffset=YAHOO.env.ua.ie?2:1;if(this.horizontal){var offset={l:parseInt(this.target.css('margin-left'))||0,t:parseInt(this.target.css('margin-top'))||0};if(this.options.offset){offset.l+=this.options.offset.left||this.options.offset.x||0;offset.t+=this.options.offset.top||this.options.offset.y||0;}
this.scrollbar.css({left:targetLoc.left+offset.l+scrollLeft,top:targetLoc.top+targetSize.h+offset.t+browserOffset+scrollTop,width:targetSize.w,height:thumbSize.h});this.scrollbar.find('.scrollbar-bg').width(this.target.outerWidth());limits.right=Math.ceil(targetSize.w-this._calculateLeading()-thumbSize.w);}
else{var offset={l:parseInt(this.target.css('margin-left'))||0,t:parseInt(this.target.css('margin-top'))||0};if(this.options.offset){offset.l+=this.options.offset.left||this.options.offset.x||0;offset.t+=this.options.offset.top||this.options.offset.y||0;}
this.scrollbar.css({left:targetLoc.left+targetSize.w+offset.l+browserOffset+scrollLeft,top:targetLoc.top+offset.t+scrollTop,width:thumbSize.w,height:targetSize.h});limits.bottom=Math.ceil(targetSize.h-this._calculateLeading()-thumbSize.h);}
this.slider.thumb.initSlider(limits.left,limits.right,limits.up,limits.down,1);},_generateMarkup:function(){var v=this.vertical;this.scrollbar=Sizzle(v?Scrollbar.verticalMarkup:Scrollbar.horizontalMarkup);this.thumb=this.scrollbar.find('.scrollbar-thumb');var bgPrefix="scrollbar-";var thumbPrefix="scrollbar-thumb-";YAHOO.util.Dom.generateId(this.scrollbar[0],bgPrefix);YAHOO.util.Dom.generateId(this.thumb[0],thumbPrefix);this.scrollbar.css({position:'absolute',visibility:'hidden'});this.scrollbar.appendTo(this.target.parent());this._buttonOffset=0;this.scrollbar.find('.scrollbar-left,.scrollbar-right,.scrollbar-up,.scrollbar-down').each(function(){this._buttonOffset+=Sizzle(this)[v?'height':'width']();});var offset=this._buttonOffset;offset+=this.scrollbar.find('.scrollbar-thumb')[v?'height':'width']();var minpx=0;var maxpx=(v?this.target.innerHeight():this.target.innerWidth())-offset;var step=1;var bgId=this.scrollbar.attr('id');var thumbId=this.thumb.attr('id');this.slider=v?YAHOO.widget.Slider.getVertSlider(bgId,thumbId,minpx,maxpx,step):YAHOO.widget.Slider.getHorizSlider(bgId,thumbId,minpx,maxpx,step);this.animate=this.options.animate;this._resizeThumb();},_applyStyles:function(fromLoad){var isBody=this.target.parent().is('body');if(isBody&&!fromLoad){YAHOO.util.Event.on(window,'load',function(){this._applyStyles(true);this.scrollbar.css('visibility','visible');},null,this);}
if(YAHOO.env.ua.ie>0&&YAHOO.env.ua.ie<7){this.scrollOffset=45;}else if(YAHOO.env.ua.ie>=7&&YAHOO.env.ua.ie<8){this.scrollOffset=30;}else if(YAHOO.env.ua.ie>=8){this.scrollOffset=50;}else if(YAHOO.env.ua.webkit){this.scrollOffset=30;}else{this.scrollOffset=30;}
if(this.target.parent().css('position')==="static"&&!isBody){this.target.parent().css('position','relative');}
if(this.horizontal){var curMargin=this.target.css('margin-bottom');if(curMargin==''||curMargin=="0"||curMargin=="0px"||curMargin!="auto"){this.target.css('margin-bottom',this.scrollbar.height());}}else{var curMargin=this.target.css('margin-right');if(curMargin==''||curMargin=="0"||curMargin=="0px"||curMargin!="auto"){this.target.css('margin-right',this.scrollbar.width());}}
this._reposition();if(this.options.zIndex){this.scrollbar.css('z-index',this.options.zIndex);}
this.show();this.last.scroll=this.vertical?this.target.attr('scrollHeight'):this.target.attr('scrollWidth');this.last.client=this.vertical?this.target.attr('clientHeight'):this.target.attr('clientWidth');},_applyEvents:function(){this._removeEvents();if(this.options.onVisible){this.subscribe('onVisible',this.options.onVisible,null,this);}
if(this.options.onHidden){this.subscribe('onHidden',this.options.onHidden,null,this);}
var self=this;this.slider.subscribe("change",this._sliderChanged,this);this.scrollbar.find('.scrollbar-up').each(function(){YAHOO.util.Event.on(this,'mousedown',function(){if(self._auto===null){self._auto={delta:-15,fnName:'scrollBy'};self._autoThread=setInterval(function(){self.autoScroll();},10);}
YAHOO.util.Event.stopEvent(arguments[0]);});YAHOO.util.Event.on(this,'mouseup',function(){self._auto=null;clearInterval(self._autoThread);YAHOO.util.Event.stopEvent(arguments[0]);});YAHOO.util.Event.on(this,'click',function(){YAHOO.util.Event.stopEvent(arguments[0]);});});this.scrollbar.find('.scrollbar-down').each(function(){YAHOO.util.Event.on(this,'mousedown',function(){if(self._auto===null){self._auto={delta:15,fnName:'scrollBy'};self._autoThread=setInterval(function(){self.autoScroll();},10);}
YAHOO.util.Event.stopEvent(arguments[0]);});YAHOO.util.Event.on(this,'mouseup',function(){self._auto=null;clearInterval(self._autoThread);YAHOO.util.Event.stopEvent(arguments[0]);});YAHOO.util.Event.on(this,'click',function(){YAHOO.util.Event.stopEvent(arguments[0]);});});if(this.useMouseWheel){this.mouseWheel=new SM.tools.MouseWheel(this.target,{doScroll:function(event,args){var targetEl=Sizzle(this.eventTarget).parents('.sm-scrolled:first').get(0);if(self.target.get(0)!==targetEl&&self.target.get(0)!==this.eventTarget){return;}
var offset=args[0].offset;self.scrollBy(self.scrollOffset*(offset>0?1:-1));YAHOO.util.Event.stopEvent(this.event);}});}
this.eventsApplied=true;},_removeEvents:function(){this.slider.unsubscribe("change",this._sliderChanged);this.scrollbar.find('.scrollbar-up, .scrollbar-down, .scrollbar-left, .scrollbar-right').each(function(){YAHOO.util.Event.purgeElement(this);});this.eventsApplied=false;},_calculateLeading:function(){var horizontal=this.slider.type=="horiz"?true:false;var leading=0;this.scrollbar.find('.scrollbar-up,.scrollbar-down').each(function(){leading+=((horizontal)?Sizzle(this).width():Sizzle(this).height());});return leading;},_resizeThumb:function(isVertical,clientSize,scrollSize){var v=this.vertical;clientSize=clientSize||this.target.attr(v?'clientHeight':'clientWidth');scrollSize=scrollSize||this.target.attr(v?'scrollHeight':'scrollWidth');var ratio=Math.max(((clientSize/scrollSize)||0),0.25);var thumb=this.scrollbar.find('.scrollbar-thumb');var offset=this._calculateLeading();thumb.css('height',(clientSize-offset)*ratio);offset+=this.scrollbar.find('.scrollbar-thumb')[v?'height':'width']();var maxpx=(v?this.target.innerHeight():this.target.innerWidth())-offset;var step=1;var left=0;var right=v?0:maxpx;var up=0;var down=v?maxpx:0;this.slider.thumb.initSlider(left,right,up,down,step);},_sliderChanged:function(value,instance){var target=instance.target;var slider=this;var horizontal=slider.type=="horiz"?true:false;var bounds={w:target.width(),h:target.height(),cw:target[0].clientWidth,ch:target[0].clientHeight,sw:target[0].scrollWidth,sh:target[0].scrollHeight};var thumbRange={min:horizontal?slider.thumb.leftConstraint:slider.thumb.topConstraint,max:horizontal?slider.thumb.rightConstraint:slider.thumb.bottomConstraint,cur:value};var leading=instance._calculateLeading();var percent=(value+leading)/(thumbRange.max-thumbRange.min);var attribute=['scrollTop','scrollLeft'][horizontal?1:0];var other=horizontal?target[0].scrollTop:target[0].scrollLeft;var scroll=horizontal?(bounds.sw-bounds.cw)*percent:(bounds.sh-bounds.ch)*percent;if(instance.animate){var txy=[horizontal?scroll:other,horizontal?other:scroll];try{new YAHOO.util.Scroll(target.get(0),{scroll:{to:txy}},0.1).animate();return;}
catch(e){}}
target[0][attribute]=scroll;}});Scrollbar.instance=[];Scrollbar.threadId=-1;Scrollbar.callToAll=function(fnName,argN){var fnArgs=results.splice.call(arguments,1,arguments.length);return Scrollbar.applyToAll(fnName,fnArgs);};Scrollbar.applyToAll=function(fnName,fnArgs){var results=[],len=Scrollbar.instance.length,i,instance,result;for(i=0;i<len;i++){instance=Scrollbar.instance[i];try{result=instance[fnName].apply(instance,fnArgs||[]);results.push({succeeded:true,value:result});}
catch(e){results.push({succeeded:false,value:e});}}
len=i=instance=result=fnArgs=null;return results;};Scrollbar.monitor=function(enable){if(!!enable===true&&Scrollbar.threadId!=-1){return;}
if(!!enable){Scrollbar.threadId=setInterval(Scrollbar.monitorThread,70);}
else{clearInterval(Scrollbar.threadId);Scrollbar.threadId=-1;}};Scrollbar.monitorThread=function(){var i,v,len=Scrollbar.instance.length;var instance,seen,unseen,dirty,offset,visible,targetEl;if(len!==0){for(i=0;i<len;i++){instance=Scrollbar.instance[i];targetEl=instance.target[0];v=instance.vertical;seen=v?targetEl.clientHeight:targetEl.clientWidth;unseen=v?targetEl.scrollHeight:targetEl.scrollWidth;offset=instance.target.offset();visible=!instance.isHidden();dirty=(visible&&seen>=unseen)||instance.last.scroll!=unseen||instance.last.client!=seen||(visible&&seen==0)||(!visible&&seen>unseen);if(dirty){if(seen>=unseen||seen===0){v?targetEl.scrollTop=0:targetEl.scrollLeft=0;instance.hide();}
else{if(!visible){instance._reset();}
instance._reposition();instance._resizeThumb(v,seen,unseen);instance.show();}
instance.last.client=seen;instance.last.scroll=unseen;instance.last.x=offset.left;instance.last.y=offset.top;}}}
i=v=len=instance=seen=unseen=dirty=visible=targetEl=null;};Scrollbar.windowResized=function(){var is=Scrollbar.instance,i;for(i=0;i<is.length;i++){is[i].hide(true);is[i]._reset();}};Scrollbar.addTo=function(selector,options){var results=[];var targets=Sizzle(selector);targets.each(function(){results.push(new Scrollbar(this,options));});return results;};Scrollbar.horizontalMarkup=['<div class="sm-scrollbar sm-scrollbar-horizontal">','<div class="scrollbar">','<div class="scrollbar-bg">','<div class="scrollbar-thumb">','<div class="left"></div>','<div class="right"></div>','</div>','</div>','<div class="scrollbar-left"></div>','<div class="scrollbar-right"></div>','</div>','</div>'].join('');Scrollbar.verticalMarkup=['<div class="sm-scrollbar sm-scrollbar-vertical">','<div class="scrollbar">','<div class="scrollbar-bg">','<div class="scrollbar-thumb">','<div class="top"></div>','<div class="bottom"></div>','</div>','</div>','<div class="scrollbar-up"></div>','<div class="scrollbar-down"></div>','</div>','</div>'].join('');((window.SM=window.SM||{}).widget=SM.widget||{});SM.widget.Scrollbar=Scrollbar;})());