var Protocycle=Class.create({initialize:function(container,options){if(container instanceof Array)
{container.each(function(el){new Protocycle(el,options);});return true;}
else if(typeof(container)=='string')
{new Protocycle($$(container),options);return true;}
this.options={fx:'fade',timeout:4000,speed:500,sync:true,containerResize:true}
Object.extend(this.options,options||{});$w(container.className).each(function(classname){var result=classname.match(/timeout\[([0-9]+)\]/);if(result!=null)
{this.options.timeout=result[1];}}.bind(this));var slideHeight=0;var slideWidth=0;this.currentSlide=0;if(!container)return false;container.setStyle({position:'relative'});this.slides=container.childElements();this.totalSlides=this.slides.size();var first=true;this.slides.each(function(el){var dimensions=el.getDimensions();if(dimensions.height>slideHeight)slideHeight=dimensions.height;if(dimensions.width>slideWidth)slideWidth=dimensions.width;if(!first)
{el.setStyle({display:'none'});}
first=false;el.setStyle({position:'absolute'});});if(this.options.containerResize)
{container.setStyle({height:slideHeight+'px',width:slideWidth+'px'});}
if(this.totalSlides>1)
{new PeriodicalExecuter(function(){this.nextSlide()}.bind(this),(this.options.timeout/1000));}},nextSlide:function()
{var nextSlide=this.currentSlide+1;if(nextSlide>=this.totalSlides)nextSlide=0;if(this.options.fx=='fade')
{var currentOpts={from:1.0,to:0.0,duration:(this.options.speed/1000),afterFinish:function(effect){effect.element.setStyle({display:'none'});}};var nextOpts={from:0.0,to:1.0,duration:(this.options.speed/1000),afterSetup:function(effect){effect.element.setStyle({display:'block'});}};if(this.options.sync)
{Object.extend(currentOpts,{sync:true});Object.extend(nextOpts,{sync:true});new Effect.Parallel([new Effect.Opacity(this.slides[this.currentSlide],currentOpts),new Effect.Opacity(this.slides[nextSlide],nextOpts)]);}
else
{Object.extend(currentOpts,{queue:'end'});Object.extend(nextOpts,{queue:'end'});new Effect.Opacity(this.slides[this.currentSlide],currentOpts);new Effect.Opacity(this.slides[nextSlide],nextOpts);}}
else
{this.slides[this.currentSlide].setStyle({display:'none'});this.slides[nextSlide].setStyle({display:'block'});}
this.currentSlide++;if(this.currentSlide>=this.totalSlides)
{this.currentSlide=0;}}});
