function toggle(type,element) {
  // Lokale Variable definieren
  var i, j, t, type0, start=0, result=0;
  var obj, objName, objFirst=-1, objLast=-1, objCount, exceptions, lastArgument, xSwitch;
  var toggleDisplay, displayType, displayStyle, displayXStyle;
  var toggleVisibility, visibilityStyle, visibilityXStyle;
  var toggleAttribute="gid"; // hier ggf. gewuenschten Standard-Attribut-Namen eintragen (z.B. "id")
  var showStatus=200; // hier eintragen, ab wieviel Elementen ein Bearbeitungshinweis erfolgen soll

  // Aktionstyp vereinheitlichen/definieren (Standard: "Falten")
  type=(type)?type.toLowerCase():"fold";

  // Wurde Elemente-Begrenzung uebergeben?
  if(element) {
    i=element.indexOf("{"); j=element.indexOf("}",i);
    if(i>=0 && j>=0) {
      objFirst=parseInt(element.substring(i+1,element.indexOf("-",i)));
      objLast=parseInt(element.substring(element.indexOf("-",i)+1,j));
      element=element.substring(0,i);
    }
  }

  // Nur Abfrage, ob toggle technisch moeglich ist?
  if(!element) {
    result=(document.getElementsByTagName)?true:false;
  } else {
    // Aktionsflags definieren
    toggleDisplay=(type.indexOf("fold")+1);    // Style display verwenden

    // "Ent-/Falten" (Darstellung ohne Platzhalter: display)?
    // ------------------------------------------------------
    if(toggleDisplay) {
      // Standard-Darstellungsart
      displayType="";
      // Spezielle Darstellungsart uebergeben?
      i=type.indexOf("fold:");
      if(i>=0) {
        // Ja, also Trenn-Positionen der Art festlegen, ...
        i+=4; j=type.indexOf(" ",i)
        // ... und Aktion von Darstellungsart trennen
        displayType=type.substring(i+1,(j<0)?type.length:j);
        // Darstellungsart "none" aus logischen Gruenden nicht zulassen
        displayType=(displayType=="none")?"":displayType;
      }
      // Aktionsstyle und Ausnahmestyle festlegen
      if(type.indexOf("unfold")>=0) {
        displayStyle=displayType; displayXStyle="none";
      } else {
        displayStyle="none"; displayXStyle=displayType;
      }
    }

    // "Anzeigen/Verstecken" (Darstellung mit Platzhalter: visibility)?
    // ----------------------------------------------------------------
    if(toggleVisibility) {
      // Aktionsstyle und Ausnahmestyle festlegen
      if(type.indexOf("unhide")>=0) {
        visibilityStyle="visible"; visibilityXStyle="hidden";
      } else {
        visibilityStyle="hidden"; visibilityXStyle="visible";
      }
    }

    /* ----------------------- */
    /* Beginn der Hauptroutine */
    /* ----------------------- */

    // Toggling per ID?
    if(document.getElementById && document.getElementById(element)) {
      // ID gefunden: Kurzform fuer Element-Objekt definieren
      obj=document.getElementById(element);
      // Ein Element behandelt
      result=1;

      // Darstellung ohne Platzhalter
      // ----------------------------
      if(toggleDisplay) {
        // Display-Style setzen
        obj.style.display=displayStyle;
      }

      // Darstellung mit Platzhalter
      // ---------------------------
      if(toggleVisibility) {
        // Visibility-Style setzen
        obj.style.visibility=visibilityStyle;
      }


      // ID nicht gefunden!
    } 
    else if(document.getElementsByTagName) {
      // Enthaelt element nicht nur Tag-, sondern auch Attributnamen?
      i=element.indexOf(":");
      if(i>=0) {
        // Ja, also toggleAttribut neu definieren und element anpassen
        toggleAttribute=element.substring(i+1,element.length);
        element=element.substring(0,i);
      }

      // Sind gesuchtes Element vorhanden und eine Basiskennung definiert?
      if(document.getElementsByTagName(element).length && toggleID) {

        // Letzter Parameter ist true/false?
        lastArgument=(typeof(toggle.arguments[toggle.arguments.length-1])=="boolean")?-1:0;
        // "Switch"-Effekt?
        xSwitch=(lastArgument)?toggle.arguments[toggle.arguments.length-1]:false;
        // Ausnahme-Kennungen in einem String zusammenfassen (Basiskennung+Restkennung+Pipe-Symbol als Trenner)
        exceptions=toggleID; 
        for(i=3;i<(toggle.arguments.length+lastArgument);i++) { 
          exceptions+=toggle.arguments[i]+"|"; 
        }
        i=exceptions.indexOf("|"); 
        t=""; 
        while(i>=0) { 
          t+=exceptions.substring(start,i+1)+toggleID;
          start=i+1;
          i=exceptions.indexOf("|",start);
          if(!i) { break; } 
        }
        exceptions=t.substring(0,t.length-toggleID.length);

        // Kurzform fuer Element-Objekt definieren
        obj=document.getElementsByTagName(element);
        // Start- und Endelement sowie zu bearbeitende Anzahl festlegen
        objFirst=(objFirst<0)?0:Math.max(0,objFirst);
        objLast=(objLast<0)?obj.length:Math.min(obj.length,objLast);
        objCount=(objLast-objFirst)+1;
        // Alle passenden Objekte durchgehen
        for(i=objFirst;i<objLast;i++) {
          // Kennung des aktuellen Elementes auslesen (und mit Trenner versehen)
          objName=obj[i].getAttribute(toggleAttribute);
          // Existiert Kennung und beginnt diese auch mit der Basiskennung?
          if(objName && objName.substring(0,toggleID.length)==toggleID) {
            // Anzahl der bearbeiteten Elemente erhoehen
            result++;
            // Element steht in der Ausnahmeliste?
            toggleException=(exceptions.indexOf(objName+"|")>=0)?true:false;
            // Wenn Anzahl ueber 100: Fortschritt in Statuszeile anzeigen
            if(objCount>showStatus) { 
              window.status="Bearbeitetes Element: "+(result)+"/"+objCount; 
            }

            // Darstellung ohne Platzhalter
            // ----------------------------
            if(toggleDisplay) {
              // Auf jeden Fall Style setzen (entweder/oder)?
              if(xSwitch) {
                // Display-Style unbedingt setzen
                obj[i].style.display=(toggleException)?displayXStyle:displayStyle;
              } 
              else if(!toggleException) {
                // Einfachen Display-Style setzen
                obj[i].style.display=displayStyle;
              }
            }

            // Darstellung mit Platzhalter
            // ---------------------------
            if(toggleVisibility) {
              // Auf jeden Fall Style setzen (entweder/oder)?
              if(xSwitch) {
                // Visibility-Style unbedingt setzen
                obj[i].style.visibility=(toggleException)?visibilityXStyle:visibilityStyle;
              } 
              else if(!toggleException) {
                // Visibility-Style nur bei gueltiger Kennung setzen
                obj[i].style.visibility=visibilityStyle;
              }
            }
          }
        }
        // Statuszeile wieder loeschen
        if(objCount>showStatus) { 
          window.status=" "; 
        }
      } 
      else {
        // Dokument hat keine passenden Elemente
        result=0;
      }
    } 
    else {
      // Browser kennt getElementsByTagName nicht
      result=false;
    }
  }
  return result;
}

