Index: /FCKeditor/trunk/_whatsnew.html
===================================================================
--- /FCKeditor/trunk/_whatsnew.html	(revision 2208)
+++ /FCKeditor/trunk/_whatsnew.html	(revision 2209)
@@ -43,4 +43,6 @@
 			from the Link dialog are now encoded by default to prevent being harvested by spammers.
 			(Kudos to asuter for proposing the patch) </li>
+		<li>[<a target="_blank" href="http://dev.fckeditor.net/ticket/2234">#2234</a>] Added the
+			ability to create, modify and remove Div containers.</li>
 	</ul>
 	<p>
Index: /FCKeditor/trunk/editor/_source/classes/fckdomrange.js
===================================================================
--- /FCKeditor/trunk/editor/_source/classes/fckdomrange.js	(revision 2208)
+++ /FCKeditor/trunk/editor/_source/classes/fckdomrange.js	(revision 2209)
@@ -43,5 +43,4 @@
 			// For text nodes, the node itself is the StartNode.
 			var eStart	= innerRange.startContainer ;
-			var eEnd	= innerRange.endContainer ;
 
 			var oElementPath = new FCKElementPath( eStart ) ;
@@ -51,26 +50,38 @@
 			this.StartBlockLimit	= oElementPath.BlockLimit ;
 
-			if ( eStart != eEnd )
-				oElementPath = new FCKElementPath( eEnd ) ;
-
-			// The innerRange.endContainer[ innerRange.endOffset ] is not
-			// usually part of the range, but the marker for the range end. So,
-			// let's get the previous available node as the real end.
-			var eEndNode = eEnd ;
-			if ( innerRange.endOffset == 0 )
+			if ( innerRange.collapsed )
 			{
-				while ( eEndNode && !eEndNode.previousSibling )
-					eEndNode = eEndNode.parentNode ;
-
-				if ( eEndNode )
-					eEndNode = eEndNode.previousSibling ;
+				this.EndNode		= this.StartNode ;
+				this.EndContainer	= this.StartContainer ;
+				this.EndBlock		= this.StartBlock ;
+				this.EndBlockLimit	= this.StartBlockLimit ;
 			}
-			else if ( eEndNode.nodeType == 1 )
-				eEndNode = eEndNode.childNodes[ innerRange.endOffset - 1 ] ;
-
-			this.EndNode			= eEndNode ;
-			this.EndContainer		= eEnd ;
-			this.EndBlock			= oElementPath.Block ;
-			this.EndBlockLimit		= oElementPath.BlockLimit ;
+			else
+			{
+				var eEnd	= innerRange.endContainer ;
+
+				if ( eStart != eEnd )
+					oElementPath = new FCKElementPath( eEnd ) ;
+
+				// The innerRange.endContainer[ innerRange.endOffset ] is not
+				// usually part of the range, but the marker for the range end. So,
+				// let's get the previous available node as the real end.
+				var eEndNode = eEnd ;
+				if ( innerRange.endOffset == 0 )
+				{
+					while ( eEndNode && !eEndNode.previousSibling )
+						eEndNode = eEndNode.parentNode ;
+
+					if ( eEndNode )
+						eEndNode = eEndNode.previousSibling ;
+				}
+				else if ( eEndNode.nodeType == 1 )
+					eEndNode = eEndNode.childNodes[ innerRange.endOffset - 1 ] ;
+
+				this.EndNode			= eEndNode ;
+				this.EndContainer		= eEnd ;
+				this.EndBlock			= oElementPath.Block ;
+				this.EndBlockLimit		= oElementPath.BlockLimit ;
+			}
 		}
 
Index: /FCKeditor/trunk/editor/_source/commandclasses/fck_othercommands.js
===================================================================
--- /FCKeditor/trunk/editor/_source/commandclasses/fck_othercommands.js	(revision 2208)
+++ /FCKeditor/trunk/editor/_source/commandclasses/fck_othercommands.js	(revision 2209)
@@ -576,2 +576,40 @@
 	}
 };
