var userID = 0;
var sessionID = 0;
var gstyle = 0;
var memberMode = 0;
var gstyleb = "background: #ffe8bb;color:#000;";
var gstylefb = "background: #ffeeaa;color:#000;";
var gstyleka = "background: #eecc88;color:#000;";
var gstylekp = "background: #ffd583;color:#000;";
var gstylehi = "background: #ffffff;color:#000;";
var gstylebu = "background: #eecc99;color:#000;";

// die nachfolgenden Parameter werden mit refreshAllBGColors() gesetzt.
var backb = "";
var backfb = "";
var backka = "";
var backkp = "";
var backhi = "";
var backbu = "";

var hostName = "";
var revAction = ""; // Enthält die letzte Action
var init_function1 = new Array(); // Sind die Namen der Funktionen, die vor dem Page_Inir durchgeführt werden.
var init_function2 = new Array(); // Sind die Namen der Funktionen, die nach dem Page_Inir durchgeführt werden.
var init_action = new Array(); // Sind die Namen der Actionen, die im iFrame aufgerufen werden
var link_parameter = new Array(); // Obj.id und Obj.arg sind zusätzliche Parameter, die jeder Linkadresse mitgegeben werden.

/*
  Das Test und Documentationsfenster
*/
var jscmdClock = new Date();

function jscmdWrite(text, mode, depth)
{
  if (depth == undefined) depth = 0;
  if (mode == undefined) mode = 0;
  var testm = idf("forum35test");
  if (testm != null && testm != undefined)
  {
    var jscmdClockU = new Date();
    var cu = jscmdClockU - jscmdClock;
    var sek = (cu % 60000) / 1000;
    var msek = String(sek);
    if (sek < 10) msek = "0" + msek;
    var minutes = Math.floor(cu / 60000);
    var t = domText(minutes + ":" + msek);
    var tu = domDiv(t, testm);
    tu.className = "fl";
    tu.style.marginRight = (3 + 10 * depth) + "pt";
    tu.style.width = "50pt";
    var tx = domDiv(domText(text), testm);
    if (mode == 9)
    {
      node2HTML(tx, 200, 0);
    }
    tx.className = "fl";
    if (mode == 0 || mode == 9)
    {
    }
    if (mode == 1)
    {
      tx.style.fontWeight = "bold";
    }
    if (mode == 2)
    {
      tx.style.color = "#a00";
      tx.style.fontWeight = "bold";
    }
    if (mode == 3)
    {
      tx.style.color = "#048";
      tx.style.fontWeight = "bold";
    }
    if (mode == 4)
    {
      tx.style.color = "#a00";
    }
    // dunkler Hintergrund
    if (mode == 5)
    {
      tx.style.background = "#888";
    }
    // kleine Schrift
    if (mode == 6)
    {
      tx.style.fontSize = "8pt";
    }
    // kleine Schrift
    if (mode == 7)
    {
      tx.style.fontSize = "8pt";
      tx.style.fontFamily = "Arial";
      //tx.style.fontFamily = "Courier New";
    }
    // kleine Schrift
    if (mode == 8)
    {
      tx.style.fontSize = "9pt";
      tx.style.fontFamily = "Arial";
      //tx.style.fontFamily = "Courier New";
    }
    // blaue Schrift
    if (mode == 10)
    {
      tx.style.fontSize = "9pt";
      tx.style.fontFamily = "Arial";
      tx.style.color = "#048";
      //tx.style.fontFamily = "Courier New";
    }
    // hellblaue Schrift
    if (mode == 11)
    {
      tx.style.fontSize = "9pt";
      tx.style.fontFamily = "Arial";
      tx.style.color = "#08a";
      //tx.style.fontFamily = "Courier New";
    }
    domClear(testm);
    var scrollTarget = testm.scrollHeight - testm.offsetHeight;
    testm.scrollTop = scrollTarget + 100;
  }
  else
  {
   var tw = getTopWindow();
   if (tw != undefined && tw != null)
   {
     tw35 = tw.document.getElementById("forum35test");
     if (tw35 != null && tw35 != undefined)
     {
       tw.jscmdWrite(text, mode, depth);
     }
     else
     {
       /*
       var w = window.open("","JavaScript Console35","resizable,scrollbars,toolbar,titlebar,personalbar");
       w.innerHeight = 200;
       w.innerWidth = 600;

       var jscmdClockU = new Date();
       var cu = jscmdClockU - jscmdClock;
       var sek = (cu % 60000) / 1000;
       var msek = String(sek);
       if (sek < 10) msek = "0" + msek;
       var minutes = Math.floor(cu / 60000);
       w.document.writeln("<div style=\"font-family: Courier New; font-size: 9pt;\">");
       w.document.writeln(minutes + ":" + msek + " " + text);
       w.document.writeln("</div>");
       */
     }
   }
  }
}

function jscmdBreak()
{
  var testm = idf("forum35test");
  if (testm != null) domBreak(testm);
}


function jscmdShowObject(obj)
{
 erg = "[b]" + obj + "[/b] " + obj.id;
 for (var i in obj)
 {
    try
    {
      erg = erg.concat("^^M^^T"  + i + " = [a]" + obj[i] + "[/a]");
    }
    catch (e)
    {
      erg = erg.concat("^^M^^T" + i + " Zugriff verweigert");
    }
 }
 if (obj != undefined && obj != null)
 {
   if (obj.style != undefined && obj.style != null)
   {
     erg = erg.concat("^^M^^T" + "style: ");
     for (var i in obj.style)
     {
       erg = erg.concat("^^M^^T^^T" + "style." + i + " = " + obj.style[i]);
     }
   }
 }
 jscmdWrite(erg, 9, 0);
}

function makeJSBoard(target)
{

  var testm = idf("forum35test");
  if (testm == undefined)
  {
    var jsBoardC = domFDiv(target);
    jsBoardC.style.height = "200pt";
    jsBoardC.style.width = "840px";
    jsBoardC.style.border = "1pt solid black";
    jsBoardC.style.overflow = "auto";
    var jsBoard = domFDiv(jsBoardC);
    jsBoard.id = "forum35test";
    jsBoard.style.width = "800px";
    jsBoard.style.overflow = "hidden";
    jsBoard.style.fontFamily = "Courier New";
    jsBoard.style.padding = "4pt";
    jsBoard.style.lineHeight = "11pt";
    jscmdWrite("initBlogIndex Start");
  }
}

// DocumentationsFenster
//openDocWindow();
var wDoc;
function openDocWindow()
{
 if (getUserID() == 1)
 {
   wDoc = window.open("","subInfo","resizable,scrollbars,toolbar,titlebar,personalbar");
   try
   {
     wDoc.innerHeight = 200;
     wDoc.innerWidth = 600;
   }
   catch (e)
   {
   }
   //wDoc.document.writeln("<div style=\"font-family: Courier New; font-size: 11pt; width: 400pt; color:#000; background-color: #aaaaaa; padding:10pt; margin-Bottom:10pt;\">");
   //wDoc.document.writeln("<b>Bitte um Verständniss</b><br><br>Wenn dieses Fenster erscheint, dann wird im Forum die Laufzeit von bestimmten Scripts getestet !!!<br>Dieses Fenster hat keine Auswirkung auf die Funktion oder den Ablauf des Programmes.<br><br>Das Fenster kann geschlossen werden, noch besser ist es jedoch, das Fenster zu minimieren, so daß es nicht bei jeder Seite neu entsteht.");
   //wDoc.document.writeln("</div>");
 }
}
// Timer
var benchTime = new Date();
var benchTotal = 0;

function docWindowWrite(startText, farbe, comment, deep)
{
 if (getUserID() == 1)
 {
     if (deep == undefined) deep = 0;
     if (wDoc == undefined) openDocWindow();
     if (wDoc != undefined && wDoc != null)
     {
       try
       {
         wDoc.document.writeln("<div style=\"font-family: Courier New; font-size: 9pt; clear:both; border: 1pt solid black;\"><div style=\"float: left; margin: 0pt; width: " + (250 - 0*deep) + "pt; color:#000; background-color: "+farbe+"; padding: 2pt; padding-left:" + (5*deep) + "\">");
         wDoc.document.writeln(startText + " ");
         wDoc.document.writeln("</div><div style=\"float: left; padding-left: 5pt;\">" + comment + "</div><div style=\"clear: both; height: 1pt;\"></div></div>");
        }
        catch (e)
        {
        }
     }
 }
}

function bench(comment, deep)
{
 if (getUserID() == 1 && benchTime != undefined)
 {
   if (deep == undefined) deep = 0;
   var nowbenchTime = new Date();
   var diff = nowbenchTime - benchTime.getTime();
   benchTotal += diff;
   if (comment == undefined) comment = "";
   docWindowWrite(comment , "#acc",
     lpad(diff, 4, "_") + "mSec (Total: " + lpad(benchTotal, 4, "_") + "mSec)",
     deep);
   benchTime = nowbenchTime;
 }
}

function getServerFromLoc(loc)
{
  var erg = null;
  if (loc == undefined) loc = location;

  var re=/(http:\/\/[^\/]+)\//gi;
  re.lastIndex=0;
  var gto = re.exec(loc);
  if (gto != null)
  {
     erg = gto[1];
  }
  return erg;
}

// Basisfunktionen

function getUserID()
{
  var erg = null;
  try {
    if (default_userID != undefined) erg = default_userID;
  }
  catch (e) {}
  if (erg == null)
  {
    if (window.parent.userID != undefined) erg = window.parent.userID;
    else if (userID != undefined) erg = userID;
  }
  return erg;
}

function getSessionID()
{
  var erg = null;
  try {
    if (default_sessionID != undefined) erg = default_sessionID;
  }
  catch (e) {}
  if (erg == null)
  {
    if (window.parent.sessionID != undefined) erg = window.parent.sessionID;
    else if (sessionID != undefined) erg = sessionID;
  }
  return erg;
}

function getGstyle()
{
  var erg = null;
  try {
    if (default_gstyle != undefined) erg = default_gstyle;
  }
  catch (e) {}
  if (erg == null)
  {
    if (window.parent.gstyle != undefined) erg = window.parent.gstyle;
    else if (gstyle != undefined) erg = gstyle;
  }
  return erg;
}

function getUserInfosFromLoc()
{
  var loc = document.location;
  try
  {
    if (userID == 0 || userID == undefined)
    {
      var re=/userID=(\d+)/gi;
      re.lastIndex=0;
      var gto = re.exec(loc);
      if (gto != null)
      {
        userID = parseInt(gto[1]);
      }
    }
  }
  catch (e) {}

  try
  {
    if (sessionID == 0 || sessionID == undefined)
    {
      var re=/sessionID=([0123456789abcdef]+)/gi;
      re.lastIndex=0;
      var gto = re.exec(loc);
      if (gto != null)
      {
        sessionID = gto[1];
      }
    }
  }
  catch (e) {}

  try
  {
    if (gstyle == 0)
    {
      var re=/gstyle=(\d+)/gi;
      re.lastIndex=0;
      var gto = re.exec(loc);
      if (gto != null)
      {
        gstyle = parseInt(gto[1]);
      }
    }
  }
  catch (e) {}
}

// Die einzelnen Styles

function getGstyleb()
{
  var erg = null;
  try {
    if (default_gstyleb != undefined) erg = default_gstyleb;
  }
  catch (e) {}
  if (erg == null)
  {
    if (window.parent.gstyleb != undefined) erg = window.parent.gstyleb;
    else if (gstyleb != undefined) erg = gstyleb;
  }
  return erg;
}

function getGstylefb()
{
  var erg = null;
  try {
    if (default_gstylefb != undefined) erg = default_gstylefb;
  }
  catch (e) {}
  if (erg == null)
  {
    if (window.parent.gstylefb != undefined) erg = window.parent.gstylefb;
    else if (gstylefb != undefined) erg = gstylefb;
  }
  return erg;
}

function getGstyleka()
{
  var erg = null;
  try {
    if (default_gstyleka != undefined) erg = default_gstyleka;
  }
  catch (e) {}
  if (erg == null)
  {
    if (window.parent.gstyleka != undefined) erg = window.parent.gstyleka;
    else if (gstyleka != undefined) erg = gstyleka;
  }
  return erg;
}

function getGstylekp()
{
  var erg = null;
  try {
    if (default_gstylekp != undefined) erg = default_gstylekp;
  }
  catch (e) {}
  if (erg == null)
  {
    if (window.parent.gstylekp != undefined) erg = window.parent.gstylekp;
    else if (gstylekp != undefined) erg = gstylekp;
  }
  return erg;
}

function getGstylebu()
{
  var erg = null;
  try {
    if (default_gstylebu != undefined) erg = default_gstylebu;
  }
  catch (e) {}
  if (erg == null)
  {
    if (window.parent.gstylebu != undefined) erg = window.parent.gstylebu;
    else if (gstylebu != undefined) erg = gstylebu;
  }
  return erg;
}

function getGstylehi()
{
  var erg = null;
  try {
    if (default_gstylehi != undefined) erg = default_gstylehi;
  }
  catch (e) {}
  if (erg == null)
  {
    if (window.parent.gstylehi != undefined) erg = window.parent.gstylehi;
    else if (gstylehi != undefined) erg = gstylehi;
  }
  return erg;
}

function getMembermode()
{
  var erg = null;
  if (memberMode != undefined) erg = memberMode;
  else if (window.parent.memberMode != undefined) erg = window.parent.memberMode;
  return erg;
}

function path(rmSubDir)
{
  if (rmSubDir == undefined) rmSubDir=0;
  path = document.location;
}

function removeAllChildren(elem)
{
  while (0 < elem.childNodes.length) elem.removeChild(elem.childNodes[0]);
}

function get_parent(node) { 
  return node.parentNode;
}

function get_parents(node) {
  var erg = array(); 
  return node.parentNode;
}

function domTD(arg , parent , className)
{
  var erg = document.createElement("td");
  if (parent != undefined) parent.appendChild(erg);
  if (className != undefined) erg.className = className;
  erg.appendChild(arg);
  return erg;
}


function table(parent , className)
{
  var terg = document.createElement("table");
  if (parent != undefined) parent.appendChild(terg);
  if (className != undefined) terg.className = className;
  var erg = document.createElement("tbody");
  terg.appendChild(erg);
  return erg;
}

function td(parent , className)
{
  var erg = document.createElement("td");
  if (parent != undefined) parent.appendChild(erg);
  if (className != undefined) erg.className = className;
  return erg;
}

function tr(parent , className)
{
  var erg = document.createElement("tr");
  if (parent != undefined)
  {
    if (parent.nodeName == "TABLE") parent = getChildW(parent, "TBODY");
    if (parent != undefined) parent.appendChild(erg);
  }
  if (className != undefined) erg.className = className;
  return erg;
}

function trAfter(element , className)
{
  var erg = undefined;
  while (element.nodeName != "TR" && element.nodeName != "BODY") element = element.parentNode;
  if (element.nodeName == "TR")
  {
    //alert ("RowIndex " + element.rowIndex);
    erg = document.createElement("tr");
    var tbody = element.parentNode;
    var next = element.nextSibling;
    if (next == null) tbody.appendChild(erg);
    else tbody.insertBefore(erg,next);
    if (className != undefined) erg.className = className;
  }
  return erg;
}

