Index: trunk/CHANGELOG
===================================================================
--- trunk/CHANGELOG	(revision 858)
+++ trunk/CHANGELOG	(revision 859)
@@ -10,20 +10,22 @@
 # = Bugfix
 ! = Update/Change
 
-------------------------------------- 2.7.1 -------------------------------------
-18-Sep-2008 Thomas Hornik
-+ Added captcha-reload
-16-Sep-2008 Thomas Hornik
-# search: fixed windows-related regex issue
+------------------------------------- 2.7.1 -------------------------------------
 19-Aug-2008 Matthias Gallas
+!	updated show_menu2 to version 4.7
+18-Sep-2008 Thomas Hornik
++	Added captcha-reload
+16-Sep-2008 Thomas Hornik
+#	search: fixed windows-related regex issue
+19-Aug-2008 Matthias Gallas
 !	updated to latest FCKEditor version 2.6.3
 02-Aug-2008 Thomas Hornik
-# fixed sorting order of search-results
+#	fixed sorting order of search-results
 25-Jul-2008 Thomas Hornik
-# fixed an issues related to search, changed one SQL inner join (to use USING instead of WHERE)
-! added $database = new Database(); in front of output-filter
+#	fixed an issues related to search, changed one SQL inner join (to use USING instead of WHERE)
+!	added $database = new Database(); in front of output-filter
 05-Jul-2008 Thomas Hornik
-# fixed MODI_DATE/PUBLISHED_DATE issue in news-module. Added PUBLISHED_TIME, removed PUBL_DATE,PUBL_TIME. Thanks to forum-member timorotha
+#	fixed MODI_DATE/PUBLISHED_DATE issue in news-module. Added PUBLISHED_TIME, removed PUBL_DATE,PUBL_TIME. Thanks to forum-member timorotha
 02-Jul-2008 Christian Sommer
 !	updated to latest FCKEditor version 2.6.2
 01-Jul-2008 Thomas Hornik
Index: trunk/wb/modules/show_menu2/info.php
===================================================================
--- trunk/wb/modules/show_menu2/info.php	(revision 858)
+++ trunk/wb/modules/show_menu2/info.php	(revision 859)
@@ -1,7 +1,4 @@
 <?php
