var menuTop = new Class
({
    options : 
    {
        transition:Fx.Transitions.Pow.easeOut,
        duration : 800
    }
    
    , Implements : [Events, Options]
    
    , current : null
    
    , initialize : function(el, options)
    {
        this.el = $(el);
        this.setOptions(options);
        
        if(this.el != null)
        {
            this.aLi = this.el.getElements('li');
            
            if(this.aLi.length > 0)
            {
                this.getClassNameOverOut();
                this.addEvents();
                this.resetBackground();
            }
        }
    }
    
    , getClassNameOverOut : function()
    {
        this.aLi.each(function(li, i){
            var a = li.getElement('a');
            if(a != null)
            {
                var rel = a.get('rel');
                var className = menuTopBgPosition[rel];
                $(a).store('className', className);
            }
        });
    }
    
    , resetBackground : function()
    {
        this.aLi.each(function(li, i){
            var a = li.getElement('a');
            var className = $(a).retrieve('className');
            
            if(li.hasClass('active'))
            {
                $(a).get('morph').set(className.over);
                $(a).store('isOpen', true);
                this.current = $(a);
            }
            else
            {
                $(a).store('isOpen', false);
                $(a).get('morph').set(className.out);
            }
        }.bind(this));
    }
    
    , addEvents : function()
    {
        this.aLi.each(function(li, i){
            var a = li.getElement('a');
            var className = $(a).retrieve('className');
            
            $(a).set('morph', {
                duration : this.options.duration,
                transition : this.options.transition
            });
            
            a.addEvent('mouseenter', this.mouseEnter.bind(this, [a, className]));
            a.addEvent('mouseleave', this.mouseLeave.bind(this, [a, className]));
            
        }.bind(this));
    }
    
    , mouseEnter : function(data)
    {
        var a = data[0];
        var className = data[1];
        
        if(a != this.current)
        {
            if(this.current != null)
            {
                if(this.current.retrieve('isOpen') == true)
                {
                    this.current.morph(this.current.retrieve('className').out);
                    this.current.store('isOpen', false);
                }
            }
            $(a).morph(className.over);
            $(a).store('isOpen', true);
        }
    }
    
    , mouseLeave : function(data)
    {
        var a = data[0];
        var className = data[1];
        
        if(a != this.current)
        {
            if(this.current != null)
            {
                if(this.current.retrieve('isOpen') == false)
                {
                    this.current.morph(this.current.retrieve('className').over);
                    this.current.store('isOpen', true);
                }
            }
            $(a).morph(className.out);
            $(a).store('isOpen', true);
        }
    }
});
