


//////////////////////////////////////////////////////////////////////
//* TransMenus version 0.9.2 by A. Heinrich http://www.archomai.org  *// 
//////////////////////////////////////////////////////////////////////

//Namespacing//

if (!org) {
  var org = {} ;
  org.archomai = {} ;
  org.archomai.transMenus = {};
} else if (!org.archomai) {
    org.archomai = {};
    org.archomai.transMenus = {};
} else {
   org.archomai.transMenus = {};
}

//////////////////////////////////////////////////////
/////COLLAPSIBLE MENU BULLET IMAGE SOURCES////////////
/////SET TO "NULL" IF NONE ARE SPECIFIED//////////////
//////////////////////////////////////////////////////
org.archomai.transMenus.collapsibleMenuImages = 
{
	openImage : "http://personal.archomai.org/images/minus.gif" ,
	closedImage : "http://personal.archomai.org/images/plus.gif"
}
//////////////////////////////////////////////////////
///POPUP MENU SUBMENU OFFSETS IN PIXELS- PUBLIC///////
///NUMBER OF PIXELS SUBMENUS WILL BE OFFSET FROM////// 
///THEIR DEFAULT POSITION/////////////////////////////
//////////////////////////////////////////////////////
org.archomai.transMenus.relativeOffsetLeft = -4;
org.archomai.transMenus.relativeOffsetTop = 0;

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