-
-// $Id$
-
 /*
     show_menu2: show_menu replacement for Website Baker 
     Copyright (C) 2006-2008, Brodie Thiesfield
@@ -39,7 +36,7 @@
 $module_directory = 'show_menu2';
 $module_name = 'show_menu2';
 $module_function = 'snippet';
-$module_version = '4.6';
+$module_version = '4.7';
 $module_platform = '2.6.x | 2.7.x';
 $module_author = 'Brodie Thiesfield';
 $module_license = 'GNU General Public License';
Index: trunk/wb/modules/show_menu2/README.de.txt
===================================================================
--- trunk/wb/modules/show_menu2/README.de.txt	(revision 858)
+++ trunk/wb/modules/show_menu2/README.de.txt	(revision 859)
@@ -1,39 +1,68 @@
-﻿show_menu2, version 4.6
+﻿show_menu2, version 4.7
 =======================
-Ist ein Code-Snippet für das CMS Website Baker. Es stellt einen kompletten Ersatz für die eingebaute Menüfuntionalität zur Verfügung. Alle für die Erzeugung des Menüs erforderlichen Daten werden durch eine einzige Datenbankabfrage erzeugt. Durch umfangreiche Anpassungsmöglichkeiten des erzeugten HTML-Code können alle möglichen Menüarten (Listen, Breadcrumbs, Sitemaps, usw.) erzeugt werden.
+Ist ein Code-Snippet für das CMS Website Baker. Es stellt einen kompletten 
+Ersatz für die eingebaute Menüfuntionalität zur Verfügung. Alle, für die 
+Erzeugung des Menüs erforderlichen Daten, werden durch eine einzige 
+Datenbankabfrage erzeugt. Durch umfangreiche Anpassungsmöglichkeiten des 
+erzeugten HTML-Code können alle möglichen Menüarten (Listen, Breadcrumbs, 
+Sitemaps, usw.) erzeugt werden.
 
 ---
-Deutsche Übersetzung von BerndJM. Dies ist eine weitgehend direkte Übersetzung des englischen Originals. Bei Übersetzungs- oder Interpretationsfehlern, bitte eine Email an bjm@wwnw.de.
+Deutsche Übersetzung von BerndJM. Dies ist eine weitgehend direkte Übersetzung 
+des englischen Originals. Bei Übersetzungs- oder Interpretationsfehlern, bitte 
+eine Email an bjm@wwnw.de.
 ---
 
+
+
 INSTALLATION
 ============
 1. Die aktuelle Version von http://code.jellycan.com/show_menu2/ herunterladen.
 2. In das Admin-Backend der Website Baker Installation einlogen.
 3. Erweiterungen -> Module aufrufen.
-4. Wenn bereits eine frühere Version von show_menu2 installiert ist, diese über "Modul deinstallieren" auswählen und deinstallieren.
-5. Im Abschnitt "Modul installieren" das im Schritt 1 heruntergeladene zip-File auswählen und installieren.
+4. Wenn bereits eine frühere Version von show_menu2 installiert ist, diese über
+   "Modul deinstallieren" auswählen und deinstallieren.
+5. Im Abschnitt "Modul installieren" das im Schritt 1 heruntergeladene zip-File
+   auswählen und installieren.
 
    
+   
 BENUTZUNG VON SHOW_MENU2
 ========================
-Um show_menu2 zu benutzen muss das verwendete Template an den Stellen modifiziert werden, an denen das Menü erscheinen soll. Bitte beachten: Wenn alte Menüaufrufe ersetzt werden, müssen unbedingt auch die entsprechenden neuen Parameter verwendet werden die show_menu2 benötigt.
+Um show_menu2 zu benutzen muss das verwendete Template an den Stellen 
+modifiziert werden, an denen das Menü erscheinen soll. Bitte beachten: Wenn alte 
+Menüaufrufe ersetzt werden, müssen unbedingt auch die entsprechenden neuen 
+Parameter verwendet werden die show_menu2 benötigt.
 
-In den meisten Fällen genügt bereits der Standardaufruf ohne weitere Parameter von show_menu2. In diesem Fall werden die Vorgabewerte verwendet, dies erzeugt ein Menü das die aktuelle Seite und die Unterseiten der aktuellen Seite anzeigt:
+In den meisten Fällen genügt bereits der Standardaufruf ohne weitere Parameter 
+von show_menu2. In diesem Fall werden die Vorgabewerte verwendet, dies erzeugt 
+ein Menü das die aktuelle Seite und die Unterseiten der aktuellen Seite anzeigt:
     
-	show_menu2();
+    show_menu2();
     
-Bitte beachten: der Aufruf von show_menu2 ist PHP und muss normalerweise in PHP-Codezeichen eingeschlossen werden (ausser der Aufruf erfolgt bereits innerhalb von PHP Code):
+Bitte beachten: der Aufruf von show_menu2 ist PHP und muss normalerweise in PHP-
+Codezeichen eingeschlossen werden (ausser der Aufruf erfolgt bereits innerhalb 
+von PHP Code):
 
     <?php show_menu2(); ?>
 
-Dieses Vorgabe Menü erzeugt bereits ein komplettes Menü auf Listenbasis mit etlichen Klassen, die eine leichte Formatierung mittels CSS ermöglichen. Es wird z.B. die Klasse "menu-current" zu dem <li> Tag des aktuellen Menüpunktes hinzugefügt, zusätzlich erhält jeder Menüpunkt der Unterpunkte enthält die Klasse "menu-expand". Dies erlaubt es sehr differenzierte CSS Regeln für die einzelnen Menüpunkte aufzustellen.
+Dieses Vorgabe Menü erzeugt bereits ein komplettes Menü auf Listenbasis mit 
+etlichen Klassen, die eine leichte Formatierung mittels CSS ermöglichen. Es wird 
+z.B. die Klasse "menu-current" zu dem <li> tag des aktuellen Menüpunktes 
+hinzugefügt. Zusätzlich erhält jeder Menüpunkt der Unterpunkte enthält die 
+Klasse "menu-expand". Das erlaubt es sehr differenzierte CSS Regeln für die 
+einzelnen Menüpunkte aufzustellen.
 Zum Beispiel:
 
     li.menu-expand  { font-weight: bold; }
     li.menu-current { background: red; }
 
-Im Abschnitt "HTML-Ausgabe" findet sich eine detaillierte Beschreibung welche Klassen welchem Element zugeordnet werden. Durch die Verwendung von verschiedenen Parametern bei dem show_menu2 Funktionsaufruf lassen sich auch recht umfangreiche und unterschiedliche Menüstrukturen erzeugen. Um beispielsweise nur Menüpunkte aus der obersten Ebene der Menüstruktur darzustellen, könnte man folgenden Aufruf verwenden:
+Im Abschnitt "HTML-Ausgabe" findet sich eine detaillierte Beschreibung welche 
+Klassen welchem Element zugeordnet werden. Durch die Verwendung von 
+verschiedenen Parametern bei dem show_menu2 Funktionsaufruf lassen sich auch 
+recht umfangreiche und unterschiedliche Menüstrukturen erzeugen. Um 
+beispielsweise nur Menüpunkte aus der obersten Ebene der Menüstruktur 
+darzustellen, könnte man folgenden Aufruf verwenden:
 
     show_menu2(0, SM2_ROOT, SM2_START);
     
@@ -41,11 +70,58 @@
 
     show_menu2(0, SM2_CURR+1, SM2_CURR+2);
 
-Es gibt jede Menge Möglichkeiten, um die unterschiedlichten Menüstrukturen zu erzeugen, zahlreiche Beispiele dazu findet man auf der Demo-Website: http://code.jellycan.com/sm2test/
+Es gibt jede Menge Möglichkeiten, um die unterschiedlichsten Menüstrukturen zu 
+erzeugen. Zahlreiche Beispiele dazu findet man auf der Demo-Website: http://
+code.jellycan.com/sm2test/
 
 
+
+HÄUFIGE FRAGEN
+==============
+
+Q:  Ich bin kein Programmierer. Gibt es keine einfachere Dokumentation? 
+A:  Nein, denn dies hier ist bereits die einfache Dokumentation.
+
+
+Q:  Wie kann ich ein sogenanntes Drop-Down Menü erstellen?
+A:  Dies hat nichts mit show_menu2 zu tun. Um ein Drop-Down Menü zu erzeugen muß
+    lediglich der CSS-Code des jeweiligen Templates angepaßt werden. Die nötigen 
+    Anpassungen findet man z.B. im "allcss2" Template aus dem WB Addon     
+    Repository -> http://addons.websitebaker.org/pages/templates.php
+
+
+Q:  Warum verschwindet das Menü nachdem ich in einer mehrsprachigen WB-Site die 
+    Suchfunktion benutzt habe?
+A:  Im verwendeten Template fehlen die notwendigen Zeilen:
+
+    1.  Im WB Admin Backend: Optionen -> Erweiterte Optionen anzeigen ->        
+        Suchoptionen -> Kopfzeile - hier direkt nach dem öffnenden <form> tag 
+        folgende Zeile einfügen:
+       +        <input type="hidden" name="referrer" value="[REFERRER_ID]" />
+
+    2.  In der index.php des verwendeten Templates folgende Zeile unmittelbar   
+        nach dem öffnenden <form> tag der Suche einfügen:
+
+        <input type="hidden" name="referrer" value="<?php echo defined('REFERRER_ID')?REFERRER_ID:PAGE_ID;?>" />
+
+
+Q:  Mehrsprachig? Das klingt toll. Wie macht man das?
+A:  http://help.websitebaker.org/pages/de/advanced-doku/designer-guide/mehrsprachige-webseiten.php
+
+
+Q:  Jedesmal wenn eine Seite aufgerufen wird, erzeugt SM2 folgende Warnmeldung:
+    "show_menu2 error: $aOptions is invalid. No flags from group 1 supplied!"
+A:  Der Funktion wurden die falschen Werte oder eine falsche Anzahl an 
+    Werten übergeben.
+    Siehe den Abschnitt PARAMETER für die korrekten Flag Werte die dem 
+    $aOptions Parameter zu übergeben sind.    
+
+
+    
 FUNKTION
 ========
+
 Der komplette Aufruf und die Vorgabe Parameterwerte für show_menu2 sind wie folgt:
 
     show_menu2(
@@ -52,7 +128,7 @@
         $aMenu          = 0,
         $aStart         = SM2_ROOT,
         $aMaxLevel      = SM2_CURR+1,
-        $aFlags         = SM2_TRIM,
+        $aOptions       = SM2_TRIM,
         $aItemOpen      = '[li][a][menu_title]</a>',
         $aItemClose     = '</li>',
         $aMenuOpen      = '[ul]',
@@ -61,22 +137,44 @@
         $aTopMenuOpen   = false
         )
 
-Im Abschnitt "Parameter" findet sich eine detaillierte Beschreibung jedes einzelnen Parameters.
-Ab $aItemOpen kann jedem Parameter der Wert false übergeben werden um den jeweiligen Vorgabewert zu erhalten.
-Dies kann beispielsweise verwendet werden um eine nummerierte Liste zu erzeugen, während für die einzelnen Menüpunkte trotzdem die Vorgabewerte Verwendung finden:
+Im Abschnitt "Parameter" findet sich eine detaillierte Beschreibung jedes 
+einzelnen Parameters.
+Jeder Parameter muß absolut korrekt verwendet werden. Folgende Regeln können 
+dabei helfen:
 
-show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL, false, false, '<ol>', '</ol>');
+    $aMenu = 0 ist in den meisten Anwendungsfällen der beste Wert.
+    
+    $aStart muß entweder eine page ID oder ein Wert der mit "SM2_" beginnt sein.
+    
+    $aMaxLevel kann nur Werte erhalten, die mit "SM2_" beginnen.
+    
+    $aOptions bis auf einige wenige Spezialfälle sind hier nur Werte die mit 
+    "SM2_" beginnen zulässig.
+    
+    Alle weiteren Parameter enthalten die (HTML)Tags die die Ausgabe des Menüs 
+    steuern.
+    
+    Ab $aItemOpen kann jedem Parameter der Wert false übergeben werden um den 
+    jeweiligen Vorgabewert zu erhalten.
 
-Bitte beachten: bis einschliessich $aFlags müssen alle Parameter explizit übergeben werden!
+    Dies kann beispielsweise verwendet werden um eine nummerierte Liste zu 
+    erzeugen, während für die einzelnen Menüpunkte trotzdem die Vorgabewerte 
+    Verwendung finden:
 
+        show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL, false, false, '<ol>', '</ol>');
 
+Bitte beachten: bis einschliesslich $aOptions müssen alle Parameter explizit übergeben werden!
+
+
 HTML-AUSGABE
 ============
-Die HTML-Ausgabe hängt wesentlich davon ab, welche Parameter an die Funktion übergeben werden. Unabhängig davon werden nachfolgende Klassen grundsätzlich für jedes Menü verwendet, wobei einzelne Menüpunkte, wenn erforderlich, auch mehrere Klassen erhalten können.
+Die HTML-Ausgabe hängt wesentlich davon ab, welche Parameter an die Funktion übergeben werden. 
+Unabhängig davon werden nachfolgende Klassen grundsätzlich für jedes Menü verwendet, wobei 
+einzelne Menüpunkte, wenn es erforderlich ist, auch mehrere Klassen erhalten können.
 
-    KLAssE          ZUORDNUNG
+    KLASSE          ZUORDNUNG
     ------------    -------------------------------------------------------
-    menu-top        Nur der erste Menüpunkt
+    menu-top        Nur der erste Menüpunkt.
     menu-parent     Jeder Hauptmenüpunkt.
     menu-current    Nur der Menüpunkt der aktuellen Seite.
     menu-sibling    Alle "Geschwister" der aktuellen Seite.
@@ -85,10 +183,11 @@
     menu-first      Der erste Punkt eines jeden Menüs oder Untermenüs.
     menu-last       Der letzte Punkt eines jeden Menüs oder Untermenüs.
 
-    Folgende Klassen werden nur hinzugefügt, wenn das SM2_NUMCLAss flag gesetzt ist:
+    Folgende Klassen werden nur hinzugefügt, wenn das SM2_NUMCLASS Flag gesetzt 
+    ist:
 
     menu-N          Jeder Menüpunkt, wobei das N für die ABSOLUTE Menütiefe, 
-		    beginnend bei 0, des jeweiligen Menüpunktes steht.
+                    beginnend bei 0, des jeweiligen Menüpunktes steht.
                     Die oberste Ebene ist also immer menu-0, die nächste
                     Ebene menu-1 usw.
     menu-child-N    Jedes Untermenü der aktuellen Seiten, wobei das N für die
@@ -137,58 +236,59 @@
 PARAMETER
 =========
 $aMenu      
-    Nummer des Menüs. Dies ist nützlich um mehrere Menüs auf einer Seite zu verwenden.
+    Nummer des Menüs. Diese ist nützlich um mehrere Menüs auf einer Seite zu    
+    verwenden.
     Menü Nummer 0 ist das Vorgabemenü der aktuellen Seite, SM2_ALLMENU gibt alle
     im System verwendeten Menüs zurück.
 
 $aStart  
-    Gibt an, ab welcher Ebene die Erzeugung des Menüs beginnen soll. In den meisten
-    Fällen wird dies die oberste Ebene des anzuzeigenden Menüs sein. Es kann einer
-    der folgenden Werte verwendet werden:
+    Gibt an, ab welcher Ebene die Erzeugung des Menüs beginnen soll. In den     
+    meisten Fällen wird dies die oberste Ebene des anzuzeigenden Menüs sein. Es 
+    kann einer der folgenden Werte verwendet werden:
 
         SM2_ROOT+N  Beginnt N Ebenen unterhalb der obersten Ebene, z.B.:
-                      SM2_ROOT      Beginnt auf der obersten Ebene
-                      SM2_ROOT+1    Beginnt eine Ebene unterhalbe der obersten Ebene
-                      SM2_ROOT+2    Beginnt zwei Ebenen unterhalbe der obersten Ebene
+                    SM2_ROOT      Beginnt auf der obersten Ebene
+                    SM2_ROOT+1    Beginnt eine Ebene unterhalb der obersten Ebene
+                    SM2_ROOT+2    Beginnt zwei Ebenen unterhalb der obersten Ebene
 
         SM2_CURR+N  Beginnt N Ebenen unterhalb der aktuellen Ebene, z.B.:
-                      SM2_CURR      Beginnt auf der aktuellen Ebene. Alle Geschwister
-                                    der aktuellen Ebene
-                      SM2_CURR+1    Beginnt eine Ebene unterhalb der aktuellen Ebene
-                                    mit allen Unterebenen
+                    SM2_CURR      Beginnt auf der aktuellen Ebene. Alle Geschwister
+                                  der aktuellen Ebene
+                    SM2_CURR+1    Beginnt eine Ebene unterhalb der aktuellen Ebene
+                                  mit allen Unterebenen
 
         page_id     Verwendet die Seite mit der angegebenen page id als Elternelement.
-                    Alle Untermenüs dieser Seite werden angezeigt. (Die page id kann
-                    ermittelt werden, wenn man die Seite im Admin-Backend editiert,
-		    sie steht dann in der Adresszeile des Browsers:
-		    http://SITE/admin/pages/modify.php?page_id=35
+                    Alle Untermenüs dieser Seite werden angezeigt. 
+                    (Die page id kann ermittelt werden, wenn man die Seite im 
+                    Admin-Backend editiert, sie steht dann in der Adresszeile des      
+                    Browsers: http://SITE/admin/pages/modify.php?page_id=35
 
 $aMaxLevel   
-    Die maximale Anzahl der Ebenen die angezeigt werden, die Anzeige
-    beginnt ab der in $aStart festgelegten Ebene bis hin zu der hier 
+    Die maximale Anzahl der Ebenen die angezeigt werden. Die Anzeige
+    beginnt ab der in $aStart festgelegten Ebene, bis hin zu der hier 
     festgelegten Ebene.
         
-	SM2_ALL      Keine Beschränkung, alle Ebenen werden angezeigt
+        SM2_ALL      Keine Beschränkung, alle Ebenen werden angezeigt
 
         SM2_CURR+N   Zeigt immer die aktuelle Seite + N Ebenen. 
-                        SM2_CURR      Aktuelle Ebene (keine Unterebene)
-                        SM2_CURR+3    Alle übergeordneten + aktuelle + 3 Unterebenen
+                     SM2_CURR      Aktuelle Ebene (keine Unterebene)
+                     SM2_CURR+3    Alle übergeordneten + aktuelle + 3 Unterebenen
 
         SM2_START+N  Beginnt immer auf der Startebene + N Ebenen.
-                     Die Ebenen werden unabhängig davon angezeigt 
+                     Die Ebenen werden unabhängig davon angezeigt,egal 
                      auf welcher Ebene sich die aktuelle Seite befindet.
-		        SM2_START     Eine einzelne Ebene ab der Startebene
-                        SM2_START+1   Startebene + eine Ebene darunter
+                     SM2_START     Eine einzelne Ebene ab der Startebene.
+                     SM2_START+1   Startebene + eine Ebene darunter.
 
         SM2_MAX+N    Zeigt höchstens N Ebenen ab der Startebene.
                      Ebenen unterhalb der aktuellen Ebene werden nicht angezeigt.
-			SM2_MAX       Starting level only (same as SM2_START)
-                        SM2_MAX+1     Maximum of starting level and 1 level.
+                     SM2_MAX       Nur die Startebene (gleiche Wirkung wie SM2_START)
+                     SM2_MAX+1     Die Startebene und eine Ebene darunter.
 
-$aFlags   
+$aOptions   
     Spezielle Flags für verschiedene Menügenerierungs Optionen. Sie können mittels
     einer ODER Verknüpfung (|) miteinander kombiniert werden. Um beispielsweise
-    sowohl TRIM als auch PRETTY zu definieren, verwendet man: SM2_TRIM|SM2_PRETTY.
+    sowohl TRIM als auch PRETTY zu definieren, verwendet man: (SM2_TRIM | SM2_PRETTY).
 
     GROUP 1
     -------
@@ -233,7 +333,7 @@
     -------
     Diese Flags sind optional, sie können in beliebiger Anzahl kombiniert werden.
 
-    SM2_NUMCLAss    Fügt die nummerierten Menüklassen "menu-N" und 
+    SM2_NUMCLASS    Fügt die nummerierten Menüklassen "menu-N" und 
                     "menu-child-N hinzu.
         
     SM2_ALLINFO     Lädt alle Felder aus der Seitentabelle der Datenbank.
@@ -247,18 +347,19 @@
                     mit SM2_NOCACHE, sonst zeigt es keine Wirkung.
     
     SM2_NOCACHE     Die aus der Datenbank gelesenen Daten werden bei erneutem Aufruf von
-                    show_menu2 nicht wiederverwendet sondern erneut aus der Datenbank gelesen.
+                    show_menu2 nicht wiederverwendet sondern erneut aus der Datenbank 
+                    gelesen.
     
     SM2_PRETTY      Bringt die HTML-Ausgabe des Menüs mittels Leerzeichen und
-                    Zeilenumbrüchen in eine gut lesbare Form. Dies ist besonders nützlich
-                    beim Debuggen der Menüausgabe.
+                    Zeilenumbrüchen in eine gut lesbare Form. Das ist besonders 
+                    nützlich beim Debuggen der Menüausgabe.
     
     SM2_BUFFER      Gibt den HTML-Code nicht direkt aus, sondern speichert ihn intern
-                    zwischen und gibt ihn al kompletten String aus.
+                    zwischen und gibt ihn als kompletten String aus.
     
     SM2_CURRTREE    Schliesst alle anderen Toplevelmenüs von der Betrachtung aus.
                     Es werden nur Menüpunkte des aktuellen Menüzweiges dargestellt.
-                    Dieses Flag kann bei Bedarf mit jedem flag aus der Gruppe 1
+                    Dieses Flag kann bei Bedarf mit jedem Flag aus der Gruppe 1
                     kombiniert werden.
     
     SM2_ESCAPE      Wendet htmlspecialchars auf den Menüstring an.
@@ -266,26 +367,30 @@
                     sein um eine valide HTML Ausgabe zu erzeugen.
                         
     SM2_NOESCAPE    Dies ist das Standarverhalten und existiert nur aus Gründen der 
-                    Abwärtskompatibiltät.                   
+                    Abwärtskompatibilität.                   
 
+    Für diesen Parameter gibt es auch einen erweiterten Modus, bei dem die Optionen
+    als assoziatives Array übergeben werden. Näheres dazu im Abschnitt ERWEITERTE
+    OPTIONEN. Für die meisten Anwendungsfälle wird dies jedoch NICHT benötigt.
+    
 $aItemOpen
     Dies legt den Formatstring fest, mit dem jeder einzelne Menüeintrag begonnen
     wird. Für den allerersten Menüeintrag kann mittels $aTopItemOpen ein anderer
     Formatstring definiert werden.
     Wenn dieser Parameter auf false gesetzt wird, wird der Vorgabe Formatstring
-    '[li][a][menu_title]</a>' verwendet um die Kompatibiltät zur Website Baker
-    Standardfunktion show_menu() zu gewährleiten.
+    '[li][a][menu_title]</a>' verwendet um die Kompatibilität zur Website Baker
+    Standardfunktion show_menu() zu gewährleisten.
     Da die Formatierung mittels CSS-Klassen oftmals einfacher ist, wenn sie auf den 
-    <a> Tag angewendet werden, empfiehlt es sich hier folgenden Formatstring zu
+    <a> tag angewendet werden, empfiehlt es sich hier folgenden Formatstring zu
     verwenden: '<li>[ac][menu_title]</a>'.
     
     Dieser Parameter kann auch als Instanz eine Formatierungklasse für das Menü
-    verwendet werden. Im Abschnitt "Formatter" findet sich dazu eine detailierte 
-    Beschreibung. Wenn hier ein Formatter angegeben wird, werden alle Argumente
-    nach $aItenOpen ignoriert.
+    verwendet werden. Die nähere Beschreibung dazu findet sich im Abschnitt FORMATTER. 
+    Wenn hier ein Formatter angegeben wird, werden alle Argumente
+    nach $aItemOpen ignoriert.
 
 $aItemClose
-    Dieser String schliesst jeden Menüpunkt ab. 
+    Dieser String schließt jeden Menüpunkt ab. 
     Bitte beachten: dies ist kein Formatstring und es werden keine Schlüsselworte
     ersetzt!
     Wenn dieser Parameter auf false gesetzt ist, wird die Vorgabe '</li>' verwendet.
@@ -298,7 +403,7 @@
     verwendet.
     
 $aMenuClose
-    Dieser String schliesst jedes Menü ab. 
+    Dieser String schließt jedes Menü ab. 
     Bitte beachten: dies ist kein Formatstring und es werden keine Schlüsselworte
     ersetzt!
     Wenn dieser Parameter auf false gesetzt ist, wird die Vorgabe '</ul>' verwendet.
@@ -311,11 +416,37 @@
     Der Formatstring für das erste Menü. Wenn dieser Parameter auf false
     gesetzt wird, wird der selbe Formatstring wie bei $aMenuOpen verwendet.
 
+    
 
+ERWEITERTE OPTIONEN
+===================
+Der Parameter $aOptions kann auf zweierlei Arten verwendet werden. Zum einen, wie oben 
+im Abschnitt PARAMETER beschrieben, diese Art sollte für die allermeisten 
+Anwendungsfälle ausreichen. Um allerdings in speziellen Fällen die Sonderoptionen 
+ansprechen zu können, müssen die erforderlichen Werte als assoziatives Array 
+bereitgestellt werden.
+Bitte beachten: Die SM2_* Flags sind auch hierbei erforderlich und müßen als 'flags' 
+übergeben werden.
+
+    'flags'     **ZWINGEND ERFORDELICH** Dies sind die Flags die oben im Abschnitt 
+                PARAMETER unter $aOptions beschrieben wurden.
+
+    'notrim'    Hiermit wird eine Anzahl von Ebenen festegelegt, die relativ bezogen 
+                auf die in $aStart festgelegte Menüebene, immer angezeigt werden. Dies 
+                bewirkt, daß für diese Ebenen das SM2_TRIM Flag ignoriert wird.
+
+Um dieses Array zu verwenden, empfiehlt es sich es erst anzulegen und dann den 
+$aOptions parameter mit dem angelegten Array zu beliefern:
+
+    $options = array('flags' => (SM2_TRIM|...), 'notrim' => 1);
+    show_menu2(0, SM2_ROOT, SM2_CURR+1, $options);
+    
+    
+    
 FORMAT STRINGS
 ==============
 Die folgenden Tags können in den Formatstrings für $aItemOpen und $aMenuOpen
-verwendet werden und werden durch den entsprechenden Text ersetzt.
+verwendet werden und sollen durch den entsprechenden Text ersetzt werden.
 
 [a]             <a> tag ohne Klasse:   '<a href="[url]" target="[target]">'
 [ac]            <a> tag mit Klasse:    '<a href="[url]" target="[target]" class="[class]">'
@@ -322,23 +453,27 @@
 [li]            <li> tag mit Klasse:   '<li class="[class]">'
 [ul]            <ul> tag mit Klasse:   '<ul class="[class]">'
 [class]         Liste der Klassen für diese Seite
-[menu_title]    Text des Menütitel (HTML entity escaped ausser das SM2_NOESCAPE Flag ist gesetzt)
-[page_title]    text des Seitentitel (HTML entity escaped ausser das SM2_NOESCAPE Flag ist gesetzt)
+[menu_title]    Text des Menütitel 
+                (HTML entity escaped ausser das SM2_NOESCAPE Flag ist gesetzt)
+[page_title]    text des Seitentitel 
+                (HTML entity escaped ausser das SM2_NOESCAPE Flag ist gesetzt)
 [url]           die URL der Seiten für den <a> tag
 [target]        das Seitenziel für den <a> tag
-[page_id]       die Page ID des aktuellen Menüpunktes
-[parent]        die Page ID des übergeorneten Menüpunktes
-[level]         die Seitenebene, dies ist die gleiche Zahl die im "menu-N" CSS tag verwendet wird.
-[sib]           Anzahl der Geschwister des aktuellen Menüpunktes
-[sibCount]      Anzahl aller Geschwister in diesem Menü
+[page_id]       die Page ID des aktuellen Menüpunktes.
+[parent]        die Page ID des übergeordneten Menüpunktes.
+[level]         die Seitenebene, 
+                dies ist die gleiche Zahl die im "menu-N" CSS tag verwendet wird.
+[sib]           Anzahl der Geschwister des aktuellen Menüpunktes.
+[sibCount]      Anzahl aller Geschwister in diesem Menü.
 [if]            Bedingung (Details hierzu im Abschnitt "Bedingte Formatierung')
 
-Folgende tags sind nur verfügbar, wenn das SM2_ALLINFO flag gesetzt ist.
+Folgende tags sind NUR verfügbar, wenn das SM2_ALLINFO Flag gesetzt ist.
 
 [description]   Seitenbeschreibung
 [keywords]      Schlüsselworte der Seite
 
 
+
 BEDINGTE FORMATIERUNG
 =====================
 Die Anweisung für eine bedingte Formatierung kann eine der folgenden Formen haben:
@@ -355,7 +490,7 @@
         Zeichen '}' nicht erlaubt ist).
     
     C   Der Ausdruck der verwendet wird, wenn die Bedingung nicht erfüllt ist.
-        Dies kann ein beliebiger String sein, der jedoch nicht das zeichen '}'
+        Dies kann ein beliebiger String sein, der jedoch nicht das Zeichen '}'
         enthalten darf. Er kann jeden beliebigen Formatstring aus dem Abschnitt
         'Format Strings' enthalten, jedoch keinen weiteren Bedingungstest (da das 
         Zeichen '}' nicht erlaubt ist).
@@ -362,9 +497,10 @@
 
 Die Bedingung ist eine Kombination von einem oder mehreren boolschen Vergleichen.
 Wenn mehr als ein Vergleich erforderlich ist, so muss dieser mit den anderen Vergleichen
-mittels || (boolsches oder - OR) oder && (boolsches und - AND) vernüpft werden.    
+mittels || (boolsches oder - OR) oder && (boolsches und - AND) verknüpft werden.    
 
-Ein einzelner Vergleich besteht aus dem linken Operanden, dem Operator und dem rechten Operanden.
+Ein einzelner Vergleich besteht aus dem linken Operanden, dem Operator und dem rechten 
+Operanden.
 z.B. X == Y  - hierbei ist X der linke Operand, == der Operator und Y der rechte Operand.
     
     Linker Operand. Muss eines der folgende Schlüsselworte sein:
@@ -383,7 +519,7 @@
         ==          Gleich
         !=          Nicht gleich
         >=          Grössr oder gleich als
-        >           grösser als
+        >           Grösser als
     
     Rechter Operand. Die Art dieses Operanden hängt von dem, für den linken Operanden
                      verwendeten Schlüsselwort ab.
@@ -390,16 +526,16 @@
         class       einer der "menu-*" Klassennamen wie sie im Abschnitt "Ausgabe"
                     spezifiziert sind.
         level       Überprüfung der Seitenebene gegen folgende Werte:
-                      <number>  die absolute Seitenebene
-                      root      die oberste Seitenebene
-                      granny    die Seitenebene über der übergeordneten Seitenebene
-                      parent    die übergeordnete Seitenebene
-                      current   die aktuelle Seitenebene
-                      child     die untergeornete Seitenebene
+                        <number>  die absolute Seitenebene
+                        root      die oberste Seitenebene
+                        granny    die Seitenebene über der übergeordneten Seitenebene
+                        parent    die übergeordnete Seitenebene
+                        current   die aktuelle Seitenebene
+                        child     die untergeornete Seitenebene
         id          Überprüfung der page id gegen folgende Werte:
-                      <number>  die absolute page id
-                      parent    die übergeordnete page id
-                      current   die aktuelle page id
+                        <number>  die absolute page id
+                        parent    die übergeordnete page id
+                        current   die aktuelle page id
         sib         Eine positive Integerzahl, oder "sibCount" um die Anzahl der
                     Geschwister in diesem Menü zu überprüfen
         sibCount    Eine positive Integerzahl
@@ -415,10 +551,12 @@
     [if(sib==2){exp}]               ist der zweite Eintrag in einem Menü
     [if(sibCount>1){exp}]           ist in einem Menü mit mehr als einem Eintrag
     [if(sibCount!=2){exp}]          ist in einem Menü, das nicht genau 2 Einträge hat
-    [if(level>parent){exp}]         ist ine eine Geschwistermenü oder dem Untermenü eines Geschwistermenüs
+    [if(level>parent){exp}]         ist in einem Geschwistermenü oder dem Untermenü eines      
+                                    Geschwistermenüs
     [if(id==parent){exp}]           ist der übergeordnete Punkt der aktuellen id
 
-Wenn eine sonst-Klausel (else) hinzugefügt wird, so wird diese in allen anderen Fällen ausgeführt.
+Wenn eine sonst-Klausel (else) hinzugefügt wird, so wird diese in allen anderen Fällen 
+ausgeführt.
 Zum Beispiel wird "foo" immer dann ausgeführt, wenn die if Überprüfung falsch ergibt, also:
 
     [if(sib==2){exp}else{foo}]      ist NICHT der zweite Eintrag im Menü
@@ -426,9 +564,11 @@
 
 Bei mehrfach Vergleichen wird der Ausdruck "exp" nur ausgeführt, wenn:
 
-    [if(sib == 1 || sib > 3){exp}]  ist der erste Eintrag ODER ist der vierte oder höhere Eintrag im Menü    
+    [if(sib == 1 || sib > 3){exp}]  ist der erste Eintrag ODER ist der vierte oder höhere   
+    Eintrag im Menü    
                
-    [if(id == current && class == menu-expand){exp}  ist der aktuelle Eintrag UND hat Untermenüs
+    [if(id == current && class == menu-expand){exp}  ist der aktuelle Eintrag UND hat 
+    Untermenüs
         
 Bitte beachten:
 Alle Überprüfungen werden in der Reihenfolge ausgeführt, in der sie notiert sind, denn:
@@ -436,6 +576,8 @@
 * Überprüfungen werden nicht gruppiert (eine Klammerung von Überprüfungen wird nicht unterstützt)
 * sowohl || als auch && haben die gleiche Wertigkeit
 
+
+
 FORMATTER
 =========
 Achtung: dies ist ein fortgeschrittenes und äusserst selten benötigtes Feature!
@@ -443,9 +585,9 @@
 Mit umfangreichen Kenntnissen in der PHP Programmierung ist es möglich den vordefinierten
 Formatierer von show_menu2 mit einem eigenen zu ersetzen.
 In der include.php von show_menu2 sieht man wie der Formatierer geschreiben werden muss.
-Die API die verwendet werden muss sieht wie folgt aus:
+Die API, die verwendet werden muss, sieht wie folgt aus:
 
-(Anmerkung des Übersetzers: Kommentare nicht übersetzt, wer sich so weit vorwagt, sollte
+(Anmerkung des Übersetzers: Kommentare sind nicht übersetzt, wer sich so weit vorwagt, sollte
 damit keine Probleme haben ;-)
 
 class SM2_Formatter
@@ -471,6 +613,3 @@
     // called once after finalize() if the SM2_NOOUTPUT flag is used
     function getOutput() { }
 };
-
-
-
Index: trunk/wb/modules/show_menu2/languages/index.php
===================================================================
--- trunk/wb/modules/show_menu2/languages/index.php	(revision 858)
+++ trunk/wb/modules/show_menu2/languages/index.php	(revision 859)
@@ -1,7 +1,5 @@
 <?php
 
-// $Id$
-
 /*
     show_menu2: show_menu replacement for Website Baker 
     Copyright (C) 2006-2008, Brodie Thiesfield
Index: trunk/wb/modules/show_menu2/languages/DE.php
===================================================================
--- trunk/wb/modules/show_menu2/languages/DE.php	(revision 858)
+++ trunk/wb/modules/show_menu2/languages/DE.php	(revision 859)
@@ -1,7 +1,5 @@
 <?php
 
-// $Id$
-
 /*
     show_menu2: show_menu replacement for Website Baker 
     Copyright (C) 2006-2008, Brodie Thiesfield
Index: trunk/wb/modules/show_menu2/include.php
===================================================================
--- trunk/wb/modules/show_menu2/include.php	(revision 858)
+++ trunk/wb/modules/show_menu2/include.php	(revision 859)
@@ -1,7 +1,4 @@
 <?php
-
-// $Id$
-
 /*
     show_menu2: show_menu replacement for Website Baker 
     Copyright (C) 2006-2008, Brodie Thiesfield
@@ -22,7 +19,7 @@
     02110-1301, USA.
 
     ***********************************************
-    ** Version 4.6: see README for documentation **
+    ** Version 4.7: see README for documentation **
     ***********************************************
 */
 
