window.addEvent('domready', function() {

    var MooHover = new Class({
        Implements: [Options],
        options: {
            container: null,
            className: 'MooTrans',
            defaultClass: 'default',
            duration: 400,
            transition: Fx.Transitions.Sine.easeOut
        },

        initialize: function(options) {
            this.setOptions(options);
            this.container = $(this.options.container) || document;
            this.start();
        },

        start: function() {
            var buttons = this.container.
					  getElements('.' + this.options.className).
					  filter(function(elem, i) {
					      if (elem.rel !== 'selected')
					          return elem;
					  } .bind(this));

            buttons.each(function(element, i) {
                element.setStyles({ 'opacity': 0.001, 'position': 'absolute', 'top': 0, 'left': 0 });

                new Element('div', {
                    'class': this.options.defaultClass,
                    'text': element.get('text') || element.get('value')
                }).injectBefore(element).adopt(element);

                var transEffect = new Fx.Morph(element, { duration: this.options.duration, transition: this.options.transition });

                element.addEvents({
                    'mouseover': function() {
                        transEffect.cancel();
                        transEffect.start({ opacity: 1 });
                    },
                    'mouseout': function() {
                        transEffect.cancel();
                        transEffect.start({ opacity: 0.001 });
                    }
                })
            } .bind(this));
        }
    });
});