var activeMenu;
var activeSubMenu;
var activeSubSubMenu;
function createMenu(name){
	var el = Ext.get(name + '-link');
	var el_sub = Ext.get(name + '-sub-link');
	var el_sub_sub = Ext.get(name + '-sub-sub-link');
	var tid = 0, tid_sub = 0, tid_sub_sub = 0, menu, menu_sub, menu_sub_sub, doc = Ext.getDoc();
	var is_hover = false;
	var handleOver = function(e, t){
		if(t != el.dom && t != menu.dom && !e.within(el) && !e.within(menu)){
			hideMenu();
			is_hover = false;
		} else {
			is_hover = true;	
		}
	};
	var handleSubOver = function(e, t){
		if(t != el_sub.dom && t != menu_sub.dom && !e.within(el_sub) && !e.within(menu_sub)){
			hideSubMenu();
		}	
	};
	var handleSubSubOver = function(e, t){
		if(t != el_sub_sub.dom && t != menu_sub_sub.dom && !e.within(el_sub_sub) && !e.within(menu_sub_sub)){
			hideSubSubMenu();
		}	
	};
			
	var hideMenu = function(){
		if (menu && !activeSubMenu && !activeSubSubMenu && !is_hover){
			menu.hide();
			is_hover = false;
			el.setStyle("background-color", "#858585");
			doc.un('mouseover', handleOver);
			doc.un('mousedown', handleDown);
		}
	}
	var hideSubMenu = function(){
		if (menu_sub && !activeSubSubMenu){
			menu_sub.hide();
			doc.un('mouseover', handleSubOver);
			doc.un('mousedown', handleSubDown);
			activeSubMenu = null;
		}
	}
	var hideSubSubMenu = function(){
		if (menu_sub_sub){
			menu_sub_sub.hide();
			doc.un('mouseover', handleSubSubOver);
			doc.un('mousedown', handleSubSubDown);
			activeSubSubMenu = null;
		}
	}
	
	var handleDown = function(e){
		if (!e.within(menu)){
			hideMenu();
		}
	}
	var handleSubDown = function(e){
		if (!e.within(menu_sub)){
			hideSubMenu();
		}
	}
	var handleSubSubDown = function(e){
		if (!e.within(menu_sub_sub)){
			hideSubSubMenu();
		}
	}
	
	var showMenu = function(){
		clearTimeout(tid);
		tid = 0;
		
		if (!menu) {
			menu = new Ext.Layer({shadow:'sides', hideMode: 'display'}, name + '-menu');
		}
		menu.hideMenu = hideMenu;
			
		menu.el = el;
		if (activeMenu && menu != activeMenu){
			activeMenu.hideMenu();
		}
		activeMenu = menu;
		
		if (!menu.isVisible()) {
			menu.show();
			is_hover = true;
			menu.alignTo(el, 'tl-bl?');
			menu.sync();
			doc.on('mouseover', handleOver, null, {buffer:0});
			doc.on('mousedown', handleDown);
		}
		el.setStyle("background-color", "#646464");
	}
	var showSubMenu = function(){
		clearTimeout(tid);
		tid_sub = 0;
		
		if (!menu_sub) {
			menu_sub = new Ext.Layer({shadow:'sides', hideMode: 'display'}, name + '-sub-menu');
		}
		menu_sub.hideSubMenu = hideSubMenu;
		
		menu_sub.el_sub = el_sub;
		if (activeSubMenu && menu_sub != activeSubMenu){
			activeSubMenu.hideSubMenu();
		}
		activeSubMenu = menu_sub;
		if (!menu_sub.isVisible()) {
			menu_sub.show();
			menu_sub.alignTo(el_sub, 'tl-tr?', [0, -5]);
			menu_sub.sync();
			doc.on('mouseover', handleSubOver, null, {buffer:0});
			doc.on('mousedown', handleSubDown);
		}
	}
	var showSubSubMenu = function(){
		clearTimeout(tid);
		tid_sub_sub = 0;
		
		if (!menu_sub_sub) {
			menu_sub_sub = new Ext.Layer({shadow:'sides', hideMode: 'display'}, name + '-sub-sub-menu');
		}
		menu_sub_sub.hideSubSubMenu = hideSubSubMenu;
		
		menu_sub_sub.el_sub_sub = el_sub_sub;
		if (activeSubSubMenu && menu_sub_sub != activeSubSubMenu){
			activeSubSubMenu.hideSubSubMenu();
		}
		activeSubSubMenu = menu_sub_sub;
		if (!menu_sub_sub.isVisible()) {
			menu_sub_sub.show();
			menu_sub_sub.alignTo(el_sub_sub, 'tl-tr?');
			menu_sub_sub.sync();
			doc.on('mouseover', handleSubSubOver, null, {buffer:0});
			doc.on('mousedown', handleSubSubDown);
		}
	}
	
	el.on('mouseover', function(e){
		if(!tid){
			tid = showMenu.defer(0);				
		}
	});
	
	el.on('mouseout', function(e){
		if(tid && !e.within(el, true)){
			clearTimeout(tid);
			tid = 0;				
		}
	});
	if(el_sub != null){
		el_sub.on('mouseover', function(e){
			if(!tid_sub){
				tid_sub = showSubMenu.defer(0);				
			}
		});
		
		el_sub.on('mouseout', function(e){
			if(tid_sub && !e.within(el_sub, true)){
				clearTimeout(tid_sub);
				tid_sub = 0;				
			}
		});
	}
	if(el_sub_sub != null){
		el_sub_sub.on('mouseover', function(e){
			if(!tid_sub_sub){
				tid_sub_sub = showSubSubMenu.defer(0);				
			}
		});
		
		el_sub_sub.on('mouseout', function(e){
			if(tid_sub_sub && !e.within(el_sub_sub, true)){
				clearTimeout(tid_sub_sub);
				tid_sub_sub = 0;				
			}
		});
	}
}
