(function ($) {
	
	timeout = 100,

	init = function(parent, level) {
		$(parent).children().each(function () {
			var sub_menu = $(this).children('ul');
			if (sub_menu.hasClass('scc_submenu'))
			{
				// Add an arrow
				$(this).addClass('scc_menu_arrow');
				sub_menu.addClass('scc_submenu_'+level);
				
				$(this).hover(function() {
					show_menu(this, sub_menu, level);
				}, function () {
					hide_menu(sub_menu, level);
				});
				
				init(sub_menu, level+1);
			}
		});

	},
	
	show_menu = function(parent, menu, level) {
		for (i = 0; i <= level; i++)
		{
			cancel_hide(menu);
		}
		
		menu.css('display', 'block');
	},
	
	hide_menu = function(menu, level) {
		menu.data('timeout',
			window.setTimeout(function(){
				menu.css('display', 'none');
			}, timeout)
		);
	},
	
	cancel_hide = function(child) {
		var parent = null;
		// Do not hide all parent elements
		do
		{
			parent = $(child).parent('.scc_submenu');
			clearTimeout($(child).data('timeout'));
		}
		while (parent.size() > 0);
	},
	
	$.fn.scc_menu = function () {
		init(this, 0);
	}
})(jQuery);
