var persisteduls=new Object()
var ddtreemenu=new Object()

var openSubMenu;

if (typeof bkgopenfolderStr != 'undefined')                //set image path to "open" background image
	ddtreemenu.bkgopenfolder = bkgopenfolderStr;
else
	ddtreemenu.bkgopenfolder = "../../../images/app/stm_dotline.gif";
	
if (typeof bkgclosefolderStr != 'undefined')                //set image path to "open" background image
	ddtreemenu.bkgclosefolder = bkgclosefolderStr;
else
	ddtreemenu.bkgclosefolder = "../../../images/app/stm_dotline.gif";

if (typeof closefolderStr != 'undefined')                //set image path to "closed" folder image
	ddtreemenu.closefolder = closefolderStr;
else
	ddtreemenu.closefolder = "../../../images/app/stm_main_icon_default.gif";

if (typeof openfolderStr != 'undefined')                //set image path to "open" folder image
	ddtreemenu.openfolder = openfolderStr;
else
	ddtreemenu.openfolder = "../../../images/app/stm_main_icon_open.gif";

ddtreemenu.createTreeOpen=function(treeid, enablepersist, openId){

	this.createTree(treeid, enablepersist);

	if (openId != null && openId.length > 0 && document.getElementById(openId) != null)
	{
		var textFolderTag = document.getElementById(openId).getElementsByTagName("div")[0]
		textFolderTag.className="STMenuActive";	
		openSubMenu = document.getElementById(openId);
		//alert(openSubMenus);
		this.flattenUl(treeid,"expand",document.getElementById(openId));
	
	}

}

ddtreemenu.getMenuLevel=function(treeid,parNode){ //expand or contract all UL elements

	var menuLevel = 0;

	while (parNode != null && (parNode.id == null || parNode.id != treeid))
	{
		if (parNode.tagName.toLowerCase() == "li")
			menuLevel = menuLevel+1;
		
		parNode = parNode.parentNode;
	};
	
	return menuLevel;
}

ddtreemenu.flattenUl=function(treeid, action,parNode){ //expand or contract all UL elements

	if (parNode.getElementsByTagName("ul") != null && parNode.getElementsByTagName("ul").length > 0)
	{
		var ultag = parNode.getElementsByTagName("ul")[0]
		
		ultag.style.display=(action=="expand")? "block" : "none"
		var relvalue=(action=="expand")? "open" : "closed"
		ultag.setAttribute("rel", relvalue)
		//ultag.parentNode.style.backgroundImage=(action=="expand")? "url("+ddtreemenu.bkgopenfolder+")" : "url("+ddtreemenu.bkgclosefolder+")"
		if (ultag.parentNode.getElementsByTagName("img") != null)
		{
			var imgFolder = ultag.parentNode.getElementsByTagName("img")[0]
			if (action=="expand")
				imgFolder.src = ddtreemenu.openfolder;
			else
				imgFolder.src = ddtreemenu.closefolder;
		}
	}
	

	while (parNode != null && (parNode.id == null || parNode.id != treeid))
	{
		if (parNode.tagName.toLowerCase() == "ul")
		{
			parNode.style.display=(action=="expand")? "block" : "none"

			var relvalue=(action=="expand")? "open" : "closed"
			parNode.setAttribute("rel", relvalue)
			//parNode.parentNode.style.backgroundImage=(action=="expand")? "url("+ddtreemenu.bkgopenfolder+")" : "url("+ddtreemenu.bkgclosefolder+")"
			if (parNode.parentNode.getElementsByTagName("img") != null)
			{
				var imgFolder = parNode.parentNode.getElementsByTagName("img")[0]
				if (action=="expand")
					imgFolder.src = ddtreemenu.openfolder;
				else
					imgFolder.src = ddtreemenu.closefolder;
			}
		}
		else if (parNode.tagName.toLowerCase() == "li")
		{

			charCode = "";
			if (parNode.id != null && parNode.id.length > 0)
			{
				charCode = parNode.id.charCodeAt(0,1);
				menuLevel = this.getMenuLevel(treeid,parNode);
				if (action=="expand" && (menuLevel == 2 || (charCode > 65 && charCode <= 90))) 
				{
				parNode.className="submenu_open";//"#DF0024 url(images/tm_sub_bg_top.gif) no-repeat left top";
				if (document.getElementById(parNode.id+"L") != null)
					document.getElementById(parNode.id+"L").style.display="block";
				}
				else
				parNode.className="submenu_closed";//backgroundImage="url("+ddtreemenu.bkgclosefolder+")"
			}
			else
				parNode.className="submenu_closed";//backgroundImage="url("+ddtreemenu.bkgclosefolder+")"
		};
		
		parNode=parNode.parentNode;
	}
}
		
