if(!Array.indexOf)
{
	Array.prototype.indexOf = function(el)
	{
	    for(var i = 0; i < this.length; i++) if(el === this[i]) return i;
		return -1;
	}
}

var dom = YAHOO.util.Dom;

var overlays = new Array();
var overlaysHash = new Array();
var cancelFade = false;
var clickedMenu = false;

var FLYOUT_MENU_FULL = "full";
var FLYOUT_MENU_FLOATING = "floating";
var FLYOUT_MENU_EMPTY = "empty";

function setFlyoutMenu(referenceNav,orientationTo,format){
	var f = FLYOUT_MENU_FULL;
	if(format){
		f = format;
	}
	var navId = referenceNav;
	var overlay;
	overlay = new YAHOO.widget.Overlay(navId+"menu");
	YAHOO.util.Event.on(navId, "mouseenter", function(e){
		cancelFade = true;
		hideMenus(false);
		var o = overlays[overlaysHash.indexOf(this.id)];
		if(o!=null){
			var offset = [];
			var w = 0;
			var arrowX = 0;
			var padding = 0;

			switch(f){
				case FLYOUT_MENU_FULL:
					offset = [-10,0];
					padding = 1;
					if (YAHOO.env.ua.ie > 0) {
						padding = 0;
					}
					w = dom.getRegion(dom.get("topArea")).width - (dom.getX(orientationTo) - dom.getX("topArea")) + Math.abs(offset[0]) + padding;
					o.cfg.setProperty("context",[orientationTo, "tl", "bl",null,offset]);
					o.cfg.setProperty("menu",navId+"menu");
					o.cfg.setProperty("effect",null);
					o.cfg.setProperty("zIndex","100");
					o.cfg.setProperty("width",w+"px");
					break;
				case FLYOUT_MENU_FLOATING:
					padding = 1;
					if (YAHOO.env.ua.ie > 0) {
						padding = 0;
					}

					var xOffset = '';
					
					var menuWidth = dom.getRegion(dom.get(navId+"menu")).width;
					
					if ((dom.getX(orientationTo) + dom.getRegion(dom.get(navId+"menu")).width) > (dom.getX("topArea") + dom.getRegion(dom.get("topArea")).width) - padding){
						xOffset = -5 + (dom.getX(orientationTo) + dom.getRegion(dom.get(navId+"menu")).width) - (dom.getX("topArea") + dom.getRegion(dom.get("topArea")).width) - padding;
					}else{
						xOffset = 0;
					}
					
					offset = [-(xOffset),-14];
					o.cfg.setProperty("context",[orientationTo, "tl", "bl",null,offset]);
					o.cfg.setProperty("zIndex","100");
					o.cfg.setProperty("width",menuWidth+"px");
					break;
			}
			o.cfg.setProperty("menu",navId+"menu");
			o.cfg.setProperty("effect",null);
			
			arrowX = dom.getX(orientationTo) + (dom.getX(navId) - dom.getX(orientationTo)) + (Math.round(dom.getRegion(dom.get(navId)).width / 2) - Math.round(dom.getRegion(dom.get(navId+"menuArrow")).width / 2));
			dom.setX(navId+"menuArrow",arrowX);
			o.show();
		}
	});
	overlay.render();
	overlays.push(overlay);
	overlaysHash.push(navId);
	YAHOO.util.Event.on(navId+"menu", "mouseenter", function(e){
		cancelFade = true;
		var i = this.id.split("menu");
		var o = overlays[overlaysHash.indexOf(i[0])];
		if(o!=null){
			o.cfg.setProperty("effect",null);
			o.show();
		}
	});
	YAHOO.util.Event.on(navId+"menu", "click", function(e){
		clickedMenu = true;
	});	
}

function hideMenusTimeout(){
	if(cancelFade) return;
	clickedMenu = false;
	hideMenus(true);
}

function hideMenus(withFade){
	for(var i=0;i<overlaysHash.length;i++){
		var o = overlays[i];
		if(o!=null && o.cfg.getProperty("visible")){
			if(withFade){
				o.cfg.setProperty("effect",null);
//				o.cfg.setProperty("effect",{effect:YAHOO.widget.ContainerEffect.FADE,duration:.75});
			}else{
				o.cfg.setProperty("effect",null);
			}
			o.hide();
		}
	}
}

function initializeFlyoutMenus(ids){
	for(var i=0;i<ids.length;i++){
		setFlyoutMenu(ids[i].referenceNav,ids[i].orientationTo,ids[i].format);
	}

	YAHOO.util.Event.on("containerContent", "mouseenter", function(e){
		cancelFade = false;
		setTimeout("hideMenusTimeout()",500);
	});
	
	YAHOO.util.Event.on(YAHOO.util.Selector.query("body"), "click", function(e){
		if(clickedMenu){
			cancelFade = true;
		}else{
			cancelFade = false;
		}
		clickedMenu = false;
		hideMenusTimeout();
	});	
}
