/**
 * $Id: scrollbar.min.js 534 2010-08-12 21:00:58Z martin $
 */
var mmCarouselScrollBar=new Class({options:{maxThumbSize:15,hScrollOffset:19,wheel:8,arrows:true,hScroll:true,vScroll:true},initialize:function(main,content,options){this.setOptions(options);this.main=$(main);this.content=$(content);if(this.options.arrows==true){this.arrowOffset=2*this.options.hScrollOffset;}else{this.arrowOffset=0;}
if(this.options.hScroll==true){this.hScrollOffset=this.options.hScrollOffset;}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'});var vThumbInner=new Element('div',{'class':'vThumb-inner'});vThumbInner.injectInside(this.vThumb);this.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'});var hThumbInner=new Element('div',{'class':'hThumb-inner'});hThumbInner.injectInside(this.hThumb);this.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.bindWithEvent(this),'hStart':this.hStart.bindWithEvent(this),'end':this.end.bindWithEvent(this),'vDrag':this.vDrag.bindWithEvent(this),'hDrag':this.hDrag.bindWithEvent(this),'wheel':this.wheel.bindWithEvent(this),'vPage':this.vPage.bindWithEvent(this),'hPage':this.hPage.bindWithEvent(this)};this.vPosition={};this.hPosition={};this.vMouse={};this.hMouse={};this.update(true);this.attach();},update:function(init){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+19);this.hTrack.setStyle('width',this.content.getSize().size.x-38);if((this.content.scrollHeight+19)<=this.main.offsetHeight){this.vScrollbar.setStyle('display','none');if(this.options.hScroll==true){this.hTrack.setStyle('width',this.content.getSize().size.x-38);}}else{if(this.options.vScroll==true){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.content.getSize().size.y-38);}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;if(this.vContentSize==this.vContentScrollSize){this.vScrollbar.setStyle('display','none');}
this.vContentRatio=this.vContentSize/this.vContentScrollSize;this.vThumbSize=(this.vTrackSize*this.vContentRatio).limit(this.options.maxThumbSize,this.vTrackSize);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(event){this.interval=(function(event){this.content.scrollTop-=this.options.wheel;this.vUpdateThumbFromContentScroll();}.bind(this).periodical(40))}.bind(this));this.arrowUp.addEvent('mouseup',function(event){$clear(this.interval);}.bind(this));this.arrowUp.addEvent('mouseout',function(event){$clear(this.interval);}.bind(this));this.arrowDown.addEvent('mousedown',function(event){this.interval=(function(event){this.content.scrollTop+=this.options.wheel;this.vUpdateThumbFromContentScroll();}.bind(this).periodical(40))}.bind(this));this.arrowDown.addEvent('mouseup',function(event){$clear(this.interval);}.bind(this));this.arrowDown.addEvent('mouseout',function(event){$clear(this.interval);}.bind(this));this.arrowLeft.addEvent('mousedown',function(event){this.interval=(function(event){this.content.scrollLeft-=this.options.wheel;this.hUpdateThumbFromContentScroll();}.bind(this).periodical(40))}.bind(this));this.arrowLeft.addEvent('mouseup',function(event){$clear(this.interval);}.bind(this));this.arrowLeft.addEvent('mouseout',function(event){$clear(this.interval);}.bind(this));this.arrowRight.addEvent('mousedown',function(event){this.interval=(function(event){this.content.scrollLeft+=this.options.wheel;this.hUpdateThumbFromContentScroll();}.bind(this).periodical(40))}.bind(this));this.arrowRight.addEvent('mouseup',function(event){$clear(this.interval);}.bind(this));this.arrowRight.addEvent('mouseout',function(event){$clear(this.interval);}.bind(this));}},wheel:function(event){this.content.scrollTop-=(event.wheel*this.options.wheel).toInt();this.vUpdateThumbFromContentScroll();event.stop();},vPage:function(event){if(event.page.y>this.vThumb.getPosition().y)this.content.scrollTop+=this.content.offsetHeight;else this.content.scrollTop-=this.content.offsetHeight;this.vUpdateThumbFromContentScroll();event.stop();},hPage:function(event){if(event.page.x>this.hThumb.getPosition().x)this.content.scrollLeft+=this.content.offsetWidth;else this.content.scrollLeft-=this.content.offsetWidth;this.hUpdateThumbFromContentScroll();event.stop();},vStart:function(event){this.vMouse.start=event.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);event.stop();},hStart:function(event){this.hMouse.start=event.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);event.stop();},end:function(event){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);event.stop();},vDrag:function(event){this.vMouse.now=event.page.y;this.vPosition.now=(this.vPosition.start+(this.vMouse.now-this.vMouse.start)).limit(0,(this.vTrackSize-this.vThumbSize));this.vUpdateContentFromThumbPosition();this.vUpdateThumbFromContentScroll();event.stop();},hDrag:function(event){this.hMouse.now=event.page.x;this.hPosition.now=(this.hPosition.start+(this.hMouse.now-this.hMouse.start)).limit(0,(this.hTrackSize-this.hThumbSize));this.hUpdateContentFromThumbPosition();this.hUpdateThumbFromContentScroll();event.stop();},destroy:function(){this.hScrollbar.remove();this.vScrollbar.remove();}});mmCarouselScrollBar.implement(new Options,new Events);
