var HoverGroup=new Class({Implements:[Options,Events],Binds:["enter","leave","remain"],options:{elements:[],delay:300,start:["mouseenter"],remain:[],end:["mouseleave"]},initialize:function(a){this.setOptions(a);this.attachTo(this.options.elements);this.addEvents({leave:function(){this.active=false},enter:function(){this.active=true}})},elements:[],attachTo:function(d,e){var b={},c={},a={};d=$splat(document.id(d)||$$(d));this.options.start.each(function(f){b[f]=this.enter},this);this.options.end.each(function(f){a[f]=this.leave},this);this.options.remain.each(function(f){c[f]=this.remain},this);if(e){d.each(function(f){f.removeEvents(b).removeEvents(a).removeEvents(c);this.elements.erase(f)},this)}else{d.each(function(f){f.addEvents(b).addEvents(a).addEvents(c)});this.elements.combine(d)}return this},detachFrom:function(a){this.attachTo(a,true)},enter:function(a){this.isMoused=true;this.assert(a)},leave:function(a){this.isMoused=false;this.assert(a)},remain:function(a){if(this.active){this.enter(a)}},assert:function(a){$clear(this.assertion);this.assertion=(function(){if(!this.isMoused&&this.active){this.fireEvent("leave",a)}else{if(this.isMoused&&!this.active){this.fireEvent("enter",a)}}}).delay(this.options.delay,this)}});
