//////////////////////////////////////////////
//  Tree MEnu with Collapse Expand Script   //
//////////////////////////////////////////////

if(typeof HTMLElement!="undefined" && !HTMLElement.prototype.insertAdjacentElement){
	HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode)
	{
		switch (where){
		case 'beforeBegin':
			this.parentNode.insertBefore(parsedNode,this)
			break;
		case 'afterBegin':
			this.insertBefore(parsedNode,this.firstChild);
			break;
		case 'beforeEnd':
			this.appendChild(parsedNode);
			break;
		case 'afterEnd':
			if (this.nextSibling) this.parentNode.insertBefore(parsedNode,this.nextSibling);
			else this.parentNode.appendChild(parsedNode);
			break;
		}
	}

	HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr)
	{
		var r = this.ownerDocument.createRange();
		r.setStartBefore(this);
		var parsedHTML = r.createContextualFragment(htmlStr);
		this.insertAdjacentElement(where,parsedHTML)
	}


	HTMLElement.prototype.insertAdjacentText = function(where,txtStr)
	{
		var parsedText = document.createTextNode(txtStr)
		this.insertAdjacentElement(where,parsedText)
	}
}
//----------------------end insertAdjacent code-------------------------------------------------------

// ::::::::::::::::
// :::: Styles :::
// ::::::::::::::::"mainTable"
function setSTYLES(tablex)
{
mainTABLEElement=document.getElementById(tablex);
TDCol=mainTABLEElement.getElementsByTagName("TD");
for (s=0; s<TDCol.length; s++)
	{TDCol.item(s).style.verticalAlign='top';}
	
// Set Transparency level
if(navigator.appName == 'Microsoft Internet Explorer')
	{document.getElementById('menuSystem').style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+TValue+")";
	document.getElementById('menuSystem2').style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+TValue+")";
	}
else
	{document.getElementById('menuSystem').style.MozOpacity=1;
	document.getElementById('menuSystem2').style.MozOpacity=1;
	 TValue=parseFloat(TValue/100-.001); // .001 is fix for moz opacity/image bug
	 document.getElementById('menuSystem').style.MozOpacity=TValue;
	  document.getElementById('menuSystem2').style.MozOpacity=TValue;
	 }
	
// Collection used to determine if section has children
SUBTABLECol=mainTABLEElement.getElementsByTagName("TABLE");
for (s=0; s<SUBTABLECol.length; s++)
	{
	TDChildrenCol=SUBTABLECol.item(s).getElementsByTagName("TD");
	// If children then insert image depending on ECState
	if(TDChildrenCol.length>0)
		{
		THCol=SUBTABLECol.item(s).getElementsByTagName("TH");
		if(ImagePlacement=='before')
			{
			var str='<IMG style="margin-left:10; margin-top:2 " border="0" align="left" src="menu_script\/'+imagePLUS+'" alt="Expand ALL">&nbsp;';
			THCol.item(0).insertAdjacentHTML("afterBegin", str);
			}
		else if(ImagePlacement=='after')
			{
			var str='&nbsp;<IMG style="margin-left:10; margin-top:2 " border="0" src="menu_script\/'+imagePLUS+'" alt="Expand ALL">';
			THCol.item(0).insertAdjacentHTML("beforeEnd", str);
			}
		else {}
		THCol.item(0).style.cursor="pointer";
		}
	}
}

// :::::::::::::::::::::::::::
// :::: Global Functions :::
// :::::::::::::::::::::::::::
window.onload=InitializePage;

function InitializePage()
{
	hideALL("mainTable");
	hideALL("mainTable2");

setSTYLES("mainTable");
setSTYLES("mainTable2");

attachEventhandlers("mainTable");
attachEventhandlers("mainTable2")
}

// Attach event handlers to all images within container
function attachEventhandlers(tablex)
{
mainTABLEElement=document.getElementById(tablex);
TABLECol=mainTABLEElement.getElementsByTagName("TABLE");

if (TABLECol!=null)
	{for (l=0; l<TABLECol.length; l++)
		{
		THCol=TABLECol.item(l).getElementsByTagName("TH");
		THCol.item(0).setAttribute('id',l);
		if(handlerTYPE=='mouseover')
			{THCol.item(0).onmouseover=eHandler;
			 document.getElementsByTagName("BODY").item(0).onclick=eHandler;}
		else if(handlerTYPE=='click')
			{document.getElementsByTagName("BODY").item(0).onclick=eHandler;}
		}
	}
}

function hideALL(tablex)
{
mainTABLEElement=document.getElementById(tablex);
TABLECol=mainTABLEElement.getElementsByTagName("TABLE");
for (a=0; a<TABLECol.length; a++)
	{
	IMGCol=TABLECol.item(a).getElementsByTagName("IMG");
	if (IMGCol.item(0)!=null){IMGCol.item(0).setAttribute('src','menu_script/'+imagePLUS);}
	
	THCol=TABLECol.item(a).getElementsByTagName("TH");
	for (b=0; b<THCol.length; b++)
		{THCol.item(b).setAttribute("ECState",0);}
		
	TRCol=TABLECol.item(a).getElementsByTagName("TR");
	for (c=1; c<TRCol.length; c++)
		{
		TRCol.item(c).style.display='none';
		}
	}
}

