var ckstr="";

if (!document.loadHandlers)
{
	document.loadHandlers=new Array();
	document.loadHandlers[0]='initializeDynTree';
	document.lastLoadHandler=0;
}
else
{
	document.lastLoadHandler++;
	document.loadHandlers[document.lastLoadHandler]='initializeDynTree';
}
var winonload=window.onload;
window.onload=function() { if (winonload) winonload();initializeAll();};
function errorTrap(){return true;}
window.onerror=errorTrap;

function getIndent (theItem)
{
	if(!theItem.id)return -1;
	var end=theItem.id.indexOf("SXE");
	if (end==-1 || theItem.id.indexOf("PH")!=-1) return -1;
	return parseInt(theItem.id.substring (1, end));
}

function getLevel (theItem)
{
	if(!theItem.id)return -1;
	var start=theItem.id.indexOf("SXE") + 3;
	if (end==-1 || theItem.id.indexOf("PH")!=-1) return -1;
	var end=theItem.id.indexOf("SXC");
	if(end == -1) end = theItem.id.indexOf("SXP");
	if(end != -1) return parseInt(theItem.id.substring (start, end));
	else return -1;
}

var waitList="";
function waitForElement(elStr)
{
	var fr=window.frames['dyntree_frame'];
	var ld=fr.document.getElementById('docLoaded');
	if(!ld||fr.document.dirty){setTimeout("waitForElement('"+elStr+"')",50);return;}
	var el=document.getElementById(elStr+"SXCPH");
	if(el)el.style.display="none";
	var els=fr.document.getElementsByTagName('div');
	var i;
	for(i=0;i<els.length;i++)
	{
		if(els[i].id.indexOf('SXE')!=-1)
		{
			var sub=document.createElement('div');
			sub.className=els[i].className;
			sub.id=els[i].id;
			if(els[i].getAttribute('par'))sub.setAttribute('par',els[i].getAttribute('par'));
			sub.innerHTML=els[i].innerHTML;
			sub.style.display='none';
			if(els[i].id.indexOf('PH')!=-1){sub.style.marginLeft=els[i].style.marginLeft;}
			document.body.insertBefore(sub,el);
		}
	}
	onClicked(elStr);
	var sep=waitList.indexOf(';');
	if(sep!=-1){waitList=waitList.substring(sep+1);}
	processWaitList();
}

function switchVisibility(theItem,image,image2, parT)
{
	if (theItem.style.display=="none")
	{
		theItem.style.display="block";
		if((image) && (parT == "root")) image.src=imf+"orangearrowopen.gif";
		else if(image) image.src=imf+"orangearrowopen_small.gif";
	}
	else
	{
		theItem.style.display="none";
		if((image) && (parT == "root")) image.src=imf+"orangearrowclosed.gif";
		else if(image) image.src=imf+"orangearrowclosedsmall.gif";
	}
}

function addToWaitList (el)
{
	if(waitList.indexOf(el)!=-1)return;
	if(!waitList){waitList=el+';';processWaitList();}
	else waitList+=el+';';
}

function processWaitList()
{
	var sep=waitList.indexOf(';');
	if(sep==-1)return;
	var el=waitList.substring(0,sep);
	var ph=document.getElementById(el+"SXCPH");
	if(ph)ph.style.display="block";
	var fr=window.frames['dyntree_frame'];
	fr.document.dirty='true';
	fr.document.location=dynPref+el+"SXC.htm";
	setTimeout("waitForElement('"+el+"')",50);
}

