--- menu_block_split.orig	2008-07-04 16:24:44.000000000 +0200
+++ menu_block_split.module	2008-07-07 14:53:15.000000000 +0200
@@ -1,5 +1,5 @@
 <?php
-// $Id: menu_block_split.module,v 1.5 2008/05/12 14:17:29 robertgarrigos Exp $
+// $Id$
 
 /**
  * @file
@@ -16,6 +16,17 @@
 } 
 
 /**
+ * Implementation of hook_theme
+ */
+function menu_block_split_theme() {
+  return array (
+    'menu_block_split_menu' => array (
+      'arguments' => array('name', 'tree', 'level'),
+    ),
+  );
+}
+
+/**
  * Implementation of hook_menu
  */
 function menu_block_split_menu() {
@@ -54,12 +65,9 @@
   );
   unset($options);
   //$blocks = _block_rehash();
-  $menu = menu_get_menu();
-  foreach ($menu['items'] as $pid => $item) {
-    if (isset($menu['visible'][$pid]) && $item['children'] && ($pid > 0)) {
-      // TODO: indented representation of the menu title
-      $options[$pid] = $item['title'];
-    }  
+  $menu = menu_get_menus();
+  foreach ($menu as $key => $val) {
+    $options[$key] = $val;
   }
   for ($i = 1; $i <= variable_get('mbs_howmany', 1); $i++) {
     $form['mbs_fieldset_'. $i] = array(
@@ -93,9 +101,8 @@
   
   if ($op == 'list') {
     for ($i = 1; $i <= variable_get('mbs_howmany', 1); $i++) { 
-      $mid = variable_get('mbs_'. $i, '');
-      $item = menu_get_item($mid);
-      $blocks[$i]['info'] = 'mbs-'. $item['title'] .'-1st';
+      $name = variable_get('mbs_'. $i, '');
+      $blocks[$i]['info'] = 'mbs-'. $name .'-1st';
     }
     $blocks[1000]['info'] = 'mbs-2nd';
     return $blocks;
@@ -103,90 +110,73 @@
   else if ($op == 'view') {
     switch ($delta) {
       case $delta < 1000:
+        $tree = menu_tree_page_data(variable_get('mbs_'. $delta, ''));
         $block['subject'] = variable_get('mbstitle_'. $delta, '');
-        $block['content'] = theme(menu_block_split_first_level_menu, variable_get('mbs_'. $delta, ''));
+        $block['content'] = theme('menu_block_split_menu', variable_get('mbs_'. $delta, ''), $tree, $delta);
         break;
       case 1000:
-        $mid = menu_get_active_nontask_item();
         for ($i = 1; $i <= variable_get('mbs_howmany', 1); $i++) {
-          $pid = variable_get('mbs_'. $i, '');
-          if (menu_block_split_is_child($pid, $mid)) {
-            if (menu_block_split_is_first_level($mid)) {
-              $item = menu_get_item($mid);
-              $block['subject'] = $item['title'];
-              $block['content'] = theme('menu_tree', $mid);
-            }
-            else {
-              $menu = menu_get_menu();
-              $menu = $menu['visible'];
-              foreach ($menu as $key => $value) {
-                if (menu_in_active_trail($key) && menu_block_split_is_first_level($key)) {
-                  $block['subject'] = menu_block_split_block_title($key, false);
-                  $block['content'] = theme('menu_tree', $key);
-                } 
-              }
-            }
-          }
+          $name = variable_get('mbs_'. $i, '');
+          $active = menu_get_active_menu_name();
+          if ($active != $name) menu_set_active_menu_name($name);
+          $trail = menu_get_active_trail();
+          $tree = menu_tree_page_data($name);
+          $info = get_first_level($trail);
+          $block['subject'] = $info['title'];
+          $block['content'] = theme('menu_block_split_menu', $name, $tree, $delta);
         }
     }
     return $block;
   }
 }
 
-function menu_block_split_first_level_menu_tree($pid = 1) {
-  $menu = menu_get_menu();
-  $output = '';
-
-  if (isset($menu['visible'][$pid]) && $menu['visible'][$pid]['children']) {
-    foreach ($menu['visible'][$pid]['children'] as $mid) {
-      $output .= theme('menu_item', $mid);
-    }
-  }
-  return $output;
-}
-
-function theme_menu_block_split_first_level_menu($pid = 1) {
-  if ($tree = menu_block_split_first_level_menu_tree($pid)) {
-    return "\n<ul class=\"menu\">\n". $tree ."\n</ul>\n";
-  }
-}
-
-function menu_block_split_is_first_level($mid) {
-  $item = menu_get_item($mid);
-  $parent = menu_get_item($item['pid']);
-  if ($parent['pid'] == 0) {
-    return TRUE;
-  }
-  else {
-    return FALSE;
+/**
+ * Theme menu
+ *
+ * @param string $name
+ * @param array $tree
+ * @return menu tree
+ */
+function theme_menu_block_split_menu($name = 'navigation', $tree, $level) {
+  if ($menu = menu_block_split_render_tree($tree, $level)) {
+    return $menu;
   }
 }
 
-function menu_block_split_is_second_level($mid) {
-  $item = menu_get_item($mid);
-  return menu_block_split_is_first_level($item['pid']);
-}
+/**
+ * Render menu
+ *
+ * @return menu tree
+ */
+function menu_block_split_render_tree($tree, $level) {
 
-function menu_block_split_block_title($mid, $parent) {
-  $item = menu_get_item($mid);
-  $parent_item = menu_get_item($item['pid']);
-  $title = ($parent) ? $parent_item['title'] : $item['title'];
-  return $title;
-}
+  $output = '';
 
-function menu_block_split_is_child($parent, $child) {
-  $item = menu_get_item($parent);
-  if (is_array($item['children'])) {
-    if (in_array($child, $item['children'])) {
-      return TRUE;
-    }
-    else {
-      foreach ($item['children'] as $c) {
-        if (menu_block_split_is_child($c, $child) == TRUE) {
-          return TRUE;
+  $num_items = count($items);
+  foreach ($tree as $i => $mid) {
+    if ($mid['link']['hidden'] == 0) {
+      $link = theme('menu_item_link', $mid['link']);
+      // our first block
+      if ($level < 1000) {
+        $output .= theme('menu_item', $link, '');
+      }
+      // sub block
+      else {
+        if ($mid['below']) {
+          $output .= menu_tree_output($mid['below'], $level);
         }
       }
     }
   }
-return FALSE;
-}
\ No newline at end of file
+  if ($output) return "\n<ul class=\"menu\">\n". $output ."\n</ul>\n";
+}
+
+/**
+ * Get info about first level.
+ * 
+ * @param array $trail current trail
+ * @return title
+ */
+function get_first_level($trail) {
+  return array('mlid' => $trail[1]['mlid'], 'title' => $trail[1]['title']);
+}
