






//addEvent(window, "load", menus_init);

var imgLocation = "menu_arrow.gif";
var _scrollTimeout = 500; 
var _isScrolling = false;

function InitScroller(obj)
{
	HideScroller();

	var scrollUp = document.getElementById("scrollUp");
	var scrollDown = document.getElementById("scrollDown");
	var scrollContent = document.getElementById(obj.id + "_Scroll");
	
	scrollUp.setAttribute("target", scrollContent.id);
	scrollUp.style.top  = FindTopOffset(obj) - scrollUp.offsetHeight + 1;
	scrollUp.style.width = obj.offsetWidth - (window.event ? 0 : 2);
	scrollUp.style.left = FindLeftOffset(obj);
	scrollUp.style.display = "";
	
	scrollDown.setAttribute("target", scrollContent.id);
	scrollDown.style.top = FindTopOffset(obj) + obj.offsetHeight;
	scrollDown.style.width = obj.offsetWidth - (window.event ? 0 : 2);
	scrollDown.style.left = FindLeftOffset(obj);
	scrollDown.style.display = "";

	scrollContent.style.top = scrollUp.offsetHeight;
}

function HideScroller()
{
	var scrollUp = document.getElementById("scrollUp");
	var scrollDown = document.getElementById("scrollDown");

	scrollUp.setAttribute("target", "");
	scrollUp.style.display = "none";
	
	scrollDown.setAttribute("target", "");
	scrollDown.style.display = "none";
	
	_scrolling = false;
}

function ScrollUp(multiplier)
{
	var scrollObj = document.getElementById("scrollUp");
	var scrollDiv = document.getElementById(scrollObj.getAttribute("target"));

	scrollDiv.style.top = Math.min(scrollDiv.offsetTop + 20 * multiplier, scrollObj.offsetHeight);

	if (_isScrolling)
		setTimeout("ScrollUp(" + multiplier + ")", _scrollTimeout);
}

function ScrollDown(multiplier)
{
	var scrollObj = document.getElementById("scrollDown");
	var scrollDiv = document.getElementById(scrollObj.getAttribute("target"));

	scrollDiv.style.top = Math.max(scrollDiv.offsetTop - 20 * multiplier, -(scrollDiv.offsetHeight - scrollDiv.offsetParent.offsetHeight));

	if (_isScrolling)
		setTimeout("ScrollDown(" + multiplier + ")", _scrollTimeout);
}

function makeArrow()
{
	var arrow;
	if (document.createElement && document.documentElement)
	{
		arrow = document.createElement('span');
		var img = document.createElement('img');
		img.src = imgLocation;
		img.style.border = "0px";
		img.style.padding = "0 0 0 0";
		img.style.margin = "0 0 0 0";
		img.style.vAlign = "center";
		arrow.appendChild(img);
		arrow.className = 'subind';
	}

	return arrow;
}

function menus_init()
{
	var menus = document.getElementsByName("listMenuRoot");
	// Loop the menus to find sub structures.

	for (var i=0;i<menus.length;i++)
	{
		initSubMenus(menus[i].getElementsByTagName("ul"), i);
		initMenuItems(menus[i].getElementsByTagName("li"));
	}
}

function initSubMenus(subMenus, menuNo)
{
	for (var j=0;j<subMenus.length;j++)
	{
		var div = document.createElement("div");
		subMenus[j].parentNode.appendChild(div);

		div.appendChild(subMenus[j]);
		div.className = 'subDiv';
		div.setAttribute("subMenu", true);
		div.id = ("Menu-"+ menuNo + "-Sub-" + j);
		subMenus[j].id = div.id + "_Scroll";
	}
}

