/**************************************************************************************

        Nested list collapsing script written by Mark Wilton-Jones - 21/11/2003

Version 1.0 - this script takes existing HTML nested UL or OL lists, and collapses them

***************************************************************************************



Please see http://www.howtocreate.co.uk/jslibs/ for details and a demo of this script

Please see http://www.howtocreate.co.uk/jslibs/termsOfUse.html for terms of use

_________________________________________________________________________



You can put as many lists on the page as you like, each list may have a different format



To use:

_________________________________________________________________________



Inbetween the <head> tags, put:



	<script src="PATH TO SCRIPT/listCollapse.js" type="text/javascript" language="javascript1.2"></script>

_________________________________________________________________________



Define the HTML. Note that to correctly nest lists, child OLs or ULs should be children of an LI element,

not direct descendents of their parent OL/UL. The text used to expand the branch should be written

between the <li> tag and the <UL/OL> tag, and should only contain HTML that is permitted inside an 'A'

element. Note; Opera 7 will lose any style attributes you define in this text - use classes instead.



<ul id="someID">

	<li>Book 1

		<ul>

			<li><a href="someHref">Chapter 1</a></li>

			<li><a href="someHref">Chapter 2</a></li>

		</ul>

	</li>

	<li>Book 2

		<ul>

			<li><a href="someHref">Chapter 1</a></li>

			<li>Cha<span class="doMore">pt</span>er 2

				<ul>

					<li><a href="someHref">Sub 1</a></li>

					<li><a href="someHref">Sub 2</a></li>

				</ul>

			</li>

		</ul>

	</li>

</ul>

________________________________________________________________________

Now you need to trigger the collapsing, using <body onload, window.onload or by putting the collapse

commands in a script just before the </body> tag. If using either onload technique, you must not use

any other scripts that rely on the onload event.



compactMenu(theRootID,shouldAutoCollapse,extraHTML);

  oID = string: ID of root nest element, must be a UL or OL; this will not be collapsed, but any child

  UL/OLs will be (note, if the root nest element is a UL, all child lists should be ULs - the same is

  true for OLs; if the root nest element is OL, all child lists should be OLs)

  shouldAutoCollapse = bool: auto-collapse unused branches

  extraHTML = string: HTML to insert to collapsible branches - usually '&plusmn; '



eg 1.

<body onload="compactMenu('someID',true,'&plusmn; ');">



eg 2.

<script type="text/javascript" language="javascript1.2"><!--

window.onload = function () { compactMenu('someID',false,'&plusmn; '); }

//--></script>



eg 3.

<script type="text/javascript" language="javascript1.2"><!--

compactMenu('someID',true,'&plusmn; ');

//--></script>

</body>



____________________________________________________________________________________________________*/

var openLists = [];

function compactMenu(oID,oAutoCol,oPlMn, menu_aberto) {

	if( !document.getElementsByTagName || !document.childNodes || !document.createElement ) { return; }

	var baseElement = document.getElementById( oID ); if( !baseElement ) { return; }



	//var menu_aberto= new Array(111,38, 1);

	//alert('csc');

	compactChildren( baseElement, 0, oID, oAutoCol, oPlMn, baseElement.tagName.toUpperCase(), menu_aberto);

}

function compactChildren( oOb, oLev, oBsID, oCol, oPM, oT, menu_aberto) {

	if( !oLev ) { oBsID = escape(oBsID); if( oCol ) { openLists[oBsID] = []; } }

	for( var x = 0, y = oOb.childNodes; y[x]; x++ )

	{

	if( y[x].tagName) {

		//for each immediate LI child

		var theNextUL = y[x].getElementsByTagName( oT )[0];

		if( theNextUL ) {

			//collapse the first UL/OL child





			//var menu_aberto= new Array(1,26, 110);

			for (v=0, encontrou=0;v<menu_aberto.length; v++)

			{

			   //alert(menu_aberto[v]);

			   if (menu_aberto[v]==y[x].id) encontrou++;



			}



			if (!encontrou)

			theNextUL.style.display = 'none';



			//create a link for expanding/collapsing

			var newLink = document.createElement('A');

			newLink.setAttribute( 'href', '#' );

			newLink.onclick = new Function( 'clickSmack(this,' + oLev + ',\'' + oBsID + '\',' + oCol + ',\'' + escape(oT) + '\');return false;' );

			//wrap everything upto the child U/OL in the link

			var theHTML = y[x].innerHTML.substr(0,y[x].innerHTML.toUpperCase().indexOf('<'+oT));



			while(!y[x].childNodes[1].tagName || y[x].childNodes[1].tagName.toUpperCase() != oT) {

				y[x].removeChild( y[x].childNodes[1] ); }

			y[x].replaceChild(newLink,y[x].childNodes[0]);

			y[x].childNodes[0].innerHTML = oPM + theHTML.replace(/^\s*|\s*$/g,'');

			compactChildren( theNextUL, oLev + 1, oBsID, oCol, oPM, oT, menu_aberto);





} } } }

function clickSmack( oThisOb, oLevel, oBsID, oCol, oT ) {

	if( oThisOb.blur ) { oThisOb.blur(); }

	oThisOb = oThisOb.parentNode.getElementsByTagName( unescape(oT) )[0];

	if( oCol ) {

		for( var x = openLists[oBsID].length - 1; x >= oLevel; x-=1 ) { if( openLists[oBsID][x] ) {

			openLists[oBsID][x].style.display = 'none'; if( oLevel != x ) { openLists[oBsID][x] = null; }

		} }

		if( oThisOb == openLists[oBsID][oLevel] ) { openLists[oBsID][oLevel] = null; }

		else { oThisOb.style.display = 'block'; openLists[oBsID][oLevel] = oThisOb; }

	} else { oThisOb.style.display = ( oThisOb.style.display == 'block' ) ? 'none' : 'block'; }

}