Index: admin_menu.js
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/admin_menu/admin_menu.js,v
retrieving revision 1.2.2.14
diff -u -p -r1.2.2.14 admin_menu.js
--- admin_menu.js	24 Jan 2009 04:59:29 -0000	1.2.2.14
+++ admin_menu.js	12 Feb 2009 14:44:04 -0000
@@ -1,31 +1,73 @@
 /* $Id: admin_menu.js,v 1.2.2.14 2009/01/24 04:59:29 sun Exp $ */
 
-$(document).ready(function() {
-  // Apply margin-top if enabled; directly applying marginTop doesn't work in IE.
-  if ($('#admin-menu').size() && Drupal.settings.admin_menu) {
-    if (Drupal.settings.admin_menu.margin_top) {
-      $('body').addClass('admin-menu');
-    }
-    if (Drupal.settings.admin_menu.position_fixed) {
-      $('#admin-menu').css('position', 'fixed');
-    }
-    // Move page tabs into administration menu.
-    if (Drupal.settings.admin_menu.tweak_tabs) {
-      $('ul.tabs.primary li').each(function() {
-        $(this).addClass('admin-menu-tab').appendTo('#admin-menu > ul');
-      });
-      $('ul.tabs.secondary').appendTo('#admin-menu > ul > li.admin-menu-tab.active');
-    }
+Drupal.adminMenu = Drupal.adminMenu || {};
+
+/**
+ * Core behavior for Administration menu.
+ *
+ * This tests whether there is an administration menu is in the output and
+ * executes all registered behaviors.
+ */
+Drupal.behaviors.adminMenu = function (context) {
+  var $adminMenu = $('#admin-menu');
+  if ($adminMenu.size()) {
+    jQuery.each(Drupal.adminMenu, function() {
+      this(context, $adminMenu);
+    });
   }
+};
 
-  // Collapse fieldsets on Modules page. For why multiple selectors see #111719.
+/**
+ * Collapse fieldsets on Modules page.
+ *
+ * For why multiple selectors see #111719.
+ */
+Drupal.behaviors.adminMenuCollapseModules = function (context) {
   if (Drupal.settings.admin_menu && Drupal.settings.admin_menu.tweak_modules) {
-    $('#system-modules fieldset:not(.collapsed), #system-modules-1 fieldset:not(.collapsed)').addClass('collapsed');
+    $('#system-modules fieldset:not(.collapsed), #system-modules-1 fieldset:not(.collapsed)', context).addClass('collapsed');
+  }
+};
+
+/**
+ * Apply 'margin-top'; directly applying marginTop does not work in IE.
+ */
+Drupal.adminMenu.marginTop = function (context, $adminMenu) {
+  if (Drupal.settings.admin_menu && Drupal.settings.admin_menu.margin_top) {
+    $('body', context).addClass('admin-menu');
+  }
+};
+
+/**
+ * Apply 'position: fixed'.
+ */
+Drupal.adminMenu.positionFixed = function (context, $adminMenu) {
+  if (Drupal.settings.admin_menu && Drupal.settings.admin_menu.position_fixed) {
+    $adminMenu.css('position', 'fixed');
   }
+};
 
+/**
+ * Move page tabs into administration menu.
+ */
+Drupal.adminMenu.pageTabs = function (context, $adminMenu) {
+  if (Drupal.settings.admin_menu && Drupal.settings.admin_menu.tweak_tabs) {
+    $('ul.tabs.primary li', context).each(function() {
+      $(this).addClass('admin-menu-tab').appendTo('#admin-menu > ul');
+    });
+    $('ul.tabs.secondary').appendTo('#admin-menu > ul > li.admin-menu-tab.active');
+  }
+};
+
+/**
+ * Apply JavaScript-based hovering behaviors.
+ *
+ * @todo This has to run last.  If another script registers additional behaviors
+ *   it will not run last.
+ */
+Drupal.adminMenu.hover = function (context, $adminMenu) {
   // Hover emulation for IE 6.
   if ($.browser.msie && parseInt(jQuery.browser.version) == 6) {
-    $('#admin-menu li').hover(function() {
+    $('li', $adminMenu).hover(function() {
       $(this).addClass('iehover');
     }, function() {
       $(this).removeClass('iehover');
@@ -33,7 +75,7 @@ $(document).ready(function() {
   }
 
   // Delayed mouseout.
-  $('#admin-menu li').hover(function() {
+  $('li', $adminMenu).hover(function() {
     // Stop the timer.
     clearTimeout(this.sfTimer);
     // Display child lists.
@@ -47,4 +89,13 @@ $(document).ready(function() {
       uls.css({left: '-999em', display: 'none'});
     }, 400);
   });
+};
+
+/**
+ * D5 only: Queue our attach behavior.
+ */
+$(function() {
+  Drupal.behaviors.adminMenu(document);
+  Drupal.behaviors.adminMenuCollapseModules(document);
 });
+
