var ElementHighlighter=new Class({Implements:[Options,Events],currentIndex:0,elements:[],styles:{},callbacks:{},enterFunc:null,leaveFunc:null,finished:false,options:{elements:[],timer:null,currentIndex:0,delay:4000,transTime:500,fps:15,loop:false,defaultStyle:{"in":{opacity:1},out:{opacity:0.6}}},initialize:function(a){this.setOptions(a);this.setStyles(this.options.defaultStyle);if(this.options.currentIndex){this.currentIndex=this.options.currentIndex}if(this.options.callbacks){this.callbacks=this.options.callbacks}this.addElements(this.options.elements);this.addElEvents(this.elements)},addElEvents:function(a){if(!this.enterFunc){this.enterFunc=function(b){this.lastIndex=this.currentIndex;this.pause();this.animate(b)}}if(!this.leaveFunc){this.leaveFunc=function(b){if(!this.finished){this.currentIndex=this.lastIndex;this.start()}else{this.animate(-1)}}}$$(a).each(function(c,b){c.addEvent("mouseenter",this.enterFunc.bind(this,b));c.addEvent("mouseleave",this.leaveFunc.bind(this,b))}.bind(this))},delElEvents:function(a){$$(a).each(function(c,b){c.removeEvent("mouseenter",this.enterFunc);c.removeEvent("mouseleave",this.leaveFunc)})},addElements:function(a){$$(a).each(function(b){this.elements.include($(b));$(b).set("morph",{duration:this.options.transTime,fps:this.options.fps})},this);this.animate(-1)},addElement:function(a){this.addElements($splat($(a)))},setStyles:function(a){if(a["in"]){this.styles["in"]=a["in"]}if(a.out){this.styles.out=a.out}},start:function(a){console.log("Element Highlighter Start Called...");if(!this.timer){console.log("Starting Element Highlighter");this.currentIndex=0;this.finished=false;if(!a){this.animate()}this.timer=this.animate.periodical(this.options.delay,this)}},pause:function(){if(this.timer){$clear(this.timer);this.timer=null}},stop:function(){$clear(this.timer);this.timer=null;this.animate(-1);this.finished=true;if(this.callbacks.finish){this.callbacks.finish.run()}},animate:function(a){var c=this.currentIndex;if($type(a)=="number"){c=a}var b;this.elements.each(function(e,d){if(c==d){b="in"}else{b="out"}if(e.cState!=b){this.animateElement(e,b,this.callbacks[b]?this.callbacks[b]:false,[e,d,c==d])}}.bind(this));if($type(a)!="number"){this.currentIndex++;if(this.currentIndex>=this.elements.length){if(this.options.loop){this.currentIndex=0}else{this.stop.delay(this.options.delay,this)}}}},animateElement:function(c,d,f,e){var b=this.styles[d];var a=this.options.transTime;$splat(c).each(function(g){g.cState=d;g.morph(b);if(f){if(f.start){f.start.run(e)}if(f.end){f.end.delay(a,this,e)}}})}});