/**
* Mercury.ro
*
*
*
*/

MeniuJs = new Class({

    Implements: [Options],

    options:
    {
        categoriiMeniu: ['rootCategory', 'secondCategory'],
        clasaCategorieSelectata: 'categorie_selectata',
        evenimentAfisare: 'mouseenter',
        evenimentAscundere: 'mouseleave',
        efectAfisare: 'show',
        efectAscundere: 'hide',
        containerMeniuId: 'meniu',
        rightAlignedMenu: true
    },

    initialize: function( options )
    {
        this.setOptions( options );

        var thisMeniu = this;

        this.meniuriSelectate = $$( '.' + this.options.clasaCategorieSelectata );

        this.afiseazaMeniuDefault();

        this.options.categoriiMeniu.each(
            function ( element, index )
            {
                $( document.body ).getElements( '.' + element + ' li' ).each(
                    function ( el )
                    {
                        el.addEvent( thisMeniu.options.evenimentAfisare,
                            function ()
                            {
                                thisMeniu.afiseazaCategorie( el.get( 'id' ) );
                            }
                        );
                        el.addEvent( thisMeniu.options.evenimentAscundere,
                            function ( event )
                            {
                                if ( !thisMeniu.cursorInSubcategorie( event, el.get( 'id' ) ) )
                                {
                                    thisMeniu.ascundeCategorie( el.get( 'id' ) );

                                    if ( !thisMeniu.cursorInCategorie( event, el ) && ( index != 0 ) )
                                    {
                                        thisMeniu.ascundeItem( el );
                                    }
                                }
                                if ( !thisMeniu.cursorInafaraMeniului( event ) )
                                {
                                    thisMeniu.afiseazaMeniuDefault();
                                }
                            }
                        );
                    }
                );
            }
        );
    },

    afiseazaMeniuDefault: function()
    {
        this.options.categoriiMeniu.each(
            function ( el, index )
            {
                if ( index > 0 )
                {
                    $$( '.' + el ).each(
                        function ( el )
                        {
                            $( el ).slide( 'hide' );
                        }
                    );
                }
            }
        );
    },

    ascundeCategorie: function( clasaCategorie )
    {
        $$( '.' + clasaCategorie ).each(
            function ( el )
            {
//                 $( el ).set( 'slide', {duration: 100});
                $( el ).slide( this.options.efectAscundere );
            }, this
        );
    },

    afiseazaCategorie: function( clasaCategorie )
    {
        $$( '.' + clasaCategorie ).each(
            function ( el )
            {
                if ( !this.options.rightAlignedMenu )
                {
                    var leftElement = $( clasaCategorie ).getCoordinates().left - $( this.options.containerMeniuId ).getCoordinates().left;
                }
                else
                {
                    var rightElement = $( clasaCategorie ).getCoordinates().right - $( this.options.containerMeniuId ).getCoordinates().left - $( el ).getParent().getCoordinates().width;//console.log( $( clasaCategorie ).getCoordinates().left);
                    rightElement =  Browser.Engine.trident4 ? (rightElement-759) : rightElement;
                }

                if ( !$( clasaCategorie ).getParent().hasClass( this.options.categoriiMeniu[0] ) )
                {
                    var topElement = $( clasaCategorie ).getCoordinates().top - $( this.options.containerMeniuId ).getCoordinates().top;
                    if ( !this.options.rightAlignedMenu )
                    {
                        leftElement += $( clasaCategorie ).getCoordinates().width;
                    }
                    else
                    {
                        rightElement -= $( el ).getCoordinates().width;//rightElement += 15;
                    }
                }
                else
                {
                    var topElement = $( clasaCategorie ).getParent().getStyle( 'height' ).toInt();
                }
                $( el ).getParent().setStyles(
                                            {
                                                'margin-top': topElement,
                                                'margin-left': this.options.rightAlignedMenu ? rightElement : leftElement
                                            }
                                       );
//                 $( el ).set( 'slide', {duration: 250} );
                $( el ).slide( this.options.efectAfisare );
            }, this
        );
    },

    ascundeItem: function( idCategorie )
    {
        $( idCategorie ).getParent().slide( this.options.efectAscundere );
    },

    cursorInSubcategorie: function( event, itemClass )
    {
        var relatedTarget = new Event( event ).relatedTarget;
        return $( relatedTarget ).getParents( '.' + itemClass ).length;
//         return ( $( relatedTarget ).hasClass( itemClass ) || ( ( relatedTarget.getParent() != null ) && $( relatedTarget ).getParent().hasClass( itemClass ) ) || ( ( relatedTarget.getParent().getParent() != null ) && $( relatedTarget ).getParent().getParent().hasClass( itemClass ) ) ) ? true : false;
    },

    cursorInCategorie: function( event, element )
    {
        var relatedTarget = new Event( event ).relatedTarget;
        return $( relatedTarget ).getParents( element.getParent().id ).length;
//         return ( ( relatedTarget.getParent() == element.getParent() ) || ( relatedTarget.getParent().getParent() == element.getParent() ) ) ? true : false;
    },

    cursorInafaraMeniului: function( event )
    {
        var relatedTarget = new Event( event ).relatedTarget;
        var areClasa = false;
        this.options.categoriiMeniu.each(
            function( itemClass )
            {
                if ( relatedTarget.getParents( '.' + itemClass ).length != 0 )
                {
                    areClasa = true;
                }
            }
        );
        return areClasa;
    }

});
