//<script>
var isSearch = "yes";
var sFolderName = "toc\\";
var iBookIndex = 2;
var iSearchedIndex = 1;
var xmlStylesheet;
var oContainer;
var bFirst = true;
function getTocElement()
{
	return (isSearch == "yes") ? document.getElementById("TOCSearch") : document.getElementById("TOCBrowse");
}

function initTocElement(bSearch)
{
	var oTocBrowse = document.getElementById("TOCBrowse");
	var oTocSearch = document.getElementById("TOCSearch");
	isSearch = bSearch;
	if(isSearch == "yes")
	{
		oTocBrowse.style.display = "none";
		oTocSearch.style.display = "block";
	}
	else
	{
		oTocSearch.style.display = "none";
		oTocBrowse.style.display = "block";
		if(oTocBrowse.childNodes.length == 0)
			loadToc();
	}	
}

function showToc(xmlData)
{
	function checkState()
	{
		if (oContainer == null || xmlData == null || xmlStylesheet == null)
		{
			setTimeout(checkState, 200);
			return;
		}
	}
	checkState();
	var root = xmlData.documentElement;
	var s = root.transformNode(xmlStylesheet);
	s = s.replace(/<\/?ul>/ig, "");
	oContainer.innerHTML = s;
}

function setXmlData(xmlData)
{ 
	xmlData.documentElement.setAttribute("issearch", isSearch); 
	xmlData.documentElement.setAttribute("fileid", sFileID); 
	showToc(xmlData);
	document.getElementById("progress").style.display = "none";
	if(bFirst)
	{	
		bFirst = false;
		try{
		    //load ????? ??"?
			var child = document.getElementById("548607");
			if(child.getAttribute("loaded") == "0")
			    loadChildren(child);
			
			//load ????? ??"?
			//child = document.getElementById("369741");
			//if(child.getAttribute("loaded") == "0")
			//    loadChildren(child);
			
		}catch(e){alert(e.description);}
	}	
}

function setXmlStylesheet(_xmlStylesheet) 
{ 
	xmlStylesheet = _xmlStylesheet;
}

function loadXml(sPath)
{
	sFileID = getFileID(sPath);
	XmlDoc.createIsland(sPath, function(doc) { setXmlData(doc); });
}

function loadToc()
{
	var searchFormFrame = Compat.getFrame("titles").document.getElementById("iFrame1");
	if(searchFormFrame == null)
    {
        setTimeout(loadToc, 200);
        return;
    }
    var searchForm = searchFormFrame.contentWindow;
	
	var sFilename = sFolderName + "c2.xml";
	XmlDoc.createIsland("toc.xsl", function(doc) { setXmlStylesheet(doc); });
	oContainer = getTocElement();
	loadXml(sFilename);
		
	//Init oFocused
	top.oFocused = {
		collections_id: "",
		collections_name: "",
		units_id:	""
	};
	
	//var searchForm = Compat.getFrame("titles").document.getElementById("iFrame1").contentWindow;
	var searchSelected = searchForm.document.getElementById("searchSelected");
	if(!searchSelected) return;
	if(isSearch == "yes")
	{
	    searchForm.document.getElementById("AncestorID").value = "";
		searchForm.document.getElementById("unitID").value = "";
		searchForm.showFocused(null);
	}	
}


function onTocClick(evt)
{
	evt = Compat.getEvent(evt);
	evt.stopPropagation();
	
	var element = evt.target;
	
	//reach the <li> element
	if (element.tagName)
		if (element.tagName.toLowerCase() == "span")
		{
			var sClassName = element.className;
			element = element.parentNode;
			switch(sClassName.toString())
			{
				case "searched":
				case "searchedSelected":
					element = element.parentNode;
					spanClick(element);
					return;
				case "title":
					if(isCollection(element))
						break;
				case "book":
				case "bookSelected":
					spanClick(element);
					return;
			} 
		}

	// Trap clicks between <li> elements (for some reason entryClick() is applied to the <ul> parent too)
	if (!element.getAttribute("level"))
		return;
		
	// leaf elements - display document group return
	if (isLeaf(element)) 
		spanClick(element);
	else
		loadChildren(element);	
		
	return;
}

