// returns the GrandChildrenContainer div element
function gcc(id)
{
  return document.getElementById('grandchildrenContainer_'+id);
}


// show or hide div with grandchildren
function toggleGrandchildren(toplevel_id, sublevel_id)
{
  var linkElement = document.getElementById('link_'+sublevel_id);
  if (linkElement.innerHTML == '-')
  {
    _hideGrandchildren(linkElement, toplevel_id); 
  }
  else
  {
    _showGrandchildren(linkElement, toplevel_id, sublevel_id); 
  }
  linkElement.blur();
}


// hide div with grandchildren
function _hideGrandchildren(linkElement, toplevel_id)
{
  var div = gcc(toplevel_id);
  div.innerHTML = '&nbsp;';
  linkElement.innerHTML = '+';
}


// show div with grandchildren
function _showGrandchildren(linkElement, toplevel_id, sublevel_id)
{
  _closeSameLevelParents(toplevel_id);
  var div = gcc(toplevel_id);
  div.innerHTML = '&nbsp;';
  var links = _getLinks(sublevel_id);
  var sequence = _getSequence(toplevel_id, sublevel_id);
  var html = '<table border="0" cellpadding="0" cellspacing="0">';
  var posX = _getElementPositionX(linkElement);
  for (var i=0; i<links.length; i++)
  {
    if (sequence <= 2)
    {
      html += '<tr><td valign="top"><img src="img/litzld_sitemap_left.gif" alt="" /></td><td style="padding-top: 2px;">&nbsp;'+ links[i] + '</td></tr>'; 
      var position = 'left';
    }
    else 
    {
      html += '<tr><td style="padding-top: 2px;">&nbsp;'+ links[i] + '</td><td valign="top"><img src="img/litzld_sitemap_right.gif" alt="" /></td></tr>'; 
      var position = 'right';
    }
  }
  html += '</table>';
  div.innerHTML = html;
  if (position == 'left')
  {
    div.style.paddingLeft = (posX+14) +'px';
  }
  else
  {
    div.style.paddingLeft = (posX+16-div.firstChild.clientWidth) +'px';
  }
  linkElement.innerHTML = '-';
}


// get array with links for specified node id
function _getLinks(id)
{
  for (var i=0; i<nodes.length; i++)
  {
    if (nodes[i].id == id)
    {
      return nodes[i].links; 
    }
  } 
  return new Array();
}


// when opening a node, close all other nodes on the same level
function _closeSameLevelParents(toplevel_id)
{
  for (var i=0; i<ids.length; i++)
  {
    if (ids[i].id == toplevel_id)
    {
      for (var j=0; j<ids[i].subs.length; j++)
      {
        if (document.getElementById('link_'+ids[i].subs[j]))
        {
          document.getElementById('link_'+ids[i].subs[j]).innerHTML = '+';
        } 
      }
    } 
  } 
}

// return position number in array (1st element = 1, 2nd element = 2, etc)
function _getSequence(toplevel_id, sublevel_id)
{
  for (var i=0; i<ids.length; i++)
  {
    if (ids[i].id == toplevel_id)
    {
      var sequence = 1;
      for (var j=0; j<ids[i].subs.length; j++)
      {
        if (ids[i].subs[j] == sublevel_id)
        {
          return sequence; 
        }
        sequence++;
      }
    }
  }
  return sequence; 
}

// get the X position (left offset) of an element (relative to content div!)
function _getElementPositionX(element)
{
  var level = 0;
	var totalOffset = 0;
	while (element) {
		totalOffset += element.offsetLeft;
		element = element.offsetParent;
		level++;
		if (level > 2)
		{
		  element = null; 
		}
	}
	return totalOffset;  
}
