Index: /FCKeditor/trunk/editor/_source/classes/fckenterkey.js
===================================================================
--- /FCKeditor/trunk/editor/_source/classes/fckenterkey.js	(revision 878)
+++ /FCKeditor/trunk/editor/_source/classes/fckenterkey.js	(revision 879)
@@ -141,5 +141,12 @@
 	var oRange = new FCKDomRange( this.Window ) ;
 	oRange.MoveToSelection() ;
-	
+
+	// Kludge for #247
+	if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
+	{
+		this._FixIESelectAllBug( oRange ) ;
+		return true ;
+	}
+
 	var isCollapsed = oRange.CheckIsCollapsed() ;
 
@@ -211,4 +218,11 @@
 {
 	FCKUndo.SaveUndoStep() ;
+	var oRange = new FCKDomRange( this.Window ) ;
+	oRange.MoveToSelection() ;
+	if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
+	{
+		this._FixIESelectAllBug( oRange ) ;
+		return true ;
+	}
 	return false ;
 }
@@ -314,4 +328,11 @@
 	var oRange = new FCKDomRange( this.Window ) ;
 	oRange.MoveToSelection() ;
+
+	// Kludge for #247
+	if ( FCKBrowserInfo.IsIE && this._CheckIsAllContentsIncluded( oRange, this.Window.document.body ) )
+	{
+		this._FixIESelectAllBug( oRange ) ;
+		return true ;
+	}
 
 	// There is just one special case for collapsed selections at the end of a block.
@@ -560,2 +581,46 @@
 	range.Select() ;
 }
+
+// Is all the contents under a node included by a range?
+FCKEnterKey.prototype._CheckIsAllContentsIncluded = function( range, node )
+{
+	var startOk = false ;
+	var endOk = false ;
+	
+	/*
+	FCKDebug.Output( 'sc='+range.StartContainer.nodeName+
+			',so='+range._Range.startOffset+
+			',ec='+range.EndContainer.nodeName+
+			',eo='+range._Range.endOffset ) ;
+	*/
+	if ( range.StartContainer == node || range.StartContainer == node.firstChild )
+		startOk = ( range._Range.startOffset == 0 ) ;
+
+	if ( range.EndContainer == node || range.EndContainer == node.lastChild )
+	{
+		var nodeLength = range.EndContainer.nodeType == 3 ? range.EndContainer.length : range.EndContainer.childNodes.length ;
+		endOk = ( range._Range.endOffset == nodeLength ) ;
+	}
+
+	return startOk && endOk ;
+}
+
+// Kludge for #247
+FCKEnterKey.prototype._FixIESelectAllBug = function( range )
+{
+	var doc = this.Window.document ;
+	doc.body.innerHTML = '' ;
+	var editBlock ;
+	if ( FCKConfig.EnterMode.IEquals( ['div', 'p'] ) )
+	{
+		editBlock = doc.createElement( FCKConfig.EnterMode ) ;
+		doc.body.appendChild( editBlock ) ;
+	}
+	else
+		editBlock = doc.body ;
+
+	range.MoveToNodeContents( editBlock ) ;
+	range.Collapse( true ) ;
+	range.Select() ;
+	range.Release() ;
+}