+
+var FCKDeleteDivCommand = function()
+{
+}
+FCKDeleteDivCommand.prototype = 
+{
+	GetState : function()
+	{
+		if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG )
+			return FCK_TRISTATE_DISABLED ;
+
+		var node = FCKSelection.GetParentElement() ;
+		var path = new FCKElementPath( node ) ;
+		return path.BlockLimit && path.BlockLimit.nodeName.IEquals( 'div' ) ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ;
+	},
+
+	Execute : function()
+	{
+		// Create an undo snapshot before doing anything.
+		FCKUndo.SaveUndoStep() ;
+
+		// Find out the nodes to delete.
+		var nodes = FCKDomTools.GetSelectedDivContainers() ;
+		
+		// Remember the current selection position.
+		var range = new FCKDomRange( FCK.EditorWindow ) ;
+		range.MoveToSelection() ;
+		var bookmark = range.CreateBookmark() ;
+
+		// Delete the container DIV node.
+		for ( var i = 0 ; i < nodes.length ; i++)
+			FCKDomTools.RemoveNode( nodes[i], true ) ;
+
+		// Restore selection.
+		range.MoveToBookmark( bookmark ) ;
+		range.Select() ;
+	}
+} ;
Index: /FCKeditor/trunk/editor/_source/internals/fck_contextmenu.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fck_contextmenu.js	(revision 2208)
+++ /FCKeditor/trunk/editor/_source/internals/fck_contextmenu.js	(revision 2209)
@@ -295,4 +295,19 @@
 				}
 			}} ;
+
+		case 'DivContainer':
+			return {
+			AddItems : function( menu, tag, tagName )
+			{
+				var currentBlocks = FCKDomTools.GetSelectedDivContainers() ;
+
+				if ( currentBlocks.length > 0 )
+				{
+					menu.AddSeparator() ;
+					menu.AddItem( 'EditDiv', FCKLang.EditDiv, 75 ) ;
+					menu.AddItem( 'DeleteDiv', FCKLang.DeleteDiv, 76 ) ;
+				}
+			}} ;
+			
 		// @Packager.Remove.Start
 		default :
Index: /FCKeditor/trunk/editor/_source/internals/fckcommands.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fckcommands.js	(revision 2208)
+++ /FCKeditor/trunk/editor/_source/internals/fckcommands.js	(revision 2209)
@@ -96,4 +96,7 @@
 		case 'Outdent'	: oCommand = new FCKIndentCommand( 'outdent', FCKConfig.IndentLength * -1 ) ; break ;
 		case 'Blockquote'	: oCommand = new FCKBlockQuoteCommand() ; break ;
+		case 'CreateDiv'	: oCommand = new FCKDialogCommand( 'CreateDiv', FCKLang.CreateDiv, 'dialog/fck_div.html', 380, 210, null, null, true ) ; break ;
+		case 'EditDiv'		: oCommand = new FCKDialogCommand( 'EditDiv', FCKLang.EditDiv, 'dialog/fck_div.html', 380, 210, null, null, false ) ; break ;
+		case 'DeleteDiv'	: oCommand = new FCKDeleteDivCommand() ; break ;
 
 		case 'TableInsertRowAfter'		: oCommand = new FCKTableCommand('TableInsertRowAfter') ; break ;
