var ScrollBar=new Class({Implements:[Events,Options],options:{maxThumbSize:15,wheel:8,arrows:true,hScroll:true},initialize:function(f,d,e){this.setOptions(e);this.main=$(f);if(Browser.Engine.webkit419){this.content=$(d).clone();this.content.set("id",$(d).get("id"));this.content.setStyle("overflow","hidden");this.content.replaces(d)}else{this.content=$(d);this.content.setStyle("overflow","hidden")}if(this.options.arrows==true){this.arrowOffset=22}else{this.arrowOffset=0}if(this.options.hScroll==true){this.hScrollOffset=11}else{this.hScrollOffset=0}this.vScrollbar=new Element("div",{"class":"vScrollbar"}).injectAfter(this.content);if(this.options.arrows==true){this.arrowUp=new Element("div",{"class":"arrowUp"}).injectInside(this.vScrollbar)}this.vTrack=new Element("div",{"class":"vTrack"}).injectInside(this.vScrollbar);this.vThumb=new Element("div",{"class":"vThumb"}).injectInside(this.vTrack);if(this.options.arrows==true){this.arrowDown=new Element("div",{"class":"arrowDown"}).injectInside(this.vScrollbar)}this.hScrollbar=new Element("div",{"class":"hScrollbar"}).injectAfter(this.vScrollbar);if(this.options.arrows==true){this.arrowLeft=new Element("div",{"class":"arrowLeft"}).injectInside(this.hScrollbar)}this.hTrack=new Element("div",{"class":"hTrack"}).injectInside(this.hScrollbar);this.hThumb=new Element("div",{"class":"hThumb"}).injectInside(this.hTrack);if(this.options.arrows==true){this.arrowRight=new Element("div",{"class":"arrowRight"}).injectInside(this.hScrollbar)}this.corner=new Element("div",{"class":"corner"}).injectAfter(this.hScrollbar);this.bound={vStart:this.vStart.bind(this),hStart:this.hStart.bind(this),end:this.end.bind(this),vDrag:this.vDrag.bind(this),hDrag:this.hDrag.bind(this),wheel:this.wheel.bind(this),vPage:this.vPage.bind(this),hPage:this.hPage.bind(this)};this.vPosition={};this.hPosition={};this.vMouse={};this.hMouse={};this.update();this.attach()},update:function(){this.main.setStyle("height",this.content.offsetHeight+this.hScrollOffset);this.vTrack.setStyle("height",this.content.offsetHeight-this.arrowOffset);this.main.setStyle("width",this.content.offsetWidth+11);this.hTrack.setStyle("width",this.content.offsetWidth-this.arrowOffset);if(this.content.scrollHeight<=this.main.offsetHeight){this.vScrollbar.setStyle("display","none");if(this.options.hScroll==true){this.hTrack.setStyle("width",this.hTrack.offsetWidth+11)}this.content.setStyle("width",this.content.offsetWidth+11)}else{this.vScrollbar.setStyle("display","block")}if(this.options.hScroll==true){if(this.content.scrollWidth<=this.main.offsetWidth){this.hScrollbar.setStyle("display","none");this.vTrack.setStyle("height",this.vTrack.offsetHeight+this.hScrollOffset);this.content.setStyle("height",this.content.offsetHeight+this.hScrollOffset)}else{this.hScrollbar.setStyle("display","block")}if(this.content.scrollHeight<=this.main.offsetHeight||this.content.scrollWidth<=this.main.offsetWidth){this.corner.setStyle("display","none")}else{this.corner.setStyle("display","block")}this.hContentSize=this.content.offsetWidth;this.hContentScrollSize=this.content.scrollWidth;this.hTrackSize=this.hTrack.offsetWidth;this.hContentRatio=this.hContentSize/this.hContentScrollSize;this.hThumbSize=(this.hTrackSize*this.hContentRatio).limit(this.options.maxThumbSize,this.hTrackSize);this.hScrollRatio=this.hContentScrollSize/this.hTrackSize;this.hThumb.setStyle("width",this.hThumbSize);this.hUpdateThumbFromContentScroll();this.hUpdateContentFromThumbPosition()}else{this.hScrollbar.setStyle("display","none");this.corner.setStyle("display","none")}this.vContentSize=this.content.offsetHeight;this.vContentScrollSize=this.content.scrollHeight;this.vTrackSize=this.vTrack.offsetHeight;this.vContentRatio=this.vContentSize/this.vContentScrollSize;this.vThumbSize=(this.vTrackSize*this.vContentRatio).limit(this.options.maxThumbSize,this.vTrackSize);if(!Browser.trident){this.vThumbSize-=1}this.vScrollRatio=this.vContentScrollSize/this.vTrackSize;this.vThumb.setStyle("height",this.vThumbSize);this.vUpdateThumbFromContentScroll();this.vUpdateContentFromThumbPosition()},vUpdateContentFromThumbPosition:function(){this.content.scrollTop=this.vPosition.now*this.vScrollRatio},hUpdateContentFromThumbPosition:function(){this.content.scrollLeft=this.hPosition.now*this.hScrollRatio},vUpdateThumbFromContentScroll:function(){this.vPosition.now=(this.content.scrollTop/this.vScrollRatio).limit(0,(this.vTrackSize-this.vThumbSize));this.vThumb.setStyle("top",this.vPosition.now)},hUpdateThumbFromContentScroll:function(){this.hPosition.now=(this.content.scrollLeft/this.hScrollRatio).limit(0,(this.hTrackSize-this.hThumbSize));this.hThumb.setStyle("left",this.hPosition.now)},attach:function(){this.vThumb.addEvent("mousedown",this.bound.vStart);if(this.options.wheel){this.content.addEvent("mousewheel",this.bound.wheel)}this.vTrack.addEvent("mouseup",this.bound.vPage);this.hThumb.addEvent("mousedown",this.bound.hStart);this.hTrack.addEvent("mouseup",this.bound.hPage);if(this.options.arrows==true){this.arrowUp.addEvent("mousedown",function(b){this.interval=(function(a){this.content.scrollTop-=this.options.wheel;this.vUpdateThumbFromContentScroll()}.bind(this).periodical(40))}.bind(this));this.arrowUp.addEvent("mouseup",function(b){$clear(this.interval)}.bind(this));this.arrowUp.addEvent("mouseout",function(b){$clear(this.interval)}.bind(this));this.arrowDown.addEvent("mousedown",function(b){this.interval=(function(a){this.content.scrollTop+=this.options.wheel;this.vUpdateThumbFromContentScroll()}.bind(this).periodical(40))}.bind(this));this.arrowDown.addEvent("mouseup",function(b){$clear(this.interval)}.bind(this));this.arrowDown.addEvent("mouseout",function(b){$clear(this.interval)}.bind(this));this.arrowLeft.addEvent("mousedown",function(b){this.interval=(function(a){this.content.scrollLeft-=this.options.wheel;this.hUpdateThumbFromContentScroll()}.bind(this).periodical(40))}.bind(this));this.arrowLeft.addEvent("mouseup",function(b){$clear(this.interval)}.bind(this));this.arrowLeft.addEvent("mouseout",function(b){$clear(this.interval)}.bind(this));this.arrowRight.addEvent("mousedown",function(b){this.interval=(function(a){this.content.scrollLeft+=this.options.wheel;this.hUpdateThumbFromContentScroll()}.bind(this).periodical(40))}.bind(this));this.arrowRight.addEvent("mouseup",function(b){$clear(this.interval)}.bind(this));this.arrowRight.addEvent("mouseout",function(b){$clear(this.interval)}.bind(this))}},wheel:function(b){this.content.scrollTop-=b.wheel*this.options.wheel;this.vUpdateThumbFromContentScroll();b.stop()},vPage:function(b){if(b.page.y>this.vThumb.getPosition().y){this.content.scrollTop+=this.content.offsetHeight}else{this.content.scrollTop-=this.content.offsetHeight}this.vUpdateThumbFromContentScroll();b.stop()},hPage:function(b){if(b.page.x>this.hThumb.getPosition().x){this.content.scrollLeft+=this.content.offsetWidth}else{this.content.scrollLeft-=this.content.offsetWidth}this.hUpdateThumbFromContentScroll();b.stop()},vStart:function(b){this.vMouse.start=b.page.y;this.vPosition.start=this.vThumb.getStyle("top").toInt();document.addEvent("mousemove",this.bound.vDrag);document.addEvent("mouseup",this.bound.end);this.vThumb.addEvent("mouseup",this.bound.end);b.stop()},hStart:function(b){this.hMouse.start=b.page.x;this.hPosition.start=this.hThumb.getStyle("left").toInt();document.addEvent("mousemove",this.bound.hDrag);document.addEvent("mouseup",this.bound.end);this.hThumb.addEvent("mouseup",this.bound.end);b.stop()},end:function(b){document.removeEvent("mousemove",this.bound.vDrag);document.removeEvent("mousemove",this.bound.hDrag);document.removeEvent("mouseup",this.bound.end);this.vThumb.removeEvent("mouseup",this.bound.end);this.hThumb.removeEvent("mouseup",this.bound.end);b.stop()},vDrag:function(b){this.vMouse.now=b.page.y;this.vPosition.now=(this.vPosition.start+(this.vMouse.now-this.vMouse.start)).limit(0,(this.vTrackSize-this.vThumbSize));this.vUpdateContentFromThumbPosition();this.vUpdateThumbFromContentScroll();b.stop()},hDrag:function(b){this.hMouse.now=b.page.x;this.hPosition.now=(this.hPosition.start+(this.hMouse.now-this.hMouse.start)).limit(0,(this.hTrackSize-this.hThumbSize));this.hUpdateContentFromThumbPosition();this.hUpdateThumbFromContentScroll();b.stop()}});