// JavaScript Document

var xmlPath="/xml/RolloverDefinitions.xml";
var nodesXPath="/RolloverButtons/RolloverButton";
var buttonImageXPath="Image";
var menuXPath="Menu";
var menuLinkXPath="HyperLink";
var menuStyle,menuClass,menuItemStyle,menuItemClass,menuItemHoverStyle,menuItemHoverClass;

menuClass="DynamicMenu";
menuItemClass="DynamicMenuItem";

function RolloverImage(inID,inURL)
{
	var ID=inID;
	var URL=inURL;
	var arrImages=new Array();
	var menu=null;
	
	this.ID=ID;
	this.URL=URL;
	this.Menu=menu;
	
	this.getImages=getImages;
	this.addImage=addImage;
	this.removeImage=removeImage;
	this.getImage=getImage;
	
	function getID()
	{
		return this.ID;
	}
	
	function getURL()
	{
		return this.URL
	}
	
	function addImage(structImage)
	{
		arrImages.push(structImage)
	}
	
	function removeImage(State)
	{
		var foundIdx=-1;
		for(i=0;i<arrImages.length;i++)
		{
			if(arrImages[i].State()==State)
			{
				foundIdx=i;
			}
		}
		
		if(foundIdx!=-1)
		{
			for(i=foundIdx;i<arrImages.length-1;i++)
			{
				arrImages[i]=arrImages[i+1];
			}
			arrImages.pop();
		}
	}
	
	function getImage(State)
	{
		var image=null;
		for(i=0;i<arrImages.length;i++)
		{
			if(arrImages[i].State()==State)
			{
				image=arrImages[i];
				break;
			}
		}
		return image;
	}
	
	function getImages()
	{
		return arrImages;
	}
}

function structImage(inSrcURL,inAlt,inState)
{
	var vSrcURL=inSrcURL;
	var vAlt=inAlt;
	var vState=inState;
	var vImage=new Image();
	
	vImage.src=vSrcURL;
	
	this.SrcURL=getSrcURL;
	this.Alt=getAlt;
	this.State=getState;
	this.Img=getImage;
	
	function getSrcURL()
	{
		return vSrcURL;
	}
	
	function getAlt()
	{
		return vAlt;
	}
	
	function getState() 
	{
		return vState;
	}
	
	function getImage()
	{
		return vImage;
	}
}

function structMenu(menuName,menuLevel)
{
	var name=menuName;
	var level=menuLevel;
	var nodes=new Array();
	
	this.Name=name;
	this.Level=level;
	this.Nodes=nodes;
	this.AddNode=addNode;
	this.RemoveNode=removeNode;
	
	function addNode(linkNode)
	{
		nodes.push(linkNode);
	}
	
	function removeNode(linkNode)
	{
		var idx=indexOfArray(nodes,linkNode);
		for(i=idx;i<nodes.length-1;i++)
		{
			nodes[i]=nodes[i+1];
		}
		nodes.pop();
	}
}

function structMenuNode(linkName,linkURL,linkText)
{
	var name=linkName;
	var url=linkURL;
	var text=linkText;
	var subMenu=null;
	
	this.Name=name;
	this.URL=url;
	this.Text=text;
	this.SubMenu=subMenu;
}

function loadRolloverButtonImages()
{
	var arrBtnImg=new Array();
	var xmlDoc=loadXMLDoc(GetWebSiteRootURL() + xmlPath)
	
	rbns=xmlDoc.selectNodes(nodesXPath)
	for(ib=0;ib<rbns.length;ib++)
	{
		var rbn=rbns[ib];
		var rb=new RolloverImage(rbn.getAttribute("ID"),rbn.getAttribute("URL"));
		
		var imgns=rbn.selectNodes(buttonImageXPath);
		for(img=0;img<imgns.length;img++)
		{			
			var imgn=imgns[img];
			var stImage=new structImage(imgn.getAttribute("SrcURL"),imgn.getAttribute("Alt"),imgn.getAttribute("State"))
			rb.addImage(stImage);
		}
		
		var mnus=rbn.selectNodes(menuXPath);
		if(mnus.length==1)
		{
			rb.Menu=BuildMenu(mnus[0])
		}
		
		arrBtnImg.push(rb);
	}
	
	return arrBtnImg;
}

function BuildMenu(menuNode)
{
	var menu=new structMenu(menuNode.getAttribute("Name"));
	var links=menuNode.selectNodes(menuLinkXPath);
	
	if(links.length>0)
	{
		var mc=-1;
		for(mc=0;mc<links.length;mc++)
		{
			var l=links[mc];
			var mn=new structMenuNode(l.getAttribute("Name"),l.getAttribute("URL"),l.getAttribute("Text"));
			
			var sms=l.selectNodes(menuXPath);
			if(sms.length==1)
			{
				mn.SubMenu=BuildMenu(sms[0]);
			}
			
			menu.AddNode(mn)
		}
	}
	
	return menu;
}

