function auth_generate_admin_menu($menu_obj)
{
    $menu_obj->auth_update();
    global $C_translate, $smarty, $C_list;
    $i = 1;
    $js = '';
    $arr = $menu_obj->module;
    $arr2 = $menu_obj->module;
    // loop through the modules
    while (list($module, $val) = each($arr)) {
        if (!empty($val[2])) {
            if ($val[1] == $val[0] || empty($val[0]) || empty($val[1])) {
                $module_name = $C_translate->translate('menu', $module, '');
                $parent = $val[0];
                $module_id = $val[0];
                $module_arr[$i]["name"] = $module_name;
                $module_arr[$i]["module"] = $module;
                // loop through the methods
                while (list($method, $meth_arr) = each($arr[$module])) {
                    if (gettype($meth_arr) == 'array' && !empty($meth_arr[1])) {
                        $method_name = $C_translate->translate('menu_' . $method, $module, '');
                        if (empty($meth_arr[2])) {
                            $page = $module . ':' . $method;
                        } else {
                            $page = eregi_replace('%%', $module, $meth_arr[2]);
                        }
                        $module_arr[$i]["methods"][] = array('name' => $method_name, 'page' => $page);
                    }
                }
                // Loop through the sub-modules:
                reset($arr2);
                $ii = 0;
                while (list($module, $val) = each($arr2)) {
                    if (!empty($val[2])) {
                        if ($val[1] == $parent && $module_id != $val[0]) {
                            $module_name = $C_translate->translate('menu', $module, '');
                            $module_arr[$i]["sub_name"][$ii] = $module_name;
                            // loop through the methods
                            while (list($method, $meth_arr) = each($arr2[$module])) {
                                if (gettype($meth_arr) == 'array' && !empty($meth_arr[1])) {
                                    $method_name = $C_translate->translate('menu_' . $method, $module, '');
                                    if (empty($meth_arr[2])) {
                                        $page = $module . ':' . $method;
                                    } else {
                                        $page = eregi_replace('%%', $module, $meth_arr[2]);
                                    }
                                    $module_arr[$i]["sub_methods"][$ii][] = array('name' => $method_name, 'page' => $page);
                                }
                            }
                            $ii++;
                        }
                    }
                }
                $i++;
            }
        }
    }
    // Generate the main modules:
    $js = '';
    $js .= ".|Overview|javascript:openUrl('?_page=core:admin');\n";
    $js .= ".|Exit Administration|javascript:exitAdmin();\n";
    $js .= ".|Misc\n";
    $js .= "..|Documentation|http://agilebill.com/documentation|||mainFrame\n";
    $js .= "..|Agileco News|http://forum.agileco.com/forumdisplay.php?f=26|||mainFrame\n";
    $js .= "..|Version Check|?_page=module:upgrade|||mainFrame\n";
    for ($i = 1; $i <= count($module_arr); $i++) {
        $name = $module_arr[$i]['name'];
        $js .= ".|{$name}\n";
        // Generate the main methods:
        for ($ii = 0; $ii < count($module_arr[$i]['methods']); $ii++) {
            $name = $module_arr[$i]['methods'][$ii]['name'];
            $page = $module_arr[$i]['methods'][$ii]['page'];
            $js .= "..|{$name}|javascript:openUrl('?_page={$page}')\n";
        }
        // Generate the sub modules:
        for ($ii = 0; $ii < count(@$module_arr[$i]['sub_name']); $ii++) {
            $name = $module_arr[$i]['sub_name'][$ii];
            $js .= "..|{$name}|#\n";
            // Generate the sub methods:
            for ($iii = 0; $iii < count($module_arr[$i]['sub_methods'][$ii]); $iii++) {
                $name = $module_arr[$i]['sub_methods'][$ii][$iii]['name'];
                $page = $module_arr[$i]['sub_methods'][$ii][$iii]['page'];
                $js .= "...|{$name}|javascript:openUrl('?_page={$page}')\n";
            }
        }
    }
    # set the dates for the quicksearch
    $smarty->assign('today_start', $C_list->date(mktime(0, 0, 0, date("m"), date("d"), date("Y"))));
    $smarty->assign('week_start', $C_list->date(mktime(0, 0, 0, date("m"), date("d") - 7, date("Y"))));
    $smarty->assign('month_start', $C_list->date(mktime(0, 0, 0, date("m"), 1, date("Y"))));
    # Generate the menu
    require_once PATH_INCLUDES . "phplayers/PHPLIB.php";
    require_once PATH_INCLUDES . "phplayers/layersmenu-common.inc.php";
    require_once PATH_INCLUDES . "phplayers/treemenu.inc.php";
    // unstoppable agileco logo ;)
    echo '<img src="http://www.agileco.com/images/poweredby.gif" border="0" style="position: absolute; top: 8px; left: 45px;"/>';
    $mnu = new TreeMenu();
    $mnu->setMenuStructureString($js);
    $mnu->setIconsize(16, 16);
    $mnu->parseStructureForMenu('treemenu1');
    $mnu->setTreemenuTheme("kde_");
    return $mnu->newTreeMenu('treemenu1');
    return $js;
}