function domRef(arg , link , parent , className)
{
  var erg = document.createElement("a");
  if (parent != undefined) parent.appendChild(erg);
  if (className != undefined) erg.className = className;
  erg.href = link;
  erg.appendChild(arg);
  return erg;
}

function domRefAnchor(name , parent , className)
{
  var erg = document.createElement("a");
  if (parent != undefined) parent.appendChild(erg);
  if (className != undefined) erg.className = className;
  erg.name = name;
  return erg;
}

function domDiv(arg , parent , className)
{
  var erg = document.createElement("div");
  if (parent != undefined) parent.appendChild(erg);
  if (className != undefined) erg.className = className;
  erg.appendChild(arg);
  return erg;
}

function domFDiv(parent , className)
{
  var erg = document.createElement("div");
  if (parent != undefined) parent.appendChild(erg);
  if (className != undefined) erg.className = className;
  return erg;
}

function domDivIn(arg , parent , className)
{
  var erg = document.createElement("div");
  if (parent != undefined) parent.appendChild(erg);
  if (className != undefined) erg.className = className;
  erg.style.display = "inline";
  erg.appendChild(arg);
  return erg;
}

function domText(text , parent, mode)
{
  if (mode == undefined) mode = 0;
  var erg = document.createTextNode(text);
  if (0 < mode)
  {
    var kerg;
    if (mode == 1) kerg = document.createElement("b");
    if (mode == 2) kerg = document.createElement("i");
    if (mode == 3) kerg = document.createElement("u");
    if (mode == 4) kerg = document.createElement("span");
    kerg.appendChild(erg);
    erg = kerg;
  }
  if (parent != undefined) parent.appendChild(erg);
  return erg;
}

function domBold(arg , parent, className)
{
  var erg = document.createElement("b");
  if (parent != undefined) parent.appendChild(erg);
  if (className != undefined) erg.className = className;
  erg.appendChild(arg);
  return erg;
}

function domItalic(arg , parent, className)
{
  var erg = document.createElement("i");
  if (parent != undefined) parent.appendChild(erg);
  if (className != undefined) erg.className = className;
  erg.appendChild(arg);
  return erg;
}

function domUnderline(arg , parent)
{
  var erg = document.createElement("u");
  if (parent != undefined) parent.appendChild(erg);
  erg.appendChild(arg);
  return erg;
}

function domWarning(arg , parent)
{
  var erg = document.createElement("b");
  erg.style.color = "#aa0000";
  if (parent != undefined) parent.appendChild(erg);
  erg.appendChild(arg);
  return erg;
}

function domImg(src , parent , className)
{
  var erg = document.createElement("img");
  if (parent != undefined) parent.appendChild(erg);
  if (className != undefined) erg.className = className;
  erg.src = src;
  return erg;
}

function domBreak(parent)
{
  var erg = document.createElement("br");
  if (parent != undefined) parent.appendChild(erg);
  return erg;
}

function domClear(parent)
{
  var erg = document.createElement("br");
  erg.style.clear = "both";
  if (parent != undefined) parent.appendChild(erg);
  return erg;
}

function domClearD(parent)
{
  // Manchmal funktioniert das domClear oben nicht wie vorgesehen
  // dann mal das domClear hier versuchen...
  var erg = document.createElement("div");
  erg.className = "fl";
  erg.style.clear = "both";
  erg.style.height = "1px";
  erg.style.width = "1px";
  if (parent != undefined) parent.appendChild(erg);
  return erg;
}

function domClearRule(parent)
{
  // Manchmal funktioniert das domClear oben nicht wie vorgesehen
  // dann mal das domClear hier versuchen...
  var erg = document.createElement("div");
  //erg.className = "fl";
  erg.style.clear = "both";
  erg.style.height = "1px";
  erg.style.lineHeight = "1px";
  if (parent != undefined) parent.appendChild(erg);
  return erg;
}

function domHRule(parent)
{
  var erg = document.createElement("hr");
  erg.style.clear = "both";
  if (parent != undefined) parent.appendChild(erg);
  return erg;
}

function domInput(text,parent,className)
{
  return ddomInput(document,text,parent,className);
}


function ddomInput(doc,text,parent,className)
{
  var erg = doc.createElement("input");
  if (parent != undefined) parent.appendChild(erg);
  if (className != undefined) erg.className = className;
  erg.defaultValue = text;
  erg.value = text;
  return erg;
}

function domInputName(text,name,parent,className)
{
  // This is a workaround for the IE, which only accepts Attributs via create
  //var erg = document.createElement("<input name=\"" + name + "\">");
  var erg = document.createElement("input");
  erg.name = name;
  if (erg == undefined || erg.type == undefined)
  {
    var erg = document.createElement("input");
    erg.name = name;
  }
  if (parent != undefined) parent.appendChild(erg);
  if (className != undefined) erg.className = className;
  erg.defaultValue = text;
  erg.value = text;
  return erg;
}

function domTextarea(text,parent,className)
{
  return ddomTextarea(document,text,parent,className);
}

function ddomTextarea(doc,text,parent,className)
{
  var erg = doc.createElement("textarea");
  if (parent != undefined) parent.appendChild(erg);
  if (className != undefined) erg.className = className;
  erg.value = text;
  return erg;
}

function domCheckbox(value, parent, checked, className)
{
  var erg = document.createElement("input");
  erg.type = "checkbox";
  if (parent != undefined) parent.appendChild(erg);
  if (value == undefined) value="on";
  if (className != undefined) erg.className = className;
  erg.checked = (checked==true)?true:false;
  erg.value = value;
  return erg;
}


function domCheckboxName(value, name, parent, checked, className)
{
  var erg = document.createElement("input");
  erg.name = name;
  erg.type = "checkbox";
  if (parent != undefined) parent.appendChild(erg);
  if (value == undefined) value="on";
  if (className != undefined) erg.className = className;
  erg.checked = (checked==true)?true:false;
  erg.value = value;
  return erg;
}

function domRadioButton(value, name, parent, checked, className)
{
  var erg = document.createElement("input");
  erg.name = name;
  erg.type = "radio";
  if (parent != undefined) parent.appendChild(erg);
  if (value == undefined) value="on";
  if (className != undefined) erg.className = className;
  erg.checked = (checked==true)?true:false;
  erg.value = value;
  return erg;
}

function domSelect(options, selected, parent, className)
{
  // Warning, the preselected Values and Styles
  //   may change in Opera until SelectionField is displayed...
  var erg = document.createElement("select");
  erg.size=1;
  erg.multiple=false;
  erg.name = "???";
  if (parent != undefined) parent.appendChild(erg);
  if (className != undefined) erg.className = className;
  erg.length = options.length;
  for (var i = 0; i < options.length; i++)
  {
    var opt = new Option(options[i],i,(i==selected));
    if (i==selected)
    {
      opt.defaultSelected = true;
      opt.selected = true;
    }
    erg[i] = opt;
  }
  erg.value = selected;
  erg.selected = selected;
  try
  {
    erg.selectedIndex = selected;
  }
  catch(e)
  {
  }
  return erg;
}


function domSelectName(options, selected, name, parent, className)
{
  // Warning, the preselected Values and Styles
  //   may change in Opera until SelectionField is displayed...
  //   This is a workaround for the IE, which only accepts Attributs via create
  //var erg = document.createElement("<select name=\"" + name + "\">");
  var erg = document.createElement("select");
  erg.name = name;
  //if (erg == undefined || erg.type == undefined)
  //{
  //  var erg = document.createElement("select");
  //  erg.name = name;
  //}
  erg.size=1;
  erg.multiple=false;
  if (parent != undefined) parent.appendChild(erg);
  if (className != undefined) erg.className = className;
  erg.length = options.length;
  for (var i = 0; i < options.length; i++)
  {
    var opt = new Option(options[i],i,(i==selected));
    if (i==selected)
    {
      opt.defaultSelected = true;
      opt.selected = true;
    }
    erg[i] = opt;
  }
  erg.value = selected;
  erg.selected = selected;
  erg.selectedIndex = selected;
  return erg;
}

function domSelectNameValue(optionsArray, valueArray, selected, name, parent, className)
{
  // Warning, the preselected Values and Styles
  //   may change in Opera until SelectionField is displayed...
  //   This is a workaround for the IE, which only accepts Attributs via create
  //var erg = document.createElement("<select name=\"" + name + "\">");
  var erg = document.createElement("select");
  erg.name = name;
  //if (erg == undefined || erg.type == undefined)
  //{
  //  var erg = document.createElement("select");
  //  erg.name = name;
  //}
  erg.size=1;
  erg.multiple=false;
  var length = optionsArray.length;
  if (length < valueArray.length) length = valueArray.length;
  if (parent != undefined) parent.appendChild(erg);
  if (className != undefined) erg.className = className;
  erg.length = length;
  var selectedIndex = 0;
  for (var i = 0; i < length; i++)
  {
    var opt = new Option(optionsArray[i],valueArray[i],(valueArray[i]==selected));
    if (valueArray[i]==selected)
    {
      opt.defaultSelected = true;
      opt.selected = true;
    }
    erg[i] = opt;
    if (valueArray[i]==selected) selectedIndex = i;
  }
  erg.value = selected;
  erg.selected = selected;
  erg.selectedIndex = selectedIndex;
  return erg;
}

function domForm(name,ref,parent,className)
{
  // <form action="" method="" target=""></form>
  var erg = document.createElement("form");
  if (parent != undefined) parent.appendChild(erg)
  else document.body.appendChild(erg);
  erg.encoding = "multipart/form-data";
  erg.method = "post";
  //erg.target = ref;
  erg.action = ref;
  erg.name = name;
  if (className != undefined) erg.className = className;
  return erg;
}

function domCopy(elem, substitute)
{
  var erg = null;
  if (elem != undefined) erg = elem.cloneNode(15);
  else
  {
    if (substitute != undefined) erg = domWarning(domText(substitute));
    else erg = domWarning(domText("***Invalid Argument***"));
  }
  return erg;
}

function domTable(parent, border, cellSpacing)
{
  if (border == undefined) border="1";
  if (cellSpacing == undefined) cellSpacing="0";
  var table = document.createElement("table");
  if (parent != undefined) parent.appendChild(table);
  table.border = border;
  table.cellSpacing = cellSpacing;
  var tableBody = document.createElement("tbody");
  table.appendChild(tableBody);
  return table;
}


function idf(identifier)
{
  return document.getElementById(identifier);
}


function idn(identifier)
{
  var erg = undefined;
  var na = document.getElementsByName(identifier);
  if (0 < na.length) erg = na[0];
  return erg;
}

function showOffD(identifier)
{
  var d = document.getElementById(identifier);
  if (d != undefined && d != null)
  {
    d.style.position = "absolute";
    d.style.left = "-2000px";
    d.style.display = "none";
  }
}

function showOnD(identifier)
{
  var d = document.getElementById(identifier);
  if (d != undefined && d != null)
  {
    d.style.position = "relative";
    d.style.left = "0px";
    d.style.display = "";
  }
}

function idDivArray(identifier)
{
  alp = document.getElementsByTagName("div");
  erg = new Array();
  var re=/([^-]*)-(.*)/gi;
  for (var i=0; i < alp.length; i++)
  {
    var nid = alp[i].id;
    re.lastIndex=0;
    var gto = re.exec(nid);
    if (gto != null)
    {
      if (gto[1]==identifier)
      {
        var drelemn = new Object;
        drelemn.elemID = als[i].id;
        erg.push(drelemn);
      }
    }
  }
  return erg;
}

/*
  Scrollt zu dem entsprechden Element
  mode
    = 0    Element ist in der Mitte
    = 1    Element ist oben
    = 2    Element ist unten
*/

var goElemID = null;
var goMode = 0;
var goTag = "";

function goDelayed(tid, tagName, mode)
{
  /*
    Verzögerter Aufruf um Sicherzustellen, daß der Bildschirm aufgebaut ist.
  */
  if (mode == undefined) mode = 0;
  if (tagName == undefined) tagName = "";
  goMode = mode;
  goElemID = tid;
  goTag = tagName;
  window.setTimeout("goZentral()",200);
}

function go(tid, tagName, mode)
{
  if (mode == undefined) mode = 0;
  if (tagName == undefined) tagName = "";
  goMode = mode;
  goElemID = tid;
  goTag = tagName;
  goZentral();
}

function goZentral()
{
  var target = document.getElementById(goElemID);
  if (target != undefined)
  {
    //showObject (target);
    //showHTML (target.parentNode.parentNode );
    if (goMode == undefined) goMode = 0;
    if (goTag != "")
      while (target.nodeName != goTag && target.nodeName != "BODY")
      {
        //alert (target.nodeName + " " + target.id + " " + target.offsetTop + " " + target.scrollHeight);
        target = target.parentNode;
      }
    var sp = 0;

    //showObject (target);
    //showHTML (target);
    if (goMode == 0) sp = target.offsetTop - (document.body.clientHeight - target.clientHeight) / 2;
    if (goMode == 1) sp = target.offsetTop;
    if (goMode == 2)
    {
      sp = target.offsetTop - document.body.clientHeight + target.scrollHeight;
      //if (document.body.bottomMargin != undefined) sp += parseInt(document.body.bottomMargin);
    }
    if (sp < 0) sp = 0;
    window.scrollTo(0,sp);
  }
}


/************************************************************
 oh so sorrely missed that
************************************************************/

function array_del(ar, index)
{
  if (0<ar.length)
  {
    if (index==0) { ar=ar.slice(1,ar.length); }
    else
    if (index==ar.length-1) { ar=ar.slice(0,ar.length-1); }
    else
    if (0<index && index<ar.length-1)
    {
      var ra=ar.slice(0,index);
      var rb=ar.slice(index+1,ar.length);
      ar=ra.concat(rb);
    }
  }
  return ar;
}

/************************************************************

************************************************************/

function writeTextfield(name, data)
{
  // Schreibt in ein Textfeld die entsprechenden Daten
  var spt = document.getElementsByName(name);
  if (0 < spt.length)
    spt[0].value = data;
}

function textDataIndex(textData, index)
{
 // Alle Daten stehen als Text-Childnodes in dem HTML-Objekt textData
 // Es wird also überprüft, ob das Element vom nodeType 3 ist.
 // Die Daten werden aufgebaut in der Form Data1<br>Data2<br>Data3<br>Data4<br>...
 // Getrennt werden die Daten durch <br> oder <hr>
 if (index != undefined) mindex = 2 * index;
 else mindex = 0;
 erg = 0;
 child = textData.childNodes[mindex];
 if (child != undefined)
 {
   if (child.nodeType == 3)
   {
     erg = child.data;
   }
 }
 return erg;
}