function getBaseMenu(nav,obj)
{
	var baseMenu=null;
	for(i in nav)
	{
		if(nav[i].ID==obj.id)
		{
			baseMenu=nav[i].Menu;
			break;
		}
	}
	return baseMenu;
}

function showMenu()
{
	var caller=(event.srcElement.children.length==1)?event.srcElement.children[0]:event.srcElement;
	var menu=getBaseMenu(imgbtn,caller)
	
	if(caller.subMenu && caller.subMenu!=null && typeof(caller.subMenu)=='object')
		menu=caller.subMenu
		
	if(caller.hasBaseMenu==null && caller.subMenu==null) return;
	
	var top=left=0
	
	top=findPos(caller).top + caller.offsetHeight + 4;
	left=findPos(caller).left;
	
	if(caller.subMenu && caller.subMenu!=null)
	{
		top=findPos(caller).top;
		left=findPos(caller.parentMenu).left+caller.parentMenu.offsetWidth-5;
	}
		
	var menuId=caller.id + "_" + menu.Name;
	
	if(document.getElementById(menuId)!=null) return;
	if(menu.Nodes.length==0) return;
	
	var mnu=document.createElement("div");
	
	mnu.style.position='absolute';
	mnu.style.top=top;
	mnu.style.left=left;
	mnu.style.zIndex=(menu.Level+100);
	mnu.id=menuId;
	mnu.className=menuClass;
	mnu.menuObject=menu;

	if(!caller.hasBaseMenu && caller.parentMenu)
		mnu.parentMenu=caller.parentMenu;
		
	if(caller.subMenu)	
	{
		caller.childMenu=mnu;
		caller.parentMenu.childMenu=mnu;
	}
	
	var tbl=document.createElement("table");
	var tbody=document.createElement("tbody");
	
	tbl.parentMenu=mnu;
	tbody.parentMenu=mnu;
	tbl.style.cellPadding=0;
	tbl.style.cellspacing=0;
		
	for(i=0;i<menu.Nodes.length;i++)
	{
		var hl=menu.Nodes[i];
		var a=document.createElement("a");
		var tr=document.createElement("tr");
		var td=document.createElement("td");
		
		tr.parentMenu=mnu;
		td.parentMenu=mnu;
		td.className=menuItemClass;
		
		a.href=hl.URL;
		a.id=mnu.id + "$" + hl.Name;
		a.innerText=hl.Text;
		a.title=hl.Text;
		a.style.width="100%";
		a.subMenu=hl.SubMenu;
		a.parentMenu=mnu;
		
		td.onmouseover=showMenu;
		td.onmouseout=MenuNodeMouseOut;
		
		td.appendChild(a);
		tr.appendChild(td);
		tbody.appendChild(tr);		
	}	
	tbl.appendChild(tbody)
	mnu.appendChild(tbl);
	
	document.body.appendChild(mnu)
	openMenuIDs.push(mnu.id);
	
	mnu.destroy=DestroyMenu;

	mnu.onmouseover=function(){
		
	}
	mnu.onmouseout=MenuMouseOut;
	return true;
}

function DestroyMenu()
{
	if(this.childMenu && this.childMenu!=null) this.childMenu.destroy();
	if(this.parentElement) this.parentElement.removeChild(this);
}

function MenuMouseOut()
{
	var x=event.clientX;
	var y=event.clientY;
	var me=event.srcElement;
	
	if(me==null || me=='undefined') return;
	
	if(me.parentMenu!=null && document.getElementById(me.parentMenu.id)!=null)
	{
		me=me.parentMenu;
	}		
	
	if((x>(findPos(me).left-1) && x<(findPos(me).left+me.offsetWidth+1)) && (y>(findPos(me).top-1) && y<(findPos(me).top+me.offsetHeight+1)))
	{
		return;
	}
	
	var menuId=me.id;
	var parent=me.parentElement;	
		
	if(parent==null || parent=='undefined') return;
			
	parent.removeChild(me);
	var idx=indexOfArray(openMenuIDs,menuId);
	
	for(i=idx;i<openMenuIDs.length-1;i++)
	{
		openMenuIDs[i]=openMenuIDs[i+1];
	}
	openMenuIDs.pop();
}

function MenuNodeMouseOut()
{
	if(this!=event.srcElement) return;
	if(this.children[0].childMenu && this.children[0].childMenu!=null)
	{
		var childMenu=this.children[0].childMenu;
		var myPos=findPos(this);
		var childPos=findPos(childMenu)
		var x=event.clientX;
		var y=event.clientY;
		
		if(((x>(myPos.left-1) && x<(myPos.left+this.offsetWidth+1)) && (y>(myPos.top-1) && y<(myPos.top+this.offsetHeight+1))) || ((x>(childPos.left-1) && x<(childPos.left+childMenu.offsetWidth+1)) && (y>(childPos.top-1) && y<(childPos.top+childMenu.offsetHeight+1))))
		{
			return;
		}		
		
		this.children[0].childMenu.destroy();
	}
}