function unfold_table(sPfeilId, sTabId) 
{
  tmpId = document.getElementById(sPfeilId);
  if (tmpId.src.indexOf("param_inactive.jpg") > 0) {
    toggle('unfold', sTabId);
    tmpId.src = "images/param_active.jpg";
    tmpId.parentNode.parentNode.className="active_param";
  }
}

function unfold_fold_table(sArrowId, sTabId)
{
  tmpId = document.getElementById(sArrowId);
  if (tmpId.src.indexOf("param_active.jpg") > 0) {
    toggle('fold', sTabId);
    tmpId.src = "images/param_inactive.jpg";
    tmpId.parentNode.parentNode.className="inactive_param";
  } 
  else {
    toggle('unfold', sTabId);
    tmpId.src = "images/param_active.jpg";
    tmpId.parentNode.parentNode.className="active_param";
  }
}

   
function doParam(title, arrow, tableId, initialActive, refLink) {
  activeClass = "active_param";
  arrowSrc="images/param_active.jpg"

  if(arrow != "") {
    if(initialActive == 0) {
      activeClass = "inactive_param";
      arrowSrc="images/param_inactive.jpg"
    }
  }

  if(arrow != "") {
    document.write("<tr height=\"26\" width=\"100%\" align=\"left\" class="+activeClass+" onclick=\"unfold_fold_table('"+arrow+"', '"+tableId+"');return false\" >");
  } 
  else {
    document.write("<tr height=\"26\" width=\"100%\"  align=\"left\" class="+activeClass+" style=\"cursor:default;\">");
  } 
  document.write("  <td rowspan=\"1\" colspan=\"1\" width=\"20px\" align=\"left\" height=\"26\">");
  if(refLink != "") { 
    document.write("<A HREF=\""+refLink+"\">");
  }
  document.write("   <img src=\"images/1x1.gif\" width=\"20px\" height=\"26\" border=\"0\">");
  if(refLink != "") { 
    document.write("</A>");
  }
  document.write("  </td>");
  if(refLink == "") {
    document.write("  <td rowspan=\"1\" colspan=\"1\" align=\"left\" height=\"26\">"+title+"</td>");
}
else if(refLink != "") { 
    document.write("  <td rowspan=\"1\" colspan=\"1\" align=\"left\" height=\"26\">");
    document.write("   <A HREF=\""+refLink+"\"><div class=\"active_param\"><font color=\"#FFFFFF\">"+title+"&nbsp;</font><font color=\"#0E309B\">"+"&gt;&gt;"+"</font></div></A>");
    document.write("  </td>");
  }
  else {
    document.write("  <td rowspan=\"1\" colspan=\"1\" align=\"left\" height=\"26\"><A HREF=\""+refLink+"\">"+title+"</A></td>");
}
  document.write("  <td rowspan=\"1\" colspan=\"1\">");
  if(arrow != "") {
    document.write(" <img id=\""+arrow+"\" src=\""+arrowSrc+"\"  align=\"right\" width=\"26\" height=\"26\" border=\"0\">");
  }
else if(refLink != "") { 
    document.write("  <A HREF=\""+refLink+"\" width=\"100%\"><img src=\"images/1x1.gif\" width=\"26px\" height=\"26\" border=\"0\"></A></td>");
  }
  else {
    document.write(" <img src=\"images/1x1.gif\" width=\"26px\" height=\"26\" border=\"0\">");
  }
  document.write("  </td>");
  document.write(" </tr>");
  document.write(" <tr>");
  document.write("  <td rowspan=\"1\" colspan=\"3\" width=\"20\" class=blank>");
  document.write("   <img src=\"images/1x1.gif\" width=\"20\" height=\"2\" border=\"0\">");
  document.write("  </td>");
  if(refLink != ""){
    document.write("</A>");
}

  document.write("  </tr>");
}