//////////No need to edit beyond here///////////////////////////

ddtreemenu.createTree=function(treeid, enablepersist, persistdays){

	var ultags=document.getElementById(treeid).getElementsByTagName("ul")
	if (typeof persisteduls[treeid]=="undefined")
		persisteduls[treeid]=(enablepersist==true && ddtreemenu.getCookie(treeid)!="")? ddtreemenu.getCookie(treeid).split(",") : ""
	for (var i=0; i<ultags.length; i++)
		ddtreemenu.buildSubTree(treeid, ultags[i], i)
	if (enablepersist==true){ //if enable persist feature
		var durationdays=(typeof persistdays=="undefined")? 1 : parseInt(persistdays)
		ddtreemenu.dotask(window, function(){ddtreemenu.rememberstateUl(treeid, durationdays)}, "unload") //save opened UL indexes on body unload
	}

	var litags=document.getElementById(treeid).getElementsByTagName("li")
	for (var j=0; j<litags.length; j++){
		
		if (litags[j].getAttribute("active") != null && litags[j].getAttribute("active") == '1'){
		
			if (litags[j].tagName == "a" || litags[j].tagName == "span" || litags[j].tagName == "div")
			{
				litags[j].className="STMenuActive";
			}		
			else
			{
				var textFolderTag = litags[j].getElementsByTagName("div")[0]
				textFolderTag.className="STMenuActive";				
			};
			openSubMenu = litags[j];
			this.flattenUl(treeid,"expand",litags[j]);
			//alert(openSubMenu);
		}
		
	}
	
	document.getElementById(treeid).style.display = "block";
}

