gfi.languageSwitcher = new Class({
    initialize: function(elmToSlide, hoverOutInterval, firstVisit, firstVisitInterval) {
        if (elmToSlide && hoverOutInterval) {
            this.slider = elmToSlide;
            this.hoverOutInterval = hoverOutInterval;
            this.firstVisit = firstVisit;
            this.touched = false;
            this.firstVisitInterval = firstVisitInterval;
            this.secondaryLanguages = this.slider.getElementById('secondaryLanguages');
            this.slideFX = new Fx.Slide(this.secondaryLanguages,
            {link: 'chain'});
            this.secondaryLanguages.addClass('active');            
            if (this.firstVisit){
                this.slideFX.hide();                
                this.slideFX.slideIn();
                this.closeSlider(true);
            } else {
                this.slideFX.hide();
            }
            this.addOpenSliderEvent();
            this.addSliderOutEvent();
        }
    },


    addOpenSliderEvent : function() {
        this.slider.addEvent('mouseenter',function(){
            this.stopTimer();
            this.slideFX.slideIn();
        }.bind(this));
        this.slider.addEvent('touchstart',function(){
            this.slideFX.slideIn();
            this.touched = true;
        }.bind(this));
    },

    addSliderOutEvent : function() {
        $(document.body).addEvent('touchstart', function(e) {
            if (e) {
                if (!gfi.ui.isChildOf($(e.target), this.getElementById('secondaryLanguages'))) {
                    this.closeSlider();
                }
            }
        });
        this.slider.addEvent('mouseleave', function(){            
            this.closeSlider();
        }.bind(this));
        this.slider.addEvent('touchend', function(){
            this.closeSlider();
        }.bind(this));
    },

    closeFX : function(){
        this.slideFX.slideOut();
    },

    closeSlider : function(firstVisit) {
        if(firstVisit){
            this.timer = this.closeFX.periodical(this.firstVisitInterval, this);
        } else {
            this.timer = this.closeFX.periodical(this.hoverOutInterval, this);            
        }
    },

    stopTimer : function() {
        this.timerRunning = false;
        window.clearInterval(this.timer);
    }
});
