Index: /FCKeditor/trunk/editor/_source/classes/fckpanel.js
===================================================================
--- /FCKeditor/trunk/editor/_source/classes/fckpanel.js	(revision 1090)
+++ /FCKeditor/trunk/editor/_source/classes/fckpanel.js	(revision 1091)
@@ -192,9 +192,8 @@
 
 		// Base the popup coordinates upon the coordinates of relElement.
-		var oPos = FCKTools.GetElementPosition(
+		var oPos = FCKTools.GetDocumentPosition( this._Window,
 			relElement.nodeType == 9 ?
 				( FCKTools.IsStrictMode( relElement ) ? relElement.documentElement : relElement.body ) :
-				relElement,
-			this._Window ) ;
+				relElement ) ;
 
 		// Minus the offsets provided by any positioned parent element of the panel iframe.
@@ -202,8 +201,7 @@
 		if ( positionedAncestor )
 		{
-			// GetElementPosition() does not work here for some reason... so I'm using GetDocumentPosition() here instead.
 			var nPos = FCKTools.GetDocumentPosition( FCKTools.GetElementWindow( positionedAncestor ), positionedAncestor ) ;
-			oPos.X -= nPos.x ;
-			oPos.Y -= nPos.y ;
+			oPos.x -= nPos.x ;
+			oPos.y -= nPos.y ;
 		}
 
@@ -211,6 +209,6 @@
 			x = ( x * -1 ) ;
 
-		x += oPos.X ;
-		y += oPos.Y ;
+		x += oPos.x ;
+		y += oPos.y ;
 
 		if ( this.IsRTL )
Index: /FCKeditor/trunk/editor/_source/internals/fcktools.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fcktools.js	(revision 1090)
+++ /FCKeditor/trunk/editor/_source/internals/fcktools.js	(revision 1091)
@@ -424,10 +424,40 @@
 	var y = 0 ;
 	var curNode = node ;
-	while ( curNode && curNode != w.document.body )
+	var prevNode = null ;
+	var curWindow = FCKTools.GetElementWindow( curNode ) ;
+	while ( curNode && !( curWindow == w && curNode == w.document.body ) )
 	{
 		x += curNode.offsetLeft - curNode.scrollLeft ;
 		y += curNode.offsetTop - curNode.scrollTop ;
-		curNode = curNode.offsetParent ;
-	}
+
+		if ( ! FCKBrowserInfo.IsOpera )
+		{
+			var scrollNode = prevNode ;
+			while ( scrollNode && scrollNode != curNode )
+			{
+				x -= scrollNode.scrollLeft ;
+				y -= scrollNode.scrollTop ;
+				scrollNode = scrollNode.parentNode ;
+			}
+		}
+
+		prevNode = curNode ;
+		if ( curNode.offsetParent )
+			curNode = curNode.offsetParent ;
+		else
+		{
+			if ( curWindow != w )
+			{
+				curNode = curWindow.frameElement ;
+				prevNode = null ;
+				if ( curNode )
+					curWindow = FCKTools.GetElementWindow( curNode ) ;
+			}
+			else
+				curNode = null ;
+		}
+	}
+	x += w.document.body.offsetLeft ;
+	y += w.document.body.offsetTop ;
 	return { "x" : x, "y" : y } ;
 }
