// xCollapsible r3, Copyright 2004-2007 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, marker_open, marker_closed) // object prototype
// Modifications by C.Euler/Geoventis
{
  // 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;
    }  
  }
  /////////////////////////////////////
  // 20.03.06:
  // marker_open, marker_closed eingeführt
  var markerImage_open=marker_open;
  var markerImage_closed=marker_closed;
  /////////////////////////////////////
  
  // Private

  function trg_onClick()
  {
    var tgt = this.xTgtPtr.style;    
    if (tgt.display == 'none') {
      tgt.display = 'block';
    }  
    else {
      tgt.display = 'none';
    }
    /////////////////////////////////////
	// 20.03.06:
	// Marker setzen
	if (xFirstChild(this).nodeName=='IMG') {
    	xFirstChild(this).src = (tgt.display=='block' ? markerImage_open : markerImage_closed);
    }
    //Handler für Open-/Close-Click auf Collapsible
	handleClickXCollapsible(this,(tgt.display=='block'));
    /////////////////////////////////////    
  }

  // Public

  this.displayAll = function(bShow)
  {
    for (var i = 0; i < aTgt.length; ++i) {
      if (aTgt[i].xTrgPtr) {
        xDisplay(aTgt[i], bShow ? "block":"none");
        /////////////////////////////////////
	  	// 20.03.06:
	  	// marker setzen
	  	if (xFirstChild(xPrevSib(aTgt[i])).nodeName=='IMG') {
      		xFirstChild(xPrevSib(aTgt[i])).src = (bShow ? markerImage_open : markerImage_closed);
      	}
        /////////////////////////////////////      	
      }
    }
  };
  
  /////////////////////////////////////
  // 20.03.06:
  // TopLevel-Einträge ein-/ausblenden
  this.showTopLevel = function(topLevelId, bShow)
  {
    //alert(xParent(xParent(aTgt[topLevelId].xTrgPtr,true),true) + ': ' + bShow);
    xDisplay(xParent(xParent(aTgt[topLevelId].xTrgPtr,true),true), bShow ? "block":"none");
  };
  /////////////////////////////////////
  
  // The unload listener is for IE's circular reference memory leak bug.
  this.onUnload = function()
  {
    if (!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;
      }
    }
  };
}