function showSingle(tablex)
{
mainTABLEElement=document.getElementById(tablex);
TABLECol=mainTABLEElement.getElementsByTagName("TABLE");

if (TABLECol!=null)
	{
	for (z=0; z<TABLECol.length; z++)
		{
		TRCol=TABLECol.item(z).getElementsByTagName("TR");
		THCol=TABLECol.item(z).getElementsByTagName("TH");
		IMGCol=TABLECol.item(z).getElementsByTagName("IMG");

		// Grab ECState and expand or collapse branch
		State=THCol.item(0).getAttribute("ECState");
		if(State==0)
			{
			// ECState is COLLAPSED (+) (0)
			if (IMGCol.item(0)!=null){IMGCol.item(0).setAttribute('src','menu_script/'+imagePLUS);}
			for (l=1; l<TRCol.length;l++)
				{
				TRCol.item(l).style.display='none';
				}
			}
		else	 if(State==1)
			{
			// ECState is EXPANDED (-) (1)
			if (IMGCol.item(0)!=null){IMGCol.item(0).setAttribute('src','menu_script/'+imageMINUS);}
				for (m=0; m<TRCol.length; m++)
				{// Browser compatibility code
				if(navigator.appName == 'Microsoft Internet Explorer')
					{
					if(navigator.userAgent.indexOf('Opera') != -1)
						{TRCol.item(m).style.display='table-row';}
					else	{TRCol.item(m).style.display='block'; }
					}
				else	{TRCol.item(m).style.display='table-row';}
				}
			}
		}
	}
}

// ::::::::::::::::::::::::::
// :::: Event Handlers ::::
// ::::::::::::::::::::::::::
var targ;
var previousTargID

function eHandler(e)
{
// Browser compatibility code
if (!e) var e = window.event;
if (e.target) targ = e.target;
else if (e.srcElement) targ = e.srcElement;
if (targ.nodeType == 3) // defeat Safari bug
	targ=targ.parentNode;

THElement=findTH(targ);

if(THElement!=null)
	{
	if(THElement.id!=previousTargID && oneBranch=='yes' )
		{hideALL("mainTable");
		hideALL("mainTable2");
		}
	if(handlerTYPE=='mouseover')
		{
		hideALL("mainTable");
		hideALL("mainTable2");
		}		
	previousTargID=THElement.id
	// Toggle ECState
	State=THElement.getAttribute("ECState");
		if(State==0){THElement.setAttribute("ECState",1);}
		else{THElement.setAttribute("ECState",0);}
	showSingle("mainTable");
	showSingle("mainTable2");
	}
//else{hideALL();}
}

function findTH(t)
{
  if (t.tagName == "TH")
  	{return t;}
  else if
  	(t.tagName == "BODY")
  	{return null;}
  else
  {return findTH(t.parentNode);}
}


///////////////////////////////////////////////
//                              			 //
// Passing the Parameters to Collapse Expand //
//			                                 //
///////////////////////////////////////////////

// One Branch at a time ?
var oneBranch='no';
// Which Event ? (click or mouseover)
var handlerTYPE='click';
// Transparency
var TValue=100;
// Image location (before or after)
var ImagePlacement='before';
// Expand Image	
var imagePLUS='../images/arrow.gif';
// Collapse Image	
var imageMINUS	='../images/arrowdn.gif';



//////////////////////////////////
//                              //
// Tree Menu Script Begins Here //
//                              //
//////////////////////////////////
var persisteduls=new Object()
var ddtreemenu=new Object()

//set image path to "closed"
ddtreemenu.closefolder="images/closed.gif" 
//set image path to "open"
ddtreemenu.openfolder="images/open.gif" 

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.rememberstate(treeid, durationdays)}, "unload") //save opened UL indexes on body unload
}
}

ddtreemenu.buildSubTree=function(treeid, ulelement, index){
ulelement.parentNode.className="submenu"
if (typeof persisteduls[treeid]=="object"){ //if cookie exists (persisteduls[treeid] is an array versus "" string)
if (ddtreemenu.searcharray(persisteduls[treeid], index)){
ulelement.setAttribute("rel", "open")
ulelement.style.display="block"
//ulelement.parentNode.className="submenu"

ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"

}
else
ulelement.setAttribute("rel", "closed")
} //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]
if (submenu.getAttribute("rel")=="closed"){
submenu.style.display="block"
submenu.setAttribute("rel", "open")
ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.openfolder+")"
}
else if (submenu.getAttribute("rel")=="open"){
submenu.style.display="none"
submenu.setAttribute("rel", "closed")
ulelement.parentNode.style.backgroundImage="url("+ddtreemenu.closefolder+")"
////////////////////////////////////////
///////////////////////////////////////
//////////position of images//////////
/////////////////////////////////////
ulelement.parentNode.style.backgroundPosition="right 2"
}
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.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.openfolder+")"
}
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.openfolder+")" : "url("+ddtreemenu.closefolder+")"
}
}

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)
}