Index: /FCKeditor/trunk/editor/_source/internals/fckdomtools.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fckdomtools.js	(revision 2208)
+++ /FCKeditor/trunk/editor/_source/internals/fckdomtools.js	(revision 2209)
@@ -697,5 +697,5 @@
 	SetElementMarker : function ( markerObj, element, attrName, value)
 	{
-		var id = String( parseInt( Math.random() * 0xfffffff, 10 ) ) ;
+		var id = String( parseInt( Math.random() * 0xffffffff, 10 ) ) ;
 		element._FCKMarkerId = id ;
 		element[attrName] = value ;
@@ -1021,4 +1021,37 @@
 		// In the DTD # == text node.
 		return ( childDTD['#'] && !FCKListsLib.NonEditableElements[ nodeName ] ) ;
+	},
+
+	GetSelectedDivContainers : function()
+	{
+		var currentBlocks = [] ;
+		var range = new FCKDomRange( FCK.EditorWindow ) ;
+		range.MoveToSelection() ;
+
+		var startNode = range.GetTouchedStartNode() ;
+		var endNode = range.GetTouchedEndNode() ;
+		var currentNode = startNode ;
+
+		if ( startNode == endNode )
+		{
+			while ( endNode.nodeType == 1 && endNode.lastChild )
+				endNode = endNode.lastChild ;
+			endNode = FCKDomTools.GetNextSourceNode( endNode ) ;
+		}
+
+		while ( currentNode && currentNode != endNode )
+		{
+			if ( currentNode.nodeType != 3 || !/^[ \t\n]*$/.test( currentNode.nodeValue ) )
+			{
+				var path = new FCKElementPath( currentNode ) ;
+				var blockLimit = path.BlockLimit ;
+				if ( blockLimit && blockLimit.nodeName.IEquals( 'div' ) && currentBlocks.IndexOf( blockLimit ) == -1 )
+					currentBlocks.push( blockLimit ) ;
+			}
+
+			currentNode = FCKDomTools.GetNextSourceNode( currentNode ) ;
+		}
+
+		return currentBlocks ;
 	}
 } ;
