Index: misc/tableheader.js
===================================================================
RCS file: /cvs/drupal/drupal/misc/tableheader.js,v
retrieving revision 1.15
diff -u -r1.15 tableheader.js
--- misc/tableheader.js	23 Jan 2008 09:48:10 -0000	1.15
+++ misc/tableheader.js	27 Jan 2008 21:35:23 -0000
@@ -1,5 +1,13 @@
 // $Id: tableheader.js,v 1.15 2008/01/23 09:48:10 goba Exp $
 
+Drupal.tableHeaderOnScroll;
+
+Drupal.tableHeaderDoScroll = function() {
+  if (Drupal.tableHeaderOnScroll) {
+    Drupal.tableHeaderOnScroll();
+  }
+};
+
 Drupal.behaviors.tableHeader = function (context) {
   // This breaks in anything less than IE 7. Prevent it from running.
   if (jQuery.browser.msie && parseInt(jQuery.browser.version) < 7) {
@@ -58,14 +66,20 @@
     $(e).css({left: -hScroll + e.hPosition +'px', visibility: visState});
   };
 
+  // Only attach to scrollbars once, even if Drupal.attachBehaviors is called
+  //  multiple times.
+  if (!$('body').hasClass('tableHeader-processed')) {
+    $('body').addClass('tableHeader-processed');
+    $(window).scroll(Drupal.tableHeaderDoScroll);
+    $(document.documentElement).scroll(Drupal.tableHeaderDoScroll);
+  }
+
   // Track scrolling.
-  var scroll = function() {
+  Drupal.tableHeaderOnScroll = function() {
     $(headers).each(function () {
       tracker(this);
     });
   };
-  $(window).scroll(scroll);
-  $(document.documentElement).scroll(scroll);
 
   // Track resizing.
   var time = null;