function initMenuItems(menuItems)
{
	for (var j=0;j<menuItems.length;j++)
	{
		var a = menuItems[j].firstChild;
		if (menuItems[j].getElementsByTagName('ul').length > 0)
		{
			an =  (a.childNodes.length == 0) ? a = a.nextSibling : a;

			an.insertBefore(makeArrow(), an.firstChild);
		}

		// If this is a submenu Item we want to make sure we denote it as such.
		a.setAttribute("subMenuId", (menuItems[j].parentNode.id != "listMenuRoot"));

		addEvent(a, "mouseover", expand);
		addEvent(a, "mouseout", collapse);
	}
}

function keep(time){clearTimeout(time);}


function expand(event)
{
	// Determine if we want to cancel.
	if (cancelMaybe(event))return;

	var a = (event.target) ? event.target : event.srcElement;

	if (a.nodeName.toLowerCase() != "a")
		a = a.parentNode;

	if ((window.event && a.getAttribute("subMenuId")) || a.getAttribute("subMenuId") == 'true')
	{
		var d = findParentDiv(a);

		keep(d.getAttribute("time"));

		while (d != null)
		{
			d = findParentDiv(d);
			if (d != null) 	keep(d.getAttribute("time"));
		}

		// manage memory!
		 d=null;
	}

	var elems = a.parentNode.childNodes;

	for (var i=0;i<elems.length;i++)
	{
		if (elems[i].nodeName.toLowerCase() == "div" && elems[i].getAttribute("subMenu"))
		{
			div = elems[i];

			// Already visible don't want to do anything to it.
			if (div.style.visibility != 'visible')
			{
				var windowHeight = 0;
				
				// if not IE then don't do
				if (window.event)
				{
					div.style.height = div.childNodes[0].offsetHeight;
					div.style.width = div.childNodes[0].offsetWidth;
					f = createIFrame(div);
					div.parentNode.insertBefore(f, div);
					f.style.display = "block";
					windowHeight = document.body.offsetHeight;
				}
				else
					windowHeight = window.innerHeight;

				div.childNodes[0].style.visibility = 'visible';
				div.style.visibility = 'visible';
				
				if (FindTopOffset(div) + div.childNodes[0].offsetHeight > windowHeight - 25)
				{
					div.style.height = windowHeight - FindTopOffset(div) - 25;
					div.style.width = div.childNodes[0].offsetWidth;
					div.style.overflow = "hidden";
					InitScroller(div);
				}
			}
			
			break;
		}
	}
}

function collapse(event)
{
	// Determine if we want to cancel.
	if (_isScrolling || cancelMaybe(event)) return;

	var a = (event.target) ? event.target : event.fromElement;

	if ((window.event && a.getAttribute("subMenuId")) || a.getAttribute("subMenuId") == 'true') {

		var d = findParentDiv(a);
		while (true)
		{
			if (d != null){a = d;}
			else break;

			d = findParentDiv(d);
		}

		a = a.parentNode;
	}

	if (a.nodeName.toLowerCase() == "a")
		a = a.parentNode;

	var divs = a.getElementsByTagName("div");

	for (var i=0;i<divs.length;i++)
	{
		if (divs[i].nodeName.toLowerCase() == "div" && divs[i].getAttribute("subMenu") && divs[i].style.visibility == "visible")
		{
			var t = setTimeout("hide('"+ divs[i].id +"')", 300);
			divs[i].setAttribute("time", t);
		}
	}

	a = null;
}

function FindLeftOffset(obj)
{
	var offset = obj.offsetLeft;

	while ((obj = obj.offsetParent) != null)
		offset += obj.offsetLeft;

	return offset;
}

function FindTopOffset(obj)
{
	var offset = obj.offsetTop;

	while ((obj = obj.offsetParent) != null)
		offset += obj.offsetTop;

	return offset;
}

function findParentDiv(b)
{
	//loops up the tree unitl it finds the parent object.
	while (b.parentNode){

	    if ((b = b.parentNode).nodeName.toLowerCase() == 'div')
	    {
			return b;
		}
  	}

  	return null;
}

