﻿function foldingAddEventListener(target, property, func)
{
	if (target.addEventListener) { //for W3C DOM
		target.addEventListener(property, func, false);
	} else if (target.attachEvent) { //for IE
		target.attachEvent("on" + property, func);
	}
}

function onFoldingClickedLambda(id)
{
	return function(){
		var spanE = document.getElementById(id);
		if (spanE)
		{
			var ulE = spanE.nextSibling;
			while (ulE && ulE.tagName != 'UL')
			{
				ulE = ulE.nextSibling;
			}
			if (ulE)
			{
				if (ulE.style.display != 'none')
					ulE.style.display = 'none';
				else if (ulE.style.display)
					ulE.style.display = '';
			}
		}
	};
}

function openSelfRec(obj)
{
    if (obj.tagName == 'A')
    {
        var href = obj.getAttribute('href');
        if (href && href.length > 8 && window.location.href.indexOf(href) != -1)
        {
            for (var p = obj.parentNode; p; p = p.parentNode)
            {
                if (p.style && p.style.display == 'none')
                    p.style.display = '';
            }
        }
    }
    else if (obj.hasChildNodes())
    {
        var c = obj.childNodes;
        for (var i = 0; i < c.length; i++)
            openSelfRec(c[i]);
    }
}

function fold()
{
	var ulList = document.getElementsByTagName("ul");
	for(var i = 0, len = ulList.length; i < len; i++)
	{
		var ulE = ulList[i];
		var cn = ulE.getAttribute('class') || ulE.getAttribute('className');
		if (cn == 'foldableUL')
		{
			ulE.style.display = 'none';
			var spanE = ulE.previousSibling;
			while (spanE && spanE.tagName != 'SPAN')
			{
				spanE = spanE.previousSibling;
			}
			if (spanE)
			{
				spanE.id = 'foldableULID' + i;
				spanE.style.cursor = 'pointer';
				spanE.style.textDecoration = 'underline';
				foldingAddEventListener(spanE, "click", onFoldingClickedLambda(spanE.id));
			}
			else
			{
				alert("bad sibling");
			}
			
			openSelfRec(ulE);
		}
	}
}

foldingAddEventListener(window, "load", fold);
