//////////////
// NODES
//////////////

// Returns the id of the children block of a given node
// nodeName: name of the node
function getChildrenBlockId(nodeName){
	return nodeName + "SonsZone";
}

// Returns the id of the image used to show/hide a given node
// nodeName: name of the node
function getToggleImageId(nodeName){
	return nodeName + "FolderArrow";
}

//////////// EXPAND / COLLAPSE FUNCTIONS /////////////
// Expands a node
// Parameters: see toggleNode function
function expandNode(nodeName, collapsedNodesAreStored){
	var childrenObj;
	var toggleImage;
	
	// First show the block that contains the children of the specified node
	showBlock(getChildrenBlockId(nodeName));
	childrenObj = getObject(getChildrenBlockId(nodeName));
	// Now change the image used to indicate whether the node is collapsed or expanded
	if (childrenObj){
		toggleImage = getObject(getToggleImageId(nodeName));
		if (toggleImage)
			toggleImage.src = getPathToFolder(toggleImage.src) + "opened_folder.gif";
		// Remove the node from the cookie, since it is now expanded
		if (collapsedNodesAreStored)
			deleteCookie(nodeName);
	}
}

// Collapses a node
// Parameters: see toggleNode function
function collapseNode(nodeName, collapsedNodesAreStored){
	var childrenObj;
	var toggleImage;
	
	// First hide the block that contains the children of the specified node
	hideBlock(getChildrenBlockId(nodeName));
	childrenObj = getObject(getChildrenBlockId(nodeName));
	// Now change the image used to indicate whether the node is collapsed or expanded
	if (childrenObj){
		toggleImage = getObject(getToggleImageId(nodeName));
		if (toggleImage)
			toggleImage.src = getPathToFolder(toggleImage.src) + "closed_folder.gif";
		// Store the node in the cookie, since it is now collapsed
		if (collapsedNodesAreStored)
			setCookie(nodeName, "0");
	}
}

// Expands all nodes of the passed array
function expandNodes(nodes, collapsedNodesAreStored){
  for (nodeRank = 0; nodeRank < nodes.length; nodeRank++)
		expandNode(nodes[nodeRank], collapsedNodesAreStored);
}

// Collapses all nodes of the passed array
function collapseNodes(nodes, collapsedNodesAreStored){
  for (nodeRank = 0; nodeRank < nodes.length; nodeRank++)
		collapseNode(nodes[nodeRank], collapsedNodesAreStored);
}

// Toggles a node: the DIV section containing all sons is shown or hidden
// nodeName is the node to show/hide
// collapsedNodesAreStored: true if the list of collapsed nodes is stored using a cookie; otherwise false
function toggleNode(nodeName, collapsedNodesAreStored){
  var nodeLink;

  nodeLink = getObject(nodeName + "FatherLink");      // name of HTML link
  if (nodeLink)
    nodeLink.blur();   // to lose focus on link
	
	// Expand or collapse node
	childrenBlockId = getChildrenBlockId(nodeName);
	if (childrenBlockId){
		if (isVisible(childrenBlockId))
			collapseNode(nodeName, collapsedNodesAreStored);
		else
			expandNode(nodeName, collapsedNodesAreStored);
	}
}


