/*******************************************************************
 *  Credits go to: (all members in irc.freenode.net ##javascript   *
 *    inimino (complete adjustments)                               *
 *    Maggi (lots of troubleshooting help)                         *
 *    Typos_King (input on troubleshooting)                        *
 *    Mordof (compiling final efforts into this document)          *
 *******************************************************************/

function list_onclick(e)
{
	e=e||event;
	var elm = e.target || e.srcElement;
	if(elm.nodeType!=1) elm=elm.parentNode;

	var parent = getAncestor(elm,'tagName',/^(LI|OL|UL)$/i);
	if(parent) toggleClassPair(parent, 'open', 'closed');
}

function getAncestor(elm, prop, regVal, excludeElm)
{
	if(excludeElm) elm = elm.parentNode;
	while(elm)
	{
		if(regVal.test(elm[prop])) 
			return elm;
		elm = elm.parentNode;
	}
}

function toggleClassPair(elm, class1, class2)
{
	elm.className = elm.className.replace(new RegExp('\\b('+class1+'|'+class2+')\\b','g'),function(found){ return found==class1? class2:class1;});
}
