	var activeMenu;
	
	function createMenu(name, constraintHeight, flyout){		
		var el = Ext.get(name+'-link');		
		var tid = 0, menu, menuArrow, doc = Ext.getDoc();
		
		var handleOver = function(e, t){
			if(t != el.dom && t != menu.dom && !e.within(el) && !e.within(menu)){
				hideMenu();				
			}	
		};
				
		var hideMenu = function(){
			
			if(menu){
				menu.hide();
			    menuArrow.hide();
			  
				el.removeClass('hover');
				el.parent().parent().removeClass('preactivehover');
				 
				try{
					var sibl = el.parent().parent().prev();
					if(sibl) sibl.removeClass('preactiveDyn');
					
				}catch(e){
					
				}
				doc.un('mouseover', handleOver);
				doc.un('mousedown', handleDown);
			}
			
		}
		
		var handleDown = function(e){			
			if(!e.within(menu.parent())){
				hideMenu();
			}
		}
		
		var showMenu = function(){
			
			clearTimeout(tid);
			tid = 0;
			var maxheight = 465;
			if (!menu ) {
				menu = new Ext.Layer({shadow:'drop',hideMode: 'display','constrain': false}, name+'-menu');
				if(constraintHeight && (menu.getHeight()>maxheight)){
					menu.setHeight(maxheight);
					menu.child('div').setHeight(maxheight-12);	
				}
				
				menuArrow = new Ext.Layer({shadow:'',hideMode: 'display','constrain': false},name+ '-menu-arrow');				
			}
			
			
			menu.hideMenu = hideMenu;		
			menu.el = el;			
			
			el.addClass('hover');
		
			if(el.parent().parent().is('.preactive')){  
				el.parent().parent().addClass('preactivehover');
			}
			if(activeMenu && menu != activeMenu){
				activeMenu.hideMenu();
			}
			activeMenu = menu;
						
			if (!menu.isVisible()) {
				var topBar = Ext.get('topbar');
				var alignTo = menu.getHeight()/2;
				
				var max = el.getTop() - topBar.getBottom() + (el.getHeight()/2) - 9;
				 try{
					var sibl = el.parent().parent().prev();
					if(sibl){
						var siblA = sibl.child('a');
						if(!siblA.is('.active')){							
							sibl.addClass('preactiveDyn');
						}
					}										
				}catch(e){				
					// nevermind
				}
				if(alignTo > max) alignTo = max;
								
				if(flyout){
					var tolerate = 5;
					menu.show();
					menu.alignTo(el, 'tl-r?', [4, -alignTo]);
					menuArrow.show();
					menuArrow.alignTo(el, 'tl-tr', [0,-1]);
					menu.sync();
					
					if((Math.abs(menuArrow.getLeft() - menu.getLeft())) > tolerate) menuArrow.hide(); // flyout is clipped, hide arrow					
				}
				doc.on('mouseover', handleOver, null, {buffer:300});
				doc.on('mousedown', handleDown);
			} 
			
			
		}
		
		el.on('mouseover', function(e){
			if(!tid){
				tid = showMenu.defer(150);				
			}
		});
		
		el.on('mouseout', function(e){
			if(tid && !e.within(el, true)){
				clearTimeout(tid);
				tid = 0;				
			}
		});
	}
	

	

	
	

