function toggle() {
  var items = this.parentNode.getElementsByTagName('ul');
  if (items.length) {
    if (items[0].style.display == 'block') {
      items[0].style.display = 'none';
      this.className = 'expand';
    } else {
      items[0].style.display = 'block';
      this.className = 'collapse';
    }
  }
}

function treeInit(id) {
  var root = document.getElementById(id);
  
  // walk the list, augmenting as you go
  
  var nodes = root.getElementsByTagName('li');
  var lists;
  var toggler;
  var filler;
  for (i = 0; i < nodes.length; i++) {
    lists = nodes[i].getElementsByTagName('ul');
    if (lists.length > 0) {
      toggler = document.createElement('div');
      if (lists[0].style.display == 'block') {
        toggler.className = 'collapse';
      } else {
        toggler.className = 'expand';
      }
      toggler.onclick = toggle;
      nodes[i].appendChild(toggler);
      
      /*
        Append an empty div as the last child.
        This prevents IE6 from rendering an empty text node as a blank line and destroying the layout.
      */
      filler = document.createElement('div');
      nodes[i].appendChild(filler);
    }
  }
  
  root.className = 'treeview_live';
}

function mark(caller) {
  var items = caller.parentNode.getElementsByTagName('ul');
  if (items.length) {
    items[0].style.display = 'block';
  }
  
  var toggle = caller.parentNode.lastChild.previousSibling;
  if (toggle && toggle.className == 'expand') {
    toggle.className = 'collapse';
  }

  // set all to normal
  // find root
  var node = caller;
  while(node.className != 'treeview_live' && node != document) {
    node = node.parentNode;
  }
  if (node != document) {
    var nodes = node.getElementsByTagName('li');
    for (i = 0; i < nodes.length; i++) {
      nodes[i].className = 'option';
    }
  }
  
  // mark item
  caller.parentNode.className = 'marked';
}

function expand(caller) {
  var items = caller.parentNode.getElementsByTagName('ul');
  if (items.length) {
    items[0].style.display = 'block';
  }

  var toggle = caller.parentNode.lastChild.previousSibling;
  if (toggle && toggle.className == 'expand') {
    toggle.className = 'collapse';
  }
}