function hide(id)
{
	if (_isScrolling) return;
	
	var elem = document.getElementById(id);

	var frames = elem.parentNode.getElementsByTagName("iframe");
	for (var i=0;i<frames.length;i++)
	{
		frames[i].parentNode.removeChild(frames[i]);
	}

	elem.childNodes[0].style.visibility = 'hidden';
	elem.style.visibility = 'hidden';
	
	if (document.getElementById("scrollUp").getAttribute("target") == id + "_Scroll")
		HideScroller();
}

function cancelEvent(event)
{
	if (window.event) { event.returnValue = false;}
	else { event.preventDefault();}

	return true;
}

function cancelMaybe(event)
{
	var current, related;
	event.cancelBubble = true;

	if (window.event) {
		current = event.fromElement;
		related = event.toElement;
	}
	else {
		current = event.currentTarget;
		related = event.relatedTarget;
	}

	if (!(event.type == "mouseover" || event.type == "mouseout") || current == null || related == null ||
		current.nodeName.toLowerCase() == 'span' || related.nodeName.toLowerCase() == 'span' ||
		current.nodeName.toLowerCase() == 'img' || related.nodeName.toLowerCase() == 'img' ||
		current.nodeName.toLowerCase() == 'b' || related.nodeName.toLowerCase() == 'b')
		return cancelEvent(event);

	return false;
}

function createIFrame(div)
{
	var f = document.createElement("iframe");
	f.className = "menuframe";
	f.frameBorder = 0;
	f.src = "javascript:false";
	f.style.top = div.offsetTop;
	f.style.left = div.offsetLeft;
	f.style.width = div.offsetWidth;
	f.style.height = div.offsetHeight;

	return f;
}

//
// addEvent and removeEvent
// cross-browser event handling for IE5+,  NS6 and Mozilla
//
function addEvent(elm, evType, fn, useCapture)
{
  if (elm.addEventListener)
  {
    elm.addEventListener(evType, fn, useCapture);
    return true;
  }
  else if (elm.attachEvent)
  {
    var r = elm.attachEvent("on"+evType, fn);
    return r;
  }
  else
  {
    alert("Handler could not be removed");
  }
}

function contains(a, b) {

  // Return true if node a contains node b.

  while (b.parentNode){
    if ((b = b.parentNode) == a){return true;}
  }

  return false;
}

function out(txt) {
	//document.getElementById("output").innerHTML += txt + "<br>" ;
}


///////////////////////////////////////////////////////////////////
//
//
///////////////////////////////////////////////////////////////////

function Menu(name)
{
	this.menu = document.createElement("ul");
	this.menu.style.visibility = "hidden";
	this.MenuName = name.replace(" ", "-");

	if (name && name != "")
	{
		var title = document.createElement("div");
		title.className = "seperator";
		title.innerHTML = name;
		document.getElementById("menu").appendChild(title);
	}

	document.getElementById("menu").appendChild(this.menu);

	this.addMenuItem = Menu_addMenuItem;
	this.show = Menu_show;
}

function Menu_addMenuItem(name, link, id, parentid)
{
	var menu;

	if (parentid == "-1")
	{
		menu = this.menu;
	}
	else
	{
		menu = document.getElementById(parentid);
		var subMenus = menu.getElementsByTagName("ul");

		if (subMenus.length == 0)
		{
			subMenu = document.createElement("ul");
			menu.appendChild(subMenu);
			menu = subMenu;
		}
		else
		{
			menu = subMenus[0];
		}
	}

	var a = document.createElement("a");
	a.href = link;
	a.innerHTML = name;

	var li = document.createElement("li");
	li.id = id;

	li.appendChild(a);

	menu.appendChild(li);
}

function Menu_show()
{
	this.menu.id = "listMenuRoot";
	this.menu.name = "listMenuRoot";
	this.menu.className = "menulist";
	this.menu.style.visibility = "visible";

	initSubMenus(this.menu.getElementsByTagName("ul"), this.MenuName);
	initMenuItems(this.menu.getElementsByTagName("li"));
}
