
var RotatorStatus=Class.create({config:{historySize:null,noOfSlides:null,order:null},history:[],currentItem:-1,nextItem:-1,thumbInterrupt:{set:false,index:null},controlInterrupt:{set:false,control:null},initialize:function(historySize,noOfSlides,order){this.config.historySize=historySize;this.config.noOfSlides=noOfSlides;this.config.order=order;},setThumbnail:function(index){this.thumbInterrupt.set=true;this.thumbInterrupt.index=index;},setInterrupt:function(action){this.controlInterrupt.set=true;this.controlInterrupt.control=action.toUpperCase();},recalc:function(){this.addToHistory(this.currentItem);if(this.controlInterrupt.set){this.controlInterrupt.set=false;if(this.controlInterrupt.control=="NEXT"){}else if(this.controlInterrupt.control=="PREV"){this.currentItem=this.nextItem;this.nextItem=this.getFromHistory();return;}}
this.currentItem=this.nextItem;if(this.thumbInterrupt.set){this.thumbInterrupt.set=false;this.nextItem=this.thumbInterrupt.index;return;}
switch(this.config.order){case"rand":while(this.status.currentItem==this.status.nextItem){this.status.nextItem=Math.round(Math.random()*(this.config.noOfSlides-1));}
break;case"asc":if(this.currentItem==(this.config.noOfSlides-1)){this.nextItem=0;}else{this.nextItem=this.currentItem+1;}
break;case"desc":if(this.currentItem<=0){this.nextItem=this.config.noOfSlides-1;}else{this.nextItem=this.currentItem+1;}
break;}},getCurrentItem:function(){if(this.currentItem>=0){return this.currentItem;}else{return null;}},getNextItem:function(){if(this.nextItem>=0){return this.nextItem;}else{return null;}},addToHistory:function(element){if(this.history.length>this.config.historySize){this.history.shift();}
this.history.push(element);},getFromHistory:function(){var element=this.history.pop();return element;}});var RotatorExecuter=Class.create(PeriodicalExecuter,{counter:0,interrupt:{action:null,index:null},status:null,duration:2,slides:{},initialize:function($super,config){this.status=new RotatorStatus(config.historySize,config.noOfSlides,config.order);this.duration=config.duration;$super(null,config.interval);this.slides=$$("#"+config.domid+" div.rotator div.items div.item");;this.execute();},interrupt:function(action,index){switch(action.toUpperCase()){case"THUMB":this.status.setThumbnail(index);this.pause();this.start();break;case"PLAY":this.start();break;case"PAUSE":this.pause();break;case"PREV":case"NEXT":this.status.setInterrupt(action);this.pause();this.start();break;default:break;}},resetInterrupt:function(){this.interrupt.action=null;this.interrupt.index=null;},start:function(){if(!this.timer){this.execute();this.registerCallback();}},pause:function(){if(this.timer){clearInterval(this.timer);this.timer=null;}},execute:function(){this.status.recalc();var fadeOut=this.status.getCurrentItem();var fadeIn=this.status.getNextItem();if(fadeOut||fadeOut==0){this.slides[fadeOut].fade({duration:this.duration});}
if(fadeIn||fadeIn==0){this.slides[fadeIn].appear({duration:this.duration});}
this.counter++;}});var CMS_Rotator=Class.create({config:{domid:null,interval:5,duration:2,order:"asc",thumbs:true,controls:true,historySize:100,noOfSlides:-1},el:null,executer:null,items:{slides:{},thumbs:{}},initialize:function(config)
{Object.extend(this.config,config);this.el=$(this.config.domid);if(!this.el)
{return;}
if(!(this.config.order=="asc"||this.config.order=="desc"||this.config.order=="rand"))
{this.config.order="asc";}
this.items.slides=this.el.select(' .item');this.config.noOfSlides=this.items.slides.length;if(!this.config.noOfSlides)
{return;}
if(this.config.thumbs)
{this.items.thumbs=this.el.select(' .thumb');if(this.items.thumbs.length==this.config.noOfSlides)
{var thumbnails=this.el.select(' .thumb img');thumbnails.each(function(el,idx){el.setAttribute('_thumbid',idx);});thumbnails.invoke("observe","mouseover",this.mouseOver.bind(this));thumbnails.invoke("observe","mouseout",this.mouseOut.bind(this));thumbnails.invoke("observe","click",this.thumbClick.bind(this));}
else
{;}}
if(this.config.controls)
{var controlset=this.el.select(' .controls');if(controlset&&controlset[0]!=undefined)
{var controls=controlset[0].select('.control');controls.invoke("observe","mouseover",this.mouseOver.bind(this));controls.invoke("observe","mouseout",this.mouseOut.bind(this));controls.invoke("observe","click",this.controlClick.bind(this));}}
this.executer=new RotatorExecuter(this.config);this.executer.start();},mouseOver:function(event)
{document.body.style.cursor="pointer";},mouseOut:function(event)
{document.body.style.cursor="auto";},thumbClick:function(event)
{var index=parseInt(event.element().getAttribute('_thumbid'));this.executer.interrupt("thumb",index);},controlClick:function(event)
{var control=/play|pause|prev|next/.exec(event.element().id)[0];this.executer.interrupt(control);}});
