Index: /FCKeditor/branches/developers/martinkou/editor/plugins/dragresizetable/fckplugin.js
===================================================================
--- /FCKeditor/branches/developers/martinkou/editor/plugins/dragresizetable/fckplugin.js	(revision 457)
+++ /FCKeditor/branches/developers/martinkou/editor/plugins/dragresizetable/fckplugin.js	(revision 458)
@@ -6,4 +6,5 @@
 	"_MouseMoveMode" : 0,	// 0 - find candidate cells for resizing, 1 - drag to resize
 	"_ResizeBar" : null,
+	"_OriginalX" : null,
 	"_GetWindowScrollX" : function( w )
 	{
@@ -59,5 +60,5 @@
 		return false;
 	},
-	"_GetBorderCells" : function( w, tableNode, evt )
+	"_GetBorderCells" : function( w, tableNode, mouse )
 	{
 		// Enumerate all the cells in the table.
@@ -83,6 +84,6 @@
 			var pos = FCKDragTableHandler._GetWindowPosition( w, cells[i] ) ;
 			var rightX = pos.x + parseInt( cells[i].clientWidth ) ;
-			var rxDist = evt.clientX - rightX ;
-			var yDist = evt.clientY - ( pos.y + ( cells[i].clientHeight / 2 ) ) ;
+			var rxDist = mouse.x - rightX ;
+			var yDist = mouse.y - ( pos.y + ( cells[i].clientHeight / 2 ) ) ;
 			if ( minRxDist == null || 
 					( Math.abs( rxDist ) <= Math.abs( minRxDist ) &&
@@ -101,27 +102,33 @@
 
 		// Abort if too far from the border.
-		lxDist = evt.clientX - FCKDragTableHandler._GetWindowPosition( w, lbCell ).x ;
-		if ( lxDist < 0 && minRxDist < 0 && lxDist < -3 )
+		lxDist = mouse.x - FCKDragTableHandler._GetWindowPosition( w, lbCell ).x ;
+		if ( lxDist < 0 && minRxDist < 0 && minRxDist < -2 )
 			return null ; 
-		if ( lxDist > 0 && minRxDist > 0 && minRxDist > 3 )
+		if ( lxDist > 0 && minRxDist > 0 && lxDist > 3 )
 			return null ;
 
 		return { "leftCell" : rbCell, "rightCell" : lbCell } ;
 	},
-	"MouseDownListener" : function( FCK, evt )
-	{
+	"_ResizeBarMouseDownListener" : function( evt )
+	{
+		if ( ! evt )
+			evt = window.event ;
 		if ( FCKDragTableHandler._LeftCell )
 			FCKDragTableHandler._MouseMoveMode = 1 ;
-	},
-	"MouseUpListener" : function( FCK, evt )
-	{
+		if ( FCKBrowserInfo.IsIE )
+			FCKDragTableHandler._ResizeBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 50 ;
+		else
+			FCKDragTableHandler._ResizeBar.style.opacity = 0.5 ;
+		FCKDragTableHandler._OriginalX = evt.clientX ;
+	},
+	"_ResizeBarMouseUpListener" : function( evt )
+	{
+		if ( ! evt )
+			evt = window.event ;
 		FCKDragTableHandler._MouseMoveMode = 0 ;
-	},
-	"MouseMoveListener" : function( FCK, evt )
-	{
-		if ( FCKDragTableHandler._MouseMoveMode == 0 )
-			return FCKDragTableHandler._MouseFindHandler( FCK, evt ) ;
-		else
-			return FCKDragTableHandler._MouseDragHandler( FCK, evt ) ;
+		if ( FCKBrowserInfo.IsIE )
+			FCKDragTableHandler._ResizeBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 10 ;
+		else
+			FCKDragTableHandler._ResizeBar.style.opacity = 0.1 ;
 	},
 	"_ResizeBarMouseMoveListener" : function( evt )
@@ -186,4 +193,11 @@
 		return clientWidth - FCKDragTableHandler._GetCellPadding( table, cell ) ;
 	},
+	"MouseMoveListener" : function( FCK, evt )
+	{
+		if ( FCKDragTableHandler._MouseMoveMode == 0 )
+			return FCKDragTableHandler._MouseFindHandler( FCK, evt ) ;
+		else
+			return FCKDragTableHandler._MouseDragHandler( FCK, evt ) ;
+	},
 	"_MouseFindHandler" : function( FCK, evt )
 	{
@@ -202,4 +216,17 @@
 			return ;
 		}
+		
+		// Since this function might be called from the editing area iframe or the outer fckeditor iframe,
+		// the mouse point coordinates from evt.clientX/Y can have different reference points.
+		// We need to resolve the mouse pointer position relative to the editing area iframe.
+		var mouseX = evt.clientX ;
+		var mouseY = evt.clientY ;
+		if ( node.ownerDocument == document )
+		{
+			var offset = FCKDragTableHandler._GetDocumentPosition( window, FCK.EditingArea.IFrame ) ;
+			mouseX -= offset.x ;
+			mouseY -= offset.y ;
+		}
+
 
 		if ( FCKDragTableHandler._ResizeBar && FCKDragTableHandler._LeftCell )
@@ -207,12 +234,12 @@
 			var leftPos = FCKDragTableHandler._GetWindowPosition( FCK.EditorWindow, FCKDragTableHandler._LeftCell ) ;
 			var rightPos = FCKDragTableHandler._GetWindowPosition( FCK.EditorWindow, FCKDragTableHandler._RightCell ) ; 
-			var lxDist = evt.clientX - ( leftPos.x + FCKDragTableHandler._LeftCell.clientWidth ) ;
-			var rxDist = evt.clientX - rightPos.x ;
+			var rxDist = mouseX - ( leftPos.x + FCKDragTableHandler._LeftCell.clientWidth ) ;
+			var lxDist = mouseX - rightPos.x ;
 			var inRangeFlag = false ;
 			if ( lxDist >= 0 && rxDist <= 0 )
 				inRangeFlag = true ;
-			else if ( rxDist > 0 && rxDist < 3 )
+			else if ( rxDist > 0 && lxDist <= 3 )
 				inRangeFlag = true ;
-			else if ( lxDist < 0 && lxDist > -3 )
+			else if ( lxDist < 0 && rxDist >= -2 )
 				inRangeFlag = true ;
 			if ( inRangeFlag )
@@ -220,5 +247,5 @@
 				FCKDragTableHandler._ShowResizeBar( FCK.EditorWindow, 
 					FCKTools.GetElementAscensor( FCKDragTableHandler._LeftCell, "table" ),
-					evt ) ;
+					{ "x" : mouseX, "y" : mouseY } ) ;
 				return ;
 			}
