$(function() {
    /**
     * NavigationMenu class
     * @constructor
     */
	 
    var NavigationMenu = function()
    {
        this._switchSpeed = 200;
        this._subMenuDelay = 2000;
		this._subsubMenuDelay = 1000;

        this._t = null;
        this._menus = $('.navigation .menu li');
        this._menuLinks = $('.navigation .menu a');
		this._subMenusLinks = $('.navigation .sub-menus a');
		this._subMenusCont = $('.navigation .sub-menus ul');
        this._subMenus = $('.navigation .sub-menus li');
        this._subsubMenus = $('.navigation .subsub-menus ul');
        this._defaultMenuItem = $('.navigation .menu li.selected');
		this._defaultSubMenuItem = $('.navigation .sub-menus li.selected');
        this._defaultSubMenu = $('.navigation .sub-menus ul.active');
        this._defaultSubSubMenu = $('.navigation .subsub-menus ul.subactive');
		this._defaultSubSubMenuItem = $('.navigation .subsub-menus li.selected');
		
        /**
         * initializer
         * @private
         */
		 
        this._init = function()
        {
            var self = this;
            
            this._menus.each(function() {
                var anchor = $(this).find('a');
                
                anchor.bind('mouseover', {
                    self: self,
                    sender: anchor
                }, self._onMenuOver);
                
                anchor.bind('mouseout', {
                    self: self,
                    sender: anchor
                }, self._onMenuOut);
            });
            
            this._subMenus.each( function() {
					var anchor = $(this).find('a');
					anchor.bind('mouseover', {
						self: self,
						sender: anchor
					}, self._onSubMenuOver);
					
					anchor.bind('mouseout', {
						self: self,
						sender: anchor
					}, self._onSubMenuOut);
            });
			
			this._subsubMenus.each( function() {
                $(this).bind('mouseover', function() {
                    window.clearTimeout(self._t);
                });
                
                $(this).bind('mouseout', function() {
                    self._actionSubMenuOut();
                });
            });
        };
        this._init();
    };
	
     NavigationMenu.prototype._actionMenuOver = function(sender)
    {
        window.clearTimeout(this._t);
        
        var self = this,
            subMenuItem = $('.navigation #sub-' + sender.attr('id'));
			
            this._t = window.setTimeout(function () {
            self._menuLinks.removeClass('hover');
            sender.addClass('hover');
          
            if (sender.attr('id') == self._defaultMenuItem.find('a').attr('id')) {
				 	self._resetSubMenu();		   
            } else {
			   self._switchSubSubMenu(subMenuItem);
            }
           
          self._switchSubMenu(subMenuItem);
		   
     }, this._switchSpeed);
    };
	
    NavigationMenu.prototype._actionMenuOut = function(sender)
    {
        window.clearTimeout(this._t);
        var self = this;
        this._t = window.setTimeout(function () {
            self._resetMenu();
        }, this._subMenuDelay);
    };
	
    NavigationMenu.prototype._resetMenu = function()
    {
        this._menuLinks.removeClass('hover');
        this._switchSubMenu(this._defaultSubMenu);
    };
	
    NavigationMenu.prototype._onMenuOver = function(event)
    {
        event.preventDefault();
        var self = event.data.self,
            sender = event.data.sender;
        self._actionMenuOver(sender);
    };
	
    NavigationMenu.prototype._onMenuOut = function(event)
    {
        event.preventDefault();
        var self = event.data.self,
            sender = event.data.sender;
        self._actionSubMenuOut(sender);
    };
	
    NavigationMenu.prototype._switchSubMenu = function(subMenuItem)
    {
        this._subMenusCont.removeClass('active');
        subMenuItem.addClass('active');
    };
   
	
	
	
// subsubmenu //

    NavigationMenu.prototype._actionSubMenuOver = function(sender)
    {
        window.clearTimeout(this._t);
      
		var self = this,
       			subsubMenuItem = $('.navigation #sub-' + sender.attr('id'));
        this._t = window.setTimeout(function () {
            self._subMenusLinks.removeClass('hover');
            sender.addClass('hover');

		   self._switchSubSubMenu(subsubMenuItem);
        }, this._switchSpeed);
    };

	 NavigationMenu.prototype._actionSubMenuOut = function(sender)
    {
        window.clearTimeout(this._t);
        
        var self = this;
        this._t = window.setTimeout(function () {
           self._resetMenu();
		   self._resetSubMenu();
        }, this._subsubMenuDelay);
    };

	NavigationMenu.prototype._resetSubMenu = function()
    {
        this._subMenusLinks.removeClass('hover');
        this._switchSubSubMenu(this._defaultSubSubMenu);
    };

    NavigationMenu.prototype._onSubMenuOver = function(event)
    {
        event.preventDefault();
        
        var self = event.data.self,
            sender = event.data.sender;
        self._actionSubMenuOver(sender);
    };

     NavigationMenu.prototype._onSubMenuOut = function(event)
    {
        event.preventDefault();
        
        var self = event.data.self,
            sender = event.data.sender;
        
        self._actionSubMenuOut(sender);
    };


	NavigationMenu.prototype._switchSubSubMenu = function(subsubMenuItem)
    {
        this._subsubMenus.removeClass('subactive');
	    subsubMenuItem.addClass('subactive');
    };

    var navMenu = new NavigationMenu();
});