Index: /FCKeditor/trunk/editor/_source/internals/fckselection_gecko.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fckselection_gecko.js	(revision 2208)
+++ /FCKeditor/trunk/editor/_source/internals/fckselection_gecko.js	(revision 2209)
@@ -76,7 +76,15 @@
 		if ( oSel )
 		{
-			// make the common case fast - for collapsed/nearly collapsed selections just return anchor.parent.
+			// if anchorNode == focusNode, see if the selection is text only or including nodes.
+			// if text only, return the parent node.
+			// if the selection includes DOM nodes, then the anchorNode is the nearest container.
 			if ( oSel.anchorNode && oSel.anchorNode == oSel.focusNode )
-				return oSel.anchorNode.parentNode ;
+			{
+				var oRange = oSel.getRangeAt( 0 ) ;
+				if ( oRange.collapsed || oRange.startContainer.nodeType == 3 )
+					return oSel.anchorNode.parentNode ;
+				else
+					return oSel.anchorNode ;
+			}
 
 			// looks like we're having a large selection here. To make the behavior same as IE's TextRange.parentElement(),
Index: /FCKeditor/trunk/editor/_source/internals/fcktoolbaritems.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fcktoolbaritems.js	(revision 2208)
+++ /FCKeditor/trunk/editor/_source/internals/fcktoolbaritems.js	(revision 2209)
@@ -72,4 +72,5 @@
 		case 'Indent'			: oItem = new FCKToolbarButton( 'Indent'	, FCKLang.IncreaseIndent, null, null, false, true, 29 ) ; break ;
 		case 'Blockquote'			: oItem = new FCKToolbarButton( 'Blockquote'	, FCKLang.Blockquote, null, null, false, true, 73 ) ; break ;
+		case 'CreateDiv'			: oItem = new FCKToolbarButton( 'CreateDiv'	, FCKLang.CreateDiv, null, null, false, true, 74 ) ; break ;
 
 		case 'Link'				: oItem = new FCKToolbarButton( 'Link'		, FCKLang.InsertLinkLbl, FCKLang.InsertLink, null, false, true, 34 ) ; break ;
Index: /FCKeditor/trunk/editor/dialog/fck_div.html
===================================================================
--- /FCKeditor/trunk/editor/dialog/fck_div.html	(revision 2209)
+++ /FCKeditor/trunk/editor/dialog/fck_div.html	(revision 2209)
@@ -0,0 +1,364 @@
+﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
+<!--
+ * FCKeditor - The text editor for Internet - http://www.fckeditor.net
+ * Copyright (C) 2003-2008 Frederico Caldeira Knabben
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ * Form dialog window.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<meta content="noindex, nofollow" name="robots" />
+	<script src="common/fck_dialog_common.js" type="text/javascript"></script>
+	<script type="text/javascript">
+var dialog	= window.parent ;
+var oEditor = dialog.InnerDialogLoaded() ;
+var FCK = oEditor.FCK ;
+var FCKLang = oEditor.FCKLang ;
+var FCKBrowserInfo = oEditor.FCKBrowserInfo ;
+var FCKStyles = oEditor.FCKStyles ;
+var FCKElementPath = oEditor.FCKElementPath ;
+var FCKDomRange = oEditor.FCKDomRange ;
+var FCKDomTools = oEditor.FCKDomTools ;
+var FCKDomRangeIterator = oEditor.FCKDomRangeIterator ;
+var FCKListsLib = oEditor.FCKListsLib ;
+var AlwaysCreate = dialog.Args().CustomValue ;
+
+String.prototype.IEquals = function()
+{
+	var thisUpper = this.toUpperCase() ;
+
+	var aArgs = arguments ;
+
+	// The arguments could also be a single array.
+	if ( aArgs.length == 1 && aArgs[0].pop )
+		aArgs = aArgs[0] ;
+
+	for ( var i = 0 ; i < aArgs.length ; i++ )
+	{
+		if ( thisUpper == aArgs[i].toUpperCase() )
+			return true ;
+	}
+	return false ;
+}
+
+var CurrentContainers = [] ;
+if ( !AlwaysCreate )
+{
+	dialog.Selection.EnsureSelection() ;
+	CurrentContainers = FCKDomTools.GetSelectedDivContainers() ;
+}
+
+// Add some tabs
+dialog.AddTab( 'General', FCKLang.DlgDivGeneralTab );
+dialog.AddTab( 'Advanced', FCKLang.DlgDivAdvancedTab ) ;
+
+function AddStyleOption( styleName )
+{
+	var el = GetE( 'selStyle' ) ;
+	var opt = document.createElement( 'option' ) ;
+	opt.text = opt.value = styleName ;
+
+	if ( FCKBrowserInfo.IsIE )
+		el.add( opt ) ;
+	else
+		el.add( opt, null ) ;
+}
+
+function OnDialogTabChange( tabCode )
+{
+	ShowE( 'divGeneral', tabCode == 'General' ) ;
+	ShowE( 'divAdvanced', tabCode == 'Advanced' ) ;
+	dialog.SetAutoSize( true ) ;
+}
+
+function GetNearestAncestorDirection( node )
+{
+	var dir = 'ltr' ;	// HTML default.
+	while ( ( node = node.parentNode ) )
+	{
+		if ( node.dir )
+			dir = node.dir ;
+	}
+	return dir ;
+}
+
+window.onload = function()
+{
+	// First of all, translate the dialog box texts
+	oEditor.FCKLanguageManager.TranslatePage(document) ;
+
+	dialog.SetOkButton( true ) ;
+	dialog.SetAutoSize( true ) ;
+
+	// Popuplate the style menu
+	var styles = FCKStyles.GetStyles() ;
+	var selectableStyles = {} ;
+	for ( var i in styles )
+	{
+		if ( ! /^_FCK_/.test( i ) && styles[i].Element == 'div' )
+			selectableStyles[i] = styles[i] ;
+	}
+	if ( CurrentContainers.length <= 1 )
+	{
+		var target = CurrentContainers[0] ;
+		var match = null ;
+		for ( var i in selectableStyles )
+		{
+			if ( target && styles[i].CheckElementRemovable( target, true ) )
+				match = i ;
+		}
+		if ( !match )
+			AddStyleOption( "" ) ;
+		for ( var i in selectableStyles )
+			AddStyleOption( i ) ;
+		if ( match )
+			GetE( 'selStyle' ).value = match ;
+
+		// Set the value for other inputs
+		if ( target )
+		{
+			GetE( 'txtClass' ).value = target.className ;
+			GetE( 'txtId' ).value = target.id ;
+			GetE( 'txtLang' ).value = target.lang ;
+			GetE( 'txtInlineStyle').value = target.style.cssText ;
+			GetE( 'txtTitle' ).value = target.title ;
+			GetE( 'selLangDir').value = target.dir || GetNearestAncestorDirection( target ) ;
+		}
+	}
+	else
+	{
+		GetE( 'txtId' ).disabled = true ;
+		AddStyleOption( "" ) ;
+		for ( var i in selectableStyles )
+			AddStyleOption( i ) ;
+	}
+}
+
+function CreateDiv()
+{
+	var newBlocks = [] ;
+	var range = new FCKDomRange( FCK.EditorWindow ) ;
+	range.MoveToSelection() ;
+
+	var bookmark = range.CreateBookmark() ;
+
+	// Kludge for #1592: if the bookmark nodes are in the beginning of
+	// $tagName, then move them to the nearest block element in the
+	// $tagName.
+	if ( FCKBrowserInfo.IsIE )
+	{
+		var bStart	= range.GetBookmarkNode( bookmark, true ) ;
+		var bEnd	= range.GetBookmarkNode( bookmark, false ) ;
+
+		var cursor ;
+
+		if ( bStart
+				&& bStart.parentNode.nodeName.IEquals( 'div' )
+				&& !bStart.previousSibling )
+		{
+			cursor = bStart ;
+			while ( ( cursor = cursor.nextSibling ) )
+			{
+				if ( FCKListsLib.BlockElements[ cursor.nodeName.toLowerCase() ] )
+					FCKDomTools.MoveNode( bStart, cursor, true ) ;
+			}
+		}
+
+		if ( bEnd
+				&& bEnd.parentNode.nodeName.IEquals( 'div' )
+				&& !bEnd.previousSibling )
+		{
+			cursor = bEnd ;
+			while ( ( cursor = cursor.nextSibling ) )
+			{
+				if ( FCKListsLib.BlockElements[ cursor.nodeName.toLowerCase() ] )
+				{
+					if ( cursor.firstChild == bStart )
+						FCKDomTools.InsertAfterNode( bStart, bEnd ) ;
+					else
+						FCKDomTools.MoveNode( bEnd, cursor, true ) ;
+				}
+			}
+		}
+	}
+
+	var iterator = new FCKDomRangeIterator( range ) ;
+	var block ;
+
+	iterator.EnforceRealBlocks = true ;
+	var paragraphs = [] ;
+	var groups = [] ;
+	var lastBlockLimit = null ;
+	while ( ( block = iterator.GetNextParagraph() ) )
+	{
+		var elementPath = new FCKElementPath( block ) ;
+		if ( elementPath.BlockLimit != lastBlockLimit )
+		{
+			groups.push( [] ) ;
+			lastBlockLimit = elementPath.BlockLimit ;
+		}
+		groups[groups.length - 1].push( block ) ;
+	}
+
+	for ( var i = 0 ; i < groups.length ; i++ )
+	{
+		var divNode = FCK.EditorDocument.createElement( 'div' ) ;
+		groups[i][0].parentNode.insertBefore( divNode, groups[i][0] ) ;
+		for ( var j = 0 ; j < groups[i].length ; j++ )
+			FCKDomTools.MoveNode( groups[i][j], divNode ) ;
+		newBlocks.push( divNode ) ;
+	}
+
+	range.MoveToBookmark( bookmark ) ;
+	range.Select() ;
+
+	FCK.Focus() ;
+	FCK.Events.FireEvent( 'OnSelectionChange' ) ;
+
+	return newBlocks ;
+}
+
+function Ok()
+{
+	oEditor.FCKUndo.SaveUndoStep() ;
+
+	if ( CurrentContainers.length < 1 )
+		CurrentContainers = CreateDiv();
+
+	var setValue = function( attrName, inputName )
+	{
+		var val = GetE( inputName ).value ;
+		for ( var i = 0 ; i < CurrentContainers.length ; i++ )
+		{
+			if ( val == '' )
+				CurrentContainers[i].removeAttribute( attrName ) ;
+			else
+				CurrentContainers[i].setAttribute( attrName, val ) ;
+		}
+	}
+
+	// Apply modifications to the DIV container according to dialog inputs.
+	if ( CurrentContainers.length == 1 )
+	{
+		setValue( 'class', 'txtClass' ) ;
+		setValue( 'id', 'txtId' ) ;
+	}
+	setValue( 'lang', 'txtLang' ) ;
+	if ( FCKBrowserInfo.IsIE )
+	{
+		for ( var i = 0 ; i < CurrentContainers.length ; i++ )
+			CurrentContainers[i].style.cssText = GetE( 'txtInlineStyle' ).value ;
+	}
+	else
+		setValue( 'style', 'txtInlineStyle' ) ;
+	setValue( 'title', 'txtTitle' ) ;
+	for ( var i = 0 ; i < CurrentContainers.length ; i++ )
+	{
+		var dir = GetE( 'selLangDir' ).value ;
+		var styleName = GetE( 'selStyle' ).value ;
+		if ( GetNearestAncestorDirection( CurrentContainers[i] ) != dir )
+			CurrentContainers[i].dir = dir ;
+		else
+			CurrentContainers[i].removeAttribute( 'dir' ) ;
+		
+		if ( styleName )
+			FCKStyles.GetStyle( styleName ).ApplyToObject( CurrentContainers[i] ) ;
+	}
+
+	return true ;
+}
+
+	</script>
+</head>
+<body style="overflow: hidden">
+	<div id="divGeneral">
+		<table cellspacing="0" cellpadding="0" width="100%" border="0">
+			<colgroup span="2">
+				<col width="49%" />
+				<col width="2%" />
+				<col width="49%" />
+			</colgroup>
+			<tr>
+				<td>
+					<span fcklang="DlgDivStyle">Style</span><br />
+					<select id="selStyle" style="width: 100%;">
+					</select>
+				</td>
+				<td>&nbsp;</td>
+				<td>
+					<span fcklang="DlgGenClass">Stylesheet Classes</span><br />
+					<input id="txtClass" style="width: 100%" type="text" />
+				</td>
+			</tr>
+		</table>
+	</div>
+	<div id="divAdvanced" style="display: none">
+		<table cellspacing="0" cellpadding="0" width="100%" border="0">
+			<colgroup span="2">
+				<col width="49%" />
+				<col width="2%" />
+				<col width="49%" />
+			</colgroup>
+			<tr>
+				<td>
+					<span fcklang="DlgGenId">Id</span><br />
+					<input style="width: 100%" type="text" id="txtId" />
+				</td>
+				<td>&nbsp;</td>
+				<td>
+					<span fcklang="DlgGenLangCode">Language Code</span><br />
+					<input style="width: 100%" type="text" id="txtLang" />
+				</td>
+			</tr>
+			<tr>
+				<td colspan="3">&nbsp;</td>
+			</tr>
+			<tr>
+				<td colspan="3">
+					<span fcklang="DlgDivInlineStyle">Inline Style</span><br />
+					<input style="width: 100%" type="text" id="txtInlineStyle" />
+				</td>
+			</tr>
+			<tr>
+				<td colspan="3">&nbsp;</td>
+			</tr>
+			<tr>
+				<td colspan="3">
+					<span fcklang="DlgGenTitle">Advisory Title</span><br />
+					<input style="width: 100%" type="text" id="txtTitle" />
+				</td>
+			</tr>
+			<tr>
+				<td>&nbsp;</td>
+			</tr>
+			<tr>
+				<td>
+					<span fcklang="DlgGenLangDir">Language Direction</span><br />
+					<select id="selLangDir">
+						<option fcklang="DlgGenLangDirLtr" value="ltr">Left to Right (LTR)
+						<option fcklang="DlgGenLangDirRtl" value="rtl">Right to Left (RTL)
+					</select>
+				</td>
+			</tr>
+		</table>
+	</div>
+</body>
+</html>
Index: /FCKeditor/trunk/editor/lang/en-au.js
===================================================================
--- /FCKeditor/trunk/editor/lang/en-au.js	(revision 2208)
+++ /FCKeditor/trunk/editor/lang/en-au.js	(revision 2209)
@@ -74,4 +74,7 @@
 IncreaseIndent		: "Increase Indent",
 Blockquote			: "Blockquote",
+CreateDiv			: "Create Div Container",
+EditDiv				: "Edit Div Container",
+DeleteDiv			: "Remove Div Container",
 Undo				: "Undo",
 Redo				: "Redo",
Index: /FCKeditor/trunk/editor/lang/en-ca.js
===================================================================
--- /FCKeditor/trunk/editor/lang/en-ca.js	(revision 2208)
+++ /FCKeditor/trunk/editor/lang/en-ca.js	(revision 2209)
@@ -74,4 +74,7 @@
 IncreaseIndent		: "Increase Indent",
 Blockquote			: "Blockquote",
+CreateDiv			: "Create Div Container",
+EditDiv				: "Edit Div Container",
+DeleteDiv			: "Remove Div Container",
 Undo				: "Undo",
 Redo				: "Redo",
Index: /FCKeditor/trunk/editor/lang/en-uk.js
===================================================================
--- /FCKeditor/trunk/editor/lang/en-uk.js	(revision 2208)
+++ /FCKeditor/trunk/editor/lang/en-uk.js	(revision 2209)
@@ -74,4 +74,7 @@
 IncreaseIndent		: "Increase Indent",
 Blockquote			: "Blockquote",
+CreateDiv			: "Create Div Container",
+EditDiv				: "Edit Div Container",
+DeleteDiv			: "Remove Div Container",
 Undo				: "Undo",
 Redo				: "Redo",
Index: /FCKeditor/trunk/editor/lang/en.js
===================================================================
--- /FCKeditor/trunk/editor/lang/en.js	(revision 2208)
+++ /FCKeditor/trunk/editor/lang/en.js	(revision 2209)
@@ -74,4 +74,7 @@
 IncreaseIndent		: "Increase Indent",
 Blockquote			: "Blockquote",
+CreateDiv			: "Create Div Container",
+EditDiv				: "Edit Div Container",
+DeleteDiv			: "Remove Div Container",
 Undo				: "Undo",
 Redo				: "Redo",
@@ -514,4 +517,10 @@
 DlgAboutLicenseTab	: "License",
 DlgAboutVersion		: "version",
-DlgAboutInfo		: "For further information go to"
+DlgAboutInfo		: "For further information go to",
+
+// Div Dialog
+DlgDivGeneralTab	: "General",
+DlgDivAdvancedTab	: "Advanced",
+DlgDivStyle		: "Style",
+DlgDivInlineStyle	: "Inline Style"
 };
