// ================================================================================
//
// stdjslib.js: Diverse, projektunabhaengige JavaScript-Hilfsfunktionen
//
// ================================================================================
//
//   $Source: /mnt/baldur/home/cvs/Sources/WWW_Utilities/stdjslib.js,v $
// $Revision: 3.3 $
//     $Date: 2011-02-12 13:06:14 $
//   $Author: steffen $
//
// ================================================================================
// $Log: stdjslib.js,v $
// Revision 3.3  2011-02-12 13:06:14  steffen
// - Funktion setSize() zum Setzen der Pixel-Groesse eines Elements
//   (funktioniert zur Zeit nur fuer XHTML-Dokumente)
//
// Revision 3.2  2008-08-17 10:54:42  steffen
// - Funktion expandcollapse() zum auf- und zuklappen von Navigationsleisten
//   (aus dem Moltkestrasse-Projekt) ergänzt
//
// Revision 3.1  2008-05-18 18:00:36  steffen
// Initial Checkin
//


//
// epost(d2.d1.m2,m1): Verschleierung einer E-Mail-Adresse
//
function epost(d2,d1,m2,m1) {
  var r = "href="; var c = "ilto";
  document.write("<a "+r+"\"ma"+c+":"+m1+m2+"@"+d1+d2+".de"+"\">");
}

//
// logDebug(message,element): Haengt in das HTML-Element mit ID ELEMENT
//    (Default ist "debugmsg") den String MESSAGE und einen Zeilenumbruch
//    an
//
// RETURN: ----
//

function logDebug(message,element) {
  if (!element) element="debugmsg";
  var e = document.getElementById(element);
  if (e) {
    e.appendChild(document.createTextNode(message));
    e.appendChild(document.createElement("br"));
  }
}

//
// windowWidth(), windowHeight(): Gibt die Breite/Hoehe des Browser-Viewports
//   zurueck. Angelehnt an O'Reilley Javascript, Kapitel 14.2.2
//
// RETURN: Breite/Hoehe als Integer
//

function windowWidth() {
  if (window.innerWidth) {
    // Alle Browser ausser Internet Explorer
    return window.innerWidth;
  }
  else if (document.documentElement && document.documentElement.clientWidth) {
    // IE6 mit angegebenen DOCTYPE
    return document.documentElement.clientWidth;
  }
  else if (document.body.clientWidth) {
    // IE6 ohne angegebenen DOCTYPE
    return document.body.clientWidth;
  }
  return 0;
}

function windowHeight() {
  if (window.innerHeight) {
    // Alle Browser ausser Internet Explorer
    return window.innerHeight;
  }
  else if (document.documentElement && document.documentElement.clientHeight) {
    // IE6 mit angegebenen DOCTYPE
    return document.documentElement.clientHeight;
  }
  else if (document.body.clientHeight) {
    // IE6 ohne angegebenen DOCTYPE
    return document.body.clientHeight;
  }
  return 0;
}


//
// setSize(id,width,height): Größe eines Elements setzen
//   Sucht das Dokument-Element mit ID und setzt dessen Breite und Höhe.
//   Die Funktion arbeitet zur Zeit nur für XHTML-Dokumente korrekt
//

function setSize(id,width,height) {
  var e;
  if ( (e=document.getElementById(id)) ) {
    if (width != undefined)  e.style.width  = width+"px";
    if (height != undefined) e.style.height = height+"px";
  }
}


//
// expandcollapse(item,collapseother): Expandieren und Kollabieren von Navigationslisten
//   Die zu steuernden Dokument-Elemente müssen per "id=" so markiert sein:
//      <img src="navplus.gif" id="head1" onClick="expandcollapse(1,0)" /> Kopftext #1
//        <xxx id="data1_1"> Datentext 1 zu Kopf #1 </xxx>
//        <xxx id="data1_2"> Datentext 2 zu Kopf #1 </xxx>
//        <xxx id="data1_3"> Datentext 1 zu Kopf #1 </xxx>
//      <img src="navplus.gif" id="head2" onClick="expandcollapse(2,0)" /> Kopftext #1
//        <xxx id="data2_1"> Datentext 1 zu Kopf #2 </xxx>
//        <xxx id="data2_2"> Datentext 2 zu Kopf #2 </xxx>
//      <img src="navplus.gif" id="head3" onClick="expandcollapse(3,0)" /> Kopftext #1
//        <xxx id="data3_1"> Datentext 1 zu Kopf #3 </xxx>
//   Die Funktion detektiert über die Image-SRC-Angabe im Kopfelement, ob der Eintrag
//   expandiert oder kollabiert werden muss. Bei Aufruf ``expandcollapse(n,0)'' wird
//   ``headN'' geprüft und die Einträge dataN_1, dataN_2, ... usw. entsprechend umgesetzt.
//   Ist das Argument ``collapseother'' ungleich 0, werden beim Expandieren von Eintrag #n
//   alle anderen Einträge automatisch kollabiert.
//
// RETURN: ----
//

function expandcollapse(n,collapseother)
{
  var head,e,display,i,j;

  head = document.getElementById('head'+n);
  if (head) {
    if (head.src.search(/navplus\.gif$/)!=-1) {
      if (collapseother) {
        i = 1;
        while ( (e=document.getElementById('head'+i)) ) {
          e.src = e.src.replace(/navminus\.gif$/,'navplus.gif');
          j = 1;
          while ( (e=document.getElementById('data'+i+'_'+j)) ) {
            e.style.display = 'none';
            j++;
          }
          i++;
        }
      }
      display = 'block';
      head.src = head.src.replace(/navplus\.gif$/,'navminus.gif');
    }
    else {
      display = 'none';
      head.src = head.src.replace(/navminus\.gif$/,'navplus.gif');
    }
    i = 1;
    while ( (e=document.getElementById('data'+n+'_'+i)) ) {
      e.style.display = display;
      i++;
    }
  }
}

