<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -79,6 +79,18 @@
     return true;
   }
   
+  var hasLayout = Prototype.K;
+  
+  if ('currentStyle' in document.documentElement) {
+    hasLayout = function(element) {
+      if (!element.currentStyle.hasLayout) {
+        element.style.zoom = 1;
+      }
+      return element;
+    };
+  }
+  
+  
   /**
    *  class Element.Layout &lt; Hash
    *  
@@ -411,7 +423,14 @@
      *  Element.Offset#inspect() -&gt; String
     **/
     inspect: function() {
-      return &quot;#&lt;Element.Offset left: #{left} top: #{top}&quot;.interpolate(this);
+      return &quot;#&lt;Element.Offset left: #{left} top: #{top}&gt;&quot;.interpolate(this);
+    },
+    
+    /**
+     *  Element.Offset#toString() -&gt; String
+    **/
+    toString: function() {
+      return &quot;[#{left}, #{top}]&quot;.interpolate(this);
     },
     
     /**
@@ -477,17 +496,24 @@
    *  (the element that would be returned by [[Element.getOffsetParent]]).
   **/  
   function positionedOffset(element) {
+    // Account for the margin of the element.
+    var layout = element.getLayout();
+
     var valueT = 0, valueL = 0;
     do {
       valueT += element.offsetTop  || 0;
       valueL += element.offsetLeft || 0;
       element = element.offsetParent;
       if (element) {
-        if (element.tagName.toUpperCase() == 'BODY') break;
+        if (isBody(element)) break;
         var p = Element.getStyle(element, 'position');
         if (p !== 'static') break;
       }
     } while (element);
+    
+    valueL -= layout.get('margin-top');
+    valueT -= layout.get('margin-left');    
+    
     return new Element.Offset(valueL, valueT);
   }
 
@@ -544,6 +570,10 @@
     viewportOffset:         viewportOffset
   });
   
+  function isBody(element) {
+    return $w('BODY HTML').include(element.nodeName.toUpperCase());
+  }
+  
   // If the browser supports the nonstandard `getBoundingClientRect`
   // (currently only IE and Firefox), it becomes far easier to obtain
   // true offsets.
@@ -565,11 +595,26 @@
       positionedOffset: function(element) {
         element = $(element);
         var parent = element.getOffsetParent();
-        var isBody = (parent.nodeName.toUpperCase() === 'BODY');
+        
+        // When the BODY is the offsetParent, IE6 mistakenly reports the
+        // parent as HTML. Use that as the litmus test to fix another
+        // annoying IE6 quirk.
+        if (parent.nodeName.toUpperCase() === 'HTML') {
+          return positionedOffset(element);
+        }
+        
         var eOffset = element.viewportOffset(),
-          pOffset = isBody ? viewportOffset(parent) : parent.viewportOffset();
-        return eOffset.relativeTo(pOffset);
+         pOffset = isBody(parent) ? viewportOffset(parent) : 
+          parent.viewportOffset();
+        var retOffset = eOffset.relativeTo(pOffset);
+        
+        // Account for the margin of the element.
+        var layout = element.getLayout();
+        var top  = retOffset.top  - layout.get('margin-top');
+        var left = retOffset.left - layout.get('margin-left');
+        
+        return new Element.Offset(left, top);
       }
-    });
+    });    
   }  
 })();
\ No newline at end of file</diff>
      <filename>src/dom/layout.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>7aa195b650d6c415a6c90753b19f409e3ec15c3a</id>
    </parent>
  </parents>
  <author>
    <name>Andrew Dupont</name>
    <email>prototype@andrewdupont.net</email>
  </author>
  <url>http://github.com/sstephenson/prototype/commit/97ea37d3d55a1d45793bda208ef918e4f06199fc</url>
  <id>97ea37d3d55a1d45793bda208ef918e4f06199fc</id>
  <committed-date>2009-11-02T21:52:07-08:00</committed-date>
  <authored-date>2009-11-02T21:52:07-08:00</authored-date>
  <message>A bunch of fixes for offsets.</message>
  <tree>bc9040a748404fab052af8d135cdf6452157c687</tree>
  <committer>
    <name>Andrew Dupont</name>
    <email>prototype@andrewdupont.net</email>
  </committer>
</commit>
