project.Navigation = new Class({

    dom_element: null,
    li_dom_elements: null,

    flyouts: {
        home: {
            dom_element: null
        },
        sendungen: {
            dom_element: null
        },
        filme: {
            dom_element: null
        },
        serien: {
            dom_element: null
        },
        programm: {
            dom_element: null
        },
        community: {
            dom_element: null
        },
        community_profile: {
            dom_element: null
        },
        atv: {
            dom_element: null
        }
    },

    close_event: null,
    current: false,
    active: null,

    initialize: function()
    {
        var that = this;
        that.dom_element = $('navigation');

        if(that.dom_element)
        {
            that.li_dom_elements = $$('#navigation > li');

            that.close_event = $(document.body).addEvent('click',function(e) {
              if(that.dom_element && !e.target || !$(e.target).getParents().contains(that.dom_element)) {
                that.close();
              }
            });


            var close_btn = new Element('div', {
                'id': 'flyout_close'
            }).addEvent('click', function() {
                that.close();
            });
            that.dom_element.grab(close_btn, 'top');

            //console.log( 'dom elements', that.li_dom_elements );

            that.li_dom_elements.each(function(li) {
                var link_element = li.getFirst();
                var css_class = li.get('class').replace('nav_', '');

                //console.log( li.get('rel') );

                if(li.get('rel') !== null)
                {
                    //console.log( css_class );

                    link_element.addEvent('click', function(event){
                        event.stop();

                        if(css_class == that.current)
                        {
                            that.close();
                        }
                        else
                        {
                            that.hideAll();

                            var load_url = li.get('rel');

                            if( (li.hasClass('nav_community') || li.hasClass('community_profile')) && ATV.isAuthenticated() )
                            {
                                css_class = 'community_profile';
                                load_url = 'navigation/profile';
                            }

                            that.current = css_class;

                            li.addClass('active');
                            $('flyout_close').show();

                            var flyout = that.flyouts[css_class]['dom_element']

                            if(null === flyout)
                            {
                                that.flyouts[css_class]['dom_element'] = new Element('div', {
                                    'class': 'flyout loading',
                                    'text': ''// css_class
                                }).adopt(
                                    new Element('div', {
                                        'class': 'loading'
                                    }),
                                    new Element('div', {
                                        'class': 'flyout_footer'
                                    })
                                );

                                li.grab(that.flyouts[css_class]['dom_element']);
                            }
                            else
                            {
                                that.flyouts[css_class]['dom_element'].show();
                            }

                            that.trackAll('open');
                            that.adReload();

                            if(that.flyouts[css_class]['dom_element'].hasClass('loading'))
                            {
                                that.flyouts[css_class]['dom_element'].set('load', {evalScripts: true});
                                that.flyouts[css_class]['dom_element'].set('load', {
                                    onSuccess: function(){
                                        that.flyouts[css_class]['dom_element'].removeClass('loading')
                                        that.flyouts[css_class]['dom_element'].grab(
                                            new Element('div', {
                                            'class': 'flyout_footer'
                                            })
                                        );
                                    }
                                });
                                that.flyouts[css_class]['dom_element'].load( project.getBaseUrl() + load_url);
                            }
                        }
                    })
                }
            })
        }
    },

    close: function()
    {
        this.trackAll('close');
        this.adReload();
        this.hideAll();
        if(null != this.active)
        {
            this.setActive(this.active);
        }
    },

    adReload: function()
    {
        var zoneMapping = {
            'atv': 'UNTERNEHMEN',
            'community': 'COMMINITY'
        }
        var zone = zoneMapping[this.current];
        // hotfix for homepage
        if(typeof adreload == 'function')
        {
            adreload(zone);
        }
    },

    hideAll: function()
    {
        this.li_dom_elements.removeClass('active');
        $$('.flyout').hide();
        $('flyout_close').hide();
        this.current = false;
    },

    setActive: function(css_class)
    {
        var that = this;
        that.li_dom_elements.each(function(element){
            if(element.hasClass(css_class))
            {
                that.active = css_class;
                //console.log( that.active );
                element.addClass('active');
            }
        });
    },

    trackAll: function(action)
    {
        var category = 'Community/ForenUndChats/Sonstiges';
        if('atv' == this.current)
        {
            category = 'Service/Unternehmenskommunikation/Unternehmenskommunikation';
        }

        setTimeout((function() {
            oewaAnalyticsPageTrack('flyout', action, category);
            googleAnalyticsPageTrackStatic();
        }), 0);
    }

});

window.addEvent('domready', function() {
    var navi = new project.Navigation();
    project.addSiteElement('navigation', navi);
});

