////////////////////////////////////////////////////
//* TransMenus version 0.9.6 by A. Heinrich      *//
//* http://personal.archomai.org/transMenus.html *//
//* State persistence by J Cameron Cooper        *//
//* http://jcameroncooper.com                    *//
////////////////////////////////////////////////////
if (!org) {
  var org = {} ;
  org.archomai = {} ;
  org.archomai.transMenus = {};
} else if (!org.archomai) {
    org.archomai = {};
    org.archomai.transMenus = {};
} else {
   org.archomai.transMenus = {};
} ;
org.archomai.transMenus.collapsibleMenuImages = 
{
	openImage : ((CMOpenImage) ? CMOpenImage : "none"),
	closedImage : ((CMClosedImage) ? CMClosedImage : "none"),
	emptyImage : ((CMEmptyImage) ? CMEmptyImage : "none"),
	rightMargin : ((CMImgRightMargin) ? CMImgRightMargin : "0px")
} ;
org.archomai.transMenus.relativeOffsets =
{
	left : ((PMLeftOffset) ? PMLeftOffset : 0),
	top : ((PMTopOffset) ? PMTopOffset : 0)
} ;
org.archomai.transMenus.Persist =
{
	cookiename : ((CMCookieName) ? CMCookieName : null)
} ;
org.archomai.transMenus.clickableText = (clickableText) ? clickableText : false;
org.archomai.transMenus.standards = (document.getElementById && document.getElementsByTagName && document.createElement);
org.archomai.transMenus.MenuRegistry = {} ;
org.archomai.transMenus.CMBaseULs = {} ;
org.archomai.transMenus.addEvent = function(obj,ev,funk,cap) 
{
	if (obj.addEventListener) {
		obj.addEventListener(ev,funk,cap);
	} else if (obj.attachEvent) {
		obj.attachEvent(("on"+ev),funk);
	} else {
		eval(obj + ".on" + ev + "=" + funk);
	}
} ;
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";
			this.menuElement.parentNode.firstChild.setAttribute("src",org.archomai.transMenus.collapsibleMenuImages.openImage);
		} else {
			this.menuElement.style.display = "none";
			this.menuElement.parentNode.firstChild.setAttribute("src",org.archomai.transMenus.collapsibleMenuImages.closedImage);
		}
		org.archomai.transMenus.Persist.setState();
	}
	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.relativeOffsets.left;
			y = trigger.offsetTop + org.archomai.transMenus.relativeOffsets.top;
		} 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.Persist.state = [];