function onClicked(elm,lev,el)
{
	if(!elm){elm="I"+lev+"SXE"+el;}
	var theItem=document.getElementById(elm).nextSibling;
	/*This is needed for nextSibling to work properly on Netscape.
	  See dwk for a full explanation.*/
	try {
		while (theItem && theItem.nodeType != Node.ELEMENT_NODE) {
			theItem = theItem.nextSibling;
		}
	}
	catch(e) {}
	
	var parT = document.getElementById(elm).attributes[1].value;
	if((parT == null) || (parT == "")) {
		parT = document.getElementById(elm).par;
	}
	
	elm = elm.substring(0, elm.length-3);
	if(dynLoad&&!theItem)
	{
		addToWaitList(elm);
		return;
	}
	
	var image=document.images ["M"+elm+"SXP"];
	var image2=null;
	if (bOpenIcon)image2=document.images ["N"+elm+"SXP"];
	
	var bShow=(theItem.style.display=="none");
	var fold=document.getElementById(elm+'SXP');

	if(bShow&&singleFolder&&fold&&fold.getAttribute('par'))
	{
		var els=document.getElementsByTagName('div');
		var i;
		for(i=0;i<els.length;i++)
		{
			if(els[i].getAttribute('par')&&els[i].getAttribute('par')==fold.getAttribute('par'))
			{
				var chel=els[i].id.substring(0,els[i].id.indexOf('SXP'));
				var ch=document.getElementById(chel+'SXC');
				if(ch&&ch.style.display!="none")onClicked(chel);
			}
		}
	}
	
	switchVisibility(theItem,image,image2, parT);
	
	//If the first item is a subparent, we must be sure that the proper arrow appears
	if(theItem.id.indexOf("SXP")!=-1)
	{
		document.images["M"+theItem.id].src=imf+"orangearrowclosedsmall.gif";
	}
	
	var elem=theItem.nextSibling;
	var tii=getIndent(theItem);

	if(theItem.id.indexOf("SXP")!=-1) tii--;
	while(elem)
	{
		var retVal=0;
		var tci=getIndent(elem);
		if (tci!=-1)
		{
			var bfold=(elem.id.indexOf("SXP")!=-1);
			if (tci == (tii + 1))
			{
				if (bfold)retVal=3;
				else retVal=1;
			}
			else if(tci>(tii+1)) {
				retVal=2;
			}
			else if(tci==tii && !bfold) {
				retVal=3;
			}
			else {
				break;
			}
			if(bShow)
			{
				if(retVal==3)switchVisibility(elem,null,null,null);
			}
			else
			{
				elem.style.display="none";
				if(bfold)
				{
					var parS = elem.attributes[1].value;
					if((parS == null) || (parS == "")) {
						parS = elem.par;
					}
					
					if(parS == "root") {
						document.images["M"+elem.id].src=imf+"orangearrowclosed.gif";
					}
					else {
						document.images["M"+elem.id].src=imf+"orangearrowclosedsmall.gif";
					}
				}
			}
		}
		elem=elem.nextSibling;
	}
	return elem;
}

function saveSession()
{
	if (nDays > 0&&!dynLoad)
	{
		ckstr="";
		var str;
		ind=-1;
		var tempColl=document.getElementsByTagName("DIV");
		for(i=0;i<tempColl.length;i++)
		{
			var theItem=tempColl[i];
			if (theItem.id.indexOf("SXP")!=-1)
			{
				var sxc=document.getElementById(theItem.id.substring(0,theItem.id.indexOf("SXP"))+"SXC");
				if (sxc.style.display=="none") ckstr+="0";
				else ckstr+="1";
			}
		}
	}
	return true;
}

