function FlyoutMenu()
{
	this.m_Index = FlyoutMenu.Instances.length;
	FlyoutMenu.Instances.push(this);
	this.m_HideObjects = new Array();
	if(navigator.userAgent.toLowerCase().indexOf("msie")>=0) this.m_isIE = true;
}

var ef = false; // event flag -- simple event bubble cancel

FlyoutMenu.prototype.m_SRNavRequest		= null;
FlyoutMenu.prototype.m_SRItemRequest	= null;
FlyoutMenu.prototype.m_PreviewDIV		= null;
FlyoutMenu.prototype.ItemDataURL		= "GetItemPreview.aspx";
FlyoutMenu.prototype.CoverFrame			= null;
FlyoutMenu.prototype.m_RootPanel;
FlyoutMenu.prototype.m_HideInterval		= null;
FlyoutMenu.prototype.m_HidePrevInterval = null;
FlyoutMenu.prototype.m_Index			= null;
FlyoutMenu.prototype.m_HideDelayMS		= 350;
FlyoutMenu.prototype.m_HideObjects		= null;
FlyoutMenu.prototype.m_ROEventCnt		= 0;
FlyoutMenu.prototype.m_isIE				= false;

FlyoutMenu.ResizeCount	= 0;
FlyoutMenu.Instances	= new Array();

FlyoutMenu.CallInstance = function (method,instanceIndex)
{
	FlyoutMenu.Instances[instanceIndex][method]();
}

FlyoutMenu.prototype.SetRootPanel = function(panelID)
{
	this.m_RootPanel = document.getElementById(panelID);
}

FlyoutMenu.prototype.Load = function(panelID,navURL)
{
	this.m_RootPanel = document.getElementById(panelID);
	
	if(this.m_SRNavRequest!=null)		this.m_SRNavRequest.Dispose();
	this.m_SRNavRequest					= new HTTPRequest();
	this.m_SRNavRequest.m_Method		= "GET";
	this.m_SRNavRequest.m_UseXML		= false;
	this.m_SRNavRequest.Send(navURL,null,this,"Render");
	
}

FlyoutMenu.prototype.Render = function (data)
{
	this.m_RootPanel.innerHTML = data;
}


FlyoutMenu.prototype.Show = function (o,doHref)
{
	if(!o.onclick && doHref)
	{
		var a = GetFirstChildElement (o,"a");
		o.shref = a.href;
		if(a.target.toLowerCase()=="_self")
		{	
			o.onclick=function(){if(!ef)document.location = this.shref;return !(ef=true);};
		} else {
			o.onclick=function(){if(!ef)window.open(this.shref);};
		}
		o.onkeypress=function(){return this.onclick();};
	}
	
	if(this.m_HideInterval!=null)
	{
		clearTimeout(this.m_HideInterval);
		this.m_HideInterval = null;
		this.CompleteHide();
	}
	o.className = "Show";
	if(o.childNodes.length>=3)
	{
		var ul;
		if(o.childNodes[2].nodeName.toLowerCase()=="ul") ul = o.childNodes[2];
		if(ul)
		{
			if(!ul.positioned||ul.resizeCount!=FlyoutMenu.ResizeCount)
			{
				var iStartIndex = 1; //navigator.userAgent.toLowerCase().indexOf("opera")==-1 ? 1 : 0;
				
				var count = iStartIndex;
				for(var i=iStartIndex;i<ul.childNodes.length;i++)
				{
					if(ul.childNodes[i].nodeName.toUpperCase()=="LI")
					{
						ul.childNodes[i].style.top = 24*(count-iStartIndex);
						if(count==iStartIndex)
						{
							ul.childNodes[count].style.borderTop = "none";
						}
						count++;
					}
				}
				
				var iframe = ul.childNodes[0];
				var h = ((ul.childNodes.length-1)*24);
				iframe.style.height = (h)+"px";
				ul.style.height		= h+"px";
				if(ul.origTop)
				{
					ul.style.top = "";
				} else {
					ul.origTop = ul.offsetTop;
				}
				ul.positioned = true;
				ul.resizeCount = FlyoutMenu.ResizeCount;
			}

			if(0==this.m_ROEventCnt++)
			{
				if(this.m_isIE&&document.body.clientHeight<601)
				{
					var ulTop = this.GetObjectY(ul);
					var over = (ulTop+parseInt(ul.style.height))-document.body.clientHeight;
					if(over>0)
					{
						ul.style.top = ul.origTop;
						var shift = Math.ceil(over/24)*24;
						ul.style.top = ((parseInt(ul.style.top)-shift)-1)+"px";
					}
				} 
			}
		}
	}
}

FlyoutMenu.prototype.GetObjectY = function (o)
{
	var pos = 0;
	if (o.y)
	{
		return o.y;
	} else if (o.offsetParent)
	{
		while (o.offsetParent)
		{
			pos += o.offsetTop
			o = o.offsetParent;
		}
		o.y = pos;
		return pos;
	}
}

FlyoutMenu.prototype.Hide = function (o)
{
	this.m_ROEventCnt = 0;
	if(this.m_PreviewDIV!=null) this.m_PreviewDIV.style.display	= "none";
	if(this.m_HideInterval==null)
	{
		this.m_HideObjects = [];
		this.m_HideInterval = setTimeout("FlyoutMenu.CallInstance('CompleteHide',"+this.m_Index+")",this.m_HideDelayMS);
	}
	this.m_HideObjects.push({element:o});
}



FlyoutMenu.prototype.CompleteHide = function ()
{
	var o;
	for(var i=0;i<this.m_HideObjects.length;i++)
	{
		o = this.m_HideObjects[i];
		o.element.className = "Hide";
	}
	if(this.m_PreviewDIV!=null) this.HidePreview();
	this.m_HideInterval=null;
}



FlyoutMenu.prototype.RequestItemPreview = function (pageID,div)
{
	this.m_PreviewDIV = div;
	this.m_PreviewDIV.style.display	= "block";
	var frm = GetFirstChildElement (this.m_PreviewDIV,"iframe");
	if(frm.src=="about:blank")
	{
		frm.src = this.ItemDataURL+pageID;
	}
}


FlyoutMenu.prototype.HidePreview = function ()
{
	this.m_PreviewDIV.style.display	= "none";
	this.m_PreviewDIV = null;
}


FlyoutMenu.prototype.PreviewLoaded = function ()
{
	if(this.m_PreviewDIV==null) return;
	var f = GetFirstChildElement (this.m_PreviewDIV,"iframe");
	if(f.src=="about:blank") return;
	var frm = window.frames[f.name];
	if(frm!=null)
	{
		f.style.height = frm.document.body.scrollHeight+"px";
	}
}

FlyoutMenu.OnResize = function ()
{
	FlyoutMenu.ResizeCount++;
}
window.onresize = FlyoutMenu.OnResize;