/*
aqtree3clickable.js

Converts an unordered list to an explorer-style tree, with clickable
icons

To make this work, simply add one line to your HTML:
<script type="text/javascript" src="aqtree3clickable.js"></script>

and then make the top UL of your nested unordered list of class
"aqtree3clickable".

That's it. No registration function, nothing.

http://www.kryogenix.org/code/browser/aqlists/

Stuart Langridge, November 2002
sil@kryogenix.org

Inspired by Aaron's labels.js (http://youngpup.net/demos/labels/) and Dave Lindquist's menuDropDown.js (http://www.gazingus.org/dhtml/?id=109)

*/

var lastClicked;

addEvent(window, "load", makeTreesC);

function makeTreesC() {
    // We don't actually need createElement, but we do
    // need good DOM support, so this is a good check.
    if (!document.createElement) return;    
    uls = document.getElementsByTagName("ul");
    for (uli = 0; uli < uls.length; uli++) {
        ul = uls[ uli ];
        if (ul.nodeName == "UL" && ul.className == "tocTree") {
            processULELC(ul);
        }
    }
}

function processULELC(ul) {
    if ( !ul.childNodes || ul.childNodes.length == 0 ) return;
    // Iterate LIs
    for (var itemi = 0; itemi < ul.childNodes.length; itemi++) {
        var item = ul.childNodes[itemi];
		
        if (item.nodeName == "LI") {
            // Iterate things in this LI
            var a = null;
			var img = null;
            var subul = null;
	    	 var div = null;
			 
            for ( var sitemi = 0; sitemi < item.childNodes.length; sitemi++ ) {
                var sitem = item.childNodes[sitemi];				
                switch (sitem.nodeName) {						
                   
					case "DIV": div = sitem; break;
                    case "UL": subul = sitem; 
                               processULELC( subul );
                               break;
				}
            }
            if ( div ) {			
                associateELC( item, div );
            }			
        }
    }
}

function associateELC(li, div ) 
{	
	
    if (li.className.indexOf('open') == -1)	li.className = 'closed';		
	else 
	{
		lastClicked = div;	
		div.childNodes[0].src = "images/minus.gif";
	}	
	
   	div.onclick = function () 
	{
		index = FindImage( this );			
		if( index == -1 ) return;	
		img = this.childNodes[index];	
		
		this.parentNode.className = (this.parentNode.className == 'open') ? "closed" : "open";
        img.src = (this.parentNode.className == 'open') ? "images/minus.gif" : "images/plus.gif";
		
		if ( lastClicked != null && this != lastClicked )
		{	
			img = lastClicked.childNodes[index];						
			img.src  = "images/plus.gif";
			lastClicked.parentNode.className = 'closed';			
		}
		lastClicked = this;		
		return false;
		
    }//end function onclick
}//end function associateELC




/*              Utility functions                    */

function addEvent(obj, evType, fn){
  /* adds an eventListener for browsers which support it
     Written by Scott Andrew: nice one, Scott */
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, true);
    return true;
  } else if (obj.attachEvent){
	var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
	return false;
  }
}
function FindImage( obj )
{
	var index = -1;
	var item;
	for( var i = 0; i < obj.childNodes.length; i++)
	{
		item = obj.childNodes[i]; 
		if( item.nodeName == "IMG" ) index = i;			
	}
	return index;
}/* */