function initializeDynTree()
{
	if(dynLoad)return;

	var nextFolder=null;
	var bIgnoredFolder=true;
	var sxpind=0;
	var state;
	var i;

	if (nDays>0)
	{
		var state = new Array(stateString.length);
		ckstr = stateString;
		for(i=0;i<state.length;i++)
		{
			state[i] = stateString.substr(i,1);
		}
	}
	var tempColl=document.getElementsByTagName("DIV");

	for (i=0;i<tempColl.length;i++)
	{
		var el=tempColl[i];

		if(el.id&&el.id.indexOf('SX')!=-1)
		{
			var ii=getIndent(el);

			if(el==nextFolder){bIgnoredFolder=true;}
			if(!state||nDays==0||savedTree=="N")
			{
				if((el.id.indexOf("SXC")!=-1&&ii==showLevel)||ii>showLevel)el.style.display="none";
			}
			else if(el.id.indexOf("SXC")!=-1)
			{
				var index = getLevel(el);
				if((state[index - 1] == "1") && index != -1)
				{
					el.style.display = "block";
				}
				else
				{
					el.style.display = "none";
				}
			}
			else if(el.id.indexOf("SXP")!=-1)
			{
				var bset=false;
				bIgnoredFolder=true;
				var parT = el.attributes[1].value;

				if((parT == null) || (parT == "")) {
					parT = el.par;
				}
				
				if(parT != "root") {
					var index = getLevel(document.getElementById(parT));

					if((state[index - 1] == "1") && index != -1)
					{
						el.style.display = "block";
					}
					else
					{
						el.style.display = "none";
					}
				}
				
				var elid = el.id;
				
				var childIndex = getLevel(el);
				if (bIgnoredFolder&&state[childIndex-1]!="1")
				{	
					//nextFolder=onClicked(elid, parseInt(level), parseInt(el));
					bIgnoredFolder=false;
					bset=true;
				}
				if(!bset&&bIgnoredFolder)
				{
					if(parT == "root") {
						document.images["M"+el.id].src=imf+"orangearrowopen.gif";
					}
					else {
						document.images["M"+el.id].src=imf+"orangearrowopen_small.gif";
					}
				}
			}
		}
	}
	doAutoSync();
}

function expandTree(el)
{
	var retval=0;
	if(!el)return;
	if(el.id&&el.id.indexOf("SXP")!=-1)
	{
		expandTree(document.getElementById(el.getAttribute('par')));
		var ch=document.getElementById(el.id.substring(0,el.id.indexOf("SXP"))+"SXC");
		if(ch&&ch.style.display=="none")onClicked(el.id.substring(0,el.id.indexOf("SXP")));
		retval=1;
	}
	else if(el.id&&el.id.indexOf("SXC")!=-1)
	{
		expandTree(document.getElementById(el.id.substring(0,el.id.indexOf("SXC"))+"SXP"));
		retval=1;
	}
	else
	{
		if(el.id&&el.id.indexOf("SXR")!=-1)retval=1;
		if(expandTree(el.parentElement?el.parentElement:el.parentNode))retval=1;
	}
	return retval;
}

function fixUrl(url)
{
	var newUrl=unescape(url.toLowerCase());
	var ind=newUrl.indexOf('index.');
	if(ind!=-1)newUrl=newUrl.substr(0,ind);
	if(newUrl.length>0&&newUrl.substr(newUrl.length-1,1)=="/")newUrl=newUrl.substr(0,newUrl.length-1);
	return newUrl;
}

function synchronize(url)
{
	var lurl=fixUrl(url.href);
	var els=document.getElementsByTagName('a');
	var i;
	for(i=0;i<els.length;i++)
	{
		if(lurl==fixUrl(els[i].href)&&syncEl!=els[i])
		{
			if(expandTree (els[i].parentElement?els[i].parentElement:els[i].parentNode))
			{
				if(syncEl){syncEl.style.backgroundColor=document.body.bgColor?document.body.bgColor:'';syncEl.innerHTML=syncEl.getAttribute('oldCode');}
				els[i].style.backgroundColor=syncBgColor;
				els[i].setAttribute('oldCode',els[i].innerHTML);
				els[i].innerHTML='['+els[i].innerHTML+']';
				syncEl=els[i];
				break;
			}
		}
	}
}

function initializeAll()
{
	var i;
	for(i=0;i<=document.lastLoadHandler;i++)
	{
		eval(document.loadHandlers[i]+'();');
	}
}

function link(url)
{
	if(url.indexOf("?") != -1)
	{
		window.location.href = url + "&state=" + ckstr;
	}
	else
	{
		window.location.href = url + "?state=" + ckstr;
	}
	showPopup=false;
}