ddtreemenu.buildSubTree=function(treeid, ulelement, index){

ulelement.parentNode.className="submenu_closed";

if (typeof persisteduls[treeid]=="object"){ //if cookie exists (persisteduls[treeid] is an array versus "" string)
	
	if (ddtreemenu.searcharray(persisteduls[treeid], index)){
		openSubMenu = ulelement;
		ulelement.setAttribute("rel", "open")
		ulelement.style.display="block"

		//ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.bkgopenfolder+")"
		
		charCode = "";
		if (ulelement.parentNode.id != null && ulelement.parentNode.id.length > 0)
		{
			charCode = ulelement.parentNode.id.charCodeAt(0,1);
		}
		
		menuLevel = this.getMenuLevel(treeid,ulelement.parentNode);
		if (menuLevel == 2 || (charCode > 65 && charCode <= 90))
		{
			ulelement.parentNode.className="submenu_open";//"#DF0024 url(images/tm_sub_bg_top.gif) no-repeat left top";
			if (document.getElementById(ulelement.parentNode.id+"L") != null)
				document.getElementById(ulelement.parentNode.id+"L").style.display="block";
		}
			else
			ulelement.parentNode.className="submenu_closed";//backgroundImage="url("+ddtreemenu.bkgclosefolder+")"

		
		if (ulelement.parentNode.getElementsByTagName("img") != null)
		{
			var imgFolder = ulelement.parentNode.getElementsByTagName("img")[0]
			imgFolder.src = ddtreemenu.openfolder;
		}
	}
	else
	{
		ulelement.setAttribute("rel", "closed")
		ulelement.style.display="NONE"
	
		ulelement.parentNode.className="submenu_closed";//backgroundImage="url("+ddtreemenu.bkgclosefolder+")"

		if (ulelement.parentNode.id != null && document.getElementById(ulelement.parentNode.id+"L") != null)
			document.getElementById(ulelement.parentNode.id+"L").style.display="none";
	
		if (ulelement.parentNode.getElementsByTagName("img") != null)
		{
			var imgFolder = ulelement.parentNode.getElementsByTagName("img")[0]
			imgFolder.src = ddtreemenu.closefolder;
		}
	}
} //end cookie persist code
else if (ulelement.getAttribute("rel")==null || ulelement.getAttribute("rel")==false) //if no cookie and UL has NO rel attribute explicted added by user
ulelement.setAttribute("rel", "closed")
else if (ulelement.getAttribute("rel")=="open") //else if no cookie and this UL has an explicit rel value of "open"
ddtreemenu.expandSubTree(treeid, ulelement) //expand this UL plus all parent ULs (so the most inner UL is revealed!)


ulelement.parentNode.onclick=function(e){

var submenu=this.getElementsByTagName("ul")[0]
//alert(openSubMenu.tagName);

//closing last menu open
var levelMenuOpen = ddtreemenu.getMenuLevel(treeid, submenu)

if (submenu != openSubMenu)
{
	parNode = openSubMenu;
	levelparNode = ddtreemenu.getMenuLevel(treeid, parNode)
	//if (levelMenuOpen == 1) levelMenuOpen = 0;
	//alert(levelMenuOpen+" : "+levelparNode);
	if (levelMenuOpen <= levelparNode)
	{
		while (parNode != null && (parNode.id == null || parNode.id != treeid) && (levelMenuOpen <= levelparNode))
		{
			//alert(levelMenuOpen+" : "+levelparNode);
			//alert(parNode.tagName);
			//ddtreemenu.flattenUl(treeid, "collapse",parMenu);
	
			/*charCode = "";
			if (ulelement.id != null && ulelement.parentNode.id.length > 0)
			{
				charCode = ulelement.parentNode.id.charCodeAt(0,1);
			}

			menuLevel = ddtreemenu.getMenuLevel(treeid,ulelement.parentNode);

			submenu.style.display="none"
			submenu.setAttribute("rel", "closed")

			ulelement.parentNode.className="submenu_closed";
			
			if (ulelement.parentNode.id != null && document.getElementById(ulelement.parentNode.id+"L") != null)
				document.getElementById(ulelement.parentNode.id+"L").style.display="none";
			
			if (ulelement.parentNode.getElementsByTagName("img") != null)
			{
				var imgFolder = ulelement.parentNode.getElementsByTagName("img")[0]
				imgFolder.src = ddtreemenu.closefolder;
			}*/
	
			charCode = "";
			if (parNode.id != null && parNode.parentNode.id.length > 0)
			{
				charCode = parNode.parentNode.id.charCodeAt(0,1);
			}
	
			if (parNode.getElementsByTagName("ul") != null && parNode.getElementsByTagName("ul").length > 0)
			{
				//	alert("parNode.getElementsByTagName(\"ul\") != null");
				var ultag = parNode.getElementsByTagName("ul")[0]
				
				ultag.style.display="none"
				var relvalue="closed"
				ultag.setAttribute("rel", relvalue)
				//ultag.parentNode.style.backgroundImage="url("+ddtreemenu.bkgclosefolder+")"
				
				if (ultag.parentNode.getElementsByTagName("img") != null)
				{
					var imgFolder = ultag.parentNode.getElementsByTagName("img")[0]
					imgFolder.src = ddtreemenu.closefolder;
				}
			}
			
			if (parNode.tagName.toLowerCase() == "ul")
			{
				parNode.style.display="none"
				var relvalue="closed"
				parNode.setAttribute("rel", relvalue)
				//parNode.parentNode.style.backgroundImage="url("+ddtreemenu.bkgclosefolder+")"
				parNode.parentNode.className="submenu_closed";
				
				if (parNode.parentNode.id != null && document.getElementById(parNode.parentNode.id+"L") != null)
					document.getElementById(parNode.parentNode.id+"L").style.display="none";
				
				if (parNode.parentNode.getElementsByTagName("img") != null)
				{
					var imgFolder = parNode.parentNode.getElementsByTagName("img")[0]
					imgFolder.src = ddtreemenu.closefolder;
				}
				
				levelparNode = levelparNode - 1;
				parNode = parNode.parentNode;
			}
			else if (parNode.tagName.toLowerCase() == "li")
			{
				//alert("li");
				var relvalue="closed"
				parNode.setAttribute("rel", relvalue)
				parNode.className="submenu_closed";
				
				//alert(parNode.getElementsByTagName("ul").length);
				
				if (parNode.getElementsByTagName("ul") == null || parNode.getElementsByTagName("ul").length < 1)
					levelparNode = levelparNode - 1;
				else if (parNode == openSubMenu)
					levelparNode = levelparNode - 1;
					
				parNode = parNode.parentNode;
				if (submenu == parNode)
					break;
			};
	
		}
	}
}

charCode = "";
if (ulelement.id != null && ulelement.parentNode.id.length > 0)
{
	charCode = ulelement.parentNode.id.charCodeAt(0,1);
}

menuLevel = ddtreemenu.getMenuLevel(treeid,ulelement.parentNode);
//alert(menuLevel);
if (submenu.getAttribute("rel")=="closed"){
	submenu.style.display="block"
	submenu.setAttribute("rel", "open")
	//ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.bkgopenfolder+")"
	if (menuLevel == 2 || (charCode > 65 && charCode <= 90)) {
		ulelement.parentNode.className="submenu_open";//"#DF0024 url(images/tm_sub_bg_top.gif) no-repeat left top";
		if (document.getElementById(ulelement.parentNode.id+"L") != null)
			document.getElementById(ulelement.parentNode.id+"L").style.display="block";
	}
	else
		ulelement.parentNode.className="submenu_closed";//backgroundImage="url("+ddtreemenu.bkgclosefolder+")"
	
	if (ulelement.parentNode.getElementsByTagName("img") != null)
	{
		var imgFolder = ulelement.parentNode.getElementsByTagName("img")[0]
		imgFolder.src = ddtreemenu.openfolder;
	}
}
else if (submenu.getAttribute("rel")=="open"){
	submenu.style.display="none"
	submenu.setAttribute("rel", "closed")

	ulelement.parentNode.className="submenu_closed";//backgroundImage="url("+ddtreemenu.bkgclosefolder+")"
	
	if (ulelement.parentNode.id != null && document.getElementById(ulelement.parentNode.id+"L") != null)
		document.getElementById(ulelement.parentNode.id+"L").style.display="none";
	
	if (ulelement.parentNode.getElementsByTagName("img") != null)
	{
		var imgFolder = ulelement.parentNode.getElementsByTagName("img")[0]
		imgFolder.src = ddtreemenu.closefolder;
	}
}

openSubMenu = submenu;

ddtreemenu.preventpropagate(e)

}

ulelement.onclick=function(e){

ddtreemenu.preventpropagate(e)
}

}