@@ -406,7 +403,7 @@
     $aMenu          = 0,
     $aStart         = SM2_ROOT,
     $aMaxLevel      = -1999, // SM2_CURR+1
-    $aFlags         = SM2_TRIM,
+    $aOptions       = SM2_TRIM,
     $aItemOpen      = false,
     $aItemClose     = false,
     $aMenuOpen      = false,
@@ -417,11 +414,26 @@
 {
     global $wb;
 
+    // extract the flags and set $aOptions to an array
+    $flags = 0;
+    if (is_int($aOptions)) {
+        $flags = $aOptions;
+        $aOptions = array();
+    }
+    else if (isset($aOptions['flags'])) {
+        $flags = $aOptions['flags'];
+    }
+    else {
+        $flags = SM2_TRIM;
+        $aOptions = array();
+        error_log('show_menu2 error: $aOptions is invalid. No flags supplied!');
+    }
+    
     // ensure we have our group 1 flag, we don't check for the "exactly 1" part, but 
     // we do ensure that they provide at least one.
-    if (0 == ($aFlags & _SM2_GROUP_1)) {
-        error_log("show_menu2 error: no flags from group 1 supplied! Exactly one flag is required!");
-        $aFlags |= SM2_TRIM; // default to TRIM
+    if (0 == ($flags & _SM2_GROUP_1)) {
+        error_log('show_menu2 error: $aOptions is invalid. No flags from group 1 supplied!');
+        $flags |= SM2_TRIM; // default to TRIM
     }
     
     // search page results don't have any of the page data loaded by WB, so we load it 
@@ -469,7 +481,7 @@
     // multiple calls to show_menu2 in a single page with only a single call to 
     // the database. If this variable exists, then we have already retrieved all
     // of the information and processed it, so we don't need to do it again.
-    if (($aFlags & SM2_NOCACHE) != 0
+    if (($flags & SM2_NOCACHE) != 0
         || !array_key_exists('show_menu2_data', $GLOBALS) 
         || !array_key_exists($aMenu, $GLOBALS['show_menu2_data'])) 
     {
@@ -497,7 +509,7 @@
         if (version_compare(WB_VERSION, '2.7', '>=')) { // WB 2.7+
             $fields .= ',viewing_users';
         }
-        if ($aFlags & SM2_ALLINFO) {
+        if ($flags & SM2_ALLINFO) {
             $fields = '*';
         }
         
@@ -640,27 +652,34 @@
                 $sm2formatter = new SM2_Formatter;
             }
             $formatter = $sm2formatter;
-            $formatter->set($aFlags, $aItemOpen, $aItemClose, 
+            $formatter->set($flags, $aItemOpen, $aItemClose, 
                 $aMenuOpen, $aMenuClose, $aTopItemOpen, $aTopMenuOpen);
         }
         
+        // adjust the level until we show everything and ignore the SM2_TRIM flag.
+        // Usually this will be less than the start level to disable it.
+        $showAllLevel = $aStartLevel - 1;
+        if (isset($aOptions['notrim'])) {
+            $showAllLevel = $aStartLevel + $aOptions['notrim'];
+        }
+        
         // display the menu
         $formatter->initialize();
         sm2_recurse(
             $GLOBALS['show_menu2_data'][$aMenu],
             $aStart,    // parent id to start displaying sub-menus
-            $aStartLevel, $aMaxLevel, $aFlags, 
+            $aStartLevel, $showAllLevel, $aMaxLevel, $flags, 
             $formatter);
         $formatter->finalize();
         
         // if we are returning something, get the data
-        if (($aFlags & SM2_BUFFER) != 0) {
+        if (($flags & SM2_BUFFER) != 0) {
             $retval = $formatter->getOutput();
         }
     }
 
     // clear the data if we aren't caching it
-    if (($aFlags & SM2_NOCACHE) != 0) {
+    if (($flags & SM2_NOCACHE) != 0) {
         unset($GLOBALS['show_menu2_data'][$aMenu]);
     }
     
@@ -681,7 +700,7 @@
 
 function sm2_recurse(
     &$rgParent, $aStart, 
-    $aStartLevel, $aMaxLevel, $aFlags, 
+    $aStartLevel, $aShowAllLevel, $aMaxLevel, $aFlags, 
     &$aFormatter
     )
 {
@@ -725,7 +744,8 @@
         }
         else if ($aFlags & SM2_TRIM) {
             // parents and siblings of parents
-            if (!array_key_exists('sm2_on_curr_path', $page)    // not set if false, so existence = true
+            if ($pageLevel > $aShowAllLevel  // permit all levels to be shown
+                && !array_key_exists('sm2_on_curr_path', $page)    // not set if false, so existence = true
                 && !array_key_exists('sm2_path_sibling', $page)) {  // not set if false, so existence = true
                 continue;
             }
@@ -765,7 +785,7 @@
             && array_key_exists('sm2_has_child', $page)) {  // not set if false, so existence = true
             sm2_recurse(
                 $rgParent, $nextParent, // parent id to start displaying sub-menus
-                $aStartLevel, $aMaxLevel, $aFlags, 
+                $aStartLevel, $aShowAllLevel, $aMaxLevel, $aFlags, 
                 $aFormatter);
         }
         
Index: trunk/wb/modules/show_menu2/legacy.php
===================================================================
--- trunk/wb/modules/show_menu2/legacy.php	(revision 858)
+++ trunk/wb/modules/show_menu2/legacy.php	(revision 859)
@@ -1,7 +1,4 @@
 <?php
-
-// $Id$
-
 /*
     show_menu2: show_menu replacement for Website Baker 
     Copyright (C) 2006-2008, Brodie Thiesfield
Index: trunk/wb/modules/show_menu2/README.en.txt
===================================================================
--- trunk/wb/modules/show_menu2/README.en.txt	(revision 858)
+++ trunk/wb/modules/show_menu2/README.en.txt	(revision 859)
@@ -1,4 +1,4 @@
-﻿show_menu2, version 4.6
+show_menu2, version 4.7
 =======================
 A code snippet for the Website Baker CMS software. It provides a complete 
 replacement for the builtin menu functions. All menu data is retrieved using 
@@ -6,6 +6,7 @@
 can be generated with extensive customisation of the resulting HTML.
 
 
+
 INSTALLATION
 ============
 1. Download the latest version from http://code.jellycan.com/show_menu2/
@@ -17,6 +18,7 @@
    that you downloaded in step 1, and choose the "Install" button.
    
    
+   
 USING SHOW_MENU2
 ================
 You need to modify the PHP files of your template to call show_menu2 where you 
@@ -45,8 +47,8 @@
 
 See the "Output" section for details of exactly what classes are added to each 
 element. More elaborate and different menu structures are able to be created by 
-supplying parameters to the show_menu2 function call. For example, to show only 
-menu items from the top level of the menu you use:
+supplying different parameters to the show_menu2 function call. For example, 
+to show only menu items from the top level of the menu you use:
 
     show_menu2(0, SM2_ROOT, SM2_START);
     
@@ -58,6 +60,48 @@
 demonstration website at http://code.jellycan.com/sm2test/ for more examples. 
 
 
+
+COMMON QUESTIONS
+================
+
+Q:  I'm not a programmer. Do you have simpler documentation? 
+A:  Nup. This is it. Go hard. Gambarre.
+
+
+Q:  How do I create a drop-down menu?
+A:  This is unrelated to show_menu2. You need to change the template CSS code 
+    to display the menu as a drop-down. Try the "allcss2" template from the WB
+    addon repository. http://addons.websitebaker.org/pages/templates.php
+
+
+Q:  Why does the menu disappear after I do a search on my multilingual WB site?
+A:  You're missing some required lines in your template.
+
+    1.  Log into WB administration, and go to Settings -> Show advanced settings 
+        -> Search Settings -> Header Code and add the following input field 
+        after the <form> open tag: 
+
+        <input type="hidden" name="referrer" value="[REFERRER_ID]" />
+
+
+    2.  In the index.php of your template, add the following input field 
+        immediately following the search <form> open tag.
+
+        <input type="hidden" name="referrer" value="<?php echo defined('REFERRER_ID')?REFERRER_ID:PAGE_ID;?>" />
+
+
+Q:  Multilingual? That sounds cool. How do I do that?
+A:  http://help.websitebaker.org/pages/en/advanced-docu.php
+
+
+Q:  SM2 is generating a warning every time the page is accessed:
+    "show_menu2 error: $aOptions is invalid. No flags from group 1 supplied!"
+A:  You are passing the wrong values to the function. Have a closer look at the 
+    parameters that you are passing. See the PARAMETERS section below for the 
+    correct flag values to pass for the $aOptions parameter.
+
+
+
 FUNCTION
 ========
 
@@ -67,7 +111,7 @@
         $aMenu          = 0,
         $aStart         = SM2_ROOT,
         $aMaxLevel      = SM2_CURR+1,
-        $aFlags         = SM2_TRIM,
+        $aOptions       = SM2_TRIM,
         $aItemOpen      = '[li][a][menu_title]</a>',
         $aItemClose     = '</li>',
         $aMenuOpen      = '[ul]',
@@ -77,15 +121,25 @@
         )
 
 See the "Parameters" section for detailed descriptions of each parameter.
-Note that every parameter from $aItemOpen onwards can be supplied as false
-in order to get the default value, this allows (for example) a numbered list
-to be used while still using the the default menu parameters for the items.
-Note that all parameters up to $aFlags need to be explicitly supplied.
-For example:
+Ensure that you use each parameter correctly. Use the following rules:
 
-show_menu2(0, SM2_ROOT, SM2_ALL, SM2_ALL, false, false, '<ol>', '</ol>');
+    $aMenu will be 0 for most people.
+    
+    $aStart must be either a page ID or a value starting with "SM2_".
+    
+    $aMaxLevel must be only values that start with "SM2_".
+    
+    $aOptions must be only values that start with "SM2_" (unless you are 
+    in a very small minority of users).
+    
+    All other parameters are the HTML tag templates that will be 
+    output for menus and menu items.
+    
+Note that every parameter from $aItemOpen can be supplied as false to get 
+the default value.
 
 
+
 OUTPUT
 ======
 The menu is output differently depending on what parameters have been 
@@ -194,10 +248,10 @@
                       SM2_MAX       Starting level only (same as SM2_START)
                       SM2_MAX+1     Maximum of starting level and 1 level.
 
-$aFlags   
+$aOptions  
     Specify flags for different generation options for the menu. The flags
     may be combined together using bitwise OR (|). For example, to specify
-    both TRIM and PRETTY you should use, SM2_TRIM|SM2_PRETTY.
+    both TRIM and PRETTY you should use, (SM2_TRIM | SM2_PRETTY).
 
     GROUP 1
     -------
@@ -267,6 +321,9 @@
                     pages to fail validation. 
     SM2_NOESCAPE    Default behaviour. Exists only for backwards compatibility.                    
 
+    This parameter also has an extended mode where an associative array of 
+    options is supplied. See the EXTENDED OPTIONS section for details. 
+    Most users will NOT need to use this.
 
 $aItemOpen
     Format string to use for creating each individual menu item entry.
@@ -305,9 +362,31 @@
 $aTopMenuOpen 
     Format string for the first menu. When set to false, it uses the same 
     format as $aMenuOpen.
-        
 
 
+
+EXTENDED OPTIONS
+================
+The $aOptions parameter is a dual mode parameter. For most users, only the
+SM2_* flags will be sufficient. However, to access the extra options, it 
+must be supplied as an associative array. Note that the SM2_* flags are
+still required and must be supplied as 'flags'.
+
+    'flags'     **REQUIRED** These are the flags described in PARAMETERS
+                above for the $aOptions parameter. 
+
+    'notrim'    Specify a number of levels relative to the menu level of 
+                $aStart that will always be displayed. This will cause the
+                SM2_TRIM flag to be ignored for these levels.
+                        
+To supply one of these options in addition to the flags, the option array 
+should be created and passed as the $aOptions parameter:
+
+    $options = array('flags' => (SM2_TRIM|...), 'notrim' => 1);
+    show_menu2(0, SM2_ROOT, SM2_CURR+1, $options);
+    
+    
+    
 FORMAT STRINGS
 ==============
 The following tags may be included in the format strings for $aItemOpen and 
@@ -335,6 +414,7 @@
 [keywords]      Page keywords
 
 
+
 CONDITIONAL FORMATTING
 ======================
 The conditional formatting directive takes one of the following forms:
@@ -467,6 +547,3 @@
     // called once after finalize() if the SM2_NOOUTPUT flag is used
     function getOutput() { }
 };
-
-
-
