Index: /FCKeditor/branches/developers/martinkou/editor/plugins/dragresizetable/fckplugin.js
===================================================================
--- /FCKeditor/branches/developers/martinkou/editor/plugins/dragresizetable/fckplugin.js	(revision 459)
+++ /FCKeditor/branches/developers/martinkou/editor/plugins/dragresizetable/fckplugin.js	(revision 460)
@@ -127,8 +127,100 @@
 			evt = window.event ;
 		FCKDragTableHandler._MouseMoveMode = 0 ;
-		if ( FCKBrowserInfo.IsIE )
-			FCKDragTableHandler._ResizeBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 10 ;
-		else
-			FCKDragTableHandler._ResizeBar.style.opacity = 0.1 ;
+		FCKDragTableHandler._HideResizeBar() ;
+		
+		if ( ! FCKDragTableHandler._LeftCell )
+			return ;
+		
+		// First, get the mouse coordiantes relative to the outer window, and calculate the delta value.
+		var mouse = { "x" : evt.clientX, "y" : evt.clientY } ;
+		var mouseNode = evt.srcElement || evt.originalTarget ;
+		var mouseDocument = mouseNode.ownerDocument ;
+		if ( mouseDocument == FCK.EditorDocument )
+		{
+			var offset = FCKDragTableHandler._GetDocumentPosition( window, FCK.EditingArea.IFrame ) ;
+			mouse.x += offset.x ;
+			mouse.y += offset.y ;
+		}
+		var deltaX = mouse.x - FCKDragTableHandler._OriginalX ;
+
+		// Then, build an array of current column width values.
+		// This algorithm can be very slow if the cells have insane colSpan values. (e.g. colSpan=1000).
+		var table = FCKTools.GetElementAscensor( FCKDragTableHandler._LeftCell, "table" ) ;
+		var colArray = [] ;
+		for ( var r = 0 ; r < table.rows.length ; r++ )
+		{
+			var colIndex = 0 ;
+			var row = table.rows.item( r ) ;
+			for ( var c = 0 ; c < row.cells.length ; c++ )
+			{
+				var cell = row.cells.item( c ) ;
+				var width = FCKDragTableHandler._GetCellWidth( table, cell ) ;
+				var colSpan = parseInt( cell.colSpan ) ;
+				if ( colSpan != colSpan )
+					colSpan = 1 ;
+				if ( colArray.length < colIndex + colSpan )
+				{
+					for ( var i = 0 ; i < colSpan ; i++ )
+						colArray.push( { "width" : width / colSpan, "colSpan" : colSpan } ) ;
+				}
+				else
+				{
+					for ( var i = colIndex ; i < colIndex + colSpan ; i++ )
+					{
+						var guessItem = colArray[i] ;
+						if ( guessItem.colSpan > colSpan )
+						{
+							guessItem.width = width / colSpan ;
+							guessItem.colSpan = colSpan ;
+						}
+					}
+				}
+				colIndex += colSpan ;
+			}
+		}
+
+		// Find out the equivalent column index of the two cells selected for resizing.
+		var row = FCKTools.GetElementAscensor( FCKDragTableHandler._LeftCell, "tr" ) ;
+		var colIndex = 0 ;
+		for ( var i = 0 ; i <= FCKDragTableHandler._LeftCell.cellIndex ; i++ )
+		{
+			var colSpan = parseInt( row.cells.item( i ).colSpan ) ;
+			if ( colSpan != colSpan )
+				colSpan = 1 ;
+			colIndex += colSpan ;
+		}
+
+		// Note that colIndex must be at least 1 here, so it's safe to subtract 1 from it.
+		colIndex-- ;
+
+		// Modify the widths in the colArray according to the mouse coordinate delta value.
+		colArray[colIndex].width += deltaX ;
+		colArray[colIndex + 1].width -= deltaX ;
+
+		// Clear all cell widths, delete all <col> elements from the table.
+		for ( var r = 0 ; r < table.rows.length ; r++ )
+		{
+			var row = table.rows.item( r ) ;
+			for ( var c = 0 ; c < row.cells.length ; c++ )
+			{
+				var cell = row.cells.item( c ) ;
+				cell.width = "" ;
+				cell.style.width = "" ;
+			}
+		}
+		var colElements = table.getElementsByTagName( "col" ) ;
+		for ( var i = colElements.length - 1 ; i >= 0 ; i-- )
+			colElements[i].parentNode.removeChild( colElements[i] ) ;
+
+		// Find the place for adding new <col> elements.
+			colParent = table ;
+		
+		// Generate <col> elements.
+		for ( var i = colArray.length - 1 ; i >= 0 ; i-- )
+		{
+			var col = FCK.EditorDocument.createElement( "col" ) ;
+			col.width = colArray[i].width ;
+			colParent.insertBefore( col, colParent.childNodes[0] ) ;
+		}
 	},
 	"_ResizeBarMouseMoveListener" : function( evt )
@@ -317,6 +409,10 @@
 
 		var paddingBar = FCKDragTableHandler._ResizeBar ;
+		if ( FCKBrowserInfo.IsIE )
+			paddingBar.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 10 ;
+		else
+			paddingBar.style.opacity = 0.1 ;
 		var offset = FCKDragTableHandler._GetDocumentPosition( window, FCK.EditingArea.IFrame ) ;
-		paddingBar.style.top = ( offset.y + FCKDragTableHandler._GetDocumentPosition( w, table ).y ) + "px" ;
+		paddingBar.style.top = ( offset.y + FCKDragTableHandler._GetWindowPosition( w, table ).y ) + "px" ;
 		paddingBar.style.height = table.offsetHeight + "px" ;
 		var bw = parseInt( table.border ) ;
@@ -334,5 +430,5 @@
 		var visibleBar = document.createElement( "div" ) ;
 		visibleBar.style.position = "absolute" ;
-		visibleBar.style.backgroundColor = " blue " ;
+		visibleBar.style.backgroundColor = "blue" ;
 		visibleBar.style.width = barWidth + "px" ;
 		visibleBar.style.height = table.offsetHeight + "px" ;