// Sucht den Texteintrag mit dem entsprechenden Index
// Die Texte sind aufgebaut in der Form
//   Eintrag1<br>Eintrag2<br>Eintrag3<br>Eintrag4<br>Eintrag5<br>
// Wobei folgendes Besonderheit berücksichtigt werden muß
//   Eintrag1<br><br>Eintrag3
// Der zweite Eintrag ist leer, von der Indexlogik fehlt der Knoten
// Es muß also ein fehlender Knoten als leerer Eintrag erkannt werden
function textEntry(node, index)
{
  var erg = "";
  var iner = 0;
  var i = 0;
  var b = true;
  while (b)
  {
    if (node.childNodes[i].nodeType == 3)
    {
      if (iner == index)
      {
        erg = node.childNodes[i].data;
        b = false;
      }
      // Das <br> oder <hr> am Ende
      i++;
    }
    iner++;
    i++;
    if (node.childNodes.length <= i) b = false;
  }
  return erg;
}

function setSystempar(tuserID, tsessionID, tgstyle, tmemberMode)
{
  userID = tuserID;
  sessionID = tsessionID;
  gstyle = tgstyle;
  memberMode = tmemberMode;
  window.parent.userID = tuserID;
  window.parent.sessionID = tsessionID;
  window.parent.gstyle = tgstyle;
  window.parent.memberMode = tmemberMode;
}

function setStyles1(pargstyleb, pargstylefb, pargstylebu)
{
 gstyleb = pargstyleb;
 gstylefb = pargstylefb;
 gstylebu = pargstylebu;
}

function setStyles2(pargstyleka, pargstylekp, pargstylehi)
{
 gstyleka = pargstyleka;
 gstylekp = pargstylekp;
 gstylehi = pargstylehi;
}

function setHost(hName)
{
 hostName = hName;
}

function styleOfBackground(arg)
{
  var erg = "";
  var re=/background:\s*([^;]*)/gi;
  re.lastIndex=0;
  var gto = re.exec(arg);
  if (gto != null)
  {
    erg = gto[1];
  }
  return erg;
}

function styleColor(arg)
{
  var erg = "";
  var re=/color:\s*([^;]*)/gi;
  re.lastIndex=0;
  var gto = re.exec(arg);
  if (gto != null)
  {
    erg = gto[1];
  }
  return erg;
}

// Setzt Hintergrundfarbe für alle Knoten und Kinder rekursiv
function backgroundRek (node, color)
{
  if (node != undefined && node != null && node.nodeType != 3)
  {
    for (var i=0; i<node.childNodes.length; i++) backgroundRek (node.childNodes[i], color);
    node.style.background = color;
  }
}

/*************************
  Events
*************************/


function LinkOn1(e)
{
  var node = getEventTarget(e);
  node.style.color = "#44f";
  node.style.fontWeight = "bold";
}

function LinkOn2(e)
{
  var node = getEventTarget(e);
  node.style.borderLeft = "5pt solid black";
  node.style.paddingLeft = "2pt";
}

function LinkOn3(e)
{
  var node = getEventTarget(e);
  node.style.borderBottom = "2pt solid black";
}

function LinkOn4(e)
{
  var node = getEventTarget(e);
  node.style.color = "#f00";
}

function LinkOn5(e)
{
  var node = getEventTarget(e);
  node.style.color = "#08F";
}

function LinkOff1(e)
{
  var node = getEventTarget(e);
  node.style.color = "#000";
  node.style.fontWeight = "normal";
}

function LinkOff2(e)
{
  var node = getEventTarget(e);
  node.style.borderLeft = "0pt solid black";
  node.style.paddingLeft = "0pt";
}

function LinkOff3(e)
{
  var node = getEventTarget(e);
  node.style.borderBottom = "0pt solid black";
}

function LinkOff4(e)
{
  var node = getEventTarget(e);
  node.style.color = "#000";
}

function LinkOff5(e)
{
  var node = getEventTarget(e);
  node.style.color = "#000";
}

function eventLink(node,mode)
{
  if (mode == undefined) mode = 0;
  if (mode == 0)
  {
    addEvent(node,"mouseover",LinkOn1);
    addEvent(node,"mouseout",LinkOff1);
  }
  if (mode == 1)
  {
    addEvent(node,"mouseover",LinkOn2);
    addEvent(node,"mouseout",LinkOff2);
  }
  if (mode == 2)
  {
    addEvent(node,"mouseover",LinkOn3);
    addEvent(node,"mouseout",LinkOff3);
  }
  if (mode == 3)
  {
    addEvent(node,"mouseover",LinkOn4);
    addEvent(node,"mouseout",LinkOff4);
  }
  if (mode == 4)
  {
    addEvent(node,"mouseover",ButtonEnter);
    addEvent(node,"mouseout",ButtonLeave);
  }
  if (mode == 5)
  {
    addEvent(node,"mouseover",LinkOn5);
    addEvent(node,"mouseout",LinkOff5);
  }
}

function getEventTarget(e) {
return (e.currentTarget) ? e.currentTarget :((e.target) ? e.target : e.srcElement);
}

function ButtonEnter(e)
{
  var node = getEventTarget(e);
  node.style.backgroundColor = styleOfBackground(gstylehi);
}

function ButtonLeave(e)
{
  var node = getEventTarget(e);
  node.style.backgroundColor = styleOfBackground(gstylebu);
}

function ButtonBEnter(e)
{
  var node = getEventTarget(e);
  node = getParentStartingWith(node, "Button");
  node.style.backgroundColor = styleOfBackground(getGstylehi());
}

function ButtonBLeave(e)
{
  var node = getEventTarget(e);
  node = getParentStartingWith(node, "Button");
  node.style.backgroundColor = styleOfBackground(getGstylebu());
}

function addEvent(obj, evType, fn) {
  if (obj.addEventListener)
  {
    obj.addEventListener(evType, fn, false);
    return true;
  }
  else if (obj.attachEvent)
  {
     var r = obj.attachEvent("on"+evType, fn);
     return r;
  }
  else
  {
    return false;
  }
}

function removeEvent(obj, evType, fn) {
  if (obj.addEventListener)
  {
    obj.removeEventListener(evType, fn, false);
    return true;
  }
  else if (obj.attachEvent)
  {
     var r = obj.detachEvent("on"+evType, fn);
     return r;
  }
  else
  {
    return false;
  }
}

// Sucht den übergeordneten Knoten, der mit dem Kürzel 'Start' beginnt
function getParentStartingWith(node, start)
{
  var re=/(.*?)\-(.*)/gi;
  b = true;
  while (b)
  {
    var nid = node.id;
    re.lastIndex=0;
    var gto = re.exec(nid);
    if (gto != null)
    {
      if (gto[1]==start) b = false;
    }
    if (node.tagName == "BODY") b = false;
    if (b) node = node.parentNode;
    if (node == undefined) b = false;
  }
  return node;
}

// Setzt ein Event für alle Knoten und Unterknoten
function addRekEvent (node, event, fn)
{
  addEvent(node, event, fn);
  for (var i=0; i<node.childNodes.length; i++) addRekEvent(node.childNodes[i], event, fn);
}

/*******************************
  Benefits for Text-Input
*******************************/

function smiliePanel(target)
{
  // gibt eine Div mit einer Liste von Smilies zurück
  // target ist die TextArea
  var erg = domFDiv();
  smilie(erg,target,":-)))","happy");
  smilie(erg,target,":-))","harlol");
  smilie(erg,target,":-)","icon_lol");
  smilie(erg,target,":-P","icon_razz");
  smilie(erg,target,";-))","glueck");
  smilie(erg,target,";-)","zwinker2");
  smilie(erg,target,":-D","icon_biggrin");
  smilie(erg,target,":kopfpatsch:","kopfpatsch");
  smilie(erg,target,":--:","schlecht");
  smilie(erg,target,":++:","daumen");
  smilie(erg,target,":angel:","ANGEL");
  smilie(erg,target,":-b","BOUNCE2");
  smilie(erg,target,":-k","kiffer77");
  smilie(erg,target,";-!","smokin");
  smilie(erg,target,":hug:","hug");
  smilie(erg,target,":kiss:","kiss2");
  smilie(erg,target,":lieb:","troest");
  smilie(erg,target,":wink:","wave");
  smilie(erg,target,":-u","lew");
  smilie(erg,target,":-(((","frust2");
  smilie(erg,target,":-((","heul");
  smilie(erg,target,":-(","icon_frown");
  smilie(erg,target,":-??","icon_confused");
  smilie(erg,target,":-?","help");
  smilie(erg,target,";-?","shrug");
  smilie(erg,target,":-o","icon_eek");
  smilie(erg,target,":-/","grummel");
  smilie(erg,target,":-V","icon_evil");
  smilie(erg,target,":-v","icon_mad");
  smilie(erg,target,":-m","butt");
  smilie(erg,target,":-f","fu0ck");
  smilie(erg,target,":-g","gaehn");
  smilie(erg,target,":-!","messy");
  smilie(erg,target,":gr:","madpunchy");
  smilie(erg,target,":grr:","wurf");
  smilie(erg,target,":grrr:","tomate");
  smilie(erg,target,":-x","oops");
  smilie(erg,target,":-a","puke");
  smilie(erg,target,":-q","rotwerd");
  smilie(erg,target,":-r","outahere");
  return erg;
}

var smilieListe = new Array();

function smilie(parent,target,icon,symbol)
{
  var smil = domImg("./Smilie/"+symbol+".gif" , parent);
  addEvent(smil, "click", addSmilie);
  nSmilie = new Object;
  nSmilie.elem = smil;
  nSmilie.target = target;
  nSmilie.text = icon;
  smilieListe.push(nSmilie);
}

function addSmilie(e)
{
  var node = getEventTarget(e);
  var index = 0;
  for (i=0; i < smilieListe.length; i++)
  {
    if (node == smilieListe[i].elem) index = i;
  }
  var target = smilieListe[index].target;
  target.value += smilieListe[index].text;
}