function staticLink(url, arrow_id, stateLength, stateString, defaultState, pos)
{
	if (nDays>0)
	{
		var cks=document.cookie.split(';');
		var state = defaultState;
		var i;
		var position = parseInt(pos);

		for(i=0;i<cks.length;i++)
		{
			if(cks[i].indexOf("sxtree")!=-1)
			{
				state=cks[i].substring(cks[i].indexOf("=")+1);			

				if(state.length != stateString.length)
				{
					state = defaultState;
				}
				break;
			}
		}
		
		var begin = parseInt(arrow_id) - 1;
		var stLen = parseInt(stateLength);
		var end = begin + stLen;
		
		var subState = state.substring(begin, end);
		var subLinkState = stateString.substring(begin, end);
		
		if(begin == 0)
		{
			var leftover = state.length - subState.length;

			for(i = 0; i < leftover; i++)
			{
				subState += "0";
				subLinkState += "0";
			}
			state = subState;
			stateString = subLinkState;
		}
		else
		{
			var part2 = state.length - end;
			
			for(i = 0; i < begin; i++)
			{
				subState = "0" + subState;
				subLinkState = "0" + subLinkState;
			}
			for(i = 0; i < part2; i++)
			{
				subState += "0";
				subLinkState += "0";
			}
			state = subState;
			stateString = subLinkState;
		}
		
		var merged = "";
		
		if(position == parseInt(arrow_id))
		{
			if(state == defaultState)
			{
				merged = stateString;
			}
			else
			{
				merged = defaultState;
			}
		}
		else
		{
			for(i = 0; i < state.length; i++)
			{
				if((state.charAt(i) == "1") || (stateString.charAt(i) == "1"))
				{
					if(((merged.length + 1) == position) && (state.charAt(position - 1) == "1"))
					{
						if(i == 0)
						{
							merged = "0";
						}
						else
						{
							merged += "0";
						}
					}
					else
					{
						if(i == 0)
						{
							merged = "1";
						}
						else
						{
							merged += "1";
						}
					}
				}
				else
				{
					if(i == 0)
					{
						merged = "0";
					}
					else
					{
						merged += "0";
					}
				}
			}	
		}

		var now=new Date();
		fixDate(now);
		now.setTime(now.getTime()+nDays*24*60*60*1000);
		var strnow=now.toGMTString();
		
		document.cookie="sxtree="+merged+"; expires="+strnow;
		document.cookie="sxpossaved=true; expires="+strnow;
		
		window.location.href = url + "?state=" + merged;
	}
}


function fixDate(date)
{
	var base=new Date (0);
	var off = base.getTime();
	if (off>0)date.setTime(date.getTime()-off);
}

function setCookie(url, stateString)
{
	if (nDays>0)
	{
		var now=new Date();
		fixDate(now);
		now.setTime(now.getTime()+nDays*24*60*60*1000);
		var strnow=now.toGMTString();
		
		document.cookie="sxtree="+stateString+"; expires="+strnow;
		document.cookie="sxpossaved=true; expires="+strnow;
		
		window.location.href = url + "?state=" + stateString;
	}
}

function setCookie2(stateString)
{
	if (nDays>0)
	{
		var now=new Date();
		fixDate(now);
		now.setTime(now.getTime()+nDays*24*60*60*1000);
		var strnow=now.toGMTString();
		
		document.cookie="sxtree="+stateString+"; expires="+strnow;
		document.cookie="sxpossaved=true; expires="+strnow;
	}
}

function forwardTS(url, defaultState)
{
	var state = defaultState;

	if (nDays>0)
	{
		var cks=document.cookie.split(';');
		var i;
		for(i=0;i<cks.length;i++)
		{
			if(cks[i].indexOf("sxtree")!=-1)
			{
				state=cks[i].substring(cks[i].indexOf("=")+1);
				break;
			}
		}
	}
	
	window.location.href = url + "?state=" + state;
}