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').css({display:'none',position:'absolute',width:'3px',height:'24px','background-color':'#ffffff','z-index':101});
			$.store2.setItem(effectSpaceID,$effectSpace);
			$.store2.setItem(showDurationID,option.showDuration);
			$.store2.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.css({padding:'5px',position:'absolute','background-color':'#ffffff','z-index':100, border:'1px solid black',cursor:'default'}).hide();
				$menuItemLinkTarget.appendTo($menuItem);
				var standAloneItem = ($menuItemLink.attr('standalone') != null && $menuItemLink.attr('standalone') == 'true');
				
				if (standAloneItem){
					$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 ($.store2.hasItem(showTimeOutID)){
						abortShowItem();
					}
					if ($.store2.hasItem($menuHideItemName + '-timeOut')){
						abortHideItem($menuHideItemName);
						return;
					}
					
					$.store2.setItem(showMenuItemID,$menuItem);
					$.store2.setItem(showTimeOutID,setTimeout('showItem()',250));
				},
				function(){
					$menuItemLink.removeClass(menuItemLinkHoverClass).addClass(menuItemLinkClass);
					
					if ($.store2.hasItem(showTimeOutID)){
						var item = $.store2.getItem(showMenuItemID);
						if ($menuItemUniqueID == item.attr('uid')){
							abortShowItem();
							return;
						}
					}
					$.store2.setItem($menuHideItemName,$menuItem);			
					$.store2.setItem($menuHideItemName + '-timeOut',setTimeout('hideItem("' + $menuHideItemName + '")',200));
					
				});
			});
			return this;
		}
	})
})(jQuery);

function hideItem(menuItemName){
	var menuItem = $.store2.getItem(menuItemName);
	if (menuItem != null){
		var duration = $.store2.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);
	}
}

function showItem(){
	var menuItem = $.store2.getItem(showMenuItemID);
	if (menuItem != null){
	
		var duration = $.store2.getItem(showDurationID);	
		var effectSpace = $.store2.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 + 10).toString() + 'px') , top:(positionTop + 1).toString() + 'px'});
		effectSpace.show();
		content.after(effectSpace);
		menuItem.data('isActive',true);
		content.css({left:(positionLeft + 10).toString() + 'px',top:positionTop + 'px'});
		content.fadeIn(duration,function(){ if ($.browser.msie) {this.style.removeAttribute('filter');}});
		clearShowMenuVariables();
	}
}

function abortShowItem(){
	var item = $.store2.getItem(showMenuItemID);
	item.removeClass(menuItemHoverClass).removeClass(menuItemActiveClass).addClass(menuItemClass);
	clearTimeout($.store2.getItem(showTimeOutID));
	clearShowMenuVariables();	
}

function abortHideItem(menuItemName){
	clearTimeout($.store2.getItem( menuItemName + '-timeOut'));
	clearHideMenuVariables();	
}

function clearShowMenuVariables()
{
	$.store2.removeItem(showMenuItemID);
	$.store2.removeItem(showTimeOutID);
}

function clearHideMenuVariables(menuItemName)
{
	$.store2.removeItem(menuItemName);
	$.store2.removeItem(menuItemName + '-timeOut');
}