function loadChildren(oElement)
{
	var childrens = oElement.childNodes;
	
	if (oElement.getAttribute("loaded") == "0") 
	{
		var oSubtoc = document.createElement("ul");
		sFileToLoad = sFolderName + oElement.getAttribute("subtoc") + ".xml";
		oContainer = oSubtoc;
		loadXml(sFileToLoad);
		oElement.appendChild(oSubtoc);
		oElement.setAttribute("loaded", "1");
	}

	var bSelectedElement = (oElement.childNodes[iBookIndex].className.indexOf("Selected") != -1);
	//Change sign - set class thus influencing appearance
	for (var i=0;i<childrens.length;i++)
	{
		var sChildClassName = childrens[i].className;
		if (sChildClassName)
			if (sChildClassName.toLowerCase().indexOf("bullet")!= -1)
			{
				if (childrens[i].className == "bulletMinus")
				{
					childrens[i].className = "bulletPlus"
					childrens[i].innerHTML = "&nbsp;+&nbsp;";
				}
				else
				{
					childrens[i].className = "bulletMinus"
					childrens[i].innerHTML = "&nbsp;&#150;&nbsp;";
				}
				continue;			
			}
		if (isTag(childrens[i], "ul"))
		{
			switch (childrens[i].style.display)
			{
				case "none" : childrens[i].style.display = "inline";break;
				case "inline" : childrens[i].style.display = "none";break;
				case "" :childrens[i].style.display = "inline";break;
			}
			selectOrUnselectChildren(childrens[i],bSelectedElement);
		}
	}
}

function selectOrUnselectChildren(oNodes,bSelect)
{
	oNodes = oNodes;
	oNodes = oNodes.childNodes;
	if(bSelect)
		for(var i=0;i < oNodes.length; i++)
		{
			var oChilds = oNodes[i].childNodes;
			for(var j=0; j<oChilds.length; j++)
				if(oChilds[j].className != null)
					if(oChilds[j].className.indexOf("book") != -1)
						selectOrUnselect(oChilds[j], bSelect);
		}
}

function isLeaf(element)
{
	if (element.getAttribute("loaded"))
		return false;
	return true;	
}

function isCollection(element)
{
	if (element.getAttribute("type") == "collection")
		return true;
	return false;	
}


function setHover(bOn, evt)
{
	evt = Compat.getEvent(evt);
	evt.stopPropagation();
	
	var element = evt.target;
	if (bOn)
		element.style.color = "#DC8F27";
	else
		element.style.color = "";
}


function createObj()
{
	function helper(className) {
		return eval("new " + "Act" + "iveXObj" + "ect" + "(\"" + className + "\")");
	}

	for (var i = 0; i < arguments.length; i++)
	{
		try { return helper(arguments[i]); }
		catch (e) {	/* do nothing */ }
	}
	return null;
}

function isTag(element, tag)
{
	if(element.tagName)
		return element.tagName.toLowerCase() == tag;
	return false;
}

function spanClick(oElement)
{
	if (isSearch == "yes")
		toggleSearch(oElement);
	else
		sendQuery(oElement); 
}


function toggleSearch(oElement)
{
	var bSelected = (oElement.childNodes[iBookIndex].className.indexOf("Selected") != -1);
	//select or unselect the selected element
	selectOrUnselect(oElement.childNodes[iBookIndex], !bSelected)
	//select or unselect the parent and children of the selected element
	toggleRelated(oElement,!bSelected);
	//update the radio button in the search form
	getSelectedValues();
}
var arrCollectionId = new Array();
var arrUnitId = new Array();
var arrCollectionName = new Array();

function getSelectedValues()
{
	var oNode = getTocElement().firstChild;
	arrCollectionId.length = 0;
	arrUnitId.length = 0;
	arrCollectionName.length = 0;
	loopOver(oNode);
	var info = {
		collections_id: arrCollectionId.join(","),
		collections_name: arrCollectionName.join(" ?? "),
		units_id:	arrUnitId.join(",")
	};

	top.onTreeClick(info);
}

function loopOver (oNode)
{
	while(oNode)
	{
		var oChildren = oNode.childNodes;
		if(oChildren)
			for(var i = 0 ; i< oChildren.length; i++)
			{
				if(oChildren[i].className != null)
				{
					if(oChildren[i].className.indexOf("book") != -1)
					{
						if(oChildren[i].className.indexOf("Selected") != -1)
						{			
							if(oNode.getAttribute("type") == "collection")
							{
								arrCollectionId.push(oNode.getAttribute("id"));
								if(oNode.getAttribute("level") == 1)
									arrCollectionName.push(oNode.getAttribute("name")); 
							}
							else if(oNode.getAttribute("type") == "unit")
								arrUnitId.push(oNode.getAttribute("id"));
						}
						else if(oChildren[i].childNodes[iSearchedIndex].className.indexOf("Selected") != -1)//searched
						{
							if(oNode.getAttribute("level") == 1)
								arrCollectionName.push(oNode.getAttribute("name")); 
							loopOver(oNode.lastChild.firstChild);
						}
						break;
					}
				}
			}
		oNode = oNode.nextSibling;
	}	

}

