function content($line, $tname)
{
    global $db, $debugging, $pathvars, $specialvars, $environment, $defaults, $ausgaben, $rechte;
    if ($specialvars["crc32"] == -1) {
        if ($environment["ebene"] != "" && $tname == $environment["kategorie"]) {
            $tname = crc32($environment["ebene"]) . "." . $tname;
            if ($debugging["html_enable"]) {
                $debugging["ausgabe"] .= "crc32 tname \"" . $tname . "\" forced!!!" . $debugging["char"];
            }
        }
    } else {
        // ist das eine sub kategorie ?
        if ($environment["subkatid"] != "" && $tname == $environment["katid"]) {
            $tname = $tname . "." . $environment["subkatid"];
            if ($debugging["html_enable"]) {
                $debugging["ausgabe"] .= "sub tname \"" . $tname . "\" forced!!!" . $debugging["char"];
            }
            #$dbtname = $tname;
        }
    }
    while (strpos($line, "#(") !== false || strpos($line, "g(") !== false) {
        // wo beginnt die marke
        $labelbeg = strpos($line, "#(");
        $art = "#(";
        $bez = "# (";
        $dbtname = $tname;
        if ($labelbeg === false) {
            $labelbeg = strpos($line, "g(");
            $art = "g(";
            $bez = "g (";
            $dbtname = "global";
        }
        // wo endet die marke (wichtig der offset!)
        $labelend = strpos($line, ")", $labelbeg);
        // wie lang ist die marke
        $labellen = $labelend - $labelbeg;
        // token name extrahieren
        $label = substr($line, $labelbeg + 2, $labellen - 2);
        if (strpos($label, ",") !== false) {
            break;
        }
        // javascript fix
        $sql = "SELECT html, content FROM " . SITETEXT . " WHERE tname='" . $dbtname . "' AND lang='" . $environment["language"] . "' AND label='{$label}'";
        #if ( $debugging["html_enable"] ) $debugging["ausgabe"] .= "sql: ".$sql.$debugging["char"];
        $result = $db->query($sql);
        $row = $db->fetch_row($result);
        if (!is_array($row)) {
            // wenn "aktuelle sprache" = "default sprache" ueberfluessige fehlermeldung nicht anzeigen!
            if ($environment["language"] != $specialvars["default_language"]) {
                if ($debugging["html_enable"]) {
                    $debugging["ausgabe"] .= "Language: \"" . $environment["language"] . "\" for #(" . $label . ") in template \"" . $dbtname . "\" not found using default: \"" . $specialvars["default_language"] . "\"" . $debugging["char"];
                }
            }
            $sql = "SELECT html, content FROM " . SITETEXT . " WHERE tname='{$dbtname}' AND lang='" . $specialvars["default_language"] . "' AND label='{$label}'";
            $result = $db->query($sql);
            $row = $db->fetch_row($result);
        }
        if ($row[1] == "") {
            if ($debugging["html_enable"]) {
                $debugging["ausgabe"] .= "Language: Uuuuups no default language \"" . $specialvars["default_language"] . "\" for #(" . $label . ") in template \"" . $dbtname . "\" found. Giving up!" . $debugging["char"];
            }
        }
        $database = $db->getDb();
        if (is_array($_SESSION["dbzugriff"])) {
            // admin darf alles in seiner db !!
            if (in_array($database, $_SESSION["dbzugriff"]) && $rechte[$specialvars["security"]["overwrite"]] == -1) {
                $dbzugriff = -1;
                $katzugriff = -1;
                // sperre fuer bestimmte templates
            } elseif (in_array($tname, (array) $specialvars["security"]["nochk"])) {
                $katzugriff = FALSE;
                $dbzugriff = FALSE;
                // hier erfolgt der check wenn man kein admin ist und bei nicht gesperrten templates
            } else {
                if (right_check("-1", $environment["ebene"], $environment["kategorie"], $database) != "") {
                    $dbzugriff = -1;
                    $katzugriff = -1;
                } else {
                    $katzugriff = FALSE;
                    $dbzugriff = FALSE;
                }
            }
        } else {
            $dbzugriff = -1;
            // admin darf alles
            if ($rechte[$specialvars["security"]["overwrite"]] == -1) {
                $katzugriff = -1;
                // sperre fuer bestimmte templates
            } elseif (in_array($tname, (array) $specialvars["security"]["nochk"])) {
                $katzugriff = FALSE;
                // hier erfolgt der check wenn man kein admin ist und bei nicht gesperrten templates
            } else {
                if (right_check("-1", $environment["ebene"], $environment["kategorie"], $database) != "") {
                    $katzugriff = -1;
                } else {
                    $katzugriff = FALSE;
                }
            }
        }
        $replace = $row[1];
        // wenn content nicht in html ist und deaktiviert wurde
        if ($row[0] != -1 && $specialvars["denyhtml"] == -1) {
            // html killer :)
            $pattern = "<[\\!\\/a-zA-Z].{0,}>";
            while (preg_match("/" . $pattern . "/", $replace, $tag)) {
                $replace = str_replace($tag[0], " - html gel&ouml;scht! -", $replace);
            }
        }
        // cms edit link einblenden
        if ($specialvars["editlock"] == False) {
            // erlaubt wenn content_right nicht gesetzt und cms_edit = -1
            if ($rechte["cms_edit"] == -1 && $specialvars["security"]["enable"] != -1 || $specialvars["security"]["enable"] == -1 && $katzugriff == -1 && $dbzugriff == -1) {
                // konvertieren ?
                if ($specialvars["wysiwyg"] == "" && $row[0] == -1) {
                    $convert = ",,tag";
                    $signal = "c";
                } elseif ($specialvars["wysiwyg"] != "" && $row[0] != -1) {
                    $convert = ",,html";
                    $signal = "c";
                } else {
                    $convert = "";
                    $signal = "e";
                }
                $editurl = $pathvars["virtual"] . "/cms/edit," . $db->getDb() . "," . $dbtname . "," . $label;
                if ($defaults["cms-tag"]["signal"] == "") {
                    $defaults["cms-tag"]["signal"] = "<img src=\"/images/default/cms-tag-";
                    $defaults["cms-tag"]["/signal"] = ".png\" width=\"4\" height=\"4\" border=\"0\" alt=\"Bearbeiten\" />";
                }
                // wenn es kein value, alt, title und status in der zeile gibt
                $vorher = substr($line, $labelbeg - 20, 20);
                if (!strpos($vorher, "value=\"") && !strpos($vorher, "alt=\"") && !strpos($vorher, "title=\"") && !strpos($vorher, "status='")) {
                    $replace .= " <a target=\"_top\" href=\"" . $editurl . $convert . ".html\">" . $defaults["cms-tag"]["signal"] . $signal . $defaults["cms-tag"]["/signal"] . "</a>";
                } else {
                    #$line = $line."# (".$label.")&nbsp;<a target=\"_top\" href=\"".$editurl.$convert.".html\">".$defaults["cms-tag"]["signal"].$signal.$defaults["cms-tag"]["/signal"]."</a><br />\n";
                    #$ausgaben["inaccessible"] .= "# (".$label.")&nbsp;#(".$label.")<a target=\"_top\" href=\"".$editurl.$convert.".html\">".$defaults["cms-tag"]["signal"].$signal.$defaults["cms-tag"]["/signal"]."</a><br />\n";
                    $ausgaben["inaccessible"] .= $bez . $label . ")&nbsp;" . $art . $label . ")<br />\n";
                }
            }
        }
        // wenn content nicht in html ist
        if ($row[0] != -1) {
            // intelligenten link tag bearbeiten
            $replace = intelilink($replace);
            // neues generelles tagreplace
            $replace = tagreplace($replace);
            // newlines nach br wandeln (muss zuletzt gemacht werden)
            $replace = nlreplace($replace);
        }
        // marke ersetzen
        if (strpos($line, $art) !== false) {
            $line = str_replace($art . $label . ")", $replace, $line);
        }
    }
    return $line;
}
function sitemap($refid, $script_name, $art = "", $modify = "", $self = "")
{
    global $hidedata, $design, $opentree, $treelink, $ausgaben, $cfg, $environment, $db, $pathvars, $specialvars, $rechte, $buffer, $positionArray;
    if (!$ausgaben["path"]) {
        $ausgaben["path"] = "";
    }
    $where = "";
    switch ($art) {
        case menued:
            $flapmenu = -1;
            $aktionlinks = -1;
            $hidestatus = -1;
            $sortinfo = -1;
            break;
        case select:
            $flapmenu = -1;
            $radiorefid = -1;
            $hidestatus = -1;
            break;
        case wizard:
            $flapmenu = -1;
            $aktionlinks = -1;
            $where = "AND (" . $cfg[$script_name]["db"]["menu"]["entries"] . ".hide IS NULL OR " . $cfg[$script_name]["db"]["menu"]["entries"] . ".hide IN ('','0'))";
            break;
        case sitemap:
            $sitemap = -1;
            $where = "AND (" . $cfg[$script_name]["db"]["menu"]["entries"] . ".hide IS NULL OR " . $cfg[$script_name]["db"]["menu"]["entries"] . ".hide IN ('','0'))";
            break;
        default:
    }
    $sql = "SELECT  " . $cfg[$script_name]["db"]["menu"]["entries"] . ".mid,\n                        " . $cfg[$script_name]["db"]["menu"]["entries"] . ".entry,\n                        " . $cfg[$script_name]["db"]["menu"]["entries"] . ".refid,\n                        " . $cfg[$script_name]["db"]["menu"]["entries"] . ".level,\n                        " . $cfg[$script_name]["db"]["menu"]["entries"] . ".sort,\n                        " . $cfg[$script_name]["db"]["menu"]["entries"] . ".hide,\n                        " . $cfg[$script_name]["db"]["lang"]["entries"] . ".lang,\n                        " . $cfg[$script_name]["db"]["lang"]["entries"] . ".label,\n                        " . $cfg[$script_name]["db"]["lang"]["entries"] . ".exturl\n                  FROM  " . $cfg[$script_name]["db"]["menu"]["entries"] . "\n            INNER JOIN  " . $cfg[$script_name]["db"]["lang"]["entries"] . "\n                    ON  " . $cfg[$script_name]["db"]["menu"]["entries"] . ".mid = " . $cfg[$script_name]["db"]["lang"]["entries"] . ".mid\n                 WHERE (" . $cfg[$script_name]["db"]["menu"]["entries"] . ".refid=" . $refid . ")\n                   AND (" . $cfg[$script_name]["db"]["lang"]["entries"] . ".lang='" . $environment["language"] . "')\n                   " . $where . "\n              ORDER BY  " . $cfg[$script_name]["db"]["menu"]["order"] . ";";
    $result = $db->query($sql);
    $count = $db->num_rows($result);
    while ($array = $db->fetch_array($result, 1)) {
        // aufbau des pfads
        if ($refid == 0 || in_array($refid, $positionArray) || $sitemap == -1) {
            $buffer["pfad"] .= "/" . $array["entry"];
            $buffer["pfad_label"] .= "/" . $array["label"];
        }
        // hide-status signalisieren
        $class_hide = "\"\"";
        if ($hidestatus == -1) {
            if ($array["hide"] == -1) {
                $class_hide = "\"red\"";
            }
        }
        // menu-aufbau ala konqueror oder zum klappen
        if ($flapmenu == -1) {
            // zweiten parameter mitziehen wenn er gesetzt ist
            if ($environment["parameter"][2] != "") {
                $move_parameter = "," . $environment["parameter"][2];
            } else {
                $move_parameter = "";
            }
            // alle punkte die nicht im array sind nicht anzeigen
            if ($refid != 0 && !in_array($refid, $positionArray)) {
                continue;
            } else {
                // menu auf werner-art, hier auch noch den gesamten ast ausblenden !
                // nur noch die mit der refid laut $_SESSION
                if ($design == "modern") {
                    if ($array["refid"] != $_SESSION["menued_id"]) {
                        if ($_SESSION["menued_id"] != "" || $array["refid"] != 0) {
                            $buffer[$refid]["display"] = "none";
                        }
                    }
                    // back-link bauen
                    if ($array["mid"] == $_SESSION["menued_id"]) {
                        $ausgaben["path"] = $buffer["pfad_label"];
                        if ($array["refid"] == 0) {
                            $hidedata["back"]["link"] = $cfg[$script_name]["basis"] . "/" . $environment["parameter"][0] . "," . $array["refid"] . $move_parameter . ".html\"";
                        } else {
                            $hidedata["back"]["link"] = $cfg[$script_name]["basis"] . "/" . $environment["parameter"][0] . "," . $array["refid"] . $move_parameter . ".html\"";
                        }
                    }
                }
            }
            // schauen ob unterpunkte vorhanden !
            $sql = "SELECT * FROM " . $cfg[$script_name]["db"]["menu"]["entries"] . " WHERE refid=" . $array["mid"];
            $result_in = $db->query($sql);
            $count_in = $db->num_rows($result_in);
            // sind unterpunkte vorhanden + oder - einblenden
            if ($count_in > 0 && $array["mid"] != $environment["parameter"][2]) {
                $copy = $positionArray;
                array_shift($copy);
                is_array($opentree) && in_array($array["mid"], $opentree) ? $sign = "-" : ($sign = "+");
                $href = "<a class=" . $class_hide . " href=\"" . $cfg[$script_name]["basis"] . "/" . $environment["parameter"][0] . "," . $array["mid"] . $move_parameter . ".html\">" . $array["label"] . "+</a>";
            } else {
                $href = "<span class=" . $class_hide . ">" . $array["label"] . "</span>";
            }
            // hier wird komplett geoeffnet
        } elseif ($sitemap == -1) {
            $href = "<a href=\"" . $pathvars["virtual"] . $buffer["pfad"] . ".html\">" . $array["label"] . "</a>";
        } else {
            $href = $array["label"];
        }
        // schaltflaechen erstellen
        if ($aktionlinks == -1) {
            // hier der alte rechte-check ! fällt weg !
            if ($specialvars["security"]["enable"] == -1) {
                // kategorie u. ebene herausfinden
                $kategorie2check = substr($buffer["pfad"], 0, strpos($buffer["pfad"], "/"));
                $ebene2check = substr($buffer["pfad"], strpos($buffer["pfad"], "/"));
                // hier findet der rechte-check statt
                if (right_check("-1", $ebene2check, $kategorie2check != "") || $rechte[$cfg[$script_name]["right_admin"]] == -1) {
                    $right = -1;
                } else {
                    $right = "";
                }
            }
            $aktion = "";
            if (is_array($modify)) {
                foreach ($modify as $name => $value) {
                    if ($specialvars["security"]["new"] == -1) {
                        if (!priv_check(make_ebene($array["mid"]), $value[2], $specialvars["dyndb"]) && !priv_check(make_ebene($array["mid"]), $value[2])) {
                            continue;
                        }
                    } else {
                        if (!$rechte[$cfg[$script_name]["right_admin"]] == -1 && $right != "-1") {
                            continue;
                        }
                    }
                    if ($name == "up" || $name == "down") {
                        if ($specialvars["security"]["new"] == -1) {
                            if (!priv_check(make_ebene($array["refid"]), $value[2], $specialvars["dyndb"]) && !priv_check(make_ebene($array["mid"]), $value[2])) {
                                continue;
                            }
                        } else {
                            $kategorie2check = substr(make_ebene($array["refid"]), 0, strpos(make_ebene($array["refid"]), "/"));
                            $ebene2check = substr(make_ebene($array["refid"]), strpos(make_ebene($array["refid"]), "/"));
                            if (!$rechte[$cfg[$script_name]["right_admin"]] == -1 && !right_check("-1", $ebene2check, $kategorie2check != "")) {
                                continue;
                            }
                        }
                    }
                    if ($name == "rights") {
                        if ($specialvars["security"]["new"] == -1) {
                            $aktion .= "<a href=\"" . $pathvars["virtual"] . "/" . $cfg[$script_name]["subdir"] . "/righted/edit," . $array["mid"] . ".html\"><img style=\"float:right\" src=\"" . $cfg[$script_name]["iconpath"] . $name . ".png\" alt=\"" . $value[1] . "\" title=\"" . $value[1] . "\" width=\"24\" height=\"18\"></img></a>";
                        } elseif ($specialvars["security"]["enable"] == -1) {
                            $aktion .= "<a href=\"" . $cfg[$script_name]["basis"] . "/" . $value[0] . $name . "," . $array["mid"] . "," . $array["refid"] . ".html\"><img style=\"float:right\" src=\"" . $cfg[$script_name]["iconpath"] . $name . ".png\" alt=\"" . $value[1] . "\" title=\"" . $value[1] . "\" width=\"24\" height=\"18\"></img></a>";
                        }
                        continue;
                    }
                    // anzeige der sortierung
                    if ($sortinfo != "") {
                        if ($name == "sort") {
                            $aktion .= "<span title=\"" . $value[1] . "\" style=\"float:right\">(" . $array["sort"] . ")</span>";
                            continue;
                        }
                    }
                    // anzeige des icons zur content-seite
                    if ($name == "jump") {
                        $aktion .= "<a href=\"" . $pathvars["virtual"] . $buffer["pfad"] . ".html" . $ankerlnk . "\"><img style=\"float:right\" src=\"" . $cfg[$script_name]["iconpath"] . $name . ".png\" alt=\"" . $value[1] . "\" title=\"" . $value[1] . "\" width=\"24\" height=\"18\"></img></a>";
                        continue;
                    }
                    // beim move ausnahme!
                    if ($name == "move") {
                        $aktion .= "<a href=\"" . $cfg[$script_name]["basis"] . "/" . $value[0] . $name . ",0," . $array["mid"] . ".html\"><img style=\"float:right\" src=\"" . $cfg[$script_name]["iconpath"] . $name . ".png\" alt=\"" . $value[1] . "\" title=\"" . $value[1] . "\" width=\"24\" height=\"18\"></img></a>";
                    } else {
                        $aktion .= "<a href=\"" . $cfg[$script_name]["basis"] . "/" . $value[0] . $name . "," . $array["mid"] . "," . $array["refid"] . ".html\"><img style=\"float:right\" src=\"" . $cfg[$script_name]["iconpath"] . $name . ".png\" alt=\"" . $value[1] . "\" title=\"" . $value[1] . "\" width=\"24\" height=\"18\"></img></a>";
                    }
                }
            }
        }
        // wo geht der href hin?
        if ($array["exturl"] != "") {
            $href = "<a class=" . $class_hide . " href=" . $array["exturl"] . ">" . $array["label"] . "</a>";
        }
        // in den buffer schreiben wieviel unterpunkte fuer jeweiligen überpunkt vorhanden sind !
        if (!isset($buffer[$refid]["zaehler"])) {
            $buffer[$refid]["zaehler"] = $count;
            if ($buffer[$refid]["display"] != "none") {
                // beim ersten aufruf eine class menued setzen
                if ($self == "") {
                    $tree .= "<ul class=\"menued\">\n";
                    if ($art == "select" && priv_check(make_ebene(0), $cfg["menued"]["modify"]["move"][2], $specialvars["dyndb"])) {
                        $tree .= "<li><input type=\"radio\" name=\"refid\" value=\"" . $refid . "\" />#(root)</li>";
                    }
                } else {
                    if ($design == "modern") {
                        $tree .= "<ul class=\"menued\">\n";
                    } else {
                        $tree .= "<ul>\n";
                    }
                }
            }
        }
        // refid radio button
        if ($radiorefid != "") {
            if ($array["mid"] == $environment["parameter"][2] || $specialvars["security"]["new"] == -1 && !priv_check(make_ebene($array["mid"]), $cfg["menued"]["modify"]["move"][2])) {
                $radio_disabled = " disabled";
            } else {
                $radio_disabled = "";
            }
            $radiobutton = "<input type=\"radio\" name=\"refid\" " . $radio_disabled . " value=\"" . $array["mid"] . "\" />";
        }
        // listenpunkt schreiben
        if ($buffer[$refid]["display"] != "none") {
            $tree .= "<li>" . $aktion . $radiobutton . $href;
        }
        // funktionsaufruf
        $tree .= sitemap($array["mid"], $script_name, $art, $modify, -1);
        // abschliessendes li anbringen
        if ($buffer[$refid]["display"] != "none") {
            $tree .= "</li>\n";
        }
        // abschliessendes ul anbringen u. pfad kuerzen
        if (isset($buffer[$refid]["zaehler"])) {
            // pfad kürzen
            $buffer["pfad"] = substr($buffer["pfad"], 0, strrpos($buffer["pfad"], "/"));
            $buffer["pfad_label"] = substr($buffer["pfad_label"], 0, strrpos($buffer["pfad_label"], "/"));
            // zaehler 1 zurücksetzen
            $buffer[$refid]["zaehler"] = $buffer[$refid]["zaehler"] - 1;
            // ul anbringen wenn zaehler bei 0
            if ($buffer[$refid]["zaehler"] == 0 && ($art == "sitemap" || $refid == $_SESSION["menued_id"])) {
                $tree .= "</ul>\n";
            }
        }
    }
    return $tree;
}