Index: misc/tableheader.js
===================================================================
RCS file: /cvs/drupal/drupal/misc/tableheader.js,v
retrieving revision 1.13
diff -u -p -r1.13 tableheader.js
--- misc/tableheader.js	15 Jan 2008 10:43:00 -0000	1.13
+++ misc/tableheader.js	20 Jan 2008 01:25:42 -0000
@@ -23,7 +23,6 @@ Drupal.behaviors.tableHeader = function 
     var table = $(this).parent('table')[0];
     headerClone.table = table;
     // Finish initialzing header positioning.
-    headerClone.resizeWidths = true;
     tracker(headerClone);
 
     $(table).addClass('sticky-table');
@@ -34,36 +33,30 @@ Drupal.behaviors.tableHeader = function 
   function tracker(e) {
     // Save positioning data.
     var viewHeight = document.documentElement.scrollHeight || document.body.scrollHeight;
-    if (e.viewHeight != viewHeight || e.resizeWidths) {
+    if (e.viewHeight != viewHeight) {
       e.viewHeight = viewHeight;
-      e.vPosition = $(e.table).offset().top;
+      e.vPosition = $(e.table).offset().top - 4;
       e.hPosition = $(e.table).offset().left;
-      e.vLength = $(e.table).height();
-      e.resizeWidths = true;
-    }
-
-    // Track horizontal positioning relative to the viewport and set visibility.
-    var hScroll = document.documentElement.scrollLeft || document.body.scrollLeft;
-    var vScroll = document.documentElement.scrollTop || document.body.scrollTop;
-    var vOffset = vScroll - e.vPosition - 4;
-    var visState = (vOffset > 0 && vOffset < e.vLength - 100) ? 'visible' : 'hidden';
-    $(e).css({left: -hScroll + e.hPosition +'px', visibility: visState});
-
-    // Resize cell widths.
-    if (e.resizeWidths) {
+      e.vLength = e.table.clientHeight - 100;
+      // Resize header and its cell widths.
       var cellCount = 0;
       $('th', e).each(function() {
-        var cellWidth = parseInt($('th', e.table).eq(cellCount).css('width'));
+        var cellWidth = $('th', e.table).eq(cellCount).css('width');
         // Exception for IE7.
-        if (!cellWidth) {
-          var cellWidth = $('th', e.table).eq(cellCount).width();
+        if (cellWidth == 'auto') {
+          var cellWidth = $('th', e.table).get(cellCount).clientWidth +'px';
         }
         cellCount++;
-        $(this).css('width', cellWidth +'px');
+        $(this).css('width', cellWidth);
       });
-      $(e).css('width', $(e.table).width() +'px');
-      e.resizeWidths = false;
+      $(e).css('width', $(e.table).css('width'));
     }
+
+    // Track horizontal positioning relative to the viewport and set visibility.
+    var hScroll = document.documentElement.scrollLeft || document.body.scrollLeft;
+    var vOffset = (document.documentElement.scrollTop || document.body.scrollTop) - e.vPosition;
+    var visState = (vOffset > 0 && vOffset < e.vLength) ? 'visible' : 'hidden';
+    $(e).css({left: -hScroll + e.hPosition +'px', visibility: visState});
   };
 
   // Track scrolling.
@@ -84,7 +77,8 @@ Drupal.behaviors.tableHeader = function 
     }
     time = setTimeout(function () {
       $(headers).each(function () {
-        this.resizeWidths = true;
+        // Force cell width calculation.
+        this.viewHeight = 0;
         tracker(this);
       });
       // Reset timer
