

function getElementsByClass(searchClass,node,tag){
  var classElements = new Array();
  if ( node == null )
    node = document;
  if ( tag == null )
    tag = '*';
  var els = node.getElementsByTagName(tag);
  var elsLen = els.length;
  for (var i=0, j=0; i<elsLen; i++){
    if(els[i].className.indexOf(searchClass) >= 0){
      classElements[j] = els[i];
      j++;
    }
  }
  return classElements;
}


function $(){
  var elements = new Array();
  for (var i=0; i<arguments.length; i++){
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);
    if (arguments.length == 1)
      return element;
    elements.push(element);
  }
  return elements;
}


function addEvent( obj, type, fn ) {
  if (obj.addEventListener) {
    obj.addEventListener( type, fn, false );
    EventCache.add(obj, type, fn);
  }
  else if (obj.attachEvent) {
    obj["e"+type+fn] = fn;
    obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
    obj.attachEvent( "on"+type, obj[type+fn] );
    EventCache.add(obj, type, fn);
  }
  else {
    obj["on"+type] = obj["e"+type+fn];
  }
}


var EventCache = function(){
  var listEvents = [];
  return {
    listEvents : listEvents,
    add : function(node, sEventName, fHandler){
      listEvents.push(arguments);
    },
    flush : function(){
      var i, item;
      for(i = listEvents.length - 1; i >= 0; i = i - 1){
        item = listEvents[i];
        if(item[0].removeEventListener){
          item[0].removeEventListener(item[1], item[2], item[3]);
        };
        if(item[1].substring(0, 2) != "on"){
          item[1] = "on" + item[1];
        };
        if(item[0].detachEvent){
          item[0].detachEvent(item[1], item[2]);
        };
        item[0][item[1]] = null;
      };
    }
  };
}();
addEvent(window,'unload',EventCache.flush);





var letzte_gewechselte_ebene;

/* Ebene einblenden und letzte eingeblendete Ebene ausblenden 
Bei Angabe von linear wird ein alternativer Einblend-Effekt verwendet,
der für Inline-Elemente geeigneter ist*/
function ebenen_wechseln(ebene, linear){
  ebene = ebene_ermitteln(ebene);
  
  if(letzte_gewechselte_ebene && letzte_gewechselte_ebene!=ebene){
    letzte_gewechselte_ebene = $(letzte_gewechselte_ebene);
    if(letzte_gewechselte_ebene.style.display != 'none'){
      if (linear!=undefined && linear==1)
        Effect.Fade(letzte_gewechselte_ebene, { duration: 0.3 });
      else
        Effect.BlindUp(letzte_gewechselte_ebene, { duration: 0.3 });
    }
  }
  
  //toggle nicht benutzt, da die Funktion Probleme hat, 
  //sobald die Ebene keine ID besitzt
  //Effect.toggle(ebene, 'blind', { delay: 0, duration: 0.3 });
  if (linear!=undefined && linear==1){
    if (ebene.style.display == 'none')
      Effect.Appear(ebene, { duration: 0.3 });
    else
      Effect.Fade(ebene, { duration: 0.3 });
  }
  else {
    if (ebene.style.display == 'none')
      Effect.BlindDown(ebene, { duration: 0.3 });
    else
      Effect.BlindUp(ebene, { duration: 0.3 });
  }
  
  letzte_gewechselte_ebene=ebene;
}


/* Ebenenzustand umkehren (einblenden <=> ausblenden).
Bei Angabe von modus wird gezielt in diesen Zustand gewechselt oder
mit this.checked in Abhängigkeit von einer Checkbox/einem Radiofeld.
Bei Angabe von umkehren wird entgegengesetzt zu modus gewechselt
(für Verwendung mit Checkbox: markiert => Ebene ausblenden).
Bei Angabe von linear wird ein alternativer Einblend-Effekt verwendet,
der für Inline-Elemente geeigneter ist*/
function ebene_umschalten(ebene, modus, umkehren, linear){
  ebene = ebene_ermitteln(ebene);
  
  if (modus!=undefined && modus==1)
    modus = (umkehren!=undefined && umkehren==1) ? "none" : "block";
  else if (modus!=undefined && modus==0)
    modus = (umkehren!=undefined && umkehren==1) ? "block" : "none";
  else if (ebene.style.display == 'none')
    modus = 'block';
  else
    modus = 'none';
  
  if (linear!=undefined && linear==1){
    if (modus == 'block')
      Effect.Appear(ebene, { duration: 0.3 });
    else
      Effect.Fade(ebene, { duration: 0.3 });
  }
  else {
    if (modus == 'block')
      Effect.BlindDown(ebene, { duration: 0.3 });
    else
      Effect.BlindUp(ebene, { duration: 0.3 });
  }
}


/* Ebene in Abhängigkeit von Checkbox/Radiofeld oder fester Wertvorgabe einblenden/ausblenden */
function ebenen_ausblenden(){
  /* d=document.getElementsByTagName('div');
  for (var i=0; i<d.length; i++){
    if(d[i].className.indexOf('einblendebene') >= 0)
      d[i].style.display='none';
  }
  
  d=document.getElementsByTagName('span');
  for (var i=0; i<d.length; i++){
    if(d[i].className.indexOf('einblendebene') >= 0)
      d[i].style.display='none';
  } */
  
  ebenen = getElementsByClass('einblendebene');
  for (var i=0; i<ebenen.length; i++){
    if(ebenen[i].className.indexOf('eingeblendet') >= 0){
      ebenen[i].style.display='';
      letzte_gewechselte_ebene = ebenen[i];
    }
    else
      ebenen[i].style.display='none';
  }
  
}


/* Objekt kurzzeitig ausblenden */
function temporaer_ausblenden(ebene, zeit){
  ebene_umschalten(ebene, 0, 0, 1);
  setTimeout("ebene_umschalten('"+ebene.id+"', 1, 0, 1)", zeit);
}


/* Ebene ermitteln, auf die der Effekt angewendet werden soll */
function ebene_ermitteln(ebene){
  if (typeof ebene == 'string')
    ebene = document.getElementById(ebene);
  
  //prüfen, ob ebene die Klasse einblendebene enthält
  if(ebene.className.indexOf('einblendebene') >= 0)
    return ebene;
  
  //ebene enhält nicht die Klasse einblendebene, daher innerhalb
  //diese Knotens die entsprechende Ebene ermitteln und zurückgeben
  ebene = getElementsByClass('einblendebene', ebene);
  
  return ebene[0];
}


//addEvent(window,'load',ebenen_ausblenden);









function iframe_anpassen(obj){
  hoehe = autoiframe.document.height || autoiframe.document.body.scrollHeight;
  obj.style.height = (hoehe+100) + 'px';
}