Index: /FCKeditor/trunk/editor/lang/zh-cn.js
===================================================================
--- /FCKeditor/trunk/editor/lang/zh-cn.js	(revision 2208)
+++ /FCKeditor/trunk/editor/lang/zh-cn.js	(revision 2209)
@@ -74,4 +74,7 @@
 IncreaseIndent		: "增加缩进量",
 Blockquote			: "块引用",
+CreateDiv			: "新增 Div 标籤",
+EditDiv				: "更改 Div 标籤",
+DeleteDiv			: "删除 Div 标籤",
 Undo				: "撤消",
 Redo				: "重做",
Index: /FCKeditor/trunk/editor/lang/zh.js
===================================================================
--- /FCKeditor/trunk/editor/lang/zh.js	(revision 2208)
+++ /FCKeditor/trunk/editor/lang/zh.js	(revision 2209)
@@ -74,4 +74,7 @@
 IncreaseIndent		: "增加縮排",
 Blockquote			: "引用文字",
+CreateDiv			: "新增 Div 標籤",
+EditDiv				: "變更 Div 標籤",
+DeleteDiv			: "移除 Div 標籤",
 Undo				: "復原",
 Redo				: "重複",
Index: /FCKeditor/trunk/fckconfig.js
===================================================================
--- /FCKeditor/trunk/fckconfig.js	(revision 2208)
+++ /FCKeditor/trunk/fckconfig.js	(revision 2209)
@@ -106,5 +106,5 @@
 	'/',
 	['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],
-	['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote'],
+	['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote','CreateDiv'],
 	['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],
 	['Link','Unlink','Anchor'],
@@ -146,5 +146,5 @@
 ] ;
 
-FCKConfig.ContextMenu = ['Generic','Link','Anchor','Image','Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField','ImageButton','Button','BulletedList','NumberedList','Table','Form'] ;
+FCKConfig.ContextMenu = ['Generic','Link','Anchor','Image','Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField','ImageButton','Button','BulletedList','NumberedList','Table','Form','DivContainer'] ;
 FCKConfig.BrowserContextMenuOnCtrl = false ;
 
