// xCollapsible, Copyright 2005 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL

function xCollapsible(outerEle, bShow) // object prototype
{
  // Constructor
	var container = xGetElementById(outerEle);
	if (!container) { return null; }
	
	var isUL = container.nodeName.toUpperCase() == 'UL';
	var i, trg, aTgt = xGetElementsByTagName(isUL ? 'UL':'DIV', container);
	
	for (i = 0; i < aTgt.length; ++i)
	{
		trg = xPrevSib(aTgt[i]);
		
		if (trg && (isUL || trg.nodeName.charAt(0).toUpperCase() == 'H'))
		{
			aTgt[i].xTrgPtr = trg;
			aTgt[i].style.display = bShow ? 'block' : 'none';
			trg.style.cursor = 'pointer';
			trg.xTgtPtr = aTgt[i];
			trg.onclick = trg_onClick;
		}  
	}
  
  // Private

	function trg_onClick()
	{
		var tgt = this.xTgtPtr.style;
		tgt.display = (tgt.display == 'none') ? 'block' : 'none';
		
		this.style.background = (tgt.display == 'none') ? '#e3e3e3 url(/images/plus.gif) left no-repeat' : '#e3e3e3 url(/images/minus.gif) left no-repeat';
	}

  // Public
	
	this.display = function()
	{
		for (i = 0; i < arguments.length; i++)
		{
			var e = xGetElementById(arguments[i]);
			e.style.display = 'block';
		}
	};
	
	this.displayAll = function(bShow)
	{
		for (var i = 0; i < aTgt.length; ++i)
		{
			if (aTgt[i].xTrgPtr) {
        		xDisplay(aTgt[i], bShow ? "block" : "none");
			}
		}
	};

	// The unload listener is for IE's circular reference memory leak bug.
	this.onUnload = function()
	{
		if (!xIE4Up || !container || !aTgt) { return; }
		
		for (i = 0; i < aTgt.length; ++i)
		{
	    	trg = aTgt[i].xTrgPtr;
			
			if (trg)
			{
				if (trg.xTgtPtr)
				{
					trg.xTgtPtr.TrgPtr = null;
					trg.xTgtPtr = null;
				}
				trg.onclick = null;
			}
	    }
	};
}
