Glider=Class.create();
Object.extend(Object.extend(Glider.prototype, Abstract.prototype), {initialize: function(wrapper, options){this.scrolling= false;
this.wrapper=$(wrapper);
this.scroller=this.wrapper.down('div.scroller');
this.sections=this.wrapper.getElementsBySelector('div.section');
this.options= Object.extend({duration: 1.0,frequency:3},options||{});
this.sections.each(function(section, index){section._index=index;});
this.events={click: this.click.bind(this)};
this.addObservers();
if(this.options.initialSection) this.moveTo(this.options.initialSection, this.scroller,{duration:this.options.duration});
if(this.options.autoGlide) this.start();},
addObservers: function(){var controls=this.wrapper.getElementsBySelector('div.controls a');
controls.invoke('observe','click',this.events.click);},
click:function(event){this.stop();
var element=Event.findElement(event,'a');
if(this.scrolling) this.scrolling.cancel();
this.moveTo(element.href.split("#")[1], this.scroller,{duration:this.options.duration }); 
Event.stop(event);},
moveTo: function(element, container, options){this.current=$(element);
Position.prepare();
var containerOffset=Position.cumulativeOffset(container),elementOffset=Position.cumulativeOffset($(element));
this.scrolling=new Effect.SmoothScroll(container,{duration:options.duration, x:(elementOffset[0]-containerOffset[0]), y:(elementOffset[1]-containerOffset[1])});return false;},
next: function(){if(this.current){var currentIndex=this.current._index;
var nextIndex=(this.sections.length-1==currentIndex)?0:currentIndex+1;} else var nextIndex=1;
this.moveTo(this.sections[nextIndex], this.scroller, {duration: this.options.duration});},
previous: function(){if(this.current){var currentIndex=this.current._index;
var prevIndex=(currentIndex==0)?this.sections.length-1:currentIndex-1;} else var prevIndex=this.sections.length-1;
this.moveTo(this.sections[prevIndex], this.scroller, {duration: this.options.duration});},
stop: function(){clearTimeout(this.timer);},
start: function(){this.periodicallyUpdate();},
periodicallyUpdate: function(){if(this.timer!=null){clearTimeout(this.timer);
this.next();}
this.timer=setTimeout(this.periodicallyUpdate.bind(this),this.options.frequency*1000);}});
Effect.SmoothScroll=Class.create();
Object.extend(Object.extend(Effect.SmoothScroll.prototype,Effect.Base.prototype),{initialize:function(element){this.element=$(element);
var options=Object.extend({x:0,y:0,mode:'absolute'},arguments[1]||{});
this.start(options);},setup: function(){if(this.options.continuous && !this.element._ext ){this.element.cleanWhitespace();
this.element._ext=true;
this.element.appendChild(this.element.firstChild);}
this.originalLeft=this.element.scrollLeft;this.originalTop=this.element.scrollTop;
if(this.options.mode=='absolute'){this.options.x -= this.originalLeft;
this.options.y -= this.originalTop;}},
update: function(position){this.element.scrollLeft=this.options.x*position+this.originalLeft;
this.element.scrollTop= this.options.y*position+this.originalTop;}});