"use strict";

(function($) {
	function showHoverStyle(links, edge, index, opts) {
		if (index === 0)
			$(edge).addClass(opts.activeNeighborClass);
		else
			$(links.get(index-1)).addClass(opts.activeNeighborClass);
			
		$(links.get(index)).addClass(opts.activeClass);
	}

	function hideHoverStyle(links, edge, index, opts) {
		if (index === 0)
			$(edge).removeClass(opts.activeNeighborClass);
		else
			$(links.get(index-1)).removeClass(opts.activeNeighborClass);
			
		$(links.get(index)).removeClass(opts.activeClass);
	}
	
	function displayDropdown(obj, show, opts) {
		if (show)
			obj.find("." + opts.dropdownClass).show();
		else
			obj.find("." + opts.dropdownClass).hide();		
	}
	
	function changeState(links, edge, index, pane, opts, show) {
		if (show)
			showHoverStyle(links, edge, index, opts);
		else
			hideHoverStyle(links, edge, index, opts);
		
		//if (pane.attr('id') != 'shop')
			displayDropdown(pane, show, opts);	
	}
	
    function initializeMainMenu(domObj, opts) {
        var links = domObj.find("." + opts.menuItemClass),
			edge = domObj.find("." + opts.menuEdgeClass);
        
        var timer = [];
        var selected = -1;
        links.each(function(index) {
            $(this).mouseenter(function() {
            	if (selected != -1) {
	            	changeState(links, edge, selected, $(links[selected]), opts, false);
	            	clearTimeout(timer[selected]);
            	}
            	
            	changeState(links, edge, index, $(this), opts, true);
            	selected = index;
			});
			$(this).mouseleave(function() {
				var func = function() { changeState(links, edge, index, $(links[index]), opts, false); };
				timer[index]= setTimeout(func, 100);
			});
        });
    }

    $.fn.mainMenu = function(options) {
        var opts = $.extend({}, $.fn.mainMenu.defaults, options);
        return this.each(function() {
            initializeMainMenu($(this), opts);
        });
    };

    $.fn.mainMenu.defaults = {
        activeClass: "active",
		activeNeighborClass: "active-neighbor",
        menuItemClass: "menu-item",
        menuEdgeClass: "menu-edge",
		dropdownClass: "dropdown"
    };
})(jQuery);
