From 4edbff9fc13d49eb0c887be8c58c8e66dceb4c5c Mon Sep 17 00:00:00 2001
From: Brandon Aaron <brandon.aaron@gmail.com>
Date: Fri, 17 Jul 2009 21:08:13 +0000
Subject: [PATCH] fix for #4906

---
 src/offset.js |   31 +++++++++++++++++--------------
 1 file changed, 17 insertions(+), 14 deletions(-)

diff --git a/src/offset.js b/src/offset.js
index 0a8b9e6..6b52b6f 100644
--- a/src/offset.js
+++ b/src/offset.js
@@ -75,7 +75,7 @@ jQuery.offset = {
 
 		body.removeChild( container );
 		jQuery.offset.initialize = function(){};
-		
+
 		body = container = innerDiv = checkDiv = table = td = null;
 	},
 
@@ -135,32 +135,35 @@ jQuery.each( ['Left', 'Top'], function(i, name) {
 
 	jQuery.fn[ method ] = function(val) {
 		if ( !this[0] ) return null;
-		
-		var elem = this[0], win = ("scrollTo" in elem && elem.document) ? elem :
-			(elem.nodeName === "#document") ? elem.defaultView || elem.parentWindow :
-				false;
-
-		return val !== undefined ?
 
+		if ( val !== undefined ) {
 			// Set the scroll offset
-			this.each(function() {
-				win = ("scrollTo" in this && this.document) ? this : 
-					(this.nodeName === "#document") ? this.defaultView || this.parentWindow :
-						false;
-				
+			return this.each(function() {
+				win = getWindow( this );
+
 				win ?
 					win.scrollTo(
 						!i ? val : jQuery(win).scrollLeft(),
 						 i ? val : jQuery(win).scrollTop()
 					) :
 					this[ method ] = val;
-			}) :
+			});
+		} else {
+			var elem = this[0],
+				win  = getWindow( elem );
 
 			// Return the scroll offset
-			win ?
+			return win && 'pageXOffset' in win ?
 				win[ i ? 'pageYOffset' : 'pageXOffset' ] ||
 					jQuery.support.boxModel && win.document.documentElement[ method ] ||
 					win.document.body[ method ] :
 				elem[ method ];
+		}
 	};
+
+	function getWindow( elem ) {
+		return ("scrollTo" in elem && elem.document) ? elem :
+			(elem.nodeName === "#document") ? elem.defaultView || elem.parentWindow :
+				false;
+	}
 });
-- 
1.7.10.4