Index: /FCKeditor/branches/features/floating_dialog/editor/_source/internals/fckdialog.js
===================================================================
--- /FCKeditor/branches/features/floating_dialog/editor/_source/internals/fckdialog.js	(revision 1230)
+++ /FCKeditor/branches/features/floating_dialog/editor/_source/internals/fckdialog.js	(revision 1231)
@@ -30,4 +30,21 @@
 	// The document that holds the dialog.
 	var topWindow = window.parent ;
+
+	while ( topWindow.parent && topWindow.parent != topWindow )
+	{
+		try
+		{
+			if ( topWindow.parent.document.domain != document.domain )
+				break ;
+			if ( topWindow.parent.document.getElementsByTagName( 'frameset' ).length > 0 )
+				break ;
+		}
+		catch ( e )
+		{
+			break ;
+		}
+		topWindow = topWindow.parent ;
+	}
+
 	var topDocument = topWindow.document ;
 
@@ -77,5 +94,6 @@
 				Editor : window,
 				CustomValue : customValue,		// Optional
-				SelectionData : null
+				SelectionData : null,
+				TopWindow : topWindow
 			}
 
Index: /FCKeditor/branches/features/floating_dialog/editor/_source/internals/fcktools.js
===================================================================
--- /FCKeditor/branches/features/floating_dialog/editor/_source/internals/fcktools.js	(revision 1230)
+++ /FCKeditor/branches/features/floating_dialog/editor/_source/internals/fcktools.js	(revision 1231)
@@ -452,5 +452,5 @@
 				prevNode = null ;
 				if ( curNode )
-					curWindow = FCKTools.GetElementWindow( curNode ) ;
+					curWindow = curNode.contentWindow.parent ;
 			}
 			else
Index: /FCKeditor/branches/features/floating_dialog/editor/fckdialog.html
===================================================================
--- /FCKeditor/branches/features/floating_dialog/editor/fckdialog.html	(revision 1230)
+++ /FCKeditor/branches/features/floating_dialog/editor/fckdialog.html	(revision 1231)
@@ -54,5 +54,5 @@
 		try
 		{
-			var parentDomain = window.parent ? window.parent.document.domain : editor.document.domain ;
+			var parentDomain = args.TopWindow ? args.TopWindow.document.domain : editor.document.domain ;
 
 			if ( document.domain != parentDomain )
@@ -104,5 +104,5 @@
 	// Connect mousemove and mouseup events from dialog frame and outer window to dialog dragging logic.
 	DnD.RegisterHandlers( window ) ;
-	DnD.RegisterHandlers( window.parent ) ;
+	DnD.RegisterHandlers( args.TopWindow ) ;
 
 	// Disable the previous dialog if it exists.
@@ -520,7 +520,7 @@
 		var retval = { 'x': evt.clientX, 'y': evt.clientY };
 
-		if ( view != window.parent )
-		{
-			var offset = FCKTools.GetDocumentPosition( window.parent, doc.documentElement ) ;
+		if ( view != args.TopWindow )
+		{
+			var offset = FCKTools.GetDocumentPosition( args.TopWindow, doc.documentElement ) ;
 			retval.x += offset.x ;
 			retval.y += offset.y ;
@@ -535,6 +535,6 @@
 			return ;
 
-		// Debouncing logic for Opera and IE7, for preventing the dialog from vibrating during mouse drags.
-		if ( FCKBrowserInfo.IsOpera || FCKBrowserInfo.IsIE7 )
+		// Debouncing logic for Opera, for preventing the dialog from vibrating during mouse drags.
+		if ( FCKBrowserInfo.IsOpera )
 		{
 			if ( window.LastMoveTimestamp > (new Date()).getTime() - 20 )
@@ -552,6 +552,6 @@
 		lastCoords = currentCoords;
 
-		var x = parseInt( FCKDomTools.GetCurrentElementStyle( window.parent, frameElement, 'left' ) ) + dx ;
-		var y = parseInt( FCKDomTools.GetCurrentElementStyle( window.parent, frameElement, 'top' ) ) + dy ;
+		var x = parseInt( FCKDomTools.GetCurrentElementStyle( args.TopWindow, frameElement, 'left' ) ) + dx ;
+		var y = parseInt( FCKDomTools.GetCurrentElementStyle( args.TopWindow, frameElement, 'top' ) ) + dy ;
 		FCKDomTools.SetElementStyles( frameElement,
 				{
