// window.onload {{{
window.onload = function()
   {
   init_treeviews();
   }
									  // }}}

// close_children_lists( list_node ) {{{
function close_children_lists( list_node )
   {
   var lists = list_node.getElementsByTagName( 'ul' );
   for( var i = 0; i < lists.length; i++ )
      {
      list = lists[i];
      if( list.style.display == 'block' )
	 {
	 list.style.display = 'none';
	 }
      else
	 {
	 list.style.display = 'block';
	 }
      }
   }
									  // }}}

// set_list_style( list_node ) {{{
function set_list_style( list_node, default_node_bullet )
   {
   list_node.onclick = toggle_treenode;
   list_node.style.display = 'list-item';

   leaves = list_node.getElementsByTagName( 'ul' );
   if( leaves.length > 0 )
      {
      list_node.style.listStyleImage = default_node_bullet;
      list_node.onmouseover = show_node;
      list_node.onmouseout  = show_leaf;
      }
   else
      {
      if( list_node.className == 'dir' )
	 {
	 list_node.style.listStyleImage = 'url(/tree_leaf_dir.gif)';
	 list_node.onmouseover = show_leaf;
	 }
      else
	 {
	 list_node.style.listStyleImage = 'url(/tree_leaf_file.gif)';
	 list_node.onmouseover = show_leaf;
	 }
      }
   }
									  // }}}
      
// init_treeview {{{
function init_treeviews()
   {
   var treeviews = document.getElementById( 'treeview' );
   if( !treeviews )
      {
      return;
      }

   var items = treeviews.getElementsByTagName( 'li' );
   for( var i = 0; i < items.length; i++ )
      {
      item = items[i];
      if( item.style )
	 {
	 close_children_lists( item );
	 set_list_style( items[i], 'url(/tree_closed.gif)' );
	 }
      }

   // Close top level list nodes
   var first_nodes = treeviews.getElementsByTagName( 'ul' )[0].childNodes;
   for( var j = 0; j < first_nodes.length; j++ )
      {
      node = first_nodes[j];
      if( node.style )
	 {
	 close_children_lists( node );
	 set_list_style( node, 'url(/tree_closed.gif)' );
	 }
      }
   }
									  // }}}

// toggle_treenode {{{
function toggle_treenode( event )
   {
   // If the current node is a leaf, don't bother with
   // the hiding and showing bits.
   if( this.style.listStyleImage != 'url(/tree_leaf_dir.gif)' &&
       this.style.listStyleImage != 'url(/tree_leaf_file.gif)' )
      {
      if( this.style.listStyleImage == 'url(/tree_open.gif)' )
	 {
	 this.style.listStyleImage = 'url(/tree_closed.gif)';
	 }
      else
	 {
	 this.style.listStyleImage = 'url(/tree_open.gif)';
	 }
      }

   close_children_lists( this )

   // That final bit of code is courtesy of
   // http://www.quirksmode.org/js/events_order.html
   if( !event )
      {
      var event = window.event;
      }
   event.cancelBubble = true;
   if( event.stopPropagation )
      {
      event.stopPropagation();
      }
   }
									  // }}}

// show_node {{{
function show_node()
   {
   this.style.cursor = 'pointer';
   }
									  // }}}

// show_leaf {{{
function show_leaf()
   {
   this.style.cursor = 'auto';
   }
									  // }}}