function splitPrint(escapeTxt, outputLineLength)
{
  var text = escapeTxt.split("\n");
  for (i=0; i<text.length; i++) {
    var line = text[i];
    var startIndex = 0;
    while(outputLineLength < (line.length - startIndex)) {
      // now search for a blank, to add a <BR>
      for(blankIndex = (startIndex + outputLineLength); blankIndex > startIndex; blankIndex--) {
        if(line[blankIndex]==" ") {
          // put the new line in
          document.write(line.slice(startIndex, blankIndex)+"<BR>");
          startIndex = blankIndex + 1;
        }
      }
      if(blankIndex == startIndex) {
        // force new line at outputLineLength
        document.write(line.slice(startIndex, startIndex + outputLineLength)+"<BR>");
        startIndex = + outputLineLength;
      }
    }
    document.write(line.slice(startIndex, line.length)+"<BR>");
  }
}

function splitPrintPRE(txt, outputLineLength)
{
  var text = escapeTxt.split(":");
  alert("text.length: ", text.length);
  for (i=0; i<text.length; i++) {
    var line = text[i];
    var startIndex = 0;
    while(outputLineLength < (line.length - startIndex)) {
      // now search for a blank, to add a <BR>
      for(blankIndex = (startIndex + outputLineLength); blankIndex > startIndex; blankIndex--) {
        if(line[blankIndex]==" ") {
          // put the new line in
          document.write(line.slice(startIndex, blankIndex)+"<BR>");
          startIndex = blankIndex + 1;
        }
      }
      if(blankIndex == startIndex) {
        // force new line at outputLineLength
        document.write(line.slice(startIndex, startIndex + outputLineLength)+"<BR>");
        startIndex = + outputLineLength;
      }
    }
    document.write(line.slice(startIndex, line.length)+"<BR>");
  }
}