org.archomai.transMenus.Persist.isset = false;
org.archomai.transMenus.Persist.defaultExpanded = true;
org.archomai.transMenus.Persist.setState = function()
{
	if (org.archomai.transMenus.Persist.cookiename != null) {
		var ListArray = document.getElementsByTagName("UL");
		var expanded = [];
		var x = 0;
		for (var i=0;i<ListArray.length;i++) {
			if ((org.archomai.transMenus.Persist.defaultExpanded && ListArray[i].style.display=="none") ||
			   (!org.archomai.transMenus.Persist.defaultExpanded && ListArray[i].style.display=="block")) {
			    expanded[x] = ListArray[i].id;
			    x++;
			}
		}
		expanded = escape(expanded.join());
		var expires = new Date();
		expires.setFullYear(expires.getFullYear() + 1);  // one year from now
		document.cookie = org.archomai.transMenus.Persist.cookiename + "=" + expanded
						+ "; expires=" + expires.toGMTString();
	}
};
org.archomai.transMenus.Persist.getState = function()
{
	if (org.archomai.transMenus.Persist.cookiename != null) {
		var allcookies = document.cookie;
		var pos = allcookies.indexOf(org.archomai.transMenus.Persist.cookiename + "=");
		if (pos != -1) {
			org.archomai.transMenus.Persist.isset = true;
			var start = pos + org.archomai.transMenus.Persist.cookiename.length + 1;
			var end = allcookies.indexOf(";", start);
			if (end == -1) end = allcookies.length;
			var value = allcookies.substring(start, end);
			value = unescape(value);
			value = value.split(",");
			org.archomai.transMenus.Persist.state = [];
			for (var x=0; x < value.length; x++) {
				org.archomai.transMenus.Persist.state[value[x]] = true;
			}
		} else {
			org.archomai.transMenus.Persist.state = [];
		}
	}

} ;
org.archomai.transMenus.Persist.isExpanded = function(id)
{
	var expanded = org.archomai.transMenus.Persist.defaultExpanded;
	if (org.archomai.transMenus.Persist.state[id] == true) {
		expanded = !expanded;
	}
	return expanded;
};
org.archomai.transMenus.MenuSetup = function() 
{
	org.archomai.transMenus.SetStylesheet();
	org.archomai.transMenus.Persist.getState();
	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 = "PMenu_" + j; j++ }
			ListArray[i].style.position = "absolute";
			ListArray[i].style.display = "none";
			new org.archomai.transMenus.Menu(ListArray[i].id);
			var registeredMenu = org.archomai.transMenus.MenuRegistry[ListArray[i].id];
			var parentUL = ListArray[i].parentNode.parentNode;
			if (parentUL.className == "popUpMenu") {
				registeredMenu.ancestorMenuIds[0] = parentUL.id;
				registeredMenu.ancestorMenuIds = registeredMenu.ancestorMenuIds.concat(parentUL.ancestorMenuIds)		
			} else {
				registeredMenu.baseUL = parentUL;
			}
			var triggerElement = (ListArray[i].parentNode.firstChild.nodeType == 3) ? ListArray[i].parentNode : ListArray[i].parentNode.firstChild;
			if (triggerElement.style.cursor != null) triggerElement.style.cursor = "pointer";
			triggerElement.subMenu = ListArray[i].id;
			org.archomai.transMenus.addEvent(triggerElement,"mouseover",org.archomai.transMenus.ShowMenu,false);
			org.archomai.transMenus.addEvent(triggerElement,"mouseout",org.archomai.transMenus.HideMenu,false);
		} else if (ListArray[i].className == "collapsibleMenu") {
			org.archomai.transMenus.InsertImages(ListArray[i]);
			if (!ListArray[i].id) {ListArray[i].id = "CMenu_" + j; j++ }
			new org.archomai.transMenus.Menu(ListArray[i].id);
			var triggerElement = ListArray[i].parentNode.firstChild;
			triggerElement.subMenu = ListArray[i].id;
			if (!org.archomai.transMenus.Persist.isset ||  
				(org.archomai.transMenus.Persist.isset &&
				!org.archomai.transMenus.Persist.isExpanded(ListArray[i].id))) {
				ListArray[i].style.display = "none";
				triggerElement.setAttribute("src",org.archomai.transMenus.collapsibleMenuImages.closedImage);
			} else {
				triggerElement.setAttribute("src",org.archomai.transMenus.collapsibleMenuImages.openImage);
			}
			org.archomai.transMenus.addEvent(triggerElement,"click",org.archomai.transMenus.ExpandMenu,false);
			var potTrigTwo = ListArray[i].parentNode;
			if (org.archomai.transMenus.clickableText && potTrigTwo.childNodes[1].nodeType == 3) {
				potTrigTwo.subMenu = ListArray[i].id;
				if (potTrigTwo.style.cursor != null) potTrigTwo.style.cursor = "pointer";
				org.archomai.transMenus.addEvent(potTrigTwo,"click",org.archomai.transMenus.ExpandMenu,false);
			}
		} else continue;
  	}
} ;
org.archomai.transMenus.InsertImages = function(list) {
	var baseUL = list;
	while (baseUL.parentNode != null && baseUL.parentNode.tagName == "LI") {
		baseUL = baseUL.parentNode.parentNode;
	}
	if (!baseUL.id) baseUL.id = "baseUL_" + org.archomai.transMenus.CMBaseULs.length;
	if (!org.archomai.transMenus.CMBaseULs[baseUL.id]) {
		org.archomai.transMenus.CMBaseULs[baseUL.id] = baseUL;
		allLIs = baseUL.getElementsByTagName("LI");
		var imgEl = null;
		for (var i=0;i<allLIs.length;i++) {
			imgEl = document.createElement("IMG");
			imgEl.setAttribute("src",org.archomai.transMenus.collapsibleMenuImages.emptyImage); 
			allLIs[i].insertBefore(imgEl,allLIs[i].firstChild);
			imgEl.setAttribute("class","collapsibleMenuBullet");
			imgEl.style.marginRight = org.archomai.transMenus.collapsibleMenuImages.rightMargin + "px";
			if (imgEl.style.cursor != null) imgEl.style.cursor = "pointer";
		}
	}
} ;
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) {
org.archomai.transMenus.addEvent(window,"load",org.archomai.transMenus.MenuSetup,false) ;
}