function selectOrUnselect(oElement, bSelect)
{
	var sClassName = oElement.className
	sClassName = sClassName.replace("Selected", "");
	var sSelect = (bSelect) ? "Selected" : "";
	switch(sClassName)
	{
		case "book":
			oElement.childNodes[iSearchedIndex].className =  oElement.childNodes[iSearchedIndex].className.replace("Selected","") + sSelect;	
			break;
		case "searched":
			oElement.parentNode.className = oElement.parentNode.className.replace("Selected", "");
			break;
	}
	oElement.className =  sClassName + sSelect;
}

function toggleRelated(oElement, bSelect)
{
	//toggle children
	toggleRelatedChildren(oElement, bSelect); 
		
	//toggle parents
	toggleRelatedParents(oElement);
}

function toggleRelatedChildren(oElement, bSelect)
{
	var lastChild = oElement.lastChild; 
	if (isTag(lastChild, "ul"))
	{
		var oChildren = lastChild.childNodes;
		for (var i = 0; i < oChildren.length ; i++)
			if (isTag(oChildren[i], "li"))
			{
				selectOrUnselect(oChildren[i].childNodes[iBookIndex], bSelect); 
				toggleRelatedChildren(oChildren[i],bSelect); 
			}
	}
}

function toggleRelatedParents(oElement)
{
	oElement = Compat.findParentByTagName(oElement.parentNode, "UL");
	while(oElement)
	{
		var oTmpElement = oElement;
		var oChildren = oTmpElement.childNodes;
		var iSelected =0;
		var iNoSelected = 0;
		for (var i = 0; i < oChildren.length && (iSelected == 0 || iNoSelected == 0) ; i++)
			if (isTag(oChildren[i], "li"))
				switch(isSelectedElement(oChildren[i].childNodes[iBookIndex]))
				{	
					case "selected": iSelected++; break;
					case "semiselected":iSelected++;iNoSelected++;break;
					case "noselected":iNoSelected++;break;
				}

		if (isTag(oElement.parentNode, "li"))
		{
			if(iSelected == 0)
				selectOrUnselect(oElement.parentNode.childNodes[iBookIndex],false);
			else if(iNoSelected == 0)
				selectOrUnselect(oElement.parentNode.childNodes[iBookIndex],true);
			else 
				selectOrUnselect(oElement.parentNode.childNodes[iBookIndex].childNodes[iSearchedIndex],true);
		}
	oElement = Compat.findParentByTagName(oElement.parentNode, "UL");
	}
}

function isSelectedElement(oElement)
{
	if(oElement.className.indexOf("Selected") != -1)
		return "selected";
	if(oElement.childNodes[iSearchedIndex].className.indexOf("Selected") != -1)
		return "semiselected";
	return "noselected";
	
}
function getSearchExp(oNode)
{
	var arr = new Array();
	while(oNode)
	{
		if(isTag(oNode,"li"))
			arr.push(oNode.getAttribute("name"));	
		oNode = Compat.findParentByTagName(oNode.parentNode, "LI");
	}	
	arr.reverse();
	return arr.join(" / ");
}
function sendQuery(oElement)
{
	try {
		if(top.oFocused)
			top.oFocused.collections_name = getSearchExp(oElement); 
		var sType = oElement.getAttribute("type");
		var q = createQuery();
		switch(sType)
		{
			case "collection":
				q.addTerm("AncestorID", oElement.getAttribute("id"),"n");			
				break;
			case "leaf":
				//q.addTerm("sentenceNum", oElement.getAttribute("num"),"n");
				q.addTerm("leafNum", oElement.getAttribute("num"),"n");
			case "unit":
				q.addTerm("unitID", oElement.getAttribute("id"),"n");
				break;
		} 
		q.showResultsDRM("toc");

	} catch (error) { alert(error.toString()); }  
}

function createQuery()
{
	var q = new NetisQuery();
	top.getQueryParameters(q);
	q.submitFrame = Compat.getFrame("main").document;
	return q;
}

function getFileID(sPath)
{
	var oReg = new RegExp(/[cu](\d+)\.xml/); 
	var arrReg = oReg.exec(sPath);
	if(arrReg != null)
		return arrReg[1];
	else
		return ""; 
}
