pandorafms/pandora_console/include/styles/cb/lib/xcollapsible.js

63 lines
1.6 KiB
JavaScript

// 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;
if (tgt.display == 'none') {
tgt.display = 'block';
}
else {
tgt.display = 'none';
}
}
// Public
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;
}
}
};
}