ddtreemenu.expandSubTree=function(treeid, ulelement){ //expand a UL element and any of its parent ULs

var rootnode=document.getElementById(treeid)
var currentnode=ulelement
currentnode.style.display="block"
//currentnode.parentNode.style.backgroundImage="url("+ddtreemenu.bkgopenfolder+")"
	if (currentnode.parentNode.getElementsByTagName("img") != null)
	{
		var imgFolder = currentnode.parentNode.getElementsByTagName("img")[0]
		imgFolder.src = ddtreemenu.openfolder;
	}
while (currentnode!=rootnode){
if (currentnode.tagName=="UL"){ //if parent node is a UL, expand it too
currentnode.style.display="block"
currentnode.setAttribute("rel", "open") //indicate it's open
//currentnode.parentNode.style.backgroundImage="url("+ddtreemenu.bkgopenfolder+")"
	if (currentnode.parentNode.getElementsByTagName("img") != null)
	{
		var imgFolder = currentnode.parentNode.getElementsByTagName("img")[0]
		imgFolder.src = ddtreemenu.closefolder;
	}
}
currentnode=currentnode.parentNode
}
}

ddtreemenu.flatten=function(treeid, action){ //expand or contract all UL elements

var ultags=document.getElementById(treeid).getElementsByTagName("ul")
for (var i=0; i<ultags.length; i++){
	ultags[i].style.display=(action=="expand")? "block" : "none"
	var relvalue=(action=="expand")? "open" : "closed"
	ultags[i].setAttribute("rel", relvalue)
	//ultags[i].parentNode.style.backgroundImage=(action=="expand")? "url("+ddtreemenu.bkgopenfolder+")" : "url("+ddtreemenu.bkgclosefolder+")"
	if (ultags[i].parentNode.getElementsByTagName("img") != null && (typeof currentnode != "undefined"))
	{
		var imgFolder = currentnode.parentNode.getElementsByTagName("img")[0]
		if (action=="expand")
			imgFolder.src = ddtreemenu.openfolder;
		else
			imgFolder.src = ddtreemenu.closefolder;
	}
}
}

