var menuItemClass = 'emenu-item';
var menuItemActiveClass = 'emenu-item-active';
var menuItemHoverClass = 'emenu-item-hover';
var menuItemStandAloneClass = 'emenu-item-sa';
var menuItemLinkClass = 'emenu-item-text';
var menuItemLinkHoverClass = 'emenu-item-text-hover';
var menuItemContentClass = 'emenu-item-container';
var effectSpaceID = 'emenu-menuItem-effectSpace';
var showDurationID = 'emenu-menuItem-showDuration';
var hideDurationID = 'emenu-menuItem-hideDuration';
var showMenuItemID = 'emenu-show-menuItem';
var showTimeOutID = 'emenu-show-timeOut';
var hideMenuItemID = 'emenu-hide-menuItem';

(function($) {
	$.fn.extend({
		emenu:function(arg) {
			var eOptions = {
				showDuration: 250,
				hideDuration: 150
			}
			var option = (typeof(arg)!='string') ? $.extend(eOptions,arg) : $.extend(eOptions,{});
			var $menu = $(this).addClass('emenu-root');
			var $menuItems = $menu.children('li');
			
			$('body').append('<div id="emenu_effectSpace"></div>');
			var $effectSpace = $('#emenu_effectSpace').addClass("effectSpace");
			$.luckyshop.setItem(effectSpaceID,$effectSpace);
			$.luckyshop.setItem(showDurationID,option.showDuration);
			$.luckyshop.setItem(hideDurationID,option.hideDuration);
			var uid_index = 0;
			$menuItems.each(function(){
				
				var $menuItem = $(this).addClass(menuItemClass);
				var $menuItemLink = $menuItem.children('a:first').addClass(menuItemLinkClass);
				var $menuItemLinkTarget = $($menuItemLink.attr('href')).hide().addClass(menuItemContentClass);
				$menuItem.attr('uid','emenu-item-header-' + (++uid_index).toString());
				var $menuItemUniqueID = $menuItem.attr('uid');
				var $menuHideItemName = hideMenuItemID + '-' + $menuItemUniqueID;
				$menuItemLinkTarget.addClass("TooltipBox").hide();				
				$menuItemLinkTarget.appendTo($menuItem);
				var NoSubCategory = ($menuItemLink.attr('NoSubCategory') != null && $menuItemLink.attr('NoSubCategory') == 'true');
				
				if (NoSubCategory){
					$menuItem.removeClass(menuItemClass).addClass(menuItemStandAloneClass);
					return;
				}
					
				$menuItem.hover(function(){
					$menuItemLink.removeClass(menuItemLinkClass).addClass(menuItemLinkHoverClass);
					
					if ($menuItem.data('isActive') == null || $menuItem.data('isActive') == false)
						$menuItem.removeClass(menuItemActiveClass).removeClass(menuItemClass).addClass(menuItemHoverClass);
						
					if ($.luckyshop.hasItem(showTimeOutID)){
						abortShowItem();
					}
					if ($.luckyshop.hasItem($menuHideItemName + '-timeOut')){
						abortHideItem($menuHideItemName);
						return;
					}
					
					$.luckyshop.setItem(showMenuItemID,$menuItem);
					$.luckyshop.setItem(showTimeOutID,setTimeout('showItem()',250));
				},
				function(){
					$menuItemLink.removeClass(menuItemLinkHoverClass).addClass(menuItemLinkClass);
					
					if ($.luckyshop.hasItem(showTimeOutID)){
						var item = $.luckyshop.getItem(showMenuItemID);
						if ($menuItemUniqueID == item.attr('uid')){
							abortShowItem();
							return;
						}
					}
					$.luckyshop.setItem($menuHideItemName,$menuItem);			
					$.luckyshop.setItem($menuHideItemName + '-timeOut',setTimeout('hideItem("' + $menuHideItemName + '")',200));
					
				});
			});
			return this;
		}
	})
})(jQuery);

function hideItem(menuItemName){
	var menuItem = $.luckyshop.getItem(menuItemName);
	if (menuItem != null){
		var duration = $.luckyshop.getItem(hideDurationID);	
		menuItem.data('isActive',false);
		menuItem.children('#emenu_effectSpace').hide();
		menuItem.children('div.' + menuItemContentClass + ':first').fadeOut(duration);
		menuItem.removeClass(menuItemActiveClass).removeClass(menuItemHoverClass).addClass(menuItemClass);
		clearHideMenuVariables(menuItemName);
		Cufon.replace('#divMenu > li > a' , { fontFamily: 'vagran', color: "#5d5d5d" } );
	}
}

function showItem(){
	var menuItem = $.luckyshop.getItem(showMenuItemID);
	if (menuItem != null){
	
		var duration = $.luckyshop.getItem(showDurationID);	
		var effectSpace = $.luckyshop.getItem(effectSpaceID);
		var position = menuItem.position();
		var positionLeft = position.left + menuItem.width();
		var positionTop = position.top;
		var content = menuItem.children('div.' + menuItemContentClass + ':first');
		
		menuItem.removeClass(menuItemClass).removeClass(menuItemHoverClass).addClass(menuItemActiveClass);
		effectSpace.css({left: ((positionLeft).toString() + 'px') , top:(positionTop + 1).toString() + 'px'});
		effectSpace.show();
		content.after(effectSpace);
		menuItem.data('isActive',true);
		content.css({left:(positionLeft).toString() + 'px',top:positionTop + 'px'});
		content.fadeIn(duration,function(){ if ($.browser.msie) {this.style.removeAttribute('filter');}});
		clearShowMenuVariables();
		Cufon.replace(".emenu-item-active > a" , { fontFamily: 'vagran', color: "#9e9e9e" });
	}
}

function abortShowItem(){
	var item = $.luckyshop.getItem(showMenuItemID);
	item.removeClass(menuItemHoverClass).removeClass(menuItemActiveClass).addClass(menuItemClass);
	clearTimeout($.luckyshop.getItem(showTimeOutID));
	clearShowMenuVariables();
}

function abortHideItem(menuItemName){
	clearTimeout($.luckyshop.getItem( menuItemName + '-timeOut'));
	clearHideMenuVariables();	
}

function clearShowMenuVariables()
{
	$.luckyshop.removeItem(showMenuItemID);
	$.luckyshop.removeItem(showTimeOutID);
}

function clearHideMenuVariables(menuItemName)
{
	$.luckyshop.removeItem(menuItemName);
	$.luckyshop.removeItem(menuItemName + '-timeOut');
}