org.archomai.transMenus.standards = (document.getElementById && document.getElementsByTagName);
org.archomai.transMenus.MenuRegistry = {} ;
org.archomai.transMenus.Menu = function(id)  
{
	this.id = id;
	this.menuElement = document.getElementById(id);
	this.timerId = null;
	this.isOpen = false;
	this.inLimbo = false;
	this.ancestorMenuIds = new Array();
	this.childrenMenuIds = new Array();
	this.gRef = this.id + "_Menu";
	eval(this.gRef + "=this");
	this.baseUL = null;
	org.archomai.transMenus.MenuRegistry[this.id] = this;
	this.Hide = function() {
		if (this.timerId) this.timerId = window.clearTimeout(this.timerId);
		if (this.isOpen) {
			this.menuElement.style.display = "none";
			this.menuElement.style.visibility = "hidden";
			this.isOpen = false;
		}
	}
	this.ScheduleHide = function() {
		if (this.timerId) this.timerId = window.clearTimeout(this.timerId);
		this.timerId = window.setTimeout(this.gRef + ".Hide()",500);
	}
	this.HandleMouseOver = function() {
		if (this.inLimbo) {
			this.menuElement.onmouseout = new Function("eval('org.archomai.transMenus.MenuRegistry[\"' + this.id + '\"].ScheduleHide()')");
			this.inLimbo = false;
		}		
		if (this.timerId) {
			this.timerId = window.clearTimeout(this.timerId);
		}
		if (!this.isOpen) {
			for (var i in org.archomai.transMenus.MenuRegistry)  {
				var qualified = true;
				if (org.archomai.transMenus.MenuRegistry[i].id == this.id) qualified = false
				else if (this.ancestorMenuIds.length>0) {
					for (var j = 0; j < this.ancestorMenuIds.length; j++) {
						if (org.archomai.transMenus.MenuRegistry[i].id == this.ancestorMenuIds[j]) qualified = false;				
					}
				}
				if (qualified) org.archomai.transMenus.MenuRegistry[i].Hide();
			}
			this.isOpen = true;
			this.inLimbo = true;
			this.setMenuDisplay();
			this.menuElement.onmouseover = new Function("eval('org.archomai.transMenus.MenuRegistry[\"' + this.id + '\"].HandleMouseOver()')");	
		}
  	}
	this.HandleMouseDown = function() {
		if (this.menuElement.style.display == "none") {
			this.menuElement.style.display = "block";
			if (org.archomai.transMenus.collapsibleMenuImages.openImage) {
				this.menuElement.parentNode.style.listStyleImage = 'url(' + org.archomai.transMenus.collapsibleMenuImages.openImage + ')';
			}
		} else {
			this.menuElement.style.display = "none";
			if (org.archomai.transMenus.collapsibleMenuImages.closedImage) {
				this.menuElement.parentNode.style.listStyleImage = 'url(' + org.archomai.transMenus.collapsibleMenuImages.closedImage + ')';
			}
		}
	}
	this.setMenuDisplay = function() {
		var trigger = this.menuElement.parentNode; 
		var x, y;
		if (trigger.parentNode.className == "popUpMenu") {
			x = trigger.offsetLeft + trigger.parentNode.offsetWidth + org.archomai.transMenus.relativeOffsetLeft;
			y = trigger.offsetTop + org.archomai.transMenus.relativeOffsetTop;
		} else {
			var masterOffsetX = 0;
			var masterOffsetY = 0;
			var tempEl = trigger;
			while (tempEl.offsetParent != null) {
				masterOffsetX += tempEl.offsetLeft;
				masterOffsetY += tempEl.offsetTop;
				tempEl = tempEl.offsetParent;
			}
			x = (document.all) ? (document.body.offsetLeft + masterOffsetX) : masterOffsetX;
			y = (document.all) ? (document.body.offsetTop + masterOffsetY) : masterOffsetY; 
			y += trigger.parentNode.offsetHeight;
		}
		this.menuElement.style.left = x + "px";
		this.menuElement.style.top = y + "px";
		this.menuElement.style.display = "block";
		this.menuElement.style.visibility = "visible";
	}
} ;
org.archomai.transMenus.ShowMenu = function(e)
{
	var eventTarget = (document.all) ? event.srcElement : e.target;
	eventTarget = (eventTarget.subMenu) ? eventTarget : eventTarget.parentNode;
	if (eventTarget.subMenu) org.archomai.transMenus.MenuRegistry[eventTarget.subMenu].HandleMouseOver();
} ;
org.archomai.transMenus.HideMenu = function(e) 
{
	var eventTarget = (document.all) ? event.srcElement : e.target;
	eventTarget = (eventTarget.subMenu) ? eventTarget : eventTarget.parentNode;
	if (eventTarget.subMenu) org.archomai.transMenus.MenuRegistry[eventTarget.subMenu].ScheduleHide();
} ;
org.archomai.transMenus.ExpandMenu = function(e) 
{
	var eventTarget = (document.all) ? event.srcElement : e.target;
	if (eventTarget.subMenu) {
		org.archomai.transMenus.MenuRegistry[eventTarget.subMenu].HandleMouseDown();
		if (document.all) event.cancelBubble = true;
		if (e && !document.all) e.stopPropagation();
	}
} ;
org.archomai.transMenus.MenuSetup = function() 
{
	org.archomai.transMenus.SetStylesheet();
	var ListArray = document.getElementsByTagName("UL");
	var j = 0;
	for (var i=0;i<ListArray.length;i++) {
		if (ListArray[i].className == "popUpMenu") {
			if (!ListArray[i].id) {ListArray[i].id = "Menu_" + j; j++ }
			ListArray[i].style.position = "absolute";
			ListArray[i].style.display = "none";
			new org.archomai.transMenus.Menu(ListArray[i].id);
			if (ListArray[i].parentNode.parentNode.className == "popUpMenu") {
				org.archomai.transMenus.MenuRegistry[ListArray[i].id].ancestorMenuIds[0] = ListArray[i].parentNode.parentNode.id;
				org.archomai.transMenus.MenuRegistry[ListArray[i].id].ancestorMenuIds = org.archomai.transMenus.MenuRegistry[ListArray[i].id].ancestorMenuIds.concat(org.archomai.transMenus.MenuRegistry[ListArray[i].parentNode.parentNode.id].ancestorMenuIds)		
			}
			if (ListArray[i].parentNode.parentNode.className != "popUpMenu") org.archomai.transMenus.MenuRegistry[ListArray[i].id].baseUL = ListArray[i].parentNode.parentNode;
			var triggerElement = (ListArray[i].parentNode.firstChild.nodeType == 3) ? ListArray[i].parentNode : ListArray[i].parentNode.firstChild;
			if (triggerElement.style.cursor) triggerElement.style.cursor = "pointer";
			triggerElement.subMenu = ListArray[i].id;
			if (triggerElement.addEventListener) {
				triggerElement.addEventListener("mouseover",org.archomai.transMenus.ShowMenu,false);
				triggerElement.addEventListener("mouseout",org.archomai.transMenus.HideMenu,false);
			} else if (triggerElement.attachEvent) {
				triggerElement.attachEvent("onmouseover",org.archomai.transMenus.ShowMenu);
				triggerElement.attachEvent("onmouseout",org.archomai.transMenus.HideMenu);
			}
		} else if (ListArray[i].className == "collapsibleMenu") {
			if (!ListArray[i].id) {ListArray[i].id = "Menu_" + j; j++ }
			new org.archomai.transMenus.Menu(ListArray[i].id);
			ListArray[i].style.display = "none";
			var triggerElement = ListArray[i].parentNode;
			if (triggerElement.style.cursor) triggerElement.style.cursor = "pointer";
			triggerElement.subMenu = ListArray[i].id;
			triggerElement.style.listStyleImage = 'url(' + org.archomai.transMenus.collapsibleMenuImages.closedImage + ')';
			if (triggerElement.addEventListener) {
				triggerElement.addEventListener("click",org.archomai.transMenus.ExpandMenu,false);
			} else if (triggerElement.attachEvent) {
				triggerElement.attachEvent("onclick",org.archomai.transMenus.ExpandMenu);
			}
		} else continue;
  	}
  	if (org.archomai.transMenus.collapsibleMenuImages.closedImage) {
  		var lImgCl = new Image();
  		lImgCl.src = org.archomai.transMenus.collapsibleMenuImages.closedImage;
  		var lImgOp = new Image();
  		lImgOp.src = org.archomai.transMenus.collapsibleMenuImages.openImage;
  	}
} ;
org.archomai.transMenus.SetStylesheet = function() 
{
	var sheets = document.getElementsByTagName("LINK");
	for (var i=0;i<sheets.length;i++) {
		if (sheets[i].getAttribute("REL").toUpperCase().indexOf("STYLE")>-1 && 
		    sheets[i].getAttribute("TITLE").toUpperCase().indexOf("DEFAULT")>-1) {
			sheets[i].disabled = true;
		} else if (sheets[i].getAttribute("REL").toUpperCase().indexOf("ALT")>-1 && 
		    sheets[i].getAttribute("TITLE").toUpperCase().indexOf("EXTENDED")>-1) {
			if (document.all) {
				var link = document.createElement('link'); 
				link.rel = "stylesheet"; 
				link.type = "text/css"; 
				link.href = sheets[i].getAttribute("HREF"); 
				var head = document.getElementsByTagName('head')[0]; 
				head.appendChild(link);
			} else {
				sheets[i].disabled = false;
			}
		}
	}
};
if (org.archomai.transMenus.standards) 
{
	if (window.addEventListener) {
		window.addEventListener("load",org.archomai.transMenus.MenuSetup,true);
	} else if (window.attachEvent){
		window.attachEvent("onload",org.archomai.transMenus.MenuSetup);
	}
}