ddtreemenu.rememberstateUl=function(treeid, durationdays){ //store index of opened ULs relative to other ULs in Tree into cookie

var openuls=new Array()
openuls[openuls.length]=openSubMenu //save the index of the opened UL (relative to the entire list of ULs) as an array element

if (openuls.length==0) //if there are no opened ULs to save/persist
	openuls[0]="none open" //set array value to string to simply indicate all ULs should persist with state being closed

ddtreemenu.setCookie(treeid, openuls.join(","), durationdays) //populate cookie with value treeid=1,2,3 etc (where 1,2... are the indexes of the opened ULs)
}


ddtreemenu.rememberstate=function(treeid, durationdays){ //store index of opened ULs relative to other ULs in Tree into cookie

var ultags=document.getElementById(treeid).getElementsByTagName("ul")
var openuls=new Array()
for (var i=0; i<ultags.length; i++){
if (ultags[i].getAttribute("rel")=="open")
openuls[openuls.length]=i //save the index of the opened UL (relative to the entire list of ULs) as an array element
}
if (openuls.length==0) //if there are no opened ULs to save/persist
openuls[0]="none open" //set array value to string to simply indicate all ULs should persist with state being closed
ddtreemenu.setCookie(treeid, openuls.join(","), durationdays) //populate cookie with value treeid=1,2,3 etc (where 1,2... are the indexes of the opened ULs)
}

////A few utility functions below//////////////////////

ddtreemenu.getCookie=function(Name){ //get cookie value
var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
if (document.cookie.match(re)) //if cookie found
return document.cookie.match(re)[0].split("=")[1] //return its value
return ""
}

ddtreemenu.setCookie=function(name, value, days){ //set cookei value
var expireDate = new Date()
//set "expstring" to either future or past date, to set or delete cookie, respectively
var expstring=expireDate.setDate(expireDate.getDate()+parseInt(days))
document.cookie = name+"="+value+"; expires="+expireDate.toGMTString()+"; path=/";
}

ddtreemenu.searcharray=function(thearray, value){ //searches an array for the entered value. If found, delete value from array
var isfound=false
for (var i=0; i<thearray.length; i++){
if (thearray[i]==value){
isfound=true
thearray.shift() //delete this element from array for efficiency sake
break
}
}
return isfound
}

ddtreemenu.preventpropagate=function(e){ //prevent action from bubbling upwards
if (typeof e!="undefined")
e.stopPropagation()
else
event.cancelBubble=true
}

ddtreemenu.dotask=function(target, functionref, tasktype){ //assign a function to execute to an event handler (ie: onunload)
var tasktype=(window.addEventListener)? tasktype : "on"+tasktype
if (target.addEventListener)
target.addEventListener(tasktype, functionref, false)
else if (target.attachEvent)
target.attachEvent(tasktype, functionref)
}

function refreshSubMenu(subMenuObj, classOpen, classClose)
{
	if (subMenuObj == null)
		return;

	if (subMenuObj.parentNode.className == null || subMenuObj.className != classClose)
		subMenuObj.parentNode.className=classClose;
	else
		subMenuObj.parentNode.className=classOpen;
}