@@ -229,64 +256,56 @@
 		{
 			if ( FCKDragTableHandler._LeftCell )
-			{
-				FCKDragTableHandler._LeftCell.style.backgroundColor = "transparent";
-				FCKDragTableHandler._RightCell.style.backgroundColor = "transparent";
 				FCKDragTableHandler._LeftCell = FCKDragTableHandler._RightCell = null ;
-			}
 			FCKDragTableHandler._HideResizeBar() ;
 			return ;
 		}
 		node = FCKTools.GetElementAscensor( node, "table" ) ;
-		var cellTuple = FCKDragTableHandler._GetBorderCells( FCK.EditorWindow, node, evt ) ;
+		var cellTuple = FCKDragTableHandler._GetBorderCells( FCK.EditorWindow, node, { "x" : mouseX, "y" : mouseY } ) ;
 
 		if ( cellTuple == null )
 		{
 			if ( FCKDragTableHandler._LeftCell )
-			{
-				FCKDragTableHandler._LeftCell.style.backgroundColor = "transparent";
-				FCKDragTableHandler._RightCell.style.backgroundColor = "transparent";
 				FCKDragTableHandler._LeftCell = FCKDragTableHandler._RightCell = null ;
-			}
 			FCKDragTableHandler._HideResizeBar() ;
 		}
 		else
 		{
-			if (FCKDragTableHandler._LeftCell && FCKDragTableHandler._LeftCell != cellTuple["leftCell"])
-			{
-				FCKDragTableHandler._LeftCell.style.backgroundColor = "transparent";
-				FCKDragTableHandler._RightCell.style.backgroundColor = "transparent";
-			}
 			FCKDragTableHandler._LeftCell = cellTuple["leftCell"] ;
 			FCKDragTableHandler._RightCell = cellTuple["rightCell"] ;
-			cellTuple["leftCell"].style.backgroundColor = "red";
-			cellTuple["rightCell"].style.backgroundColor = "green";
 			FCKDragTableHandler._ShowResizeBar( FCK.EditorWindow, 
 					FCKTools.GetElementAscensor( FCKDragTableHandler._LeftCell, "table" ),
-					evt ) ;
+					{ "x" : mouseX, "y" : mouseY } ) ;
 		}
 	},
 	"_MouseDragHandler" : function( FCK, evt )
 	{
-	},
-	"_ShowResizeBar" : function( w, table, evt )
+		// The mouse cursor for this function is always from the outer frame, so there's no need to convert coordinates.
+		// Also, while dragging, we don't care about the Y coordinate.
+		var docX = evt.clientX + FCKDragTableHandler._GetWindowScrollX( window ) ;
+		FCKDragTableHandler._ResizeBar.style.left = ( docX - FCKDragTableHandler._ResizeBar.offsetWidth / 2 ) + "px" ;
+	},
+	"_ShowResizeBar" : function( w, table, mouse )
 	{
 		if ( FCKDragTableHandler._ResizeBar == null )
 		{
 			FCKDragTableHandler._ResizeBar = document.createElement( "div" ) ;
-			var rb = FCKDragTableHandler._ResizeBar ;
-			rb.style.position = "absolute" ;
-			rb.style.backgroundColor = "blue" ;
-			rb.style.cursor = "e-resize" ;
+			var paddingBar = FCKDragTableHandler._ResizeBar ;
+			paddingBar.style.position = "absolute" ;
+			paddingBar.style.backgroundColor = "transparent" ;
+			paddingBar.style.cursor = "e-resize" ;
 			if ( FCKBrowserInfo.IsIE )
-				rb.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=25,enabled=true)" ;
+				paddingBar.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=10,enabled=true)" ;
 			else
