/***********************************************************************
 * function toggle()                                                   *
 * Takes a string identifying a Spider node as an argument and toggles *
 * its open/closed state.                                              *
 ***********************************************************************/
function toggle(id) {
	var dlElement = document.getElementById('dl_' + id);
	if (dlElement) {
		if (dlElement.className.indexOf('closed') != -1) openNode(dlElement);
			else closeNode(dlElement);
	}
}
/***********************************************************************
 * function openNode()                                                 *
 * Takes a Spider node (a DL element) as an argument and opens it.     *
 ***********************************************************************/
function openNode(oNode) {
	if ((oNode.id).indexOf('spider_list') == -1) {
		var oParentNode = oNode.parentNode;
		// IE and Firefox have different DOM models
		if (navigator.userAgent.indexOf('MSIE') != -1) oParentNode = oParentNode.parentNode;
		var arrSiblings = oParentNode.childNodes;
		// close all children of the parent node (all siblings, if any, plus itself)
		for (var i = 0; i < arrSiblings.length; i++) {
			if (document.getElementById('dl_' + arrSiblings[i].id)) {
				closeNode(document.getElementById('dl_' + arrSiblings[i].id));
			}
		}
		oNode.className = oNode.className.replace(new RegExp('closed'), 'open');		
		var sIdPart = oNode.id.replace(new RegExp('dl_'), '');
		var imgElement = document.getElementById('img_' + sIdPart);
		if (imgElement) imgElement.src = '/ois/images/opened.gif';
		var descrElement = document.getElementById('descr_' + sIdPart);
		if (descrElement) descrElement.style.display = 'block';
		resizeCols();
	}
}
/***********************************************************************
 * function closeNode()                                                *
 * Takes a Spider node (a DL element) as an argument and closes it.   *
 ***********************************************************************/
function closeNode(oNode) {
	if ((oNode.id).indexOf('spider_list') == -1) {
		oNode.className = oNode.className.replace(new RegExp('open'), 'closed');
		var sIdPart = oNode.id.replace(new RegExp('dl_'), '');
		var imgElement = document.getElementById('img_' + sIdPart);
		if (imgElement) imgElement.src = '/ois/images/closed.gif';
		var descrElement = document.getElementById('descr_' + sIdPart);
		if (descrElement) descrElement.style.display = 'none';
		resizeCols();
	}
}
/***********************************************************************
 * function expandAll()                                                *
 * Takes tab number as an argument.                                    *
 * Opens all nodes in the spider tree under that tab.                  *
 ***********************************************************************/
function expandAll(intTabNo) {
	var arrDLs = document.getElementsByTagName('DL');
	for (var i = 0; i < arrDLs.length; i++) {
		if (arrDLs[i].id.indexOf('dl_item' + intTabNo) != -1) openNode(arrDLs[i]);
	}
}

/***********************************************************************
 * function collapseAll()                                              *
 * Takes tab number as an argument.                                    *
 * Closes all nodes in the spider tree under that tab.                 *
 ***********************************************************************/
function collapseAll(intTabNo) {
	var arrDLs = document.getElementsByTagName('DL');
	for (var i = 0; i < arrDLs.length; i++) {
		if (arrDLs[i].id.indexOf('dl_item' + intTabNo) != -1) closeNode(arrDLs[i]);
	}
}