var formPanel = Array();
var formPanelBId = 0;
function form1Panel(target, mode)
{
  // gibt eine Div mit Formatierungsmöglichkeiten wieder
  // Target ist die TextArea
  // Soll für viele TextPanels möglich sein
  // Mindestbreite etwa 350px
  var erg = domFDiv();
  var tn = new Object();
  formPanelBId = formPanelBId + 1;
  tn.id = formPanelBId;
  tn.choices = Array();
  formPanel.push(tn);
  var t = domTable(erg, 0, 0);
  var headRow = tr(t);
  var headCol = td(headRow, "tinytable");
  headCol.colSpan = 2;
  headCol.style.textAlign = "center";

  var butF = domRef(domText ("Schrift") , "JavaScript: previewChoice(" + formPanelBId + ",\"text 1\")" , headCol, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Format") , "JavaScript: previewChoice(" + formPanelBId + ",\"text 2\")" , headCol, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Datum") , "JavaScript: previewChoice(" + formPanelBId + ",\"date\")" , headCol, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Grafik") , "JavaScript: previewChoice(" + formPanelBId + ",\"graphic\")" , headCol, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  /*
  domBreak(headCol);
  var butF = domRef(domText (" - ") , "JavaScript: previewChoice(" + formPanelBId + ",\"text 1\")" , headCol, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText (" - ") , "JavaScript: previewChoice(" + formPanelBId + ",\"text 1\")" , headCol, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText (" - ") , "JavaScript: previewChoice(" + formPanelBId + ",\"text 1\")" , headCol, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText (" - ") , "JavaScript: previewChoice(" + formPanelBId + ",\"text 1\")" , headCol, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  */
  //domText ("Header",headCol);

  var mainRow = tr(t);
  var preview = td(mainRow, "tinytable");
  preview.style.textAlign = "center";

  // Textvorschau
  var preview1 = domFDiv(preview);
  var previewTArea = domTextarea("[h4]Bitte durchlesen[/h]Auf dieser Web-Seite können Pseudoformate verwendet werden.\n\nUm eine Übersicht über die verschiedenen Formate zu kriegen kann man an verschiedenen Stellen dieses Eingabefeld aufrufen.\n\nMit der Taste [u]Eingabe[/u] kann man sich den Beispieltext anschauen.\n\nMit der Taste [u]Löschen[/u] wird der Beispieltext gelöscht.\n\nMit der Taste [u]Vorschau[/u] wird der aktuell eingegebene Text umgewandelt und angezeigt.\n\nMit den Tasten über dem Eingabefeld können verschiedene Format-Bereiche ausgewählt werden.",preview1);
  previewTArea.style.background = styleOfBackground(gstylefb);
  previewTArea.style.fontFamily = "Arial";
  //previewTArea.wrap="virtual";
  tn.target = previewTArea;
  tn.targetView = preview1;
  previewTArea.style.width = "180pt";
  previewTArea.style.height = "145pt";
  previewTArea.style.overflow = "auto";

  var preview2 = domFDiv(preview);
  tn.prev = preview2;
  preview2.style.textAlign = "left";
  preview2.style.border = "1pt solid black";
  preview2.style.width = "180pt";
  preview2.style.height = "145pt";
  preview2.style.overflow = "auto";
  preview2.style.position = "absolute";
  preview2.style.left = "-2000px";

  // Rechts
  var choice = td(mainRow, "tinytable");
  choice.rowSpan = 2;

  // Text 1
  var mChoice = domFDiv(choice);
  mChoice.style.width = "60pt";
  mChoice.id = "text 1";
  tn.choices.push(mChoice);
  var butF = domRef(domText ("Fett") , "JavaScript: previewInsert(" + formPanelBId + ",\"[b]fett[/b]\\n\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Linie") , "JavaScript: previewInsert(" + formPanelBId + ",\"[u]Unterlinie[/u]\\n\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Schräg") , "JavaScript: previewInsert(" + formPanelBId + ",\"[i]schräg[/i]\\n\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Zeitung") , "JavaScript: previewInsert(" + formPanelBId + ",\"[r]Times New Roman[/r]\\n\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Rot") , "JavaScript: previewInsert(" + formPanelBId + ",\"[w]Farbe Rot[/w]\\n\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Groß") , "JavaScript: previewInsert(" + formPanelBId + ",\"[z]große Schrift[/z]\\n\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Klein") , "JavaScript: previewInsert(" + formPanelBId + ",\"[zz]kleine Schrift[/zz]\\n\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Link") , "JavaScript: previewInsert(" + formPanelBId + ",\"[link red=.]Den Links können Farben zugewiesen werden, zugelassen sind red green blue und dark[/link]\\n\\n[link dark red=.]dark dunkelt alle anderen Farben ab. Die Farben können kombiniert werden, red und green ergibt gelb[/link]\\n\\n[link dark green noline=.]noline erzeugt einen Link ohne Unterstrich[/link]\\n\\n[link dark green blue noline=.]wichtig ist, die Linkadresse darf nicht in Anführungszeichen stehen[/link]\\n\\n[link green red noline=.]Verlinkt werden können Grafiken und Smilies ;-))[/link]\\n\\n\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Farbe") , "JavaScript: previewInsert(" + formPanelBId + ",\"[cola]FarbeFarbeFarbe[/col]\\n[colb]FarbeFarbeFarbe[/col]\\n[colc]FarbeFarbeFarbe[/col]\\n[cold]FarbeFarbeFarbe[/col]\\n[cole]FarbeFarbeFarbe[/col]\\n[colm]FarbeFarbeFarbe[/col]\\n[coln]FarbeFarbeFarbe[/col]\\n\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Überschrift") , "JavaScript: previewInsert(" + formPanelBId + ",\"[h0]Wir holen den Titel[/h]\\n[h1]Wir holen den Titel[/h]\\n[h2]Wir holen den Titel[/h]\\n[h3]Wir holen den Titel[/h]\\n[h4]Wir holen den Titel[/h]\\n[h5]Überschrift[/h]\\n[h6]Wir holen den Titel[/h]\\n[h2][cola]bunte Überschrift[/col] :-)[/h]\\n\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Linie") , "JavaScript: previewInsert(" + formPanelBId + ",\"\\n---\\nEntscheident für die Trennlinie ist, daß die --- in einer eigenen Zeile stehen und [u]keine[/u] Leerzeichen hinter den --- sind.\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);

  // Text 2
  var mChoice = domFDiv(choice);
  mChoice.style.width = "60pt";
  mChoice.style.position = "absolute";
  mChoice.style.left = "-2000px";
  mChoice.id = "text 2";
  tn.choices.push(mChoice);
  /*
  var butF = domRef(domText ("Liste") , "JavaScript: previewInsert(" + formPanelBId + ",\"[li5]Listenelement, das Listenelement wird eingerückt. Wieweit, das bestimmt die Zahl im ersten Tag[/li]\\n\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  */
  var butF = domRef(domText ("Tabelle") , "JavaScript: previewInsert(" + formPanelBId + ",\"[taba]linke Seite[||]rechte Seite[/tab]\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Kasten") , "JavaScript: previewInsert(" + formPanelBId + ",\"[framer=60_1]Hallo :-b\\ndas ist ein Rahmen[/frame]Der Rahmen ermöglicht, kleine Kästchen links oder rechts in den Text einzubinden. Das 'Tag' dazu ist framer oder framel, wobei r oder l für rechts oder links steht.\\n\\n[framel=80_0][h2]Hallo[/h]hier geht wieder alles[/frame]Als Parameter werden 0-2 Zahlen getrennt durch einen Unterstrich übergeben.\\nDie erste Zahl steht für die Breite. Die zweite Zahl für die Rahmengröße.\\n---\\n\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Rahmen") , "JavaScript: previewInsert(" + formPanelBId + ",\"[joyc]Titel[||]Es gibt eine ganze Reihe von Hintergründen. Der Hintergrund wird mit dem Buchstaben hinter dem ersten 'joy' ausgesucht. Es gibt eine größere Anzahl von kleinen und großen Buchstaben.\\nDer Titel wird getrennt vom Text durch ~[~||].\\n\\n[b]Tipp[/b] Man sollte über die Vorschau kontrollieren, ob das Kästchen von der Größe her für den Text reicht.[/joy]\\n---\\n\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);

  var butF = domRef(domText ("Text") , "JavaScript: previewFormatInsert(" + formPanelBId + ")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  butF.style.marginTop = "5pt";
  eventLink(butF,4);

  var array_fontSize = Array("8pt","9pt","10pt","11pt","12pt","14pt","16pt","20pt");
  var sel_fontSize = domSelect(array_fontSize, 2, mChoice, "buttonFL");
  sel_fontSize.style.background = styleOfBackground(gstylebu);
  sel_fontSize.name = "fPanel-s-" + formPanelBId;
  var array_fontColor = Array("schwarz","rot","grün","blau","weiß","orange","cyan","gelb");
  var sel_fontColor = domSelect(array_fontColor, 0, mChoice, "buttonFL");
  sel_fontColor.style.background = styleOfBackground(gstylebu);
  sel_fontColor.name = "fPanel-c-" + formPanelBId;
  var array_lineHeight = Array("Abstand+0","Abstand-1","Abstand-2","Abstand+1");
  var sel_lineHeight = domSelect(array_lineHeight, 0, mChoice, "buttonFL");
  sel_lineHeight.style.background = styleOfBackground(gstylebu);
  sel_lineHeight.name = "fPanel-h-" + formPanelBId;
  var array_dir = Array("linksbündig","mitte","rechtsbündig");
  var sel_dir = domSelect(array_dir, 0, mChoice, "buttonFL");
  sel_dir.style.background = styleOfBackground(gstylebu);
  sel_dir.name = "fPanel-d-" + formPanelBId;
  var array_pad = Array("Rand 0","Rand 10","Rand 20","links 10");
  var sel_pad = domSelect(array_pad, 0, mChoice, "buttonFL");
  sel_pad.style.background = styleOfBackground(gstylebu);
  sel_pad.name = "fPanel-p-" + formPanelBId;
  var array_font = Array("Arial","Teletype","Roman","Comic","Georgia","Lucida","Verdana");
  var sel_font = domSelect(array_font, 0, mChoice, "buttonFL");
  sel_font.style.background = styleOfBackground(gstylebu);
  sel_font.name = "fPanel-f-" + formPanelBId;


  // Datum
  var mChoice = domFDiv(choice);
  mChoice.style.width = "60pt";
  mChoice.style.position = "absolute";
  mChoice.style.left = "-2000px";
  mChoice.id = "date";
  tn.choices.push(mChoice);

  var butF = domRef(domText ("Fix-Datum") , "JavaScript: previewInsertDate(" + formPanelBId + ",0)", mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Rel-Datum") , "JavaScript: previewInsertDate(" + formPanelBId + ",1)", mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);

  //domSelect(options, selected, parent, className);
  var d = new Date();
  dyear = d.getYear();
  if (dyear < 1900) dyear += 1900;
  dmonth = d.getMonth();
  ddate = d.getDate();
  dhour = d.getHours();
  dminutes = d.getMinutes();
  dseconds = d.getSeconds();

  var array_min = Array();
  var array_hour = Array();
  var array_day = Array();
  var array_month = Array("jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","dez");
  var array_year = Array();
  for (var i=1; i < 32; i++) array_day.push(i);
  for (var i=dyear-30; i < dyear+3; i++) array_year.push(i);
  for (var i=0; i < 25; i++) array_hour.push(i + ":00");
  for (var i=0; i < 60; i += 5) array_min.push("..:" + lpad(i));
  var sel_day = domSelect(array_day, ddate-1, mChoice, "buttonFL");
  sel_day.style.background = styleOfBackground(gstylebu);
  sel_day.name = "iPanel-d-" + formPanelBId;
  sel_day.style.marginTop = "5pt";
  var sel_month = domSelect(array_month, dmonth, mChoice, "buttonFL");
  sel_month.style.background = styleOfBackground(gstylebu);
  sel_month.name = "iPanel-m-" + formPanelBId;
  var sel_year = domSelectNameValue(array_year, array_year, dyear, "hhh", mChoice, "buttonFL");
  sel_year.style.background = styleOfBackground(gstylebu);
  sel_year.name = "iPanel-y-" + formPanelBId;
  var sel_hour = domSelect(array_hour, dhour, mChoice, "buttonFL");
  sel_hour.style.background = styleOfBackground(gstylebu);
  sel_hour.style.marginTop = "5pt";
  sel_hour.name = "iPanel-h-" + formPanelBId;
  var sel_min = domSelect(array_min, dminutes, mChoice, "buttonFL");
  sel_min.style.background = styleOfBackground(gstylebu);
  sel_min.name = "iPanel-i-" + formPanelBId;


  // Grafik
  var mChoice = domFDiv(choice);
  mChoice.style.width = "60pt";
  mChoice.style.position = "absolute";
  mChoice.style.left = "-2000px";
  mChoice.id = "graphic";
  tn.choices.push(mChoice);

  var butF = domRef(domText ("Ausrichtung") , "JavaScript: previewInsert(" + formPanelBId + ",\"Für das einbinden einer Grafik muß die Webadresse der Grafik bekannt sein. Die Webadresse kann man meist über das Kontextmenü (rechte Maustaste über den Bild drücken) kopieren.\\n\\nDie Grafik wird normalerweise in einer eigenen Zeile dargestellt[img]" + getServerFromLoc() + "/hilfe/sniff06.gif[/img]\\nMan kann jedoch auch die Grafik in die Zeile einbinden[imgi]" + getServerFromLoc() + "/hilfe/event26.gif[/img], das ist vorallem sinnvoll bei Smilies.\\n\\nOft gebraucht wird eine Ausrichtung der Grafik auf die Mitte[imgc]" + getServerFromLoc() + "/hilfe/sniff06.gif[/img]oder an den Rand.[imgr]" + getServerFromLoc() + "/hilfe/sniff06.gif[/img]\\n\\nDabei 'fließt der Text um die Grafik herum. Das an das erste img angehängte r bzw l legt fest, ob die Grafik links oder rechst am Rand stehen soll.\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Größe") , "JavaScript: previewInsert(" + formPanelBId + ",\"Man kann die Grafik in ihrer Größe verändern[imgr]" + getServerFromLoc() + "/hilfe/sniff06.gif[/img]\\n[imgr50]" + getServerFromLoc() + "/hilfe/sniff06.gif[/img]Man kann keine Grafik größer machen als ihr Original.\\nZum verkleinern wird in dem ersten 'img' eine Zahl angehängt. Die Zahl sollte nicht größer als 200 sein, gedoch größer als 10.\\nMan kann Größe mit Darstellung rechts, links, mitte und text verbinden\\n\\n[r]Bewegte Grafiken werden auch verkleinert, jedoch sinkt dabei die Darstellungsqualität.[/r]\")" , mChoice, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);

  var techRow = tr(t);
  var techView = td(techRow, "tinytable");
  techView.style.textAlign = "center";

  var butF = domRef(domText ("Eingabe") , "JavaScript: previewAPanel(" + formPanelBId + ",0)" , techView, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Vorschau") , "JavaScript: previewAPanel(" + formPanelBId + ",1)" , techView, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);
  var butF = domRef(domText ("Löschen") , "JavaScript: previewAPanel(" + formPanelBId + ",3)" , techView, "buttonFL");
  butF.style.background = styleOfBackground(gstylebu);
  eventLink(butF,4);

  previewAPanel (formPanelBId, 1);
  return erg;
}

function previewAPanel (panelNummer, mode)
{
  var nr = -1;
  for (var i = 0; i < formPanel.length; i++)
  {
    if (formPanel[i].id == panelNummer) nr = i;
  }
  if (-1 < nr)
  {
    if (mode == 0)
    {
      formPanel[nr].prev.style.position = "absolute";
      formPanel[nr].prev.style.left = "-2000px";
      formPanel[nr].targetView.style.position = "static";
      formPanel[nr].targetView.style.left = "0px";
    }
    if (mode == 1 || mode == 2 || mode == 3)
    {
      if (mode == 1)
      {
        formPanel[nr].prev.style.position = "static";
        formPanel[nr].prev.style.left = "0px";
        formPanel[nr].targetView.style.position = "absolute";
        formPanel[nr].targetView.style.left = "-2000px";
      }
      if (mode == 3)
      {
        formPanel[nr].target.value = "";
      }
      removeAllChildren(formPanel[nr].prev);
      domText(addMCodes(formPanel[nr].target.value), formPanel[nr].prev);
      node2HTML(formPanel[nr].prev, 100, 0);

    }
  }
}

function previewInsert (panelNummer, itext)
{
  var nr = -1;
  for (var i = 0; i < formPanel.length; i++)
  {
    if (formPanel[i].id == panelNummer) nr = i;
  }
  if (-1 < nr)
  {
    var target = formPanel[nr].target;
    target.value += itext;
    previewAPanel (panelNummer, 2);
  }
}

function previewInsertDate(panelNummer,mode)
{
  var erg_year = 0;
  var erg_month = 0;
  var erg_day = 0;
  var erg_hour = 0;
  var erg_min = 0;
  var re=/iPanel\-(\w)\-(\d+)/gi;
  var alp = document.getElementsByTagName("select");
  for (var i=0; i < alp.length; i++)
  {
    re.lastIndex=0;
    var gto = re.exec(alp[i].name);
    if (gto != null)
    {
      if (parseInt(gto[2]) == panelNummer)
      {
        if (gto[1] == "y") erg_year = alp[i].value;
        if (gto[1] == "m") erg_month = parseInt(alp[i].value);
        if (gto[1] == "d") erg_day = parseInt(alp[i].value) + 1;
        if (gto[1] == "h") erg_hour = parseInt(alp[i].value);
        if (gto[1] == "i") erg_min = parseInt(alp[i].value) * 5;
      }
      //alert (alp[i].name + " " + gto[1] + " " + gto[2] + " " + alp[i].value);
    }
  }
  var d = new Date();
  var ergDate = new Date(erg_year, erg_month, erg_day, erg_hour, erg_min, 0, 0);
  var ergV = Math.floor(ergDate.getTime()/1000);
  if (mode == 0)
    previewInsert (panelNummer, "[date=" + ergV + "]\n[dated=" + ergV + "]\n[dateh=" + ergV + "]\n[datem=" + ergV + "]\n[datek=" + ergV + "]\n[datev=" + ergV + "]\n[datew=" + ergV + "]\n\n");
  if (mode == 1)
    previewInsert (panelNummer, "relative Zeitangaben berechnen den Unterschied zwischen dem aktuellen und dem gegebenen Datum.\n\nDie Ausgabe kann dann die Form haben 'in 2 Tagen' oder 'vor 4 Stunden und 10 Minuten'.\n\n[dates=" + ergV + "]\n[dater=" + ergV + "]\n[datex=" + ergV + "]\n[datey=" + ergV + "]\n[datez=" + ergV + "]\n\n");
}


function previewFormatInsert(panelNummer)
{
  var re=/fPanel\-(\w)\-(\d+)/gi;
  var fontSize = 2;
  var lineAdd = 0;
  var color = 0;
  var direction = 0;
  var padding = 0;
  var font = 0;
  var erg = "[format="
  var alp = document.getElementsByTagName("select");
  for (var i=0; i < alp.length; i++)
  {
    re.lastIndex=0;
    var gto = re.exec(alp[i].name);
    if (gto != null)
    {
      if (parseInt(gto[2]) == panelNummer)
      {
        if (gto[1] == "s") fontSize = parseInt(alp[i].value);
        if (gto[1] == "h") lineAdd = parseInt(alp[i].value);
        if (gto[1] == "c") color = parseInt(alp[i].value);
        if (gto[1] == "d") direction = parseInt(alp[i].value);
        if (gto[1] == "p") padding = parseInt(alp[i].value);
        if (gto[1] == "f") font = parseInt(alp[i].value);
      }
    }
  }

  switch (fontSize)
  {
    case 0: erg += "8"; break;
    case 1: erg += "9"; break;
    case 3: erg += "11"; break;
    case 4: erg += "12"; break;
    case 5: erg += "14"; break;
    case 6: erg += "16"; break;
    case 7: erg += "20"; break;
    case 2:
    default: erg += "10"; break;
  }
  switch (lineAdd)
  {
    case 1: erg += "-1;"; break;
    case 2: erg += "-2;"; break;
    case 3: erg += "+1;"; break;
    case 0:
    default: erg += "+0;"; break;
  }
  switch (color)
  {
    case 1: erg += "#a00;"; break;
    case 2: erg += "#0a0;"; break;
    case 3: erg += "#00a;"; break;
    case 4: erg += "#fff;"; break;
    case 5: erg += "#c80;"; break;
    case 6: erg += "#099;"; break;
    case 7: erg += "#ff0;"; break;
    case 0:
    default: erg += "#000;"; break;
  }
  switch (direction)
  {
    case 0: erg += "links;"; break;
    case 1: erg += "mitte;"; break;
    case 2: erg += "rechts;"; break;
  }
  switch (padding)
  {
    case 1: erg += "rand10,10;"; break;
    case 2: erg += "rand20,20;"; break;
    case 3: erg += "rand10,0;"; break;
  }
  switch (font)
  {
    case 1: erg += "TT;"; break;
    case 2: erg += "Roman;"; break;
    case 3: erg += "Comic;"; break;
    case 4: erg += "Georgia;"; break;
    case 5: erg += "Lucida;"; break;
    case 6: erg += "Verdana;"; break;
    case 0:
    default: erg += "Arial;"; break;
  }

  erg += "]";
  previewInsert (panelNummer, erg + "Mit dem Format-Tag können verschiedene Formatierungen zusammengefasst werden. Dazu zählen Buchstabengröße, Farbe, Rand, Schriftart, Zeilenabstand,...[/format]\n");
}

function previewChoice (panelNummer, text)
{
  var nr = -1;
  for (var i = 0; i < formPanel.length; i++)
  {
    if (formPanel[i].id == panelNummer) nr = i;
  }
  if (-1 < nr)
  {
    var unknown = true;
    for (var i = 0; i < formPanel[nr].choices.length; i++)
    {
      if (formPanel[nr].choices[i].id == text)
      {
        unknown = false;
        formPanel[nr].choices[i].style.position = "static";
        formPanel[nr].choices[i].style.left = "0px";
      }
      else
      {
        formPanel[nr].choices[i].style.position = "absolute";
        formPanel[nr].choices[i].style.left = "-2000px";
      }
    }
    if (unknown) alert ("Formatierungsauswahl " + text + " ist unbekannt");
  }
}

/*******************************
  Sucht den Unterknoten von einem bestimmten Typ
  Typen werden für gewöhnlich groß geschreiben zb "TR" oder "IMG"
*******************************/
function getChildW(node, subNodeName, index)
{
  if (index==undefined) index = 0;
  var j = undefined;
  if (node != undefined)
  {
    for (i = 0; i < node.childNodes.length; i++)
    {
      if (node.childNodes[i].nodeName == subNodeName)
      {
        if (index==0) j = node.childNodes[i];
        index--;
      }
    }
  }
  return j;
}

// Sucht den übergeordneten Knoten vom Typ type
function getParentWithType(node, type)
{
  b = true;
  while (b)
  {
    if (node.tagName == "BODY" || node.tagName == type) b = false;
    if (b) node = node.parentNode;
  }
  return node;
}

/*
  Suchen von (Divs) mit einer bestimmten id
  id = (start)-(.)-(.)
*/

function ids(start, param, nodeType)
{
  if (nodeType == undefined) nodeType = "div";
  if (param == undefined) param = 2;
  var re=undefined;
  var erg = new Array();
  if (param == 2) re=/([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)/gi;
  if (param == 3) re=/([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)/gi;
  if (param == 4) re=/([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)/gi;
  if (param == 5) re=/([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)/gi;
  //if (param == 6) re=/([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)/gi;
  //if (param == 7) re=/([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)/gi;
  var alp = document.getElementsByTagName(nodeType);
  for (var i=0; i < alp.length; i++)
  {
    var node = alp[i];
    var nid = node.id;
    re.lastIndex=0;
    var gto = re.exec(nid);
    if (gto != null)
    {
      if (gto[1]==start)
      {
        var thr = new Object();
        thr.node = node;
        thr.start = start;
        thr.par = new Array();
        for (var j=2; j < gto.length; j++) thr.par.push (gto[j]);
        erg.push(thr);
      }
    }
  }
  return erg;
}


function getName(start, nodeType)
{
  if (nodeType == undefined) nodeType = "div";
  var alp = document.getElementsByTagName(nodeType);
  var erg = null;
  for (var i=0; i < alp.length; i++)
  {
    var node = alp[i];
    var nid = node.name;
    if (nid==start) erg = node;
  }
  return erg;
}

function names(startmn, param, nodeType)
{
  var matche = "([\\\wäöüÄÖÜß!\\\? ]*)";
  if (nodeType == undefined) nodeType = "div";
  if (param == undefined) param = 2;
  var re=undefined;
  var erg = new Array();
  if (param == 2) re=/([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)/gi;
  if (param == 3) re=/([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)/gi;
  if (param == 4) re=/([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)/gi;
  if (param == 5) re=/([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)-([\wäöüÄÖÜß!\? ]*)/gi;
  if (param == 6)
  {
    re = new RegExp(matche + "\-" + matche + "\-" + matche + "\-" + matche + "\-" + matche + "\-" + matche,"gi");
  }
  if (param == 7)
  {
     re = new RegExp(matche + "\-" + matche + "\-" + matche + "\-" + matche + "\-" + matche + "\-" + matche + "\-" + matche,"gi");
  }
  var alp = document.getElementsByTagName(nodeType);
  for (var i=0; i < alp.length; i++)
  {
    var node = alp[i];
    var nid = node.name;
    re.lastIndex=0;
    var gto = re.exec(nid);
    if (gto != null)
    {
      if (gto[1]==startmn)
      {
        var thr = new Object();
        thr.node = node;
        thr.start = start;
        thr.par = new Array();
        for (var j=2; j < gto.length; j++) thr.par.push (gto[j]);
        erg.push(thr);
      }
    }
  }
  return erg;
}


function dataExtract(source, tag, fun)
{
 // Liest die Daten aus einem Datenknoten aus. Die Daten liegen in einer Knoten
 // 'source' als Text vor mit der bcp-Specifikation
 // tag ist der Start-Identifier zB. exam in [exam=46]
 // fun ist eine vierstellige Funktion
 //   FUN (1,2,3,4)
 // die Parameter teilen sich folgendermaßen auf
 // [exam(1)=(2)](3)[/exam](4)
 // (1) ist einstellig oder kann weggelassen werden
 // (2) darf alles enthalten ausser ']'
 // (3) kann beliebiger Text sein
 // (4) kann beliebiger Text sein
 // in Source kann der Text direkt aneinander stehen, besser ist aber, daß er durch HTML-Tags getrennt ist, erhöht die Geschwindigkeit !
 if (source != undefined && source != null)
 {
   for (j = 0; j < source.childNodes.length; j++)
   {
     ciNode = source.childNodes[j];
     if (ciNode.nodeType == 3)
     {
       var r = ciNode.data;
       while (0 < r.length)
       {
         var t = bcp(r, "gal");
         if (t != null)
         {
           //alert ("0:\n" + t[0] + "\n\n1:\n" + t[1] + "\n\n2:\n" + t[2] + "\n\n3:\n" + t[3] + "\n\n4:" + t[4]);
           fun(t[1], t[2], t[3], t[4]);
           r = t[0];
         }
         else
         {
           r = "";
         }
       }
     }
   }
 }
}

/*
  Hilfen zum Erzeugen der dynamischen Felder
*/
function makeDynamicBody()
{
  document.body.className="body";
  document.body.style.backgroundColor = styleOfBackground(gstyleb);
  document.body.style.color = styleColor(gstyleb);
}

// setzt alle Variablen mit den Hintergründen neu.
function refreshAllBGColors()
{
 backb = styleOfBackground(getGstyleb());
 backfb = styleOfBackground(getGstylefb());
 backka = styleOfBackground(getGstyleka());
 backkp = styleOfBackground(getGstylekp());
 backhi = styleOfBackground(getGstylehi());
 backbu = styleOfBackground(getGstylebu());
}

function set_link_par(id,arg)
{
  var erg = new Object();
  erg.id = id;
  erg.arg = arg;
  link_parameter.push(erg);
}

// Was ist mit den JavaScriptLinks ?
function updateAllLinks()
{
  //var search_parameter = getSearchArgs(document.location.search);
  var newRD = "&userID=" + getUserID() +  "&sessionID=" + getSessionID() +  "&gstyle=" + getGstyle();
  link_parameter = getSearchArgs(newRD);

  if ((userID != undefined) && (0 < userID))
  {
    var taga = document.getElementsByTagName("a");
    //var erg = "";
    for (var i = 0; i < taga.length; i++)
    {
      //var href = taga[i].href;
      if (0 < taga[i].href.length)
      if (taga[i].search != undefined)
      {
         //var old = taga[i].href;
         taga[i].href = updateSearchArgs(taga[i].href);
      }
    }
    var tagf = document.getElementsByTagName("form");
    var erg = "";
    for (var i = 0; i < tagf.length; i++)
    {
        //erg += href + " / " + "&userID=" + userID +  "&sessionID=" + sessionID +  "&gstyle=" + gstyle + "\r";

        var old = tagf[i].action
        tagf[i].action = updateSearchArgs(tagf[i].action);

        //alert (old + "\r\r\r" + tagf[i].action);
    }
    //alert (erg);
  }
}

/*
  Zerlegt einen SearchString in seine Bestandteile
  ?arg1=value1&arg2=value2&arg3=value3&arg4=value5
  Vorsicht bei der Konbination
*/
function getSearchArgs(text)
{
  var erg = Array();
  var m = text;
  var re=/(?:[^&\?]*\?|[&\?]?)(\w+)=([^&\?$]*)(.*)$/gi;
  while (m != undefined)
  {
    re.lastIndex=0;
    var gto = re.exec(m);
    if (gto != null)
    {
      var nObj = new Object();
      //alert (text + "\r\r" + gto[1] + "\r\r" + gto[2] + "\r\r" + gto[3]);
      nObj.id = gto[1];
      nObj.value = gto[2];
      erg.push(nObj);
      m = gto[3];
    }
    else
    {
      m = undefined;
    }
  }
  return erg;
}


/*
  Fügt ein Argument hinzu, falls es noch nicht vorhanden ist
*/
function addSearchArg(saListe,id,value)
{
  var b = true;
  for (var i = 0; i < saListe.length; i++)
  {
    if (saListe[i].id == id)
    {
      b = false;
    }
  }
  if (b)
  {
    var nObj = new Object();
    nObj.id = id;
    nObj.value = value;
    saListe.push(nObj);
  }
  return saListe;
}

/*
  Ersetzt und erweitert einen HREF - Suchstring
  unter Berücksichtigung der link_parameter
  zb. old ?arg1=a&arg2=b
      new ?arg1=c&arg3=d
      =>  ?arg1=c&arg2=b&arg3=d
*/

function updateSearchArgs(link, newArgs)
{
 //jscmdWrite("*** Changing HRef from ");
 //jscmdWrite(link);
 var erg = link;
 var hp = ""; // Host und Path
 var search = link; // falls statt dem Link das Search übergeben wird.

   // test JavaScript
   var rejs=/javascript/gi;
   rejs.lastIndex=0;
   var gtjs = rejs.exec(link);
   if (gtjs == null)
   {
     // extrahieren von path, Query
     var re=/([^\?#]*)\??([^#]*)#?(.*)$/gi;
     re.lastIndex=0;
     var gto = re.exec(link);
     if (gto != null)
     {
       hp = gto[1];
       search = gto[2];
       var anchor = gto[3];
     }

     //jscmdWrite("Host: " + hp);
     //jscmdWrite("Search: " + search);
     //jscmdWrite("Anchor: " + anchor);
     //alert (link + "\r\r" + search + "\r\r" + newArgs + "\r\r" + link_parameter.length);
     var targ = getSearchArgs(search);
     var orig = getSearchArgs(document.location.search);
     // targ überschreiben mit den Werten aus der location, falls sie leer sind
     for (var i = 0; i < orig.length; i++)
     {
       var b = true;
       for (var u = 0; u < targ.length; u++)
       {
         if (targ[u].id == orig[i].id)
         {
           //alert (targ[u].id + " -" + targ[u].value + "- " + targ[u].value.length);
           if (targ[u].value.length == 0) targ[u].value = orig[i].value;
           b = false;
         }
       }
       if (b)
       {
         targ.push(orig[i]);
       }
     }
     //for (var i = 0; i < add.length; i++) targ.push(add[i]);
     //add = new Array();
     // targ überschreiben mit den Werten aus der linkliste
     for (var i = 0; i < targ.length; i++)
     {
       for (var u = 0; u < link_parameter.length; u++)
       {
         if (targ[i].id == link_parameter[u].id)
         {
           targ[i].value = link_parameter[u].value;
         }
       }
     }
     // targ überschreiben bzw Ergänzen mit den neuen Parameter
     if (newArgs != undefined)
     {
       var repl = getSearchArgs(newArgs);
       for (var i = 0; i < repl.length; i++)
       {
         var b = true;
         for (var u = 0; u < targ.length; u++)
         {
           if (repl[i].id == targ[u].id)
           {
             targ[u].value = repl[i].value;
             b = false;
           }
         }
         if (b)
         {
           targ.push(repl[i]);
         }
       }
     }
     erg = hp;
     var deli = "?";
     for (var u = 0; u < targ.length; u++)
     {
       erg += deli + targ[u].id + "=" + targ[u].value;
       deli = "&";
     }
     if (link.length < 2 && newArgs != undefined) erg = newArgs;

     if (2 < anchor.length) erg += "#" + anchor;
     //alert (document.location + "\r\r" + link + "\r\r" + newArgs + "\r\r" + erg);
   }
 //jscmdWrite(erg);
 return erg;
}

/*******************
  inline - Frames
  und Messages
********************/

// Einen bestimmten iFrame ansprechen
function getiFrameDocument(name)
{
  var erg = null;
  var tfr = document.getElementsByTagName("iframe");
  for (var i = 0; i < tfr.length; i++)
  {
    if (tfr[i].name == name)
      var erg = tfr[i].contentWindow!=undefined?tfr[i].contentWindow.document:tfr[i].document;
  }
  return erg;
}

function getiFrameView(name)
{
  var ical = getiFrameDocument(name);
  return (ical.defaultView==undefined)?ical.parentWindow:ical.defaultView;
}


function closeiFrame()
{
  // der iFrame muß aus dem übergeordneten Context entfernt werden
  var parentView = document.parentWindow?document.parentWindow:document.defaultView;
  var alpu = parentView.parent.document.getElementsByTagName("iframe");
  for (var i=0; i < alpu.length; i++)
  {
    if (alpu[i].document == document)
    {
      //alert ("found1");
      alpu[i].parentNode.removeChild(alpu[i]);
    }
    if (alpu[i] == parentView.frameElement)
    {
      //alert ("found2");
      alpu[i].parentNode.removeChild(alpu[i]);
    }
  }
}

// Einen iframe erzeugen
// ist eigentlich so gedacht, daß der iframe
// sich dann meldet, sobald er geladen ist...
// bei den PHP-Scripten ist folgende Idee angedacht...
// Aufruf der Hauptseite:
//   Adresse.html?par1=4711&par2=mode1&auto=tutu
// im Script steht:
//   getExternInfo (Adresse.php + document.location.search);
// Anmerkung: der iFrame soll nicht angezeigt werden -
//   mit display = "none" laden aber manche Browser das Fenster erst garnicht
//   deswegen der Trick mit der absoluten Position.

/*

Verwendungsstandart:

Die PHP-Routine
   javaScriptCall("jsThread","&threadf=$first");
gibt die Action und weitere Parameter zu den Standart-Parametern an.
In frame2.php wird die Action wie normal behandelt...

*/
function getExtern(arg)
{
  //alert ("getExtern = " + arg + "\rlocation = " + document.location.search + "\rpath = " + document.location.pathname + "\rhost = " + document.location.hostname + "\rprotocoll = " + document.location.hostname);
  return getExternInfo("../frame2.php", document.location.search, arg);
}

function getExternInfo(ref, search, defaultsearch)
{
 //var localMembermode = getMembermode();
 if (search != undefined)
 {
   var orig = getSearchArgs(search);
   var repl = getSearchArgs(defaultsearch);
   // Die Argumente für die Ausgangsseite
   // überschreiben oder erweitern
   for (var i = 0; i < repl.length; i++)
   {
     var b = true;
     for (var u = 0; u < orig.length; u++)
     {
       if (repl[i].id == orig[u].id)
       {
         orig[u].value = repl[i].value;
         b = false;
       }
     }
     if (b)
     {
       orig.push(repl[i]);
     }
   }
   addSearchArg (orig,"userID",getUserID());
   addSearchArg (orig,"sessionID",getSessionID());
   addSearchArg (orig,"style",getGstyle());
   var erg = "";
   var deli = "?";
   for (var u = 0; u < orig.length; u++)
   {
     erg += deli + orig[u].id + "=" + orig[u].value;
     deli = "&";
   }
   if (search.length < 2 && defaultsearch != undefined) search = "?" + defaultsearch;
   //alert (ref + "\r\r" + search + "\r\r" + erg);
   search = erg;
 }
 else
   search = "";
 //alert (ref + search);
 var htmltag = getChildW(document, "HTML");
 var bodytag = getChildW(htmltag, "BODY");
 var isf = document.createElement("iframe");
 isf.width = 800;
 isf.height = 400;
 if (getUserID() != 1)
 {
   isf.style.position = "absolute";
   isf.style.left = "-2000px";
 }
 isf.style.fontSize = "8pt";
 bodytag.appendChild(isf);
 idoc = (isf.location!=undefined&&isf.location!=null)?isf:isf.contentWindow;
 //alert (isf + " " + isf.location + " " + isf.contentWindow + " " + isf.src + " " + idoc);
 if (idoc != null) idoc.location = ref + search;
 else isf.src = ref + search;
 return isf;
}

// Feedback-Aufruf des Frames
//   getTopWindow().function(data,...);
function getTopWindow()
{
  var parentView = document.parentWindow?document.parentWindow:document.defaultView;
  return parentView.parent;
}

// Importiert den Knoten in ein anders Document
function importElement(node, targetDocument)
{
  var erg = null;
  if (document.importNode)
  {
    // DOM 2 Level
    erg = targetDocument.importNode(node,true);
  }
  else
  {
    // Internet Explorer hat noch DOM 1 Level
    // bietet aber eine Alternative mit DHTML
    var nodeText = node.outerHTML;
    var docf = targetDocument.createDocumentFragment();
    var c = docf.createElement("div");
    c.innerHTML = nodeText;
    docf.appendChild(c);
    erg = docf.firstChild;
    delete docf;
  }
  return erg;
}


/***********************************************************
  Image preloading für Browser, die nicht Cache-Always haben

  die Ziel-DIV hat den Aufbau:
    <DIV id="cimg-o-4711"></DIV>
  das zugehörige Image wird folgendermaßen bereitgestellt
    preloadElem("../hilfe/fsopen02.gif", "o");
  sobald das Image hochgeladen ist, wird es in die entsprechenden DIV gecloned

  die ID besteht aus
    'cimg' always
    'o'    ein einstelliges Zeichen (Buchstabe oder Zahl)
           ist im preloadElem das zweite Argument
    '4711' eindeutiger Identifier
************************************************************/

var preload = new Array();

// Ein Preload für viele gleiche Grafiken:
// eingegeben wird die Source und ein Buchstabe für die Platzhalter
// mit der id = "cimg-" + preSym + "-" + uid;
// wobei cimg ist vorgegeben für CachedIMGage und uid ist ein eindeutiger Identifier
//
// Die Nutzung geht in etwa folgendermaßen:
// alle Container sind erstellt zB:
//    <div id="cimg-l-12"></div>
//
// Zum Schluß des Seitenaufbauscriptes gibt es folgende zB Zeilen:
//  preloadElem("../hilfe/fsopen02.gif", "o");
//  preloadElem("../hilfe/fsclose01.gif", "c");
//  preloadElem("../hilfe/fsuser01.gif", "u");
//  preloadElem("../hilfe/fslinie01.gif", "l");
//  insertCImgFunc();
// die Funktion 'insertCImgFunc' muß deshalb bereits hier aufgerufen werden, weil
// ja eventuell alle Zeichen bereits gecached sind und damit kein 'onload'-Event auslösen.

function preloadElem(src, preSym, mode)
{
  // mode
  //  1 Element ist zu Anfang versteckt
  jscmdWrite("preloadElem: " + src + "(" + preSym + ")", 0);
  if (mode == undefined) mode = 0;
  var tn = new Object();
  var loadCImg = domImg(src,document.firstChild);
  loadCImg.style.visibility = "hidden";
  addEvent(loadCImg,"load",loadCImgFunc);
  tn.node = loadCImg;
  tn.src = src;
  tn.preSym = preSym;
  tn.done = false;
  tn.mode = mode;
  if (preload == undefined) preload = new Array();
  preload.push(tn);
  //if (loadCImg.complete) insertCImgFunc();
}

function loadCImgFunc(e)
{
  //jscmdWrite("insertCImgFunc Event", 0);
  //var what = getEventTarget(e);
  //removeEvent(what,"load",loadCImgFunc);
  insertCImgFunc();
}

function insertCImgFunc()
{
  //jscmdWrite("insertCImgFunc",0);
  var allLoaded = true;
  var lerg = "";
  if (preload == undefined) preload = new Array();
  for (var m=0; m < preload.length; m++)
  {
    //allLoaded &= preload[m].node.complete;
    if (preload[m].node.complete)
    {
      //removeEvent(preload[m].node,"load",loadCImgFunc);
    }
    else allLoaded = false;

    jscmdWrite("insertCImgFunc-Status " + preload[m].src + " (" + preload[m].preSym + ") " + preload[m].node.complete,0);
  }

  jscmdWrite("insertCImgFunc-Status " + allLoaded + " length(" + m + ")",0);
  if (allLoaded)
  {
    for (var m=0; m < preload.length; m++)
    {
      if (preload[m].node.complete)
      {
        //jscmdWrite("removeEvent " + preload[m].preSym,0);
        removeEvent(preload[m].node,"load",loadCImgFunc);
        preload[m].node.border = 0;
      }
    }
    var erg = Array();
    var res=/cimg-(.)-(.*)/gi;
    var alps = document.getElementsByTagName("div");
    for (var i=0; i < alps.length; i++)
    {
      var node = alps[i];
      var nid = node.id;
      res.lastIndex=0;
      var gts = res.exec(nid);
      if (gts != null)
      {
        for (var m=0; m < preload.length; m++)
        {
          if (gts[1] == preload[m].preSym && !preload[m].done && preload[m].node.complete)
          {
            var dc = domCopy(preload[m].node);
            dc.style.visibility = "visible";
            var replelem = new Object();
            //if (preload[m].mode == 1) dc.style.display = "none";
            replelem.node = node;
            replelem.img = dc;
            replelem.mode = preload[m].mode;
            erg.push(replelem);
          }
        }
      }
    }

    for (var m=0; m < preload.length; m++)
    {
      if (preload[m].node.complete)
      {
        preload[m].done = true;
        preload[m].node.style.display = "none";
      }
    }

    for (var k=0; k < erg.length; k++)
    {
      erg[k].node.appendChild(erg[k].img);
      erg[k].node.style.border = "0pt solid blue";
      //if (erg[k].mode == 1) erg[k].img.style.display = "none";
      //erg[k].img.style.display = "none";
    }
  }
  preload=Array();
  //jscmdWrite("insertCImgFunc-Ende ",0);
}

/***********************
  Chat-Unterstützung
************************/

function expandChatRoom()
{
 // Die divs nach mit der ID (siehe unten)
 // und dem Aufbau Name<br>Posted<br>Text werden in eine Chatdarstellung gebracht.
 //$vorl = 1000;
 //$schatroom = query("SELECT u.name, p.* FROM chatprot p, userm u WHERE u.id=p.userFrom AND p.room=1 ORDER BY p.posted DESC LIMIT 10;",__FILE__,__LINE__);
 //while ($dsatz = mysql_fetch_array($schatroom))
 //{
 //  $vorl++;
 //  $posted = (int)$dsatz["posted"];
 //  $name = $dsatz["name"];
 //  $text = $dsatz["text"];
 //  print "<div id=\"userpp-$vorl\">$name<br>$posted<br>$text</div>";
 //}

 re=/userpp-(\w*)-(\w*)/gi;
 var alp = document.getElementsByTagName('div');
 for (var i=0; i < alp.length; i++)
 {
   var node = alp[i];
   var nid = node.id;
   re.lastIndex=0;
   var gto = re.exec(nid);
   if (gto != null)
   {
     //if (node.childNodes[0] != undefined) roomName = node.childNodes[0].data;
     var j = 0;
     var name = "";
     var posted = 0;
     var text = "";
     var uid = gto[2];
     if (node.childNodes[j].nodeName == "#text") name = node.childNodes[j].data;
     while (j < node.childNodes.length && node.childNodes[j].nodeName != "BR") j++; j++;
     if (j < node.childNodes.length)
     {
       if (node.childNodes[j].nodeName == "#text") posted = parseInt(node.childNodes[j].data);
       while (j < node.childNodes.length && node.childNodes[j].nodeName != "BR") j++; j++;
       if (j < node.childNodes.length)
       {
         if (node.childNodes[j].nodeName == "#text") text = node.childNodes[j].data;
       }
     }
     //alert (name + " " + posted + " " + text);
     while (0 < node.childNodes.length) (node.removeChild(node.childNodes[0]));
     var ne = domFDiv(node);
     ne.style.border = "0pt solid blue";
     ne.style.textAlign = "left";
     ne.style.background = styleOfBackground(getGstyleka());
     var chName = domFDiv(ne);
     chName.style.border = "0pt solid black";
     ne.style.borderTop = "1pt solid black";
     ne.style.padding = "1pt";
     ne.style.paddingLeft = "3pt";
     ne.style.fontSize = "8pt";
     var chPosted = domDiv(domText(mDate(posted,6)),chName,"newIFloatTableElem");
     chPosted.style.paddingLeft = "5pt";
     chPosted.style.paddingRight = "3pt";
     chPosted.style.fontSize = "7pt";
     var chRef = domRef(domText(name), "./profil.php?userID=" + getUserID() + "&sessionID=" + getSessionID() + "&gstyle=" + getGstyle() + "&userTo=" + uid,ne);
     chRef.style.color = "#000";
     var chText = domDiv(domText(text),node);
     chText.style.paddingBottom = "5pt";
     chText.style.paddingRight = "3pt";
     chText.style.paddingLeft = "12pt";
     chText.style.fontSize = "8pt";
     chText.style.textAlign = "left";
     node2HTML(chText, 120, 4);
   }
 }
}

/*********************************
  absolute Elementepositionierung
*********************************/
function getAbsolutPositionOf(elem)
{
  // Ergebniss ist ein Objekt mit den Koordinaten x,y
  var erg = new Object();
  erg.x = 0;
  erg.y = 0;

  var tNode = elem;
  var xPos = 0;
  var yPos = 0;

  var b = true;
  while (b)
  {
    if (tNode == null || tNode == undefined) b = false;
    if (b) if (tNode.nodeName == "BODY") b = false;
    if (b)
    {
      xPos += tNode.offsetLeft;
      yPos += tNode.offsetTop;
      tNode = tNode.offsetParent;
    }
  }
  erg.x = xPos;
  erg.y = yPos;
  return erg;
}

/***********************
  attach_flying_div (target, flyer, mode)
  mode
   0 = unterhalb
   1 = rechts unterhalb
   2 = unterhalb drüber, Fenster berücksichtigen

  flying_div_deleteDelay = Zeit für verzögertes Löschen
************************/
var flying_div = null;
var flying_div_deleteDelay = 0;
var flying_div_deleteTimeOut = false;
var flying_div_deleteRecall = false;

function flying_div_off()
{
  if (flying_div != null)
  {
    if (flying_div_deleteDelay == 0)
    {
      flying_div.style.display = "none";
      flying_div = null;
    }
    else
    {
      if (flying_div_deleteTimeOut)
      {
        if (flying_div_deleteRecall)
        {
          // das Löschen soll unterbrochen werden
          flying_div_deleteTimeOut = false;
          flying_div_deleteRecall = false;
          //flying_div.style.background = "#afa";
        }
        else
        {
          // löschen
          flying_div_deleteTimeOut = false;
          flying_div_deleteRecall = false;
          //flying_div.style.background = "#f44";
          flying_div.style.display = "none";
          flying_div = null;
          //alert (flying_div_deleteDelay)
          flying_div_deleteDelay = 0;
        }
      }
      else
      {
        if (flying_div_deleteRecall)
        {
          // bereitstellen zum Löschen, falls notwendig
          //flying_div.style.background = "#480";
        }
        else
        {
          // das löschen wurde beantragt
          //flying_div.style.background = "#ff6";
          flying_div_deleteTimeOut = true;
          flying_div_deleteRecall = false;
          window.setTimeout("flying_div_off()",flying_div_deleteDelay);
        }
      }
    }
  }
}

function attach_flying_div (target, flyer, mode)
{
  if (mode == undefined) mode = 0;
  if (flyer != undefined)
  {
      if (flying_div != null)
      {
        if (flying_div == flyer)
        {
          flying_div_deleteRecall = true;
          flying_div_deleteTimeOut = false;
        }
        else
        {
          flying_div_deleteDelay = 0;
          flying_div_off();
        }
      }
      //showObject(target);
      //var ergS = "";
      var tNode = target;
      var xPos = 0;
      var yPos = 0;

      while (tNode.nodeName != "BODY")
      {
         //ergS += tNode.offsetLeft + "," + tNode.offsetTop + " (" + tNode.nodeName + ") ";
         xPos += tNode.offsetLeft;
         yPos += tNode.offsetTop;
         tNode = tNode.offsetParent;

      }
      //alert (xPos + "," + yPos);

      if (flying_div == null) flying_div = flyer;
      flyer.style.display = "";
      flyer.style.position = "absolute";
      flyer.style.left = (xPos-30) + "px";
      flying_div_deleteRecall = false;
      flying_div_deleteTimeOut = false;
      flying_div_deleteDelay = 0;
      var fyPos = yPos+target.clientHeight + 10;
      if (mode == 1) flyer.style.left = (xPos+15) + "px";
      if (mode == 3) fyPos = yPos+target.clientHeight - 1;
      if (mode == 5) fyPos = yPos+target.clientHeight + 30;
      if (mode == 6)
      {
        fyPos = yPos+target.clientHeight + 5;
        flyer.style.left = "5px";
      }
      if (mode == 2 || mode == 4)
      {
        flying_div_deleteDelay = 2000;
        fyPos = yPos+target.clientHeight - 15;
        if (mode == 4)
        {
          fyPos = yPos+target.clientHeight + 5;
        }
        var windowBottom = window.innerHeight + window.pageYOffset - 20;
        var byPos = yPos + target.clientHeight + flyer.clientHeight - 5;
        //alert (windowBottom + " " + fyPos);
        if (windowBottom < byPos)
        {
          //alert (windowBottom + " " + byPos);
          fyPos = windowBottom - flyer.clientHeight;
        }

        addEvent(flyer, "mouseover", attach_flying_div_mouseover);
        addEvent(flyer, "mousemove", attach_flying_div_mouseover);
        addEvent(flyer, "mouseout", attach_flying_div_mouseout);
        if (mode == 4)
        {
          addEvent(target, "mouseout", attach_flying_div_mouseout);
        }
      }
      //alert (fyPos);
      flyer.style.top = fyPos + "px";
  }
}

function attach_flying_div_mouseover(event)
{
  var alm = getEventTarget(event);
  flying_div_deleteTimeOut = false;
  flying_div_deleteRecall = true;
  //flying_div.style.background = "#060";
}

function attach_flying_div_mouseout(event)
{
  var alm = getEventTarget(event);
  flying_div_deleteTimeOut = false;
  flying_div_deleteRecall = false;
  flying_div_off();
  //flying_div.style.background = "#444";
}

var flyingDivs = new Array();
function do_flying_div(target,flyer,mode)
{
  addEvent(target, "mouseover", flying_div_call);
  addEvent(target, "mouseout", flying_div_call_out);
  var tn = new Object();
  tn.target = target;
  tn.flyer = flyer;
  tn.mode = mode;
  flyingDivs.push(tn);
}

function flying_div_call(event)
{
  var target = getEventTarget(event);
  var flyer = null;
  for (var i = 0; i < flyingDivs.length; i++)
  {
    if (flyingDivs[i].target == target)
    {
      flyer = flyingDivs[i].flyer;
      mode = flyingDivs[i].mode
    }
  }
  if (flyer != null)
    attach_flying_div (target, flyer, mode);
}

function flying_div_call_out(event)
{
  var target = getEventTarget(event);
  var flyer = null;
  for (var i = 0; i < flyingDivs.length; i++)
  {
    if (flyingDivs[i].target == target)
    {
      flyer = flyingDivs[i].flyer;
      mode = flyingDivs[i].mode
    }
  }
  if (flyer != null)
    flying_div_off();
}


/*
  Initialisierung der Seite
*/

// mode
//   = 0 alles wird initialisiert
//   = 1 nur die Parameter für Farben und Infos für Links werden gesucht
//       - bei den Defaultwerten (Defaultwerte existieren meist bei dynamisch aufgebauten Seiten)
//         und bei statischen Seiten, die in eine dynamische Seite eingebunden werden.
//       - bei den Adresse (search-args)
function init(mode)
{
  userID = 0;
  sessionID = "";
  gstyle = 0;
  if (mode == undefined) mode = 0;

  try {
    if (default_userID != undefined) userID = default_userID;
    if (default_sessionID != undefined) sessionID = default_sessionID;
    if (default_gstyle != undefined) gstyle = default_gstyle;
    if (default_memberMode != undefined) memberMode = default_memberMode;
    if (default_gstyleka != undefined) gstyleka = default_gstyleka;
    if (default_gstylekp != undefined) gstylekp = default_gstylekp;
    if (default_gstylehi != undefined) gstylehi = default_gstylehi;
    if (default_gstylebu != undefined) gstylebu = default_gstylebu;
    if (default_gstyleb != undefined) gstyleb = default_gstyleb;
    if (default_gstylefb != undefined) gstylefb = default_gstylefb;
    if (default_hostName != undefined) hostName = default_hostName;
  }
  catch (e)
  {
  }

  // Basisangaben aus der Location
  // noch testen
  args = getSearchArgs(document.location.search);
  for (var i = 0; i < args.length; i++)
  {
    if (args[i].id == "userID" && 0 < parseInt(args[i].value)) userID = parseInt(args[i].value);
    if (args[i].id == "sessionID" && 0 < args[i].value.length) sessionID = args[i].value;
    if (args[i].id == "gstyle" && 0 < parseInt(args[i].value)) gstyle = parseInt(args[i].value);
    if (args[i].id == "action") revAction = args[i].value;
  }

  // Status feststellen
  //  0 = es ist überhaupt nichts vorhanden, der Einsprung kam von ausserhalb
  //  1 = es sind userID und sessionID vorhanden
  //  2 = es ist alles da ;-)
  var status = 2;

  // Testen, ob die Styles da sind
  if (memberMode == undefined || gstylefb == undefined || gstylebu == undefined || gstyleb == undefined || hostName == undefined) status = 1;

  // Testen, ob die Basisdaten da sind;
  if (userID == undefined) status = 0;
  else if (userID == 0) status = 0;
  if (sessionID == 0) status = 0;
  else if (sessionID.length < 10) status = 0;

  if (mode == 0)
  {
    if (status == 2)
    {
      initPage();
    }
    if (status == 1)
    {
      // Noch machen, klappt nicht..
      //initPage();
    }
    if (status == 0)
    {
      // Jetzt bewirkt das nur, daß die Defautlwerte gesetzt werden.
      initPage();
    }
  }
}

var classes_b = new Array();
var classes_fb = new Array();
var classes_bu = new Array();
var classes_ka = new Array();
var classes_kp = new Array();
var classes_keep = new Array();
var classes_manuell = new Array();
var classes_no = new Array();
var init_fun = new Array();

function initPage()
{
  jscmdWrite("Init-Start",1,0);
  classes_b.push("body");
  classes_b.push("advl");
  classes_fb.push("easyBK");
  classes_fb.push("textS");
  classes_fb.push("explainD");
  classes_keep.push("input2");
  classes_bu.push("buttonLDM");
  classes_bu.push("buttonLDC");
  classes_bu.push("buttonIcon");
  classes_bu.push("buttonIconB");
  classes_bu.push("buttonS");
  classes_bu.push("buttonSF");
  classes_bu.push("buttonL");
  classes_bu.push("buttonLD");
  classes_bu.push("buttonLDRZ");
  classes_bu.push("buttonMail");
  classes_keep.push("picKat");
  classes_keep.push("vtinytable");
  classes_keep.push("tinytable");
  classes_keep.push("tinytableb");
  classes_kp.push("tinytableKA");
  classes_ka.push("tinytableKB");
  classes_ka.push("fsHeader");
  classes_ka.push("tinytableK");
  classes_b.push("tinytableCal2");
  classes_ka.push("tinytableCal3");
  classes_ka.push("onlineLinkSmallA1");
  classes_kp.push("header1");
  classes_keep.push("tinytableo");
  classes_keep.push("paper1");
  classes_keep.push("paper2");
  classes_keep.push("header1a");
  classes_keep.push("desc1");
  classes_keep.push("advt");
  classes_keep.push("header");
  classes_keep.push("anzeiget1");
  classes_keep.push("anzeiget2");
  classes_keep.push("anzeiget2u");
  classes_keep.push("onlineLink");
  classes_keep.push("onlineLinkSmallA");
  classes_keep.push("onlineLinkSmallC1");
  classes_keep.push("onlineLinkSmallD");
  classes_keep.push("picKatR");
  classes_keep.push("buttonKat");
  classes_keep.push("tinytableL");
  classes_keep.push("picm");
  classes_keep.push("pic");
  classes_keep.push("invisible");
  classes_keep.push("input1");
  classes_keep.push("pic-com");
  classes_keep.push("profilr");
  classes_keep.push("profillp");
  classes_keep.push("profiltext");
  classes_keep.push("profilhm");
  classes_keep.push("userquestion");
  classes_keep.push("tinytableu");
  classes_keep.push("tinytableCC");
  classes_keep.push("calcom");
  classes_manuell.push("fl");
  classes_manuell.push("fr");
  classes_manuell.push("spacer");
  classes_manuell.push("mailFrame");
  classes_keep.push("profilmail");
  classes_manuell.push("mail");
  classes_keep.push("sticky");
  classes_manuell.push("buttonSFinaktiv");

  for (var i=0; i<init_function1.length; i++)
  {
    init_function1[i]();
  }

  jscmdWrite("Start-Function",0,0);
  if (init_action.length == 0)
  {
    initPageStandart();
  }
  else
  {
    // Es wird extern initialisiert
    // initPageStandart sollte von dem Frame trotzdem nochmals aufgerufen werden
    initPageStandart();
    for (var i=0; i<init_action.length; i++)
      getExtern("action=" + init_action[i].routine + init_action[i].arg);
  }

  // Bei Function2 werden die Links nicht automatisch angepasst
  // ist zwar nicht komfortabel, weil man alles in der Funktion machen muß,
  // ist aber viel schneller...
  for (var i=0; i<init_function2.length; i++)
  {
    init_function2[i]();
  }

  var waitInfo = idf("wait");
  if (waitInfo != undefined) waitInfo.style.display = "none";

  jscmdWrite("Init-Ende",1,0);
  jscmdBreak();
}

function initPageStandart()
{
  jscmdWrite("initPageStandart-Start", 0, 0);
  updateAllLinks();
  jscmdWrite("all Links update", 0, 1);
  makeDynamicBody();
  /*
  jscmdWrite("dynamic Colors update", 0, 1);

  var start_node = document.body;
  setClasses(start_node);

  if (userID == 1 && 0 < classes_no.length)
  {
    var classes_un = "";
    for (var i = 0; i < classes_no.length; i++)
      classes_un += "\r" + classes_no[i];
    alert ("Klassen nicht initialisiert:\r\r" + classes_un);
  }

  jscmdWrite("initPageStandart-Ende", 0, 0);
  */
}

/*
  Die Farben und Hintergründe für bestimmte CSS-Klassen werden neu gesetzt.
  Siehe dazu initPage...
*/
function setClasses(node, rek)
{
  if (rek == undefined) rek = 0;
  var nfound = true;
  if (node.nodeType != 3 && node.className != undefined)
  {
    if (0 < node.className.length)
    {
      //node.style.background = styleOfBackground(gstyleb);
      //node.style.color = styleColor(gstyleb);

      if (nfound && contains(classes_manuell, node.className))
      {
        nfound = false;
      }
      if (nfound && contains(classes_keep, node.className))
      {
        node.style.background = "transparent";
        nfound = false;
      }
      if (nfound && contains(classes_b, node.className))
      {
        node.style.background = styleOfBackground(gstyleb);
        node.style.color = styleColor(gstyleb);
        nfound = false;
      }
      if (nfound && contains(classes_bu, node.className))
      {
        node.style.background = styleOfBackground(gstylebu);
        node.style.color = styleColor(gstylebu);
        nfound = false;
      }
      if (nfound && contains(classes_fb, node.className))
      {
        node.style.background = styleOfBackground(gstylefb);
        node.style.color = styleColor(gstylefb);
        nfound = false;
      }
      if (nfound && contains(classes_ka, node.className))
      {
        node.style.background = styleOfBackground(gstyleka);
        node.style.color = styleColor(gstyleka);
        nfound = false;
      }
      if (nfound && contains(classes_kp, node.className))
      {
        node.style.background = styleOfBackground(gstylekp);
        node.style.color = styleColor(gstylekp);
        nfound = false;
      }
      if (nfound)
      {
        if (!contains(classes_no, node.className)) classes_no.push(node.className);
        node.style.background = "#ff8888";
        jscmdWrite("CSS not defined: " + node.className, 2);
      }
    }
    if (rek < 50)
    {
      for (var i = 0; i < node.childNodes.length; i++)
      {
        var ciNode = node.childNodes[i];
        if (ciNode.nodeType != 3)
        {
          setClasses(ciNode, rek + 1);
        }
      }
    }
  }
  if (rek == 0) jscmdWrite("dynamic Colors update finished", 0, 2);
}

function contains(ar, elem)
{
  var erg = false;
  for (var il = 0; il < ar.length; il++)
  {
    if (ar[il] == elem) erg = true;
  }
  return erg;
}

/*
  Alternative zum onLoad.
  Es wird mit
    onDOMLoad(fun)
  eine Funktion (mit 0 Parametern) gespeichert.
  Vorher wird mit
    onDOMLoadElement(elem1)
    onDOMLoadElement(elem2)
    ...
  eine Reihe von Elementen gespeichert.
  Sobald all diese Element erstellt wurden, wird die gespeicherte Funktion aufgerufen.
*/

var breakingOnloadElements = new Object();
breakingOnloadElements.elementsID  = new Array();

function onDOMLoadElement(elem)
{
  breakingOnloadElements.elementsID.push(elem);
}

function onDOMLoad(fun)
{
  breakingOnloadElements.fun = fun;
  window.setTimeout("onDOMLoadTrigger()",250);
}

function onDOMLoadTrigger()
{
  var allElementsLoaded = true;
  var maverick;
  for (var i = 0; i < breakingOnloadElements.elementsID.length; i++)
  {
    var elem = document.getElementById(breakingOnloadElements.elementsID[i]);
    if (elem == null || elem == undefined)
    {
      allElementsLoaded = false;
      maverick = i;
    }
  }
  // speziell Test für IE und Opera, um eine Fehlermeldung zu werfen
  if (document.readyState == "complete" && !allElementsLoaded)
  {
    jscmdWrite("onDomload Trigger Failure: " + breakingOnloadElements.elementsID[maverick] + " not found", 2);
  }
  else
  {
    if (allElementsLoaded) breakingOnloadElements.fun();
    else window.setTimeout("onDOMLoadTrigger()",10);
  }
}

/***********************************
Mousesensitive Unterfenster
Scroll-Alternative

movWindow(dataDiv, targetDiv, mode)
wobei
 dataDiv =
 targetDiv =
 mode =
  0 freies Scrollen
  1 nur verticales Scrollen
  2 nur horizontales Scrollen

***********************************/

function movWindowIntern(e)
{
  var me = getEventTarget(e);
  var target;
  var content;
  var tNode = me;
  if (me != undefined && me != null)
  {
    while (tNode.nodeName != "BODY")
    {
     if (tNode.markMovWindow) target = tNode;
     if (tNode.markMovDiv) content = tNode;
     tNode = tNode.parentNode;
    }
    var movMode = target.markMovMode;
    var mx = "";
    var my = "";
    if (target != undefined)
    {
      var posEt = getAbsolutPositionOf(target);
      mx = posEt.x;
      my = posEt.y;
    }
    if (content != undefined)
    {
      var posEc = getAbsolutPositionOf(content);
      mx = mx + " " + posEc.x;
      my = my + " " + posEc.y;
    }
    var posE = getAbsolutPositionOf(me);
    var posX;
    var posY;
    if (content != undefined)
    {
      var dxme = content.offsetWidth;
      var dyme = content.offsetHeight;
      var dxmt = target.offsetWidth;
      var dymt = target.offsetHeight;

      posX = Math.round(e.clientX + document.body.scrollLeft - posEt.x );
      posY = Math.round(e.clientY + document.body.scrollTop - posEt.y);

      var sideOff = 15;
      var nx = Math.floor((dxme / (dxmt - 2 * sideOff) - 1) * (posX - sideOff));
      var ny = Math.floor((dyme / (dymt - 2 * sideOff) - 1) * (posY - sideOff));
      nx = (0<nx)?nx:0;
      ny = (0<ny)?ny:0;

      if (movMode == 0 || movMode == 2) content.style.left = "-" + nx + "px";
      if (movMode == 0 || movMode == 1) content.style.top = "-" + ny + "px";
      if (movMode == 3)
      {
        content.style.left = "0px";
        content.style.top = "0px";
      }
    }
  }
}

var movWindows = new Array();
function movWindowID(dataDivID, targetDivID, mode)
{
  var t = document.getElementById(targetDivID);
  var d = document.getElementById(dataDivID);
  movWindow(d, t, mode);
}

function movWindow(dataDiv, targetDiv, mode)
{
  if (mode == undefined) mode = 0;

  if (mode < 3)
  {
    addEvent(targetDiv, "mousemove", movWindowIntern);
    targetDiv.style.overflow = "hidden";
  }
  else
  {
    targetDiv.style.overflow = "auto";
  }
  targetDiv.appendChild(dataDiv);
  targetDiv.markMovWindow = true;
  targetDiv.markMovMode = mode;
  dataDiv.markMovDiv = true;
  dataDiv.style.position = "relative";

  var nObj = new Object();
  nObj.target = targetDiv;
  nObj.sub = dataDiv;
  nObj.mode = mode;
  movWindows.push(nObj);
}


/*
Slide-Menus
nlA
.frame = Rahmenknoten;
.top = Abstand von oben;
.open = intern, gibt an, wie weit sich das Feld geöffnet hat
.dir = intern, bestimmt die Richtung (öffnen = 1, schliessen = 2)
.style = Ausrichtung (Menu ist links = 0, Menu ist rechts = 1)
.rest = gibt an, wie weit die Menü-Div rausschaut
.closeDelay = eine Verzögerung um auf das Schliessen zu reagieren
.openfun = Funktion, die beim Öffnen des Menüs aufgerufen werden soll
.openfunPar = Parameter für die Funktion, entweder ein simpler Datentyp (integer)
              oder Object;
.thumb = ...

public
======
addCon(menuNode, frameNode, top, style, closeNode, rest, openfun, openpar)
- menuNode, der Knoten, der ein und ausgeklappt werden soll.
  der MenuNode darf Floats enthalten, er sollte dann jedoch eine feste Breite haben.
- frameNode, der Rahmen
- top, Abstand von oben im Rahmen
- style [optional] (wie oben)
- closeNode [optional] = null, wenn das Menü sich beim Verlassen mit der Maus zuklappen soll,
  ansonsten ein HTML-Element, bei dem mit Mausclick das Fenster geschlossen wird.
  Das Element muß ein Unter-Element des MenuNode sein !!!
- rest [optional] gibt, wie weit das Menü aus dem Rand rausschauen darf
- openfun [optional] eine Funktion, die jedesmal bein öffnen aufgerufen wird
- openpar [optional] ein Parameter-Objekt oder ein simpler Datentyp

addConThumb(menuNode, thumbNode, mode)
  wenn das Menü zugeklappt ist erscheint dieser Thumb
- mode [optional]

wichtig
=======
Nach dem Festlegen der Slide-Menüs startet man mit
window.setTimeout("conG()", 100)
den Verschiebe-Prozeß

intern
======
conG() Time-Out-Routine, wiederholt sich solange, bis alle Menüs Aus- bzw. Eingefahren sind
conOpen(event) Startet das Öffnen eines Slide-Menüs
conClose(event) Startet das Schliessen eines Slide-Menüs
*/

var nlA = new Array();
function addCon(menuNode, frameNode, top, gstyle, closeNode, rest, openfun, openpar)
{
  if (frameNode != undefined && frameNode != null && menuNode != undefined && menuNode != null)
  {
    if (gstyle == undefined) gstyle = 0;
    if (closeNode == undefined) closeNode = null;
    if (rest == undefined) rest = 5;
    var posflo = getAbsolutPositionOf(frameNode);
    frameNode.appendChild(menuNode);
    with (menuNode)
    {
      id = "flopMenu-" + nlA.length;
      with (style)
      {
        position = "absolute";
        left = (posflo.x + 3)  + "px";
        top = (posflo.y + top) + "px";
        border = "1px solid black";
        clip = "rect(auto, auto, auto, auto)";
      }
    }
    if ((gstyle & 2) == 0)
    {
      menuNode.style.whiteSpace = "noWrap";
      background = "#fff";
    }
    var nObj = new Object();
    nObj.node = menuNode;
    addEvent(menuNode,"mouseover",conOpen);
    if (closeNode == null) addEvent(menuNode,"mouseout",conClose);
    else addEvent(closeNode,"mousedown",conClose);
    nObj.frame = frameNode;
    nObj.top = top;
    nObj.open = 2;
    nObj.dir = 1;
    nObj.closeDelay = 0;
    nObj.style = gstyle;
    nObj.rest = rest;
    nObj.openfun = openfun;
    nObj.openpar = openpar;
    nObj.thumb = null;
    nObj.speed = 20;
    nObj.thumbAddtop = 0;
    nObj.node.style.clip = "rect(auto, 0px, auto, auto)";
    nlA.push(nObj);
  }
}

function addConThumb(menuNode, thumbNode, addTop, mode)
{
  if (addTop == undefined) addTop = 0;
  if (mode == undefined) mode = 0;
  for (var i=0; i<nlA.length; i++)
  {
    if (menuNode == nlA[i].node)
    {
      nlA[i].thumb = thumbNode;
      nlA[i].thumbAddtop = addTop;
      addEvent(nlA[i].thumb,"mouseover",conOpen);
      nlA[i].thumb.id = "flopMenu-thumb-" + i;
      nlA[i].thumb.style.position = "absolute";
      nlA[i].thumb.style.display = "none";
      nlA[i].frame.appendChild(nlA[i].thumb);
      // Darstellungsstile
      if (mode == 1)
      {
        nlA[i].thumb.style.background = styleOfBackground(gstylebu);
        nlA[i].thumb.style.border = "1px solid black";
      }
    }
  }
}

function setConSpeed(menuNode, speed)
{
  for (var i=0; i<nlA.length; i++)
  {
    if (menuNode == nlA[i].node)
    {
      nlA[i].speed=speed;
    }
  }
}

var nogonG = true;
function conG()
{
  var nogon = false;
  nogonG = false;
  for (var i=0; i<nlA.length; i++)
  {
    var tObj = nlA[i];
    if (tObj.dir==2 && 0<tObj.open)
    {
      // Öffnen
      var posflo = getAbsolutPositionOf(tObj.frame);
      var posfloWidth = (tObj.frame.clientWidth==0)?(tObj.frame.scrollWidth-4):tObj.frame.clientWidth;
      var tWidth = tObj.node.clientWidth;
      tObj.open -= tObj.speed;
      if (tObj.open < 0) tObj.open = 0;
      if ((tObj.style & 1) == 0)
      {
        tObj.node.style.left = (posflo.x - tObj.open + 3) + "px";
        tObj.node.style.top = (posflo.y + tObj.top) + "px";
        tObj.node.style.clip = "rect(auto, auto, auto, " + tObj.open + "px)";
      }
      else
      {
        tObj.node.style.left = (posflo.x + posfloWidth - tWidth + tObj.open - 18) + "px";
        tObj.node.style.top = (posflo.y + tObj.top) + "px";
        tObj.node.style.clip = "rect(auto, " + (tWidth - tObj.open + 4) + "px, auto, auto)";
      }
      if (tObj.thumb != null && tObj.thumb != undefined)
        if (tObj.thumb.style.display != "none") tObj.thumb.style.display = "none";
      nogon = true;
    }
    if (tObj.dir==1)
    {
      // Schliessen
      var tWidth = tObj.node.clientWidth;
      if (tObj.open + tObj.rest < tWidth)
      {
        var delay = new Date();
        if (500 < delay - tObj.closeDelay)
        {
          var posflo = getAbsolutPositionOf(tObj.frame);
          var posfloWidth = (tObj.frame.clientWidth==0)?(tObj.frame.scrollWidth-4):tObj.frame.clientWidth;
          tObj.open += tObj.speed;
          if (tWidth < tObj.open + tObj.rest) tObj.open = tWidth - tObj.rest;
          if ((tObj.style & 1) == 0)
          {
            tObj.node.style.left = (posflo.x - tObj.open + 3) + "px";
            tObj.node.style.top = (posflo.y + tObj.top) + "px";
            tObj.node.style.clip = "rect(auto, auto, auto, " + tObj.open + "px)";
          }
          else
          {
            tObj.node.style.left = (posflo.x + posfloWidth - tWidth + tObj.open - 18) + "px";
            tObj.node.style.top = (posflo.y + tObj.top) + "px";
            tObj.node.style.clip = "rect(auto, " + (tWidth - tObj.open + 4) + "px, auto, auto)";
          }
        }
        nogon = true;
      }
      else
      {
        // Falls die Darstellung unsichtbar war, wird sie ab jetzt sichtbar
        tObj.node.style.visibility = "visible";
        tObj.node.style.display = "";
        // Den Thumb darstellen
        if (tObj.thumb != null && tObj.thumb != undefined)
          if (tObj.thumb.style.display != "")
          {
            tObj.thumb.style.display = "";
            var posflo = getAbsolutPositionOf(tObj.frame);
            tObj.thumb.style.top = (posflo.y + tObj.top + tObj.thumbAddtop) + "px";
            tObj.thumb.style.left = (posflo.x + 2) + "px";
          }
      }
    }
  }
  if (nogon) window.setTimeout("conG()", 10);
  else nogonG = true;
}

function conOpen(e)
{
  var en = getEventTarget(e);
  var enp = getParentStartingWith(en, "flopMenu");
  for (var i=0; i<nlA.length; i++)
  {
    if (nlA[i].node == enp || nlA[i].thumb == enp)
    {
      nlA[i].dir = 2;
      if (nlA[i].openfun != undefined)
      {
        nlA[i].openfun(nlA[i].openpar);
      }
    }
  }
  if (nogonG) conG();
}

function conClose(e)
{
  var en = getEventTarget(e);
  var enp = getParentStartingWith(en, "flopMenu");
  for (var i=0; i<nlA.length; i++)
  {
    if (nlA[i].node == enp)
    {
      nlA[i].dir = 1;
      nlA[i].closeDelay = new Date();
    }
  }
  if (nogonG) conG();
}

/*** ContentList - Management ***
contentList
.data = Daten, zB. String, der mittels Explode in ein Array zerlegt wird
.target =
.obj =
.init = Boolean, ist False, solange die Initialisierungsroutine nicht aufgerufen wurde
.initfun = Initialisierungsroutine, hat ein Argument - das Element der ContentList

public
======
contentListAdd(target, htmlObj, initfun, initPara)
- target, ist die gemeinsame DIV, abhand der
  die sich ausschliessenden Objekte identifiziert werden.
  Normalerweise sollen die Objekte Kinder von target sein.
- htmlObj, das Objekt, das angezeigt wird
- initfun, eine Funktion, es wird als  Parameter das Listen-Element übergeben
- initPara, weitere Angaben, die dann von initfun abgerufen werden können

contentListOpen(htmlObj) wird das Element geöffnet und alle anderen Elemente im target geschlossen
*/

var contentList = Array();
function contentListAdd(target, obj, initfun, initPara)
{
    var nObj = new Object();
    nObj.data = initPara;
    nObj.init = false;
    nObj.initfun = initfun;
    nObj.target = target;
    nObj.obj = obj;
    contentList.push(nObj);
}

function contentListOpen (obj)
{
  var content = null;
  for (var i=0; i<contentList.length; i++)
  {
    if (obj == contentList[i].obj)
    {
      content = contentList[i];
      i = contentList.length;
    }
  }

  if (content != null)
  {
    for (var i=0; i<contentList.length; i++)
    {
      if (content.target == contentList[i].target)
      {
        if (contentList[i].obj == obj)
        {
          if (!content.init)
          {
            content.init = true;
            content.initfun (content);
          }
          obj.style.display = "";
        }
        else
        {
          contentList[i].obj.style.display = "none";
        }
      }
    }
  }
}


/*** SmallWindow - Management ***

public
======
miniWindow_clear(target)
miniWindow_node(target) => node
miniWindow_write(target, text, color, tabbing) => node
- text
- color in der Form #aaa oder #aaaaaa
- tabbing einrücken
miniWindow_ref(target, text, ref, color, tabbing) => node
- text
- color in der Form #aaa oder #aaaaaa
- tabbing einrücken
*/

function miniWindow_clear(target)
{
  removeAllChildren(target);
  target.scrollTop = 0;
}

function miniWindow_node(target)
{
  return domFDiv(target);
}

function miniWindow_write(target,text,color,tabbing)
{
  var erg = domFDiv(target);
  domText(text,erg);
  erg.style.fontSize = "8pt";
  if (color != undefined) erg.style.color = color;
  if (tabbing != undefined) erg.style.paddingLeft = tabbing + "pt";
  return erg;
}

function miniWindow_ref(target, text, ref, color, tabbing)
{
  var erg = domFDiv(target);
  domText(text);
  if (color != undefined) erg.style.color = color;
  if (tabbing != undefined) erg.style.paddingLeft = tabbing + "pt";
  return erg;
}

function miniWindow_write_spez(target,text,info,color,tabbing)
{
  var erg = domFDiv(target);
  var ergf = domFDiv(erg);
  ergf.className = "fr";
  domText(info,ergf);
  domText(text,erg);
  ergf.style.fontSize = "7pt";
  erg.style.fontSize = "8pt";
  erg.style.margin = "1pt";
  if (color != undefined) erg.style.color = color;
  if (tabbing != undefined) erg.style.marginLeft = tabbing + "pt";
  return erg;
}

function miniWindow_div(target,textDiv,tabbing)
{
  var erg = domFDiv(target);
  erg.appendChild(textDiv);
  erg.style.margin = "1pt";
  if (tabbing != undefined) erg.style.marginLeft = tabbing + "pt";
  return erg;
}

/************
* Cookies
*************/

function setCookie (key,value)
{
  document.cookie = key + "=" + value;
}

function getCookie (key)
{
  var re = new RegExp(key + "=([^;]*)","gi");
  var erg;
  re.lastIndex=0;
  var gto = re.exec(document.cookie);
  if (gto != null)
  {
    erg = gto[1];
  }
  //alert (erg);
  return erg;
}

function clearCookie (key)
{
  document.cookie = key + "=0;  expires=Thu, 01-Jan-1970 00:00:01 GMT;";
}


function setTextCookie (key,value)
{
  document.cookie = key + "=" + encodeURI(value);
}

function getTextCookie (key)
{

  var erg = "";
  var g = getCookie (key)
  if (g != undefined) erg = decodeURI(g);
  return erg;
}