-				rb.style.opacity = 0.25 ;
-			document.body.appendChild( rb ) ;
-		}
-
-		var rb = FCKDragTableHandler._ResizeBar ;
+				paddingBar.style.opacity = 0.10 ;
+			document.body.appendChild( paddingBar ) ;
+			FCKTools.AddEventListener( paddingBar, "mousemove", FCKDragTableHandler._ResizeBarMouseMoveListener ) ;
+			FCKTools.AddEventListener( paddingBar, "mousedown", FCKDragTableHandler._ResizeBarMouseDownListener ) ;
+			FCKTools.AddEventListener( paddingBar, "mouseup", FCKDragTableHandler._ResizeBarMouseUpListener ) ;
+		}
+
+		var paddingBar = FCKDragTableHandler._ResizeBar ;
 		var offset = FCKDragTableHandler._GetDocumentPosition( window, FCK.EditingArea.IFrame ) ;
-		rb.style.top = ( offset.y + FCKDragTableHandler._GetDocumentPosition( w, table ).y ) + "px" ;
-		rb.style.height = table.offsetHeight + "px" ;
+		paddingBar.style.top = ( offset.y + FCKDragTableHandler._GetDocumentPosition( w, table ).y ) + "px" ;
+		paddingBar.style.height = table.offsetHeight + "px" ;
 		var bw = parseInt( table.border ) ;
 		if ( bw != bw )
@@ -295,8 +314,18 @@
 		if ( cs != cs )
 			cs = 0 ;
-		var barWidth = Math.max( bw, cs, 3 ) ;
-		rb.style.width = barWidth + "px" ;
-		rb.style.left = ( offset.x + evt.clientX + FCKDragTableHandler._GetWindowScrollX( w ) - barWidth / 2 ) +  "px" ;
-		FCKTools.AddEventListener( rb, "mousemove", FCKDragTableHandler._ResizeBarMouseMoveListener ) ;
+		var barWidth = Math.max( bw+100, cs+100 ) ;
+		paddingBar.innerHTML = "" ;
+		paddingBar.style.width = barWidth + "px" ;
+		paddingBar.style.left = ( offset.x + mouse.x + FCKDragTableHandler._GetWindowScrollX( w ) - barWidth / 2 ) +  "px" ;
+
+		barWidth = Math.max( bw, cs, 3 ) ;
+		var visibleBar = document.createElement( "div" ) ;
+		visibleBar.style.position = "absolute" ;
+		visibleBar.style.backgroundColor = " blue " ;
+		visibleBar.style.width = barWidth + "px" ;
+		visibleBar.style.height = table.offsetHeight + "px" ;
+		visibleBar.style.left = "50px" ;
+		visibleBar.style.top = "0px" ;
+		paddingBar.appendChild( visibleBar ) ;
 	},
 	"_HideResizeBar" : function()
@@ -312,5 +341,3 @@
 };
 
-FCK.Events.AttachEvent( "OnMouseDown", FCKDragTableHandler.MouseDownListener ) ;
-FCK.Events.AttachEvent( "OnMouseUp", FCKDragTableHandler.MouseUpListener ) ;
 FCK.Events.AttachEvent( "OnMouseMove", FCKDragTableHandler.MouseMoveListener ) ;
