Code

Layer menu cleanup
authorcajus <cajus@594d385d-05f5-0310-b6e9-bd551577e9d8>
Wed, 9 Jan 2008 16:03:28 +0000 (16:03 +0000)
committercajus <cajus@594d385d-05f5-0310-b6e9-bd551577e9d8>
Wed, 9 Jan 2008 16:03:28 +0000 (16:03 +0000)
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@8268 594d385d-05f5-0310-b6e9-bd551577e9d8

36 files changed:
gosa-core/include/class_MultiSelectWindow.inc
gosa-core/include/class_location.inc
gosa-core/include/layer-menu/COPYING [deleted file]
gosa-core/include/layer-menu/lib/PHPLIB.php [deleted file]
gosa-core/include/layer-menu/lib/layersmenu-browser_detection.php [deleted file]
gosa-core/include/layer-menu/lib/layersmenu-common.inc.php [deleted file]
gosa-core/include/layer-menu/lib/layersmenu-process.inc.php [deleted file]
gosa-core/include/layer-menu/lib/layersmenu.inc.php [deleted file]
gosa-core/include/layer-menu/lib/phptreemenu.inc.php [deleted file]
gosa-core/include/layer-menu/lib/plainmenu.inc.php [deleted file]
gosa-core/include/layer-menu/lib/treemenu.inc.php [deleted file]
gosa-core/include/layer-menu/libjs/layersmenu-browser_detection.js [deleted file]
gosa-core/include/layer-menu/libjs/layersmenu-footer.ijs [deleted file]
gosa-core/include/layer-menu/libjs/layersmenu-header.ijs [deleted file]
gosa-core/include/layer-menu/libjs/layersmenu-library.js [deleted file]
gosa-core/include/layer-menu/libjs/layersmenu-see-through.js [deleted file]
gosa-core/include/layer-menu/libjs/layersmenu.js [deleted file]
gosa-core/include/layer-menu/libjs/layerstreemenu-cookies.js [deleted file]
gosa-core/include/layer-menu/libjs/layerstreemenu.ijs [deleted file]
gosa-core/include/utils/layer-menu/COPYING [new file with mode: 0644]
gosa-core/include/utils/layer-menu/lib/PHPLIB.php [new file with mode: 0644]
gosa-core/include/utils/layer-menu/lib/layersmenu-browser_detection.php [new file with mode: 0644]
gosa-core/include/utils/layer-menu/lib/layersmenu-common.inc.php [new file with mode: 0644]
gosa-core/include/utils/layer-menu/lib/layersmenu-process.inc.php [new file with mode: 0644]
gosa-core/include/utils/layer-menu/lib/layersmenu.inc.php [new file with mode: 0644]
gosa-core/include/utils/layer-menu/lib/phptreemenu.inc.php [new file with mode: 0644]
gosa-core/include/utils/layer-menu/lib/plainmenu.inc.php [new file with mode: 0644]
gosa-core/include/utils/layer-menu/lib/treemenu.inc.php [new file with mode: 0644]
gosa-core/include/utils/layer-menu/libjs/layersmenu-browser_detection.js [new file with mode: 0644]
gosa-core/include/utils/layer-menu/libjs/layersmenu-footer.ijs [new file with mode: 0644]
gosa-core/include/utils/layer-menu/libjs/layersmenu-header.ijs [new file with mode: 0644]
gosa-core/include/utils/layer-menu/libjs/layersmenu-library.js [new file with mode: 0644]
gosa-core/include/utils/layer-menu/libjs/layersmenu-see-through.js [new file with mode: 0644]
gosa-core/include/utils/layer-menu/libjs/layersmenu.js [new file with mode: 0644]
gosa-core/include/utils/layer-menu/libjs/layerstreemenu-cookies.js [new file with mode: 0644]
gosa-core/include/utils/layer-menu/libjs/layerstreemenu.ijs [new file with mode: 0644]

index 8295cb3002d7c8f486bc74137659401f97fd2943..e21e91ccc87c71f7cc38c261b7ef2cf211c52ae6 100644 (file)
@@ -89,7 +89,7 @@ class MultiSelectWindow{
       $mid = new LayersMenu(6, 7, 2, 1);
       $mid->setImgwww("./images/");
       $mid->setIcondir("./images/");
-      $mid->setDirroot("../include/layer-menu/");
+      $mid->setDirroot("../include/utils/layer-menu/");
       $mid->setHorizontalMenuTpl("../ihtml/".get_template_path("",FALSE).'GOsa_MultiSelectHeader.ihtml');
       $mid->setSubMenuTpl("../ihtml/".get_template_path("",FALSE).'GOsa_MultiSelectHeaderSubEntry.ihtml');
       $mid->setMenuStructureString($this->string_ListDropDown);
index 7996d313c9b5d17597d46b5aac18461af5d0ffcf..6d437276bd161c1bf2739ffab81300d60b11ef88 100644 (file)
@@ -16,6 +16,19 @@ $class_mapping= array(
                 "setup_step" => "setup/class_setupStep.inc",
                 "debconf" => "include/class_debconfTemplate.inc",
                 "certificate" => "include/class_certificate.inc",
+                "writeexcel_biffwriter" => "include/utils/excel/class.writeexcel_biffwriter.inc.php",
+                "writeexcel_worksheet" => "include/utils/excel/class.writeexcel_worksheet.inc.php",
+                "writeexcel_olewriter" => "include/utils/excel/class.writeexcel_olewriter.inc.php",
+                "writeexcel_formula" => "include/utils/excel/class.writeexcel_formula.inc.php",
+                "writeexcel_workbook" => "include/utils/excel/class.writeexcel_workbook.inc.php",
+                "writeexcel_format" => "include/utils/excel/class.writeexcel_format.inc.php",
+                "Template_PHPLIB" => "include/utils/layer-menu/lib/PHPLIB.php",
+                "PHPTreeMenu" => "include/utils/layer-menu/lib/phptreemenu.inc.php",
+                "ProcessLayersMenu" => "include/utils/layer-menu/lib/layersmenu-process.inc.php",
+                "TreeMenu" => "include/utils/layer-menu/lib/treemenu.inc.php",
+                "LayersMenu" => "include/utils/layer-menu/lib/layersmenu.inc.php",
+                "LayersMenuCommon" => "include/utils/layer-menu/lib/layersmenu-common.inc.php",
+                "PlainMenu" => "include/utils/layer-menu/lib/plainmenu.inc.php",
                 "pgre_sql" => "include/class_pgsql_opengw.inc",
                 "divlist" => "include/class_divlist.inc",
                 "passwordMethodClear" => "include/password-methods/class_password-methods-clear.inc",
@@ -35,11 +48,6 @@ $class_mapping= array(
                 "glpiDB" => "include/class_glpi.inc",
                 "acl" => "include/class_acl.inc",
                 "pluglist" => "include/class_pluglist.inc",
-                "HTML_TreeMenu" => "html/TreeMenu.php",
-                "HTML_TreeNode" => "html/TreeMenu.php",
-                "HTML_TreeMenu_Presentation" => "html/TreeMenu.php",
-                "HTML_TreeMenu_DHTML" => "html/TreeMenu.php",
-                "HTML_TreeMenu_Listbox" => "html/TreeMenu.php",
                 "sieve" => "include/sieve/class_sieve.inc",
                 "sieve_if" => "include/sieve/class_sieveElement_If.inc",
                 "sieve_elsif" => "include/sieve/class_sieveElement_Else_Elsif.inc",
@@ -64,25 +72,12 @@ $class_mapping= array(
                 "sieve_discard" => "include/sieve/class_sieveElement_Discard.inc",
                 "My_Scanner" => "include/sieve/class_My_Scanner.inc",
                 "ogw" => "include/class_opengw.inc",
-                "Template_PHPLIB" => "include/layer-menu/lib/PHPLIB.php",
-                "PHPTreeMenu" => "include/layer-menu/lib/phptreemenu.inc.php",
-                "ProcessLayersMenu" => "include/layer-menu/lib/layersmenu-process.inc.php",
-                "TreeMenu" => "include/layer-menu/lib/treemenu.inc.php",
-                "LayersMenu" => "include/layer-menu/lib/layersmenu.inc.php",
-                "LayersMenuCommon" => "include/layer-menu/lib/layersmenu-common.inc.php",
-                "PlainMenu" => "include/layer-menu/lib/plainmenu.inc.php",
                 "gosa_cache" => "include/class_cache_handler.inc",
                 "Socket_Client" => "include/class_socketClient.inc",
                 "log" => "include/class_log.inc",
                 "multi_plug" => "include/class_multi_plug.inc",
                 "msg_dialog" => "include/class_msg_dialog.inc",
                 "parseXml" => "include/functions_helpviewer.inc",
-                "writeexcel_biffwriter" => "include/php_writeexcel/class.writeexcel_biffwriter.inc.php",
-                "writeexcel_worksheet" => "include/php_writeexcel/class.writeexcel_worksheet.inc.php",
-                "writeexcel_olewriter" => "include/php_writeexcel/class.writeexcel_olewriter.inc.php",
-                "writeexcel_formula" => "include/php_writeexcel/class.writeexcel_formula.inc.php",
-                "writeexcel_workbook" => "include/php_writeexcel/class.writeexcel_workbook.inc.php",
-                "writeexcel_format" => "include/php_writeexcel/class.writeexcel_format.inc.php",
                 "session" => "include/class_session.inc",
                 "sambaMungedDial" => "include/class_sambaMungedDial.inc",
                 "MultiSelectWindow" => "include/class_MultiSelectWindow.inc",
@@ -303,5 +298,10 @@ $class_mapping= array(
                 "csvimport" => "plugins/addons/ldapmanager/class_csvimport.inc",
                 "ldiftab" => "plugins/addons/ldapmanager/tabs_ldif.inc",
                 "bugsubmitter" => "plugins/addons/bugsubmitter/class_bugsubmitter.inc",
+                "HTML_TreeMenu" => "html/TreeMenu.php",
+                "HTML_TreeNode" => "html/TreeMenu.php",
+                "HTML_TreeMenu_Presentation" => "html/TreeMenu.php",
+                "HTML_TreeMenu_DHTML" => "html/TreeMenu.php",
+                "HTML_TreeMenu_Listbox" => "html/TreeMenu.php",
  );
 ?>
\ No newline at end of file
diff --git a/gosa-core/include/layer-menu/COPYING b/gosa-core/include/layer-menu/COPYING
deleted file mode 100644 (file)
index b1e3f5a..0000000
+++ /dev/null
@@ -1,504 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                      Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-\f
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-\f
-                 GNU LESSER GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-  
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-\f
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-\f
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-\f
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-\f
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-\f
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-\f
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-                           NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-\f
-           How to Apply These Terms to Your New Libraries
-
-  If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change.  You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
-  To apply these terms, attach the following notices to the library.  It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the library's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Lesser General Public
-    License as published by the Free Software Foundation; either
-    version 2.1 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Lesser General Public License for more details.
-
-    You should have received a copy of the GNU Lesser General Public
-    License along with this library; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-  <signature of Ty Coon>, 1 April 1990
-  Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/gosa-core/include/layer-menu/lib/PHPLIB.php b/gosa-core/include/layer-menu/lib/PHPLIB.php
deleted file mode 100644 (file)
index 11be798..0000000
+++ /dev/null
@@ -1,567 +0,0 @@
-<?php
-// vim: set expandtab tabstop=4 shiftwidth=4:
-// This code that was derived from the original PHPLIB Template class
-// is copyright by Kristian Koehntopp, NetUSE AG and was released
-// under the LGPL.
-//
-// Authors: Kristian Koehntopp <kris@koehntopp.de> (original from PHPLIB)
-//          Bjoern Schotte <bjoern@rent-a-phpwizard.de> (PEARification)                
-//          Martin Jansen <mj@php.net> (PEAR conformance)            
-//
-// $Id: PHPLIB.php,v 1.14 2003/06/11 06:03:32 bjoern Exp $
-//
-
-//require_once "PEAR.php";
-
-/**
- * Converted PHPLIB Template class
- *
- * For those who want to use PHPLIB's fine template class,
- * here's a PEAR conforming class with the original PHPLIB
- * template code from phplib-stable CVS. Original author
- * was Kristian Koehntopp <kris@koehntopp.de>
- *
- * @author  Bjoern Schotte <bjoern@rent-a-phpwizard.de>
- * @author  Martin Jansen <mj@php.net> (PEAR conformance)
- * @version 1.0
- */
-class Template_PHPLIB
-{
-    /**
-     * If set, echo assignments
-     * @var bool
-     */
-    var $debug     = false;
-
-    /**
-     * $file[handle] = "filename";
-     * @var array
-     */
-    var $file  = array();
-
-    /**
-     * fallback paths that should be defined in a child class
-     * @var array
-     */
-    var $file_fallbacks = array();
-
-    /**
-     * Relative filenames are relative to this pathname
-     * @var string
-     */
-    var $root   = "";
-
-    /*
-     * $_varKeys[key] = "key"
-     * @var array
-     */
-    var $_varKeys = array();
-    
-    /**
-     * $_varVals[key] = "value";
-     * @var array
-     */
-    var $_varVals = array();
-
-    /**
-     * "remove"  => remove undefined variables
-     * "comment" => replace undefined variables with comments
-     * "keep"    => keep undefined variables
-     * @var string
-     */
-    var $unknowns = "remove";
-  
-    /**
-     * "yes" => halt, "report" => report error, continue, "no" => ignore error quietly
-     * @var string
-     */
-    var $haltOnError  = "report";
-  
-    /**
-     * The last error message is retained here
-     * @var string
-     * @see halt
-     */
-    var $_lastError     = "";
-
-
-    /**
-     * Constructor
-     *
-     * @access public
-     * @param  string template root directory
-     * @param  string how to handle unknown variables
-     * @param  array fallback paths
-     */
-    function Template_PHPLIB($root = ".", $unknowns = "remove", $fallback="")
-    {
-        $this->setRoot($root);
-        $this->setUnknowns($unknowns);
-        if (is_array($fallback)) $this->file_fallbacks = $fallback;
-    }
-
-    /**
-     * Sets the template directory
-     *
-     * @access public
-     * @param  string new template directory
-     * @return bool
-     */
-    function setRoot($root)
-    {
-        if (!is_dir($root)) {
-            $this->halt("setRoot: $root is not a directory.");
-            return false;
-        }
-    
-        $this->root = $root;
-    
-        return true;
-    }
-
-    /**
-     * What to do with unknown variables
-     *
-     * three possible values:
-     *
-     * - "remove" will remove unknown variables
-     *   (don't use this if you define CSS in your page)
-     * - "comment" will replace undefined variables with comments
-     * - "keep" will keep undefined variables as-is
-     *
-     * @access public
-     * @param  string unknowns
-     */
-    function setUnknowns($unknowns = "keep")
-    {
-        $this->unknowns = $unknowns;
-    }
-
-    /**
-     * Set appropriate template files
-     *
-     * With this method you set the template files you want to use.
-     * Either you supply an associative array with key/value pairs
-     * where the key is the handle for the filname and the value
-     * is the filename itself, or you define $handle as the file name
-     * handle and $filename as the filename if you want to define only
-     * one template.
-     *
-     * @access public
-     * @param  mixed handle for a filename or array with handle/name value pairs
-     * @param  string name of template file
-     * @return bool
-     */
-    function setFile($handle, $filename = "")
-    {
-        if (!is_array($handle)) {
-    
-            if ($filename == "") {
-                $this->halt("setFile: For handle $handle filename is empty.");
-                return false;
-            }
-      
-            $this->file[$handle] = $this->_filename($filename);
-      
-        } else {
-    
-            reset($handle);
-            while (list($h, $f) = each($handle)) {
-                $this->file[$h] = $this->_filename($f);
-            }
-        }
-    }
-
-    /**
-     * Set a block in the appropriate template handle
-     *
-     * By setting a block like that:
-     *
-     * &lt;!-- BEGIN blockname --&gt;
-     * html code
-     * &lt;!-- END blockname --&gt;
-     *
-     * you can easily do repeating HTML code, i.e. output
-     * database data nice formatted into a HTML table where
-     * each DB row is placed into a HTML table row which is
-     * defined in this block.
-     * It extracts the template $handle from $parent and places
-     * variable {$name} instead.
-     *
-     * @access public
-     * @param  string parent handle
-     * @param  string block name handle
-     * @param  string variable substitution name
-     */
-    function setBlock($parent, $handle, $name = "")
-    {
-        if (!$this->_loadFile($parent)) {
-            $this->halt("setBlock: unable to load $parent.");
-            return false;
-        }
-    
-        if ($name == "") {
-            $name = $handle;
-        }
-
-        $str = $this->getVar($parent);
-        $reg = "/[ \t]*<!--\s+BEGIN $handle\s+-->\s*?\n?(\s*.*?\n?)\s*<!--\s+END $handle\s+-->\s*?\n?/sm";
-        preg_match_all($reg, $str, $m);
-        $str = preg_replace($reg, "{" . "$name}", $str);
-
-        if (isset($m[1][0])) $this->setVar($handle, $m[1][0]);
-        $this->setVar($parent, $str);
-    }
-
-    /**
-     * Set corresponding substitutions for placeholders
-     *
-     * @access public
-     * @param  string name of a variable that is to be defined or an array of variables with value substitution as key/value pairs
-     * @param  string value of that variable
-     * @param  boolean if true, the value is appended to the variable's existing value
-     */
-    function setVar($varname, $value = "", $append = false)
-    {
-        if (!is_array($varname)) {
-
-            if (!empty($varname))
-                if ($this->debug) print "scalar: set *$varname* to *$value*<br>\n";
-
-            $this->_varKeys[$varname] = $this->_varname($varname);
-            ($append) ? $this->_varVals[$varname] .= $value : $this->_varVals[$varname] = $value;
-
-        } else {
-            reset($varname);
-
-            while (list($k, $v) = each($varname)) {
-                if (!empty($k))
-                    if ($this->debug) print "array: set *$k* to *$v*<br>\n";
-
-                $this->_varKeys[$k] = $this->_varname($k);
-                ($append) ? $this->_varVals[$k] .= $v : $this->_varVals[$k] = $v;
-            }
-        }
-    }
-
-    /**
-     * Substitute variables in handle $handle
-     *
-     * @access public
-     * @param  string name of handle
-     * @return mixed string substituted content of handle
-     */
-    function subst($handle)
-    {
-        if (!$this->_loadFile($handle)) {
-            $this->halt("subst: unable to load $handle.");
-            return false;
-        }
-
-        return @str_replace($this->_varKeys, $this->_varVals, $this->getVar($handle));
-    }
-  
-    /**
-     * Same as subst but printing the result
-     *
-     * @access  public
-     * @brother subst
-     * @param   string handle of template
-     * @return  bool always false
-     */
-    function pSubst($handle)
-    {
-        print $this->subst($handle);
-        return false;
-    }
-
-    /**
-     * Parse handle into target
-     *
-     * Parses handle $handle into $target, eventually
-     * appending handle at $target if $append is defined
-     * as TRUE.
-     *
-     * @access public
-     * @param  string target handle to parse into
-     * @param  string which handle should be parsed
-     * @param  boolean append it to $target or not?
-     * @return string parsed handle
-     */
-    function parse($target, $handle, $append = false)
-    {
-        if (!is_array($handle)) {
-            $str = $this->subst($handle);
-
-            ($append) ? $this->setVar($target, $this->getVar($target) . $str) : $this->setVar($target, $str);
-        } else {
-            reset($handle);
-
-            while (list(, $h) = each($handle)) {
-                $str = $this->subst($h);
-                $this->setVar($target, $str);
-            }
-        }
-
-        return $str;
-    }
-
-    /**
-     * Same as parse, but printing it.
-     *
-     * @access  public
-     * @brother parse
-     * @param   string target to parse into
-     * @param   string handle which should be parsed
-     * @param   should $handle be appended to $target?
-     * @return  bool
-     */
-    function pParse($target, $handle, $append = false)
-    {
-        print $this->finish($this->parse($target, $handle, $append));
-        return false;
-    }
-  
-    /**
-     * Return all defined variables and their values
-     *
-     * @access public
-     * @return array with all defined variables and their values
-     */
-    function getVars()
-    {
-        reset($this->_varKeys);
-
-        while (list($k, ) = each($this->_varKeys)) {
-            $result[$k] = $this->getVar($k);
-        }
-
-        return $result;
-    }
-
-    /**
-     * Return one or more specific variable(s) with their values.
-     *
-     * @access public    
-     * @param  mixed array with variable names or one variable name as a string
-     * @return mixed array of variable names with their values or value of one specific variable
-     */
-    function getVar($varname)
-    {
-        if (!is_array($varname)) {
-            if (isset($this->_varVals[$varname])) {
-                return $this->_varVals[$varname];
-            } else {
-                return "";
-            }
-        } else {
-            reset($varname);
-    
-            while (list($k, ) = each($varname)) {
-                $result[$k] = (isset($this->_varVals[$k])) ? $this->_varVals[$k] : "";
-            }
-
-            return $result;
-        }
-    }
-  
-    /**
-     * Get undefined values of a handle
-     *
-     * @access public
-     * @param  string handle name
-     * @return mixed  false if an error occured or the undefined values
-     */
-    function getUndefined($handle)
-    {
-        if (!$this->_loadFile($handle)) {
-            $this->halt("getUndefined: unable to load $handle.");
-            return false;
-        }
-    
-        preg_match_all("/{([^ \t\r\n}]+)}/", $this->getVar($handle), $m);
-        $m = $m[1];
-        if (!is_array($m)) {
-            return false;
-        }
-
-        reset($m);
-        while (list(, $v) = each($m)) {
-            if (!isset($this->_varKeys[$v])) {
-                $result[$v] = $v;
-            }
-        }
-    
-        if (isset($result) && count($result)) {
-            return $result;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     * Finish string
-     *
-     * @access public
-     * @param  string string to finish
-     * @return finished, i.e. substituted string
-     */
-    function finish($str)
-    {
-        switch ($this->unknowns) {
-            case "remove":
-                $str = preg_replace('/{[^ \t\r\n}]+}/', "", $str);
-                break;
-
-            case "comment":
-                $str = preg_replace('/{([^ \t\r\n}]+)}/', "<!-- Template $handle: Variable \\1 undefined -->", $str);
-                break;
-        }
-
-        return $str;
-    }
-
-    /**
-     * Print variable to the browser
-     *
-     * @access public
-     * @param  string name of variable to print
-     */
-    function p($varname)
-    {
-        print $this->finish($this->getVar($varname));
-    }
-
-    /**
-     * Get finished variable
-     *
-     * @access public public
-     * @param  string variable to get
-     * @return string string with finished variable
-     */
-    function get($varname)
-    {
-        return $this->finish($this->getVar($varname));
-    }
-
-    /**
-     * Complete filename
-     *
-     * Complete filename, i.e. testing it for slashes
-     *
-     * @access private
-     * @param  string filename to be completed
-     * @return string completed filename
-     */
-    function _filename($filename)
-    {
-//        if (substr($filename, 0, 1) != "/") {
-//            $filename = $this->root."/".$filename;
-//        }
-
-        if (file_exists($filename)) return $filename;
-        if (is_array($this->file_fallbacks) && count($this->file_fallbacks) > 0) {
-            reset($this->file_fallbacks);
-            while (list(,$v) = each($this->file_fallbacks)) {
-                if (file_exists($v.basename($filename))) return $v.basename($filename);
-            }
-            $this->halt(sprintf("filename: file %s does not exist in the fallback paths %s.",$filename,implode(",",$this->file_fallbacks)));
-            return false;
-        } else {
-            $this->halt(sprintf("filename: file %s does not exist.",$filename));
-            return false;
-        }
-
-        return $filename;
-    }
-
-    /**
-     * Protect a replacement variable
-     *
-     * @access private
-     * @param  string name of replacement variable
-     * @return string replaced variable
-     */
-    function _varname($varname)
-    {
-        return "{".$varname."}";
-    }
-
-    /**
-     * load file defined by handle if it is not loaded yet
-     *
-     * @access private
-     * @param  string handle
-     * @return bool   FALSE if error, true if all is ok
-     */
-    function _loadFile($handle)
-    {
-        if (isset($this->_varKeys[$handle]) and !empty($this->_varVals[$handle])) {
-            return true;
-        }
-
-        if (!isset($this->file[$handle])) {
-            $this->halt("loadfile: $handle is not a valid handle.");
-            return false;
-        }
-
-        $filename = $this->file[$handle];
-        if (function_exists("file_get_contents")) {
-            $str = file_get_contents($filename);
-        } else {
-            if (!$fp = @fopen($filename,"r")) {
-                $this->halt("loadfile: couldn't open $filename");
-                return false;
-            }
-
-            $str = fread($fp,filesize($filename));
-            fclose($fp);
-        }
-
-        if ($str=='') {
-            $this->halt("loadfile: While loading $handle, $filename does not exist or is empty.");
-            return false;
-        }
-
-        $this->setVar($handle, $str);
-
-        return true;
-    }
-
-    /**
-     * Error function. Halt template system with message to show
-     *
-     * @access public
-     * @param  string message to show
-     * @return bool
-     */
-    function halt($msg)
-    {
-        $this->_lastError = $msg;
-
-        if ($this->haltOnError != "no") {
-//            return $this->haltMsg($msg);
-            $this->haltMsg($msg);
-        }
-
-        if ($this->haltOnError == "yes") {
-            die("<b>Halted.</b>");
-        }
-
-        return false;
-    }
-  
-    /**
-     * printf error message to show
-     *
-     * @access public
-     * @param  string message to show
-     * @return object PEAR error object
-     */
-    function haltMsg($msg)
-    {
-//        PEAR::raiseError(sprintf("<b>Template Error:</b> %s<br>\n", $msg));
-        printf("<b>Template Error:</b> %s<br>\n", $msg);
-    }
-}
-?>
diff --git a/gosa-core/include/layer-menu/lib/layersmenu-browser_detection.php b/gosa-core/include/layer-menu/lib/layersmenu-browser_detection.php
deleted file mode 100644 (file)
index e351fc5..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-
-function inAgent($string)
-{
-       if (isset($_SERVER['HTTP_USER_AGENT'])) {
-               $http_user_agent = $_SERVER['HTTP_USER_AGENT'];
-       } else {
-               $http_user_agent = '';
-       }
-       return !(strpos($http_user_agent, $string) === false);
-}
-
-if (inAgent('Gecko')) {
-       $browser = 'Mozilla';
-} elseif (
-       inAgent('Lynx') || inAgent('lynx')
-       || inAgent('Links') || inAgent('links')
-       || inAgent('w3m')
-       ) {
-       $browser = 'TEXT';
-// I detect Konqueror and Opera before than the others,
-// as they often qualify themselves as Mozilla/Netscape/MSIE
-} elseif (inAgent('Konqueror')) {
-       if (inAgent('Konqueror 1') || inAgent('Konqueror/1')) {
-               $browser = 'Konqueror1';
-               // On KDE 1.1.2, kfm qualifies itself as "Konqueror/1.1.2"
-               // (tested on Red Hat Linux 6.2)
-       } elseif (inAgent('Konqueror 2.0') || inAgent('Konqueror/2.0')
-                 || inAgent('Konqueror 2;') || inAgent('Konqueror/2;')
-                 || inAgent('Konqueror 2)') || inAgent('Konqueror/2)')
-       ) {
-               $browser = 'Konqueror20';
-       } elseif (inAgent('Konqueror 2.1') || inAgent('Konqueror/2.1')) {
-               $browser = 'Konqueror21';
-       } else {
-               $browser = 'Konqueror';
-       }
-} elseif (inAgent('Opera')) {
-       if (inAgent('Opera 4') || inAgent('Opera/4')) {
-               $browser = 'Opera4';
-               // I hope that Opera 4 users can be satisfied by the Plain menu version;
-               // sorry, but I have never used Opera 4 and I do not have a copy of it
-               // to perform tests.  If you are using Opera < 4, it's your problem :-P
-       } elseif ((inAgent('Opera 6') || inAgent('Opera/6')) && inAgent('Linux')) {
-               $browser = 'Opera6forLinux';
-       } elseif (
-               inAgent('Opera 5') || inAgent('Opera/5')
-               || inAgent('Opera 6') || inAgent('Opera/6')
-       ) {
-               $browser = 'Opera56';
-       } else {
-               $browser = 'Opera';
-       }
-} elseif (inAgent('Safari')) {
-       $browser = 'Safari';
-} elseif (inAgent('MSIE 4') || inAgent('MSIE/4')) {
-       $browser = 'IE4';
-} elseif (inAgent('MSIE')) {
-       $browser = 'IE5';
-       // msie != 4 is handled like msie 5+; if you are using msie 3-, it's your problem :-P
-} elseif (inAgent('Mozilla 4') || inAgent('Mozilla/4')) {
-       $browser = 'NS4';
-} else {
-       $browser = 'Unknown';
-}
-
-if (
-       $browser == 'TEXT'
-       || $browser == 'Konqueror1' || $browser == 'Konqueror20' || $browser == 'Konqueror21'
-       // IMO, on Konqueror 2.1, the Plain version is more usable than the "OLD" one
-       || $browser == 'Opera4'
-) {
-       $menuType = 'PLAIN';
-} elseif ($browser == 'NS4' || $browser == 'Opera56' || $browser == 'IE4') {
-       $menuType = 'OLD';
-} else {
-       $menuType = 'DOM';
-}
-
-?>
diff --git a/gosa-core/include/layer-menu/lib/layersmenu-common.inc.php b/gosa-core/include/layer-menu/lib/layersmenu-common.inc.php
deleted file mode 100644 (file)
index aebf559..0000000
+++ /dev/null
@@ -1,955 +0,0 @@
-<?php
-// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
-
-/**
-* This file contains the code of the LayersMenuCommon class.
-* @package PHPLayersMenu
-*/
-
-/**
-* This is the "common" class of the PHP Layers Menu library.
-*
-* You need to include PEAR.php and DB.php if (and only if) you want to use the DB support provided by ths class.
-*
-* @version 3.2.0-rc
-* @package PHPLayersMenu
-*/
-class LayersMenuCommon
-{
-
-/**
-* The name of the package
-* @access private
-* @var string
-*/
-var $_packageName;
-/**
-* The version of the package
-* @access private
-* @var string
-*/
-var $version;
-/**
-* The copyright of the package
-* @access private
-* @var string
-*/
-var $copyright;
-/**
-* The author of the package
-* @access private
-* @var string
-*/
-var $author;
-
-/**
-* URL to be prepended to the menu hrefs
-* @access private
-* @var string
-*/
-var $prependedUrl = '';
-/**
-* Do you want that code execution halts on error?
-* @access private
-* @var string
-*/
-var $haltOnError = 'yes';
-
-/**
-* The base directory where the package is installed
-* @access private
-* @var string
-*/
-var $dirroot;
-/**
-* The "libjs" directory of the package
-* @access private
-* @var string
-*/
-var $libjsdir;
-/**
-* The directory where images related to the menu can be found
-* @access private
-* @var string
-*/
-var $imgdir;
-/**
-* The http path corresponding to imgdir
-* @access private
-* @var string
-*/
-var $imgwww;
-/**
-* The directory where icons of menu items can be found
-* @access private
-* @var string
-*/
-var $icondir;
-/**
-* The http path corresponding to icondir
-* @access private
-* @var string
-*/
-var $iconwww;
-/**
-* This array may contain width and height of all icons
-* @access private
-* @var integer
-*/
-var $iconsize = array();
-/**
-* If this var is false, width and height of icons have to be detected; if this var is true, width and height of icons are not detected and are retrieved from the iconsize array
-* @access private
-* @var boolean
-*/
-var $issetIconsize = false;
-/**
-* The directory where templates can be found
-* @access private
-* @var string
-*/
-var $tpldir;
-/**
-* The string containing the menu structure
-* @access private
-* @var string
-*/
-var $menuStructure;
-
-/**
-* It counts nodes for all menus
-* @access private
-* @var integer
-*/
-var $_nodesCount;
-/**
-* A multi-dimensional array to store informations for each menu entry
-* @access private
-* @var array
-*/
-var $tree;
-/**
-* A multi-dimensional array used only with the DB support; for each $menu_name, it stores the $cnt associated to each item id
-*
-* This array is needed for selection of the current item
-* through the corresponding id (see the DB table structure)
-* as, internally, items are stored, sorted and addressed in terms of $cnt
-*
-* @access private
-* @var array
-*/
-var $treecnt;
-/**
-* The maximum hierarchical level of menu items
-* @access private
-* @var integer
-*/
-var $_maxLevel;
-/**
-* An array that counts the number of first level items for each menu
-* @access private
-* @var array
-*/
-var $_firstLevelCnt;
-/**
-* An array containing the number identifying the first item of each menu
-* @access private
-* @var array
-*/
-var $_firstItem;
-/**
-* An array containing the number identifying the last item of each menu
-* @access private
-* @var array
-*/
-var $_lastItem;
-
-/**
-* Data Source Name: the connection string for PEAR DB
-* @access private
-* @var string
-*/
-var $dsn = 'pgsql://dbuser:dbpass@dbhost/dbname';
-/**
-* DB connections are either persistent or not persistent
-* @access private
-* @var boolean
-*/
-var $persistent = false;
-/**
-* Name of the table storing data describing the menu
-* @access private
-* @var string
-*/
-var $tableName = 'phplayersmenu';
-/**
-* Name of the i18n table corresponding to $tableName
-* @access private
-* @var string
-*/
-var $tableName_i18n = 'phplayersmenu_i18n';
-/**
-* Names of fields of the table storing data describing the menu
-*
-* default field names correspond to the same field names foreseen
-* by the menu structure format
-*
-* @access private
-* @var array
-*/
-var $tableFields = array(
-       'id'            => 'id',
-       'parent_id'     => 'parent_id',
-       'text'          => 'text',
-       'href'          => 'href',
-       'title'         => 'title',
-       'icon'          => 'icon',
-       'target'        => 'target',
-       'orderfield'    => 'orderfield',
-       'expanded'      => 'expanded'
-);
-/**
-* Names of fields of the i18n table corresponding to $tableName
-* @access private
-* @var array
-*/
-var $tableFields_i18n = array(
-       'language'      => 'language',
-       'id'            => 'id',
-       'text'          => 'text',
-       'title'         => 'title'
-);
-/**
-* A temporary array to store data retrieved from the DB and to perform the depth-first search
-* @access private
-* @var array
-*/
-var $_tmpArray = array();
-
-/**
-* The constructor method; it initializates the menu system
-* @return void
-*/
-function LayersMenuCommon()
-{
-       $this->_packageName = 'PHP Layers Menu';
-       $this->version = '3.2.0-rc';
-       $this->copyright = '(C) 2001-2004';
-       $this->author = 'Marco Pratesi - http://www.marcopratesi.it/';
-
-       $this->prependedUrl = '';
-
-       $this->dirroot = './';
-       $this->libjsdir = './libjs/';
-       $this->imgdir = './menuimages/';
-       $this->imgwww = 'menuimages/';
-       $this->icondir = './menuicons/';
-       $this->iconwww = 'menuicons/';
-       $this->tpldir = './templates/';
-       $this->menuStructure = '';
-       $this->separator = '|';
-
-       $this->_nodesCount = 0;
-       $this->tree = array();
-       $this->treecnt = array();
-       $this->_maxLevel = array();
-       $this->_firstLevelCnt = array();
-       $this->_firstItem = array();
-       $this->_lastItem = array();
-}
-
-/**
-* The method to set the prepended URL
-* @access public
-* @return boolean
-*/
-function setPrependedUrl($prependedUrl)
-{
-       // We do not perform any check
-       $this->prependedUrl = $prependedUrl;
-       return true;
-}
-
-/**
-* The method to set the dirroot directory
-* @access public
-* @return boolean
-*/
-function setDirrootCommon($dirroot)
-{
-       if (!is_dir($dirroot)) {
-               $this->error("setDirroot: $dirroot is not a directory.");
-               return false;
-       }
-       if (substr($dirroot, -1) != '/') {
-               $dirroot .= '/';
-       }
-       $oldlength = strlen($this->dirroot);
-       $foobar = strpos($this->libjsdir, $this->dirroot);
-       if (!($foobar === false || $foobar != 0)) {
-               $this->libjsdir = $dirroot . substr($this->libjsdir, $oldlength);
-       }
-       $foobar = strpos($this->imgdir, $this->dirroot);
-       if (!($foobar === false || $foobar != 0)) {
-               $this->imgdir = $dirroot . substr($this->imgdir, $oldlength);
-       }
-       $foobar = strpos($this->icondir, $this->dirroot);
-       if (!($foobar === false || $foobar != 0)) {
-               $this->icondir = $dirroot . substr($this->icondir, $oldlength);
-       }
-       $foobar = strpos($this->tpldir, $this->dirroot);
-       if (!($foobar === false || $foobar != 0)) {
-               $this->tpldir = $dirroot . substr($this->tpldir, $oldlength);
-       }
-       $this->dirroot = $dirroot;
-       return true;
-}
-
-/**
-* The method to set the libjsdir directory
-* @access public
-* @return boolean
-*/
-function setLibjsdir($libjsdir)
-{
-       if ($libjsdir != '' && substr($libjsdir, -1) != '/') {
-               $libjsdir .= '/';
-       }
-       if ($libjsdir == '' || substr($libjsdir, 0, 1) != '/') {
-               $foobar = strpos($libjsdir, $this->dirroot);
-               if ($foobar === false || $foobar != 0) {
-                       $libjsdir = $this->dirroot . $libjsdir;
-               }
-       }
-       if (!is_dir($libjsdir)) {
-               $this->error("setLibjsdir: $libjsdir is not a directory.");
-               return false;
-       }
-       $this->libjsdir = $libjsdir;
-       return true;
-}
-
-/**
-* The method to set the imgdir directory
-* @access public
-* @return boolean
-*/
-function setImgdir($imgdir)
-{
-       if ($imgdir != '' && substr($imgdir, -1) != '/') {
-               $imgdir .= '/';
-       }
-       if ($imgdir == '' || substr($imgdir, 0, 1) != '/') {
-               $foobar = strpos($imgdir, $this->dirroot);
-               if ($foobar === false || $foobar != 0) {
-                       $imgdir = $this->dirroot . $imgdir;
-               }
-       }
-       if (!is_dir($imgdir)) {
-               $this->error("setImgdir: $imgdir is not a directory.");
-               return false;
-       }
-       $this->imgdir = $imgdir;
-       return true;
-}
-
-/**
-* The method to set imgwww
-* @access public
-* @return void
-*/
-function setImgwww($imgwww)
-{
-       if ($imgwww != '' && substr($imgwww, -1) != '/') {
-               $imgwww .= '/';
-       }
-       $this->imgwww = $imgwww;
-}
-
-/**
-* The method to set the icondir directory
-* @access public
-* @return boolean
-*/
-function setIcondir($icondir)
-{
-       if ($icondir != '' && substr($icondir, -1) != '/') {
-               $icondir .= '/';
-       }
-       if ($icondir == '' || substr($icondir, 0, 1) != '/') {
-               $foobar = strpos($icondir, $this->dirroot);
-               if ($foobar === false || $foobar != 0) {
-                       $icondir = $this->dirroot . $icondir;
-               }
-       }
-       if (!is_dir($icondir)) {
-               $this->error("setIcondir: $icondir is not a directory.");
-               return false;
-       }
-       $this->icondir = $icondir;
-       return true;
-}
-
-/**
-* The method to set iconwww
-* @access public
-* @return void
-*/
-function setIconwww($iconwww)
-{
-       if ($iconwww != '' && substr($iconwww, -1) != '/') {
-               $iconwww .= '/';
-       }
-       $this->iconwww = $iconwww;
-}
-
-/**
-* The method to set the iconsize array
-* @access public
-* @return void
-*/
-function setIconsize($width, $height)
-{
-       $this->iconsize['width'] = ($width == (int) $width) ? $width : 0;
-       $this->iconsize['height'] = ($height == (int) $height) ? $height : 0;
-       $this->issetIconsize = true;
-}
-
-/**
-* The method to unset the iconsize array
-* @access public
-* @return void
-*/
-function unsetIconsize()
-{
-       unset($this->iconsize['width']);
-       unset($this->iconsize['height']);
-       $this->issetIconsize = false;
-}
-
-/**
-* The method to set the tpldir directory
-* @access public
-* @return boolean
-*/
-function setTpldirCommon($tpldir)
-{
-       if ($tpldir != '' && substr($tpldir, -1) != '/') {
-               $tpldir .= '/';
-       }
-       if ($tpldir == '' || substr($tpldir, 0, 1) != '/') {
-               $foobar = strpos($tpldir, $this->dirroot);
-               if ($foobar === false || $foobar != 0) {
-                       $tpldir = $this->dirroot . $tpldir;
-               }
-       }
-       if (!is_dir($tpldir)) {
-               $this->error("setTpldir: $tpldir is not a directory.");
-               return false;
-       }
-       $this->tpldir = $tpldir;
-       return true;
-}
-
-/**
-* The method to read the menu structure from a file
-* @access public
-* @param string $tree_file the menu structure file
-* @return boolean
-*/
-function setMenuStructureFile($tree_file)
-{
-       if (!($fd = fopen($tree_file, 'r'))) {
-               $this->error("setMenuStructureFile: unable to open file $tree_file.");
-               return false;
-       }
-       $this->menuStructure = '';
-       while ($buffer = fgets($fd, 4096)) {
-               $buffer = ereg_replace(chr(13), '', $buffer);   // Microsoft Stupidity Suppression
-               $this->menuStructure .= $buffer;
-       }
-       fclose($fd);
-       if ($this->menuStructure == '') {
-               $this->error("setMenuStructureFile: $tree_file is empty.");
-               return false;
-       }
-       return true;
-}
-
-/**
-* The method to set the menu structure passing it through a string
-* @access public
-* @param string $tree_string the menu structure string
-* @return boolean
-*/
-function setMenuStructureString($tree_string)
-{
-       $this->menuStructure = ereg_replace(chr(13), '', $tree_string); // Microsoft Stupidity Suppression
-       if ($this->menuStructure == '') {
-               $this->error('setMenuStructureString: empty string.');
-               return false;
-       }
-       return true;
-}
-
-/**
-* The method to set the value of separator
-* @access public
-* @return void
-*/
-function setSeparator($separator)
-{
-       $this->separator = $separator;
-}
-
-/**
-* The method to set parameters for the DB connection
-* @access public
-* @param string $dns Data Source Name: the connection string for PEAR DB
-* @param bool $persistent DB connections are either persistent or not persistent
-* @return boolean
-*/
-function setDBConnParms($dsn, $persistent=false)
-{
-       if (!is_string($dsn)) {
-               $this->error('initdb: $dsn is not an string.');
-               return false;
-       }
-       if (!is_bool($persistent)) {
-               $this->error('initdb: $persistent is not a boolean.');
-               return false;
-       }
-       $this->dsn = $dsn;
-       $this->persistent = $persistent;
-       return true;
-}
-
-/**
-* The method to set the name of the table storing data describing the menu
-* @access public
-* @param string
-* @return boolean
-*/
-function setTableName($tableName)
-{
-       if (!is_string($tableName)) {
-               $this->error('setTableName: $tableName is not a string.');
-               return false;
-       }
-       $this->tableName = $tableName;
-       return true;
-}
-
-/**
-* The method to set the name of the i18n table corresponding to $tableName
-* @access public
-* @param string
-* @return boolean
-*/
-function setTableName_i18n($tableName_i18n)
-{
-       if (!is_string($tableName_i18n)) {
-               $this->error('setTableName_i18n: $tableName_i18n is not a string.');
-               return false;
-       }
-       $this->tableName_i18n = $tableName_i18n;
-       return true;
-}
-
-/**
-* The method to set names of fields of the table storing data describing the menu
-* @access public
-* @param array
-* @return boolean
-*/
-function setTableFields($tableFields)
-{
-       if (!is_array($tableFields)) {
-               $this->error('setTableFields: $tableFields is not an array.');
-               return false;
-       }
-       if (count($tableFields) == 0) {
-               $this->error('setTableFields: $tableFields is a zero-length array.');
-               return false;
-       }
-       reset ($tableFields);
-       while (list($key, $value) = each($tableFields)) {
-               $this->tableFields[$key] = ($value == '') ? "''" : $value;
-       }
-       return true;
-}
-
-/**
-* The method to set names of fields of the i18n table corresponding to $tableName
-* @access public
-* @param array
-* @return boolean
-*/
-function setTableFields_i18n($tableFields_i18n)
-{
-       if (!is_array($tableFields_i18n)) {
-               $this->error('setTableFields_i18n: $tableFields_i18n is not an array.');
-               return false;
-       }
-       if (count($tableFields_i18n) == 0) {
-               $this->error('setTableFields_i18n: $tableFields_i18n is a zero-length array.');
-               return false;
-       }
-       reset ($tableFields_i18n);
-       while (list($key, $value) = each($tableFields_i18n)) {
-               $this->tableFields_i18n[$key] = ($value == '') ? "''" : $value;
-       }
-       return true;
-}
-
-/**
-* The method to parse the current menu structure and correspondingly update related variables
-* @access public
-* @param string $menu_name the name to be attributed to the menu
-*   whose structure has to be parsed
-* @return void
-*/
-function parseStructureForMenu(
-       $menu_name = '' // non consistent default...
-       )
-{
-       $this->_maxLevel[$menu_name] = 0;
-       $this->_firstLevelCnt[$menu_name] = 0;
-       $this->_firstItem[$menu_name] = $this->_nodesCount + 1;
-       $cnt = $this->_firstItem[$menu_name];
-       $menuStructure = $this->menuStructure;
-
-       /* *********************************************** */
-       /* Partially based on a piece of code taken from   */
-       /* TreeMenu 1.1 - Bjorge Dijkstra (bjorge@gmx.net) */
-       /* *********************************************** */
-
-       while ($menuStructure != '') {
-               $before_cr = strcspn($menuStructure, "\n");
-               $buffer = substr($menuStructure, 0, $before_cr);
-               $menuStructure = substr($menuStructure, $before_cr+1);
-               if (substr($buffer, 0, 1) == '#') {
-                       continue;       // commented item line...
-               }
-               $tmp = rtrim($buffer);
-               $node = explode($this->separator, $tmp);
-               for ($i=count($node); $i<=6; $i++) {
-                       $node[$i] = '';
-               }
-               $this->tree[$cnt]['level'] = strlen($node[0]);
-               $this->tree[$cnt]['text'] = $node[1];
-               $this->tree[$cnt]['href'] = $node[2];
-               $this->tree[$cnt]['title'] = $node[3];
-               $this->tree[$cnt]['icon'] = $node[4];
-               $this->tree[$cnt]['target'] = $node[5];
-               $this->tree[$cnt]['expanded'] = $node[6];
-               $cnt++;
-       }
-
-       /* *********************************************** */
-
-       $this->_lastItem[$menu_name] = count($this->tree);
-       $this->_nodesCount = $this->_lastItem[$menu_name];
-       $this->tree[$this->_lastItem[$menu_name]+1]['level'] = 0;
-       $this->_postParse($menu_name);
-}
-
-/**
-* The method to parse the current menu table and correspondingly update related variables
-* @access public
-* @param string $menu_name the name to be attributed to the menu
-*   whose structure has to be parsed
-* @param string $language i18n language; either omit it or pass
-*   an empty string ('') if you do not want to use any i18n table
-* @return void
-*/
-function scanTableForMenu(
-       $menu_name = '', // non consistent default...
-       $language = ''
-       )
-{
-       $this->_maxLevel[$menu_name] = 0;
-       $this->_firstLevelCnt[$menu_name] = 0;
-       unset($this->tree[$this->_nodesCount+1]);
-       $this->_firstItem[$menu_name] = $this->_nodesCount + 1;
-/* BEGIN BENCHMARK CODE
-$time_start = $this->_getmicrotime();
-/* END BENCHMARK CODE */
-       $db = DB::connect($this->dsn, $this->persistent);
-       if (DB::isError($db)) {
-               $this->error('scanTableForMenu: ' . $db->getMessage());
-       }
-       $dbresult = $db->query('
-               SELECT ' .
-                       $this->tableFields['id'] . ' AS id, ' .
-                       $this->tableFields['parent_id'] . ' AS parent_id, ' .
-                       $this->tableFields['text'] . ' AS text, ' .
-                       $this->tableFields['href'] . ' AS href, ' .
-                       $this->tableFields['title'] . ' AS title, ' .
-                       $this->tableFields['icon'] . ' AS icon, ' .
-                       $this->tableFields['target'] . ' AS target, ' .
-                       $this->tableFields['expanded'] . ' AS expanded
-               FROM ' . $this->tableName . '
-               WHERE ' . $this->tableFields['id'] . ' <> 1
-               ORDER BY ' . $this->tableFields['orderfield'] . ', ' . $this->tableFields['text'] . ' ASC
-       ');
-       $this->_tmpArray = array();
-       while ($dbresult->fetchInto($row, DB_FETCHMODE_ASSOC)) {
-               $this->_tmpArray[$row['id']]['parent_id'] = $row['parent_id'];
-               $this->_tmpArray[$row['id']]['text'] = $row['text'];
-               $this->_tmpArray[$row['id']]['href'] = $row['href'];
-               $this->_tmpArray[$row['id']]['title'] = $row['title'];
-               $this->_tmpArray[$row['id']]['icon'] = $row['icon'];
-               $this->_tmpArray[$row['id']]['target'] = $row['target'];
-               $this->_tmpArray[$row['id']]['expanded'] = $row['expanded'];
-       }
-       if ($language != '') {
-               $dbresult = $db->query('
-                       SELECT ' .
-                               $this->tableFields_i18n['id'] . ' AS id, ' .
-                               $this->tableFields_i18n['text'] . ' AS text, ' .
-                               $this->tableFields_i18n['title'] . ' AS title
-                       FROM ' . $this->tableName_i18n . '
-                       WHERE ' . $this->tableFields_i18n['id'] . ' <> 1
-                               AND ' . $this->tableFields_i18n['language'] . ' = ' . "'$language'" . '
-               ');
-               while ($dbresult->fetchInto($row, DB_FETCHMODE_ASSOC)) {
-                       if (isset($this->_tmpArray[$row['id']])) {
-                               $this->_tmpArray[$row['id']]['text'] = $row['text'];
-                               $this->_tmpArray[$row['id']]['title'] = $row['title'];
-                       }
-               }
-       }
-       unset($dbresult);
-       unset($row);
-       $this->_depthFirstSearch($menu_name, $this->_tmpArray, 1, 1);
-/* BEGIN BENCHMARK CODE
-$time_end = $this->_getmicrotime();
-$time = $time_end - $time_start;
-print "TIME ELAPSED = $time\n<br>";
-/* END BENCHMARK CODE */
-       $this->_lastItem[$menu_name] = count($this->tree);
-       $this->_nodesCount = $this->_lastItem[$menu_name];
-       $this->tree[$this->_lastItem[$menu_name]+1]['level'] = 0;
-       $this->_postParse($menu_name);
-}
-
-function _getmicrotime()
-{
-       list($usec, $sec) = explode(' ', microtime());
-       return ((float) $usec + (float) $sec);
-}
-
-/**
-* Recursive method to perform the depth-first search of the tree data taken from the current menu table
-* @access private
-* @param string $menu_name the name to be attributed to the menu
-*   whose structure has to be parsed
-* @param array $tmpArray the temporary array that stores data to perform
-*   the depth-first search
-* @param integer $parent_id id of the item whose children have
-*   to be searched for
-* @param integer $level the hierarchical level of children to be searched for
-* @return void
-*/
-function _depthFirstSearch($menu_name, $tmpArray, $parent_id=1, $level=1)
-{
-       reset ($tmpArray);
-       while (list($id, $foobar) = each($tmpArray)) {
-               if ($foobar['parent_id'] == $parent_id) {
-                       unset($tmpArray[$id]);
-                       unset($this->_tmpArray[$id]);
-                       $cnt = count($this->tree) + 1;
-                       $this->tree[$cnt]['level'] = $level;
-                       $this->tree[$cnt]['text'] = $foobar['text'];
-                       $this->tree[$cnt]['href'] = $foobar['href'];
-                       $this->tree[$cnt]['title'] = $foobar['title'];
-                       $this->tree[$cnt]['icon'] = $foobar['icon'];
-                       $this->tree[$cnt]['target'] = $foobar['target'];
-                       $this->tree[$cnt]['expanded'] = $foobar['expanded'];
-                       $this->treecnt[$menu_name][$id] = $cnt;
-                       unset($foobar);
-                       if ($id != $parent_id) {
-                               $this->_depthFirstSearch($menu_name, $this->_tmpArray, $id, $level+1);
-                       }
-               }
-       }
-}
-
-/**
-* A method providing parsing needed after both file/string parsing and DB table parsing
-* @access private
-* @param string $menu_name the name of the menu for which the parsing
-*   has to be performed
-* @return void
-*/
-function _postParse(
-       $menu_name = '' // non consistent default...
-       )
-{
-       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the new menu
-               $this->tree[$cnt]['child_of_root_node'] = ($this->tree[$cnt]['level'] == 1);
-               $this->tree[$cnt]['parsed_text'] = stripslashes($this->tree[$cnt]['text']);
-               $this->tree[$cnt]['parsed_href'] = (ereg_replace(' ', '', $this->tree[$cnt]['href']) == '') ? '#' : $this->prependedUrl . $this->tree[$cnt]['href'];
-               $this->tree[$cnt]['parsed_title'] = ($this->tree[$cnt]['title'] == '') ? '' : ' title="' . stripslashes($this->tree[$cnt]['title']) . '"';
-               $fooimg = $this->icondir . $this->tree[$cnt]['icon'];
-               if ($this->tree[$cnt]['icon'] != '' && (substr($this->tree[$cnt]['icon'], 0, 7) == 'http://' || substr($this->tree[$cnt]['icon'], 0, 8) == 'https://')) {
-                       $this->tree[$cnt]['parsed_icon'] = $this->tree[$cnt]['icon'];
-                       if ($this->issetIconsize) {
-                               $this->tree[$cnt]['iconwidth'] = $this->iconsize['width'];
-                               $this->tree[$cnt]['iconheight'] = $this->iconsize['height'];
-                       } else {
-                               $foobar = getimagesize($this->tree[$cnt]['icon']);
-                               $this->tree[$cnt]['iconwidth'] = $foobar[0];
-                               $this->tree[$cnt]['iconheight'] = $foobar[1];
-                       }
-               } elseif ($this->tree[$cnt]['icon'] != '' && file_exists($fooimg)) {
-                       $this->tree[$cnt]['parsed_icon'] = $this->iconwww . $this->tree[$cnt]['icon'];
-                       if ($this->issetIconsize) {
-                               $this->tree[$cnt]['iconwidth'] = $this->iconsize['width'];
-                               $this->tree[$cnt]['iconheight'] = $this->iconsize['height'];
-                       } else {
-                               $foobar = getimagesize($fooimg);
-                               $this->tree[$cnt]['iconwidth'] = $foobar[0];
-                               $this->tree[$cnt]['iconheight'] = $foobar[1];
-                       }
-               } else {
-                       $this->tree[$cnt]['parsed_icon'] = '';
-               }
-               $this->tree[$cnt]['parsed_target'] = ($this->tree[$cnt]['target'] == '') ? '' : ' target="' . $this->tree[$cnt]['target'] . '"';
-//             $this->tree[$cnt]['expanded'] = ($this->tree[$cnt]['expanded'] == '') ? 0 : $this->tree[$cnt]['expanded'];
-               $this->_maxLevel[$menu_name] = max($this->_maxLevel[$menu_name], $this->tree[$cnt]['level']);
-               if ($this->tree[$cnt]['level'] == 1) {
-                       $this->_firstLevelCnt[$menu_name]++;
-               }
-       }
-}
-
-/**
-* A method to replace strings in all URLs (hrefs) of a menu
-* @access public
-* @param string $menu_name the name of the menu for which the replacement
-*   has to be performed
-* @param string $string the string to be replaced
-* @param string $value the replacement string
-* @return void
-*/
-function replaceStringInUrls($menu_name, $string, $value)
-{
-       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the new menu
-               $this->tree[$cnt]['parsed_href'] = str_replace($string, $value, $this->tree[$cnt]['parsed_href']);
-       }
-}
-
-/**
-* A method to set the same target for all links of a menu
-* @access public
-* @param string $menu_name the name of the menu for which the targets
-*   have to be set
-* @param string $target the target to be set for all links
-*   of the $menu_name menu
-* @return void
-*/
-function setLinksTargets($menu_name, $target)
-{
-       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the new menu
-               $this->tree[$cnt]['parsed_target'] = ' target="' . $target . '"';
-       }
-}
-
-/**
-* A method to select the current item of $menu_name in terms of $cnt, i.e., very likely, in terms of its line number in the corresponding menu structure file (excluding from the count commented out lines, if any)
-* @access public
-* @param string $menu_name the name of the menu for which the current item
-*   has to be selected
-* @param integer $count the line number of the current item
-*   in the corresponding menu structure file
-*   (excluding from the count commented out lines, if any)
-* @return void
-*/
-function setSelectedItemByCount($menu_name, $count)
-{
-       if ($count < 1) {
-               $this->error("setSelectedItemByCount: the \$count argument is $count, but \$count can not be lower than 1");
-               return;
-       }
-       if ($count > $this->_lastItem[$menu_name] - $this->_firstItem[$menu_name] + 1) {
-               $this->error("setSelectedItemByCount: the \$count argument is $count and is larger than the number of items of the '$menu_name' menu");
-               return;
-       }
-       $cnt = $this->_firstItem[$menu_name] + $count - 1;
-       $this->tree[$cnt]['selected'] = true;
-}
-
-/**
-* A method to select the current item of $menu_name in terms of the corresponding id (see the DB table structure); obviously, this method can be used only together with the DB support
-* @access public
-* @param string $menu_name the name of the menu for which the current item
-*   has to be selected
-* @param integer $id the id of the current item in the corresponding DB table
-* @return void
-*/
-function setSelectedItemById($menu_name, $id)
-{
-       if (!isset($this->treecnt[$menu_name][$id])) {
-               $this->error("setSelectedItemById: there is not any item with \$id = $id in the '$menu_name' menu");
-               return;
-       }
-       $cnt = $this->treecnt[$menu_name][$id];
-       $this->tree[$cnt]['selected'] = true;
-}
-
-/**
-* A method to select the current item of $menu_name specifying a string that occurs in the current URL
-* @access public
-* @param string $menu_name the name of the menu for which the current item
-*   has to be selected
-* @param string $url a string that occurs in the current URL
-* @return void
-*/
-function setSelectedItemByUrl($menu_name, $url)
-{
-       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the new menu
-               if (!(strpos($this->tree[$cnt]['parsed_href'], $url) === false)) {
-                       $this->tree[$cnt]['selected'] = true;
-                       break;
-               }
-       }
-}
-
-/**
-* A method to select the current item of $menu_name specifying a regular expression that matches (a substring of) the current URL; just the same as the setSelectedItemByUrl() method, but using eregi() instead of strpos()
-* @access public
-* @param string $menu_name the name of the menu for which the current item
-*   has to be selected
-* @param string $url_eregi the regular expression that matches
-*   (a substring of) the current URL
-* @return void
-*/
-function setSelectedItemByUrlEregi($menu_name, $url_eregi)
-{
-       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the new menu
-               if (eregi($url_eregi, $this->tree[$cnt]['parsed_href'])) {
-                       $this->tree[$cnt]['selected'] = true;
-                       break;
-               }
-       }
-}
-
-/**
-* Method to handle errors
-* @access private
-* @param string $errormsg the error message
-* @return void
-*/
-function error($errormsg)
-{
-       print "<b>LayersMenu Error:</b> $errormsg<br />\n";
-       if ($this->haltOnError == 'yes') {
-               die("<b>Halted.</b><br />\n");
-       }
-}
-
-} /* END OF CLASS */
-
-?>
diff --git a/gosa-core/include/layer-menu/lib/layersmenu-process.inc.php b/gosa-core/include/layer-menu/lib/layersmenu-process.inc.php
deleted file mode 100644 (file)
index 13033c9..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-<?php
-// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
-
-/**
-* This file contains the code of the ProcessLayersMenu class.
-* @package PHPLayersMenu
-*/
-
-/**
-* This is an extension of the "common" class of the PHP Layers Menu library.
-*
-* It provides methods useful to process/convert menus data, e.g. to output a menu structure and a DB SQL dump corresponding to already parsed data and hence also to convert a menu structure file to a DB SQL dump and viceversa
-*
-* @version 3.2.0-rc
-* @package PHPLayersMenu
-*/
-class ProcessLayersMenu extends LayersMenuCommon
-{
-
-/**
-* The constructor method
-* @return void
-*/
-function ProcessLayersMenu()
-{
-       $this->LayersMenuCommon();
-}
-
-/**
-* The method to set the dirroot directory
-* @access public
-* @return boolean
-*/
-function setDirroot($dirroot)
-{
-       return $this->setDirrootCommon($dirroot);
-}
-
-/**
-* Method to output a menu structure corresponding to items of a menu
-* @access public
-* @param string $menu_name the name of the menu for which a menu structure
-*   has to be returned
-* @param string $separator the character used in the menu structure format
-*   to separate fields of each item
-* @return string
-*/
-function getMenuStructure(
-       $menu_name = '',        // non consistent default...
-       $separator = '|'
-       )
-{
-       $menuStructure = '';
-       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the menu
-               $menuStructure .= str_repeat('.', $this->tree[$cnt]['level']);
-               $menuStructure .= $separator;
-               $menuStructure .= $this->tree[$cnt]['text'];
-               $menuStructure .= $separator;
-               $menuStructure .= $this->tree[$cnt]['href'];
-               $menuStructure .= $separator;
-               $menuStructure .= $this->tree[$cnt]['title'];
-               $menuStructure .= $separator;
-               $menuStructure .= $this->tree[$cnt]['icon'];
-               $menuStructure .= $separator;
-               $menuStructure .= $this->tree[$cnt]['target'];
-               $menuStructure .= $separator;
-               $menuStructure .= $this->tree[$cnt]['expanded'];
-               $menuStructure .= "\n";
-       }
-       return $menuStructure;
-}
-
-/**
-* Method to output a DB SQL dump corresponding to items of a menu
-* @access public
-* @param string $menu_name the name of the menu for which a DB SQL dump
-*   has to be returned
-* @param string $db_type the type of DB to dump for;
-*   leave it either empty or not specified if you are using PHP < 5,
-*   as sqlite_escape_string() has been added in PHP 5;
-*   it has to be specified and set to 'sqlite' only if the dump
-*   has to be prepared for SQLite; it is not significant if != 'sqlite'
-* @return string
-*/
-function getSQLDump(
-       $menu_name = '',        // non consistent default...
-       $db_type = ''
-       )
-{
-       $SQLDump = '';
-       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the menu
-               $current_node[$this->tree[$cnt]['level']] = $cnt;
-               if (!$this->tree[$cnt]['child_of_root_node']) {
-                       $this->tree[$cnt]['father_node'] = $current_node[$this->tree[$cnt]['level']-1];
-               }
-               $VALUES = '';
-               $SQLDump .= 'INSERT INTO ';
-               $SQLDump .= $this->tableName;
-               $SQLDump .= ' (';
-               $SQLDump .= $this->tableFields['id'] . ', ';
-               $VALUES .= "'" . 10*$cnt . "', ";
-               $SQLDump .= $this->tableFields['parent_id'] . ', ';
-               if (isset($this->tree[$cnt]['father_node']) && $this->tree[$cnt]['father_node'] != 0) {
-                       $VALUES .= "'" . 10*$this->tree[$cnt]['father_node'] . "', ";
-               } else {
-                       $VALUES .= "'1', ";
-               }
-               $SQLDump .= $this->tableFields['text'] . ', ';
-               $foobar = $this->tree[$cnt]['text'];
-               if ($foobar != '') {
-                       if ($db_type != 'sqlite') {
-                               $foobar = addslashes($foobar);
-                       } else {
-                               $foobar = sqlite_escape_string($foobar);
-                       }
-               }
-               $VALUES .= "'$foobar', ";
-               $SQLDump .= $this->tableFields['href'] . ', ';
-               $VALUES .= "'" . $this->tree[$cnt]['href'] . "', ";
-               if ($this->tableFields['title'] != "''") {
-                       $SQLDump .= $this->tableFields['title'] . ', ';
-                       $foobar = $this->tree[$cnt]['title'];
-                       if ($foobar != '') {
-                               if ($db_type != 'sqlite') {
-                                       $foobar = addslashes($foobar);
-                               } else {
-                                       $foobar = sqlite_escape_string($foobar);
-                               }
-                       }
-                       $VALUES .= "'$foobar', ";
-               }
-               if ($this->tableFields['icon'] != "''") {
-                       $SQLDump .= $this->tableFields['icon'] . ', ';
-                       $VALUES .= "'" . $this->tree[$cnt]['icon'] . "', ";
-               }
-               if ($this->tableFields['target'] != "''") {
-                       $SQLDump .= $this->tableFields['target'] . ', ';
-                       $VALUES .= "'" . $this->tree[$cnt]['target'] . "', ";
-               }
-               if ($this->tableFields['orderfield'] != "''") {
-                       $SQLDump .= $this->tableFields['orderfield'] . ', ';
-                       $VALUES .= "'" . 10*$cnt . "', ";
-               }
-               if ($this->tableFields['expanded'] != "''") {
-                       $SQLDump .= $this->tableFields['expanded'] . ', ';
-                       $this->tree[$cnt]['expanded'] = (int) $this->tree[$cnt]['expanded'];
-                       $VALUES .= "'" . $this->tree[$cnt]['expanded'] . "', ";
-               }
-               $SQLDump = substr($SQLDump, 0, -2);
-               $VALUES = substr($VALUES, 0, -2);
-               $SQLDump .= ") VALUES ($VALUES);\n";
-       }
-       return $SQLDump;
-}
-
-} /* END OF CLASS */
-
-?>
diff --git a/gosa-core/include/layer-menu/lib/layersmenu.inc.php b/gosa-core/include/layer-menu/lib/layersmenu.inc.php
deleted file mode 100644 (file)
index b110e9c..0000000
+++ /dev/null
@@ -1,942 +0,0 @@
-<?php
-// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
-
-/**
-* This file contains the code of the LayersMenu class.
-* @package PHPLayersMenu
-*/
-
-/**
-* This is the LayersMenu class of the PHP Layers Menu library.
-*
-* This class depends on the LayersMenuCommon class and on the PEAR conforming version of the PHPLib Template class, i.e. on HTML_Template_PHPLIB
-*
-* @version 3.2.0-rc
-* @package PHPLayersMenu
-*/
-class LayersMenu extends LayersMenuCommon
-{
-
-/**
-* The template to be used for the first level menu of a horizontal menu.
-*
-* The value of this variable is significant only when preparing
-* a horizontal menu.
-*
-* @access private
-* @var string
-*/
-var $horizontalMenuTpl;
-/**
-* The template to be used for the first level menu of a vertical menu.
-*
-* The value of this variable is significant only when preparing
-* a vertical menu.
-*
-* @access private
-* @var string
-*/
-var $verticalMenuTpl;
-/**
-* The template to be used for submenu layers
-* @access private
-* @var string
-*/
-var $subMenuTpl;
-
-/**
-* A string containing the header needed to use the menu(s) in the page
-* @access private
-* @var string
-*/
-var $header;
-/**
-* This var tells if the header has been made or not
-* @access private
-* @var boolean
-*/
-var $_headerHasBeenMade = false;
-/**
-* The JS vector to list layers
-* @access private
-* @var string
-*/
-var $listl;
-/**
-* The JS vector of keys to know the father of each layer
-* @access private
-* @var string
-*/
-var $father_keys;
-/**
-* The JS vector of vals to know the father of each layer
-* @access private
-* @var string
-*/
-var $father_vals;
-/**
-* The JS function to set initial positions of all layers
-* @access private
-* @var string
-*/
-var $moveLayers;
-/**
-* An array containing the code related to the first level menu of each menu
-* @access private
-* @var array
-*/
-var $_firstLevelMenu;
-/**
-* A string containing the footer needed to use the menu(s) in the page
-* @access private
-* @var string
-*/
-var $footer;
-/**
-* This var tells if the footer has been made or not
-* @access private
-* @var boolean
-*/
-var $_footerHasBeenMade = false;
-
-/**
-* The image used for forward arrows.
-* @access private
-* @var string
-*/
-var $forwardArrowImg;
-/**
-* The image used for down arrows.
-* @access private
-* @var string
-*/
-var $downArrowImg;
-/**
-* A 1x1 transparent icon.
-* @access private
-* @var string
-*/
-var $transparentIcon;
-/**
-* An array to keep trace of layers containing / not containing icons
-* @access private
-* @var array
-*/
-var $_hasIcons;
-/**
-* Top offset for positioning of sub menu layers
-* @access private
-* @var integer
-*/
-var $menuTopShift;
-/**
-* Right offset for positioning of sub menu layers
-* @access private
-* @var integer
-*/
-var $menuRightShift;
-/**
-* Left offset for positioning of sub menu layers
-* @access private
-* @var integer
-*/
-var $menuLeftShift;
-/**
-* Threshold for vertical repositioning of a layer
-* @access private
-* @var integer
-*/
-var $thresholdY;
-/**
-* Step for the left boundaries of layers
-* @access private
-* @var integer
-*/
-var $abscissaStep;
-
-/**
-* The constructor method; it initializates the menu system
-* @return void
-*/
-function LayersMenu(
-       $menuTopShift = 6,      // Gtk2-like
-       $menuRightShift = 7,    // Gtk2-like
-       $menuLeftShift = 2,     // Gtk2-like
-       $thresholdY = 5,
-       $abscissaStep = 140
-       )
-{
-       $this->LayersMenuCommon();
-
-       $this->horizontalMenuTpl = $this->tpldir . 'layersmenu-horizontal_menu.ihtml';
-       $this->verticalMenuTpl = $this->tpldir . 'layersmenu-vertical_menu.ihtml';
-       $this->subMenuTpl = $this->tpldir . 'layersmenu-sub_menu.ihtml';
-
-       $this->header = '';
-       $this->listl = '';
-       $this->father_keys = '';
-       $this->father_vals = '';
-       $this->moveLayers = '';
-       $this->_firstLevelMenu = array();
-       $this->footer = '';
-
-       $this->transparentIcon = 'transparent.png';
-       $this->_hasIcons = array();
-       $this->forwardArrowImg['src'] = 'forward-arrow.png';
-       $this->forwardArrowImg['width'] = 4;
-       $this->forwardArrowImg['height'] = 7;
-       $this->downArrowImg['src'] = 'down-arrow.png';
-       $this->downArrowImg['width'] = 9;
-       $this->downArrowImg['height'] = 5;
-       $this->menuTopShift = $menuTopShift;
-       $this->menuRightShift = $menuRightShift;
-       $this->menuLeftShift = $menuLeftShift;
-       $this->thresholdY = $thresholdY;
-       $this->abscissaStep = $abscissaStep;
-}
-
-/**
-* The method to set the value of menuTopShift
-* @access public
-* @return void
-*/
-function setMenuTopShift($menuTopShift)
-{
-       $this->menuTopShift = $menuTopShift;
-}
-
-/**
-* The method to set the value of menuRightShift
-* @access public
-* @return void
-*/
-function setMenuRightShift($menuRightShift)
-{
-       $this->menuRightShift = $menuRightShift;
-}
-
-/**
-* The method to set the value of menuLeftShift
-* @access public
-* @return void
-*/
-function setMenuLeftShift($menuLeftShift)
-{
-       $this->menuLeftShift = $menuLeftShift;
-}
-
-/**
-* The method to set the value of thresholdY
-* @access public
-* @return void
-*/
-function setThresholdY($thresholdY)
-{
-       $this->thresholdY = $thresholdY;
-}
-
-/**
-* The method to set the value of abscissaStep
-* @access public
-* @return void
-*/
-function setAbscissaStep($abscissaStep)
-{
-       $this->abscissaStep = $abscissaStep;
-}
-
-/**
-* The method to set the dirroot directory
-* @access public
-* @return boolean
-*/
-function setDirroot($dirroot)
-{
-       $oldtpldir = $this->tpldir;
-       if ($foobar = $this->setDirrootCommon($dirroot)) {
-               $this->updateTpldir($oldtpldir);
-       }
-       return $foobar;
-}
-
-/**
-* The method to set the tpldir directory
-* @access public
-* @return boolean
-*/
-function setTpldir($tpldir)
-{
-       $oldtpldir = $this->tpldir;
-       if ($foobar = $this->setTpldirCommon($tpldir)) {
-               $this->updateTpldir($oldtpldir);
-       }
-       return $foobar;
-}
-
-/**
-* The method to update the templates directory path to the new tpldir
-* @access private
-* @return void
-*/
-function updateTpldir($oldtpldir)
-{
-       $oldlength = strlen($oldtpldir);
-       $foobar = strpos($this->horizontalMenuTpl, $oldtpldir);
-       if (!($foobar === false || $foobar != 0)) {
-               $this->horizontalMenuTpl = $this->tpldir . substr($this->horizontalMenuTpl, $oldlength);
-       }
-       $foobar = strpos($this->verticalMenuTpl, $oldtpldir);
-       if (!($foobar === false || $foobar != 0)) {
-               $this->verticalMenuTpl = $this->tpldir . substr($this->verticalMenuTpl, $oldlength);
-       }
-       $foobar = strpos($this->subMenuTpl, $oldtpldir);
-       if (!($foobar === false || $foobar != 0)) {
-               $this->subMenuTpl = $this->tpldir . substr($this->subMenuTpl, $oldlength);
-       }
-}
-
-/**
-* The method to set horizontalMenuTpl
-* @access public
-* @return boolean
-*/
-function setHorizontalMenuTpl($horizontalMenuTpl)
-{
-       if (str_replace('/', '', $horizontalMenuTpl) == $horizontalMenuTpl) {
-               $horizontalMenuTpl = $this->tpldir . $horizontalMenuTpl;
-       }
-       if (!file_exists($horizontalMenuTpl)) {
-               $this->error("setHorizontalMenuTpl: file $horizontalMenuTpl does not exist.");
-               return false;
-       }
-       $this->horizontalMenuTpl = $horizontalMenuTpl;
-       return true;
-}
-
-/**
-* The method to set verticalMenuTpl
-* @access public
-* @return boolean
-*/
-function setVerticalMenuTpl($verticalMenuTpl)
-{
-       if (str_replace('/', '', $verticalMenuTpl) == $verticalMenuTpl) {
-               $verticalMenuTpl = $this->tpldir . $verticalMenuTpl;
-       }
-       if (!file_exists($verticalMenuTpl)) {
-               $this->error("setVerticalMenuTpl: file $verticalMenuTpl does not exist.");
-               return false;
-       }
-       $this->verticalMenuTpl = $verticalMenuTpl;
-       return true;
-}
-
-/**
-* The method to set subMenuTpl
-* @access public
-* @return boolean
-*/
-function setSubMenuTpl($subMenuTpl)
-{
-       if (str_replace('/', '', $subMenuTpl) == $subMenuTpl) {
-               $subMenuTpl = $this->tpldir . $subMenuTpl;
-       }
-       if (!file_exists($subMenuTpl)) {
-               $this->error("setSubMenuTpl: file $subMenuTpl does not exist.");
-               return false;
-       }
-       $this->subMenuTpl = $subMenuTpl;
-       return true;
-}
-
-/**
-* A method to set transparentIcon
-* @access public
-* @param string $transparentIcon a transparentIcon filename (without the path)
-* @return void
-*/
-function setTransparentIcon($transparentIcon)
-{
-       $this->transparentIcon = $transparentIcon;
-}
-
-/**
-* The method to set an image to be used for the forward arrow
-* @access public
-* @param string $forwardArrowImg the forward arrow image filename
-* @return boolean
-*/
-function setForwardArrowImg($forwardArrowImg)
-{
-       if (!file_exists($this->imgdir . $forwardArrowImg)) {
-               $this->error('setForwardArrowImg: file ' . $this->imgdir . $forwardArrowImg . ' does not exist.');
-               return false;
-       }
-       $foobar = getimagesize($this->imgdir . $forwardArrowImg);
-       $this->forwardArrowImg['src'] = $forwardArrowImg;
-       $this->forwardArrowImg['width'] = $foobar[0];
-       $this->forwardArrowImg['height'] = $foobar[1];
-       return true;
-}
-
-/**
-* The method to set an image to be used for the down arrow
-* @access public
-* @param string $downArrowImg the down arrow image filename
-* @return boolean
-*/
-function setDownArrowImg($downArrowImg)
-{
-       if (!file_exists($this->imgdir . $downArrowImg)) {
-               $this->error('setDownArrowImg: file ' . $this->imgdir . $downArrowImg . ' does not exist.');
-               return false;
-       }
-       $foobar = getimagesize($this->imgdir . $downArrowImg);
-       $this->downArrowImg['src'] = $downArrowImg;
-       $this->downArrowImg['width'] = $foobar[0];
-       $this->downArrowImg['height'] = $foobar[1];
-       return true;
-}
-
-/**
-* A method providing parsing needed both for horizontal and vertical menus; it can be useful also with the ProcessLayersMenu extended class
-* @access public
-* @param string $menu_name the name of the menu for which the parsing
-*   has to be performed
-* @return void
-*/
-function parseCommon(
-       $menu_name = '' // non consistent default...
-       )
-{
-       $this->_hasIcons[$menu_name] = false;
-       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the new menu
-               $this->_hasIcons[$cnt] = false;
-               $this->tree[$cnt]['layer_label'] = "L$cnt";
-               $current_node[$this->tree[$cnt]['level']] = $cnt;
-               if (!$this->tree[$cnt]['child_of_root_node']) {
-                       $this->tree[$cnt]['father_node'] = $current_node[$this->tree[$cnt]['level']-1];
-                       $this->father_keys .= ",'L$cnt'";
-                       $this->father_vals .= ",'" . $this->tree[$this->tree[$cnt]['father_node']]['layer_label'] . "'";
-               }
-               $this->tree[$cnt]['not_a_leaf'] = ($this->tree[$cnt+1]['level']>$this->tree[$cnt]['level'] && $cnt<$this->_lastItem[$menu_name]);
-               // if the above condition is true, the node is not a leaf,
-               // hence it has at least a child; if it is false, the node is a leaf
-               if ($this->tree[$cnt]['not_a_leaf']) {
-                       // initialize the corresponding layer content trought a void string
-                       $this->tree[$cnt]['layer_content'] = '';
-                       // the new layer is accounted for in the layers list
-                       $this->listl .= ",'" . $this->tree[$cnt]['layer_label'] . "'";
-               }
-/*
-               if ($this->tree[$cnt]['not_a_leaf']) {
-                       $this->tree[$cnt]['parsed_href'] = '#';
-               }
-*/
-               if ($this->tree[$cnt]['parsed_icon'] == '') {
-                       $this->tree[$cnt]['iconsrc'] = $this->imgwww . $this->transparentIcon;
-                       $this->tree[$cnt]['iconwidth'] = 16;
-                       $this->tree[$cnt]['iconheight'] = 16;
-                       $this->tree[$cnt]['iconalt'] = ' ';
-               } else {
-                       if ($this->tree[$cnt]['level'] > 1) {
-                               $this->_hasIcons[$this->tree[$cnt]['father_node']] = true;
-                       } else {
-                               $this->_hasIcons[$menu_name] = true;
-                       }
-                       $this->tree[$cnt]['iconsrc'] = $this->tree[$cnt]['parsed_icon'];
-                       $this->tree[$cnt]['iconalt'] = 'O';
-               }
-       }
-}
-
-/**
-* A method needed to update the footer both for horizontal and vertical menus
-* @access private
-* @param string $menu_name the name of the menu for which the updating
-*   has to be performed
-* @return void
-*/
-function _updateFooter(
-       $menu_name = '' // non consistent default...
-       )
-{
-       $t = new Template_PHPLIB();
-       $t->setFile('tplfile', $this->subMenuTpl);
-       $t->setBlock('tplfile', 'template', 'template_blck');
-       $t->setBlock('template', 'sub_menu_cell', 'sub_menu_cell_blck');
-       $t->setVar('sub_menu_cell_blck', '');
-       $t->setBlock('template', 'separator', 'separator_blck');
-       $t->setVar('separator_blck', '');
-       $t->setVar('abscissaStep', $this->abscissaStep);
-
-       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {
-               if ($this->tree[$cnt]['not_a_leaf']) {
-                       $t->setVar(array(
-                               'layer_label'           => $this->tree[$cnt]['layer_label'],
-                               'layer_title'           => $this->tree[$cnt]['text'],
-                               'sub_menu_cell_blck'    => $this->tree[$cnt]['layer_content']
-                       ));
-                       $this->footer .= $t->parse('template_blck', 'template');
-               }
-       }
-}
-
-/**
-* Method to preparare a horizontal menu.
-*
-* This method processes items of a menu to prepare the corresponding
-* horizontal menu code updating many variables; it returns the code
-* of the corresponding _firstLevelMenu
-*
-* @access public
-* @param string $menu_name the name of the menu whose items have to be processed
-* @return string
-*/
-function newHorizontalMenu(
-       $menu_name = '' // non consistent default...
-       )
-{
-       if (!isset($this->_firstItem[$menu_name]) || !isset($this->_lastItem[$menu_name])) {
-               $this->error("newHorizontalMenu: the first/last item of the menu '$menu_name' is not defined; please check if you have parsed its menu data.");
-               return 0;
-       }
-
-       $this->parseCommon($menu_name);
-
-       $t = new Template_PHPLIB();
-       $t->setFile('tplfile', $this->horizontalMenuTpl);
-       $t->setBlock('tplfile', 'template', 'template_blck');
-       $t->setBlock('template', 'horizontal_menu_cell', 'horizontal_menu_cell_blck');
-       $t->setVar('horizontal_menu_cell_blck', '');
-       $t->setBlock('horizontal_menu_cell', 'cell_link', 'cell_link_blck');
-       $t->setVar('cell_link_blck', '');
-       $t->setBlock('cell_link', 'cell_icon', 'cell_icon_blck');
-       $t->setVar('cell_icon_blck', '');
-       $t->setBlock('cell_link', 'cell_arrow', 'cell_arrow_blck');
-       $t->setVar('cell_arrow_blck', '');
-
-       $t_sub = new Template_PHPLIB();
-       $t_sub->setFile('tplfile', $this->subMenuTpl);
-       $t_sub->setBlock('tplfile', 'sub_menu_cell', 'sub_menu_cell_blck');
-       $t_sub->setVar('sub_menu_cell_blck', '');
-       $t_sub->setBlock('sub_menu_cell', 'cell_icon', 'cell_icon_blck');
-       $t_sub->setVar('cell_icon_blck', '');
-       $t_sub->setBlock('sub_menu_cell', 'cell_arrow', 'cell_arrow_blck');
-       $t_sub->setVar('cell_arrow_blck', '');
-       $t_sub->setBlock('tplfile', 'separator', 'separator_blck');
-       $t_sub->setVar('separator_blck', '');
-
-       $this->_firstLevelMenu[$menu_name] = '';
-
-       $foobar = $this->_firstItem[$menu_name];
-       $this->moveLayers .= "\tvar " . $menu_name . "TOP = getOffsetTop('" . $menu_name . "L" . $foobar . "');\n";
-       $this->moveLayers .= "\tvar " . $menu_name . "HEIGHT = getOffsetHeight('" . $menu_name . "L" . $foobar . "');\n";
-
-       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the new menu
-               if ($this->tree[$cnt]['not_a_leaf']) {
-                       // geometrical parameters are assigned to the new layer, related to the above mentioned children
-                       if ($this->tree[$cnt]['child_of_root_node']) {
-                               $this->moveLayers .= "\tsetTop('" . $this->tree[$cnt]['layer_label'] . "', "  . $menu_name . "TOP + " . $menu_name . "HEIGHT);\n";
-                               $this->moveLayers .= "\tmoveLayerX1('" . $this->tree[$cnt]['layer_label'] . "', '" . $menu_name . "');\n";
-                       }
-               }
-
-               if ($this->tree[$cnt]['child_of_root_node']) {
-                       if ($this->tree[$cnt]['text'] == '---') {
-                               continue;
-                       }
-                       if ($this->tree[$cnt]['not_a_leaf']) {
-                               $this->tree[$cnt]['onmouseover'] = ' onmouseover="moveLayerX1(' . "'" . $this->tree[$cnt]['layer_label'] . "', '" . $menu_name . "') ; LMPopUp('" . $this->tree[$cnt]['layer_label'] . "'" . ', false);"';
-                       } else {
-                               $this->tree[$cnt]['onmouseover'] = ' onmouseover="shutdown();"';
-                       }
-                       $t->setVar(array(
-                               'menu_layer_label'      => $menu_name . $this->tree[$cnt]['layer_label'],
-                               'imgwww'                => $this->imgwww,
-                               'transparent'           => $this->transparentIcon,
-                               'href'                  => $this->tree[$cnt]['parsed_href'],
-                               'onmouseover'           => $this->tree[$cnt]['onmouseover'],
-                               'title'                 => $this->tree[$cnt]['parsed_title'],
-                               'target'                => $this->tree[$cnt]['parsed_target'],
-                               'text'                  => $this->tree[$cnt]['text'],
-                               'downsrc'               => $this->downArrowImg['src'],
-                               'downwidth'             => $this->downArrowImg['width'],
-                               'downheight'            => $this->downArrowImg['height']
-                       ));
-                       if ($this->tree[$cnt]['parsed_icon'] != '') {
-                               $t->setVar(array(
-                                       'iconsrc'       => $this->tree[$cnt]['iconsrc'],
-                                       'iconwidth'     => $this->tree[$cnt]['iconwidth'],
-                                       'iconheight'    => $this->tree[$cnt]['iconheight'],
-                                       'iconalt'       => $this->tree[$cnt]['iconalt'],
-                               ));
-                               $t->parse('cell_icon_blck', 'cell_icon');
-                       } else {
-                               $t->setVar('cell_icon_blck', '');
-                       }
-                       if ($this->tree[$cnt]['not_a_leaf']) {
-                               $t->parse('cell_arrow_blck', 'cell_arrow');
-                       } else {
-                               $t->setVar('cell_arrow_blck', '');
-                       }
-                       $foobar = $t->parse('cell_link_blck', 'cell_link');
-                       $t->setVar(array(
-                               'cellwidth'             => $this->abscissaStep,
-                               'cell_link_blck'        => $foobar
-                       ));
-                       $t->parse('horizontal_menu_cell_blck', 'horizontal_menu_cell', true);
-               } else {
-                       if ($this->tree[$cnt]['text'] == '---') {
-                               $this->tree[$this->tree[$cnt]['father_node']]['layer_content'] .= $t_sub->parse('separator_blck', 'separator');
-                               continue;
-                       }
-                       if ($this->tree[$cnt]['not_a_leaf']) {
-                               $this->tree[$cnt]['onmouseover'] = ' onmouseover="moveLayerX(' . "'" . $this->tree[$cnt]['layer_label'] . "') ; moveLayerY('" . $this->tree[$cnt]['layer_label'] . "') ; LMPopUp('" . $this->tree[$cnt]['layer_label'] . "'". ', false);"';
-                       } else {
-                               $this->tree[$cnt]['onmouseover'] = ' onmouseover="LMPopUp(' . "'" . $this->tree[$this->tree[$cnt]['father_node']]['layer_label'] . "'" . ', true);"';
-                       }
-                       $t_sub->setVar(array(
-                               'imgwww'        => $this->imgwww,
-                               'transparent'   => $this->transparentIcon,
-                               'href'          => $this->tree[$cnt]['parsed_href'],
-                               'refid'         => 'ref' . $this->tree[$cnt]['layer_label'],
-                               'onmouseover'   => $this->tree[$cnt]['onmouseover'],
-                               'title'         => $this->tree[$cnt]['parsed_title'],
-                               'target'        => $this->tree[$cnt]['parsed_target'],
-                               'text'          => $this->tree[$cnt]['text'],
-                               'arrowsrc'      => $this->forwardArrowImg['src'],
-                               'arrowwidth'    => $this->forwardArrowImg['width'],
-                               'arrowheight'   => $this->forwardArrowImg['height']
-                       ));
-                       if ($this->_hasIcons[$this->tree[$cnt]['father_node']]) {
-                               $t_sub->setVar(array(
-                                       'iconsrc'       => $this->tree[$cnt]['iconsrc'],
-                                       'iconwidth'     => $this->tree[$cnt]['iconwidth'],
-                                       'iconheight'    => $this->tree[$cnt]['iconheight'],
-                                       'iconalt'       => $this->tree[$cnt]['iconalt']
-                               ));
-                               $t_sub->parse('cell_icon_blck', 'cell_icon');
-                       } else {
-                               $t_sub->setVar('cell_icon_blck', '');
-                       }
-                       if ($this->tree[$cnt]['not_a_leaf']) {
-                               $t_sub->parse('cell_arrow_blck', 'cell_arrow');
-                       } else {
-                               $t_sub->setVar('cell_arrow_blck', '');
-                       }
-                       $this->tree[$this->tree[$cnt]['father_node']]['layer_content'] .= $t_sub->parse('sub_menu_cell_blck', 'sub_menu_cell');
-               }
-       }       // end of the "for" cycle scanning all nodes
-
-       $foobar = $this->_firstLevelCnt[$menu_name] * $this->abscissaStep;
-       $t->setVar('menuwidth', $foobar);
-       $t->setVar(array(
-               'layer_label'   => $menu_name,
-               'menubody'      => $this->_firstLevelMenu[$menu_name]
-       ));
-       $this->_firstLevelMenu[$menu_name] = $t->parse('template_blck', 'template');
-
-       $this->_updateFooter($menu_name);
-
-       return $this->_firstLevelMenu[$menu_name];
-}
-
-/**
-* Method to preparare a vertical menu.
-*
-* This method processes items of a menu to prepare the corresponding
-* vertical menu code updating many variables; it returns the code
-* of the corresponding _firstLevelMenu
-*
-* @access public
-* @param string $menu_name the name of the menu whose items have to be processed
-* @return string
-*/
-function newVerticalMenu(
-       $menu_name = '' // non consistent default...
-       )
-{
-       if (!isset($this->_firstItem[$menu_name]) || !isset($this->_lastItem[$menu_name])) {
-               $this->error("newVerticalMenu: the first/last item of the menu '$menu_name' is not defined; please check if you have parsed its menu data.");
-               return 0;
-       }
-
-       $this->parseCommon($menu_name);
-
-       $t = new Template_PHPLIB();
-       $t->setFile('tplfile', $this->verticalMenuTpl);
-       $t->setBlock('tplfile', 'template', 'template_blck');
-       $t->setBlock('template', 'vertical_menu_box', 'vertical_menu_box_blck');
-       $t->setVar('vertical_menu_box_blck', '');
-       $t->setBlock('vertical_menu_box', 'vertical_menu_cell', 'vertical_menu_cell_blck');
-       $t->setVar('vertical_menu_cell_blck', '');
-       $t->setBlock('vertical_menu_cell', 'cell_icon', 'cell_icon_blck');
-       $t->setVar('cell_icon_blck', '');
-       $t->setBlock('vertical_menu_cell', 'cell_arrow', 'cell_arrow_blck');
-       $t->setVar('cell_arrow_blck', '');
-       $t->setBlock('vertical_menu_box', 'separator', 'separator_blck');
-       $t->setVar('separator_blck', '');
-
-       $t_sub = new Template_PHPLIB();
-       $t_sub->setFile('tplfile', $this->subMenuTpl);
-       $t_sub->setBlock('tplfile', 'sub_menu_cell', 'sub_menu_cell_blck');
-       $t_sub->setVar('sub_menu_cell_blck', '');
-       $t_sub->setBlock('sub_menu_cell', 'cell_icon', 'cell_icon_blck');
-       $t_sub->setVar('cell_icon_blck', '');
-       $t_sub->setBlock('sub_menu_cell', 'cell_arrow', 'cell_arrow_blck');
-       $t_sub->setVar('cell_arrow_blck', '');
-       $t_sub->setBlock('tplfile', 'separator', 'separator_blck');
-       $t_sub->setVar('separator_blck', '');
-
-       $this->_firstLevelMenu[$menu_name] = '';
-
-       $this->moveLayers .= "\tvar " . $menu_name . "TOP = getOffsetTop('" . $menu_name . "');\n";
-       $this->moveLayers .= "\tvar " . $menu_name . "LEFT = getOffsetLeft('" . $menu_name . "');\n";
-       $this->moveLayers .= "\tvar " . $menu_name . "WIDTH = getOffsetWidth('" . $menu_name . "');\n";
-
-       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the new menu
-               if ($this->tree[$cnt]['not_a_leaf']) {
-                       // geometrical parameters are assigned to the new layer, related to the above mentioned children
-                       if ($this->tree[$cnt]['child_of_root_node']) {
-                               $this->moveLayers .= "\tsetLeft('" . $this->tree[$cnt]['layer_label'] . "', " . $menu_name . "LEFT + " . $menu_name . "WIDTH - menuRightShift);\n";
-                       }
-               }
-
-               if ($this->tree[$cnt]['child_of_root_node']) {
-                       if ($this->tree[$cnt]['text'] == '---') {
-                               $this->_firstLevelMenu[$menu_name] .= $t->parse('separator_blck', 'separator');
-                               continue;
-                       }
-                       if ($this->tree[$cnt]['not_a_leaf']) {
-                               $this->tree[$cnt]['onmouseover'] = ' onmouseover="moveLayerX(' . "'" . $this->tree[$cnt]['layer_label'] . "') ; moveLayerY('" . $this->tree[$cnt]['layer_label'] . "') ; LMPopUp('" . $this->tree[$cnt]['layer_label'] . "'" . ', false);"';
-                       } else {
-                               $this->tree[$cnt]['onmouseover'] = ' onmouseover="shutdown();"';
-                       }
-                       $t->setVar(array(
-                               'imgwww'        => $this->imgwww,
-                               'transparent'   => $this->transparentIcon,
-                               'href'          => $this->tree[$cnt]['parsed_href'],
-                               'refid'         => 'ref' . $this->tree[$cnt]['layer_label'],
-                               'onmouseover'   => $this->tree[$cnt]['onmouseover'],
-                               'title'         => $this->tree[$cnt]['parsed_title'],
-                               'target'        => $this->tree[$cnt]['parsed_target'],
-                               'text'          => $this->tree[$cnt]['text'],
-                               'arrowsrc'      => $this->forwardArrowImg['src'],
-                               'arrowwidth'    => $this->forwardArrowImg['width'],
-                               'arrowheight'   => $this->forwardArrowImg['height']
-                       ));
-                       if ($this->_hasIcons[$menu_name]) {
-                               $t->setVar(array(
-                                       'iconsrc'       => $this->tree[$cnt]['iconsrc'],
-                                       'iconwidth'     => $this->tree[$cnt]['iconwidth'],
-                                       'iconheight'    => $this->tree[$cnt]['iconheight'],
-                                       'iconalt'       => $this->tree[$cnt]['iconalt']
-                               ));
-                               $t->parse('cell_icon_blck', 'cell_icon');
-                       } else {
-                               $t->setVar('cell_icon_blck', '');
-                       }
-                       if ($this->tree[$cnt]['not_a_leaf']) {
-                               $t->parse('cell_arrow_blck', 'cell_arrow');
-                       } else {
-                               $t->setVar('cell_arrow_blck', '');
-                       }
-                       $this->_firstLevelMenu[$menu_name] .= $t->parse('vertical_menu_cell_blck', 'vertical_menu_cell');
-               } else {
-                       if ($this->tree[$cnt]['text'] == '---') {
-                               $this->tree[$this->tree[$cnt]['father_node']]['layer_content'] .= $t_sub->parse('separator_blck', 'separator');
-                               continue;
-                       }
-                       if ($this->tree[$cnt]['not_a_leaf']) {
-                               $this->tree[$cnt]['onmouseover'] = ' onmouseover="moveLayerX(' . "'" . $this->tree[$cnt]['layer_label'] . "') ; moveLayerY('" . $this->tree[$cnt]['layer_label'] . "') ; LMPopUp('" . $this->tree[$cnt]['layer_label'] . "'" . ', false);"';
-                       } else {
-                               $this->tree[$cnt]['onmouseover'] = ' onmouseover="LMPopUp(' . "'" . $this->tree[$this->tree[$cnt]['father_node']]['layer_label'] . "'" . ', true);"';
-                       }
-                       $t_sub->setVar(array(
-                               'imgwww'        => $this->imgwww,
-                               'transparent'   => $this->transparentIcon,
-                               'href'          => $this->tree[$cnt]['parsed_href'],
-                               'refid'         => 'ref' . $this->tree[$cnt]['layer_label'],
-                               'onmouseover'   => $this->tree[$cnt]['onmouseover'],
-                               'title'         => $this->tree[$cnt]['parsed_title'],
-                               'target'        => $this->tree[$cnt]['parsed_target'],
-                               'text'          => $this->tree[$cnt]['text'],
-                               'arrowsrc'      => $this->forwardArrowImg['src'],
-                               'arrowwidth'    => $this->forwardArrowImg['width'],
-                               'arrowheight'   => $this->forwardArrowImg['height']
-                       ));
-                       if ($this->_hasIcons[$this->tree[$cnt]['father_node']]) {
-                               $t_sub->setVar(array(
-                                       'iconsrc'       => $this->tree[$cnt]['iconsrc'],
-                                       'iconwidth'     => $this->tree[$cnt]['iconwidth'],
-                                       'iconheight'    => $this->tree[$cnt]['iconheight'],
-                                       'iconalt'       => $this->tree[$cnt]['iconalt']
-                               ));
-                               $t_sub->parse('cell_icon_blck', 'cell_icon');
-                       } else {
-                               $t_sub->setVar('cell_icon_blck', '');
-                       }
-                       if ($this->tree[$cnt]['not_a_leaf']) {
-                               $t_sub->parse('cell_arrow_blck', 'cell_arrow');
-                       } else {
-                               $t_sub->setVar('cell_arrow_blck', '');
-                       }
-                       $this->tree[$this->tree[$cnt]['father_node']]['layer_content'] .= $t_sub->parse('sub_menu_cell_blck', 'sub_menu_cell');
-               }
-       }       // end of the "for" cycle scanning all nodes
-
-       $t->setVar(array(
-               'menu_name'                     => $menu_name,
-               'vertical_menu_cell_blck'       => $this->_firstLevelMenu[$menu_name],
-               'separator_blck'                => ''
-       ));
-       $this->_firstLevelMenu[$menu_name] = $t->parse('vertical_menu_box_blck', 'vertical_menu_box');
-       $t->setVar('abscissaStep', $this->abscissaStep);
-       $t->setVar(array(
-               'layer_label'                   => $menu_name,
-               'vertical_menu_box_blck'        => $this->_firstLevelMenu[$menu_name]
-       ));
-       $this->_firstLevelMenu[$menu_name] = $t->parse('template_blck', 'template');
-
-       $this->_updateFooter($menu_name);
-
-       return $this->_firstLevelMenu[$menu_name];
-}
-
-/**
-* Method to prepare the header.
-*
-* This method obtains the header using collected informations
-* and the suited JavaScript template; it returns the code of the header
-*
-* @access public
-* @return string
-*/
-function makeHeader()
-{
-       $t = new Template_PHPLIB();
-       $this->listl = 'listl = [' . substr($this->listl, 1) . '];';
-       $this->father_keys = 'father_keys = [' . substr($this->father_keys, 1) . '];';
-       $this->father_vals = 'father_vals = [' . substr($this->father_vals, 1) . '];';
-       $t->setFile('tplfile', $this->libjsdir . 'layersmenu-header.ijs');
-       $t->setVar(array(
-               'packageName'   => $this->_packageName,
-               'version'       => $this->version,
-               'copyright'     => $this->copyright,
-               'author'        => $this->author,
-               'menuTopShift'  => $this->menuTopShift,
-               'menuRightShift'=> $this->menuRightShift,
-               'menuLeftShift' => $this->menuLeftShift,
-               'thresholdY'    => $this->thresholdY,
-               'abscissaStep'  => $this->abscissaStep,
-               'listl'         => $this->listl,
-               'nodesCount'    => $this->_nodesCount,
-               'father_keys'   => $this->father_keys,
-               'father_vals'   => $this->father_vals,
-               'moveLayers'    => $this->moveLayers
-       ));
-       $this->header = $t->parse('out', 'tplfile');
-       $this->_headerHasBeenMade = true;
-       return $this->header;
-}
-
-/**
-* Method that returns the code of the header
-* @access public
-* @return string
-*/
-function getHeader()
-{
-       if (!$this->_headerHasBeenMade) {
-               $this->makeHeader();
-       }
-       return $this->header;
-}
-
-/**
-* Method that prints the code of the header
-* @access public
-* @return void
-*/
-function printHeader()
-{
-       print $this->getHeader();
-}
-
-/**
-* Method that returns the code of the requested _firstLevelMenu
-* @access public
-* @param string $menu_name the name of the menu whose _firstLevelMenu
-*   has to be returned
-* @return string
-*/
-function getMenu($menu_name)
-{
-       return $this->_firstLevelMenu[$menu_name];
-}
-
-/**
-* Method that prints the code of the requested _firstLevelMenu
-* @access public
-* @param string $menu_name the name of the menu whose _firstLevelMenu
-*   has to be printed
-* @return void
-*/
-function printMenu($menu_name)
-{
-       print $this->_firstLevelMenu[$menu_name];
-}
-
-/**
-* Method to prepare the footer.
-*
-* This method obtains the footer using collected informations
-* and the suited JavaScript template; it returns the code of the footer
-*
-* @access public
-* @return string
-*/
-function makeFooter()
-{
-       $t = new Template_PHPLIB();
-       $t->setFile('tplfile', $this->libjsdir . 'layersmenu-footer.ijs');
-       $t->setVar(array(
-               'packageName'   => $this->_packageName,
-               'version'       => $this->version,
-               'copyright'     => $this->copyright,
-               'author'        => $this->author,
-               'footer'        => $this->footer
-               
-       ));
-       $this->footer = $t->parse('out', 'tplfile');
-       $this->_footerHasBeenMade = true;
-       return $this->footer;
-}
-
-/**
-* Method that returns the code of the footer
-* @access public
-* @return string
-*/
-function getFooter()
-{
-       if (!$this->_footerHasBeenMade) {
-               $this->makeFooter();
-       }
-       return $this->footer;
-}
-
-/**
-* Method that prints the code of the footer
-* @access public
-* @return void
-*/
-function printFooter()
-{
-       print $this->getFooter();
-}
-
-} /* END OF CLASS */
-
-?>
diff --git a/gosa-core/include/layer-menu/lib/phptreemenu.inc.php b/gosa-core/include/layer-menu/lib/phptreemenu.inc.php
deleted file mode 100644 (file)
index fb43d35..0000000
+++ /dev/null
@@ -1,448 +0,0 @@
-<?php
-// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
-
-/**
-* This file contains the code of the PHPTreeMenu class.
-* @package PHPLayersMenu
-*/
-
-/**
-* This is the PHPTreeMenu class of the PHP Layers Menu library.
-*
-* This class depends on the LayersMenuCommon class.  It provides "server-side" (PHP-based) tree menus, that to do not require JavaScript to work.
-*
-* @version 3.2.0-rc
-* @package PHPLayersMenu
-*/
-class PHPTreeMenu extends LayersMenuCommon
-{
-
-/**
-* The character used for the PHP Tree Menu in the query string to separate items ids
-* @access private
-* @var string
-*/
-var $phpTreeMenuSeparator;
-/**
-* The default value of the expansion string for the PHP Tree Menu
-* @access private
-* @var string
-*/
-var $phpTreeMenuDefaultExpansion;
-/**
-* Type of images used for the Tree Menu
-* @access private
-* @var string
-*/
-var $phpTreeMenuImagesType;
-/**
-* Prefix for filenames of images of a theme
-* @access private
-* @var string
-*/
-var $phpTreeMenuTheme;
-/**
-* An array where we store the PHP Tree Menu code for each menu
-* @access private
-* @var array
-*/
-var $_phpTreeMenu;
-
-/**
-* The constructor method; it initializates some variables
-* @return void
-*/
-function PHPTreeMenu()
-{
-       $this->LayersMenuCommon();
-
-       $this->phpTreeMenuSeparator = '|';
-       $this->phpTreeMenuDefaultExpansion = '';
-       $this->phpTreeMenuImagesType = 'png';
-       $this->phpTreeMenuTheme = '';
-       $this->_phpTreeMenu = array();
-}
-
-/**
-* The method to set the dirroot directory
-* @access public
-* @return boolean
-*/
-function setDirroot($dirroot)
-{
-       return $this->setDirrootCommon($dirroot);
-}
-
-/**
-* The method to set the value of separator for the Tree Menu query string
-* @access public
-* @return void
-*/
-function setPHPTreeMenuSeparator($phpTreeMenuSeparator)
-{
-       $this->phpTreeMenuSeparator = $phpTreeMenuSeparator;
-}
-
-/**
-* The method to set the default value of the expansion string for the PHP Tree Menu
-* @access public
-* @return void
-*/
-function setPHPTreeMenuDefaultExpansion($phpTreeMenuDefaultExpansion)
-{
-       $this->phpTreeMenuDefaultExpansion = $phpTreeMenuDefaultExpansion;
-}
-
-/**
-* The method to set the type of images used for the Tree Menu
-* @access public
-* @return void
-*/
-function setPHPTreeMenuImagesType($phpTreeMenuImagesType)
-{
-       $this->phpTreeMenuImagesType = $phpTreeMenuImagesType;
-}
-
-/**
-* The method to set the prefix for filenames of images of a theme
-* @access public
-* @return void
-*/
-function setPHPTreeMenuTheme($phpTreeMenuTheme)
-{
-       $this->phpTreeMenuTheme = $phpTreeMenuTheme;
-}
-
-/**
-* Method to prepare a new PHP Tree Menu.
-*
-* This method processes items of a menu and parameters submitted
-* through GET (i.e. nodes to be expanded) to prepare and return
-* the corresponding Tree Menu code.
-*
-* @access public
-* @param string $menu_name the name of the menu whose items have to be processed
-* @return string
-*/
-function newPHPTreeMenu(
-       $menu_name = '' // non consistent default...
-       )
-{
-       $protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';
-       $this_host = (isset($_SERVER['HTTP_HOST'])) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
-       if (isset($_SERVER['SCRIPT_NAME'])) {
-               $me = $_SERVER['SCRIPT_NAME'];
-       } elseif (isset($_SERVER['REQUEST_URI'])) {
-               $me = $_SERVER['REQUEST_URI'];
-       } elseif (isset($_SERVER['PHP_SELF'])) {
-               $me = $_SERVER['PHP_SELF'];
-       } elseif (isset($_SERVER['PATH_INFO'])) {
-               $me = $_SERVER['PATH_INFO'];
-       }
-       $url = $protocol . $this_host . $me;
-       $query = '';
-       reset($_GET);
-       while (list($key, $value) = each($_GET)) {
-               if ($key != 'p' && $value != '') {
-                       $query .= '&amp;' . $key . '=' . $value;
-               }
-       }
-       if ($query != '') {
-               $query = '?' . substr($query, 5) . '&amp;p=';
-       } else {
-               $query = '?p=';
-       }
-       $p = (isset($_GET['p'])) ? $_GET['p'] : $this->phpTreeMenuDefaultExpansion;
-
-/* ********************************************************* */
-/* Based on TreeMenu 1.1 by Bjorge Dijkstra (bjorge@gmx.net) */
-/* ********************************************************* */
-       $this->_phpTreeMenu[$menu_name] = '';
-
-       $img_collapse                   = $this->imgwww . $this->phpTreeMenuTheme . 'tree_collapse.' . $this->phpTreeMenuImagesType;
-       $alt_collapse                   = '--';
-       $img_collapse_corner            = $this->imgwww . $this->phpTreeMenuTheme . 'tree_collapse_corner.' . $this->phpTreeMenuImagesType;
-       $alt_collapse_corner            = '--';
-       $img_collapse_corner_first      = $this->imgwww . $this->phpTreeMenuTheme . 'tree_collapse_corner_first.' . $this->phpTreeMenuImagesType;
-       $alt_collapse_corner_first      = '--';
-       $img_collapse_first             = $this->imgwww . $this->phpTreeMenuTheme . 'tree_collapse_first.' . $this->phpTreeMenuImagesType;
-       $alt_collapse_first             = '--';
-       $img_corner                     = $this->imgwww . $this->phpTreeMenuTheme . 'tree_corner.' . $this->phpTreeMenuImagesType;
-       $alt_corner                     = '`-';
-       $img_expand                     = $this->imgwww . $this->phpTreeMenuTheme . 'tree_expand.' . $this->phpTreeMenuImagesType;
-       $alt_expand                     = '+-';
-       $img_expand_corner              = $this->imgwww . $this->phpTreeMenuTheme . 'tree_expand_corner.' . $this->phpTreeMenuImagesType;
-       $alt_expand_corner              = '+-';
-       $img_expand_corner_first        = $this->imgwww . $this->phpTreeMenuTheme . 'tree_expand_corner_first.' . $this->phpTreeMenuImagesType;
-       $alt_expand_corner_first        = '+-';
-       $img_expand_first               = $this->imgwww . $this->phpTreeMenuTheme . 'tree_expand_first.' . $this->phpTreeMenuImagesType;
-       $alt_expand_first               = '+-';
-       $img_folder_closed              = $this->imgwww . $this->phpTreeMenuTheme . 'tree_folder_closed.' . $this->phpTreeMenuImagesType;
-       $alt_folder_closed              = '->';
-       $img_folder_open                = $this->imgwww . $this->phpTreeMenuTheme . 'tree_folder_open.' . $this->phpTreeMenuImagesType;
-       $alt_folder_open                = '->';
-       $img_leaf                       = $this->imgwww . $this->phpTreeMenuTheme . 'tree_leaf.' . $this->phpTreeMenuImagesType;
-       $alt_leaf                       = '->';
-       $img_space                      = $this->imgwww . $this->phpTreeMenuTheme . 'tree_space.' . $this->phpTreeMenuImagesType;
-       $alt_space                      = '  ';
-       $img_split                      = $this->imgwww . $this->phpTreeMenuTheme . 'tree_split.' . $this->phpTreeMenuImagesType;
-       $alt_split                      = '|-';
-       $img_split_first                = $this->imgwww . $this->phpTreeMenuTheme . 'tree_split_first.' . $this->phpTreeMenuImagesType;
-       $alt_split_first                = '|-';
-       $img_vertline                   = $this->imgwww . $this->phpTreeMenuTheme . 'tree_vertline.' . $this->phpTreeMenuImagesType;
-       $alt_vertline                   = '| ';
-
-       for ($i=$this->_firstItem[$menu_name]; $i<=$this->_lastItem[$menu_name]; $i++) {
-               $expand[$i] = 0;
-               $visible[$i] = 0;
-               $this->tree[$i]['last_item'] = 0;
-       }
-       for ($i=0; $i<=$this->_maxLevel[$menu_name]; $i++) {
-               $levels[$i] = 0;
-       }
-
-       // Get numbers of nodes to be expanded
-       if ($p != '') {
-               $explevels = explode($this->phpTreeMenuSeparator, $p);
-               $explevels_count = count($explevels);
-               for ($i=0; $i<$explevels_count; $i++) {
-                       $expand[$explevels[$i]] = 1;
-               }
-       }
-
-       // Find last nodes of subtrees
-       $last_level = $this->_maxLevel[$menu_name];
-       for ($i=$this->_lastItem[$menu_name]; $i>=$this->_firstItem[$menu_name]; $i--) {
-               if ($this->tree[$i]['level'] < $last_level) {
-                       for ($j=$this->tree[$i]['level']+1; $j<=$this->_maxLevel[$menu_name]; $j++) {
-                               $levels[$j] = 0;
-                       }
-               }
-               if ($levels[$this->tree[$i]['level']] == 0) {
-                       $levels[$this->tree[$i]['level']] = 1;
-                       $this->tree[$i]['last_item'] = 1;
-               } else {
-                       $this->tree[$i]['last_item'] = 0;
-               }
-               $last_level = $this->tree[$i]['level'];
-       }
-
-       // Determine visible nodes
-       // all root nodes are always visible
-       for ($i=$this->_firstItem[$menu_name]; $i<=$this->_lastItem[$menu_name]; $i++) {
-               if ($this->tree[$i]['level'] == 1) {
-                       $visible[$i] = 1;
-               }
-       }
-       if (isset($explevels)) {
-               for ($i=0; $i<$explevels_count; $i++) {
-                       $n = $explevels[$i];
-                       if ($n >= $this->_firstItem[$menu_name] && $n <= $this->_lastItem[$menu_name] && $visible[$n] == 1 && $expand[$n] == 1) {
-                               $j = $n + 1;
-                               while ($j<=$this->_lastItem[$menu_name] && $this->tree[$j]['level']>$this->tree[$n]['level']) {
-                                       if ($this->tree[$j]['level'] == $this->tree[$n]['level']+1) {
-                                               $visible[$j] = 1;
-                                       }
-                                       $j++;
-                               }
-                       }
-               }
-       }
-
-       // Output nicely formatted tree
-       for ($i=0; $i<$this->_maxLevel[$menu_name]; $i++) {
-               $levels[$i] = 1;
-       }
-       $max_visible_level = 0;
-       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {
-               if ($visible[$cnt]) {
-                       $max_visible_level = max($max_visible_level, $this->tree[$cnt]['level']);
-               }
-       }
-       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {
-               if ($this->tree[$cnt]['text'] == '---') {
-                       continue;       // separators are significant only for layers-based menus
-               }
-
-               if (isset($this->tree[$cnt]['selected']) && $this->tree[$cnt]['selected']) {
-                       $linkstyle = 'phplmselected';
-               } else {
-                       $linkstyle = 'phplm';
-               }
-
-               if ($visible[$cnt]) {
-                       $this->_phpTreeMenu[$menu_name] .= '<div class="treemenudiv">' . "\n"; 
-
-                       // vertical lines from higher levels
-                       for ($i=0; $i<$this->tree[$cnt]['level']-1; $i++) {
-                               if ($levels[$i] == 1) {
-                                       $img = $img_vertline;
-                                       $alt = $alt_vertline;
-                               } else {
-                                       $img = $img_space;
-                                       $alt = $alt_space;
-                               }
-                               $this->_phpTreeMenu[$menu_name] .= '<img align="top" border="0" class="imgs" src="' . $img . '" alt="' . $alt . '" />';
-                       }
-
-                       $not_a_leaf = $cnt<$this->_lastItem[$menu_name] && $this->tree[$cnt+1]['level']>$this->tree[$cnt]['level'];
-
-                       if ($not_a_leaf) {
-                               // Create expand/collapse parameters
-                               $params = '';
-                               for ($i=$this->_firstItem[$menu_name]; $i<=$this->_lastItem[$menu_name]; $i++) {
-                                       if ($expand[$i] == 1 && $cnt!= $i || ($expand[$i] == 0 && $cnt == $i)) {
-                                               $params .= $this->phpTreeMenuSeparator . $i;
-                                       }
-                               }
-                               if ($params != '') {
-                                       $params = substr($params, 1);
-                               }
-                       }
-
-                       if ($this->tree[$cnt]['last_item'] == 1) {
-                       // corner at end of subtree or t-split
-                               if ($not_a_leaf) {
-                                       if ($expand[$cnt] == 0) {
-                                               if ($cnt == $this->_firstItem[$menu_name]) {
-                                                       $img = $img_expand_corner_first;
-                                                       $alt = $alt_expand_corner_first;
-                                               } else {
-                                                       $img = $img_expand_corner;
-                                                       $alt = $alt_expand_corner;
-                                               }
-                                       } else {
-                                               if ($cnt == $this->_firstItem[$menu_name]) {
-                                                       $img = $img_collapse_corner_first;
-                                                       $alt = $alt_collapse_corner_first;
-                                               } else {
-                                                       $img = $img_collapse_corner;
-                                                       $alt = $alt_collapse_corner;
-                                               }
-                                       }
-                                       $this->_phpTreeMenu[$menu_name] .= '<a name="' . $cnt . '" class="' . $linkstyle . '" href="' . $url . $query . $params . '#' . $cnt . '"><img align="top" border="0" class="imgs" src="' . $img . '" alt="' . $alt . '" /></a>';
-                               } else {
-                                       $this->_phpTreeMenu[$menu_name] .= '<img align="top" border="0" class="imgs" src="' . $img_corner . '" alt="' . $alt_corner . '" />';
-                               }
-                               $levels[$this->tree[$cnt]['level']-1] = 0;
-                       } else {
-                               if ($not_a_leaf) {
-                                       if ($expand[$cnt] == 0) {
-                                               if ($cnt == $this->_firstItem[$menu_name]) {
-                                                       $img = $img_expand_first;
-                                                       $alt = $alt_expand_first;
-                                               } else {
-                                                       $img = $img_expand;
-                                                       $alt = $alt_expand;
-                                               }
-                                       } else {
-                                               if ($cnt == $this->_firstItem[$menu_name]) {
-                                                       $img = $img_collapse_first;
-                                                       $alt = $alt_collapse_first;
-                                               } else {
-                                                       $img = $img_collapse;
-                                                       $alt = $alt_collapse;
-                                               }
-                                       }
-                                       $this->_phpTreeMenu[$menu_name] .= '<a name="' . $cnt . '" class="' . $linkstyle . '" href="' . $url . $query . $params . '#' . $cnt . '"><img align="top" border="0" class="imgs" src="' . $img . '" alt="' . $alt . '" /></a>';
-                               } else {
-                                       if ($cnt == $this->_firstItem[$menu_name]) {
-                                               $img = $img_split_first;
-                                               $alt = $alt_split_first;
-                                       } else {
-                                               $img = $img_split;
-                                               $alt = $alt_split;
-                                       }
-                                       $this->_phpTreeMenu[$menu_name] .= '<img align="top" border="0" class="imgs" src="' . $img . '" alt="' . $alt . '" />';
-                               }
-                               $levels[$this->tree[$cnt]['level']-1] = 1;
-                       }
-
-                       if ($this->tree[$cnt]['parsed_href'] == '' || $this->tree[$cnt]['parsed_href'] == '#') {
-                               $a_href_open_img = '';
-                               $a_href_close_img = '';
-                               $a_href_open = '<a class="phplmnormal">';
-                               $a_href_close = '</a>';
-                       } else {
-                               $a_href_open_img = '<a href="' . $this->tree[$cnt]['parsed_href'] . '"' . $this->tree[$cnt]['parsed_title'] . $this->tree[$cnt]['parsed_target'] . '>';
-                               $a_href_close_img = '</a>';
-                               $a_href_open = '<a href="' . $this->tree[$cnt]['parsed_href'] . '"' . $this->tree[$cnt]['parsed_title'] . $this->tree[$cnt]['parsed_target'] . ' class="' . $linkstyle . '">';
-                               $a_href_close = '</a>';
-                       }
-
-                       if ($not_a_leaf) {
-                               if ($expand[$cnt] == 1) {
-                                       $img = $img_folder_open;
-                                       $alt = $alt_folder_open;
-                               } else {
-                                       $img = $img_folder_closed;
-                                       $alt = $alt_folder_closed;
-                               }
-                               $this->_phpTreeMenu[$menu_name] .= $a_href_open_img . '<img align="top" border="0" class="imgs" src="' . $img . '" alt="' . $alt . '" />' . $a_href_close_img;
-                       } else {
-                               if ($this->tree[$cnt]['parsed_icon'] != '') {
-                                       $this->_phpTreeMenu[$menu_name] .= $a_href_open_img . '<img align="top" border="0" src="' . $this->tree[$cnt]['parsed_icon'] . '" width="' . $this->tree[$cnt]['iconwidth'] . '" height="' . $this->tree[$cnt]['iconheight'] . '" alt="' . $alt_leaf . '" />' . $a_href_close_img;
-                               } else {
-                                       $this->_phpTreeMenu[$menu_name] .= $a_href_open_img . '<img align="top" border="0" class="imgs" src="' . $img_leaf . '" alt="' . $alt_leaf . '" />' . $a_href_close_img;
-                               }
-                       }
-
-                       // output item text
-                       $foobar = $max_visible_level - $this->tree[$cnt]['level'] + 1;
-                       if ($foobar > 1) {
-                               $colspan = ' colspan="' . $foobar . '"';
-                       } else {
-                               $colspan = '';
-                       }
-                       $this->_phpTreeMenu[$menu_name] .= '&nbsp;' . $a_href_open . $this->tree[$cnt]['parsed_text'] . $a_href_close . "\n";
-                       $this->_phpTreeMenu[$menu_name] .= '</div>' . "\n";
-               }
-       }
-/* ********************************************************* */
-
-/*
-       $this->_phpTreeMenu[$menu_name] =
-       '<div class="phplmnormal">' . "\n" .
-       $this->_phpTreeMenu[$menu_name] .
-       '</div>' . "\n";
-*/
-       // Some (old) browsers do not support the "white-space: nowrap;" CSS property...
-       $this->_phpTreeMenu[$menu_name] =
-       '<table cellspacing="0" cellpadding="0" border="0">' . "\n" .
-       '<tr>' . "\n" .
-       '<td class="phplmnormal" nowrap="nowrap">' . "\n" .
-       $this->_phpTreeMenu[$menu_name] .
-       '</td>' . "\n" .
-       '</tr>' . "\n" .
-       '</table>' . "\n";
-
-       return $this->_phpTreeMenu[$menu_name];
-}
-
-/**
-* Method that returns the code of the requested PHP Tree Menu
-* @access public
-* @param string $menu_name the name of the menu whose PHP Tree Menu code
-*   has to be returned
-* @return string
-*/
-function getPHPTreeMenu($menu_name)
-{
-       return $this->_phpTreeMenu[$menu_name];
-}
-
-/**
-* Method that prints the code of the requested PHP Tree Menu
-* @access public
-* @param string $menu_name the name of the menu whose PHP Tree Menu code
-*   has to be printed
-* @return void
-*/
-function printPHPTreeMenu($menu_name)
-{
-       print $this->_phpTreeMenu[$menu_name];
-}
-
-} /* END OF CLASS */
-
-?>
diff --git a/gosa-core/include/layer-menu/lib/plainmenu.inc.php b/gosa-core/include/layer-menu/lib/plainmenu.inc.php
deleted file mode 100644 (file)
index 0580f50..0000000
+++ /dev/null
@@ -1,281 +0,0 @@
-<?php
-// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
-
-/**
-* This file contains the code of the PlainMenu class.
-* @package PHPLayersMenu
-*/
-
-/**
-* This is the PlainMenu class of the PHP Layers Menu library.
-*
-* This class depends on the LayersMenuCommon class and on the PEAR conforming version of the PHPLib Template class, i.e. on HTML_Template_PHPLIB.  It provides plain menus, that to do not require JavaScript to work.
-*
-* @version 3.2.0-rc
-* @package PHPLayersMenu
-*/
-class PlainMenu extends LayersMenuCommon
-{
-
-/**
-* The template to be used for the Plain Menu
-*/
-var $plainMenuTpl;
-/**
-* An array where we store the Plain Menu code for each menu
-* @access private
-* @var array
-*/
-var $_plainMenu;
-
-/**
-* The template to be used for the Horizontal Plain Menu
-*/
-var $horizontalPlainMenuTpl;
-/**
-* An array where we store the Horizontal Plain Menu code for each menu
-* @access private
-* @var array
-*/
-var $_horizontalPlainMenu;
-
-/**
-* The constructor method; it initializates some variables
-* @return void
-*/
-function PlainMenu()
-{
-       $this->LayersMenuCommon();
-
-       $this->plainMenuTpl = $this->tpldir . 'layersmenu-plain_menu.ihtml';
-       $this->_plainMenu = array();
-
-       $this->horizontalPlainMenuTpl = $this->tpldir . 'layersmenu-horizontal_plain_menu.ihtml';
-       $this->_horizontalPlainMenu = array();
-}
-
-/**
-* The method to set the dirroot directory
-* @access public
-* @return boolean
-*/
-function setDirroot($dirroot)
-{
-       $oldtpldir = $this->tpldir;
-       if ($foobar = $this->setDirrootCommon($dirroot)) {
-               $this->updateTpldir($oldtpldir);
-       }
-       return $foobar;
-}
-
-/**
-* The method to set the tpldir directory
-* @access public
-* @return boolean
-*/
-function setTpldir($tpldir)
-{
-       $oldtpldir = $this->tpldir;
-       if ($foobar = $this->setTpldirCommon($tpldir)) {
-               $this->updateTpldir($oldtpldir);
-       }
-       return $foobar;
-}
-
-/**
-* The method to update the templates directory path to the new tpldir
-* @access private
-* @return void
-*/
-function updateTpldir($oldtpldir)
-{
-       $oldlength = strlen($oldtpldir);
-       $foobar = strpos($this->plainMenuTpl, $oldtpldir);
-       if (!($foobar === false || $foobar != 0)) {
-               $this->plainMenuTpl = $this->tpldir . substr($this->plainMenuTpl, $oldlength);
-       }
-       $foobar = strpos($this->horizontalPlainMenuTpl, $oldtpldir);
-       if (!($foobar === false || $foobar != 0)) {
-               $this->horizontalPlainMenuTpl = $this->tpldir . substr($this->horizontalPlainMenuTpl, $oldlength);
-       }
-}
-
-/**
-* The method to set plainMenuTpl
-* @access public
-* @return boolean
-*/
-function setPlainMenuTpl($plainMenuTpl)
-{
-       if (str_replace('/', '', $plainMenuTpl) == $plainMenuTpl) {
-               $plainMenuTpl = $this->tpldir . $plainMenuTpl;
-       }
-       if (!file_exists($plainMenuTpl)) {
-               $this->error("setPlainMenuTpl: file $plainMenuTpl does not exist.");
-               return false;
-       }
-       $this->plainMenuTpl = $plainMenuTpl;
-       return true;
-}
-
-/**
-* Method to prepare a new Plain Menu.
-*
-* This method processes items of a menu to prepare and return
-* the corresponding Plain Menu code.
-*
-* @access public
-* @param string $menu_name the name of the menu whose items have to be processed
-* @return string
-*/
-function newPlainMenu(
-       $menu_name = '' // non consistent default...
-       )
-{
-       $plain_menu_blck = '';
-       $t = new Template_PHPLIB();
-       $t->setFile('tplfile', $this->plainMenuTpl);
-       $t->setBlock('tplfile', 'template', 'template_blck');
-       $t->setBlock('template', 'plain_menu_cell', 'plain_menu_cell_blck');
-       $t->setVar('plain_menu_cell_blck', '');
-       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {
-               if ($this->tree[$cnt]['text'] == '---') {
-                       continue;       // separators are significant only for layers-based menus
-               }
-               $nbsp = '';
-               for ($i=1; $i<$this->tree[$cnt]['level']; $i++) {
-                       $nbsp .= '&nbsp;&nbsp;&nbsp;';
-               }
-               $t->setVar(array(
-                       'nbsp'          => $nbsp,
-                       'href'          => $this->tree[$cnt]['parsed_href'],
-                       'title'         => $this->tree[$cnt]['parsed_title'],
-                       'target'        => $this->tree[$cnt]['parsed_target'],
-                       'text'          => $this->tree[$cnt]['parsed_text']
-               ));
-               $plain_menu_blck .= $t->parse('plain_menu_cell_blck', 'plain_menu_cell', false);
-       }
-       $t->setVar('plain_menu_cell_blck', $plain_menu_blck);
-       $this->_plainMenu[$menu_name] = $t->parse('template_blck', 'template');
-
-       return $this->_plainMenu[$menu_name];
-}
-
-/**
-* Method that returns the code of the requested Plain Menu
-* @access public
-* @param string $menu_name the name of the menu whose Plain Menu code
-*   has to be returned
-* @return string
-*/
-function getPlainMenu($menu_name)
-{
-       return $this->_plainMenu[$menu_name];
-}
-
-/**
-* Method that prints the code of the requested Plain Menu
-* @access public
-* @param string $menu_name the name of the menu whose Plain Menu code
-*   has to be printed
-* @return void
-*/
-function printPlainMenu($menu_name)
-{
-       print $this->_plainMenu[$menu_name];
-}
-
-/**
-* The method to set horizontalPlainMenuTpl
-* @access public
-* @return boolean
-*/
-function setHorizontalPlainMenuTpl($horizontalPlainMenuTpl)
-{
-       if (str_replace('/', '', $horizontalPlainMenuTpl) == $horizontalPlainMenuTpl) {
-               $horizontalPlainMenuTpl = $this->tpldir . $horizontalPlainMenuTpl;
-       }
-       if (!file_exists($horizontalPlainMenuTpl)) {
-               $this->error("setHorizontalPlainMenuTpl: file $horizontalPlainMenuTpl does not exist.");
-               return false;
-       }
-       $this->horizontalPlainMenuTpl = $horizontalPlainMenuTpl;
-       return true;
-}
-
-/**
-* Method to prepare a new Horizontal Plain Menu.
-*
-* This method processes items of a menu to prepare and return
-* the corresponding Horizontal Plain Menu code.
-*
-* @access public
-* @param string $menu_name the name of the menu whose items have to be processed
-* @return string
-*/
-function newHorizontalPlainMenu(
-       $menu_name = '' // non consistent default...
-       )
-{
-       $horizontal_plain_menu_blck = '';
-       $t = new Template_PHPLIB();
-       $t->setFile('tplfile', $this->horizontalPlainMenuTpl);
-       $t->setBlock('tplfile', 'template', 'template_blck');
-       $t->setBlock('template', 'horizontal_plain_menu_cell', 'horizontal_plain_menu_cell_blck');
-       $t->setVar('horizontal_plain_menu_cell_blck', '');
-       $t->setBlock('horizontal_plain_menu_cell', 'plain_menu_cell', 'plain_menu_cell_blck');  
-       $t->setVar('plain_menu_cell_blck', '');
-       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {
-               if ($this->tree[$cnt]['text'] == '---') {
-                       continue;       // separators are significant only for layers-based menus
-               }
-               if ($this->tree[$cnt]['level'] == 1 && $cnt > $this->_firstItem[$menu_name]) {
-                       $t->parse('horizontal_plain_menu_cell_blck', 'horizontal_plain_menu_cell', true);
-                       $t->setVar('plain_menu_cell_blck', '');
-               }
-               $nbsp = '';
-               for ($i=1; $i<$this->tree[$cnt]['level']; $i++) {
-                       $nbsp .= '&nbsp;&nbsp;&nbsp;';
-               }
-               $t->setVar(array(
-                       'nbsp'          => $nbsp,
-                       'href'          => $this->tree[$cnt]['parsed_href'],
-                       'title'         => $this->tree[$cnt]['parsed_title'],
-                       'target'        => $this->tree[$cnt]['parsed_target'],
-                       'text'          => $this->tree[$cnt]['parsed_text']
-               ));
-               $t->parse('plain_menu_cell_blck', 'plain_menu_cell', true);
-       }
-       $t->parse('horizontal_plain_menu_cell_blck', 'horizontal_plain_menu_cell', true);
-       $this->_horizontalPlainMenu[$menu_name] = $t->parse('template_blck', 'template');
-
-       return $this->_horizontalPlainMenu[$menu_name];
-}
-
-/**
-* Method that returns the code of the requested Horizontal Plain Menu
-* @access public
-* @param string $menu_name the name of the menu whose Horizontal Plain Menu code
-*   has to be returned
-* @return string
-*/
-function getHorizontalPlainMenu($menu_name)
-{
-       return $this->_horizontalPlainMenu[$menu_name];
-}
-
-/**
-* Method that prints the code of the requested Horizontal Plain Menu
-* @access public
-* @param string $menu_name the name of the menu whose Horizontal Plain Menu code
-*   has to be printed
-* @return void
-*/
-function printHorizontalPlainMenu($menu_name)
-{
-       print $this->_horizontalPlainMenu[$menu_name];
-}
-
-} /* END OF CLASS */
-
-?>
diff --git a/gosa-core/include/layer-menu/lib/treemenu.inc.php b/gosa-core/include/layer-menu/lib/treemenu.inc.php
deleted file mode 100644 (file)
index a15a5f8..0000000
+++ /dev/null
@@ -1,352 +0,0 @@
-<?php
-// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
-
-/**
-* This file contains the code of the TreeMenu class.
-* @package PHPLayersMenu
-*/
-
-/**
-* This is the TreeMenu class of the PHP Layers Menu library.
-*
-* This class depends on the LayersMenuCommon class and on the PEAR conforming version of the PHPLib Template class, i.e. on HTML_Template_PHPLIB
-*
-* @version 3.2.0-rc
-* @package PHPLayersMenu
-*/
-class TreeMenu extends LayersMenuCommon
-{
-
-/**
-* Type of images used for the Tree Menu
-* @access private
-* @var string
-*/
-var $treeMenuImagesType;
-/**
-* Prefix for filenames of images of a theme
-* @access private
-* @var string
-*/
-var $treeMenuTheme;
-/**
-* An array where we store the Tree Menu code for each menu
-* @access private
-* @var array
-*/
-var $_treeMenu;
-
-/**
-* The constructor method; it initializates the menu system
-* @return void
-*/
-function TreeMenu()
-{
-       $this->LayersMenuCommon();
-
-       $this->treeMenuImagesType = 'png';
-       $this->treeMenuTheme = '';
-       $this->_treeMenu = array();
-
-       $this->_nodesCount = 0;
-       $this->tree = array();
-       $this->_maxLevel = array();
-       $this->_firstLevelCnt = array();
-       $this->_firstItem = array();
-       $this->_lastItem = array();
-}
-
-/**
-* The method to set the dirroot directory
-* @access public
-* @return boolean
-*/
-function setDirroot($dirroot)
-{
-       return $this->setDirrootCommon($dirroot);
-}
-
-/**
-* The method to set the type of images used for the Tree Menu
-* @access public
-* @return void
-*/
-function setTreeMenuImagesType($treeMenuImagesType)
-{
-       $this->treeMenuImagesType = $treeMenuImagesType;
-}
-
-/**
-* The method to set the prefix for filenames of images of a theme
-* @access public
-* @return void
-*/
-function setTreeMenuTheme($treeMenuTheme)
-{
-       $this->treeMenuTheme = $treeMenuTheme;
-}
-
-/**
-* Method to prepare a new Tree Menu.
-*
-* This method processes items of a menu to prepare and return
-* the corresponding Tree Menu code.
-*
-* @access public
-* @param string $menu_name the name of the menu whose items have to be processed
-* @return string
-*/
-function newTreeMenu(
-       $menu_name = '' // non consistent default...
-       )
-{
-       if (!isset($this->_firstItem[$menu_name]) || !isset($this->_lastItem[$menu_name])) {
-               $this->error("newTreeMenu: the first/last item of the menu '$menu_name' is not defined; please check if you have parsed its menu data.");
-               return 0;
-       }
-
-       $this->_treeMenu[$menu_name] = '';
-
-       $img_collapse                   = $this->imgwww . $this->treeMenuTheme . 'tree_collapse.' . $this->treeMenuImagesType;
-       $alt_collapse                   = '--';
-       $img_collapse_corner            = $this->imgwww . $this->treeMenuTheme . 'tree_collapse_corner.' . $this->treeMenuImagesType;
-       $alt_collapse_corner            = '--';
-       $img_collapse_corner_first      = $this->imgwww . $this->treeMenuTheme . 'tree_collapse_corner_first.' . $this->treeMenuImagesType;
-       $alt_collapse_corner_first      = '--';
-       $img_collapse_first             = $this->imgwww . $this->treeMenuTheme . 'tree_collapse_first.' . $this->treeMenuImagesType;
-       $alt_collapse_first             = '--';
-       $img_corner                     = $this->imgwww . $this->treeMenuTheme . 'tree_corner.' . $this->treeMenuImagesType;
-       $alt_corner                     = '`-';
-       $img_expand                     = $this->imgwww . $this->treeMenuTheme . 'tree_expand.' . $this->treeMenuImagesType;
-       $alt_expand                     = '+-';
-       $img_expand_corner              = $this->imgwww . $this->treeMenuTheme . 'tree_expand_corner.' . $this->treeMenuImagesType;
-       $alt_expand_corner              = '+-';
-       $img_expand_corner_first        = $this->imgwww . $this->treeMenuTheme . 'tree_expand_corner_first.' . $this->treeMenuImagesType;
-       $alt_expand_corner_first        = '+-';
-       $img_expand_first               = $this->imgwww . $this->treeMenuTheme . 'tree_expand_first.' . $this->treeMenuImagesType;
-       $alt_expand_first               = '+-';
-       $img_folder_closed              = $this->imgwww . $this->treeMenuTheme . 'tree_folder_closed.' . $this->treeMenuImagesType;
-       $alt_folder_closed              = '->';
-       $img_folder_open                = $this->imgwww . $this->treeMenuTheme . 'tree_folder_open.' . $this->treeMenuImagesType;
-       $alt_folder_open                = '->';
-       $img_leaf                       = $this->imgwww . $this->treeMenuTheme . 'tree_leaf.' . $this->treeMenuImagesType;
-       $alt_leaf                       = '->';
-       $img_space                      = $this->imgwww . $this->treeMenuTheme . 'tree_space.' . $this->treeMenuImagesType;
-       $alt_space                      = '  ';
-       $img_split                      = $this->imgwww . $this->treeMenuTheme . 'tree_split.' . $this->treeMenuImagesType;
-       $alt_split                      = '|-';
-       $img_split_first                = $this->imgwww . $this->treeMenuTheme . 'tree_split_first.' . $this->treeMenuImagesType;
-       $alt_split_first                = '|-';
-       $img_vertline                   = $this->imgwww . $this->treeMenuTheme . 'tree_vertline.' . $this->treeMenuImagesType;
-       $alt_vertline                   = '| ';
-
-       for ($i=0; $i<=$this->_maxLevel[$menu_name]; $i++) {
-               $levels[$i] = 0;
-       }
-
-       // Find last nodes of subtrees
-       $last_level = $this->_maxLevel[$menu_name];
-       for ($i=$this->_lastItem[$menu_name]; $i>=$this->_firstItem[$menu_name]; $i--) {
-               if ($this->tree[$i]['level'] < $last_level) {
-                       for ($j=$this->tree[$i]['level']+1; $j<=$this->_maxLevel[$menu_name]; $j++) {
-                               $levels[$j] = 0;
-                       }
-               }
-               if ($levels[$this->tree[$i]['level']] == 0) {
-                       $levels[$this->tree[$i]['level']] = 1;
-                       $this->tree[$i]['last_item'] = 1;
-               } else {
-                       $this->tree[$i]['last_item'] = 0;
-               }
-               $last_level = $this->tree[$i]['level'];
-       }
-
-       $toggle = '';
-       $toggle_function_name = 'toggle' . $menu_name;
-
-       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {
-               if ($this->tree[$cnt]['text'] == '---') {
-                       continue;       // separators are significant only for layers-based menus
-               }
-
-               if (isset($this->tree[$cnt]['selected']) && $this->tree[$cnt]['selected']) {
-                       $linkstyle = 'phplmselected';
-               } else {
-                       $linkstyle = 'phplm';
-               }
-
-               $this->_treeMenu[$menu_name] .= '<div id="jt' . $cnt . '" class="treemenudiv">' . "\n";
-
-               // vertical lines from higher levels
-               for ($i=0; $i<$this->tree[$cnt]['level']-1; $i++) {
-                       if ($levels[$i] == 1) {
-                               $img = $img_vertline;
-                               $alt = $alt_vertline;
-                       } else {
-                               $img = $img_space;
-                               $alt = $alt_space;
-                       }
-                       $this->_treeMenu[$menu_name] .= '<img align="top" border="0" class="imgs" src="' . $img . '" alt="' . $alt . '" />';
-               }
-
-               $not_a_leaf = $cnt<$this->_lastItem[$menu_name] && $this->tree[$cnt+1]['level']>$this->tree[$cnt]['level'];
-
-               if ($this->tree[$cnt]['last_item'] == 1) {
-               // corner at end of subtree or t-split
-                       if ($not_a_leaf) {
-                               if ($cnt == $this->_firstItem[$menu_name]) {
-                                       $img = $img_collapse_corner_first;
-                                       $alt = $alt_collapse_corner_first;
-                               } else {
-                                       $img = $img_collapse_corner;
-                                       $alt = $alt_collapse_corner;
-                               }
-                               $this->_treeMenu[$menu_name] .= '<a onmousedown="' . $toggle_function_name . "('" . $cnt . "')" . '"><img align="top" border="0" class="imgs" id="jt' . $cnt . 'node" src="' . $img . '" alt="' . $alt . '" /></a>';
-                       } else {
-                               $this->_treeMenu[$menu_name] .= '<img align="top" border="0" class="imgs" src="' . $img_corner . '" alt="' . $alt_corner . '" />';
-                       }
-                       $levels[$this->tree[$cnt]['level']-1] = 0;
-               } else {
-                       if ($not_a_leaf) {
-                               if ($cnt == $this->_firstItem[$menu_name]) {
-                                       $img = $img_collapse_first;
-                                       $alt = $alt_collapse_first;
-                               } else {
-                                       $img = $img_collapse;
-                                       $alt = $alt_collapse;
-                               }
-                               $this->_treeMenu[$menu_name] .= '<a onmousedown="' . $toggle_function_name . "('" . $cnt . "');" . '"><img align="top" border="0" class="imgs" id="jt' . $cnt . 'node" src="' . $img . '" alt="' . $alt . '" /></a>';
-                       } else {
-                               if ($cnt == $this->_firstItem[$menu_name]) {
-                                       $img = $img_split_first;
-                                       $alt = $alt_split_first;
-                               } else {
-                                       $img = $img_split;
-                                       $alt = $alt_split;
-                               }
-                               $this->_treeMenu[$menu_name] .= '<img align="top" border="0" class="imgs" id="jt' . $cnt . 'node" src="' . $img . '" alt="' . $alt . '" />';
-                       }
-                       $levels[$this->tree[$cnt]['level']-1] = 1;
-               }
-
-               if ($this->tree[$cnt]['parsed_href'] == '' || $this->tree[$cnt]['parsed_href'] == '#') {
-                       $a_href_open_img = '';
-                       $a_href_close_img = '';
-                       $a_href_open = '<a class="phplmnormal">';
-                       $a_href_close = '</a>';
-               } else {
-                       $a_href_open_img = '<a href="' . $this->tree[$cnt]['parsed_href'] . '"' . $this->tree[$cnt]['parsed_title'] . $this->tree[$cnt]['parsed_target'] . '>';
-                       $a_href_close_img = '</a>';
-                       $a_href_open = '<a href="' . $this->tree[$cnt]['parsed_href'] . '"' . $this->tree[$cnt]['parsed_title'] . $this->tree[$cnt]['parsed_target'] . ' class="' . $linkstyle . '">';
-                       $a_href_close = '</a>';
-               }
-
-               if ($not_a_leaf) {
-                       $this->_treeMenu[$menu_name] .= $a_href_open_img . '<img align="top" border="0" class="imgs" id="jt' . $cnt . 'folder" src="' . $img_folder_open . '" alt="' . $alt_folder_open . '" />' . $a_href_close_img;
-               } else {
-                       if ($this->tree[$cnt]['parsed_icon'] != '') {
-                               $this->_treeMenu[$menu_name] .= $a_href_open_img . '<img align="top" border="0" src="' . $this->tree[$cnt]['parsed_icon'] . '" width="' . $this->tree[$cnt]['iconwidth'] . '" height="' . $this->tree[$cnt]['iconheight'] . '" alt="' . $alt_leaf . '" />' . $a_href_close_img;
-                       } else {
-                               $this->_treeMenu[$menu_name] .= $a_href_open_img . '<img align="top" border="0" class="imgs" src="' . $img_leaf . '" alt="' . $alt_leaf . '" />' . $a_href_close_img;
-                       }
-               }
-               $this->_treeMenu[$menu_name] .= '&nbsp;' . $a_href_open . $this->tree[$cnt]['text'] . $a_href_close . "\n";
-               $this->_treeMenu[$menu_name] .= '</div>' . "\n";
-
-               if ($cnt<$this->_lastItem[$menu_name] && $this->tree[$cnt]['level']<$this->tree[$cnt+1]['level']) {
-                       $this->_treeMenu[$menu_name] .= '<div id="jt' . $cnt . 'son" class="treemenudiv">' . "\n";
-                       if ($this->tree[$cnt]['expanded'] != 1) {
-                               $toggle .= 'if (phplm_expand[' . $cnt . '] != 1) ' . $toggle_function_name . "('" . $cnt . "');\n";
-                       } else {
-                               $toggle .= 'if (phplm_collapse[' . $cnt . '] == 1) ' . $toggle_function_name . "('" . $cnt . "');\n";
-                       }
-               }
-
-               if ($cnt>$this->_firstItem[$menu_name] && $this->tree[$cnt]['level']>$this->tree[$cnt+1]['level']) {
-                       for ($i=max(1, $this->tree[$cnt+1]['level']); $i<$this->tree[$cnt]['level']; $i++) {
-                               $this->_treeMenu[$menu_name] .= '</div>' . "\n";
-                       }
-               }
-       }
-
-/*
-       $this->_treeMenu[$menu_name] =
-       '<div class="phplmnormal">' . "\n" .
-       $this->_treeMenu[$menu_name] .
-       '</div>' . "\n";
-*/
-       // Some (old) browsers do not support the "white-space: nowrap;" CSS property...
-       $this->_treeMenu[$menu_name] =
-       '<table cellspacing="0" cellpadding="0" border="0">' . "\n" .
-       '<tr>' . "\n" .
-       '<td class="phplmnormal" nowrap="nowrap">' . "\n" .
-       $this->_treeMenu[$menu_name] .
-       '</td>' . "\n" .
-       '</tr>' . "\n" .
-       '</table>' . "\n";
-
-       $t = new Template_PHPLIB();
-       $t->setFile('tplfile', $this->libjsdir . 'layerstreemenu.ijs');
-       $t->setVar(array(
-               'toggle_function_name'          => $toggle_function_name,
-               'img_collapse'                  => $img_collapse,
-               'img_collapse_corner'           => $img_collapse_corner,
-               'img_collapse_corner_first'     => $img_collapse_corner_first,
-               'img_collapse_first'            => $img_collapse_first,
-               'img_expand'                    => $img_expand,
-               'img_expand_corner'             => $img_expand_corner,
-               'img_expand_corner_first'       => $img_expand_corner_first,
-               'img_expand_first'              => $img_expand_first,
-               'img_folder_closed'             => $img_folder_closed,
-               'img_folder_open'               => $img_folder_open
-       ));
-       $toggle_function = $t->parse('out', 'tplfile');
-       $toggle_function =
-       '<script language="JavaScript" type="text/javascript">' . "\n" .
-       '<!--' . "\n" .
-       $toggle_function .
-       '// -->' . "\n" .
-       '</script>' . "\n";
-
-       $toggle =
-       '<script language="JavaScript" type="text/javascript">' . "\n" .
-       '<!--' . "\n" .
-       'if ((DOM && !Opera56 && !Konqueror22) || IE4) {' . "\n" .
-       $toggle .
-       '}' . "\n" .
-       'if (NS4) alert("Only the accessibility is provided to Netscape 4 on the JavaScript Tree Menu.\nWe *strongly* suggest you to upgrade your browser.");' . "\n" .
-       '// -->' . "\n" .
-       '</script>' . "\n";
-
-       $this->_treeMenu[$menu_name] = $toggle_function . "\n" . $this->_treeMenu[$menu_name] . "\n" . $toggle;
-
-       return $this->_treeMenu[$menu_name];
-}
-
-/**
-* Method that returns the code of the requested Tree Menu
-* @access public
-* @param string $menu_name the name of the menu whose Tree Menu code
-*   has to be returned
-* @return string
-*/
-function getTreeMenu($menu_name)
-{
-       return $this->_treeMenu[$menu_name];
-}
-
-/**
-* Method that prints the code of the requested Tree Menu
-* @access public
-* @param string $menu_name the name of the menu whose Tree Menu code
-*   has to be printed
-* @return void
-*/
-function printTreeMenu($menu_name)
-{
-       print $this->_treeMenu[$menu_name];
-}
-
-} /* END OF CLASS */
-
-?>
diff --git a/gosa-core/include/layer-menu/libjs/layersmenu-browser_detection.js b/gosa-core/include/layer-menu/libjs/layersmenu-browser_detection.js
deleted file mode 100644 (file)
index 79896a0..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
-
-DOM = (document.getElementById) ? 1 : 0;
-NS4 = (document.layers) ? 1 : 0;
-// We need to explicitly detect Konqueror
-// because Konqueror 3 sets IE = 1 ... AAAAAAAAAARGHHH!!!
-Konqueror = (navigator.userAgent.indexOf('Konqueror') > -1) ? 1 : 0;
-// We need to detect Konqueror 2.2 as it does not handle the window.onresize event
-Konqueror22 = (navigator.userAgent.indexOf('Konqueror 2.2') > -1 || navigator.userAgent.indexOf('Konqueror/2.2') > -1) ? 1 : 0;
-Konqueror30 =
-       (
-               navigator.userAgent.indexOf('Konqueror 3.0') > -1
-               || navigator.userAgent.indexOf('Konqueror/3.0') > -1
-               || navigator.userAgent.indexOf('Konqueror 3;') > -1
-               || navigator.userAgent.indexOf('Konqueror/3;') > -1
-               || navigator.userAgent.indexOf('Konqueror 3)') > -1
-               || navigator.userAgent.indexOf('Konqueror/3)') > -1
-       )
-       ? 1 : 0;
-Konqueror31 = (navigator.userAgent.indexOf('Konqueror 3.1') > -1 || navigator.userAgent.indexOf('Konqueror/3.1') > -1) ? 1 : 0;
-// We need to detect Konqueror 3.2 and 3.3 as they are affected by the see-through effect only for 2 form elements
-Konqueror32 = (navigator.userAgent.indexOf('Konqueror 3.2') > -1 || navigator.userAgent.indexOf('Konqueror/3.2') > -1) ? 1 : 0;
-Konqueror33 = (navigator.userAgent.indexOf('Konqueror 3.3') > -1 || navigator.userAgent.indexOf('Konqueror/3.3') > -1) ? 1 : 0;
-Opera = (navigator.userAgent.indexOf('Opera') > -1) ? 1 : 0;
-Opera5 = (navigator.userAgent.indexOf('Opera 5') > -1 || navigator.userAgent.indexOf('Opera/5') > -1) ? 1 : 0;
-Opera6 = (navigator.userAgent.indexOf('Opera 6') > -1 || navigator.userAgent.indexOf('Opera/6') > -1) ? 1 : 0;
-Opera56 = Opera5 || Opera6;
-IE = (navigator.userAgent.indexOf('MSIE') > -1) ? 1 : 0;
-IE = IE && !Opera;
-IE5 = IE && DOM;
-IE4 = (document.all) ? 1 : 0;
-IE4 = IE4 && IE && !DOM;
-
diff --git a/gosa-core/include/layer-menu/libjs/layersmenu-footer.ijs b/gosa-core/include/layer-menu/libjs/layersmenu-footer.ijs
deleted file mode 100644 (file)
index 42bb0ad..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<!-- beginning of menu footer - {packageName} {version} {copyright} {author} -->
-
-{footer}
-
-<script language="JavaScript" type="text/javascript">
-<!--
-loaded = 1;
-// -->
-</script>
-
-<!-- end of menu footer - {packageName} {version} {copyright} {author} -->
diff --git a/gosa-core/include/layer-menu/libjs/layersmenu-header.ijs b/gosa-core/include/layer-menu/libjs/layersmenu-header.ijs
deleted file mode 100644 (file)
index 128078b..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-<!-- beginning of menu header - {packageName} {version} {copyright} {author} -->
-
-<script language="JavaScript" type="text/javascript">
-<!--
-
-menuTopShift = {menuTopShift};
-menuRightShift = {menuRightShift};
-menuLeftShift = {menuLeftShift};
-
-var thresholdY = {thresholdY};
-var abscissaStep = {abscissaStep};
-
-toBeHidden = new Array();
-toBeHiddenLeft = new Array();
-toBeHiddenTop = new Array();
-
-{listl}
-var numl = listl.length;
-
-father = new Array();
-for (i=1; i<={nodesCount}; i++) {
-       father['L' + i] = '';
-}
-{father_keys}
-{father_vals}
-for (i=0; i<father_keys.length; i++) {
-       father[father_keys[i]] = father_vals[i];
-}
-
-lwidth = new Array();
-var lwidthDetected = 0;
-
-function moveLayers()
-{
-       if (!lwidthDetected) {
-               for (i=0; i<numl; i++) {
-                       lwidth[listl[i]] = getOffsetWidth(listl[i]);
-               }
-               lwidthDetected = 1;
-       }
-       if (IE4) {
-               for (i=0; i<numl; i++) {
-                       setWidth(listl[i], abscissaStep);
-               }
-       }
-{moveLayers}
-}
-
-back = new Array();
-for (i=1; i<={nodesCount}; i++) {
-       back['L' + i] = 0;
-}
-
-// -->
-</script>
-
-<!-- end of menu header - {packageName} {version} {copyright} {author} -->
diff --git a/gosa-core/include/layer-menu/libjs/layersmenu-library.js b/gosa-core/include/layer-menu/libjs/layersmenu-library.js
deleted file mode 100644 (file)
index 049abf8..0000000
+++ /dev/null
@@ -1,248 +0,0 @@
-// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
-
-layerLeft = new Array();
-layerTop = new Array();
-
-function setVisibility(layer, on)
-{
-       if (on) {
-               if (DOM) {
-                       document.getElementById(layer).style.visibility = 'visible';
-               } else if (NS4) {
-                       document.layers[layer].visibility = 'show';
-               } else {
-                       document.all[layer].style.visibility = 'visible';
-               }
-       } else {
-               if (DOM) {
-                       document.getElementById(layer).style.visibility = 'hidden';
-               } else if (NS4) {
-                       document.layers[layer].visibility = 'hide';
-               } else {
-                       document.all[layer].style.visibility = 'hidden';
-               }
-       }
-}
-
-function isVisible(layer)
-{
-       if (DOM) {
-               return (document.getElementById(layer).style.visibility == 'visible');
-       } else if (NS4) {
-               return (document.layers[layer].visibility == 'show');
-       } else {
-               return (document.all[layer].style.visibility == 'visible');
-       }
-}
-
-function setLeft(layer, x)
-{
-layerLeft[layer] = x;
-       if (DOM && !Opera5) {
-               document.getElementById(layer).style.left = x + 'px';
-       } else if (Opera5) {
-               document.getElementById(layer).style.left = x;
-       } else if (NS4) {
-               document.layers[layer].left = x;
-       } else {
-               document.all[layer].style.pixelLeft = x;
-       }
-}
-
-function getOffsetLeft(layer)
-{
-       var value = 0;
-       if (DOM) {      // Mozilla, Konqueror >= 2.2, Opera >= 5, IE
-               object = document.getElementById(layer);
-               value = object.offsetLeft;
-//alert (object.tagName + ' --- ' + object.offsetLeft);
-               while (object.tagName != 'BODY' && object.offsetParent) {
-                       object = object.offsetParent;
-//alert (object.tagName + ' --- ' + object.offsetLeft);
-                       value += object.offsetLeft;
-               }
-       } else if (NS4) {
-               value = document.layers[layer].pageX;
-       } else {        // IE4 IS SIMPLY A BASTARD !!!
-               if (document.all['IE4' + layer]) {
-                       layer = 'IE4' + layer;
-               }
-               object = document.all[layer];
-               value = object.offsetLeft;
-               while (object.tagName != 'BODY') {
-                       object = object.offsetParent;
-                       value += object.offsetLeft;
-               }
-       }
-       return (value);
-}
-
-function setTop(layer, y)
-{
-layerTop[layer] = y;
-       if (DOM && !Opera5) {
-               document.getElementById(layer).style.top = y + 'px';
-       } else if (Opera5) {
-               document.getElementById(layer).style.top = y;
-       } else if (NS4) {
-               document.layers[layer].top = y;
-       } else {
-               document.all[layer].style.pixelTop = y;
-       }
-}
-
-function getOffsetTop(layer)
-{
-// IE 5.5 and 6.0 behaviour with this function is really strange:
-// in some cases, they return a really too large value...
-// ... after all, IE is buggy, nothing new
-       var value = 0;
-       if (DOM) {
-               object = document.getElementById(layer);
-               value = object.offsetTop;
-               while (object.tagName != 'BODY' && object.offsetParent) {
-                       object = object.offsetParent;
-                       value += object.offsetTop;
-               }
-       } else if (NS4) {
-               value = document.layers[layer].pageY;
-       } else {        // IE4 IS SIMPLY A BASTARD !!!
-               if (document.all['IE4' + layer]) {
-                       layer = 'IE4' + layer;
-               }
-               object = document.all[layer];
-               value = object.offsetTop;
-               while (object.tagName != 'BODY') {
-                       object = object.offsetParent;
-                       value += object.offsetTop;
-               }
-       }
-       return (value);
-}
-
-function setWidth(layer, w)
-{
-       if (DOM) {
-               document.getElementById(layer).style.width = w;
-       } else if (NS4) {
-//             document.layers[layer].width = w;
-       } else {
-               document.all[layer].style.pixelWidth = w;
-       }
-}
-
-function getOffsetWidth(layer)
-{
-       var value = 0;
-       if (DOM && !Opera56) {
-               value = document.getElementById(layer).offsetWidth;
-       } else if (NS4) {
-               value = document.layers[layer].document.width;
-       } else if (Opera56) {
-               value = document.getElementById(layer).style.pixelWidth;
-       } else {        // IE4 IS SIMPLY A BASTARD !!!
-               if (document.all['IE4' + layer]) {
-                       layer = 'IE4' + layer;
-               }
-               value = document.all[layer].offsetWidth;
-       }
-       return (value);
-}
-
-function setHeight(layer, h)   // unused, not tested
-{
-       if (DOM) {
-               document.getElementById(layer).style.height = h;
-       } else if (NS4) {
-//             document.layers[layer].height = h;
-       } else {
-               document.all[layer].style.pixelHeight = h;
-       }
-}
-
-function getOffsetHeight(layer)
-{
-       var value = 0;
-       if (DOM && !Opera56) {
-               value = document.getElementById(layer).offsetHeight;
-       } else if (NS4) {
-               value = document.layers[layer].document.height;
-       } else if (Opera56) {
-               value = document.getElementById(layer).style.pixelHeight;
-       } else {        // IE4 IS SIMPLY A BASTARD !!!
-               if (document.all['IE4' + layer]) {
-                       layer = 'IE4' + layer;
-               }
-               value = document.all[layer].offsetHeight;
-       }
-       return (value);
-}
-
-function getWindowWidth()
-{
-       var value = 0;
-       if ((DOM && !IE) || NS4 || Konqueror || Opera) {
-               value = window.innerWidth;
-//     } else if (NS4) {
-//             value = document.width;
-       } else {        // IE
-               if (document.documentElement && document.documentElement.clientWidth) {
-                       value = document.documentElement.clientWidth;
-               } else if (document.body) {
-                       value = document.body.clientWidth;
-               }
-       }
-       if (isNaN(value)) {
-               value = window.innerWidth;
-       }
-       return (value);
-}
-
-function getWindowXOffset()
-{
-       var value = 0;
-       if ((DOM && !IE) || NS4 || Konqueror || Opera) {
-               value = window.pageXOffset;
-       } else {        // IE
-               if (document.documentElement && document.documentElement.scrollLeft) {
-                       value = document.documentElement.scrollLeft;
-               } else if (document.body) {
-                       value = document.body.scrollLeft;
-               }
-       }
-       return (value);
-}
-
-function getWindowHeight()
-{
-       var value = 0;
-       if ((DOM && !IE) || NS4 || Konqueror || Opera) {
-               value = window.innerHeight;
-       } else {        // IE
-               if (document.documentElement && document.documentElement.clientHeight) {
-                       value = document.documentElement.clientHeight;
-               } else if (document.body) {
-                       value = document.body.clientHeight;
-               }
-       }
-       if (isNaN(value)) {
-               value = window.innerHeight;
-       }
-       return (value);
-}
-
-function getWindowYOffset()
-{
-       var value = 0;
-       if ((DOM && !IE) || NS4 || Konqueror || Opera) {
-               value = window.pageYOffset;
-       } else {        // IE
-               if (document.documentElement && document.documentElement.scrollTop) {
-                       value = document.documentElement.scrollTop;
-               } else if (document.body) {
-                       value = document.body.scrollTop;
-               }
-       }
-       return (value);
-}
-
diff --git a/gosa-core/include/layer-menu/libjs/layersmenu-see-through.js b/gosa-core/include/layer-menu/libjs/layersmenu-see-through.js
deleted file mode 100644 (file)
index 7ca9455..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
-
-function scanChildren(element)
-{
-       var counter = element.childNodes.length;
-        for (var i=0; i<counter; i++) {
-                foobar = element.childNodes.item(i);
-               if (    ( (Konqueror22 || Konqueror30 || Konqueror31) &&
-                        (  foobar.nodeName == 'INPUT' || foobar.nodeName == 'input'
-                        || foobar.nodeName == 'SELECT' || foobar.nodeName == 'select'
-                        || foobar.nodeName == 'TEXTAREA' || foobar.nodeName == 'textarea'
-                        )
-                       )
-                       ||
-// Konqueror 3.2 and 3.3 need hiding only for the following two form elements, but, alas,
-// at the time of this writing (Konqueror 3.2.3 and 3.3.0-rc2), hiding of such two form elements
-// on Konqueror 3.2 and 3.3 does not work, it is affected by the following bug: http://bugs.kde.org/72885
-                       ( (Konqueror32 || Konqueror33) &&
-                        (  ((foobar.nodeName == 'SELECT' || foobar.nodeName == 'select') && foobar.size > 1)
-                        || foobar.nodeName == 'TEXTAREA' || foobar.nodeName == 'textarea'
-                        )
-                       )
-                       ||
-                       ( IE &&
-                        ( foobar.nodeName == 'SELECT' || foobar.nodeName == 'select' )
-                       )
-               ) {
-                       toBeHidden[toBeHidden.length] = foobar;
-               }
-                if (foobar.childNodes.length > 0) {
-                        scanChildren(foobar);
-                }
-        }
-}
-
-function seeThroughCoordinatesDetection()
-{
-       if (!((Konqueror && !Konqueror22) || IE5)) {
-               return;
-       }
-       for (i=0; i<toBeHidden.length; i++) {
-               object = toBeHidden[i];
-               toBeHiddenLeft[i] = object.offsetLeft;
-               while (object.tagName != 'BODY' && object.offsetParent) {
-                       object = object.offsetParent;
-                       toBeHiddenLeft[i] += object.offsetLeft;
-               }
-               object = toBeHidden[i];
-               toBeHiddenTop[i] = object.offsetTop;
-               while (object.tagName != 'BODY' && object.offsetParent) {
-                       object = object.offsetParent;
-                       toBeHiddenTop[i] += object.offsetTop;
-               }
-       }
-}
-
-//document.write("<br />\nSCANNING STARTED<br />\n");
-//scanChildren(document.getElementsByTagName('BODY').item(0));
-if ((Konqueror || IE5) && document.getElementById('phplmseethrough')) {
-       scanChildren(document.getElementById('phplmseethrough'));
-}
-//document.write("<br />\nSCANNING COMPLETED<br />\n");
-
-seeThroughCoordinatesDetection();
-
diff --git a/gosa-core/include/layer-menu/libjs/layersmenu.js b/gosa-core/include/layer-menu/libjs/layersmenu.js
deleted file mode 100644 (file)
index 5d29e5b..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
-
-useTimeouts = 1;
-timeoutLength = 1000;  // time in ms; not significant if useTimeouts = 0;
-shutdownOnClick = 0;
-
-loaded = 0;
-layersMoved = 0;
-layerPoppedUp = '';
-
-timeoutFlag = 0;
-if (Opera56 || IE4) {
-       useTimeouts = 0;
-}
-if (NS4 || Opera56 || IE4) {
-       shutdownOnClick = 1;
-}
-
-currentY = 0;
-function grabMouse(e)  // for NS4
-{
-       currentY = e.pageY;
-}
-if (NS4) {
-       document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE);
-       document.onmousemove = grabMouse;
-}
-
-function seeThroughElements(show)
-{
-       if (show) {
-               foobar = 'visible';
-       } else {
-               foobar = 'hidden';
-       }
-       for (i=0; i<toBeHidden.length; i++) {
-               toBeHidden[i].style.visibility = foobar;
-       }
-}
-
-function shutdown()
-{
-       for (i=0; i<numl; i++) {
-               LMPopUpL(listl[i], false);
-       }
-       layerPoppedUp = '';
-       if (Konqueror || IE5) {
-               seeThroughElements(true);
-       }
-}
-if (shutdownOnClick) {
-       if (NS4) {
-               document.onmousedown = shutdown;
-       } else {
-               document.onclick = shutdown;
-       }
-}
-
-function setLMTO()
-{
-       if (useTimeouts) {
-               timeoutFlag = setTimeout('shutdown()', timeoutLength);
-       }
-}
-
-function clearLMTO()
-{
-       if (useTimeouts) {
-               clearTimeout(timeoutFlag);
-       }
-}
-
-function moveLayerX(menuName)
-{
-       if (!loaded || (isVisible(menuName) && menuName != layerPoppedUp)) {
-               return;
-       }
-       if (father[menuName] != '') {
-               if (!Opera5 && !IE4) {
-                       width0 = lwidth[father[menuName]];
-                       width1 = lwidth[menuName];
-               } else if (Opera5) {
-                       // Opera 5 stupidly and exaggeratedly overestimates layers widths
-                       // hence we consider a default value equal to $abscissaStep
-                       width0 = abscissaStep;
-                       width1 = abscissaStep;
-               } else if (IE4) {
-                       width0 = getOffsetWidth(father[menuName]);
-                       width1 = getOffsetWidth(menuName);
-               }
-               onLeft = getOffsetLeft(father[menuName]) - width1 + menuLeftShift;
-               onRight = getOffsetLeft(father[menuName]) + width0 - menuRightShift;
-               windowWidth = getWindowWidth();
-               windowXOffset = getWindowXOffset();
-//             if (NS4 && !DOM) {
-//                     windowXOffset = 0;
-//             }
-               if (onLeft < windowXOffset && onRight + width1 > windowWidth + windowXOffset) {
-                       if (onRight + width1 - windowWidth - windowXOffset > windowXOffset - onLeft) {
-                               onLeft = windowXOffset;
-                       } else {
-                               onRight = windowWidth + windowXOffset - width1;
-                       }
-               }
-               if (back[father[menuName]]) {
-                       if (onLeft < windowXOffset) {
-                               back[menuName] = 0;
-                       } else {
-                               back[menuName] = 1;
-                       }
-               } else {
-//alert(onRight + ' - ' + width1 + ' - ' +  windowWidth + ' - ' + windowXOffset);
-                       if (onRight + width1 > windowWidth + windowXOffset) {
-                               back[menuName] = 1;
-                       } else {
-                               back[menuName] = 0;
-                       }
-               }
-               if (back[menuName]) {
-                       setLeft(menuName, onLeft);
-               } else {
-                       setLeft(menuName, onRight);
-               }
-       }
-       moveLayerY(menuName);   // workaround needed for Mozilla < 1.4 for MS Windows
-}
-
-function moveLayerY(menuName)
-{
-       if (!loaded || (isVisible(menuName) && menuName != layerPoppedUp)) {
-               return;
-       }
-       if (!layersMoved) {
-               moveLayers();
-               layersMoved = 1;
-       }
-       if (!NS4) {
-               newY = getOffsetTop('ref' + menuName);
-       } else {
-               newY = currentY;
-       }
-       newY += menuTopShift;
-       layerHeight = getOffsetHeight(menuName);
-       windowHeight = getWindowHeight();
-       windowYOffset = getWindowYOffset();
-       if (newY + layerHeight > windowHeight + windowYOffset) {
-               if (layerHeight > windowHeight) {
-                       newY = windowYOffset;
-               } else {
-                       newY = windowHeight + windowYOffset - layerHeight;
-               }
-       }
-       if (Math.abs(getOffsetTop(menuName) - newY) > thresholdY) {
-               setTop(menuName, newY);
-       }
-}
-
-function moveLayerX1(menuName, father)
-{
-       if (!lwidthDetected) {
-               return;
-       }
-       if (!Opera5 && !IE4) {
-               width1 = lwidth[menuName];
-       } else if (Opera5) {
-               // Opera 5 stupidly and exaggeratedly overestimates layers widths
-               // hence we consider a default value equal to $abscissaStep
-               width1 = abscissaStep;
-       }
-       foobar = getOffsetLeft(father + menuName);
-if (!IE4) {
-       windowWidth = getWindowWidth();
-       windowXOffset = getWindowXOffset();
-       if (foobar + width1 > windowWidth + windowXOffset) {
-               foobar = windowWidth + windowXOffset - width1;
-       }
-       if (foobar < windowXOffset) {
-               foobar = windowXOffset;
-       }
-}
-       setLeft(menuName, foobar);
-}
-
-function layersOverlap(layer, i)
-{
-       if (Konqueror22) {
-               return true;
-       }
-
-//     xa1 = getOffsetLeft(layer);
-//setLeft(layer, xa1);
-       xa1 = layerLeft[layer];
-       xa2 = xa1 + getOffsetWidth(layer);
-//setWidth(layer, xa2-xa1);
-//     ya1 = getOffsetTop(layer);
-//setTop(layer, ya1);
-       ya1 = layerTop[layer];
-       ya2 = ya1 + getOffsetHeight(layer);
-//setHeight(layer, ya2-ya1);
-//alert(':' + xa1 + ':' + xa2 + ':' + ya1 + ':' + ya2 + ':');
-
-       xb1 = toBeHiddenLeft[i];
-       xb2 = xb1 + toBeHidden[i].offsetWidth;
-       yb1 = toBeHiddenTop[i];
-       yb2 = yb1 + toBeHidden[i].offsetHeight;
-//alert(':' + xb1 + ':' + xb2 + ':' + yb1 + ':' + yb2 + ':');
-
-       if(xb1>xa1) xa1=xb1; if(xb2<xa2) xa2=xb2;
-       if(yb1>ya1) ya1=yb1; if(yb2<ya2) ya2=yb2;
-
-       return (xa2>xa1 && ya2>ya1);
-}
-
-function seeThroughWorkaround(menuName, on)
-{
-       for (i=0; i<toBeHidden.length; i++) {
-               if (layersOverlap(menuName, i)) {
-                       if (on) {
-                               toBeHidden[i].style.visibility = 'hidden';
-                       } else {
-                               toBeHidden[i].style.visibility = 'visible';
-                       }
-               }
-       }
-}
-
-function LMPopUpL(menuName, on)
-{
-       if (!loaded) {
-               return;
-       }
-       if (!layersMoved) {
-               moveLayers();
-               layersMoved = 1;
-       }
-       setVisibility(menuName, on);
-}
-
-function LMPopUp(menuName, isCurrent)
-{
-       if (!loaded || menuName == layerPoppedUp || (isVisible(menuName) && !isCurrent)) {
-               return;
-       }
-       if (menuName == father[layerPoppedUp]) {
-               LMPopUpL(layerPoppedUp, false);
-//             seeThroughWorkaround(menuName, false);
-       } else if (father[menuName] == layerPoppedUp) {
-               LMPopUpL(menuName, true);
-               seeThroughWorkaround(menuName, true);
-       } else {
-               shutdown();
-               foobar = menuName;
-               do {
-                       LMPopUpL(foobar, true);
-                       seeThroughWorkaround(foobar, true);
-                       foobar = father[foobar];
-               } while (foobar != '')
-       }
-/*
-       if (layerPoppedUp == '') {
-               seeThroughElements(false);
-       }
-*/
-       layerPoppedUp = menuName;
-}
-
-function resizeHandler()
-{
-       if (NS4) {
-               window.location.reload();
-       }
-       shutdown();
-       for (i=0; i<numl; i++) {
-               setLeft(listl[i], 0);
-               setTop(listl[i], 0);
-       }
-       if (toBeHidden != null && toBeHidden.length > 0) {
-               seeThroughCoordinatesDetection();
-       }
-//     moveLayers();
-       layersMoved = 0;
-}
-window.onresize = resizeHandler;
-
-function yaresizeHandler()
-{
-       if (window.innerWidth != origWidth || window.innerHeight != origHeight) {
-               if (Konqueror22 || Opera5) {
-                       window.location.reload();       // Opera 5 often fails this
-               }
-               origWidth  = window.innerWidth;
-               origHeight = window.innerHeight;
-               resizeHandler();
-       }
-       setTimeout('yaresizeHandler()', 500);
-}
-function loadHandler()
-{
-       if (Konqueror22 || Opera56) {
-               origWidth  = window.innerWidth;
-               origHeight = window.innerHeight;
-               yaresizeHandler();
-       }
-}
-window.onload = loadHandler;
-
-function fixieflm(menuName)
-{
-       if (DOM) {
-               setWidth(menuName, '100%');
-       } else {        // IE4 IS SIMPLY A BASTARD !!!
-               document.write('</div>');
-               document.write('<div id="IE4' + menuName + '" style="position: relative; width: 100%; visibility: visible;">');
-       }
-}
-
diff --git a/gosa-core/include/layer-menu/libjs/layerstreemenu-cookies.js b/gosa-core/include/layer-menu/libjs/layerstreemenu-cookies.js
deleted file mode 100644 (file)
index ea36afc..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
-
-function setLMCookie(name, value)
-{
-       document.cookie = name + '=' + value + ';path=/';
-}
-
-function getLMCookie(name)
-{
-       foobar = document.cookie.split(name + '=');
-       if (foobar.length < 2) {
-               return null;
-       }
-       tempString = foobar[1];
-       if (tempString.indexOf(';') == -1) {
-               return tempString;
-       }
-       yafoobar = tempString.split(';');
-       return yafoobar[0];
-}
-
-function parseExpandString()
-{
-       expandString = getLMCookie('phplm_expand');
-       phplm_expand = new Array();
-       if (expandString) {
-               expanded = expandString.split('|');
-               for (i=0; i<expanded.length-1; i++) {
-                       phplm_expand[expanded[i]] = 1;
-               }
-       }
-}
-
-function parseCollapseString()
-{
-       collapseString = getLMCookie('phplm_collapse');
-       phplm_collapse = new Array();
-       if (collapseString) {
-               collapsed = collapseString.split('|');
-               for (i=0; i<collapsed.length-1; i++) {
-                       phplm_collapse[collapsed[i]] = 1;
-               }
-       }
-}
-
-parseExpandString();
-parseCollapseString();
-
-function saveExpandString()
-{
-       expandString = '';
-       for (i=0; i<phplm_expand.length; i++) {
-               if (phplm_expand[i] == 1) {
-                       expandString += i + '|';
-               }
-       }
-       setLMCookie('phplm_expand', expandString);
-}
-
-function saveCollapseString()
-{
-       collapseString = '';
-       for (i=0; i<phplm_collapse.length; i++) {
-               if (phplm_collapse[i] == 1) {
-                       collapseString += i + '|';
-               }
-       }
-       setLMCookie('phplm_collapse', collapseString);
-}
-
diff --git a/gosa-core/include/layer-menu/libjs/layerstreemenu.ijs b/gosa-core/include/layer-menu/libjs/layerstreemenu.ijs
deleted file mode 100644 (file)
index 5274271..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
-
-function {toggle_function_name}(nodeid)
-{
-       if ((!DOM || Opera56 || Konqueror22) && !IE4) {
-               return;
-       }
-       layersMoved = 0;
-       parseExpandString();
-       parseCollapseString();
-       if (!IE4) {
-               sonLayer = document.getElementById('jt' + nodeid + 'son');
-               nodeLayer = document.getElementById('jt' + nodeid + 'node');
-               folderLayer = document.getElementById('jt' + nodeid + 'folder');
-       } else {
-               sonLayer = document.all('jt' + nodeid + 'son');
-               nodeLayer = document.all('jt' + nodeid + 'node');
-               folderLayer = document.all('jt' + nodeid + 'folder');
-       }
-       if (sonLayer.style.display == 'none') {
-               sonLayer.style.display = 'block';
-               if (nodeLayer.src.indexOf('{img_expand}') > -1) {
-                       nodeLayer.src = '{img_collapse}';
-               } else if (nodeLayer.src.indexOf('{img_expand_first}') > -1) {
-                       nodeLayer.src = '{img_collapse_first}';
-               } else if (nodeLayer.src.indexOf('{img_expand_corner}') > -1) {
-                       nodeLayer.src = '{img_collapse_corner}';
-               } else {
-                       nodeLayer.src = '{img_collapse_corner_first}';
-               }
-               folderLayer.src = '{img_folder_open}';
-               phplm_expand[nodeid] = 1;
-               phplm_collapse[nodeid] = 0;
-       } else {
-               sonLayer.style.display = 'none';
-               if (nodeLayer.src.indexOf('{img_collapse}') > -1) {
-                       nodeLayer.src = '{img_expand}';
-               } else if (nodeLayer.src.indexOf('{img_collapse_first}') > -1) {
-                       nodeLayer.src = '{img_expand_first}';
-               } else if (nodeLayer.src.indexOf('{img_collapse_corner}') > -1) {
-                       nodeLayer.src = '{img_expand_corner}';
-               } else {
-                       nodeLayer.src = '{img_expand_corner_first}';
-               }
-               folderLayer.src = '{img_folder_closed}';
-               phplm_expand[nodeid] = 0;
-               phplm_collapse[nodeid] = 1;
-       }
-       saveExpandString();
-       saveCollapseString();
-}
-
diff --git a/gosa-core/include/utils/layer-menu/COPYING b/gosa-core/include/utils/layer-menu/COPYING
new file mode 100644 (file)
index 0000000..b1e3f5a
--- /dev/null
@@ -0,0 +1,504 @@
+                 GNU LESSER GENERAL PUBLIC LICENSE
+                      Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+\f
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+\f
+                 GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+  
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+\f
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+\f
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+\f
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+\f
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+\f
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+\f
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                           NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/gosa-core/include/utils/layer-menu/lib/PHPLIB.php b/gosa-core/include/utils/layer-menu/lib/PHPLIB.php
new file mode 100644 (file)
index 0000000..11be798
--- /dev/null
@@ -0,0 +1,567 @@
+<?php
+// vim: set expandtab tabstop=4 shiftwidth=4:
+// This code that was derived from the original PHPLIB Template class
+// is copyright by Kristian Koehntopp, NetUSE AG and was released
+// under the LGPL.
+//
+// Authors: Kristian Koehntopp <kris@koehntopp.de> (original from PHPLIB)
+//          Bjoern Schotte <bjoern@rent-a-phpwizard.de> (PEARification)                
+//          Martin Jansen <mj@php.net> (PEAR conformance)            
+//
+// $Id: PHPLIB.php,v 1.14 2003/06/11 06:03:32 bjoern Exp $
+//
+
+//require_once "PEAR.php";
+
+/**
+ * Converted PHPLIB Template class
+ *
+ * For those who want to use PHPLIB's fine template class,
+ * here's a PEAR conforming class with the original PHPLIB
+ * template code from phplib-stable CVS. Original author
+ * was Kristian Koehntopp <kris@koehntopp.de>
+ *
+ * @author  Bjoern Schotte <bjoern@rent-a-phpwizard.de>
+ * @author  Martin Jansen <mj@php.net> (PEAR conformance)
+ * @version 1.0
+ */
+class Template_PHPLIB
+{
+    /**
+     * If set, echo assignments
+     * @var bool
+     */
+    var $debug     = false;
+
+    /**
+     * $file[handle] = "filename";
+     * @var array
+     */
+    var $file  = array();
+
+    /**
+     * fallback paths that should be defined in a child class
+     * @var array
+     */
+    var $file_fallbacks = array();
+
+    /**
+     * Relative filenames are relative to this pathname
+     * @var string
+     */
+    var $root   = "";
+
+    /*
+     * $_varKeys[key] = "key"
+     * @var array
+     */
+    var $_varKeys = array();
+    
+    /**
+     * $_varVals[key] = "value";
+     * @var array
+     */
+    var $_varVals = array();
+
+    /**
+     * "remove"  => remove undefined variables
+     * "comment" => replace undefined variables with comments
+     * "keep"    => keep undefined variables
+     * @var string
+     */
+    var $unknowns = "remove";
+  
+    /**
+     * "yes" => halt, "report" => report error, continue, "no" => ignore error quietly
+     * @var string
+     */
+    var $haltOnError  = "report";
+  
+    /**
+     * The last error message is retained here
+     * @var string
+     * @see halt
+     */
+    var $_lastError     = "";
+
+
+    /**
+     * Constructor
+     *
+     * @access public
+     * @param  string template root directory
+     * @param  string how to handle unknown variables
+     * @param  array fallback paths
+     */
+    function Template_PHPLIB($root = ".", $unknowns = "remove", $fallback="")
+    {
+        $this->setRoot($root);
+        $this->setUnknowns($unknowns);
+        if (is_array($fallback)) $this->file_fallbacks = $fallback;
+    }
+
+    /**
+     * Sets the template directory
+     *
+     * @access public
+     * @param  string new template directory
+     * @return bool
+     */
+    function setRoot($root)
+    {
+        if (!is_dir($root)) {
+            $this->halt("setRoot: $root is not a directory.");
+            return false;
+        }
+    
+        $this->root = $root;
+    
+        return true;
+    }
+
+    /**
+     * What to do with unknown variables
+     *
+     * three possible values:
+     *
+     * - "remove" will remove unknown variables
+     *   (don't use this if you define CSS in your page)
+     * - "comment" will replace undefined variables with comments
+     * - "keep" will keep undefined variables as-is
+     *
+     * @access public
+     * @param  string unknowns
+     */
+    function setUnknowns($unknowns = "keep")
+    {
+        $this->unknowns = $unknowns;
+    }
+
+    /**
+     * Set appropriate template files
+     *
+     * With this method you set the template files you want to use.
+     * Either you supply an associative array with key/value pairs
+     * where the key is the handle for the filname and the value
+     * is the filename itself, or you define $handle as the file name
+     * handle and $filename as the filename if you want to define only
+     * one template.
+     *
+     * @access public
+     * @param  mixed handle for a filename or array with handle/name value pairs
+     * @param  string name of template file
+     * @return bool
+     */
+    function setFile($handle, $filename = "")
+    {
+        if (!is_array($handle)) {
+    
+            if ($filename == "") {
+                $this->halt("setFile: For handle $handle filename is empty.");
+                return false;
+            }
+      
+            $this->file[$handle] = $this->_filename($filename);
+      
+        } else {
+    
+            reset($handle);
+            while (list($h, $f) = each($handle)) {
+                $this->file[$h] = $this->_filename($f);
+            }
+        }
+    }
+
+    /**
+     * Set a block in the appropriate template handle
+     *
+     * By setting a block like that:
+     *
+     * &lt;!-- BEGIN blockname --&gt;
+     * html code
+     * &lt;!-- END blockname --&gt;
+     *
+     * you can easily do repeating HTML code, i.e. output
+     * database data nice formatted into a HTML table where
+     * each DB row is placed into a HTML table row which is
+     * defined in this block.
+     * It extracts the template $handle from $parent and places
+     * variable {$name} instead.
+     *
+     * @access public
+     * @param  string parent handle
+     * @param  string block name handle
+     * @param  string variable substitution name
+     */
+    function setBlock($parent, $handle, $name = "")
+    {
+        if (!$this->_loadFile($parent)) {
+            $this->halt("setBlock: unable to load $parent.");
+            return false;
+        }
+    
+        if ($name == "") {
+            $name = $handle;
+        }
+
+        $str = $this->getVar($parent);
+        $reg = "/[ \t]*<!--\s+BEGIN $handle\s+-->\s*?\n?(\s*.*?\n?)\s*<!--\s+END $handle\s+-->\s*?\n?/sm";
+        preg_match_all($reg, $str, $m);
+        $str = preg_replace($reg, "{" . "$name}", $str);
+
+        if (isset($m[1][0])) $this->setVar($handle, $m[1][0]);
+        $this->setVar($parent, $str);
+    }
+
+    /**
+     * Set corresponding substitutions for placeholders
+     *
+     * @access public
+     * @param  string name of a variable that is to be defined or an array of variables with value substitution as key/value pairs
+     * @param  string value of that variable
+     * @param  boolean if true, the value is appended to the variable's existing value
+     */
+    function setVar($varname, $value = "", $append = false)
+    {
+        if (!is_array($varname)) {
+
+            if (!empty($varname))
+                if ($this->debug) print "scalar: set *$varname* to *$value*<br>\n";
+
+            $this->_varKeys[$varname] = $this->_varname($varname);
+            ($append) ? $this->_varVals[$varname] .= $value : $this->_varVals[$varname] = $value;
+
+        } else {
+            reset($varname);
+
+            while (list($k, $v) = each($varname)) {
+                if (!empty($k))
+                    if ($this->debug) print "array: set *$k* to *$v*<br>\n";
+
+                $this->_varKeys[$k] = $this->_varname($k);
+                ($append) ? $this->_varVals[$k] .= $v : $this->_varVals[$k] = $v;
+            }
+        }
+    }
+
+    /**
+     * Substitute variables in handle $handle
+     *
+     * @access public
+     * @param  string name of handle
+     * @return mixed string substituted content of handle
+     */
+    function subst($handle)
+    {
+        if (!$this->_loadFile($handle)) {
+            $this->halt("subst: unable to load $handle.");
+            return false;
+        }
+
+        return @str_replace($this->_varKeys, $this->_varVals, $this->getVar($handle));
+    }
+  
+    /**
+     * Same as subst but printing the result
+     *
+     * @access  public
+     * @brother subst
+     * @param   string handle of template
+     * @return  bool always false
+     */
+    function pSubst($handle)
+    {
+        print $this->subst($handle);
+        return false;
+    }
+
+    /**
+     * Parse handle into target
+     *
+     * Parses handle $handle into $target, eventually
+     * appending handle at $target if $append is defined
+     * as TRUE.
+     *
+     * @access public
+     * @param  string target handle to parse into
+     * @param  string which handle should be parsed
+     * @param  boolean append it to $target or not?
+     * @return string parsed handle
+     */
+    function parse($target, $handle, $append = false)
+    {
+        if (!is_array($handle)) {
+            $str = $this->subst($handle);
+
+            ($append) ? $this->setVar($target, $this->getVar($target) . $str) : $this->setVar($target, $str);
+        } else {
+            reset($handle);
+
+            while (list(, $h) = each($handle)) {
+                $str = $this->subst($h);
+                $this->setVar($target, $str);
+            }
+        }
+
+        return $str;
+    }
+
+    /**
+     * Same as parse, but printing it.
+     *
+     * @access  public
+     * @brother parse
+     * @param   string target to parse into
+     * @param   string handle which should be parsed
+     * @param   should $handle be appended to $target?
+     * @return  bool
+     */
+    function pParse($target, $handle, $append = false)
+    {
+        print $this->finish($this->parse($target, $handle, $append));
+        return false;
+    }
+  
+    /**
+     * Return all defined variables and their values
+     *
+     * @access public
+     * @return array with all defined variables and their values
+     */
+    function getVars()
+    {
+        reset($this->_varKeys);
+
+        while (list($k, ) = each($this->_varKeys)) {
+            $result[$k] = $this->getVar($k);
+        }
+
+        return $result;
+    }
+
+    /**
+     * Return one or more specific variable(s) with their values.
+     *
+     * @access public    
+     * @param  mixed array with variable names or one variable name as a string
+     * @return mixed array of variable names with their values or value of one specific variable
+     */
+    function getVar($varname)
+    {
+        if (!is_array($varname)) {
+            if (isset($this->_varVals[$varname])) {
+                return $this->_varVals[$varname];
+            } else {
+                return "";
+            }
+        } else {
+            reset($varname);
+    
+            while (list($k, ) = each($varname)) {
+                $result[$k] = (isset($this->_varVals[$k])) ? $this->_varVals[$k] : "";
+            }
+
+            return $result;
+        }
+    }
+  
+    /**
+     * Get undefined values of a handle
+     *
+     * @access public
+     * @param  string handle name
+     * @return mixed  false if an error occured or the undefined values
+     */
+    function getUndefined($handle)
+    {
+        if (!$this->_loadFile($handle)) {
+            $this->halt("getUndefined: unable to load $handle.");
+            return false;
+        }
+    
+        preg_match_all("/{([^ \t\r\n}]+)}/", $this->getVar($handle), $m);
+        $m = $m[1];
+        if (!is_array($m)) {
+            return false;
+        }
+
+        reset($m);
+        while (list(, $v) = each($m)) {
+            if (!isset($this->_varKeys[$v])) {
+                $result[$v] = $v;
+            }
+        }
+    
+        if (isset($result) && count($result)) {
+            return $result;
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Finish string
+     *
+     * @access public
+     * @param  string string to finish
+     * @return finished, i.e. substituted string
+     */
+    function finish($str)
+    {
+        switch ($this->unknowns) {
+            case "remove":
+                $str = preg_replace('/{[^ \t\r\n}]+}/', "", $str);
+                break;
+
+            case "comment":
+                $str = preg_replace('/{([^ \t\r\n}]+)}/', "<!-- Template $handle: Variable \\1 undefined -->", $str);
+                break;
+        }
+
+        return $str;
+    }
+
+    /**
+     * Print variable to the browser
+     *
+     * @access public
+     * @param  string name of variable to print
+     */
+    function p($varname)
+    {
+        print $this->finish($this->getVar($varname));
+    }
+
+    /**
+     * Get finished variable
+     *
+     * @access public public
+     * @param  string variable to get
+     * @return string string with finished variable
+     */
+    function get($varname)
+    {
+        return $this->finish($this->getVar($varname));
+    }
+
+    /**
+     * Complete filename
+     *
+     * Complete filename, i.e. testing it for slashes
+     *
+     * @access private
+     * @param  string filename to be completed
+     * @return string completed filename
+     */
+    function _filename($filename)
+    {
+//        if (substr($filename, 0, 1) != "/") {
+//            $filename = $this->root."/".$filename;
+//        }
+
+        if (file_exists($filename)) return $filename;
+        if (is_array($this->file_fallbacks) && count($this->file_fallbacks) > 0) {
+            reset($this->file_fallbacks);
+            while (list(,$v) = each($this->file_fallbacks)) {
+                if (file_exists($v.basename($filename))) return $v.basename($filename);
+            }
+            $this->halt(sprintf("filename: file %s does not exist in the fallback paths %s.",$filename,implode(",",$this->file_fallbacks)));
+            return false;
+        } else {
+            $this->halt(sprintf("filename: file %s does not exist.",$filename));
+            return false;
+        }
+
+        return $filename;
+    }
+
+    /**
+     * Protect a replacement variable
+     *
+     * @access private
+     * @param  string name of replacement variable
+     * @return string replaced variable
+     */
+    function _varname($varname)
+    {
+        return "{".$varname."}";
+    }
+
+    /**
+     * load file defined by handle if it is not loaded yet
+     *
+     * @access private
+     * @param  string handle
+     * @return bool   FALSE if error, true if all is ok
+     */
+    function _loadFile($handle)
+    {
+        if (isset($this->_varKeys[$handle]) and !empty($this->_varVals[$handle])) {
+            return true;
+        }
+
+        if (!isset($this->file[$handle])) {
+            $this->halt("loadfile: $handle is not a valid handle.");
+            return false;
+        }
+
+        $filename = $this->file[$handle];
+        if (function_exists("file_get_contents")) {
+            $str = file_get_contents($filename);
+        } else {
+            if (!$fp = @fopen($filename,"r")) {
+                $this->halt("loadfile: couldn't open $filename");
+                return false;
+            }
+
+            $str = fread($fp,filesize($filename));
+            fclose($fp);
+        }
+
+        if ($str=='') {
+            $this->halt("loadfile: While loading $handle, $filename does not exist or is empty.");
+            return false;
+        }
+
+        $this->setVar($handle, $str);
+
+        return true;
+    }
+
+    /**
+     * Error function. Halt template system with message to show
+     *
+     * @access public
+     * @param  string message to show
+     * @return bool
+     */
+    function halt($msg)
+    {
+        $this->_lastError = $msg;
+
+        if ($this->haltOnError != "no") {
+//            return $this->haltMsg($msg);
+            $this->haltMsg($msg);
+        }
+
+        if ($this->haltOnError == "yes") {
+            die("<b>Halted.</b>");
+        }
+
+        return false;
+    }
+  
+    /**
+     * printf error message to show
+     *
+     * @access public
+     * @param  string message to show
+     * @return object PEAR error object
+     */
+    function haltMsg($msg)
+    {
+//        PEAR::raiseError(sprintf("<b>Template Error:</b> %s<br>\n", $msg));
+        printf("<b>Template Error:</b> %s<br>\n", $msg);
+    }
+}
+?>
diff --git a/gosa-core/include/utils/layer-menu/lib/layersmenu-browser_detection.php b/gosa-core/include/utils/layer-menu/lib/layersmenu-browser_detection.php
new file mode 100644 (file)
index 0000000..e351fc5
--- /dev/null
@@ -0,0 +1,80 @@
+<?php
+
+function inAgent($string)
+{
+       if (isset($_SERVER['HTTP_USER_AGENT'])) {
+               $http_user_agent = $_SERVER['HTTP_USER_AGENT'];
+       } else {
+               $http_user_agent = '';
+       }
+       return !(strpos($http_user_agent, $string) === false);
+}
+
+if (inAgent('Gecko')) {
+       $browser = 'Mozilla';
+} elseif (
+       inAgent('Lynx') || inAgent('lynx')
+       || inAgent('Links') || inAgent('links')
+       || inAgent('w3m')
+       ) {
+       $browser = 'TEXT';
+// I detect Konqueror and Opera before than the others,
+// as they often qualify themselves as Mozilla/Netscape/MSIE
+} elseif (inAgent('Konqueror')) {
+       if (inAgent('Konqueror 1') || inAgent('Konqueror/1')) {
+               $browser = 'Konqueror1';
+               // On KDE 1.1.2, kfm qualifies itself as "Konqueror/1.1.2"
+               // (tested on Red Hat Linux 6.2)
+       } elseif (inAgent('Konqueror 2.0') || inAgent('Konqueror/2.0')
+                 || inAgent('Konqueror 2;') || inAgent('Konqueror/2;')
+                 || inAgent('Konqueror 2)') || inAgent('Konqueror/2)')
+       ) {
+               $browser = 'Konqueror20';
+       } elseif (inAgent('Konqueror 2.1') || inAgent('Konqueror/2.1')) {
+               $browser = 'Konqueror21';
+       } else {
+               $browser = 'Konqueror';
+       }
+} elseif (inAgent('Opera')) {
+       if (inAgent('Opera 4') || inAgent('Opera/4')) {
+               $browser = 'Opera4';
+               // I hope that Opera 4 users can be satisfied by the Plain menu version;
+               // sorry, but I have never used Opera 4 and I do not have a copy of it
+               // to perform tests.  If you are using Opera < 4, it's your problem :-P
+       } elseif ((inAgent('Opera 6') || inAgent('Opera/6')) && inAgent('Linux')) {
+               $browser = 'Opera6forLinux';
+       } elseif (
+               inAgent('Opera 5') || inAgent('Opera/5')
+               || inAgent('Opera 6') || inAgent('Opera/6')
+       ) {
+               $browser = 'Opera56';
+       } else {
+               $browser = 'Opera';
+       }
+} elseif (inAgent('Safari')) {
+       $browser = 'Safari';
+} elseif (inAgent('MSIE 4') || inAgent('MSIE/4')) {
+       $browser = 'IE4';
+} elseif (inAgent('MSIE')) {
+       $browser = 'IE5';
+       // msie != 4 is handled like msie 5+; if you are using msie 3-, it's your problem :-P
+} elseif (inAgent('Mozilla 4') || inAgent('Mozilla/4')) {
+       $browser = 'NS4';
+} else {
+       $browser = 'Unknown';
+}
+
+if (
+       $browser == 'TEXT'
+       || $browser == 'Konqueror1' || $browser == 'Konqueror20' || $browser == 'Konqueror21'
+       // IMO, on Konqueror 2.1, the Plain version is more usable than the "OLD" one
+       || $browser == 'Opera4'
+) {
+       $menuType = 'PLAIN';
+} elseif ($browser == 'NS4' || $browser == 'Opera56' || $browser == 'IE4') {
+       $menuType = 'OLD';
+} else {
+       $menuType = 'DOM';
+}
+
+?>
diff --git a/gosa-core/include/utils/layer-menu/lib/layersmenu-common.inc.php b/gosa-core/include/utils/layer-menu/lib/layersmenu-common.inc.php
new file mode 100644 (file)
index 0000000..aebf559
--- /dev/null
@@ -0,0 +1,955 @@
+<?php
+// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
+
+/**
+* This file contains the code of the LayersMenuCommon class.
+* @package PHPLayersMenu
+*/
+
+/**
+* This is the "common" class of the PHP Layers Menu library.
+*
+* You need to include PEAR.php and DB.php if (and only if) you want to use the DB support provided by ths class.
+*
+* @version 3.2.0-rc
+* @package PHPLayersMenu
+*/
+class LayersMenuCommon
+{
+
+/**
+* The name of the package
+* @access private
+* @var string
+*/
+var $_packageName;
+/**
+* The version of the package
+* @access private
+* @var string
+*/
+var $version;
+/**
+* The copyright of the package
+* @access private
+* @var string
+*/
+var $copyright;
+/**
+* The author of the package
+* @access private
+* @var string
+*/
+var $author;
+
+/**
+* URL to be prepended to the menu hrefs
+* @access private
+* @var string
+*/
+var $prependedUrl = '';
+/**
+* Do you want that code execution halts on error?
+* @access private
+* @var string
+*/
+var $haltOnError = 'yes';
+
+/**
+* The base directory where the package is installed
+* @access private
+* @var string
+*/
+var $dirroot;
+/**
+* The "libjs" directory of the package
+* @access private
+* @var string
+*/
+var $libjsdir;
+/**
+* The directory where images related to the menu can be found
+* @access private
+* @var string
+*/
+var $imgdir;
+/**
+* The http path corresponding to imgdir
+* @access private
+* @var string
+*/
+var $imgwww;
+/**
+* The directory where icons of menu items can be found
+* @access private
+* @var string
+*/
+var $icondir;
+/**
+* The http path corresponding to icondir
+* @access private
+* @var string
+*/
+var $iconwww;
+/**
+* This array may contain width and height of all icons
+* @access private
+* @var integer
+*/
+var $iconsize = array();
+/**
+* If this var is false, width and height of icons have to be detected; if this var is true, width and height of icons are not detected and are retrieved from the iconsize array
+* @access private
+* @var boolean
+*/
+var $issetIconsize = false;
+/**
+* The directory where templates can be found
+* @access private
+* @var string
+*/
+var $tpldir;
+/**
+* The string containing the menu structure
+* @access private
+* @var string
+*/
+var $menuStructure;
+
+/**
+* It counts nodes for all menus
+* @access private
+* @var integer
+*/
+var $_nodesCount;
+/**
+* A multi-dimensional array to store informations for each menu entry
+* @access private
+* @var array
+*/
+var $tree;
+/**
+* A multi-dimensional array used only with the DB support; for each $menu_name, it stores the $cnt associated to each item id
+*
+* This array is needed for selection of the current item
+* through the corresponding id (see the DB table structure)
+* as, internally, items are stored, sorted and addressed in terms of $cnt
+*
+* @access private
+* @var array
+*/
+var $treecnt;
+/**
+* The maximum hierarchical level of menu items
+* @access private
+* @var integer
+*/
+var $_maxLevel;
+/**
+* An array that counts the number of first level items for each menu
+* @access private
+* @var array
+*/
+var $_firstLevelCnt;
+/**
+* An array containing the number identifying the first item of each menu
+* @access private
+* @var array
+*/
+var $_firstItem;
+/**
+* An array containing the number identifying the last item of each menu
+* @access private
+* @var array
+*/
+var $_lastItem;
+
+/**
+* Data Source Name: the connection string for PEAR DB
+* @access private
+* @var string
+*/
+var $dsn = 'pgsql://dbuser:dbpass@dbhost/dbname';
+/**
+* DB connections are either persistent or not persistent
+* @access private
+* @var boolean
+*/
+var $persistent = false;
+/**
+* Name of the table storing data describing the menu
+* @access private
+* @var string
+*/
+var $tableName = 'phplayersmenu';
+/**
+* Name of the i18n table corresponding to $tableName
+* @access private
+* @var string
+*/
+var $tableName_i18n = 'phplayersmenu_i18n';
+/**
+* Names of fields of the table storing data describing the menu
+*
+* default field names correspond to the same field names foreseen
+* by the menu structure format
+*
+* @access private
+* @var array
+*/
+var $tableFields = array(
+       'id'            => 'id',
+       'parent_id'     => 'parent_id',
+       'text'          => 'text',
+       'href'          => 'href',
+       'title'         => 'title',
+       'icon'          => 'icon',
+       'target'        => 'target',
+       'orderfield'    => 'orderfield',
+       'expanded'      => 'expanded'
+);
+/**
+* Names of fields of the i18n table corresponding to $tableName
+* @access private
+* @var array
+*/
+var $tableFields_i18n = array(
+       'language'      => 'language',
+       'id'            => 'id',
+       'text'          => 'text',
+       'title'         => 'title'
+);
+/**
+* A temporary array to store data retrieved from the DB and to perform the depth-first search
+* @access private
+* @var array
+*/
+var $_tmpArray = array();
+
+/**
+* The constructor method; it initializates the menu system
+* @return void
+*/
+function LayersMenuCommon()
+{
+       $this->_packageName = 'PHP Layers Menu';
+       $this->version = '3.2.0-rc';
+       $this->copyright = '(C) 2001-2004';
+       $this->author = 'Marco Pratesi - http://www.marcopratesi.it/';
+
+       $this->prependedUrl = '';
+
+       $this->dirroot = './';
+       $this->libjsdir = './libjs/';
+       $this->imgdir = './menuimages/';
+       $this->imgwww = 'menuimages/';
+       $this->icondir = './menuicons/';
+       $this->iconwww = 'menuicons/';
+       $this->tpldir = './templates/';
+       $this->menuStructure = '';
+       $this->separator = '|';
+
+       $this->_nodesCount = 0;
+       $this->tree = array();
+       $this->treecnt = array();
+       $this->_maxLevel = array();
+       $this->_firstLevelCnt = array();
+       $this->_firstItem = array();
+       $this->_lastItem = array();
+}
+
+/**
+* The method to set the prepended URL
+* @access public
+* @return boolean
+*/
+function setPrependedUrl($prependedUrl)
+{
+       // We do not perform any check
+       $this->prependedUrl = $prependedUrl;
+       return true;
+}
+
+/**
+* The method to set the dirroot directory
+* @access public
+* @return boolean
+*/
+function setDirrootCommon($dirroot)
+{
+       if (!is_dir($dirroot)) {
+               $this->error("setDirroot: $dirroot is not a directory.");
+               return false;
+       }
+       if (substr($dirroot, -1) != '/') {
+               $dirroot .= '/';
+       }
+       $oldlength = strlen($this->dirroot);
+       $foobar = strpos($this->libjsdir, $this->dirroot);
+       if (!($foobar === false || $foobar != 0)) {
+               $this->libjsdir = $dirroot . substr($this->libjsdir, $oldlength);
+       }
+       $foobar = strpos($this->imgdir, $this->dirroot);
+       if (!($foobar === false || $foobar != 0)) {
+               $this->imgdir = $dirroot . substr($this->imgdir, $oldlength);
+       }
+       $foobar = strpos($this->icondir, $this->dirroot);
+       if (!($foobar === false || $foobar != 0)) {
+               $this->icondir = $dirroot . substr($this->icondir, $oldlength);
+       }
+       $foobar = strpos($this->tpldir, $this->dirroot);
+       if (!($foobar === false || $foobar != 0)) {
+               $this->tpldir = $dirroot . substr($this->tpldir, $oldlength);
+       }
+       $this->dirroot = $dirroot;
+       return true;
+}
+
+/**
+* The method to set the libjsdir directory
+* @access public
+* @return boolean
+*/
+function setLibjsdir($libjsdir)
+{
+       if ($libjsdir != '' && substr($libjsdir, -1) != '/') {
+               $libjsdir .= '/';
+       }
+       if ($libjsdir == '' || substr($libjsdir, 0, 1) != '/') {
+               $foobar = strpos($libjsdir, $this->dirroot);
+               if ($foobar === false || $foobar != 0) {
+                       $libjsdir = $this->dirroot . $libjsdir;
+               }
+       }
+       if (!is_dir($libjsdir)) {
+               $this->error("setLibjsdir: $libjsdir is not a directory.");
+               return false;
+       }
+       $this->libjsdir = $libjsdir;
+       return true;
+}
+
+/**
+* The method to set the imgdir directory
+* @access public
+* @return boolean
+*/
+function setImgdir($imgdir)
+{
+       if ($imgdir != '' && substr($imgdir, -1) != '/') {
+               $imgdir .= '/';
+       }
+       if ($imgdir == '' || substr($imgdir, 0, 1) != '/') {
+               $foobar = strpos($imgdir, $this->dirroot);
+               if ($foobar === false || $foobar != 0) {
+                       $imgdir = $this->dirroot . $imgdir;
+               }
+       }
+       if (!is_dir($imgdir)) {
+               $this->error("setImgdir: $imgdir is not a directory.");
+               return false;
+       }
+       $this->imgdir = $imgdir;
+       return true;
+}
+
+/**
+* The method to set imgwww
+* @access public
+* @return void
+*/
+function setImgwww($imgwww)
+{
+       if ($imgwww != '' && substr($imgwww, -1) != '/') {
+               $imgwww .= '/';
+       }
+       $this->imgwww = $imgwww;
+}
+
+/**
+* The method to set the icondir directory
+* @access public
+* @return boolean
+*/
+function setIcondir($icondir)
+{
+       if ($icondir != '' && substr($icondir, -1) != '/') {
+               $icondir .= '/';
+       }
+       if ($icondir == '' || substr($icondir, 0, 1) != '/') {
+               $foobar = strpos($icondir, $this->dirroot);
+               if ($foobar === false || $foobar != 0) {
+                       $icondir = $this->dirroot . $icondir;
+               }
+       }
+       if (!is_dir($icondir)) {
+               $this->error("setIcondir: $icondir is not a directory.");
+               return false;
+       }
+       $this->icondir = $icondir;
+       return true;
+}
+
+/**
+* The method to set iconwww
+* @access public
+* @return void
+*/
+function setIconwww($iconwww)
+{
+       if ($iconwww != '' && substr($iconwww, -1) != '/') {
+               $iconwww .= '/';
+       }
+       $this->iconwww = $iconwww;
+}
+
+/**
+* The method to set the iconsize array
+* @access public
+* @return void
+*/
+function setIconsize($width, $height)
+{
+       $this->iconsize['width'] = ($width == (int) $width) ? $width : 0;
+       $this->iconsize['height'] = ($height == (int) $height) ? $height : 0;
+       $this->issetIconsize = true;
+}
+
+/**
+* The method to unset the iconsize array
+* @access public
+* @return void
+*/
+function unsetIconsize()
+{
+       unset($this->iconsize['width']);
+       unset($this->iconsize['height']);
+       $this->issetIconsize = false;
+}
+
+/**
+* The method to set the tpldir directory
+* @access public
+* @return boolean
+*/
+function setTpldirCommon($tpldir)
+{
+       if ($tpldir != '' && substr($tpldir, -1) != '/') {
+               $tpldir .= '/';
+       }
+       if ($tpldir == '' || substr($tpldir, 0, 1) != '/') {
+               $foobar = strpos($tpldir, $this->dirroot);
+               if ($foobar === false || $foobar != 0) {
+                       $tpldir = $this->dirroot . $tpldir;
+               }
+       }
+       if (!is_dir($tpldir)) {
+               $this->error("setTpldir: $tpldir is not a directory.");
+               return false;
+       }
+       $this->tpldir = $tpldir;
+       return true;
+}
+
+/**
+* The method to read the menu structure from a file
+* @access public
+* @param string $tree_file the menu structure file
+* @return boolean
+*/
+function setMenuStructureFile($tree_file)
+{
+       if (!($fd = fopen($tree_file, 'r'))) {
+               $this->error("setMenuStructureFile: unable to open file $tree_file.");
+               return false;
+       }
+       $this->menuStructure = '';
+       while ($buffer = fgets($fd, 4096)) {
+               $buffer = ereg_replace(chr(13), '', $buffer);   // Microsoft Stupidity Suppression
+               $this->menuStructure .= $buffer;
+       }
+       fclose($fd);
+       if ($this->menuStructure == '') {
+               $this->error("setMenuStructureFile: $tree_file is empty.");
+               return false;
+       }
+       return true;
+}
+
+/**
+* The method to set the menu structure passing it through a string
+* @access public
+* @param string $tree_string the menu structure string
+* @return boolean
+*/
+function setMenuStructureString($tree_string)
+{
+       $this->menuStructure = ereg_replace(chr(13), '', $tree_string); // Microsoft Stupidity Suppression
+       if ($this->menuStructure == '') {
+               $this->error('setMenuStructureString: empty string.');
+               return false;
+       }
+       return true;
+}
+
+/**
+* The method to set the value of separator
+* @access public
+* @return void
+*/
+function setSeparator($separator)
+{
+       $this->separator = $separator;
+}
+
+/**
+* The method to set parameters for the DB connection
+* @access public
+* @param string $dns Data Source Name: the connection string for PEAR DB
+* @param bool $persistent DB connections are either persistent or not persistent
+* @return boolean
+*/
+function setDBConnParms($dsn, $persistent=false)
+{
+       if (!is_string($dsn)) {
+               $this->error('initdb: $dsn is not an string.');
+               return false;
+       }
+       if (!is_bool($persistent)) {
+               $this->error('initdb: $persistent is not a boolean.');
+               return false;
+       }
+       $this->dsn = $dsn;
+       $this->persistent = $persistent;
+       return true;
+}
+
+/**
+* The method to set the name of the table storing data describing the menu
+* @access public
+* @param string
+* @return boolean
+*/
+function setTableName($tableName)
+{
+       if (!is_string($tableName)) {
+               $this->error('setTableName: $tableName is not a string.');
+               return false;
+       }
+       $this->tableName = $tableName;
+       return true;
+}
+
+/**
+* The method to set the name of the i18n table corresponding to $tableName
+* @access public
+* @param string
+* @return boolean
+*/
+function setTableName_i18n($tableName_i18n)
+{
+       if (!is_string($tableName_i18n)) {
+               $this->error('setTableName_i18n: $tableName_i18n is not a string.');
+               return false;
+       }
+       $this->tableName_i18n = $tableName_i18n;
+       return true;
+}
+
+/**
+* The method to set names of fields of the table storing data describing the menu
+* @access public
+* @param array
+* @return boolean
+*/
+function setTableFields($tableFields)
+{
+       if (!is_array($tableFields)) {
+               $this->error('setTableFields: $tableFields is not an array.');
+               return false;
+       }
+       if (count($tableFields) == 0) {
+               $this->error('setTableFields: $tableFields is a zero-length array.');
+               return false;
+       }
+       reset ($tableFields);
+       while (list($key, $value) = each($tableFields)) {
+               $this->tableFields[$key] = ($value == '') ? "''" : $value;
+       }
+       return true;
+}
+
+/**
+* The method to set names of fields of the i18n table corresponding to $tableName
+* @access public
+* @param array
+* @return boolean
+*/
+function setTableFields_i18n($tableFields_i18n)
+{
+       if (!is_array($tableFields_i18n)) {
+               $this->error('setTableFields_i18n: $tableFields_i18n is not an array.');
+               return false;
+       }
+       if (count($tableFields_i18n) == 0) {
+               $this->error('setTableFields_i18n: $tableFields_i18n is a zero-length array.');
+               return false;
+       }
+       reset ($tableFields_i18n);
+       while (list($key, $value) = each($tableFields_i18n)) {
+               $this->tableFields_i18n[$key] = ($value == '') ? "''" : $value;
+       }
+       return true;
+}
+
+/**
+* The method to parse the current menu structure and correspondingly update related variables
+* @access public
+* @param string $menu_name the name to be attributed to the menu
+*   whose structure has to be parsed
+* @return void
+*/
+function parseStructureForMenu(
+       $menu_name = '' // non consistent default...
+       )
+{
+       $this->_maxLevel[$menu_name] = 0;
+       $this->_firstLevelCnt[$menu_name] = 0;
+       $this->_firstItem[$menu_name] = $this->_nodesCount + 1;
+       $cnt = $this->_firstItem[$menu_name];
+       $menuStructure = $this->menuStructure;
+
+       /* *********************************************** */
+       /* Partially based on a piece of code taken from   */
+       /* TreeMenu 1.1 - Bjorge Dijkstra (bjorge@gmx.net) */
+       /* *********************************************** */
+
+       while ($menuStructure != '') {
+               $before_cr = strcspn($menuStructure, "\n");
+               $buffer = substr($menuStructure, 0, $before_cr);
+               $menuStructure = substr($menuStructure, $before_cr+1);
+               if (substr($buffer, 0, 1) == '#') {
+                       continue;       // commented item line...
+               }
+               $tmp = rtrim($buffer);
+               $node = explode($this->separator, $tmp);
+               for ($i=count($node); $i<=6; $i++) {
+                       $node[$i] = '';
+               }
+               $this->tree[$cnt]['level'] = strlen($node[0]);
+               $this->tree[$cnt]['text'] = $node[1];
+               $this->tree[$cnt]['href'] = $node[2];
+               $this->tree[$cnt]['title'] = $node[3];
+               $this->tree[$cnt]['icon'] = $node[4];
+               $this->tree[$cnt]['target'] = $node[5];
+               $this->tree[$cnt]['expanded'] = $node[6];
+               $cnt++;
+       }
+
+       /* *********************************************** */
+
+       $this->_lastItem[$menu_name] = count($this->tree);
+       $this->_nodesCount = $this->_lastItem[$menu_name];
+       $this->tree[$this->_lastItem[$menu_name]+1]['level'] = 0;
+       $this->_postParse($menu_name);
+}
+
+/**
+* The method to parse the current menu table and correspondingly update related variables
+* @access public
+* @param string $menu_name the name to be attributed to the menu
+*   whose structure has to be parsed
+* @param string $language i18n language; either omit it or pass
+*   an empty string ('') if you do not want to use any i18n table
+* @return void
+*/
+function scanTableForMenu(
+       $menu_name = '', // non consistent default...
+       $language = ''
+       )
+{
+       $this->_maxLevel[$menu_name] = 0;
+       $this->_firstLevelCnt[$menu_name] = 0;
+       unset($this->tree[$this->_nodesCount+1]);
+       $this->_firstItem[$menu_name] = $this->_nodesCount + 1;
+/* BEGIN BENCHMARK CODE
+$time_start = $this->_getmicrotime();
+/* END BENCHMARK CODE */
+       $db = DB::connect($this->dsn, $this->persistent);
+       if (DB::isError($db)) {
+               $this->error('scanTableForMenu: ' . $db->getMessage());
+       }
+       $dbresult = $db->query('
+               SELECT ' .
+                       $this->tableFields['id'] . ' AS id, ' .
+                       $this->tableFields['parent_id'] . ' AS parent_id, ' .
+                       $this->tableFields['text'] . ' AS text, ' .
+                       $this->tableFields['href'] . ' AS href, ' .
+                       $this->tableFields['title'] . ' AS title, ' .
+                       $this->tableFields['icon'] . ' AS icon, ' .
+                       $this->tableFields['target'] . ' AS target, ' .
+                       $this->tableFields['expanded'] . ' AS expanded
+               FROM ' . $this->tableName . '
+               WHERE ' . $this->tableFields['id'] . ' <> 1
+               ORDER BY ' . $this->tableFields['orderfield'] . ', ' . $this->tableFields['text'] . ' ASC
+       ');
+       $this->_tmpArray = array();
+       while ($dbresult->fetchInto($row, DB_FETCHMODE_ASSOC)) {
+               $this->_tmpArray[$row['id']]['parent_id'] = $row['parent_id'];
+               $this->_tmpArray[$row['id']]['text'] = $row['text'];
+               $this->_tmpArray[$row['id']]['href'] = $row['href'];
+               $this->_tmpArray[$row['id']]['title'] = $row['title'];
+               $this->_tmpArray[$row['id']]['icon'] = $row['icon'];
+               $this->_tmpArray[$row['id']]['target'] = $row['target'];
+               $this->_tmpArray[$row['id']]['expanded'] = $row['expanded'];
+       }
+       if ($language != '') {
+               $dbresult = $db->query('
+                       SELECT ' .
+                               $this->tableFields_i18n['id'] . ' AS id, ' .
+                               $this->tableFields_i18n['text'] . ' AS text, ' .
+                               $this->tableFields_i18n['title'] . ' AS title
+                       FROM ' . $this->tableName_i18n . '
+                       WHERE ' . $this->tableFields_i18n['id'] . ' <> 1
+                               AND ' . $this->tableFields_i18n['language'] . ' = ' . "'$language'" . '
+               ');
+               while ($dbresult->fetchInto($row, DB_FETCHMODE_ASSOC)) {
+                       if (isset($this->_tmpArray[$row['id']])) {
+                               $this->_tmpArray[$row['id']]['text'] = $row['text'];
+                               $this->_tmpArray[$row['id']]['title'] = $row['title'];
+                       }
+               }
+       }
+       unset($dbresult);
+       unset($row);
+       $this->_depthFirstSearch($menu_name, $this->_tmpArray, 1, 1);
+/* BEGIN BENCHMARK CODE
+$time_end = $this->_getmicrotime();
+$time = $time_end - $time_start;
+print "TIME ELAPSED = $time\n<br>";
+/* END BENCHMARK CODE */
+       $this->_lastItem[$menu_name] = count($this->tree);
+       $this->_nodesCount = $this->_lastItem[$menu_name];
+       $this->tree[$this->_lastItem[$menu_name]+1]['level'] = 0;
+       $this->_postParse($menu_name);
+}
+
+function _getmicrotime()
+{
+       list($usec, $sec) = explode(' ', microtime());
+       return ((float) $usec + (float) $sec);
+}
+
+/**
+* Recursive method to perform the depth-first search of the tree data taken from the current menu table
+* @access private
+* @param string $menu_name the name to be attributed to the menu
+*   whose structure has to be parsed
+* @param array $tmpArray the temporary array that stores data to perform
+*   the depth-first search
+* @param integer $parent_id id of the item whose children have
+*   to be searched for
+* @param integer $level the hierarchical level of children to be searched for
+* @return void
+*/
+function _depthFirstSearch($menu_name, $tmpArray, $parent_id=1, $level=1)
+{
+       reset ($tmpArray);
+       while (list($id, $foobar) = each($tmpArray)) {
+               if ($foobar['parent_id'] == $parent_id) {
+                       unset($tmpArray[$id]);
+                       unset($this->_tmpArray[$id]);
+                       $cnt = count($this->tree) + 1;
+                       $this->tree[$cnt]['level'] = $level;
+                       $this->tree[$cnt]['text'] = $foobar['text'];
+                       $this->tree[$cnt]['href'] = $foobar['href'];
+                       $this->tree[$cnt]['title'] = $foobar['title'];
+                       $this->tree[$cnt]['icon'] = $foobar['icon'];
+                       $this->tree[$cnt]['target'] = $foobar['target'];
+                       $this->tree[$cnt]['expanded'] = $foobar['expanded'];
+                       $this->treecnt[$menu_name][$id] = $cnt;
+                       unset($foobar);
+                       if ($id != $parent_id) {
+                               $this->_depthFirstSearch($menu_name, $this->_tmpArray, $id, $level+1);
+                       }
+               }
+       }
+}
+
+/**
+* A method providing parsing needed after both file/string parsing and DB table parsing
+* @access private
+* @param string $menu_name the name of the menu for which the parsing
+*   has to be performed
+* @return void
+*/
+function _postParse(
+       $menu_name = '' // non consistent default...
+       )
+{
+       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the new menu
+               $this->tree[$cnt]['child_of_root_node'] = ($this->tree[$cnt]['level'] == 1);
+               $this->tree[$cnt]['parsed_text'] = stripslashes($this->tree[$cnt]['text']);
+               $this->tree[$cnt]['parsed_href'] = (ereg_replace(' ', '', $this->tree[$cnt]['href']) == '') ? '#' : $this->prependedUrl . $this->tree[$cnt]['href'];
+               $this->tree[$cnt]['parsed_title'] = ($this->tree[$cnt]['title'] == '') ? '' : ' title="' . stripslashes($this->tree[$cnt]['title']) . '"';
+               $fooimg = $this->icondir . $this->tree[$cnt]['icon'];
+               if ($this->tree[$cnt]['icon'] != '' && (substr($this->tree[$cnt]['icon'], 0, 7) == 'http://' || substr($this->tree[$cnt]['icon'], 0, 8) == 'https://')) {
+                       $this->tree[$cnt]['parsed_icon'] = $this->tree[$cnt]['icon'];
+                       if ($this->issetIconsize) {
+                               $this->tree[$cnt]['iconwidth'] = $this->iconsize['width'];
+                               $this->tree[$cnt]['iconheight'] = $this->iconsize['height'];
+                       } else {
+                               $foobar = getimagesize($this->tree[$cnt]['icon']);
+                               $this->tree[$cnt]['iconwidth'] = $foobar[0];
+                               $this->tree[$cnt]['iconheight'] = $foobar[1];
+                       }
+               } elseif ($this->tree[$cnt]['icon'] != '' && file_exists($fooimg)) {
+                       $this->tree[$cnt]['parsed_icon'] = $this->iconwww . $this->tree[$cnt]['icon'];
+                       if ($this->issetIconsize) {
+                               $this->tree[$cnt]['iconwidth'] = $this->iconsize['width'];
+                               $this->tree[$cnt]['iconheight'] = $this->iconsize['height'];
+                       } else {
+                               $foobar = getimagesize($fooimg);
+                               $this->tree[$cnt]['iconwidth'] = $foobar[0];
+                               $this->tree[$cnt]['iconheight'] = $foobar[1];
+                       }
+               } else {
+                       $this->tree[$cnt]['parsed_icon'] = '';
+               }
+               $this->tree[$cnt]['parsed_target'] = ($this->tree[$cnt]['target'] == '') ? '' : ' target="' . $this->tree[$cnt]['target'] . '"';
+//             $this->tree[$cnt]['expanded'] = ($this->tree[$cnt]['expanded'] == '') ? 0 : $this->tree[$cnt]['expanded'];
+               $this->_maxLevel[$menu_name] = max($this->_maxLevel[$menu_name], $this->tree[$cnt]['level']);
+               if ($this->tree[$cnt]['level'] == 1) {
+                       $this->_firstLevelCnt[$menu_name]++;
+               }
+       }
+}
+
+/**
+* A method to replace strings in all URLs (hrefs) of a menu
+* @access public
+* @param string $menu_name the name of the menu for which the replacement
+*   has to be performed
+* @param string $string the string to be replaced
+* @param string $value the replacement string
+* @return void
+*/
+function replaceStringInUrls($menu_name, $string, $value)
+{
+       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the new menu
+               $this->tree[$cnt]['parsed_href'] = str_replace($string, $value, $this->tree[$cnt]['parsed_href']);
+       }
+}
+
+/**
+* A method to set the same target for all links of a menu
+* @access public
+* @param string $menu_name the name of the menu for which the targets
+*   have to be set
+* @param string $target the target to be set for all links
+*   of the $menu_name menu
+* @return void
+*/
+function setLinksTargets($menu_name, $target)
+{
+       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the new menu
+               $this->tree[$cnt]['parsed_target'] = ' target="' . $target . '"';
+       }
+}
+
+/**
+* A method to select the current item of $menu_name in terms of $cnt, i.e., very likely, in terms of its line number in the corresponding menu structure file (excluding from the count commented out lines, if any)
+* @access public
+* @param string $menu_name the name of the menu for which the current item
+*   has to be selected
+* @param integer $count the line number of the current item
+*   in the corresponding menu structure file
+*   (excluding from the count commented out lines, if any)
+* @return void
+*/
+function setSelectedItemByCount($menu_name, $count)
+{
+       if ($count < 1) {
+               $this->error("setSelectedItemByCount: the \$count argument is $count, but \$count can not be lower than 1");
+               return;
+       }
+       if ($count > $this->_lastItem[$menu_name] - $this->_firstItem[$menu_name] + 1) {
+               $this->error("setSelectedItemByCount: the \$count argument is $count and is larger than the number of items of the '$menu_name' menu");
+               return;
+       }
+       $cnt = $this->_firstItem[$menu_name] + $count - 1;
+       $this->tree[$cnt]['selected'] = true;
+}
+
+/**
+* A method to select the current item of $menu_name in terms of the corresponding id (see the DB table structure); obviously, this method can be used only together with the DB support
+* @access public
+* @param string $menu_name the name of the menu for which the current item
+*   has to be selected
+* @param integer $id the id of the current item in the corresponding DB table
+* @return void
+*/
+function setSelectedItemById($menu_name, $id)
+{
+       if (!isset($this->treecnt[$menu_name][$id])) {
+               $this->error("setSelectedItemById: there is not any item with \$id = $id in the '$menu_name' menu");
+               return;
+       }
+       $cnt = $this->treecnt[$menu_name][$id];
+       $this->tree[$cnt]['selected'] = true;
+}
+
+/**
+* A method to select the current item of $menu_name specifying a string that occurs in the current URL
+* @access public
+* @param string $menu_name the name of the menu for which the current item
+*   has to be selected
+* @param string $url a string that occurs in the current URL
+* @return void
+*/
+function setSelectedItemByUrl($menu_name, $url)
+{
+       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the new menu
+               if (!(strpos($this->tree[$cnt]['parsed_href'], $url) === false)) {
+                       $this->tree[$cnt]['selected'] = true;
+                       break;
+               }
+       }
+}
+
+/**
+* A method to select the current item of $menu_name specifying a regular expression that matches (a substring of) the current URL; just the same as the setSelectedItemByUrl() method, but using eregi() instead of strpos()
+* @access public
+* @param string $menu_name the name of the menu for which the current item
+*   has to be selected
+* @param string $url_eregi the regular expression that matches
+*   (a substring of) the current URL
+* @return void
+*/
+function setSelectedItemByUrlEregi($menu_name, $url_eregi)
+{
+       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the new menu
+               if (eregi($url_eregi, $this->tree[$cnt]['parsed_href'])) {
+                       $this->tree[$cnt]['selected'] = true;
+                       break;
+               }
+       }
+}
+
+/**
+* Method to handle errors
+* @access private
+* @param string $errormsg the error message
+* @return void
+*/
+function error($errormsg)
+{
+       print "<b>LayersMenu Error:</b> $errormsg<br />\n";
+       if ($this->haltOnError == 'yes') {
+               die("<b>Halted.</b><br />\n");
+       }
+}
+
+} /* END OF CLASS */
+
+?>
diff --git a/gosa-core/include/utils/layer-menu/lib/layersmenu-process.inc.php b/gosa-core/include/utils/layer-menu/lib/layersmenu-process.inc.php
new file mode 100644 (file)
index 0000000..13033c9
--- /dev/null
@@ -0,0 +1,158 @@
+<?php
+// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
+
+/**
+* This file contains the code of the ProcessLayersMenu class.
+* @package PHPLayersMenu
+*/
+
+/**
+* This is an extension of the "common" class of the PHP Layers Menu library.
+*
+* It provides methods useful to process/convert menus data, e.g. to output a menu structure and a DB SQL dump corresponding to already parsed data and hence also to convert a menu structure file to a DB SQL dump and viceversa
+*
+* @version 3.2.0-rc
+* @package PHPLayersMenu
+*/
+class ProcessLayersMenu extends LayersMenuCommon
+{
+
+/**
+* The constructor method
+* @return void
+*/
+function ProcessLayersMenu()
+{
+       $this->LayersMenuCommon();
+}
+
+/**
+* The method to set the dirroot directory
+* @access public
+* @return boolean
+*/
+function setDirroot($dirroot)
+{
+       return $this->setDirrootCommon($dirroot);
+}
+
+/**
+* Method to output a menu structure corresponding to items of a menu
+* @access public
+* @param string $menu_name the name of the menu for which a menu structure
+*   has to be returned
+* @param string $separator the character used in the menu structure format
+*   to separate fields of each item
+* @return string
+*/
+function getMenuStructure(
+       $menu_name = '',        // non consistent default...
+       $separator = '|'
+       )
+{
+       $menuStructure = '';
+       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the menu
+               $menuStructure .= str_repeat('.', $this->tree[$cnt]['level']);
+               $menuStructure .= $separator;
+               $menuStructure .= $this->tree[$cnt]['text'];
+               $menuStructure .= $separator;
+               $menuStructure .= $this->tree[$cnt]['href'];
+               $menuStructure .= $separator;
+               $menuStructure .= $this->tree[$cnt]['title'];
+               $menuStructure .= $separator;
+               $menuStructure .= $this->tree[$cnt]['icon'];
+               $menuStructure .= $separator;
+               $menuStructure .= $this->tree[$cnt]['target'];
+               $menuStructure .= $separator;
+               $menuStructure .= $this->tree[$cnt]['expanded'];
+               $menuStructure .= "\n";
+       }
+       return $menuStructure;
+}
+
+/**
+* Method to output a DB SQL dump corresponding to items of a menu
+* @access public
+* @param string $menu_name the name of the menu for which a DB SQL dump
+*   has to be returned
+* @param string $db_type the type of DB to dump for;
+*   leave it either empty or not specified if you are using PHP < 5,
+*   as sqlite_escape_string() has been added in PHP 5;
+*   it has to be specified and set to 'sqlite' only if the dump
+*   has to be prepared for SQLite; it is not significant if != 'sqlite'
+* @return string
+*/
+function getSQLDump(
+       $menu_name = '',        // non consistent default...
+       $db_type = ''
+       )
+{
+       $SQLDump = '';
+       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the menu
+               $current_node[$this->tree[$cnt]['level']] = $cnt;
+               if (!$this->tree[$cnt]['child_of_root_node']) {
+                       $this->tree[$cnt]['father_node'] = $current_node[$this->tree[$cnt]['level']-1];
+               }
+               $VALUES = '';
+               $SQLDump .= 'INSERT INTO ';
+               $SQLDump .= $this->tableName;
+               $SQLDump .= ' (';
+               $SQLDump .= $this->tableFields['id'] . ', ';
+               $VALUES .= "'" . 10*$cnt . "', ";
+               $SQLDump .= $this->tableFields['parent_id'] . ', ';
+               if (isset($this->tree[$cnt]['father_node']) && $this->tree[$cnt]['father_node'] != 0) {
+                       $VALUES .= "'" . 10*$this->tree[$cnt]['father_node'] . "', ";
+               } else {
+                       $VALUES .= "'1', ";
+               }
+               $SQLDump .= $this->tableFields['text'] . ', ';
+               $foobar = $this->tree[$cnt]['text'];
+               if ($foobar != '') {
+                       if ($db_type != 'sqlite') {
+                               $foobar = addslashes($foobar);
+                       } else {
+                               $foobar = sqlite_escape_string($foobar);
+                       }
+               }
+               $VALUES .= "'$foobar', ";
+               $SQLDump .= $this->tableFields['href'] . ', ';
+               $VALUES .= "'" . $this->tree[$cnt]['href'] . "', ";
+               if ($this->tableFields['title'] != "''") {
+                       $SQLDump .= $this->tableFields['title'] . ', ';
+                       $foobar = $this->tree[$cnt]['title'];
+                       if ($foobar != '') {
+                               if ($db_type != 'sqlite') {
+                                       $foobar = addslashes($foobar);
+                               } else {
+                                       $foobar = sqlite_escape_string($foobar);
+                               }
+                       }
+                       $VALUES .= "'$foobar', ";
+               }
+               if ($this->tableFields['icon'] != "''") {
+                       $SQLDump .= $this->tableFields['icon'] . ', ';
+                       $VALUES .= "'" . $this->tree[$cnt]['icon'] . "', ";
+               }
+               if ($this->tableFields['target'] != "''") {
+                       $SQLDump .= $this->tableFields['target'] . ', ';
+                       $VALUES .= "'" . $this->tree[$cnt]['target'] . "', ";
+               }
+               if ($this->tableFields['orderfield'] != "''") {
+                       $SQLDump .= $this->tableFields['orderfield'] . ', ';
+                       $VALUES .= "'" . 10*$cnt . "', ";
+               }
+               if ($this->tableFields['expanded'] != "''") {
+                       $SQLDump .= $this->tableFields['expanded'] . ', ';
+                       $this->tree[$cnt]['expanded'] = (int) $this->tree[$cnt]['expanded'];
+                       $VALUES .= "'" . $this->tree[$cnt]['expanded'] . "', ";
+               }
+               $SQLDump = substr($SQLDump, 0, -2);
+               $VALUES = substr($VALUES, 0, -2);
+               $SQLDump .= ") VALUES ($VALUES);\n";
+       }
+       return $SQLDump;
+}
+
+} /* END OF CLASS */
+
+?>
diff --git a/gosa-core/include/utils/layer-menu/lib/layersmenu.inc.php b/gosa-core/include/utils/layer-menu/lib/layersmenu.inc.php
new file mode 100644 (file)
index 0000000..b110e9c
--- /dev/null
@@ -0,0 +1,942 @@
+<?php
+// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
+
+/**
+* This file contains the code of the LayersMenu class.
+* @package PHPLayersMenu
+*/
+
+/**
+* This is the LayersMenu class of the PHP Layers Menu library.
+*
+* This class depends on the LayersMenuCommon class and on the PEAR conforming version of the PHPLib Template class, i.e. on HTML_Template_PHPLIB
+*
+* @version 3.2.0-rc
+* @package PHPLayersMenu
+*/
+class LayersMenu extends LayersMenuCommon
+{
+
+/**
+* The template to be used for the first level menu of a horizontal menu.
+*
+* The value of this variable is significant only when preparing
+* a horizontal menu.
+*
+* @access private
+* @var string
+*/
+var $horizontalMenuTpl;
+/**
+* The template to be used for the first level menu of a vertical menu.
+*
+* The value of this variable is significant only when preparing
+* a vertical menu.
+*
+* @access private
+* @var string
+*/
+var $verticalMenuTpl;
+/**
+* The template to be used for submenu layers
+* @access private
+* @var string
+*/
+var $subMenuTpl;
+
+/**
+* A string containing the header needed to use the menu(s) in the page
+* @access private
+* @var string
+*/
+var $header;
+/**
+* This var tells if the header has been made or not
+* @access private
+* @var boolean
+*/
+var $_headerHasBeenMade = false;
+/**
+* The JS vector to list layers
+* @access private
+* @var string
+*/
+var $listl;
+/**
+* The JS vector of keys to know the father of each layer
+* @access private
+* @var string
+*/
+var $father_keys;
+/**
+* The JS vector of vals to know the father of each layer
+* @access private
+* @var string
+*/
+var $father_vals;
+/**
+* The JS function to set initial positions of all layers
+* @access private
+* @var string
+*/
+var $moveLayers;
+/**
+* An array containing the code related to the first level menu of each menu
+* @access private
+* @var array
+*/
+var $_firstLevelMenu;
+/**
+* A string containing the footer needed to use the menu(s) in the page
+* @access private
+* @var string
+*/
+var $footer;
+/**
+* This var tells if the footer has been made or not
+* @access private
+* @var boolean
+*/
+var $_footerHasBeenMade = false;
+
+/**
+* The image used for forward arrows.
+* @access private
+* @var string
+*/
+var $forwardArrowImg;
+/**
+* The image used for down arrows.
+* @access private
+* @var string
+*/
+var $downArrowImg;
+/**
+* A 1x1 transparent icon.
+* @access private
+* @var string
+*/
+var $transparentIcon;
+/**
+* An array to keep trace of layers containing / not containing icons
+* @access private
+* @var array
+*/
+var $_hasIcons;
+/**
+* Top offset for positioning of sub menu layers
+* @access private
+* @var integer
+*/
+var $menuTopShift;
+/**
+* Right offset for positioning of sub menu layers
+* @access private
+* @var integer
+*/
+var $menuRightShift;
+/**
+* Left offset for positioning of sub menu layers
+* @access private
+* @var integer
+*/
+var $menuLeftShift;
+/**
+* Threshold for vertical repositioning of a layer
+* @access private
+* @var integer
+*/
+var $thresholdY;
+/**
+* Step for the left boundaries of layers
+* @access private
+* @var integer
+*/
+var $abscissaStep;
+
+/**
+* The constructor method; it initializates the menu system
+* @return void
+*/
+function LayersMenu(
+       $menuTopShift = 6,      // Gtk2-like
+       $menuRightShift = 7,    // Gtk2-like
+       $menuLeftShift = 2,     // Gtk2-like
+       $thresholdY = 5,
+       $abscissaStep = 140
+       )
+{
+       $this->LayersMenuCommon();
+
+       $this->horizontalMenuTpl = $this->tpldir . 'layersmenu-horizontal_menu.ihtml';
+       $this->verticalMenuTpl = $this->tpldir . 'layersmenu-vertical_menu.ihtml';
+       $this->subMenuTpl = $this->tpldir . 'layersmenu-sub_menu.ihtml';
+
+       $this->header = '';
+       $this->listl = '';
+       $this->father_keys = '';
+       $this->father_vals = '';
+       $this->moveLayers = '';
+       $this->_firstLevelMenu = array();
+       $this->footer = '';
+
+       $this->transparentIcon = 'transparent.png';
+       $this->_hasIcons = array();
+       $this->forwardArrowImg['src'] = 'forward-arrow.png';
+       $this->forwardArrowImg['width'] = 4;
+       $this->forwardArrowImg['height'] = 7;
+       $this->downArrowImg['src'] = 'down-arrow.png';
+       $this->downArrowImg['width'] = 9;
+       $this->downArrowImg['height'] = 5;
+       $this->menuTopShift = $menuTopShift;
+       $this->menuRightShift = $menuRightShift;
+       $this->menuLeftShift = $menuLeftShift;
+       $this->thresholdY = $thresholdY;
+       $this->abscissaStep = $abscissaStep;
+}
+
+/**
+* The method to set the value of menuTopShift
+* @access public
+* @return void
+*/
+function setMenuTopShift($menuTopShift)
+{
+       $this->menuTopShift = $menuTopShift;
+}
+
+/**
+* The method to set the value of menuRightShift
+* @access public
+* @return void
+*/
+function setMenuRightShift($menuRightShift)
+{
+       $this->menuRightShift = $menuRightShift;
+}
+
+/**
+* The method to set the value of menuLeftShift
+* @access public
+* @return void
+*/
+function setMenuLeftShift($menuLeftShift)
+{
+       $this->menuLeftShift = $menuLeftShift;
+}
+
+/**
+* The method to set the value of thresholdY
+* @access public
+* @return void
+*/
+function setThresholdY($thresholdY)
+{
+       $this->thresholdY = $thresholdY;
+}
+
+/**
+* The method to set the value of abscissaStep
+* @access public
+* @return void
+*/
+function setAbscissaStep($abscissaStep)
+{
+       $this->abscissaStep = $abscissaStep;
+}
+
+/**
+* The method to set the dirroot directory
+* @access public
+* @return boolean
+*/
+function setDirroot($dirroot)
+{
+       $oldtpldir = $this->tpldir;
+       if ($foobar = $this->setDirrootCommon($dirroot)) {
+               $this->updateTpldir($oldtpldir);
+       }
+       return $foobar;
+}
+
+/**
+* The method to set the tpldir directory
+* @access public
+* @return boolean
+*/
+function setTpldir($tpldir)
+{
+       $oldtpldir = $this->tpldir;
+       if ($foobar = $this->setTpldirCommon($tpldir)) {
+               $this->updateTpldir($oldtpldir);
+       }
+       return $foobar;
+}
+
+/**
+* The method to update the templates directory path to the new tpldir
+* @access private
+* @return void
+*/
+function updateTpldir($oldtpldir)
+{
+       $oldlength = strlen($oldtpldir);
+       $foobar = strpos($this->horizontalMenuTpl, $oldtpldir);
+       if (!($foobar === false || $foobar != 0)) {
+               $this->horizontalMenuTpl = $this->tpldir . substr($this->horizontalMenuTpl, $oldlength);
+       }
+       $foobar = strpos($this->verticalMenuTpl, $oldtpldir);
+       if (!($foobar === false || $foobar != 0)) {
+               $this->verticalMenuTpl = $this->tpldir . substr($this->verticalMenuTpl, $oldlength);
+       }
+       $foobar = strpos($this->subMenuTpl, $oldtpldir);
+       if (!($foobar === false || $foobar != 0)) {
+               $this->subMenuTpl = $this->tpldir . substr($this->subMenuTpl, $oldlength);
+       }
+}
+
+/**
+* The method to set horizontalMenuTpl
+* @access public
+* @return boolean
+*/
+function setHorizontalMenuTpl($horizontalMenuTpl)
+{
+       if (str_replace('/', '', $horizontalMenuTpl) == $horizontalMenuTpl) {
+               $horizontalMenuTpl = $this->tpldir . $horizontalMenuTpl;
+       }
+       if (!file_exists($horizontalMenuTpl)) {
+               $this->error("setHorizontalMenuTpl: file $horizontalMenuTpl does not exist.");
+               return false;
+       }
+       $this->horizontalMenuTpl = $horizontalMenuTpl;
+       return true;
+}
+
+/**
+* The method to set verticalMenuTpl
+* @access public
+* @return boolean
+*/
+function setVerticalMenuTpl($verticalMenuTpl)
+{
+       if (str_replace('/', '', $verticalMenuTpl) == $verticalMenuTpl) {
+               $verticalMenuTpl = $this->tpldir . $verticalMenuTpl;
+       }
+       if (!file_exists($verticalMenuTpl)) {
+               $this->error("setVerticalMenuTpl: file $verticalMenuTpl does not exist.");
+               return false;
+       }
+       $this->verticalMenuTpl = $verticalMenuTpl;
+       return true;
+}
+
+/**
+* The method to set subMenuTpl
+* @access public
+* @return boolean
+*/
+function setSubMenuTpl($subMenuTpl)
+{
+       if (str_replace('/', '', $subMenuTpl) == $subMenuTpl) {
+               $subMenuTpl = $this->tpldir . $subMenuTpl;
+       }
+       if (!file_exists($subMenuTpl)) {
+               $this->error("setSubMenuTpl: file $subMenuTpl does not exist.");
+               return false;
+       }
+       $this->subMenuTpl = $subMenuTpl;
+       return true;
+}
+
+/**
+* A method to set transparentIcon
+* @access public
+* @param string $transparentIcon a transparentIcon filename (without the path)
+* @return void
+*/
+function setTransparentIcon($transparentIcon)
+{
+       $this->transparentIcon = $transparentIcon;
+}
+
+/**
+* The method to set an image to be used for the forward arrow
+* @access public
+* @param string $forwardArrowImg the forward arrow image filename
+* @return boolean
+*/
+function setForwardArrowImg($forwardArrowImg)
+{
+       if (!file_exists($this->imgdir . $forwardArrowImg)) {
+               $this->error('setForwardArrowImg: file ' . $this->imgdir . $forwardArrowImg . ' does not exist.');
+               return false;
+       }
+       $foobar = getimagesize($this->imgdir . $forwardArrowImg);
+       $this->forwardArrowImg['src'] = $forwardArrowImg;
+       $this->forwardArrowImg['width'] = $foobar[0];
+       $this->forwardArrowImg['height'] = $foobar[1];
+       return true;
+}
+
+/**
+* The method to set an image to be used for the down arrow
+* @access public
+* @param string $downArrowImg the down arrow image filename
+* @return boolean
+*/
+function setDownArrowImg($downArrowImg)
+{
+       if (!file_exists($this->imgdir . $downArrowImg)) {
+               $this->error('setDownArrowImg: file ' . $this->imgdir . $downArrowImg . ' does not exist.');
+               return false;
+       }
+       $foobar = getimagesize($this->imgdir . $downArrowImg);
+       $this->downArrowImg['src'] = $downArrowImg;
+       $this->downArrowImg['width'] = $foobar[0];
+       $this->downArrowImg['height'] = $foobar[1];
+       return true;
+}
+
+/**
+* A method providing parsing needed both for horizontal and vertical menus; it can be useful also with the ProcessLayersMenu extended class
+* @access public
+* @param string $menu_name the name of the menu for which the parsing
+*   has to be performed
+* @return void
+*/
+function parseCommon(
+       $menu_name = '' // non consistent default...
+       )
+{
+       $this->_hasIcons[$menu_name] = false;
+       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the new menu
+               $this->_hasIcons[$cnt] = false;
+               $this->tree[$cnt]['layer_label'] = "L$cnt";
+               $current_node[$this->tree[$cnt]['level']] = $cnt;
+               if (!$this->tree[$cnt]['child_of_root_node']) {
+                       $this->tree[$cnt]['father_node'] = $current_node[$this->tree[$cnt]['level']-1];
+                       $this->father_keys .= ",'L$cnt'";
+                       $this->father_vals .= ",'" . $this->tree[$this->tree[$cnt]['father_node']]['layer_label'] . "'";
+               }
+               $this->tree[$cnt]['not_a_leaf'] = ($this->tree[$cnt+1]['level']>$this->tree[$cnt]['level'] && $cnt<$this->_lastItem[$menu_name]);
+               // if the above condition is true, the node is not a leaf,
+               // hence it has at least a child; if it is false, the node is a leaf
+               if ($this->tree[$cnt]['not_a_leaf']) {
+                       // initialize the corresponding layer content trought a void string
+                       $this->tree[$cnt]['layer_content'] = '';
+                       // the new layer is accounted for in the layers list
+                       $this->listl .= ",'" . $this->tree[$cnt]['layer_label'] . "'";
+               }
+/*
+               if ($this->tree[$cnt]['not_a_leaf']) {
+                       $this->tree[$cnt]['parsed_href'] = '#';
+               }
+*/
+               if ($this->tree[$cnt]['parsed_icon'] == '') {
+                       $this->tree[$cnt]['iconsrc'] = $this->imgwww . $this->transparentIcon;
+                       $this->tree[$cnt]['iconwidth'] = 16;
+                       $this->tree[$cnt]['iconheight'] = 16;
+                       $this->tree[$cnt]['iconalt'] = ' ';
+               } else {
+                       if ($this->tree[$cnt]['level'] > 1) {
+                               $this->_hasIcons[$this->tree[$cnt]['father_node']] = true;
+                       } else {
+                               $this->_hasIcons[$menu_name] = true;
+                       }
+                       $this->tree[$cnt]['iconsrc'] = $this->tree[$cnt]['parsed_icon'];
+                       $this->tree[$cnt]['iconalt'] = 'O';
+               }
+       }
+}
+
+/**
+* A method needed to update the footer both for horizontal and vertical menus
+* @access private
+* @param string $menu_name the name of the menu for which the updating
+*   has to be performed
+* @return void
+*/
+function _updateFooter(
+       $menu_name = '' // non consistent default...
+       )
+{
+       $t = new Template_PHPLIB();
+       $t->setFile('tplfile', $this->subMenuTpl);
+       $t->setBlock('tplfile', 'template', 'template_blck');
+       $t->setBlock('template', 'sub_menu_cell', 'sub_menu_cell_blck');
+       $t->setVar('sub_menu_cell_blck', '');
+       $t->setBlock('template', 'separator', 'separator_blck');
+       $t->setVar('separator_blck', '');
+       $t->setVar('abscissaStep', $this->abscissaStep);
+
+       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {
+               if ($this->tree[$cnt]['not_a_leaf']) {
+                       $t->setVar(array(
+                               'layer_label'           => $this->tree[$cnt]['layer_label'],
+                               'layer_title'           => $this->tree[$cnt]['text'],
+                               'sub_menu_cell_blck'    => $this->tree[$cnt]['layer_content']
+                       ));
+                       $this->footer .= $t->parse('template_blck', 'template');
+               }
+       }
+}
+
+/**
+* Method to preparare a horizontal menu.
+*
+* This method processes items of a menu to prepare the corresponding
+* horizontal menu code updating many variables; it returns the code
+* of the corresponding _firstLevelMenu
+*
+* @access public
+* @param string $menu_name the name of the menu whose items have to be processed
+* @return string
+*/
+function newHorizontalMenu(
+       $menu_name = '' // non consistent default...
+       )
+{
+       if (!isset($this->_firstItem[$menu_name]) || !isset($this->_lastItem[$menu_name])) {
+               $this->error("newHorizontalMenu: the first/last item of the menu '$menu_name' is not defined; please check if you have parsed its menu data.");
+               return 0;
+       }
+
+       $this->parseCommon($menu_name);
+
+       $t = new Template_PHPLIB();
+       $t->setFile('tplfile', $this->horizontalMenuTpl);
+       $t->setBlock('tplfile', 'template', 'template_blck');
+       $t->setBlock('template', 'horizontal_menu_cell', 'horizontal_menu_cell_blck');
+       $t->setVar('horizontal_menu_cell_blck', '');
+       $t->setBlock('horizontal_menu_cell', 'cell_link', 'cell_link_blck');
+       $t->setVar('cell_link_blck', '');
+       $t->setBlock('cell_link', 'cell_icon', 'cell_icon_blck');
+       $t->setVar('cell_icon_blck', '');
+       $t->setBlock('cell_link', 'cell_arrow', 'cell_arrow_blck');
+       $t->setVar('cell_arrow_blck', '');
+
+       $t_sub = new Template_PHPLIB();
+       $t_sub->setFile('tplfile', $this->subMenuTpl);
+       $t_sub->setBlock('tplfile', 'sub_menu_cell', 'sub_menu_cell_blck');
+       $t_sub->setVar('sub_menu_cell_blck', '');
+       $t_sub->setBlock('sub_menu_cell', 'cell_icon', 'cell_icon_blck');
+       $t_sub->setVar('cell_icon_blck', '');
+       $t_sub->setBlock('sub_menu_cell', 'cell_arrow', 'cell_arrow_blck');
+       $t_sub->setVar('cell_arrow_blck', '');
+       $t_sub->setBlock('tplfile', 'separator', 'separator_blck');
+       $t_sub->setVar('separator_blck', '');
+
+       $this->_firstLevelMenu[$menu_name] = '';
+
+       $foobar = $this->_firstItem[$menu_name];
+       $this->moveLayers .= "\tvar " . $menu_name . "TOP = getOffsetTop('" . $menu_name . "L" . $foobar . "');\n";
+       $this->moveLayers .= "\tvar " . $menu_name . "HEIGHT = getOffsetHeight('" . $menu_name . "L" . $foobar . "');\n";
+
+       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the new menu
+               if ($this->tree[$cnt]['not_a_leaf']) {
+                       // geometrical parameters are assigned to the new layer, related to the above mentioned children
+                       if ($this->tree[$cnt]['child_of_root_node']) {
+                               $this->moveLayers .= "\tsetTop('" . $this->tree[$cnt]['layer_label'] . "', "  . $menu_name . "TOP + " . $menu_name . "HEIGHT);\n";
+                               $this->moveLayers .= "\tmoveLayerX1('" . $this->tree[$cnt]['layer_label'] . "', '" . $menu_name . "');\n";
+                       }
+               }
+
+               if ($this->tree[$cnt]['child_of_root_node']) {
+                       if ($this->tree[$cnt]['text'] == '---') {
+                               continue;
+                       }
+                       if ($this->tree[$cnt]['not_a_leaf']) {
+                               $this->tree[$cnt]['onmouseover'] = ' onmouseover="moveLayerX1(' . "'" . $this->tree[$cnt]['layer_label'] . "', '" . $menu_name . "') ; LMPopUp('" . $this->tree[$cnt]['layer_label'] . "'" . ', false);"';
+                       } else {
+                               $this->tree[$cnt]['onmouseover'] = ' onmouseover="shutdown();"';
+                       }
+                       $t->setVar(array(
+                               'menu_layer_label'      => $menu_name . $this->tree[$cnt]['layer_label'],
+                               'imgwww'                => $this->imgwww,
+                               'transparent'           => $this->transparentIcon,
+                               'href'                  => $this->tree[$cnt]['parsed_href'],
+                               'onmouseover'           => $this->tree[$cnt]['onmouseover'],
+                               'title'                 => $this->tree[$cnt]['parsed_title'],
+                               'target'                => $this->tree[$cnt]['parsed_target'],
+                               'text'                  => $this->tree[$cnt]['text'],
+                               'downsrc'               => $this->downArrowImg['src'],
+                               'downwidth'             => $this->downArrowImg['width'],
+                               'downheight'            => $this->downArrowImg['height']
+                       ));
+                       if ($this->tree[$cnt]['parsed_icon'] != '') {
+                               $t->setVar(array(
+                                       'iconsrc'       => $this->tree[$cnt]['iconsrc'],
+                                       'iconwidth'     => $this->tree[$cnt]['iconwidth'],
+                                       'iconheight'    => $this->tree[$cnt]['iconheight'],
+                                       'iconalt'       => $this->tree[$cnt]['iconalt'],
+                               ));
+                               $t->parse('cell_icon_blck', 'cell_icon');
+                       } else {
+                               $t->setVar('cell_icon_blck', '');
+                       }
+                       if ($this->tree[$cnt]['not_a_leaf']) {
+                               $t->parse('cell_arrow_blck', 'cell_arrow');
+                       } else {
+                               $t->setVar('cell_arrow_blck', '');
+                       }
+                       $foobar = $t->parse('cell_link_blck', 'cell_link');
+                       $t->setVar(array(
+                               'cellwidth'             => $this->abscissaStep,
+                               'cell_link_blck'        => $foobar
+                       ));
+                       $t->parse('horizontal_menu_cell_blck', 'horizontal_menu_cell', true);
+               } else {
+                       if ($this->tree[$cnt]['text'] == '---') {
+                               $this->tree[$this->tree[$cnt]['father_node']]['layer_content'] .= $t_sub->parse('separator_blck', 'separator');
+                               continue;
+                       }
+                       if ($this->tree[$cnt]['not_a_leaf']) {
+                               $this->tree[$cnt]['onmouseover'] = ' onmouseover="moveLayerX(' . "'" . $this->tree[$cnt]['layer_label'] . "') ; moveLayerY('" . $this->tree[$cnt]['layer_label'] . "') ; LMPopUp('" . $this->tree[$cnt]['layer_label'] . "'". ', false);"';
+                       } else {
+                               $this->tree[$cnt]['onmouseover'] = ' onmouseover="LMPopUp(' . "'" . $this->tree[$this->tree[$cnt]['father_node']]['layer_label'] . "'" . ', true);"';
+                       }
+                       $t_sub->setVar(array(
+                               'imgwww'        => $this->imgwww,
+                               'transparent'   => $this->transparentIcon,
+                               'href'          => $this->tree[$cnt]['parsed_href'],
+                               'refid'         => 'ref' . $this->tree[$cnt]['layer_label'],
+                               'onmouseover'   => $this->tree[$cnt]['onmouseover'],
+                               'title'         => $this->tree[$cnt]['parsed_title'],
+                               'target'        => $this->tree[$cnt]['parsed_target'],
+                               'text'          => $this->tree[$cnt]['text'],
+                               'arrowsrc'      => $this->forwardArrowImg['src'],
+                               'arrowwidth'    => $this->forwardArrowImg['width'],
+                               'arrowheight'   => $this->forwardArrowImg['height']
+                       ));
+                       if ($this->_hasIcons[$this->tree[$cnt]['father_node']]) {
+                               $t_sub->setVar(array(
+                                       'iconsrc'       => $this->tree[$cnt]['iconsrc'],
+                                       'iconwidth'     => $this->tree[$cnt]['iconwidth'],
+                                       'iconheight'    => $this->tree[$cnt]['iconheight'],
+                                       'iconalt'       => $this->tree[$cnt]['iconalt']
+                               ));
+                               $t_sub->parse('cell_icon_blck', 'cell_icon');
+                       } else {
+                               $t_sub->setVar('cell_icon_blck', '');
+                       }
+                       if ($this->tree[$cnt]['not_a_leaf']) {
+                               $t_sub->parse('cell_arrow_blck', 'cell_arrow');
+                       } else {
+                               $t_sub->setVar('cell_arrow_blck', '');
+                       }
+                       $this->tree[$this->tree[$cnt]['father_node']]['layer_content'] .= $t_sub->parse('sub_menu_cell_blck', 'sub_menu_cell');
+               }
+       }       // end of the "for" cycle scanning all nodes
+
+       $foobar = $this->_firstLevelCnt[$menu_name] * $this->abscissaStep;
+       $t->setVar('menuwidth', $foobar);
+       $t->setVar(array(
+               'layer_label'   => $menu_name,
+               'menubody'      => $this->_firstLevelMenu[$menu_name]
+       ));
+       $this->_firstLevelMenu[$menu_name] = $t->parse('template_blck', 'template');
+
+       $this->_updateFooter($menu_name);
+
+       return $this->_firstLevelMenu[$menu_name];
+}
+
+/**
+* Method to preparare a vertical menu.
+*
+* This method processes items of a menu to prepare the corresponding
+* vertical menu code updating many variables; it returns the code
+* of the corresponding _firstLevelMenu
+*
+* @access public
+* @param string $menu_name the name of the menu whose items have to be processed
+* @return string
+*/
+function newVerticalMenu(
+       $menu_name = '' // non consistent default...
+       )
+{
+       if (!isset($this->_firstItem[$menu_name]) || !isset($this->_lastItem[$menu_name])) {
+               $this->error("newVerticalMenu: the first/last item of the menu '$menu_name' is not defined; please check if you have parsed its menu data.");
+               return 0;
+       }
+
+       $this->parseCommon($menu_name);
+
+       $t = new Template_PHPLIB();
+       $t->setFile('tplfile', $this->verticalMenuTpl);
+       $t->setBlock('tplfile', 'template', 'template_blck');
+       $t->setBlock('template', 'vertical_menu_box', 'vertical_menu_box_blck');
+       $t->setVar('vertical_menu_box_blck', '');
+       $t->setBlock('vertical_menu_box', 'vertical_menu_cell', 'vertical_menu_cell_blck');
+       $t->setVar('vertical_menu_cell_blck', '');
+       $t->setBlock('vertical_menu_cell', 'cell_icon', 'cell_icon_blck');
+       $t->setVar('cell_icon_blck', '');
+       $t->setBlock('vertical_menu_cell', 'cell_arrow', 'cell_arrow_blck');
+       $t->setVar('cell_arrow_blck', '');
+       $t->setBlock('vertical_menu_box', 'separator', 'separator_blck');
+       $t->setVar('separator_blck', '');
+
+       $t_sub = new Template_PHPLIB();
+       $t_sub->setFile('tplfile', $this->subMenuTpl);
+       $t_sub->setBlock('tplfile', 'sub_menu_cell', 'sub_menu_cell_blck');
+       $t_sub->setVar('sub_menu_cell_blck', '');
+       $t_sub->setBlock('sub_menu_cell', 'cell_icon', 'cell_icon_blck');
+       $t_sub->setVar('cell_icon_blck', '');
+       $t_sub->setBlock('sub_menu_cell', 'cell_arrow', 'cell_arrow_blck');
+       $t_sub->setVar('cell_arrow_blck', '');
+       $t_sub->setBlock('tplfile', 'separator', 'separator_blck');
+       $t_sub->setVar('separator_blck', '');
+
+       $this->_firstLevelMenu[$menu_name] = '';
+
+       $this->moveLayers .= "\tvar " . $menu_name . "TOP = getOffsetTop('" . $menu_name . "');\n";
+       $this->moveLayers .= "\tvar " . $menu_name . "LEFT = getOffsetLeft('" . $menu_name . "');\n";
+       $this->moveLayers .= "\tvar " . $menu_name . "WIDTH = getOffsetWidth('" . $menu_name . "');\n";
+
+       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {  // this counter scans all nodes of the new menu
+               if ($this->tree[$cnt]['not_a_leaf']) {
+                       // geometrical parameters are assigned to the new layer, related to the above mentioned children
+                       if ($this->tree[$cnt]['child_of_root_node']) {
+                               $this->moveLayers .= "\tsetLeft('" . $this->tree[$cnt]['layer_label'] . "', " . $menu_name . "LEFT + " . $menu_name . "WIDTH - menuRightShift);\n";
+                       }
+               }
+
+               if ($this->tree[$cnt]['child_of_root_node']) {
+                       if ($this->tree[$cnt]['text'] == '---') {
+                               $this->_firstLevelMenu[$menu_name] .= $t->parse('separator_blck', 'separator');
+                               continue;
+                       }
+                       if ($this->tree[$cnt]['not_a_leaf']) {
+                               $this->tree[$cnt]['onmouseover'] = ' onmouseover="moveLayerX(' . "'" . $this->tree[$cnt]['layer_label'] . "') ; moveLayerY('" . $this->tree[$cnt]['layer_label'] . "') ; LMPopUp('" . $this->tree[$cnt]['layer_label'] . "'" . ', false);"';
+                       } else {
+                               $this->tree[$cnt]['onmouseover'] = ' onmouseover="shutdown();"';
+                       }
+                       $t->setVar(array(
+                               'imgwww'        => $this->imgwww,
+                               'transparent'   => $this->transparentIcon,
+                               'href'          => $this->tree[$cnt]['parsed_href'],
+                               'refid'         => 'ref' . $this->tree[$cnt]['layer_label'],
+                               'onmouseover'   => $this->tree[$cnt]['onmouseover'],
+                               'title'         => $this->tree[$cnt]['parsed_title'],
+                               'target'        => $this->tree[$cnt]['parsed_target'],
+                               'text'          => $this->tree[$cnt]['text'],
+                               'arrowsrc'      => $this->forwardArrowImg['src'],
+                               'arrowwidth'    => $this->forwardArrowImg['width'],
+                               'arrowheight'   => $this->forwardArrowImg['height']
+                       ));
+                       if ($this->_hasIcons[$menu_name]) {
+                               $t->setVar(array(
+                                       'iconsrc'       => $this->tree[$cnt]['iconsrc'],
+                                       'iconwidth'     => $this->tree[$cnt]['iconwidth'],
+                                       'iconheight'    => $this->tree[$cnt]['iconheight'],
+                                       'iconalt'       => $this->tree[$cnt]['iconalt']
+                               ));
+                               $t->parse('cell_icon_blck', 'cell_icon');
+                       } else {
+                               $t->setVar('cell_icon_blck', '');
+                       }
+                       if ($this->tree[$cnt]['not_a_leaf']) {
+                               $t->parse('cell_arrow_blck', 'cell_arrow');
+                       } else {
+                               $t->setVar('cell_arrow_blck', '');
+                       }
+                       $this->_firstLevelMenu[$menu_name] .= $t->parse('vertical_menu_cell_blck', 'vertical_menu_cell');
+               } else {
+                       if ($this->tree[$cnt]['text'] == '---') {
+                               $this->tree[$this->tree[$cnt]['father_node']]['layer_content'] .= $t_sub->parse('separator_blck', 'separator');
+                               continue;
+                       }
+                       if ($this->tree[$cnt]['not_a_leaf']) {
+                               $this->tree[$cnt]['onmouseover'] = ' onmouseover="moveLayerX(' . "'" . $this->tree[$cnt]['layer_label'] . "') ; moveLayerY('" . $this->tree[$cnt]['layer_label'] . "') ; LMPopUp('" . $this->tree[$cnt]['layer_label'] . "'" . ', false);"';
+                       } else {
+                               $this->tree[$cnt]['onmouseover'] = ' onmouseover="LMPopUp(' . "'" . $this->tree[$this->tree[$cnt]['father_node']]['layer_label'] . "'" . ', true);"';
+                       }
+                       $t_sub->setVar(array(
+                               'imgwww'        => $this->imgwww,
+                               'transparent'   => $this->transparentIcon,
+                               'href'          => $this->tree[$cnt]['parsed_href'],
+                               'refid'         => 'ref' . $this->tree[$cnt]['layer_label'],
+                               'onmouseover'   => $this->tree[$cnt]['onmouseover'],
+                               'title'         => $this->tree[$cnt]['parsed_title'],
+                               'target'        => $this->tree[$cnt]['parsed_target'],
+                               'text'          => $this->tree[$cnt]['text'],
+                               'arrowsrc'      => $this->forwardArrowImg['src'],
+                               'arrowwidth'    => $this->forwardArrowImg['width'],
+                               'arrowheight'   => $this->forwardArrowImg['height']
+                       ));
+                       if ($this->_hasIcons[$this->tree[$cnt]['father_node']]) {
+                               $t_sub->setVar(array(
+                                       'iconsrc'       => $this->tree[$cnt]['iconsrc'],
+                                       'iconwidth'     => $this->tree[$cnt]['iconwidth'],
+                                       'iconheight'    => $this->tree[$cnt]['iconheight'],
+                                       'iconalt'       => $this->tree[$cnt]['iconalt']
+                               ));
+                               $t_sub->parse('cell_icon_blck', 'cell_icon');
+                       } else {
+                               $t_sub->setVar('cell_icon_blck', '');
+                       }
+                       if ($this->tree[$cnt]['not_a_leaf']) {
+                               $t_sub->parse('cell_arrow_blck', 'cell_arrow');
+                       } else {
+                               $t_sub->setVar('cell_arrow_blck', '');
+                       }
+                       $this->tree[$this->tree[$cnt]['father_node']]['layer_content'] .= $t_sub->parse('sub_menu_cell_blck', 'sub_menu_cell');
+               }
+       }       // end of the "for" cycle scanning all nodes
+
+       $t->setVar(array(
+               'menu_name'                     => $menu_name,
+               'vertical_menu_cell_blck'       => $this->_firstLevelMenu[$menu_name],
+               'separator_blck'                => ''
+       ));
+       $this->_firstLevelMenu[$menu_name] = $t->parse('vertical_menu_box_blck', 'vertical_menu_box');
+       $t->setVar('abscissaStep', $this->abscissaStep);
+       $t->setVar(array(
+               'layer_label'                   => $menu_name,
+               'vertical_menu_box_blck'        => $this->_firstLevelMenu[$menu_name]
+       ));
+       $this->_firstLevelMenu[$menu_name] = $t->parse('template_blck', 'template');
+
+       $this->_updateFooter($menu_name);
+
+       return $this->_firstLevelMenu[$menu_name];
+}
+
+/**
+* Method to prepare the header.
+*
+* This method obtains the header using collected informations
+* and the suited JavaScript template; it returns the code of the header
+*
+* @access public
+* @return string
+*/
+function makeHeader()
+{
+       $t = new Template_PHPLIB();
+       $this->listl = 'listl = [' . substr($this->listl, 1) . '];';
+       $this->father_keys = 'father_keys = [' . substr($this->father_keys, 1) . '];';
+       $this->father_vals = 'father_vals = [' . substr($this->father_vals, 1) . '];';
+       $t->setFile('tplfile', $this->libjsdir . 'layersmenu-header.ijs');
+       $t->setVar(array(
+               'packageName'   => $this->_packageName,
+               'version'       => $this->version,
+               'copyright'     => $this->copyright,
+               'author'        => $this->author,
+               'menuTopShift'  => $this->menuTopShift,
+               'menuRightShift'=> $this->menuRightShift,
+               'menuLeftShift' => $this->menuLeftShift,
+               'thresholdY'    => $this->thresholdY,
+               'abscissaStep'  => $this->abscissaStep,
+               'listl'         => $this->listl,
+               'nodesCount'    => $this->_nodesCount,
+               'father_keys'   => $this->father_keys,
+               'father_vals'   => $this->father_vals,
+               'moveLayers'    => $this->moveLayers
+       ));
+       $this->header = $t->parse('out', 'tplfile');
+       $this->_headerHasBeenMade = true;
+       return $this->header;
+}
+
+/**
+* Method that returns the code of the header
+* @access public
+* @return string
+*/
+function getHeader()
+{
+       if (!$this->_headerHasBeenMade) {
+               $this->makeHeader();
+       }
+       return $this->header;
+}
+
+/**
+* Method that prints the code of the header
+* @access public
+* @return void
+*/
+function printHeader()
+{
+       print $this->getHeader();
+}
+
+/**
+* Method that returns the code of the requested _firstLevelMenu
+* @access public
+* @param string $menu_name the name of the menu whose _firstLevelMenu
+*   has to be returned
+* @return string
+*/
+function getMenu($menu_name)
+{
+       return $this->_firstLevelMenu[$menu_name];
+}
+
+/**
+* Method that prints the code of the requested _firstLevelMenu
+* @access public
+* @param string $menu_name the name of the menu whose _firstLevelMenu
+*   has to be printed
+* @return void
+*/
+function printMenu($menu_name)
+{
+       print $this->_firstLevelMenu[$menu_name];
+}
+
+/**
+* Method to prepare the footer.
+*
+* This method obtains the footer using collected informations
+* and the suited JavaScript template; it returns the code of the footer
+*
+* @access public
+* @return string
+*/
+function makeFooter()
+{
+       $t = new Template_PHPLIB();
+       $t->setFile('tplfile', $this->libjsdir . 'layersmenu-footer.ijs');
+       $t->setVar(array(
+               'packageName'   => $this->_packageName,
+               'version'       => $this->version,
+               'copyright'     => $this->copyright,
+               'author'        => $this->author,
+               'footer'        => $this->footer
+               
+       ));
+       $this->footer = $t->parse('out', 'tplfile');
+       $this->_footerHasBeenMade = true;
+       return $this->footer;
+}
+
+/**
+* Method that returns the code of the footer
+* @access public
+* @return string
+*/
+function getFooter()
+{
+       if (!$this->_footerHasBeenMade) {
+               $this->makeFooter();
+       }
+       return $this->footer;
+}
+
+/**
+* Method that prints the code of the footer
+* @access public
+* @return void
+*/
+function printFooter()
+{
+       print $this->getFooter();
+}
+
+} /* END OF CLASS */
+
+?>
diff --git a/gosa-core/include/utils/layer-menu/lib/phptreemenu.inc.php b/gosa-core/include/utils/layer-menu/lib/phptreemenu.inc.php
new file mode 100644 (file)
index 0000000..fb43d35
--- /dev/null
@@ -0,0 +1,448 @@
+<?php
+// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
+
+/**
+* This file contains the code of the PHPTreeMenu class.
+* @package PHPLayersMenu
+*/
+
+/**
+* This is the PHPTreeMenu class of the PHP Layers Menu library.
+*
+* This class depends on the LayersMenuCommon class.  It provides "server-side" (PHP-based) tree menus, that to do not require JavaScript to work.
+*
+* @version 3.2.0-rc
+* @package PHPLayersMenu
+*/
+class PHPTreeMenu extends LayersMenuCommon
+{
+
+/**
+* The character used for the PHP Tree Menu in the query string to separate items ids
+* @access private
+* @var string
+*/
+var $phpTreeMenuSeparator;
+/**
+* The default value of the expansion string for the PHP Tree Menu
+* @access private
+* @var string
+*/
+var $phpTreeMenuDefaultExpansion;
+/**
+* Type of images used for the Tree Menu
+* @access private
+* @var string
+*/
+var $phpTreeMenuImagesType;
+/**
+* Prefix for filenames of images of a theme
+* @access private
+* @var string
+*/
+var $phpTreeMenuTheme;
+/**
+* An array where we store the PHP Tree Menu code for each menu
+* @access private
+* @var array
+*/
+var $_phpTreeMenu;
+
+/**
+* The constructor method; it initializates some variables
+* @return void
+*/
+function PHPTreeMenu()
+{
+       $this->LayersMenuCommon();
+
+       $this->phpTreeMenuSeparator = '|';
+       $this->phpTreeMenuDefaultExpansion = '';
+       $this->phpTreeMenuImagesType = 'png';
+       $this->phpTreeMenuTheme = '';
+       $this->_phpTreeMenu = array();
+}
+
+/**
+* The method to set the dirroot directory
+* @access public
+* @return boolean
+*/
+function setDirroot($dirroot)
+{
+       return $this->setDirrootCommon($dirroot);
+}
+
+/**
+* The method to set the value of separator for the Tree Menu query string
+* @access public
+* @return void
+*/
+function setPHPTreeMenuSeparator($phpTreeMenuSeparator)
+{
+       $this->phpTreeMenuSeparator = $phpTreeMenuSeparator;
+}
+
+/**
+* The method to set the default value of the expansion string for the PHP Tree Menu
+* @access public
+* @return void
+*/
+function setPHPTreeMenuDefaultExpansion($phpTreeMenuDefaultExpansion)
+{
+       $this->phpTreeMenuDefaultExpansion = $phpTreeMenuDefaultExpansion;
+}
+
+/**
+* The method to set the type of images used for the Tree Menu
+* @access public
+* @return void
+*/
+function setPHPTreeMenuImagesType($phpTreeMenuImagesType)
+{
+       $this->phpTreeMenuImagesType = $phpTreeMenuImagesType;
+}
+
+/**
+* The method to set the prefix for filenames of images of a theme
+* @access public
+* @return void
+*/
+function setPHPTreeMenuTheme($phpTreeMenuTheme)
+{
+       $this->phpTreeMenuTheme = $phpTreeMenuTheme;
+}
+
+/**
+* Method to prepare a new PHP Tree Menu.
+*
+* This method processes items of a menu and parameters submitted
+* through GET (i.e. nodes to be expanded) to prepare and return
+* the corresponding Tree Menu code.
+*
+* @access public
+* @param string $menu_name the name of the menu whose items have to be processed
+* @return string
+*/
+function newPHPTreeMenu(
+       $menu_name = '' // non consistent default...
+       )
+{
+       $protocol = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';
+       $this_host = (isset($_SERVER['HTTP_HOST'])) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
+       if (isset($_SERVER['SCRIPT_NAME'])) {
+               $me = $_SERVER['SCRIPT_NAME'];
+       } elseif (isset($_SERVER['REQUEST_URI'])) {
+               $me = $_SERVER['REQUEST_URI'];
+       } elseif (isset($_SERVER['PHP_SELF'])) {
+               $me = $_SERVER['PHP_SELF'];
+       } elseif (isset($_SERVER['PATH_INFO'])) {
+               $me = $_SERVER['PATH_INFO'];
+       }
+       $url = $protocol . $this_host . $me;
+       $query = '';
+       reset($_GET);
+       while (list($key, $value) = each($_GET)) {
+               if ($key != 'p' && $value != '') {
+                       $query .= '&amp;' . $key . '=' . $value;
+               }
+       }
+       if ($query != '') {
+               $query = '?' . substr($query, 5) . '&amp;p=';
+       } else {
+               $query = '?p=';
+       }
+       $p = (isset($_GET['p'])) ? $_GET['p'] : $this->phpTreeMenuDefaultExpansion;
+
+/* ********************************************************* */
+/* Based on TreeMenu 1.1 by Bjorge Dijkstra (bjorge@gmx.net) */
+/* ********************************************************* */
+       $this->_phpTreeMenu[$menu_name] = '';
+
+       $img_collapse                   = $this->imgwww . $this->phpTreeMenuTheme . 'tree_collapse.' . $this->phpTreeMenuImagesType;
+       $alt_collapse                   = '--';
+       $img_collapse_corner            = $this->imgwww . $this->phpTreeMenuTheme . 'tree_collapse_corner.' . $this->phpTreeMenuImagesType;
+       $alt_collapse_corner            = '--';
+       $img_collapse_corner_first      = $this->imgwww . $this->phpTreeMenuTheme . 'tree_collapse_corner_first.' . $this->phpTreeMenuImagesType;
+       $alt_collapse_corner_first      = '--';
+       $img_collapse_first             = $this->imgwww . $this->phpTreeMenuTheme . 'tree_collapse_first.' . $this->phpTreeMenuImagesType;
+       $alt_collapse_first             = '--';
+       $img_corner                     = $this->imgwww . $this->phpTreeMenuTheme . 'tree_corner.' . $this->phpTreeMenuImagesType;
+       $alt_corner                     = '`-';
+       $img_expand                     = $this->imgwww . $this->phpTreeMenuTheme . 'tree_expand.' . $this->phpTreeMenuImagesType;
+       $alt_expand                     = '+-';
+       $img_expand_corner              = $this->imgwww . $this->phpTreeMenuTheme . 'tree_expand_corner.' . $this->phpTreeMenuImagesType;
+       $alt_expand_corner              = '+-';
+       $img_expand_corner_first        = $this->imgwww . $this->phpTreeMenuTheme . 'tree_expand_corner_first.' . $this->phpTreeMenuImagesType;
+       $alt_expand_corner_first        = '+-';
+       $img_expand_first               = $this->imgwww . $this->phpTreeMenuTheme . 'tree_expand_first.' . $this->phpTreeMenuImagesType;
+       $alt_expand_first               = '+-';
+       $img_folder_closed              = $this->imgwww . $this->phpTreeMenuTheme . 'tree_folder_closed.' . $this->phpTreeMenuImagesType;
+       $alt_folder_closed              = '->';
+       $img_folder_open                = $this->imgwww . $this->phpTreeMenuTheme . 'tree_folder_open.' . $this->phpTreeMenuImagesType;
+       $alt_folder_open                = '->';
+       $img_leaf                       = $this->imgwww . $this->phpTreeMenuTheme . 'tree_leaf.' . $this->phpTreeMenuImagesType;
+       $alt_leaf                       = '->';
+       $img_space                      = $this->imgwww . $this->phpTreeMenuTheme . 'tree_space.' . $this->phpTreeMenuImagesType;
+       $alt_space                      = '  ';
+       $img_split                      = $this->imgwww . $this->phpTreeMenuTheme . 'tree_split.' . $this->phpTreeMenuImagesType;
+       $alt_split                      = '|-';
+       $img_split_first                = $this->imgwww . $this->phpTreeMenuTheme . 'tree_split_first.' . $this->phpTreeMenuImagesType;
+       $alt_split_first                = '|-';
+       $img_vertline                   = $this->imgwww . $this->phpTreeMenuTheme . 'tree_vertline.' . $this->phpTreeMenuImagesType;
+       $alt_vertline                   = '| ';
+
+       for ($i=$this->_firstItem[$menu_name]; $i<=$this->_lastItem[$menu_name]; $i++) {
+               $expand[$i] = 0;
+               $visible[$i] = 0;
+               $this->tree[$i]['last_item'] = 0;
+       }
+       for ($i=0; $i<=$this->_maxLevel[$menu_name]; $i++) {
+               $levels[$i] = 0;
+       }
+
+       // Get numbers of nodes to be expanded
+       if ($p != '') {
+               $explevels = explode($this->phpTreeMenuSeparator, $p);
+               $explevels_count = count($explevels);
+               for ($i=0; $i<$explevels_count; $i++) {
+                       $expand[$explevels[$i]] = 1;
+               }
+       }
+
+       // Find last nodes of subtrees
+       $last_level = $this->_maxLevel[$menu_name];
+       for ($i=$this->_lastItem[$menu_name]; $i>=$this->_firstItem[$menu_name]; $i--) {
+               if ($this->tree[$i]['level'] < $last_level) {
+                       for ($j=$this->tree[$i]['level']+1; $j<=$this->_maxLevel[$menu_name]; $j++) {
+                               $levels[$j] = 0;
+                       }
+               }
+               if ($levels[$this->tree[$i]['level']] == 0) {
+                       $levels[$this->tree[$i]['level']] = 1;
+                       $this->tree[$i]['last_item'] = 1;
+               } else {
+                       $this->tree[$i]['last_item'] = 0;
+               }
+               $last_level = $this->tree[$i]['level'];
+       }
+
+       // Determine visible nodes
+       // all root nodes are always visible
+       for ($i=$this->_firstItem[$menu_name]; $i<=$this->_lastItem[$menu_name]; $i++) {
+               if ($this->tree[$i]['level'] == 1) {
+                       $visible[$i] = 1;
+               }
+       }
+       if (isset($explevels)) {
+               for ($i=0; $i<$explevels_count; $i++) {
+                       $n = $explevels[$i];
+                       if ($n >= $this->_firstItem[$menu_name] && $n <= $this->_lastItem[$menu_name] && $visible[$n] == 1 && $expand[$n] == 1) {
+                               $j = $n + 1;
+                               while ($j<=$this->_lastItem[$menu_name] && $this->tree[$j]['level']>$this->tree[$n]['level']) {
+                                       if ($this->tree[$j]['level'] == $this->tree[$n]['level']+1) {
+                                               $visible[$j] = 1;
+                                       }
+                                       $j++;
+                               }
+                       }
+               }
+       }
+
+       // Output nicely formatted tree
+       for ($i=0; $i<$this->_maxLevel[$menu_name]; $i++) {
+               $levels[$i] = 1;
+       }
+       $max_visible_level = 0;
+       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {
+               if ($visible[$cnt]) {
+                       $max_visible_level = max($max_visible_level, $this->tree[$cnt]['level']);
+               }
+       }
+       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {
+               if ($this->tree[$cnt]['text'] == '---') {
+                       continue;       // separators are significant only for layers-based menus
+               }
+
+               if (isset($this->tree[$cnt]['selected']) && $this->tree[$cnt]['selected']) {
+                       $linkstyle = 'phplmselected';
+               } else {
+                       $linkstyle = 'phplm';
+               }
+
+               if ($visible[$cnt]) {
+                       $this->_phpTreeMenu[$menu_name] .= '<div class="treemenudiv">' . "\n"; 
+
+                       // vertical lines from higher levels
+                       for ($i=0; $i<$this->tree[$cnt]['level']-1; $i++) {
+                               if ($levels[$i] == 1) {
+                                       $img = $img_vertline;
+                                       $alt = $alt_vertline;
+                               } else {
+                                       $img = $img_space;
+                                       $alt = $alt_space;
+                               }
+                               $this->_phpTreeMenu[$menu_name] .= '<img align="top" border="0" class="imgs" src="' . $img . '" alt="' . $alt . '" />';
+                       }
+
+                       $not_a_leaf = $cnt<$this->_lastItem[$menu_name] && $this->tree[$cnt+1]['level']>$this->tree[$cnt]['level'];
+
+                       if ($not_a_leaf) {
+                               // Create expand/collapse parameters
+                               $params = '';
+                               for ($i=$this->_firstItem[$menu_name]; $i<=$this->_lastItem[$menu_name]; $i++) {
+                                       if ($expand[$i] == 1 && $cnt!= $i || ($expand[$i] == 0 && $cnt == $i)) {
+                                               $params .= $this->phpTreeMenuSeparator . $i;
+                                       }
+                               }
+                               if ($params != '') {
+                                       $params = substr($params, 1);
+                               }
+                       }
+
+                       if ($this->tree[$cnt]['last_item'] == 1) {
+                       // corner at end of subtree or t-split
+                               if ($not_a_leaf) {
+                                       if ($expand[$cnt] == 0) {
+                                               if ($cnt == $this->_firstItem[$menu_name]) {
+                                                       $img = $img_expand_corner_first;
+                                                       $alt = $alt_expand_corner_first;
+                                               } else {
+                                                       $img = $img_expand_corner;
+                                                       $alt = $alt_expand_corner;
+                                               }
+                                       } else {
+                                               if ($cnt == $this->_firstItem[$menu_name]) {
+                                                       $img = $img_collapse_corner_first;
+                                                       $alt = $alt_collapse_corner_first;
+                                               } else {
+                                                       $img = $img_collapse_corner;
+                                                       $alt = $alt_collapse_corner;
+                                               }
+                                       }
+                                       $this->_phpTreeMenu[$menu_name] .= '<a name="' . $cnt . '" class="' . $linkstyle . '" href="' . $url . $query . $params . '#' . $cnt . '"><img align="top" border="0" class="imgs" src="' . $img . '" alt="' . $alt . '" /></a>';
+                               } else {
+                                       $this->_phpTreeMenu[$menu_name] .= '<img align="top" border="0" class="imgs" src="' . $img_corner . '" alt="' . $alt_corner . '" />';
+                               }
+                               $levels[$this->tree[$cnt]['level']-1] = 0;
+                       } else {
+                               if ($not_a_leaf) {
+                                       if ($expand[$cnt] == 0) {
+                                               if ($cnt == $this->_firstItem[$menu_name]) {
+                                                       $img = $img_expand_first;
+                                                       $alt = $alt_expand_first;
+                                               } else {
+                                                       $img = $img_expand;
+                                                       $alt = $alt_expand;
+                                               }
+                                       } else {
+                                               if ($cnt == $this->_firstItem[$menu_name]) {
+                                                       $img = $img_collapse_first;
+                                                       $alt = $alt_collapse_first;
+                                               } else {
+                                                       $img = $img_collapse;
+                                                       $alt = $alt_collapse;
+                                               }
+                                       }
+                                       $this->_phpTreeMenu[$menu_name] .= '<a name="' . $cnt . '" class="' . $linkstyle . '" href="' . $url . $query . $params . '#' . $cnt . '"><img align="top" border="0" class="imgs" src="' . $img . '" alt="' . $alt . '" /></a>';
+                               } else {
+                                       if ($cnt == $this->_firstItem[$menu_name]) {
+                                               $img = $img_split_first;
+                                               $alt = $alt_split_first;
+                                       } else {
+                                               $img = $img_split;
+                                               $alt = $alt_split;
+                                       }
+                                       $this->_phpTreeMenu[$menu_name] .= '<img align="top" border="0" class="imgs" src="' . $img . '" alt="' . $alt . '" />';
+                               }
+                               $levels[$this->tree[$cnt]['level']-1] = 1;
+                       }
+
+                       if ($this->tree[$cnt]['parsed_href'] == '' || $this->tree[$cnt]['parsed_href'] == '#') {
+                               $a_href_open_img = '';
+                               $a_href_close_img = '';
+                               $a_href_open = '<a class="phplmnormal">';
+                               $a_href_close = '</a>';
+                       } else {
+                               $a_href_open_img = '<a href="' . $this->tree[$cnt]['parsed_href'] . '"' . $this->tree[$cnt]['parsed_title'] . $this->tree[$cnt]['parsed_target'] . '>';
+                               $a_href_close_img = '</a>';
+                               $a_href_open = '<a href="' . $this->tree[$cnt]['parsed_href'] . '"' . $this->tree[$cnt]['parsed_title'] . $this->tree[$cnt]['parsed_target'] . ' class="' . $linkstyle . '">';
+                               $a_href_close = '</a>';
+                       }
+
+                       if ($not_a_leaf) {
+                               if ($expand[$cnt] == 1) {
+                                       $img = $img_folder_open;
+                                       $alt = $alt_folder_open;
+                               } else {
+                                       $img = $img_folder_closed;
+                                       $alt = $alt_folder_closed;
+                               }
+                               $this->_phpTreeMenu[$menu_name] .= $a_href_open_img . '<img align="top" border="0" class="imgs" src="' . $img . '" alt="' . $alt . '" />' . $a_href_close_img;
+                       } else {
+                               if ($this->tree[$cnt]['parsed_icon'] != '') {
+                                       $this->_phpTreeMenu[$menu_name] .= $a_href_open_img . '<img align="top" border="0" src="' . $this->tree[$cnt]['parsed_icon'] . '" width="' . $this->tree[$cnt]['iconwidth'] . '" height="' . $this->tree[$cnt]['iconheight'] . '" alt="' . $alt_leaf . '" />' . $a_href_close_img;
+                               } else {
+                                       $this->_phpTreeMenu[$menu_name] .= $a_href_open_img . '<img align="top" border="0" class="imgs" src="' . $img_leaf . '" alt="' . $alt_leaf . '" />' . $a_href_close_img;
+                               }
+                       }
+
+                       // output item text
+                       $foobar = $max_visible_level - $this->tree[$cnt]['level'] + 1;
+                       if ($foobar > 1) {
+                               $colspan = ' colspan="' . $foobar . '"';
+                       } else {
+                               $colspan = '';
+                       }
+                       $this->_phpTreeMenu[$menu_name] .= '&nbsp;' . $a_href_open . $this->tree[$cnt]['parsed_text'] . $a_href_close . "\n";
+                       $this->_phpTreeMenu[$menu_name] .= '</div>' . "\n";
+               }
+       }
+/* ********************************************************* */
+
+/*
+       $this->_phpTreeMenu[$menu_name] =
+       '<div class="phplmnormal">' . "\n" .
+       $this->_phpTreeMenu[$menu_name] .
+       '</div>' . "\n";
+*/
+       // Some (old) browsers do not support the "white-space: nowrap;" CSS property...
+       $this->_phpTreeMenu[$menu_name] =
+       '<table cellspacing="0" cellpadding="0" border="0">' . "\n" .
+       '<tr>' . "\n" .
+       '<td class="phplmnormal" nowrap="nowrap">' . "\n" .
+       $this->_phpTreeMenu[$menu_name] .
+       '</td>' . "\n" .
+       '</tr>' . "\n" .
+       '</table>' . "\n";
+
+       return $this->_phpTreeMenu[$menu_name];
+}
+
+/**
+* Method that returns the code of the requested PHP Tree Menu
+* @access public
+* @param string $menu_name the name of the menu whose PHP Tree Menu code
+*   has to be returned
+* @return string
+*/
+function getPHPTreeMenu($menu_name)
+{
+       return $this->_phpTreeMenu[$menu_name];
+}
+
+/**
+* Method that prints the code of the requested PHP Tree Menu
+* @access public
+* @param string $menu_name the name of the menu whose PHP Tree Menu code
+*   has to be printed
+* @return void
+*/
+function printPHPTreeMenu($menu_name)
+{
+       print $this->_phpTreeMenu[$menu_name];
+}
+
+} /* END OF CLASS */
+
+?>
diff --git a/gosa-core/include/utils/layer-menu/lib/plainmenu.inc.php b/gosa-core/include/utils/layer-menu/lib/plainmenu.inc.php
new file mode 100644 (file)
index 0000000..0580f50
--- /dev/null
@@ -0,0 +1,281 @@
+<?php
+// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
+
+/**
+* This file contains the code of the PlainMenu class.
+* @package PHPLayersMenu
+*/
+
+/**
+* This is the PlainMenu class of the PHP Layers Menu library.
+*
+* This class depends on the LayersMenuCommon class and on the PEAR conforming version of the PHPLib Template class, i.e. on HTML_Template_PHPLIB.  It provides plain menus, that to do not require JavaScript to work.
+*
+* @version 3.2.0-rc
+* @package PHPLayersMenu
+*/
+class PlainMenu extends LayersMenuCommon
+{
+
+/**
+* The template to be used for the Plain Menu
+*/
+var $plainMenuTpl;
+/**
+* An array where we store the Plain Menu code for each menu
+* @access private
+* @var array
+*/
+var $_plainMenu;
+
+/**
+* The template to be used for the Horizontal Plain Menu
+*/
+var $horizontalPlainMenuTpl;
+/**
+* An array where we store the Horizontal Plain Menu code for each menu
+* @access private
+* @var array
+*/
+var $_horizontalPlainMenu;
+
+/**
+* The constructor method; it initializates some variables
+* @return void
+*/
+function PlainMenu()
+{
+       $this->LayersMenuCommon();
+
+       $this->plainMenuTpl = $this->tpldir . 'layersmenu-plain_menu.ihtml';
+       $this->_plainMenu = array();
+
+       $this->horizontalPlainMenuTpl = $this->tpldir . 'layersmenu-horizontal_plain_menu.ihtml';
+       $this->_horizontalPlainMenu = array();
+}
+
+/**
+* The method to set the dirroot directory
+* @access public
+* @return boolean
+*/
+function setDirroot($dirroot)
+{
+       $oldtpldir = $this->tpldir;
+       if ($foobar = $this->setDirrootCommon($dirroot)) {
+               $this->updateTpldir($oldtpldir);
+       }
+       return $foobar;
+}
+
+/**
+* The method to set the tpldir directory
+* @access public
+* @return boolean
+*/
+function setTpldir($tpldir)
+{
+       $oldtpldir = $this->tpldir;
+       if ($foobar = $this->setTpldirCommon($tpldir)) {
+               $this->updateTpldir($oldtpldir);
+       }
+       return $foobar;
+}
+
+/**
+* The method to update the templates directory path to the new tpldir
+* @access private
+* @return void
+*/
+function updateTpldir($oldtpldir)
+{
+       $oldlength = strlen($oldtpldir);
+       $foobar = strpos($this->plainMenuTpl, $oldtpldir);
+       if (!($foobar === false || $foobar != 0)) {
+               $this->plainMenuTpl = $this->tpldir . substr($this->plainMenuTpl, $oldlength);
+       }
+       $foobar = strpos($this->horizontalPlainMenuTpl, $oldtpldir);
+       if (!($foobar === false || $foobar != 0)) {
+               $this->horizontalPlainMenuTpl = $this->tpldir . substr($this->horizontalPlainMenuTpl, $oldlength);
+       }
+}
+
+/**
+* The method to set plainMenuTpl
+* @access public
+* @return boolean
+*/
+function setPlainMenuTpl($plainMenuTpl)
+{
+       if (str_replace('/', '', $plainMenuTpl) == $plainMenuTpl) {
+               $plainMenuTpl = $this->tpldir . $plainMenuTpl;
+       }
+       if (!file_exists($plainMenuTpl)) {
+               $this->error("setPlainMenuTpl: file $plainMenuTpl does not exist.");
+               return false;
+       }
+       $this->plainMenuTpl = $plainMenuTpl;
+       return true;
+}
+
+/**
+* Method to prepare a new Plain Menu.
+*
+* This method processes items of a menu to prepare and return
+* the corresponding Plain Menu code.
+*
+* @access public
+* @param string $menu_name the name of the menu whose items have to be processed
+* @return string
+*/
+function newPlainMenu(
+       $menu_name = '' // non consistent default...
+       )
+{
+       $plain_menu_blck = '';
+       $t = new Template_PHPLIB();
+       $t->setFile('tplfile', $this->plainMenuTpl);
+       $t->setBlock('tplfile', 'template', 'template_blck');
+       $t->setBlock('template', 'plain_menu_cell', 'plain_menu_cell_blck');
+       $t->setVar('plain_menu_cell_blck', '');
+       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {
+               if ($this->tree[$cnt]['text'] == '---') {
+                       continue;       // separators are significant only for layers-based menus
+               }
+               $nbsp = '';
+               for ($i=1; $i<$this->tree[$cnt]['level']; $i++) {
+                       $nbsp .= '&nbsp;&nbsp;&nbsp;';
+               }
+               $t->setVar(array(
+                       'nbsp'          => $nbsp,
+                       'href'          => $this->tree[$cnt]['parsed_href'],
+                       'title'         => $this->tree[$cnt]['parsed_title'],
+                       'target'        => $this->tree[$cnt]['parsed_target'],
+                       'text'          => $this->tree[$cnt]['parsed_text']
+               ));
+               $plain_menu_blck .= $t->parse('plain_menu_cell_blck', 'plain_menu_cell', false);
+       }
+       $t->setVar('plain_menu_cell_blck', $plain_menu_blck);
+       $this->_plainMenu[$menu_name] = $t->parse('template_blck', 'template');
+
+       return $this->_plainMenu[$menu_name];
+}
+
+/**
+* Method that returns the code of the requested Plain Menu
+* @access public
+* @param string $menu_name the name of the menu whose Plain Menu code
+*   has to be returned
+* @return string
+*/
+function getPlainMenu($menu_name)
+{
+       return $this->_plainMenu[$menu_name];
+}
+
+/**
+* Method that prints the code of the requested Plain Menu
+* @access public
+* @param string $menu_name the name of the menu whose Plain Menu code
+*   has to be printed
+* @return void
+*/
+function printPlainMenu($menu_name)
+{
+       print $this->_plainMenu[$menu_name];
+}
+
+/**
+* The method to set horizontalPlainMenuTpl
+* @access public
+* @return boolean
+*/
+function setHorizontalPlainMenuTpl($horizontalPlainMenuTpl)
+{
+       if (str_replace('/', '', $horizontalPlainMenuTpl) == $horizontalPlainMenuTpl) {
+               $horizontalPlainMenuTpl = $this->tpldir . $horizontalPlainMenuTpl;
+       }
+       if (!file_exists($horizontalPlainMenuTpl)) {
+               $this->error("setHorizontalPlainMenuTpl: file $horizontalPlainMenuTpl does not exist.");
+               return false;
+       }
+       $this->horizontalPlainMenuTpl = $horizontalPlainMenuTpl;
+       return true;
+}
+
+/**
+* Method to prepare a new Horizontal Plain Menu.
+*
+* This method processes items of a menu to prepare and return
+* the corresponding Horizontal Plain Menu code.
+*
+* @access public
+* @param string $menu_name the name of the menu whose items have to be processed
+* @return string
+*/
+function newHorizontalPlainMenu(
+       $menu_name = '' // non consistent default...
+       )
+{
+       $horizontal_plain_menu_blck = '';
+       $t = new Template_PHPLIB();
+       $t->setFile('tplfile', $this->horizontalPlainMenuTpl);
+       $t->setBlock('tplfile', 'template', 'template_blck');
+       $t->setBlock('template', 'horizontal_plain_menu_cell', 'horizontal_plain_menu_cell_blck');
+       $t->setVar('horizontal_plain_menu_cell_blck', '');
+       $t->setBlock('horizontal_plain_menu_cell', 'plain_menu_cell', 'plain_menu_cell_blck');  
+       $t->setVar('plain_menu_cell_blck', '');
+       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {
+               if ($this->tree[$cnt]['text'] == '---') {
+                       continue;       // separators are significant only for layers-based menus
+               }
+               if ($this->tree[$cnt]['level'] == 1 && $cnt > $this->_firstItem[$menu_name]) {
+                       $t->parse('horizontal_plain_menu_cell_blck', 'horizontal_plain_menu_cell', true);
+                       $t->setVar('plain_menu_cell_blck', '');
+               }
+               $nbsp = '';
+               for ($i=1; $i<$this->tree[$cnt]['level']; $i++) {
+                       $nbsp .= '&nbsp;&nbsp;&nbsp;';
+               }
+               $t->setVar(array(
+                       'nbsp'          => $nbsp,
+                       'href'          => $this->tree[$cnt]['parsed_href'],
+                       'title'         => $this->tree[$cnt]['parsed_title'],
+                       'target'        => $this->tree[$cnt]['parsed_target'],
+                       'text'          => $this->tree[$cnt]['parsed_text']
+               ));
+               $t->parse('plain_menu_cell_blck', 'plain_menu_cell', true);
+       }
+       $t->parse('horizontal_plain_menu_cell_blck', 'horizontal_plain_menu_cell', true);
+       $this->_horizontalPlainMenu[$menu_name] = $t->parse('template_blck', 'template');
+
+       return $this->_horizontalPlainMenu[$menu_name];
+}
+
+/**
+* Method that returns the code of the requested Horizontal Plain Menu
+* @access public
+* @param string $menu_name the name of the menu whose Horizontal Plain Menu code
+*   has to be returned
+* @return string
+*/
+function getHorizontalPlainMenu($menu_name)
+{
+       return $this->_horizontalPlainMenu[$menu_name];
+}
+
+/**
+* Method that prints the code of the requested Horizontal Plain Menu
+* @access public
+* @param string $menu_name the name of the menu whose Horizontal Plain Menu code
+*   has to be printed
+* @return void
+*/
+function printHorizontalPlainMenu($menu_name)
+{
+       print $this->_horizontalPlainMenu[$menu_name];
+}
+
+} /* END OF CLASS */
+
+?>
diff --git a/gosa-core/include/utils/layer-menu/lib/treemenu.inc.php b/gosa-core/include/utils/layer-menu/lib/treemenu.inc.php
new file mode 100644 (file)
index 0000000..a15a5f8
--- /dev/null
@@ -0,0 +1,352 @@
+<?php
+// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
+
+/**
+* This file contains the code of the TreeMenu class.
+* @package PHPLayersMenu
+*/
+
+/**
+* This is the TreeMenu class of the PHP Layers Menu library.
+*
+* This class depends on the LayersMenuCommon class and on the PEAR conforming version of the PHPLib Template class, i.e. on HTML_Template_PHPLIB
+*
+* @version 3.2.0-rc
+* @package PHPLayersMenu
+*/
+class TreeMenu extends LayersMenuCommon
+{
+
+/**
+* Type of images used for the Tree Menu
+* @access private
+* @var string
+*/
+var $treeMenuImagesType;
+/**
+* Prefix for filenames of images of a theme
+* @access private
+* @var string
+*/
+var $treeMenuTheme;
+/**
+* An array where we store the Tree Menu code for each menu
+* @access private
+* @var array
+*/
+var $_treeMenu;
+
+/**
+* The constructor method; it initializates the menu system
+* @return void
+*/
+function TreeMenu()
+{
+       $this->LayersMenuCommon();
+
+       $this->treeMenuImagesType = 'png';
+       $this->treeMenuTheme = '';
+       $this->_treeMenu = array();
+
+       $this->_nodesCount = 0;
+       $this->tree = array();
+       $this->_maxLevel = array();
+       $this->_firstLevelCnt = array();
+       $this->_firstItem = array();
+       $this->_lastItem = array();
+}
+
+/**
+* The method to set the dirroot directory
+* @access public
+* @return boolean
+*/
+function setDirroot($dirroot)
+{
+       return $this->setDirrootCommon($dirroot);
+}
+
+/**
+* The method to set the type of images used for the Tree Menu
+* @access public
+* @return void
+*/
+function setTreeMenuImagesType($treeMenuImagesType)
+{
+       $this->treeMenuImagesType = $treeMenuImagesType;
+}
+
+/**
+* The method to set the prefix for filenames of images of a theme
+* @access public
+* @return void
+*/
+function setTreeMenuTheme($treeMenuTheme)
+{
+       $this->treeMenuTheme = $treeMenuTheme;
+}
+
+/**
+* Method to prepare a new Tree Menu.
+*
+* This method processes items of a menu to prepare and return
+* the corresponding Tree Menu code.
+*
+* @access public
+* @param string $menu_name the name of the menu whose items have to be processed
+* @return string
+*/
+function newTreeMenu(
+       $menu_name = '' // non consistent default...
+       )
+{
+       if (!isset($this->_firstItem[$menu_name]) || !isset($this->_lastItem[$menu_name])) {
+               $this->error("newTreeMenu: the first/last item of the menu '$menu_name' is not defined; please check if you have parsed its menu data.");
+               return 0;
+       }
+
+       $this->_treeMenu[$menu_name] = '';
+
+       $img_collapse                   = $this->imgwww . $this->treeMenuTheme . 'tree_collapse.' . $this->treeMenuImagesType;
+       $alt_collapse                   = '--';
+       $img_collapse_corner            = $this->imgwww . $this->treeMenuTheme . 'tree_collapse_corner.' . $this->treeMenuImagesType;
+       $alt_collapse_corner            = '--';
+       $img_collapse_corner_first      = $this->imgwww . $this->treeMenuTheme . 'tree_collapse_corner_first.' . $this->treeMenuImagesType;
+       $alt_collapse_corner_first      = '--';
+       $img_collapse_first             = $this->imgwww . $this->treeMenuTheme . 'tree_collapse_first.' . $this->treeMenuImagesType;
+       $alt_collapse_first             = '--';
+       $img_corner                     = $this->imgwww . $this->treeMenuTheme . 'tree_corner.' . $this->treeMenuImagesType;
+       $alt_corner                     = '`-';
+       $img_expand                     = $this->imgwww . $this->treeMenuTheme . 'tree_expand.' . $this->treeMenuImagesType;
+       $alt_expand                     = '+-';
+       $img_expand_corner              = $this->imgwww . $this->treeMenuTheme . 'tree_expand_corner.' . $this->treeMenuImagesType;
+       $alt_expand_corner              = '+-';
+       $img_expand_corner_first        = $this->imgwww . $this->treeMenuTheme . 'tree_expand_corner_first.' . $this->treeMenuImagesType;
+       $alt_expand_corner_first        = '+-';
+       $img_expand_first               = $this->imgwww . $this->treeMenuTheme . 'tree_expand_first.' . $this->treeMenuImagesType;
+       $alt_expand_first               = '+-';
+       $img_folder_closed              = $this->imgwww . $this->treeMenuTheme . 'tree_folder_closed.' . $this->treeMenuImagesType;
+       $alt_folder_closed              = '->';
+       $img_folder_open                = $this->imgwww . $this->treeMenuTheme . 'tree_folder_open.' . $this->treeMenuImagesType;
+       $alt_folder_open                = '->';
+       $img_leaf                       = $this->imgwww . $this->treeMenuTheme . 'tree_leaf.' . $this->treeMenuImagesType;
+       $alt_leaf                       = '->';
+       $img_space                      = $this->imgwww . $this->treeMenuTheme . 'tree_space.' . $this->treeMenuImagesType;
+       $alt_space                      = '  ';
+       $img_split                      = $this->imgwww . $this->treeMenuTheme . 'tree_split.' . $this->treeMenuImagesType;
+       $alt_split                      = '|-';
+       $img_split_first                = $this->imgwww . $this->treeMenuTheme . 'tree_split_first.' . $this->treeMenuImagesType;
+       $alt_split_first                = '|-';
+       $img_vertline                   = $this->imgwww . $this->treeMenuTheme . 'tree_vertline.' . $this->treeMenuImagesType;
+       $alt_vertline                   = '| ';
+
+       for ($i=0; $i<=$this->_maxLevel[$menu_name]; $i++) {
+               $levels[$i] = 0;
+       }
+
+       // Find last nodes of subtrees
+       $last_level = $this->_maxLevel[$menu_name];
+       for ($i=$this->_lastItem[$menu_name]; $i>=$this->_firstItem[$menu_name]; $i--) {
+               if ($this->tree[$i]['level'] < $last_level) {
+                       for ($j=$this->tree[$i]['level']+1; $j<=$this->_maxLevel[$menu_name]; $j++) {
+                               $levels[$j] = 0;
+                       }
+               }
+               if ($levels[$this->tree[$i]['level']] == 0) {
+                       $levels[$this->tree[$i]['level']] = 1;
+                       $this->tree[$i]['last_item'] = 1;
+               } else {
+                       $this->tree[$i]['last_item'] = 0;
+               }
+               $last_level = $this->tree[$i]['level'];
+       }
+
+       $toggle = '';
+       $toggle_function_name = 'toggle' . $menu_name;
+
+       for ($cnt=$this->_firstItem[$menu_name]; $cnt<=$this->_lastItem[$menu_name]; $cnt++) {
+               if ($this->tree[$cnt]['text'] == '---') {
+                       continue;       // separators are significant only for layers-based menus
+               }
+
+               if (isset($this->tree[$cnt]['selected']) && $this->tree[$cnt]['selected']) {
+                       $linkstyle = 'phplmselected';
+               } else {
+                       $linkstyle = 'phplm';
+               }
+
+               $this->_treeMenu[$menu_name] .= '<div id="jt' . $cnt . '" class="treemenudiv">' . "\n";
+
+               // vertical lines from higher levels
+               for ($i=0; $i<$this->tree[$cnt]['level']-1; $i++) {
+                       if ($levels[$i] == 1) {
+                               $img = $img_vertline;
+                               $alt = $alt_vertline;
+                       } else {
+                               $img = $img_space;
+                               $alt = $alt_space;
+                       }
+                       $this->_treeMenu[$menu_name] .= '<img align="top" border="0" class="imgs" src="' . $img . '" alt="' . $alt . '" />';
+               }
+
+               $not_a_leaf = $cnt<$this->_lastItem[$menu_name] && $this->tree[$cnt+1]['level']>$this->tree[$cnt]['level'];
+
+               if ($this->tree[$cnt]['last_item'] == 1) {
+               // corner at end of subtree or t-split
+                       if ($not_a_leaf) {
+                               if ($cnt == $this->_firstItem[$menu_name]) {
+                                       $img = $img_collapse_corner_first;
+                                       $alt = $alt_collapse_corner_first;
+                               } else {
+                                       $img = $img_collapse_corner;
+                                       $alt = $alt_collapse_corner;
+                               }
+                               $this->_treeMenu[$menu_name] .= '<a onmousedown="' . $toggle_function_name . "('" . $cnt . "')" . '"><img align="top" border="0" class="imgs" id="jt' . $cnt . 'node" src="' . $img . '" alt="' . $alt . '" /></a>';
+                       } else {
+                               $this->_treeMenu[$menu_name] .= '<img align="top" border="0" class="imgs" src="' . $img_corner . '" alt="' . $alt_corner . '" />';
+                       }
+                       $levels[$this->tree[$cnt]['level']-1] = 0;
+               } else {
+                       if ($not_a_leaf) {
+                               if ($cnt == $this->_firstItem[$menu_name]) {
+                                       $img = $img_collapse_first;
+                                       $alt = $alt_collapse_first;
+                               } else {
+                                       $img = $img_collapse;
+                                       $alt = $alt_collapse;
+                               }
+                               $this->_treeMenu[$menu_name] .= '<a onmousedown="' . $toggle_function_name . "('" . $cnt . "');" . '"><img align="top" border="0" class="imgs" id="jt' . $cnt . 'node" src="' . $img . '" alt="' . $alt . '" /></a>';
+                       } else {
+                               if ($cnt == $this->_firstItem[$menu_name]) {
+                                       $img = $img_split_first;
+                                       $alt = $alt_split_first;
+                               } else {
+                                       $img = $img_split;
+                                       $alt = $alt_split;
+                               }
+                               $this->_treeMenu[$menu_name] .= '<img align="top" border="0" class="imgs" id="jt' . $cnt . 'node" src="' . $img . '" alt="' . $alt . '" />';
+                       }
+                       $levels[$this->tree[$cnt]['level']-1] = 1;
+               }
+
+               if ($this->tree[$cnt]['parsed_href'] == '' || $this->tree[$cnt]['parsed_href'] == '#') {
+                       $a_href_open_img = '';
+                       $a_href_close_img = '';
+                       $a_href_open = '<a class="phplmnormal">';
+                       $a_href_close = '</a>';
+               } else {
+                       $a_href_open_img = '<a href="' . $this->tree[$cnt]['parsed_href'] . '"' . $this->tree[$cnt]['parsed_title'] . $this->tree[$cnt]['parsed_target'] . '>';
+                       $a_href_close_img = '</a>';
+                       $a_href_open = '<a href="' . $this->tree[$cnt]['parsed_href'] . '"' . $this->tree[$cnt]['parsed_title'] . $this->tree[$cnt]['parsed_target'] . ' class="' . $linkstyle . '">';
+                       $a_href_close = '</a>';
+               }
+
+               if ($not_a_leaf) {
+                       $this->_treeMenu[$menu_name] .= $a_href_open_img . '<img align="top" border="0" class="imgs" id="jt' . $cnt . 'folder" src="' . $img_folder_open . '" alt="' . $alt_folder_open . '" />' . $a_href_close_img;
+               } else {
+                       if ($this->tree[$cnt]['parsed_icon'] != '') {
+                               $this->_treeMenu[$menu_name] .= $a_href_open_img . '<img align="top" border="0" src="' . $this->tree[$cnt]['parsed_icon'] . '" width="' . $this->tree[$cnt]['iconwidth'] . '" height="' . $this->tree[$cnt]['iconheight'] . '" alt="' . $alt_leaf . '" />' . $a_href_close_img;
+                       } else {
+                               $this->_treeMenu[$menu_name] .= $a_href_open_img . '<img align="top" border="0" class="imgs" src="' . $img_leaf . '" alt="' . $alt_leaf . '" />' . $a_href_close_img;
+                       }
+               }
+               $this->_treeMenu[$menu_name] .= '&nbsp;' . $a_href_open . $this->tree[$cnt]['text'] . $a_href_close . "\n";
+               $this->_treeMenu[$menu_name] .= '</div>' . "\n";
+
+               if ($cnt<$this->_lastItem[$menu_name] && $this->tree[$cnt]['level']<$this->tree[$cnt+1]['level']) {
+                       $this->_treeMenu[$menu_name] .= '<div id="jt' . $cnt . 'son" class="treemenudiv">' . "\n";
+                       if ($this->tree[$cnt]['expanded'] != 1) {
+                               $toggle .= 'if (phplm_expand[' . $cnt . '] != 1) ' . $toggle_function_name . "('" . $cnt . "');\n";
+                       } else {
+                               $toggle .= 'if (phplm_collapse[' . $cnt . '] == 1) ' . $toggle_function_name . "('" . $cnt . "');\n";
+                       }
+               }
+
+               if ($cnt>$this->_firstItem[$menu_name] && $this->tree[$cnt]['level']>$this->tree[$cnt+1]['level']) {
+                       for ($i=max(1, $this->tree[$cnt+1]['level']); $i<$this->tree[$cnt]['level']; $i++) {
+                               $this->_treeMenu[$menu_name] .= '</div>' . "\n";
+                       }
+               }
+       }
+
+/*
+       $this->_treeMenu[$menu_name] =
+       '<div class="phplmnormal">' . "\n" .
+       $this->_treeMenu[$menu_name] .
+       '</div>' . "\n";
+*/
+       // Some (old) browsers do not support the "white-space: nowrap;" CSS property...
+       $this->_treeMenu[$menu_name] =
+       '<table cellspacing="0" cellpadding="0" border="0">' . "\n" .
+       '<tr>' . "\n" .
+       '<td class="phplmnormal" nowrap="nowrap">' . "\n" .
+       $this->_treeMenu[$menu_name] .
+       '</td>' . "\n" .
+       '</tr>' . "\n" .
+       '</table>' . "\n";
+
+       $t = new Template_PHPLIB();
+       $t->setFile('tplfile', $this->libjsdir . 'layerstreemenu.ijs');
+       $t->setVar(array(
+               'toggle_function_name'          => $toggle_function_name,
+               'img_collapse'                  => $img_collapse,
+               'img_collapse_corner'           => $img_collapse_corner,
+               'img_collapse_corner_first'     => $img_collapse_corner_first,
+               'img_collapse_first'            => $img_collapse_first,
+               'img_expand'                    => $img_expand,
+               'img_expand_corner'             => $img_expand_corner,
+               'img_expand_corner_first'       => $img_expand_corner_first,
+               'img_expand_first'              => $img_expand_first,
+               'img_folder_closed'             => $img_folder_closed,
+               'img_folder_open'               => $img_folder_open
+       ));
+       $toggle_function = $t->parse('out', 'tplfile');
+       $toggle_function =
+       '<script language="JavaScript" type="text/javascript">' . "\n" .
+       '<!--' . "\n" .
+       $toggle_function .
+       '// -->' . "\n" .
+       '</script>' . "\n";
+
+       $toggle =
+       '<script language="JavaScript" type="text/javascript">' . "\n" .
+       '<!--' . "\n" .
+       'if ((DOM && !Opera56 && !Konqueror22) || IE4) {' . "\n" .
+       $toggle .
+       '}' . "\n" .
+       'if (NS4) alert("Only the accessibility is provided to Netscape 4 on the JavaScript Tree Menu.\nWe *strongly* suggest you to upgrade your browser.");' . "\n" .
+       '// -->' . "\n" .
+       '</script>' . "\n";
+
+       $this->_treeMenu[$menu_name] = $toggle_function . "\n" . $this->_treeMenu[$menu_name] . "\n" . $toggle;
+
+       return $this->_treeMenu[$menu_name];
+}
+
+/**
+* Method that returns the code of the requested Tree Menu
+* @access public
+* @param string $menu_name the name of the menu whose Tree Menu code
+*   has to be returned
+* @return string
+*/
+function getTreeMenu($menu_name)
+{
+       return $this->_treeMenu[$menu_name];
+}
+
+/**
+* Method that prints the code of the requested Tree Menu
+* @access public
+* @param string $menu_name the name of the menu whose Tree Menu code
+*   has to be printed
+* @return void
+*/
+function printTreeMenu($menu_name)
+{
+       print $this->_treeMenu[$menu_name];
+}
+
+} /* END OF CLASS */
+
+?>
diff --git a/gosa-core/include/utils/layer-menu/libjs/layersmenu-browser_detection.js b/gosa-core/include/utils/layer-menu/libjs/layersmenu-browser_detection.js
new file mode 100644 (file)
index 0000000..79896a0
--- /dev/null
@@ -0,0 +1,33 @@
+// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
+
+DOM = (document.getElementById) ? 1 : 0;
+NS4 = (document.layers) ? 1 : 0;
+// We need to explicitly detect Konqueror
+// because Konqueror 3 sets IE = 1 ... AAAAAAAAAARGHHH!!!
+Konqueror = (navigator.userAgent.indexOf('Konqueror') > -1) ? 1 : 0;
+// We need to detect Konqueror 2.2 as it does not handle the window.onresize event
+Konqueror22 = (navigator.userAgent.indexOf('Konqueror 2.2') > -1 || navigator.userAgent.indexOf('Konqueror/2.2') > -1) ? 1 : 0;
+Konqueror30 =
+       (
+               navigator.userAgent.indexOf('Konqueror 3.0') > -1
+               || navigator.userAgent.indexOf('Konqueror/3.0') > -1
+               || navigator.userAgent.indexOf('Konqueror 3;') > -1
+               || navigator.userAgent.indexOf('Konqueror/3;') > -1
+               || navigator.userAgent.indexOf('Konqueror 3)') > -1
+               || navigator.userAgent.indexOf('Konqueror/3)') > -1
+       )
+       ? 1 : 0;
+Konqueror31 = (navigator.userAgent.indexOf('Konqueror 3.1') > -1 || navigator.userAgent.indexOf('Konqueror/3.1') > -1) ? 1 : 0;
+// We need to detect Konqueror 3.2 and 3.3 as they are affected by the see-through effect only for 2 form elements
+Konqueror32 = (navigator.userAgent.indexOf('Konqueror 3.2') > -1 || navigator.userAgent.indexOf('Konqueror/3.2') > -1) ? 1 : 0;
+Konqueror33 = (navigator.userAgent.indexOf('Konqueror 3.3') > -1 || navigator.userAgent.indexOf('Konqueror/3.3') > -1) ? 1 : 0;
+Opera = (navigator.userAgent.indexOf('Opera') > -1) ? 1 : 0;
+Opera5 = (navigator.userAgent.indexOf('Opera 5') > -1 || navigator.userAgent.indexOf('Opera/5') > -1) ? 1 : 0;
+Opera6 = (navigator.userAgent.indexOf('Opera 6') > -1 || navigator.userAgent.indexOf('Opera/6') > -1) ? 1 : 0;
+Opera56 = Opera5 || Opera6;
+IE = (navigator.userAgent.indexOf('MSIE') > -1) ? 1 : 0;
+IE = IE && !Opera;
+IE5 = IE && DOM;
+IE4 = (document.all) ? 1 : 0;
+IE4 = IE4 && IE && !DOM;
+
diff --git a/gosa-core/include/utils/layer-menu/libjs/layersmenu-footer.ijs b/gosa-core/include/utils/layer-menu/libjs/layersmenu-footer.ijs
new file mode 100644 (file)
index 0000000..42bb0ad
--- /dev/null
@@ -0,0 +1,11 @@
+<!-- beginning of menu footer - {packageName} {version} {copyright} {author} -->
+
+{footer}
+
+<script language="JavaScript" type="text/javascript">
+<!--
+loaded = 1;
+// -->
+</script>
+
+<!-- end of menu footer - {packageName} {version} {copyright} {author} -->
diff --git a/gosa-core/include/utils/layer-menu/libjs/layersmenu-header.ijs b/gosa-core/include/utils/layer-menu/libjs/layersmenu-header.ijs
new file mode 100644 (file)
index 0000000..128078b
--- /dev/null
@@ -0,0 +1,57 @@
+<!-- beginning of menu header - {packageName} {version} {copyright} {author} -->
+
+<script language="JavaScript" type="text/javascript">
+<!--
+
+menuTopShift = {menuTopShift};
+menuRightShift = {menuRightShift};
+menuLeftShift = {menuLeftShift};
+
+var thresholdY = {thresholdY};
+var abscissaStep = {abscissaStep};
+
+toBeHidden = new Array();
+toBeHiddenLeft = new Array();
+toBeHiddenTop = new Array();
+
+{listl}
+var numl = listl.length;
+
+father = new Array();
+for (i=1; i<={nodesCount}; i++) {
+       father['L' + i] = '';
+}
+{father_keys}
+{father_vals}
+for (i=0; i<father_keys.length; i++) {
+       father[father_keys[i]] = father_vals[i];
+}
+
+lwidth = new Array();
+var lwidthDetected = 0;
+
+function moveLayers()
+{
+       if (!lwidthDetected) {
+               for (i=0; i<numl; i++) {
+                       lwidth[listl[i]] = getOffsetWidth(listl[i]);
+               }
+               lwidthDetected = 1;
+       }
+       if (IE4) {
+               for (i=0; i<numl; i++) {
+                       setWidth(listl[i], abscissaStep);
+               }
+       }
+{moveLayers}
+}
+
+back = new Array();
+for (i=1; i<={nodesCount}; i++) {
+       back['L' + i] = 0;
+}
+
+// -->
+</script>
+
+<!-- end of menu header - {packageName} {version} {copyright} {author} -->
diff --git a/gosa-core/include/utils/layer-menu/libjs/layersmenu-library.js b/gosa-core/include/utils/layer-menu/libjs/layersmenu-library.js
new file mode 100644 (file)
index 0000000..049abf8
--- /dev/null
@@ -0,0 +1,248 @@
+// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
+
+layerLeft = new Array();
+layerTop = new Array();
+
+function setVisibility(layer, on)
+{
+       if (on) {
+               if (DOM) {
+                       document.getElementById(layer).style.visibility = 'visible';
+               } else if (NS4) {
+                       document.layers[layer].visibility = 'show';
+               } else {
+                       document.all[layer].style.visibility = 'visible';
+               }
+       } else {
+               if (DOM) {
+                       document.getElementById(layer).style.visibility = 'hidden';
+               } else if (NS4) {
+                       document.layers[layer].visibility = 'hide';
+               } else {
+                       document.all[layer].style.visibility = 'hidden';
+               }
+       }
+}
+
+function isVisible(layer)
+{
+       if (DOM) {
+               return (document.getElementById(layer).style.visibility == 'visible');
+       } else if (NS4) {
+               return (document.layers[layer].visibility == 'show');
+       } else {
+               return (document.all[layer].style.visibility == 'visible');
+       }
+}
+
+function setLeft(layer, x)
+{
+layerLeft[layer] = x;
+       if (DOM && !Opera5) {
+               document.getElementById(layer).style.left = x + 'px';
+       } else if (Opera5) {
+               document.getElementById(layer).style.left = x;
+       } else if (NS4) {
+               document.layers[layer].left = x;
+       } else {
+               document.all[layer].style.pixelLeft = x;
+       }
+}
+
+function getOffsetLeft(layer)
+{
+       var value = 0;
+       if (DOM) {      // Mozilla, Konqueror >= 2.2, Opera >= 5, IE
+               object = document.getElementById(layer);
+               value = object.offsetLeft;
+//alert (object.tagName + ' --- ' + object.offsetLeft);
+               while (object.tagName != 'BODY' && object.offsetParent) {
+                       object = object.offsetParent;
+//alert (object.tagName + ' --- ' + object.offsetLeft);
+                       value += object.offsetLeft;
+               }
+       } else if (NS4) {
+               value = document.layers[layer].pageX;
+       } else {        // IE4 IS SIMPLY A BASTARD !!!
+               if (document.all['IE4' + layer]) {
+                       layer = 'IE4' + layer;
+               }
+               object = document.all[layer];
+               value = object.offsetLeft;
+               while (object.tagName != 'BODY') {
+                       object = object.offsetParent;
+                       value += object.offsetLeft;
+               }
+       }
+       return (value);
+}
+
+function setTop(layer, y)
+{
+layerTop[layer] = y;
+       if (DOM && !Opera5) {
+               document.getElementById(layer).style.top = y + 'px';
+       } else if (Opera5) {
+               document.getElementById(layer).style.top = y;
+       } else if (NS4) {
+               document.layers[layer].top = y;
+       } else {
+               document.all[layer].style.pixelTop = y;
+       }
+}
+
+function getOffsetTop(layer)
+{
+// IE 5.5 and 6.0 behaviour with this function is really strange:
+// in some cases, they return a really too large value...
+// ... after all, IE is buggy, nothing new
+       var value = 0;
+       if (DOM) {
+               object = document.getElementById(layer);
+               value = object.offsetTop;
+               while (object.tagName != 'BODY' && object.offsetParent) {
+                       object = object.offsetParent;
+                       value += object.offsetTop;
+               }
+       } else if (NS4) {
+               value = document.layers[layer].pageY;
+       } else {        // IE4 IS SIMPLY A BASTARD !!!
+               if (document.all['IE4' + layer]) {
+                       layer = 'IE4' + layer;
+               }
+               object = document.all[layer];
+               value = object.offsetTop;
+               while (object.tagName != 'BODY') {
+                       object = object.offsetParent;
+                       value += object.offsetTop;
+               }
+       }
+       return (value);
+}
+
+function setWidth(layer, w)
+{
+       if (DOM) {
+               document.getElementById(layer).style.width = w;
+       } else if (NS4) {
+//             document.layers[layer].width = w;
+       } else {
+               document.all[layer].style.pixelWidth = w;
+       }
+}
+
+function getOffsetWidth(layer)
+{
+       var value = 0;
+       if (DOM && !Opera56) {
+               value = document.getElementById(layer).offsetWidth;
+       } else if (NS4) {
+               value = document.layers[layer].document.width;
+       } else if (Opera56) {
+               value = document.getElementById(layer).style.pixelWidth;
+       } else {        // IE4 IS SIMPLY A BASTARD !!!
+               if (document.all['IE4' + layer]) {
+                       layer = 'IE4' + layer;
+               }
+               value = document.all[layer].offsetWidth;
+       }
+       return (value);
+}
+
+function setHeight(layer, h)   // unused, not tested
+{
+       if (DOM) {
+               document.getElementById(layer).style.height = h;
+       } else if (NS4) {
+//             document.layers[layer].height = h;
+       } else {
+               document.all[layer].style.pixelHeight = h;
+       }
+}
+
+function getOffsetHeight(layer)
+{
+       var value = 0;
+       if (DOM && !Opera56) {
+               value = document.getElementById(layer).offsetHeight;
+       } else if (NS4) {
+               value = document.layers[layer].document.height;
+       } else if (Opera56) {
+               value = document.getElementById(layer).style.pixelHeight;
+       } else {        // IE4 IS SIMPLY A BASTARD !!!
+               if (document.all['IE4' + layer]) {
+                       layer = 'IE4' + layer;
+               }
+               value = document.all[layer].offsetHeight;
+       }
+       return (value);
+}
+
+function getWindowWidth()
+{
+       var value = 0;
+       if ((DOM && !IE) || NS4 || Konqueror || Opera) {
+               value = window.innerWidth;
+//     } else if (NS4) {
+//             value = document.width;
+       } else {        // IE
+               if (document.documentElement && document.documentElement.clientWidth) {
+                       value = document.documentElement.clientWidth;
+               } else if (document.body) {
+                       value = document.body.clientWidth;
+               }
+       }
+       if (isNaN(value)) {
+               value = window.innerWidth;
+       }
+       return (value);
+}
+
+function getWindowXOffset()
+{
+       var value = 0;
+       if ((DOM && !IE) || NS4 || Konqueror || Opera) {
+               value = window.pageXOffset;
+       } else {        // IE
+               if (document.documentElement && document.documentElement.scrollLeft) {
+                       value = document.documentElement.scrollLeft;
+               } else if (document.body) {
+                       value = document.body.scrollLeft;
+               }
+       }
+       return (value);
+}
+
+function getWindowHeight()
+{
+       var value = 0;
+       if ((DOM && !IE) || NS4 || Konqueror || Opera) {
+               value = window.innerHeight;
+       } else {        // IE
+               if (document.documentElement && document.documentElement.clientHeight) {
+                       value = document.documentElement.clientHeight;
+               } else if (document.body) {
+                       value = document.body.clientHeight;
+               }
+       }
+       if (isNaN(value)) {
+               value = window.innerHeight;
+       }
+       return (value);
+}
+
+function getWindowYOffset()
+{
+       var value = 0;
+       if ((DOM && !IE) || NS4 || Konqueror || Opera) {
+               value = window.pageYOffset;
+       } else {        // IE
+               if (document.documentElement && document.documentElement.scrollTop) {
+                       value = document.documentElement.scrollTop;
+               } else if (document.body) {
+                       value = document.body.scrollTop;
+               }
+       }
+       return (value);
+}
+
diff --git a/gosa-core/include/utils/layer-menu/libjs/layersmenu-see-through.js b/gosa-core/include/utils/layer-menu/libjs/layersmenu-see-through.js
new file mode 100644 (file)
index 0000000..7ca9455
--- /dev/null
@@ -0,0 +1,65 @@
+// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
+
+function scanChildren(element)
+{
+       var counter = element.childNodes.length;
+        for (var i=0; i<counter; i++) {
+                foobar = element.childNodes.item(i);
+               if (    ( (Konqueror22 || Konqueror30 || Konqueror31) &&
+                        (  foobar.nodeName == 'INPUT' || foobar.nodeName == 'input'
+                        || foobar.nodeName == 'SELECT' || foobar.nodeName == 'select'
+                        || foobar.nodeName == 'TEXTAREA' || foobar.nodeName == 'textarea'
+                        )
+                       )
+                       ||
+// Konqueror 3.2 and 3.3 need hiding only for the following two form elements, but, alas,
+// at the time of this writing (Konqueror 3.2.3 and 3.3.0-rc2), hiding of such two form elements
+// on Konqueror 3.2 and 3.3 does not work, it is affected by the following bug: http://bugs.kde.org/72885
+                       ( (Konqueror32 || Konqueror33) &&
+                        (  ((foobar.nodeName == 'SELECT' || foobar.nodeName == 'select') && foobar.size > 1)
+                        || foobar.nodeName == 'TEXTAREA' || foobar.nodeName == 'textarea'
+                        )
+                       )
+                       ||
+                       ( IE &&
+                        ( foobar.nodeName == 'SELECT' || foobar.nodeName == 'select' )
+                       )
+               ) {
+                       toBeHidden[toBeHidden.length] = foobar;
+               }
+                if (foobar.childNodes.length > 0) {
+                        scanChildren(foobar);
+                }
+        }
+}
+
+function seeThroughCoordinatesDetection()
+{
+       if (!((Konqueror && !Konqueror22) || IE5)) {
+               return;
+       }
+       for (i=0; i<toBeHidden.length; i++) {
+               object = toBeHidden[i];
+               toBeHiddenLeft[i] = object.offsetLeft;
+               while (object.tagName != 'BODY' && object.offsetParent) {
+                       object = object.offsetParent;
+                       toBeHiddenLeft[i] += object.offsetLeft;
+               }
+               object = toBeHidden[i];
+               toBeHiddenTop[i] = object.offsetTop;
+               while (object.tagName != 'BODY' && object.offsetParent) {
+                       object = object.offsetParent;
+                       toBeHiddenTop[i] += object.offsetTop;
+               }
+       }
+}
+
+//document.write("<br />\nSCANNING STARTED<br />\n");
+//scanChildren(document.getElementsByTagName('BODY').item(0));
+if ((Konqueror || IE5) && document.getElementById('phplmseethrough')) {
+       scanChildren(document.getElementById('phplmseethrough'));
+}
+//document.write("<br />\nSCANNING COMPLETED<br />\n");
+
+seeThroughCoordinatesDetection();
+
diff --git a/gosa-core/include/utils/layer-menu/libjs/layersmenu.js b/gosa-core/include/utils/layer-menu/libjs/layersmenu.js
new file mode 100644 (file)
index 0000000..5d29e5b
--- /dev/null
@@ -0,0 +1,316 @@
+// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
+
+useTimeouts = 1;
+timeoutLength = 1000;  // time in ms; not significant if useTimeouts = 0;
+shutdownOnClick = 0;
+
+loaded = 0;
+layersMoved = 0;
+layerPoppedUp = '';
+
+timeoutFlag = 0;
+if (Opera56 || IE4) {
+       useTimeouts = 0;
+}
+if (NS4 || Opera56 || IE4) {
+       shutdownOnClick = 1;
+}
+
+currentY = 0;
+function grabMouse(e)  // for NS4
+{
+       currentY = e.pageY;
+}
+if (NS4) {
+       document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE);
+       document.onmousemove = grabMouse;
+}
+
+function seeThroughElements(show)
+{
+       if (show) {
+               foobar = 'visible';
+       } else {
+               foobar = 'hidden';
+       }
+       for (i=0; i<toBeHidden.length; i++) {
+               toBeHidden[i].style.visibility = foobar;
+       }
+}
+
+function shutdown()
+{
+       for (i=0; i<numl; i++) {
+               LMPopUpL(listl[i], false);
+       }
+       layerPoppedUp = '';
+       if (Konqueror || IE5) {
+               seeThroughElements(true);
+       }
+}
+if (shutdownOnClick) {
+       if (NS4) {
+               document.onmousedown = shutdown;
+       } else {
+               document.onclick = shutdown;
+       }
+}
+
+function setLMTO()
+{
+       if (useTimeouts) {
+               timeoutFlag = setTimeout('shutdown()', timeoutLength);
+       }
+}
+
+function clearLMTO()
+{
+       if (useTimeouts) {
+               clearTimeout(timeoutFlag);
+       }
+}
+
+function moveLayerX(menuName)
+{
+       if (!loaded || (isVisible(menuName) && menuName != layerPoppedUp)) {
+               return;
+       }
+       if (father[menuName] != '') {
+               if (!Opera5 && !IE4) {
+                       width0 = lwidth[father[menuName]];
+                       width1 = lwidth[menuName];
+               } else if (Opera5) {
+                       // Opera 5 stupidly and exaggeratedly overestimates layers widths
+                       // hence we consider a default value equal to $abscissaStep
+                       width0 = abscissaStep;
+                       width1 = abscissaStep;
+               } else if (IE4) {
+                       width0 = getOffsetWidth(father[menuName]);
+                       width1 = getOffsetWidth(menuName);
+               }
+               onLeft = getOffsetLeft(father[menuName]) - width1 + menuLeftShift;
+               onRight = getOffsetLeft(father[menuName]) + width0 - menuRightShift;
+               windowWidth = getWindowWidth();
+               windowXOffset = getWindowXOffset();
+//             if (NS4 && !DOM) {
+//                     windowXOffset = 0;
+//             }
+               if (onLeft < windowXOffset && onRight + width1 > windowWidth + windowXOffset) {
+                       if (onRight + width1 - windowWidth - windowXOffset > windowXOffset - onLeft) {
+                               onLeft = windowXOffset;
+                       } else {
+                               onRight = windowWidth + windowXOffset - width1;
+                       }
+               }
+               if (back[father[menuName]]) {
+                       if (onLeft < windowXOffset) {
+                               back[menuName] = 0;
+                       } else {
+                               back[menuName] = 1;
+                       }
+               } else {
+//alert(onRight + ' - ' + width1 + ' - ' +  windowWidth + ' - ' + windowXOffset);
+                       if (onRight + width1 > windowWidth + windowXOffset) {
+                               back[menuName] = 1;
+                       } else {
+                               back[menuName] = 0;
+                       }
+               }
+               if (back[menuName]) {
+                       setLeft(menuName, onLeft);
+               } else {
+                       setLeft(menuName, onRight);
+               }
+       }
+       moveLayerY(menuName);   // workaround needed for Mozilla < 1.4 for MS Windows
+}
+
+function moveLayerY(menuName)
+{
+       if (!loaded || (isVisible(menuName) && menuName != layerPoppedUp)) {
+               return;
+       }
+       if (!layersMoved) {
+               moveLayers();
+               layersMoved = 1;
+       }
+       if (!NS4) {
+               newY = getOffsetTop('ref' + menuName);
+       } else {
+               newY = currentY;
+       }
+       newY += menuTopShift;
+       layerHeight = getOffsetHeight(menuName);
+       windowHeight = getWindowHeight();
+       windowYOffset = getWindowYOffset();
+       if (newY + layerHeight > windowHeight + windowYOffset) {
+               if (layerHeight > windowHeight) {
+                       newY = windowYOffset;
+               } else {
+                       newY = windowHeight + windowYOffset - layerHeight;
+               }
+       }
+       if (Math.abs(getOffsetTop(menuName) - newY) > thresholdY) {
+               setTop(menuName, newY);
+       }
+}
+
+function moveLayerX1(menuName, father)
+{
+       if (!lwidthDetected) {
+               return;
+       }
+       if (!Opera5 && !IE4) {
+               width1 = lwidth[menuName];
+       } else if (Opera5) {
+               // Opera 5 stupidly and exaggeratedly overestimates layers widths
+               // hence we consider a default value equal to $abscissaStep
+               width1 = abscissaStep;
+       }
+       foobar = getOffsetLeft(father + menuName);
+if (!IE4) {
+       windowWidth = getWindowWidth();
+       windowXOffset = getWindowXOffset();
+       if (foobar + width1 > windowWidth + windowXOffset) {
+               foobar = windowWidth + windowXOffset - width1;
+       }
+       if (foobar < windowXOffset) {
+               foobar = windowXOffset;
+       }
+}
+       setLeft(menuName, foobar);
+}
+
+function layersOverlap(layer, i)
+{
+       if (Konqueror22) {
+               return true;
+       }
+
+//     xa1 = getOffsetLeft(layer);
+//setLeft(layer, xa1);
+       xa1 = layerLeft[layer];
+       xa2 = xa1 + getOffsetWidth(layer);
+//setWidth(layer, xa2-xa1);
+//     ya1 = getOffsetTop(layer);
+//setTop(layer, ya1);
+       ya1 = layerTop[layer];
+       ya2 = ya1 + getOffsetHeight(layer);
+//setHeight(layer, ya2-ya1);
+//alert(':' + xa1 + ':' + xa2 + ':' + ya1 + ':' + ya2 + ':');
+
+       xb1 = toBeHiddenLeft[i];
+       xb2 = xb1 + toBeHidden[i].offsetWidth;
+       yb1 = toBeHiddenTop[i];
+       yb2 = yb1 + toBeHidden[i].offsetHeight;
+//alert(':' + xb1 + ':' + xb2 + ':' + yb1 + ':' + yb2 + ':');
+
+       if(xb1>xa1) xa1=xb1; if(xb2<xa2) xa2=xb2;
+       if(yb1>ya1) ya1=yb1; if(yb2<ya2) ya2=yb2;
+
+       return (xa2>xa1 && ya2>ya1);
+}
+
+function seeThroughWorkaround(menuName, on)
+{
+       for (i=0; i<toBeHidden.length; i++) {
+               if (layersOverlap(menuName, i)) {
+                       if (on) {
+                               toBeHidden[i].style.visibility = 'hidden';
+                       } else {
+                               toBeHidden[i].style.visibility = 'visible';
+                       }
+               }
+       }
+}
+
+function LMPopUpL(menuName, on)
+{
+       if (!loaded) {
+               return;
+       }
+       if (!layersMoved) {
+               moveLayers();
+               layersMoved = 1;
+       }
+       setVisibility(menuName, on);
+}
+
+function LMPopUp(menuName, isCurrent)
+{
+       if (!loaded || menuName == layerPoppedUp || (isVisible(menuName) && !isCurrent)) {
+               return;
+       }
+       if (menuName == father[layerPoppedUp]) {
+               LMPopUpL(layerPoppedUp, false);
+//             seeThroughWorkaround(menuName, false);
+       } else if (father[menuName] == layerPoppedUp) {
+               LMPopUpL(menuName, true);
+               seeThroughWorkaround(menuName, true);
+       } else {
+               shutdown();
+               foobar = menuName;
+               do {
+                       LMPopUpL(foobar, true);
+                       seeThroughWorkaround(foobar, true);
+                       foobar = father[foobar];
+               } while (foobar != '')
+       }
+/*
+       if (layerPoppedUp == '') {
+               seeThroughElements(false);
+       }
+*/
+       layerPoppedUp = menuName;
+}
+
+function resizeHandler()
+{
+       if (NS4) {
+               window.location.reload();
+       }
+       shutdown();
+       for (i=0; i<numl; i++) {
+               setLeft(listl[i], 0);
+               setTop(listl[i], 0);
+       }
+       if (toBeHidden != null && toBeHidden.length > 0) {
+               seeThroughCoordinatesDetection();
+       }
+//     moveLayers();
+       layersMoved = 0;
+}
+window.onresize = resizeHandler;
+
+function yaresizeHandler()
+{
+       if (window.innerWidth != origWidth || window.innerHeight != origHeight) {
+               if (Konqueror22 || Opera5) {
+                       window.location.reload();       // Opera 5 often fails this
+               }
+               origWidth  = window.innerWidth;
+               origHeight = window.innerHeight;
+               resizeHandler();
+       }
+       setTimeout('yaresizeHandler()', 500);
+}
+function loadHandler()
+{
+       if (Konqueror22 || Opera56) {
+               origWidth  = window.innerWidth;
+               origHeight = window.innerHeight;
+               yaresizeHandler();
+       }
+}
+window.onload = loadHandler;
+
+function fixieflm(menuName)
+{
+       if (DOM) {
+               setWidth(menuName, '100%');
+       } else {        // IE4 IS SIMPLY A BASTARD !!!
+               document.write('</div>');
+               document.write('<div id="IE4' + menuName + '" style="position: relative; width: 100%; visibility: visible;">');
+       }
+}
+
diff --git a/gosa-core/include/utils/layer-menu/libjs/layerstreemenu-cookies.js b/gosa-core/include/utils/layer-menu/libjs/layerstreemenu-cookies.js
new file mode 100644 (file)
index 0000000..ea36afc
--- /dev/null
@@ -0,0 +1,70 @@
+// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
+
+function setLMCookie(name, value)
+{
+       document.cookie = name + '=' + value + ';path=/';
+}
+
+function getLMCookie(name)
+{
+       foobar = document.cookie.split(name + '=');
+       if (foobar.length < 2) {
+               return null;
+       }
+       tempString = foobar[1];
+       if (tempString.indexOf(';') == -1) {
+               return tempString;
+       }
+       yafoobar = tempString.split(';');
+       return yafoobar[0];
+}
+
+function parseExpandString()
+{
+       expandString = getLMCookie('phplm_expand');
+       phplm_expand = new Array();
+       if (expandString) {
+               expanded = expandString.split('|');
+               for (i=0; i<expanded.length-1; i++) {
+                       phplm_expand[expanded[i]] = 1;
+               }
+       }
+}
+
+function parseCollapseString()
+{
+       collapseString = getLMCookie('phplm_collapse');
+       phplm_collapse = new Array();
+       if (collapseString) {
+               collapsed = collapseString.split('|');
+               for (i=0; i<collapsed.length-1; i++) {
+                       phplm_collapse[collapsed[i]] = 1;
+               }
+       }
+}
+
+parseExpandString();
+parseCollapseString();
+
+function saveExpandString()
+{
+       expandString = '';
+       for (i=0; i<phplm_expand.length; i++) {
+               if (phplm_expand[i] == 1) {
+                       expandString += i + '|';
+               }
+       }
+       setLMCookie('phplm_expand', expandString);
+}
+
+function saveCollapseString()
+{
+       collapseString = '';
+       for (i=0; i<phplm_collapse.length; i++) {
+               if (phplm_collapse[i] == 1) {
+                       collapseString += i + '|';
+               }
+       }
+       setLMCookie('phplm_collapse', collapseString);
+}
+
diff --git a/gosa-core/include/utils/layer-menu/libjs/layerstreemenu.ijs b/gosa-core/include/utils/layer-menu/libjs/layerstreemenu.ijs
new file mode 100644 (file)
index 0000000..5274271
--- /dev/null
@@ -0,0 +1,52 @@
+// PHP Layers Menu 3.2.0-rc (C) 2001-2004 Marco Pratesi - http://www.marcopratesi.it/
+
+function {toggle_function_name}(nodeid)
+{
+       if ((!DOM || Opera56 || Konqueror22) && !IE4) {
+               return;
+       }
+       layersMoved = 0;
+       parseExpandString();
+       parseCollapseString();
+       if (!IE4) {
+               sonLayer = document.getElementById('jt' + nodeid + 'son');
+               nodeLayer = document.getElementById('jt' + nodeid + 'node');
+               folderLayer = document.getElementById('jt' + nodeid + 'folder');
+       } else {
+               sonLayer = document.all('jt' + nodeid + 'son');
+               nodeLayer = document.all('jt' + nodeid + 'node');
+               folderLayer = document.all('jt' + nodeid + 'folder');
+       }
+       if (sonLayer.style.display == 'none') {
+               sonLayer.style.display = 'block';
+               if (nodeLayer.src.indexOf('{img_expand}') > -1) {
+                       nodeLayer.src = '{img_collapse}';
+               } else if (nodeLayer.src.indexOf('{img_expand_first}') > -1) {
+                       nodeLayer.src = '{img_collapse_first}';
+               } else if (nodeLayer.src.indexOf('{img_expand_corner}') > -1) {
+                       nodeLayer.src = '{img_collapse_corner}';
+               } else {
+                       nodeLayer.src = '{img_collapse_corner_first}';
+               }
+               folderLayer.src = '{img_folder_open}';
+               phplm_expand[nodeid] = 1;
+               phplm_collapse[nodeid] = 0;
+       } else {
+               sonLayer.style.display = 'none';
+               if (nodeLayer.src.indexOf('{img_collapse}') > -1) {
+                       nodeLayer.src = '{img_expand}';
+               } else if (nodeLayer.src.indexOf('{img_collapse_first}') > -1) {
+                       nodeLayer.src = '{img_expand_first}';
+               } else if (nodeLayer.src.indexOf('{img_collapse_corner}') > -1) {
+                       nodeLayer.src = '{img_expand_corner}';
+               } else {
+                       nodeLayer.src = '{img_expand_corner_first}';
+               }
+               folderLayer.src = '{img_folder_closed}';
+               phplm_expand[nodeid] = 0;
+               phplm_collapse[nodeid] = 1;
+       }
+       saveExpandString();
+       saveCollapseString();
+}
+