addEvent(window, 'load', AddOnClicks);

function addEvent(eventObject, eventType, functionToAttach)
{
	var UseCapture = false;
	
	if (eventObject.addEventListener)
	{
		eventObject.addEventListener(eventType, functionToAttach, UseCapture);
		return true;
	}
	else if (eventObject.attachEvent)
	{
		var returnObject = eventObject.attachEvent("on" + eventType, functionToAttach); 
		return returnObject;
	}
	else
	{
		return true;
	}
}

function Toggle(elemID)
{
    var elem = document.getElementById(elemID);
    var ToggleVis = function(elem)
    {
        if (!elem.className)
        {
            //weird element got passed.
            var elem = document.getElementById(elemID);
        }
        // Unfold the branch if it isn't visible
        if (elem.className.toString() == 'Hidden')
        {
            elem.className = 'Visible';
        }
        // Collapse the branch if it IS visible
        else
        {
            elem.className = 'Hidden';
        }

        return false;
    }
    return ToggleVis;
}

function AddOnClicks()
{
    var elemSpans = document.getElementsByTagName('span');
    var elemA;
	var elemUL;
    var i;
	
    for (i = 0; i < elemSpans.length; i++)
    {
        if (!window.addEventListener)
        {
            //IE
            elemSpans[i].innerHTML = '<a>' + elemSpans[i].innerHTML.toString() + '</a>';
            elemA = getNextChildByTag(elemSpans[i], 'A');
		    elemA.href = "#";
        }
        else
        {
            //Not
            elemA = elemSpans[i]
        }
		elemUL = getNextSiblingByTag(elemSpans[i], 'UL');
		
        elemUL.className = 'Hidden';
        elemUL.id = elemA.innerHTML.toString();

		addEvent(elemA, 'click', Toggle(elemUL.id));
    }
}

function getNextSiblingByTag(elem, tag)
{
    var nextElem = elem.nextSibling;
    var nextElemIsNotNull = true;

    while (nextElem.tagName != tag.toString())
    {
        while (nextElemIsNotNull)
        {
            if (!nextElem)
            {
                //Whitespace encountered... Skip it.
                nextElem = nextElem.nextSibling;
                nextElemIsNotNull = true;
            }
            else
            {
                if (nextElem.tagName != tag.toString())
                {
                    nextElem = nextElem.nextSibling;
                }
                else
                {
                    nextElemIsNotNull = false;
                }
            }
        }
    }
    return nextElem;
}

function getNextChildByTag(elem, tag)
{
    var nextElem = elem.firstChild;
    var nextElemIsNotNull = true;

    while (nextElem.tagName != tag.toString())
    {
        while (nextElemIsNotNull)
        {
            if (!nextElem)
            {
                //Whitespace encountered... Skip it.
                nextElem = nextElem.nextSibling;
                nextElemIsNotNull = true;
            }
            else
            {
                if (nextElem.tagName != tag.toString())
                {
                    nextElem = nextElem.nextSibling;
                }
                else
                {
                    nextElemIsNotNull = false;
                }
            }
        }
    }
    return nextElem;
}
