/* Copyright (C) 2007 - 2011 YOOtheme GmbH, YOOtheme Proprietary Use License (http://www.yootheme.com/license) */

var YOOscroller=new Class({initialize:function(a,b){this.setOptions({onScroll:Class.empty,onPage:Class.empty,onRotate:Class.empty,onStop:Class.empty,onAutoPlay:Class.empty,panelSelector:".panel",slidesSelector:".slide",knobSelector:".scrollknob",knobSizeSelector:".scrollknob-size",scrollbarSelector:".scrollbar",scrollLinkSelector:{forward:".forward",back:".back"},startIndex:0,slideInterval:4E3,autoplay:true,knobOffset:0,maxThumbSize:10,mode:"vertical",width:0,scrollSteps:10,wheel:true},b);this.horz=
this.options.mode=="horizontal";this.panel=$(a).getElement(this.options.panelSelector).setStyle("overflow","hidden");this.slides=$(a).getElements(this.options.slidesSelector);this.knob=$(a).getElement(this.options.knobSelector);this.ksize=$(a).getElement(this.options.knobSizeSelector);this.track=$(a).getElement(this.options.scrollbarSelector);this.rotateActive=this.rotateForward=true;this.currentSlide=this.options.startIndex;this.setPositions();if(this.horz&&this.options.width){this.wrapper=new Element("div");
this.panel.getChildren().each(function(c){this.wrapper.adopt(c)});this.wrapper.injectInside(this.panel).setStyle("width",this.options.width)}this.bound={start:this.start.bind(this),end:this.end.bind(this),drag:this.drag.bind(this),wheel:this.wheel.bind(this),page:this.page.bind(this)};this.position={};this.mouse={};this.update();this.attach();var d=function(){$clear(this.scrolling)}.bind(this);["forward","back"].each(function(c){var e=$(a).getElement(this.options.scrollLinkSelector[c]);e&&e.addEvents({mousedown:function(){this.scrolling=
this[c].periodical(50,this)}.bind(this),mouseup:d.bind(this),click:d.bind(this)})},this);this.knob.addEvent("click",d.bind(this));window.addEvent("domready",function(){try{$(document.body).addEvent("mouseup",d.bind(this))}catch(c){}}.bind(this));this.options.autoplay&&this.autoplay()},setPositions:function(){[this.track,this.knob].each(function(a){a.getStyle("position")=="static"&&a.setStyle("position","relative")})},update:function(){var a=this.horz?"Width":"Height";this.contentSize=this.panel["offset"+
a];this.contentScrollSize=this.panel["scroll"+a];this.trackSize=this.track["offset"+a];this.contentRatio=this.contentSize/this.contentScrollSize;this.knobSize=(this.trackSize*this.contentRatio+this.options.knobOffset).limit(this.options.maxThumbSize,this.trackSize);this.scrollRatio=this.contentScrollSize/this.trackSize;this.ksize.setStyle(a.toLowerCase(),this.knobSize+"px");this.updateThumbFromContentScroll();this.updateContentFromThumbPosition()},updateContentFromThumbPosition:function(){this.panel[this.horz?
"scrollLeft":"scrollTop"]=this.position.now*this.scrollRatio},updateThumbFromContentScroll:function(){this.position.now=(this.panel[this.horz?"scrollLeft":"scrollTop"]/this.scrollRatio).limit(0,this.trackSize-this.knobSize);this.knob.setStyle(this.horz?"left":"top",this.position.now+"px")},attach:function(){this.knob.addEvent("mousedown",this.bound.start);this.options.scrollSteps&&this.panel.addEvent("mousewheel",this.bound.wheel);this.track.addEvent("mouseup",this.bound.page)},wheel:function(a){a=
new Event(a);this.scroll(-(a.wheel*this.options.scrollSteps));this.updateThumbFromContentScroll();a.stop()},scroll:function(a){this.rotateActive&&this.stop();a=a||this.options.scrollSteps;this.panel[this.horz?"scrollLeft":"scrollTop"]+=a;this.updateThumbFromContentScroll()},forward:function(a){this.scroll(a)},back:function(a){a=a||this.options.scrollSteps;this.scroll(-a)},page:function(a){var b=this.horz?"x":"y";a=new Event(a);b=a.page[b]>this.knob.getPosition()[b];this.scroll((b?1:-1)*this.panel["offset"+
(this.horz?"Width":"Height")]);this.updateThumbFromContentScroll();this.fireEvent("onPage",b);a.stop()},start:function(a){a=new Event(a);this.mouse.start=a.page[this.horz?"x":"y"];this.position.start=this.knob.getStyle(this.horz?"left":"top").toInt();document.addEvent("mousemove",this.bound.drag);document.addEvent("mouseup",this.bound.end);this.knob.addEvent("mouseup",this.bound.end);a.stop()},end:function(a){a=new Event(a);document.removeEvent("mousemove",this.bound.drag);document.removeEvent("mouseup",
this.bound.end);this.knob.removeEvent("mouseup",this.bound.end);a.stop()},drag:function(a){this.rotateActive&&this.stop();a=new Event(a);this.mouse.now=a.page[this.horz?"x":"y"];this.position.now=(this.position.start+(this.mouse.now-this.mouse.start)).limit(0,this.trackSize-this.knobSize);this.updateContentFromThumbPosition();this.updateThumbFromContentScroll();a.stop()},autoplay:function(){this.rotateInt=this.rotate.periodical(this.options.slideInterval,this);this.fireEvent("onAutoPlay")},stop:function(){clearInterval(this.rotateInt);
this.rotateActive=false;this.fireEvent("onStop")},rotate:function(){if(this.panel[this.horz?"scrollLeft":"scrollTop"]<=0)this.rotateForward=true;if(this.contentSize+this.panel[this.horz?"scrollLeft":"scrollTop"]>=this.contentScrollSize)this.rotateForward=false;if(this.currentSlide-1<0)this.rotateForward=true;if(this.currentSlide+1>=this.slides.length)this.rotateForward=false;var a=this.currentSlide+(this.rotateForward?1:-1);(new Fx.Scroll(this.panel,{duration:500})).toElement(this.slides[a]).addEvent("onComplete",
function(){this.updateThumbFromContentScroll()}.bind(this));this.currentSlide=a;this.fireEvent("onRotate")}});YOOscroller.implement(new Events);YOOscroller.implement(new Options);

