Index: /CKEditor/branches/versions/3.2.x/CHANGES.html
===================================================================
--- /CKEditor/branches/versions/3.2.x/CHANGES.html	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/CHANGES.html	(revision 5538)
@@ -35,4 +35,82 @@
 		CKEditor Changelog
 	</h1>
+	<h3>
+		CKEditor 3.2.2 (SVN)</h3>
+	<p>
+		New features:</p>
+	<ul>
+		<li>The SCAYT spell checker is now enabled by default through the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.scayt_autoStartup">autoStartup</a> setting.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5631">#5631</a> : The SCAYT context menu options can now be reorganized through the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.scayt_contextMenuItemsOrder">scayt_contextMenuItemsOrder</a> setting.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4231">#4231</a> : Introducing the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.resize_dir">resize_dir setting</a>, to be able to restrict manual resizing of the editor to only one direction (horizontal/vertical).</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5479">#5479</a> : Introducing the classic ASP integration files and samples.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5024">#5024</a> : Added samples (<a href="http://nightly.ckeditor.com/latest/ckeditor/_samples/output_html.html">HTML</a> and <a href="http://nightly.ckeditor.com/latest/ckeditor/_samples/output_xhtml.html">XHTML</a>) to show how to output HTML using fonts and other attributes instead of styles.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4358">#4358</a> : Introduced the List Properties dialog.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5485">#5485</a> : Adding the <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.contentsLanguage">contentsLanguage</a> configuration option to be able to set the language for the editor contents.</li>
+	</ul>
+	<p>
+		Fixed issues:</p>
+	<ul>
+		<li><a href="http://dev.fckeditor.net/ticket/5330">#5330</a> : Corrected detection of CTRL and META keys in Macs for the context menu.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5434">#5434</a> : Fixed access denied issues with IE when accessing web sites through IPv6 IP addresses.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4476">#4476</a> : [IE] Inaccessible empty list item contains sub list.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4881">#4881</a> : [IE] Selection range broken because of cutting a single control type element from it.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5505">#5505</a> : Image dialog throw JavaScript error when click close dialog before preview area is loading.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5144">#5144</a> : [Chrome] Paste in Webkit sometimes leaves extra 'div' element.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5021">#5021</a> : [Firefox] Typing in empty document start from second line when <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode">enterMode</a> = CKEDITOR.ENTER_BR.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5416">#5416</a> : [IE] Delete table throws a error when <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode">enterMode</a> = CKEDITOR.ENTER_BR.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4459">#4459</a> : [IE] Select element is penetrating the maximized editor in IE6.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5559">#5559</a> : [IE] The first call to <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.editor.html#setData">setData</a> is affected by iframe cache when loading the wysiwyg mode.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5567">#5567</a> : [IE] Remove inline styles in some case doesn't join identical siblings.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5450">#5450</a> : [FireFox] Press ENTER on 'replace' button result wrong.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5121">#5121</a> : Recognizes the &lt;br /&gt; tag as a separator when apply block styles and <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.enterMode">enterMode</a> = CKEDITOR.ENTER_BR.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5575">#5575</a> : <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.html#.replaceAll">CKEDITOR.replaceAll</a> should consider all kind of white spaces between class names.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5582">#5582</a> : Prevent the default behavior when click the 'x' button to close dialog box.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5584">#5584</a> : ENTER key with <a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html#.forceEnterMode">forceEnterMode</a> turns on doesn't inherit current block attributes.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4797">#4797</a> : [Opera] Press ENTER key in dialog fields to close throws JavaScript error.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5578">#5578</a> : Add flash fake element align property when switch mode (source to wysiwyg).</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5577">#5577</a> : Update delete column behavior when choose multiple cells in the same column.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5512">#5512</a> : Open context menu with SHIFT+F10 doesn't get correct editor selection.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5433">#5433</a> : English protocol text directions in Link dialog are not incorrect in 'rtl' UI languages.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5553">#5553</a> : Paste dialog clipboard area text direction is incorrect for 'rtl' content languages.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4734">#4734</a> : Font size resets when font name is changed in an empty numbered list.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5237">#5237</a> : English text in dialogs' title is flipped when using RTL language.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/3257">#3257</a> : Create list doesn't keep blocks as headings.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5111">#5111</a> : [Firefox] JAWS doesn't respect PC cursor mode (application role) on toolbar.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5530">#5530</a> : Page break for printing can't be removed with undo.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5381">#5381</a> : Unable to place cursor between two paragraphs in body.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5568">#5568</a> : [IE6/7] Selecting a entire table cell changes the original range.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5623">#5623</a> : [Firefox] Apply style that edges another inline style result incorrect.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5586">#5586</a> : [Firefox] Maximize the second editor ruins full screen mode.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5617">#5617</a> : HTML filter system does not allow two 'text' filter rules.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5663">#5663</a> : General memory clean up after destroying last instance.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5461">#5461</a> : [IE] Fix Paste from Word dialog doesn't accept imput problem.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5676">#5676</a> : Make color buttons use RRGGBB instead of RGB for better compatibility with IE.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4948">#4948</a> : [Safari] Select the first/last cell of table to open context menu may lead to undetected table.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5591">#5591</a> : [Firefox] Select a list item makes selected element broken.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5667">#5667</a> : Pasting in a RTL page content causes shows up the horizontal scrollbar.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5688">#5688</a> : Duplicate ids are used in dialog definition.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5719">#5719</a> : [IE] 'change' dialog event should not be triggered when dialog is already closed.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5747">#5747</a> : [IE] Error thrown when IE input field editing mode is turned on.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5516">#5516</a> : IE8: Toolbar buttons have higher bottom padding.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5402">#5402</a> : SHIFT-ENTER could now be used to exit from preformat block.</li>
+		<li>SCAYT plugin related:<ul>
+			<li><a href="http://dev.fckeditor.net/ticket/4836">#4836</a> : Using SCAYT result in fragile elements when applying inline styles.</li>
+			<li><a href="http://dev.fckeditor.net/ticket/5425">#5425</a> : [Opera] Disable SCAYT plugin for Opera browser.</li>
+			<li><a href="http://dev.fckeditor.net/ticket/5632">#5632</a> : SCAYT word marker is not visible on text with background-color set.</li>
+			<li><a href="http://dev.fckeditor.net/ticket/4125">#4125</a> : Remove Format command incorrectly removes SCAYT word markers.</li>
+			<li><a href="http://dev.fckeditor.net/ticket/5671">#5671</a> : SCAYT bootstrap script could be added multiple times unnecessarily.</li>
+			<li><a href="http://dev.fckeditor.net/ticket/5573">#5573</a> : SCAYT move cursor position after insert element into marked word text.</li>
+			<li><a href="http://dev.fckeditor.net/ticket/5546">#5546</a> : SCAYT interferes with undo/redo commands.</li>
+			<li><a href="http://dev.fckeditor.net/ticket/5570">#5570</a> : [IE] First enabling SCAYT blind cursor in editor.</li>
+			<li><a href="http://dev.fckeditor.net/ticket/5741">#5741</a> : Enable SCAYT cause error in multiple editor instances.</li>
+			<li><a href="http://dev.fckeditor.net/ticket/5744">#5744</a> : Remove editor with SCAYT enabled in source mode throws error.</li>
+		</ul></li>
+		<li>Updated the following language files:<ul>
+			<li><a href="http://dev.fckeditor.net/ticket/5432">#5432</a> : Dutch;</li>
+			<li><a href="http://dev.fckeditor.net/ticket/5619">#5619</a> : Finnish;</li>
+			<li><a href="http://dev.fckeditor.net/ticket/5515">#5515</a> : Hebrew;</li>
+			<li><a href="http://dev.fckeditor.net/ticket/5588">#5588</a> : Turkish;</li>
+		</ul></li>
+	</ul>
 	<h3>
 		CKEditor 3.2.1</h3>
@@ -124,10 +202,10 @@
 		<li><a href="http://dev.fckeditor.net/ticket/5261">#5261</a> : Config option 'scayt_autoStartup' slow down editor loading.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/3846">#3846</a> : Google Chrome - No Img properties after inserting.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5465">#5465</a> : ShiftEnter=DIV doesn't respect list item when pressing enter at end of list item.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5465">#5465</a> : ShiftEnter=DIV doesn't respect list item when pressing ENTER at end of list item.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/5454">#5454</a> : After replaced success, the popup window couldn't be closed and a js error occured.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/4784">#4784</a> : Incorrect cursor position after delete table cells.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/5149">#5149</a> : [FF] Cursor disappears after maximize when the editor has focus.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/5220">#5220</a> : DTD now shows tolerance to &lt;style&gt; appear inside content.</li>
-		<li><a href="http://dev.fckeditor.net/ticket/5540">#5540</a> : Mobile browsers (iPhone, Android...) are marked as incompatible as they don't support editing features.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5440">#5440</a> : Mobile browsers (iPhone, Android...) are marked as incompatible as they don't support editing features.</li>
 		<li><a href="http://dev.fckeditor.net/ticket/5504">#5504</a> : [IE6/7] 'Paste' dialog will always get opened even when user allows the clipboard access dialog when using 'Paste' button.</li>
 		<li>Updated the following language files:<ul>
Index: /CKEditor/branches/versions/3.2.x/_dev/releaser/release.bat
===================================================================
--- /CKEditor/branches/versions/3.2.x/_dev/releaser/release.bat	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_dev/releaser/release.bat	(revision 5538)
@@ -11,3 +11,3 @@
 :: rmdir /S /Q release
 
-java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.2.1" ckeditor_3.2.1 --run-before-release=langtool.bat
+java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.2.2 SVN" ckeditor_3.2.2_svn --run-before-release=langtool.bat
Index: /CKEditor/branches/versions/3.2.x/_dev/releaser/release.sh
===================================================================
--- /CKEditor/branches/versions/3.2.x/_dev/releaser/release.sh	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_dev/releaser/release.sh	(revision 5538)
@@ -13,4 +13,4 @@
 
 pushd $DIR
-java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.2.1" ckeditor_3.2.1 --run-before-release=$LANGTOOL
+java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.2.2 SVN" ckeditor_3.2.2_svn --run-before-release=$LANGTOOL
 popd
Index: /CKEditor/branches/versions/3.2.x/_samples/asp/advanced.asp
===================================================================
--- /CKEditor/branches/versions/3.2.x/_samples/asp/advanced.asp	(revision 5538)
+++ /CKEditor/branches/versions/3.2.x/_samples/asp/advanced.asp	(revision 5538)
@@ -0,0 +1,105 @@
+﻿<%@  codepage="65001" language="VBScript" %>
+<% Option Explicit %>
+<!-- #INCLUDE file="../../ckeditor.asp" -->
+<%
+
+	' You must set "Enable Parent Paths" on your web site
+	' in order for the above relative include to work.
+	' Or you can use #INCLUDE VIRTUAL="/full path/ckeditor.asp"
+
+%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Sample - CKEditor</title>
+	<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
+	<link href="../sample.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+	<h1>
+		CKEditor Sample
+	</h1>
+	<!-- This <div> holds alert messages to be display in the sample page. -->
+	<div id="alerts">
+		<noscript>
+			<p>
+				<strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript
+				support, like yours, you should still see the contents (HTML data) and you should
+				be able to edit it normally, without a rich editor interface.
+			</p>
+		</noscript>
+	</div>
+	<!-- This <fieldset> holds the HTML that you will usually find in your pages. -->
+	<fieldset title="Output">
+		<legend>Output</legend>
+		<form action="sample_posteddata.asp" method="post">
+			<p>
+				<label>Editor 1:</label><br/>
+			</p>
+<%
+	' Create class instance.
+	dim editor, initialValue, code, textareaAttributes
+	set editor = New CKEditor
+
+	' Do not print the code directly to the browser, return it instead
+	editor.returnOutput = true
+
+	' Path to CKEditor directory, ideally instead of relative dir, use an absolute path:
+	'   editor.basePath = "/ckeditor/"
+	' If not set, CKEditor will default to /ckeditor/
+	editor.basePath = "../../"
+
+	' Set global configuration (will be used by all instances of CKEditor).
+	editor.config("width") = 600
+
+	' Change default textarea attributes
+	set textareaAttributes = CreateObject("Scripting.Dictionary")
+	textareaAttributes.Add "rows", 10
+	textareaAttributes.Add "cols", 80
+	Set editor.textareaAttributes = textareaAttributes
+
+	' The initial value to be displayed in the editor.
+	initialValue = "<p>This is some <strong>sample text</strong>. You are using <a href=""http://ckeditor.com/"">CKEditor</a>.</p>"
+
+	' Create first instance.
+	code = editor.editor("editor1", initialValue)
+
+	response.write code
+%>
+			<p>
+				<label>Editor 2:</label><br/>
+			</p>
+<%
+' Configuration that will be used only by the second editor.
+
+editor.instanceConfig("toolbar") = Array( _
+		Array( "Source", "-", "Bold", "Italic", "Underline", "Strike" ), _
+		Array( "Image", "Link", "Unlink", "Anchor" ) _
+	)
+
+editor.instanceConfig("skin") = "v2"
+
+' Create second instance.
+response.write editor.editor("editor2", initialValue)
+%>
+			<p>
+				<input type="submit" value="Submit"/>
+			</p>
+		</form>
+	</fieldset>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003-2010, <a href="http://cksource.com/">CKSource</a> - Frederico
+			Knabben. All rights reserved.
+		</p>
+	</div>
+</body>
+</html>
Index: /CKEditor/branches/versions/3.2.x/_samples/asp/events.asp
===================================================================
--- /CKEditor/branches/versions/3.2.x/_samples/asp/events.asp	(revision 5538)
+++ /CKEditor/branches/versions/3.2.x/_samples/asp/events.asp	(revision 5538)
@@ -0,0 +1,136 @@
+﻿<%@  codepage="65001" language="VBScript" %>
+<% Option Explicit %>
+<!-- #INCLUDE file="../../ckeditor.asp" -->
+<%
+
+	' You must set "Enable Parent Paths" on your web site
+	' in order for the above relative include to work.
+	' Or you can use #INCLUDE VIRTUAL="/full path/ckeditor.asp"
+
+%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Sample - CKEditor</title>
+	<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
+	<link href="../sample.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+	<h1>
+		CKEditor Sample
+	</h1>
+	<!-- This <div> holds alert messages to be display in the sample page. -->
+	<div id="alerts">
+		<noscript>
+			<p>
+				<strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript
+				support, like yours, you should still see the contents (HTML data) and you should
+				be able to edit it normally, without a rich editor interface.
+			</p>
+		</noscript>
+	</div>
+	<!-- This <fieldset> holds the HTML that you will usually find in your pages. -->
+	<fieldset title="Output">
+		<legend>Output</legend>
+		<form action="sample_posteddata.asp" method="post">
+			<p>
+				<label>Editor 1:</label><br/>
+			</p>
+<%
+
+''
+ ' Adds global event, will hide "Target" tab in Link dialog in all instances.
+ '
+function CKEditorHideLinkTargetTab(editor)
+	dim functionCode
+	functionCode = "function (ev) {" & vbcrlf & _
+		"// Take the dialog name and its definition from the event data" & vbcrlf & _
+		"var dialogName = ev.data.name;" & vbcrlf & _
+		"var dialogDefinition = ev.data.definition;" & vbcrlf & _
+		"" & vbcrlf & _
+		"// Check if the definition is from the Link dialog." & vbcrlf & _
+		"if ( dialogName == 'link' )" & vbcrlf & _
+		"	dialogDefinition.removeContents('target')" & vbcrlf & _
+	"}" & vbcrlf
+
+	editor.addGlobalEventHandler "dialogDefinition", functionCode
+end function
+
+''
+ ' Adds global event, will notify about opened dialog.
+ '
+function CKEditorNotifyAboutOpenedDialog(editor)
+	dim functionCode
+	functionCode = "function (evt) {" & vbcrlf & _
+		"alert('Loading dialog: ' + evt.data.name);" & vbcrlf & _
+	"}"
+
+	editor.addGlobalEventHandler "dialogDefinition", functionCode
+end function
+
+
+dim editor, initialValue
+
+' Create class instance.
+set editor = new CKEditor
+
+' Set configuration option for all editors.
+editor.config("width") = 750
+
+' Path to CKEditor directory, ideally instead of relative dir, use an absolute path:
+'   editor.basePath = "/ckeditor/"
+' If not set, CKEditor will default to /ckeditor/
+editor.basePath = "../../"
+
+' The initial value to be displayed in the editor.
+initialValue = "<p>This is some <strong>sample text</strong>. You are using <a href=""http://ckeditor.com/"">CKEditor</a>.</p>"
+
+' Event that will be handled only by the first editor.
+editor.addEventHandler "instanceReady", "function (evt) {	alert('Loaded editor: ' + evt.editor.name );}"
+
+' Create first instance.
+editor.editor "editor1", initialValue
+
+' Clear event handlers, instances that will be created later will not have
+' the 'instanceReady' listener defined a couple of lines above.
+editor.clearEventHandlers empty
+%>
+			<p>
+				<label>Editor 2:</label><br/>
+			</p>
+<%
+' Configuration that will be used only by the second editor.
+editor.instanceConfig("width") = 600
+editor.instanceConfig("toolbar") = "Basic"
+
+' Add some global event handlers (for all editors).
+CKEditorHideLinkTargetTab(editor)
+CKEditorNotifyAboutOpenedDialog(editor)
+
+' Event that will be handled only by the second editor.
+editor.addInstanceEventHandler "instanceReady", "function (evt) { alert('Loaded second editor: ' + evt.editor.name );}"
+
+' Create second instance.
+editor.editor "editor2", initialValue
+%>
+			<p>
+				<input type="submit" value="Submit"/>
+			</p>
+		</form>
+	</fieldset>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003-2010, <a href="http://cksource.com/">CKSource</a> - Frederico
+			Knabben. All rights reserved.
+		</p>
+	</div>
+</body>
+</html>
Index: /CKEditor/branches/versions/3.2.x/_samples/asp/index.html
===================================================================
--- /CKEditor/branches/versions/3.2.x/_samples/asp/index.html	(revision 5538)
+++ /CKEditor/branches/versions/3.2.x/_samples/asp/index.html	(revision 5538)
@@ -0,0 +1,103 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>ASP integration Samples List - CKEditor</title>
+	<link type="text/css" rel="stylesheet" href="../sample.css" />
+</head>
+<body>
+	<h1>
+		CKEditor Samples List for ASP
+	</h1>
+	<h2>
+		Overview
+	</h2>
+	<p>The ckeditor.asp file provides a wrapper to ease the work of creating CKEditor instances from classic Asp.</p>
+	<p>To use it, you must first include it into your page:
+	<code>
+		&lt;!-- #INCLUDE file="../../ckeditor.asp" --&gt;
+	</code>
+	Of course, you should adjust the path to make it point to the correct location, and maybe use a full path (with virtual="" instead of file="")
+	</p>
+	<p>After that script is included, you can use it in different ways, based on the following pattern:</p>
+
+<ol>
+	<li>
+		Create an instance of the CKEditor class:
+<pre>dim editor
+set editor = New CKEditor</pre>
+	</li>
+	<li>
+		Set the path to the folder where CKEditor has been installed, by default it will use /ckeditor/
+		<pre>editor.basePath = "../../"</pre>
+	</li>
+	<li>
+	Now use one of the three main methods to create the CKEditor instances:
+	<ul>
+		<li>
+				Replace textarea with id (or name) "editor1".
+			<pre>editor.replaceInstance "editor1"</pre>
+		</li>
+		<li>
+			Replace all textareas with CKEditor.
+			<pre>editor.replaceAll empty</pre>
+		</li>
+		<li>
+			Create a textarea element and attach CKEditor to it.
+			<pre>editor.editor "editor1", initialValue</pre>
+		</li>
+	</ul>
+	</li>
+</ol>
+<p>Before step 3 you can use a number of methods and properties to adjust the behavior of this class and the CKEditor instances
+that will be created:</p>
+<ul>
+	<li>returnOutput : if set to true, the functions won't dump the code with response.write, but instead they will return it so
+	you can do anything you want</li>
+	<li>basePath: location of the CKEditor scripts</li>
+	<li>initialized: if you set it to true, it means that you have already included the CKEditor.js file into the page and it
+		doesn't have to be generated again.</li>
+	<li>textareaAttributes: You can set here a Dictionary object with the attributes that you want to output in the call to the "editor" method.</li>
+
+	<li>config: Allows to set config values for all the instances from now on.</li>
+	<li>instanceConfig: Allows to set config values just for the next instance.</li>
+
+	<li>addEventHandler: Adds an event handler for all the instances from now on.</li>
+	<li>addInstanceEventHandler: Adds an event handler just for the next instance.</li>
+	<li>addGlobalEventHandler: Adds an event handler for the global CKEDITOR object.</li>
+
+	<li>clearEventHandlers: Removes one or all the event handlers from all the instances from now on.</li>
+	<li>clearInstanceEventHandlers: Removes one or all the event handlers  from the next instance.</li>
+	<li>clearGlobalEventHandlers: Removes one or all the event handlers  from the global CKEDITOR object.</li>
+
+</ul>
+
+	<h2>
+		Basic Samples
+	</h2>
+	<ul>
+		<li><a href="replace.asp">Replace existing textareas by code</a></li>
+		<li><a href="replaceAll.asp">Replace all textareas by code</a></li>
+		<li><a href="standalone.asp">Create instances in asp</a></li>
+	</ul>
+	<h2>
+		Advanced Samples
+	</h2>
+	<ul>
+		<li><a href="advanced.asp">Advanced example</a></li>
+		<li><a href="events.asp">Listening to events</a></li>
+	</ul>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003-2010, <a href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved.
+		</p>
+	</div>
+</body>
+</html>
Index: /CKEditor/branches/versions/3.2.x/_samples/asp/replace.asp
===================================================================
--- /CKEditor/branches/versions/3.2.x/_samples/asp/replace.asp	(revision 5538)
+++ /CKEditor/branches/versions/3.2.x/_samples/asp/replace.asp	(revision 5538)
@@ -0,0 +1,72 @@
+﻿<%@  codepage="65001" language="VBScript" %>
+<% Option Explicit %>
+<!-- #INCLUDE file="../../ckeditor.asp" -->
+<%
+
+	' You must set "Enable Parent Paths" on your web site
+	' in order for the above relative include to work.
+	' Or you can use #INCLUDE VIRTUAL="/full path/ckeditor.asp"
+
+%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Sample - CKEditor</title>
+	<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
+	<link href="../sample.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+	<h1>
+		CKEditor Sample
+	</h1>
+	<!-- This <div> holds alert messages to be display in the sample page. -->
+	<div id="alerts">
+		<noscript>
+			<p>
+				<strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript
+				support, like yours, you should still see the contents (HTML data) and you should
+				be able to edit it normally, without a rich editor interface.
+			</p>
+		</noscript>
+	</div>
+	<!-- This <fieldset> holds the HTML that you will usually find in your pages. -->
+	<fieldset title="Output">
+		<legend>Output</legend>
+		<form action="sample_posteddata.asp" method="post">
+			<p>
+				<label for="editor1">
+					Editor 1:</label><br/>
+				<textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
+			</p>
+			<p>
+				<input type="submit" value="Submit"/>
+			</p>
+		</form>
+	</fieldset>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003-2010, <a href="http://cksource.com/">CKSource</a> - Frederico
+			Knabben. All rights reserved.
+		</p>
+	</div>
+	<%
+	' Create class instance.
+	dim editor
+	set editor = New CKEditor
+	' Path to CKEditor directory, ideally instead of relative dir, use an absolute path:
+	'   editor.basePath = "/ckeditor/"
+	' If not set, CKEditor will default to /ckeditor/
+	editor.basePath = "../../"
+	' Replace textarea with id (or name) "editor1".
+	editor.replaceInstance "editor1"
+	%>
+</body>
+</html>
Index: /CKEditor/branches/versions/3.2.x/_samples/asp/replaceall.asp
===================================================================
--- /CKEditor/branches/versions/3.2.x/_samples/asp/replaceall.asp	(revision 5538)
+++ /CKEditor/branches/versions/3.2.x/_samples/asp/replaceall.asp	(revision 5538)
@@ -0,0 +1,77 @@
+﻿<%@  codepage="65001" language="VBScript" %>
+<% Option Explicit %>
+<!-- #INCLUDE file="../../ckeditor.asp" -->
+<%
+
+	' You must set "Enable Parent Paths" on your web site
+	' in order for the above relative include to work.
+	' Or you can use #INCLUDE VIRTUAL="/full path/ckeditor.asp"
+
+%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Sample - CKEditor</title>
+	<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
+	<link href="../sample.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+	<h1>
+		CKEditor Sample
+	</h1>
+	<!-- This <div> holds alert messages to be display in the sample page. -->
+	<div id="alerts">
+		<noscript>
+			<p>
+				<strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript
+				support, like yours, you should still see the contents (HTML data) and you should
+				be able to edit it normally, without a rich editor interface.
+			</p>
+		</noscript>
+	</div>
+	<!-- This <fieldset> holds the HTML that you will usually find in your pages. -->
+	<fieldset title="Output">
+		<legend>Output</legend>
+		<form action="sample_posteddata.asp" method="post">
+			<p>
+				<label for="editor1">
+					Editor 1:</label><br/>
+				<textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
+			</p>
+			<p>
+				<label for="editor2">
+					Editor 2:</label><br/>
+				<textarea cols="80" id="editor2" name="editor2" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
+			</p>
+			<p>
+				<input type="submit" value="Submit"/>
+			</p>
+		</form>
+	</fieldset>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003-2010, <a href="http://cksource.com/">CKSource</a> - Frederico
+			Knabben. All rights reserved.
+		</p>
+	</div>
+	<%
+	' Create class instance.
+	dim editor
+	set editor = New CKEditor
+	' Path to CKEditor directory, ideally instead of relative dir, use an absolute path:
+	'   editor.basePath = "/ckeditor/"
+	' If not set, CKEditor will default to /ckeditor/
+	editor.basePath = "../../"
+	' Replace all textareas with CKEditor.
+	editor.replaceAll empty
+	%>
+</body>
+</html>
Index: /CKEditor/branches/versions/3.2.x/_samples/asp/sample_posteddata.asp
===================================================================
--- /CKEditor/branches/versions/3.2.x/_samples/asp/sample_posteddata.asp	(revision 5538)
+++ /CKEditor/branches/versions/3.2.x/_samples/asp/sample_posteddata.asp	(revision 5538)
@@ -0,0 +1,46 @@
+﻿<%@  codepage="65001" language="VBScript" %>
+<% Option Explicit %>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Sample - CKEditor</title>
+	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+	<link type="text/css" rel="stylesheet" href="../sample.css" />
+</head>
+<body>
+	<h1>
+		CKEditor - Posted Data
+	</h1>
+	<table border="1" cellspacing="0" id="outputSample">
+		<colgroup><col width="100" /></colgroup>
+		<thead>
+			<tr>
+				<th>Field&nbsp;Name</th>
+				<th>Value</th>
+			</tr>
+		</thead>
+			<%
+			Dim sForm
+			For Each sForm in Request.Form
+			%>
+			<tr>
+				<th><%=Server.HTMLEncode( sForm )%></th>
+				<td><pre><%=Server.HTMLEncode( Request.Form(sForm) )%></pre></td>
+			</tr>
+			<% Next %>
+	</table>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003-2010, <a href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved.
+		</p>
+	</div>
+</body>
+</html>
Index: /CKEditor/branches/versions/3.2.x/_samples/asp/standalone.asp
===================================================================
--- /CKEditor/branches/versions/3.2.x/_samples/asp/standalone.asp	(revision 5538)
+++ /CKEditor/branches/versions/3.2.x/_samples/asp/standalone.asp	(revision 5538)
@@ -0,0 +1,72 @@
+﻿<%@  codepage="65001" language="VBScript" %>
+<% Option Explicit %>
+<!-- #INCLUDE file="../../ckeditor.asp" -->
+<%
+
+	' You must set "Enable Parent Paths" on your web site
+	' in order for the above relative include to work.
+	' Or you can use #INCLUDE VIRTUAL="/full path/ckeditor.asp"
+
+%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>Sample - CKEditor</title>
+	<meta content="text/html; charset=utf-8" http-equiv="content-type"/>
+	<link href="../sample.css" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+	<h1>
+		CKEditor Sample
+	</h1>
+	<!-- This <div> holds alert messages to be display in the sample page. -->
+	<div id="alerts">
+		<noscript>
+			<p>
+				<strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript
+				support, like yours, you should still see the contents (HTML data) and you should
+				be able to edit it normally, without a rich editor interface.
+			</p>
+		</noscript>
+	</div>
+	<!-- This <fieldset> holds the HTML that you will usually find in your pages. -->
+	<fieldset title="Output">
+		<legend>Output</legend>
+		<form action="sample_posteddata.asp" method="post">
+			<p>
+				Editor 1:
+			</p>
+			<p>
+			<%
+				dim initialValue, editor
+				' The initial value to be displayed in the editor.
+				initialValue = "<p>This is some <strong>sample text</strong>.</p>"
+				' Create class instance.
+				set editor = New CKEditor
+				' Path to CKEditor directory, ideally instead of relative dir, use an absolute path:
+				'   editor.basePath = "/ckeditor/"
+				' If not set, CKEditor will default to /ckeditor/
+				editor.basePath = "../../"
+				' Create textarea element and attach CKEditor to it.
+				editor.editor "editor1", initialValue
+			%>
+				<input type="submit" value="Submit"/>
+			</p>
+		</form>
+	</fieldset>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003-2010, <a href="http://cksource.com/">CKSource</a> - Frederico
+			Knabben. All rights reserved.
+		</p>
+	</div>
+</body>
+</html>
Index: /CKEditor/branches/versions/3.2.x/_samples/index.html
===================================================================
--- /CKEditor/branches/versions/3.2.x/_samples/index.html	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_samples/index.html	(revision 5538)
@@ -41,4 +41,5 @@
 		<li><a href="jqueryadapter.html">jQuery adapter example</a></li>
 		<li><a href="output_xhtml.html">Output XHTML</a></li>
+		<li><a href="output_html.html">Output HTML</a></li>
 	</ul>
 	<div id="footer">
Index: /CKEditor/branches/versions/3.2.x/_samples/output_html.html
===================================================================
--- /CKEditor/branches/versions/3.2.x/_samples/output_html.html	(revision 5538)
+++ /CKEditor/branches/versions/3.2.x/_samples/output_html.html	(revision 5538)
@@ -0,0 +1,263 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!--
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>HTML compliant output - CKEditor Sample</title>
+	<meta content="text/html; charset=utf-8" http-equiv="content-type" />
+	<!-- CKReleaser %REMOVE_LINE%
+	<script type="text/javascript" src="../ckeditor.js"></script>
+	CKReleaser %REMOVE_START% -->
+	<script type="text/javascript" src="../ckeditor_source.js"></script>
+	<!-- CKReleaser %REMOVE_END% -->
+	<script src="sample.js" type="text/javascript"></script>
+	<link href="sample.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+	<h1>
+		CKEditor Sample
+	</h1>
+	<!-- This <div> holds alert messages to be display in the sample page. -->
+	<div id="alerts">
+		<noscript>
+			<p>
+				<strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript
+				support, like yours, you should still see the contents (HTML data) and you should
+				be able to edit it normally, without a rich editor interface.
+			</p>
+		</noscript>
+	</div>
+	<form action="sample_posteddata.php" method="post">
+		<p>
+			This sample shows CKEditor configured to produce a legacy <strong>HTML4</strong> document. Traditional
+			HTML elements like &lt;b&gt;, &lt;i&gt;, and &lt;font&gt; are used in place of
+			&lt;strong&gt;, &lt;em&gt; and CSS styles.</p>
+		<p>
+			<label for="editor1">
+				Editor 1:</label><br />
+			<textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;b&gt;sample text&lt;/b&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
+			<script type="text/javascript">
+			//<![CDATA[
+
+				CKEDITOR.replace( 'editor1',
+					{
+						/*
+						 * Style sheet for the contents
+						 */
+						contentsCss : 'body {color:#000; background-color#FFF;}',
+
+						/*
+						 * Simple HTML5 doctype
+						 */
+						docType : '<!DOCTYPE HTML>',
+
+						/*
+						 * Core styles.
+						 */
+						coreStyles_bold	: { element : 'b' },
+						coreStyles_italic	: { element : 'i' },
+						coreStyles_underline	: { element : 'u'},
+						coreStyles_strike	: { element : 'strike' },
+
+						/*
+						 * Font face
+						 */
+						// Define the way font elements will be applied to the document. The "font"
+						// element will be used.
+						font_style :
+						{
+								element		: 'font',
+								attributes		: { 'face' : '#(family)' }
+						},
+
+						/*
+						 * Font sizes.
+						 */
+						fontSize_sizes : 'xx-small/1;x-small/2;small/3;medium/4;large/5;x-large/6;xx-large/7',
+						fontSize_style :
+							{
+								element		: 'font',
+								attributes	: { 'size' : '#(size)' }
+							} ,
+
+						/*
+						 * Font colors.
+						 */
+						colorButton_enableMore : true,
+
+						colorButton_foreStyle :
+							{
+								element : 'font',
+								attributes : { 'color' : '#(color)' },
+								overrides	: [ { element : 'span', attributes : { 'class' : /^FontColor(?:1|2|3)$/ } } ]
+							},
+
+						colorButton_backStyle :
+							{
+								element : 'font',
+								styles	: { 'background-color' : '#(color)' }
+							},
+
+						/*
+						 * Styles combo.
+						 */
+						stylesSet :
+								[
+									{ name : 'Computer Code', element : 'code' },
+									{ name : 'Keyboard Phrase', element : 'kbd' },
+									{ name : 'Sample Text', element : 'samp' },
+									{ name : 'Variable', element : 'var' },
+
+									{ name : 'Deleted Text', element : 'del' },
+									{ name : 'Inserted Text', element : 'ins' },
+
+									{ name : 'Cited Work', element : 'cite' },
+									{ name : 'Inline Quotation', element : 'q' }
+								],
+
+						on : { 'instanceReady' : configureHtmlOutput }
+					});
+
+/*
+ * Adjust the behavior of the dataProcessor to avoid styles
+ * and make it look like FCKeditor HTML output.
+ */
+function configureHtmlOutput( ev )
+{
+	var editor = ev.editor,
+		dataProcessor = editor.dataProcessor,
+		htmlFilter = dataProcessor && dataProcessor.htmlFilter;
+
+	// Out self closing tags the HTML4 way, like <br>.
+	dataProcessor.writer.selfClosingEnd = '>';
+
+	// Make output formatting behave similar to FCKeditor
+	var dtd = CKEDITOR.dtd;
+	for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) )
+	{
+		dataProcessor.writer.setRules( e,
+			{
+				indent : true,
+				breakBeforeOpen : true,
+				breakAfterOpen : false,
+				breakBeforeClose : !dtd[ e ][ '#' ],
+				breakAfterClose : true
+			});
+	}
+
+	// Output properties as attributes, not styles.
+	htmlFilter.addRules(
+		{
+			elements :
+			{
+				$ : function( element )
+				{
+					// Output dimensions of images as width and height
+					if ( element.name == 'img' )
+					{
+						var style = element.attributes.style;
+
+						if ( style )
+						{
+							// Get the width from the style.
+							var match = /(?:^|\s)width\s*:\s*(\d+)px/i.exec( style ),
+								width = match && match[1];
+
+							// Get the height from the style.
+							match = /(?:^|\s)height\s*:\s*(\d+)px/i.exec( style );
+							var height = match && match[1];
+
+							if ( width )
+							{
+								element.attributes.style = element.attributes.style.replace( /(?:^|\s)width\s*:\s*(\d+)px;?/i , '' );
+								element.attributes.width = width;
+							}
+
+							if ( height )
+							{
+								element.attributes.style = element.attributes.style.replace( /(?:^|\s)height\s*:\s*(\d+)px;?/i , '' );
+								element.attributes.height = height;
+							}
+						}
+					}
+
+					// Output alignment of paragraphs using align
+					if ( element.name == 'p' )
+					{
+						style = element.attributes.style;
+
+						if ( style )
+						{
+							// Get the align from the style.
+							match = /(?:^|\s)text-align\s*:\s*(\w*);/i.exec( style );
+							var align = match && match[1];
+
+							if ( align )
+							{
+								element.attributes.style = element.attributes.style.replace( /(?:^|\s)text-align\s*:\s*(\w*);?/i , '' );
+								element.attributes.align = align;
+							}
+						}
+					}
+
+					if ( !element.attributes.style )
+						delete element.attributes.style;
+
+					return element;
+				}
+			},
+
+			attributes :
+				{
+					style : function( value, element )
+					{
+						// Return #RGB for background and border colors
+						return convertRGBToHex( value );
+					}
+				}
+		} );
+}
+
+
+/**
+* Convert a CSS rgb(R, G, B) color back to #RRGGBB format.
+* @param Css style string (can include more than one color
+* @return Converted css style.
+*/
+function convertRGBToHex( cssStyle )
+{
+	return cssStyle.replace( /(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi, function( match, red, green, blue )
+		{
+			red = parseInt( red, 10 ).toString( 16 );
+			green = parseInt( green, 10 ).toString( 16 );
+			blue = parseInt( blue, 10 ).toString( 16 );
+			var color = [red, green, blue] ;
+
+			// Add padding zeros if the hex value is less than 0x10.
+			for ( var i = 0 ; i < color.length ; i++ )
+				color[i] = String( '0' + color[i] ).slice( -2 ) ;
+
+			return '#' + color.join( '' ) ;
+		 });
+}
+			//]]>
+			</script>
+		</p>
+		<p>
+			<input type="submit" value="Submit" />
+		</p>
+	</form>
+	<div id="footer">
+		<hr />
+		<p>
+			CKEditor - The text editor for Internet - <a href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003-2010, <a href="http://cksource.com/">CKSource</a> - Frederico
+			Knabben. All rights reserved.
+		</p>
+	</div>
+</body>
+</html>
Index: /CKEditor/branches/versions/3.2.x/_source/core/ckeditor.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/core/ckeditor.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/core/ckeditor.js	(revision 5538)
@@ -70,4 +70,14 @@
 };
 
+/**
+ * Perform global clean up to free as much memory as possible
+ * when there are no instances left
+ */
+CKEDITOR.on( 'instanceDestroyed', function ()
+	{
+		if ( CKEDITOR.tools.isEmpty( this.instances ) )
+			CKEDITOR.fire( 'reset' );
+	});
+
 // Load the bootstrap script.
 CKEDITOR.loader.load( 'core/_bootstrap' );		// @Packager.RemoveLine
Index: /CKEditor/branches/versions/3.2.x/_source/core/ckeditor_basic.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/core/ckeditor_basic.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/core/ckeditor_basic.js	(revision 5538)
@@ -189,5 +189,5 @@
 					// parameter.
 
-					var classRegex = new RegExp( '(?:^| )' + arguments[0] + '(?:$| )' );
+					var classRegex = new RegExp( '(?:^|\\s)' + arguments[0] + '(?:$|\\s)' );
 
 					if ( !classRegex.test( textarea.className ) )
Index: /CKEditor/branches/versions/3.2.x/_source/core/config.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/core/config.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/core/config.js	(revision 5538)
@@ -85,4 +85,14 @@
 	 */
 	contentsLangDirection : 'ltr',
+
+	/**
+	 * Language code of  the writting language which is used to author the editor
+	 * contents.
+	 * @default Same value with editor's UI language.
+	 * @type String
+	 * @example
+	 * config.contentsLanguage = 'fr';
+	 */
+	contentsLanguage : '',
 
 	/**
@@ -230,5 +240,5 @@
 	 * @example
 	 */
-	plugins : 'about,a11yhelp,basicstyles,blockquote,button,clipboard,colorbutton,colordialog,contextmenu,div,elementspath,enterkey,entities,filebrowser,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,maximize,newpage,pagebreak,pastefromword,pastetext,popup,preview,print,removeformat,resize,save,scayt,smiley,showblocks,showborders,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc',
+	plugins : 'about,a11yhelp,basicstyles,blockquote,button,clipboard,colorbutton,colordialog,contextmenu,div,elementspath,enterkey,entities,filebrowser,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,liststyle,maximize,newpage,pagebreak,pastefromword,pastetext,popup,preview,print,removeformat,resize,save,scayt,smiley,showblocks,showborders,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc',
 
 	/**
Index: /CKEditor/branches/versions/3.2.x/_source/core/dom/domobject.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/core/dom/domobject.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/core/dom/domobject.js	(revision 5538)
@@ -144,4 +144,9 @@
 	var customData = {};
 
+	CKEDITOR.on( 'reset', function()
+		{
+			customData = {};
+		});
+
 	/**
 	 * Determines whether the specified object is equal to the current object.
Index: /CKEditor/branches/versions/3.2.x/_source/core/dom/element.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/core/dom/element.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/core/dom/element.js	(revision 5538)
@@ -778,4 +778,29 @@
 
 		/**
+		 * Whether it's an empty inline elements which has no visual impact when removed.
+		 */
+		isEmptyInlineRemoveable : function()
+		{
+			if ( !CKEDITOR.dtd.$removeEmpty[ this.getName() ] )
+				return false;
+
+			var children = this.getChildren();
+			for ( var i = 0, count = children.count(); i < count; i++ )
+			{
+				var child = children.getItem( i );
+
+				if ( child.type == CKEDITOR.NODE_ELEMENT && child.getAttribute( '_fck_bookmark' ) )
+					continue;
+
+				if ( child.type == CKEDITOR.NODE_ELEMENT && !child.isEmptyInlineRemoveable()
+					|| child.type == CKEDITOR.NODE_TEXT && CKEDITOR.tools.trim( child.getText() ) )
+				{
+					return false;
+				}
+			}
+			return true;
+		},
+
+		/**
 		 * Indicates that the element has defined attributes.
 		 * @returns {Boolean} True if the element has attributes.
@@ -874,4 +899,54 @@
 			}
 		},
+
+		mergeSiblings : ( function()
+		{
+			function mergeElements( element, sibling, isNext )
+			{
+				if ( sibling && sibling.type == CKEDITOR.NODE_ELEMENT )
+				{
+					// Jumping over bookmark nodes and empty inline elements, e.g. <b><i></i></b>,
+					// queuing them to be moved later. (#5567)
+					var pendingNodes = [];
+
+					while ( sibling.getAttribute( '_fck_bookmark' )
+						|| sibling.isEmptyInlineRemoveable() )
+					{
+						pendingNodes.push( sibling );
+						sibling = isNext ? sibling.getNext() : sibling.getPrevious();
+						if ( !sibling || sibling.type != CKEDITOR.NODE_ELEMENT )
+							return;
+					}
+
+					if ( element.isIdentical( sibling ) )
+					{
+						// Save the last child to be checked too, to merge things like
+						// <b><i></i></b><b><i></i></b> => <b><i></i></b>
+						var innerSibling = isNext ? element.getLast() : element.getFirst();
+
+						// Move pending nodes first into the target element.
+						while( pendingNodes.length )
+							pendingNodes.shift().move( element, !isNext );
+
+						sibling.moveChildren( element, !isNext );
+						sibling.remove();
+
+						// Now check the last inner child (see two comments above).
+						if ( innerSibling && innerSibling.type == CKEDITOR.NODE_ELEMENT )
+							innerSibling.mergeSiblings();
+					}
+				}
+			}
+
+			return function()
+				{
+					// Merge empty links and anchors also. (#5567)
+					if ( !( CKEDITOR.dtd.$removeEmpty[ this.getName() ] || this.is( 'a' ) ) )
+						return;
+
+					mergeElements( this, this.getNext(), true );
+					mergeElements( this, this.getPrevious() );
+				};
+		} )(),
 
 		/**
@@ -1398,5 +1473,5 @@
 
 			// Replace the node.
-			this.$.parentNode.replaceChild( newNode.$, this.$ );
+			this.getParent() && this.$.parentNode.replaceChild( newNode.$, this.$ );
 			newNode.$._cke_expando = this.$._cke_expando;
 			this.$ = newNode.$;
Index: /CKEditor/branches/versions/3.2.x/_source/core/dom/range.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/core/dom/range.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/core/dom/range.js	(revision 5538)
@@ -1241,5 +1241,5 @@
 		 * @param {Number} mode  ( CKEDITOR.SHRINK_ELEMENT | CKEDITOR.SHRINK_TEXT ) The shrinking mode.
 		 */
-		shrink : function( mode )
+		shrink : function( mode, selectContents )
 		{
 			// Unable to shrink a collapsed range.
@@ -1316,5 +1316,5 @@
 				{
 					var textStart = walker[ mode == CKEDITOR.SHRINK_ELEMENT ? 'lastForward' : 'next']();
-					textStart && this.setStartBefore( textStart );
+					textStart && this.setStartAt( textStart, selectContents ? CKEDITOR.POSITION_AFTER_START : CKEDITOR.POSITION_BEFORE_START );
 				}
 
@@ -1323,5 +1323,5 @@
 					walker.reset();
 					var textEnd = walker[ mode == CKEDITOR.SHRINK_ELEMENT ? 'lastBackward' : 'previous']();
-					textEnd && this.setEndAfter( textEnd );
+					textEnd && this.setEndAt( textEnd, selectContents ? CKEDITOR.POSITION_BEFORE_END : CKEDITOR.POSITION_AFTER_END );
 				}
 
@@ -1383,4 +1383,9 @@
 			// ignore it for now.
 
+			// Fixing invalid range start inside dtd empty elements.
+			if( startNode.type == CKEDITOR.NODE_ELEMENT
+				&& CKEDITOR.dtd.$empty[ startNode.getName() ] )
+				startNode = startNode.getParent(), startOffset = startNode.getIndex();
+
 			this.startContainer	= startNode;
 			this.startOffset	= startOffset;
@@ -1408,4 +1413,9 @@
 			// will not need this check for our use of this class so we can ignore
 			// it for now.
+
+			// Fixing invalid range end inside dtd empty elements.
+			if( endNode.type == CKEDITOR.NODE_ELEMENT
+				&& CKEDITOR.dtd.$empty[ endNode.getName() ] )
+				endNode = endNode.getParent(), endOffset = endNode.getIndex() + 1;
 
 			this.endContainer	= endNode;
Index: /CKEditor/branches/versions/3.2.x/_source/core/env.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/core/env.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/core/env.js	(revision 5538)
@@ -76,5 +76,10 @@
 			isCustomDomain : function()
 			{
-				return this.ie && document.domain != window.location.hostname;
+				var domain = document.domain,
+					hostname = window.location.hostname;
+
+				return this.ie &&
+					domain != hostname &&
+					domain != ( '[' + hostname + ']' );	// IPv6 IP support (#5434)
 			}
 		};
Index: /CKEditor/branches/versions/3.2.x/_source/core/htmlparser/filter.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/core/htmlparser/filter.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/core/htmlparser/filter.js	(revision 5538)
@@ -228,24 +228,50 @@
 	}
 
+	// Invoke filters sequentially on the array, break the iteration
+	// when it doesn't make sense to continue anymore.
 	function callItems( currentEntry )
 	{
-		var isObject = ( typeof currentEntry == 'object' );
+		var isNode = currentEntry.type
+			|| currentEntry instanceof CKEDITOR.htmlParser.fragment;
 
 		for ( var i = 0 ; i < this.length ; i++ )
 		{
+			// Backup the node info before filtering.
+			if ( isNode )
+			{
+				var orgType = currentEntry.type,
+						orgName = currentEntry.name;
+			}
+
 			var item = this[ i ],
 				ret = item.apply( window, arguments );
 
-			if ( typeof ret != 'undefined' )
-			{
-				if ( ret === false )
-					return false;
-
-				if ( isObject && ret != currentEntry )
+			if ( ret === false )
+				return ret;
+
+			// We're filtering node (element/fragment).
+			if ( isNode )
+			{
+				// No further filtering if it's not anymore
+				// fitable for the subsequent filters.
+				if ( ret && ( ret.name != orgName
+					|| ret.type != orgType ) )
+				{
 					return ret;
-			}
-		}
-
-		return null;
+				}
+			}
+			// Filtering value (nodeName/textValue/attrValue).
+			else
+			{
+				// No further filtering if it's not
+				// any more values.
+				if ( typeof ret != 'string' )
+					return ret;
+			}
+
+			ret != undefined && ( currentEntry = ret );
+		}
+
+		return currentEntry;
 	}
 })();
Index: /CKEditor/branches/versions/3.2.x/_source/core/tools.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/core/tools.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/core/tools.js	(revision 5538)
@@ -12,4 +12,9 @@
 {
 	var functions = [];
+
+	CKEDITOR.on( 'reset', function()
+		{
+			functions = [];
+		});
 
 	/**
@@ -256,5 +261,5 @@
 
 		/**
-		 * Build the HTML snippet of a set of <style>/<link>.
+		 * Build the HTML snippet of a set of &lt;style>/&lt;link>.
 		 * @param css {String|Array} Each of which are url (absolute) of a CSS file or
 		 * a trunk of style text.
@@ -692,4 +697,16 @@
 			}
 			return returnValue;
+		},
+
+		/**
+		 * Generate a combined key from a series of params.
+		 * @param {String} subKey One or more string used as sub keys.
+		 * @example
+		 * var key = CKEDITOR.tools.genKey( 'key1', 'key2', 'key3' );
+		 * alert( key );		// "key1-key2-key3".
+		 */
+		genKey : function()
+		{
+			return Array.prototype.slice.call( arguments ).join( '-' );
 		}
 	};
Index: /CKEditor/branches/versions/3.2.x/_source/lang/_translationstatus.txt
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/_translationstatus.txt	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/_translationstatus.txt	(revision 5538)
@@ -2,59 +2,59 @@
 For licensing, see LICENSE.html or http://ckeditor.com/license
 
-af.js      Found: 287 Missing: 207
-ar.js      Found: 451 Missing: 43
-bg.js      Found: 280 Missing: 214
-bn.js      Found: 281 Missing: 213
-bs.js      Found: 187 Missing: 307
-ca.js      Found: 490 Missing: 4
-cs.js      Found: 411 Missing: 83
-cy.js      Found: 452 Missing: 42
-da.js      Found: 404 Missing: 90
-de.js      Found: 444 Missing: 50
-el.js      Found: 286 Missing: 208
-en-au.js   Found: 369 Missing: 125
-en-ca.js   Found: 369 Missing: 125
-en-gb.js   Found: 370 Missing: 124
-eo.js      Found: 259 Missing: 235
-es.js      Found: 467 Missing: 27
-et.js      Found: 301 Missing: 193
-eu.js      Found: 403 Missing: 91
-fa.js      Found: 302 Missing: 192
-fi.js      Found: 489 Missing: 5
-fo.js      Found: 420 Missing: 74
-fr-ca.js   Found: 301 Missing: 193
-fr.js      Found: 403 Missing: 91
-gl.js      Found: 283 Missing: 211
-gu.js      Found: 300 Missing: 194
-he.js      Found: 467 Missing: 27
-hi.js      Found: 302 Missing: 192
-hr.js      Found: 404 Missing: 90
-hu.js      Found: 445 Missing: 49
-is.js      Found: 307 Missing: 187
-it.js      Found: 404 Missing: 90
-ja.js      Found: 413 Missing: 81
-km.js      Found: 275 Missing: 219
-ko.js      Found: 293 Missing: 201
-lt.js      Found: 306 Missing: 188
-lv.js      Found: 283 Missing: 211
-mn.js      Found: 300 Missing: 194
-ms.js      Found: 265 Missing: 229
-nb.js      Found: 470 Missing: 24
-nl.js      Found: 467 Missing: 27
-no.js      Found: 470 Missing: 24
-pl.js      Found: 411 Missing: 83
-pt-br.js   Found: 402 Missing: 92
-pt.js      Found: 282 Missing: 212
-ro.js      Found: 301 Missing: 193
-ru.js      Found: 467 Missing: 27
-sk.js      Found: 302 Missing: 192
-sl.js      Found: 410 Missing: 84
-sr-latn.js Found: 276 Missing: 218
-sr.js      Found: 275 Missing: 219
-sv.js      Found: 299 Missing: 195
-th.js      Found: 287 Missing: 207
-tr.js      Found: 307 Missing: 187
-uk.js      Found: 404 Missing: 90
-vi.js      Found: 404 Missing: 90
-zh-cn.js   Found: 404 Missing: 90
-zh.js      Found: 404 Missing: 90
+af.js      Found: 287 Missing: 236
+ar.js      Found: 451 Missing: 72
+bg.js      Found: 280 Missing: 243
+bn.js      Found: 281 Missing: 242
+bs.js      Found: 187 Missing: 336
+ca.js      Found: 490 Missing: 33
+cs.js      Found: 411 Missing: 112
+cy.js      Found: 452 Missing: 71
+da.js      Found: 404 Missing: 119
+de.js      Found: 444 Missing: 79
+el.js      Found: 286 Missing: 237
+en-au.js   Found: 369 Missing: 154
+en-ca.js   Found: 369 Missing: 154
+en-gb.js   Found: 370 Missing: 153
+eo.js      Found: 259 Missing: 264
+es.js      Found: 467 Missing: 56
+et.js      Found: 301 Missing: 222
+eu.js      Found: 403 Missing: 120
+fa.js      Found: 302 Missing: 221
+fi.js      Found: 518 Missing: 5
+fo.js      Found: 420 Missing: 103
+fr-ca.js   Found: 301 Missing: 222
+fr.js      Found: 403 Missing: 120
+gl.js      Found: 283 Missing: 240
+gu.js      Found: 300 Missing: 223
+he.js      Found: 523 Missing: 0
+hi.js      Found: 302 Missing: 221
+hr.js      Found: 404 Missing: 119
+hu.js      Found: 445 Missing: 78
+is.js      Found: 307 Missing: 216
+it.js      Found: 404 Missing: 119
+ja.js      Found: 413 Missing: 110
+km.js      Found: 275 Missing: 248
+ko.js      Found: 293 Missing: 230
+lt.js      Found: 306 Missing: 217
+lv.js      Found: 283 Missing: 240
+mn.js      Found: 300 Missing: 223
+ms.js      Found: 265 Missing: 258
+nb.js      Found: 470 Missing: 53
+nl.js      Found: 494 Missing: 29
+no.js      Found: 470 Missing: 53
+pl.js      Found: 411 Missing: 112
+pt-br.js   Found: 402 Missing: 121
+pt.js      Found: 282 Missing: 241
+ro.js      Found: 301 Missing: 222
+ru.js      Found: 467 Missing: 56
+sk.js      Found: 302 Missing: 221
+sl.js      Found: 410 Missing: 113
+sr-latn.js Found: 276 Missing: 247
+sr.js      Found: 275 Missing: 248
+sv.js      Found: 299 Missing: 224
+th.js      Found: 287 Missing: 236
+tr.js      Found: 494 Missing: 29
+uk.js      Found: 404 Missing: 119
+vi.js      Found: 481 Missing: 42
+zh-cn.js   Found: 404 Missing: 119
+zh.js      Found: 404 Missing: 119
Index: /CKEditor/branches/versions/3.2.x/_source/lang/af.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/af.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/af.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/ar.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/ar.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/ar.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'تدقيق إملائي أثناء الكتابة',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'تفعيل SCAYT',
 		disable			: 'تعطيل SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'إضافة كلمة',
 		emptyDic		: 'اسم القاموس يجب ألا يكون فارغاً.',
+
 		optionsTab		: 'خيارات',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'لغات',
+
 		dictionariesTab	: 'قواميس',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'عن'
 	},
@@ -678,5 +716,5 @@
 	{
 		title		: 'عن CKEditor',
-		dlgTitle	: 'عن rotidEKC',
+		dlgTitle	: 'عن CKEditor',
 		moreInfo	: 'للحصول على معلومات الترخيص ، يرجى زيارة موقعنا على شبكة الانترنت:',
 		copy		: 'حقوق النشر &copy; $1. جميع الحقوق محفوظة.'
Index: /CKEditor/branches/versions/3.2.x/_source/lang/bg.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/bg.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/bg.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/bn.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/bn.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/bn.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/bs.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/bs.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/bs.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/ca.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/ca.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/ca.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Habilitat l\'SCAYT',
 		disable			: 'Deshabilita SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'Afegeix una paraula',
 		emptyDic		: 'El nom del diccionari no hauria d\'estar buit.',
+
 		optionsTab		: 'Opcions',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Idiomes',
+
 		dictionariesTab	: 'Diccionaris',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'Quant a'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/cs.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/cs.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/cs.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Kontrola pravopisu během psaní (SCAYT)',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Zapnout SCAYT',
 		disable			: 'Vypnout SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'Přidat slovo',
 		emptyDic		: 'Název slovníku nesmí být prázdný.',
+
 		optionsTab		: 'Nastavení',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Jazyky',
+
 		dictionariesTab	: 'Slovníky',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'O aplikaci'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/cy.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/cy.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/cy.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Gwirio\'r Sillafu Wrth Deipio',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Galluogi SCAYT',
 		disable			: 'Analluogi SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'Ychwanegu Gair',
 		emptyDic		: 'Ni ddylai enw\'r geiriadur fod yn wag.',
+
 		optionsTab		: 'Opsiynau',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Ieithoedd',
+
 		dictionariesTab	: 'Geiriaduron',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'Ynghylch'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/da.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/da.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/da.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Stavekontrol mens du skriver',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Aktivér SCAYT',
 		disable			: 'Deaktivér SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'Tilføj ord',
 		emptyDic		: 'Ordbogsnavn må ikke være tom.',
+
 		optionsTab		: 'Indstillinger',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Sprog',
+
 		dictionariesTab	: 'Ordbøger',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'Om'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/de.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/de.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/de.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Rechtschreibprüfung während der Texteingabe',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'SCAYT einschalten',
 		disable			: 'SCAYT ausschalten',
@@ -669,7 +693,21 @@
 		addWord			: 'Wort hinzufügen',
 		emptyDic		: 'Wörterbuchname sollte leer sein.',
+
 		optionsTab		: 'Optionen',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Sprachen',
+
 		dictionariesTab	: 'Wörterbücher',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'Über'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/el.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/el.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/el.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/en-au.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/en-au.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/en-au.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/en-ca.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/en-ca.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/en-ca.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/en-gb.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/en-gb.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/en-gb.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/en.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/en.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/en.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties',
+		bulletedTitle		: 'Bulleted List Properties',
+		type				: 'Type',
+		start				: 'Start',
+		circle				: 'Circle',
+		disc				: 'Disc',
+		square				: 'Square',
+		none				: 'None',
+		notset				: '<not set>',
+		armenian			: 'Armenian numbering',
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)',
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)',
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)',
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)',
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)',
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)',
+		decimal				: 'Decimal (1, 2, 3, etc.)',
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)'
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type',
+		opera_title		: 'Not supported by Opera',
 		enable			: 'Enable SCAYT',
 		disable			: 'Disable SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word',
 		emptyDic		: 'Dictionary name should not be empty.',
+
 		optionsTab		: 'Options',
+		allCaps			: 'Ignore All-Caps Words',
+		ignoreDomainNames : 'Ignore Domain Names',
+		mixedCase		: 'Ignore Words with Mixed Case',
+		mixedWithDigits	: 'Ignore Words with Numbers',
+
 		languagesTab	: 'Languages',
+
 		dictionariesTab	: 'Dictionaries',
+		dic_field_name	: 'Dictionary name',
+		dic_create		: 'Create',
+		dic_restore		: 'Restore',
+		dic_delete		: 'Delete',
+		dic_rename		: 'Rename',
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.',
+
 		aboutTab		: 'About'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/eo.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/eo.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/eo.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/es.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/es.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/es.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Comprobar Ortografía Mientras Escribe',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Activar Corrector',
 		disable			: 'Desactivar Corrector',
@@ -669,7 +693,21 @@
 		addWord			: 'Añadir palabra',
 		emptyDic		: 'El nombre del diccionario no puede estar en blanco.',
+
 		optionsTab		: 'Opciones',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Idiomas',
+
 		dictionariesTab	: 'Diccionarios',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'Acerca de'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/et.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/et.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/et.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/eu.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/eu.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/eu.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Ortografia Zuzenketa Idatzi Ahala (SCAYT)',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Gaitu SCAYT',
 		disable			: 'Desgaitu SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'Hitza Gehitu',
 		emptyDic		: 'Hiztegiaren izena ezin da hutsik egon.',
+
 		optionsTab		: 'Aukerak',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Hizkuntzak',
+
 		dictionariesTab	: 'Hiztegiak',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'Honi buruz'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/fa.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/fa.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/fa.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/fi.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/fi.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/fi.js	(revision 5538)
@@ -128,5 +128,5 @@
 	{
 		toolbar		: 'Lisää linkki/muokkaa linkkiä',
-		other 		: '<other>', // MISSING
+		other 		: '<muu>',
 		menu		: 'Muokkaa linkkiä',
 		title		: 'Linkki',
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numeroidun listan ominaisuudet',
+		bulletedTitle		: 'Numeroimattoman listan ominaisuudet',
+		type				: 'Tyyppi',
+		start				: 'Alku',
+		circle				: 'Ympyrä',
+		disc				: 'Levy',
+		square				: 'Neliö',
+		none				: 'Ei mikään',
+		notset				: '<ei asetettu>',
+		armenian			: 'Armeenialainen numerointi',
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Pienet roomalaiset (i, ii, iii, iv, v, jne.)',
+		upperRoman			: 'Isot roomalaiset (I, II, III, IV, V, jne.)',
+		lowerAlpha			: 'Pienet aakkoset (a, b, c, d, e, jne.)',
+		upperAlpha			: 'Isot aakkoset (A, B, C, D, E, jne.)',
+		lowerGreek			: 'Pienet kreikkalaiset (alpha, beta, gamma, jne.)',
+		decimal				: 'Desimaalit (1, 2, 3, jne.)',
+		decimalLeadingZero	: 'Desimaalit, alussa nolla (01, 02, 03, jne.)'
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -388,5 +411,5 @@
 		unlockRatio	: 'Vapauta suhteet',
 		resetSize	: 'Alkuperäinen koko',
-		border		: 'Raja',
+		border		: 'Kehys',
 		hSpace		: 'Vaakatila',
 		vSpace		: 'Pystytila',
@@ -401,5 +424,5 @@
 		validateWidth	: 'Leveyden täytyy olla kokonaisluku.',
 		validateHeight	: 'Korkeuden täytyy olla kokonaisluku.',
-		validateBorder	: 'Reunan täytyy olla kokonaisluku.',
+		validateBorder	: 'Kehyksen täytyy olla kokonaisluku.',
 		validateHSpace	: 'HSpace-määrityksen täytyy olla kokonaisluku.',
 		validateVSpace	: 'VSpace-määrityksen täytyy olla kokonaisluku.'
@@ -409,5 +432,5 @@
 	flash :
 	{
-		properties		: 'Flash ominaisuudet',
+		properties		: 'Flash-ominaisuudet',
 		propertiesTab	: 'Ominaisuudet',
 		title			: 'Flash ominaisuudet',
@@ -658,4 +681,5 @@
 	{
 		title			: 'Oikolue kirjoitettaessa',
+		opera_title		: 'Opera ei tue tätä ominaisuutta',
 		enable			: 'Ota käyttöön oikoluku kirjoitettaessa',
 		disable			: 'Poista käytöstä oikoluku kirjoitetaessa',
@@ -669,7 +693,21 @@
 		addWord			: 'Lisää sana',
 		emptyDic		: 'Sanakirjan nimi on annettava.',
+
 		optionsTab		: 'Asetukset',
+		allCaps			: 'Ohita sanat, jotka on kirjoitettu kokonaan isoilla kirjaimilla',
+		ignoreDomainNames : 'Ohita verkkotunnukset',
+		mixedCase		: 'Ohita sanat, joissa on sekoitettu isoja ja pieniä kirjaimia',
+		mixedWithDigits	: 'Ohita sanat, joissa on numeroita',
+
 		languagesTab	: 'Kielet',
+
 		dictionariesTab	: 'Sanakirjat',
+		dic_field_name	: 'Sanakirjan nimi',
+		dic_create		: 'Luo',
+		dic_restore		: 'Palauta',
+		dic_delete		: 'Poista',
+		dic_rename		: 'Nimeä uudelleen',
+		dic_info		: 'Oletuksena sanakirjat tallennetaan evästeeseen, mutta evästeiden koko on kuitenkin rajallinen. Sanakirjan kasvaessa niin suureksi, ettei se enää mahdu evästeeseen, sanakirja täytyy tallentaa palvelimellemme. Tallentaaksesi sanakirjasi palvelimellemme tulee sinun antaa sille nimi. Jos olet jo tallentanut sanakirjan, anna sen nimi ja klikkaa Palauta-painiketta',
+
 		aboutTab		: 'Tietoa'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/fo.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/fo.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/fo.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Kanna stavseting, meðan tú skrivar',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT',
 		disable			: 'Disable SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'Legg orð afturat',
 		emptyDic		: 'Heiti á orðabók eigur ikki at vera tómt.',
+
 		optionsTab		: 'Uppseting',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Tungumál',
+
 		dictionariesTab	: 'Orðabøkur',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'Um'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/fr-ca.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/fr-ca.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/fr-ca.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/fr.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/fr.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/fr.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Vérification d\'Orthographe en Cours de Frappe (SCAYT: Spell Check As You Type)',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Activer SCAYT',
 		disable			: 'Désactiver SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'Ajouter le mot',
 		emptyDic		: 'Le nom du dictionnaire ne devrait pas être vide.',
+
 		optionsTab		: 'Options',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Langues',
+
 		dictionariesTab	: 'Dictionnaires',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'A propos de'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/gl.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/gl.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/gl.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/gu.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/gu.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/gu.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/he.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/he.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/he.js	(revision 5538)
@@ -32,9 +32,9 @@
 	 * of reading non-English words. So be careful while translating it.
 	 */
-	editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING
+	editorTitle : 'עורך טקסט עשיר, %1, לחץ אלט (ALT) + 0 לעזרה.',
 
 	// ARIA descriptions.
-	toolbar	: 'Toolbar', // MISSING
-	editor	: 'Rich Text Editor', // MISSING
+	toolbar	: 'סרגל הכלים',
+	editor	: 'עורך טקסט עשיר',
 
 	// Toolbar buttons without dialogs.
@@ -93,6 +93,6 @@
 		ok				: 'אישור',
 		cancel			: 'ביטול',
-		close			: 'Close', // MISSING
-		preview			: 'Preview', // MISSING
+		close			: 'סגירה',
+		preview			: 'תצוגה מקדימה',
 		generalTab		: 'כללי',
 		advancedTab		: 'אפשרויות מתקדמות',
@@ -100,10 +100,10 @@
 		confirmNewPage	: 'כל השינויים שלא נשמרו יאבדו. האם להעלות דף חדש?',
 		confirmCancel	: 'חלק מהאפשרויות שונו, האם לסגור את הדיאלוג?',
-		options			: 'Options', // MISSING
-		target			: 'Target', // MISSING
-		targetNew		: 'New Window (_blank)', // MISSING
-		targetTop		: 'Topmost Window (_top)', // MISSING
-		targetSelf		: 'Same Window (_self)', // MISSING
-		targetParent	: 'Parent Window (_parent)', // MISSING
+		options			: 'אפשרויות',
+		target			: 'מטרה',
+		targetNew		: 'חלון חדש (_blank)',
+		targetTop		: 'החלון העליון ביותר (_top)',
+		targetSelf		: 'אותו חלון (_self)',
+		targetParent	: 'חלון האב (_parent)',
 
 		// Put the voice-only part of the label in the span.
@@ -113,5 +113,5 @@
 	contextmenu :
 	{
-		options : 'Context Menu Options' // MISSING
+		options : 'אפשרויות תפריט ההקשר'
 	},
 
@@ -121,5 +121,5 @@
 		toolbar		: 'הוספת תו מיוחד',
 		title		: 'בחירת תו מיוחד',
-		options : 'Special Character Options' // MISSING
+		options : 'אפשרויות תווים מיוחדים'
 	},
 
@@ -136,5 +136,5 @@
 		advanced	: 'אפשרויות מתקדמות',
 		type		: 'סוג קישור',
-		toUrl		: 'URL', // MISSING
+		toUrl		: 'כתובת (URL)',
 		toAnchor	: 'עוגן בעמוד זה',
 		toEmail		: 'דוא"ל',
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'תכונות רשימה ממוספרת',
+		bulletedTitle		: 'תכונות רשימת תבליטים',
+		type				: 'סוג',
+		start				: 'תחילת מספור',
+		circle				: 'עיגול ריק',
+		disc				: 'עיגול מלא',
+		square				: 'ריבוע',
+		none				: 'ללא',
+		notset				: '<לא נקבע>',
+		armenian			: 'ספרות ארמניות',
+		georgian			: 'ספרות גיאורגיות (an, ban, gan וכו\')',
+		lowerRoman			: 'ספירה רומית באותיות קטנות (i, ii, iii, iv, v וכו\')',
+		upperRoman			: 'ספירה רומיות באותיות גדולות (I, II, III, IV, V וכו\')',
+		lowerAlpha			: 'אותיות אנגליות קטנות (a, b, c, d, e וכו\')',
+		upperAlpha			: 'אותיות אנגליות גדולות (A, B, C, D, E וכו\')',
+		lowerGreek			: 'אותיות יווניות קטנות (alpha, beta, gamma וכו\')',
+		decimal				: 'ספרות (1, 2, 3 וכו\')',
+		decimalLeadingZero	: 'ספרות עם 0 בהתחלה (01, 02, 03 וכו\')'
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -223,5 +246,5 @@
 		widthPx		: 'פיקסלים',
 		widthPc		: 'אחוז',
-		widthUnit	: 'width unit', // MISSING
+		widthUnit	: 'יחידת רוחב',
 		height		: 'גובה',
 		cellSpace	: 'מרווח תא',
@@ -386,5 +409,5 @@
 		height		: 'גובה',
 		lockRatio	: 'נעילת היחס',
-		unlockRatio	: 'Unlock Ratio', // MISSING
+		unlockRatio	: 'ביטול נעילת היחס',
 		resetSize	: 'איפוס הגודל',
 		border		: 'מסגרת',
@@ -399,9 +422,9 @@
 		img2Button	: 'האם להפוך את התמונה לכפתור תמונה?',
 		urlMissing	: 'כתובת התמונה חסרה.',
-		validateWidth	: 'Width must be a whole number.', // MISSING
-		validateHeight	: 'Height must be a whole number.', // MISSING
-		validateBorder	: 'Border must be a whole number.', // MISSING
-		validateHSpace	: 'HSpace must be a whole number.', // MISSING
-		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+		validateWidth	: 'שדה הרוחב חייב להיות מספר שלם.',
+		validateHeight	: 'שדה הגובה חייב להיות מספר שלם.',
+		validateBorder	: 'שדה המסגרת חייב להיות מספר שלם.',
+		validateHSpace	: 'שדה המרווח האופקי חייב להיות מספר שלם.',
+		validateVSpace	: 'שדה המרווח האנכי חייב להיות מספר שלם.'
 	},
 
@@ -485,10 +508,10 @@
 		toolbar	: 'סמיילי',
 		title	: 'הוספת סמיילי',
-		options : 'Smiley Options' // MISSING
+		options : 'אפשרויות סמיילים'
 	},
 
 	elementsPath :
 	{
-		eleLabel : 'Elements path', // MISSING
+		eleLabel : 'עץ האלמנטים',
 		eleTitle : '%1 אלמנט'
 	},
@@ -516,5 +539,5 @@
 		pasteMsg	: 'נא להדביק בתוך הקופסה באמצעות (<b>Ctrl/Cmd+V</b>) וללחוץ על <b>אישור</b>.',
 		securityMsg	: 'עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (Clipboard) בצורה ישירה. נא להדביק שוב בחלון זה.',
-		pasteArea	: 'Paste Area' // MISSING
+		pasteArea	: 'איזור הדבקה'
 	},
 
@@ -537,5 +560,5 @@
 		button			: 'תבניות',
 		title			: 'תביות תוכן',
-		options : 'Template Options', // MISSING
+		options : 'אפשרויות התבניות',
 		insertOption	: 'החלפת תוכן ממשי',
 		selectPromptMsg	: 'יש לבחור תבנית לפתיחה בעורך.<br />התוכן המקורי ימחק:',
@@ -548,5 +571,5 @@
 	{
 		label		: 'סגנון',
-		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle	: 'סגנונות פורמט',
 		panelTitle1	: 'סגנונות בלוק',
 		panelTitle2	: 'סגנונות רצף',
@@ -606,5 +629,5 @@
 		textColorTitle	: 'צבע טקסט',
 		bgColorTitle	: 'צבע רקע',
-		panelTitle		: 'Colors', // MISSING
+		panelTitle		: 'צבעים',
 		auto			: 'אוטומטי',
 		more			: 'צבעים נוספים...'
@@ -658,4 +681,5 @@
 	{
 		title			: 'בדיקת איות בזמן כתיבה (SCAYT)',
+		opera_title		: 'לא זמין בדפדפן אופרה',
 		enable			: 'אפשר SCAYT',
 		disable			: 'בטל SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'הוספת מילה',
 		emptyDic		: 'יש לבחור מילון.',
+
 		optionsTab		: 'אפשרויות',
+		allCaps			: 'התעלם ממילים שכל אותיותיהן גדולות',
+		ignoreDomainNames : 'התעלם משמות מתחם',
+		mixedCase		: 'התעלם ממילים עם אותיות גדולות וקטנות ביחד',
+		mixedWithDigits	: 'התעלם ממילים עם מספרים',
+
 		languagesTab	: 'שפות',
+
 		dictionariesTab	: 'מילון',
+		dic_field_name	: 'שם המילון',
+		dic_create		: 'יצירה',
+		dic_restore		: 'שחזור',
+		dic_delete		: 'מחיקה',
+		dic_rename		: 'שינוי שם',
+		dic_info		: 'בהתחלה מילון המשתמש מאוחסן בעוגיה, אך עוגיות מוגבלות במקום. כאשר המילון מגיע לגודל בו הוא אינו יכול להתאכסן בעוגיה, המילון צריך להתאכסן בשרתנו. לשם כך עליך לתת שם למילון. אם כבר יש לך מילון מאוחסן, יש להכניס את שמו וללחוץ על כפתור השחזור.',
+
 		aboutTab		: 'אודות'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/hi.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/hi.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/hi.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/hr.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/hr.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/hr.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Provjeri pravopis tijekom tipkanja (SCAYT)',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Omogući SCAYT',
 		disable			: 'Onemogući SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'Dodaj riječ',
 		emptyDic		: 'Naziv rječnika ne smije biti prazno.',
+
 		optionsTab		: 'Opcije',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Jezici',
+
 		dictionariesTab	: 'Rječnici',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'O SCAYT'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/hu.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/hu.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/hu.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Helyesírás ellenőrzés gépelés közben',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'SCAYT engedélyezése',
 		disable			: 'SCAYT letiltása',
@@ -669,7 +693,21 @@
 		addWord			: 'Szó hozzáadása',
 		emptyDic		: 'A szótár nevét meg kell adni.',
+
 		optionsTab		: 'Beállítások',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Nyelvek',
+
 		dictionariesTab	: 'Szótár',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'Névjegy'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/is.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/is.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/is.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/it.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/it.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/it.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Controllo Ortografico Mentre Scrivi',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Abilita COMS',
 		disable			: 'Disabilita COMS',
@@ -669,7 +693,21 @@
 		addWord			: 'Aggiungi Parola',
 		emptyDic		: 'Il nome del dizionario non può essere vuoto.',
+
 		optionsTab		: 'Opzioni',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Lingue',
+
 		dictionariesTab	: 'Dizionari',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/ja.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/ja.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/ja.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'スペルチェック設定(SCAYT)',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'SCAYT有効',
 		disable			: 'SCAYT無効',
@@ -669,7 +693,21 @@
 		addWord			: '語句追加',
 		emptyDic		: '辞書名は必ず入力してください',
+
 		optionsTab		: 'オプション',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: '言語',
+
 		dictionariesTab	: '辞書',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'バージョン情報'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/km.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/km.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/km.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/ko.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/ko.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/ko.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/lt.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/lt.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/lt.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/lv.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/lv.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/lv.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/mn.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/mn.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/mn.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/ms.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/ms.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/ms.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/nb.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/nb.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/nb.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Stavekontroll mens du skriver',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Slå på SCAYT',
 		disable			: 'Slå av SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'Legg til ord',
 		emptyDic		: 'Ordboknavn skal ikke være tom',
+
 		optionsTab		: 'Valg',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Språk',
+
 		dictionariesTab	: 'Ordbøker',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'Om'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/nl.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/nl.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/nl.js	(revision 5538)
@@ -32,9 +32,9 @@
 	 * of reading non-English words. So be careful while translating it.
 	 */
-	editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING
+	editorTitle : 'Tekstverwerker, %1, druk op ALT 0 voor hulp.',
 
 	// ARIA descriptions.
-	toolbar	: 'Toolbar', // MISSING
-	editor	: 'Rich Text Editor', // MISSING
+	toolbar	: 'Werkbalk',
+	editor	: 'Tekstverwerker',
 
 	// Toolbar buttons without dialogs.
@@ -93,6 +93,6 @@
 		ok				: 'OK',
 		cancel			: 'Annuleren',
-		close			: 'Close', // MISSING
-		preview			: 'Preview', // MISSING
+		close			: 'Sluiten',
+		preview			: 'Voorbeeld',
 		generalTab		: 'Algemeen',
 		advancedTab		: 'Geavanceerd',
@@ -100,10 +100,10 @@
 		confirmNewPage	: 'Alle aangebrachte wijzigingen gaan verloren. Weet u zeker dat u een nieuwe pagina wilt openen?',
 		confirmCancel	: 'Enkele opties zijn gewijzigd. Weet u zeker dat u dit dialoogvenster wilt sluiten?',
-		options			: 'Options', // MISSING
-		target			: 'Target', // MISSING
-		targetNew		: 'New Window (_blank)', // MISSING
-		targetTop		: 'Topmost Window (_top)', // MISSING
-		targetSelf		: 'Same Window (_self)', // MISSING
-		targetParent	: 'Parent Window (_parent)', // MISSING
+		options			: 'Opties',
+		target			: 'Doel',
+		targetNew		: 'Nieuw venster (_blank)',
+		targetTop		: 'Hele venster (_top)',
+		targetSelf		: 'Zelfde venster (_self)',
+		targetParent	: 'Origineel venster (_parent)',
 
 		// Put the voice-only part of the label in the span.
@@ -113,5 +113,5 @@
 	contextmenu :
 	{
-		options : 'Context Menu Options' // MISSING
+		options : 'Context menu opties'
 	},
 
@@ -121,5 +121,5 @@
 		toolbar		: 'Speciaal teken invoegen',
 		title		: 'Selecteer speciaal teken',
-		options : 'Special Character Options' // MISSING
+		options : 'Speciale tekens opties'
 	},
 
@@ -136,5 +136,5 @@
 		advanced	: 'Geavanceerd',
 		type		: 'Linktype',
-		toUrl		: 'URL', // MISSING
+		toUrl		: 'URL',
 		toAnchor	: 'Interne link in pagina',
 		toEmail		: 'E-mail',
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -223,5 +246,5 @@
 		widthPx		: 'pixels',
 		widthPc		: 'procent',
-		widthUnit	: 'width unit', // MISSING
+		widthUnit	: 'eenheid breedte',
 		height		: 'Hoogte',
 		cellSpace	: 'Afstand tussen cellen',
@@ -386,5 +409,5 @@
 		height		: 'Hoogte',
 		lockRatio	: 'Afmetingen vergrendelen',
-		unlockRatio	: 'Unlock Ratio', // MISSING
+		unlockRatio	: 'Afmetingen ontgrendelen',
 		resetSize	: 'Afmetingen resetten',
 		border		: 'Rand',
@@ -399,9 +422,9 @@
 		img2Button	: 'Wilt u de geselecteerde afbeelding vervangen door een afbeeldingsknop?',
 		urlMissing	: 'De URL naar de afbeelding ontbreekt.',
-		validateWidth	: 'Width must be a whole number.', // MISSING
-		validateHeight	: 'Height must be a whole number.', // MISSING
-		validateBorder	: 'Border must be a whole number.', // MISSING
-		validateHSpace	: 'HSpace must be a whole number.', // MISSING
-		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+		validateWidth	: 'Breedte moet een heel nummer zijn.',
+		validateHeight	: 'Hoogte moet een heel nummer zijn.',
+		validateBorder	: 'Rand moet een heel nummer zijn.',
+		validateHSpace	: 'HSpace moet een heel nummer zijn.',
+		validateVSpace	: 'VSpace moet een heel nummer zijn.'
 	},
 
@@ -485,10 +508,10 @@
 		toolbar	: 'Smiley',
 		title	: 'Smiley invoegen',
-		options : 'Smiley Options' // MISSING
+		options : 'Smiley opties'
 	},
 
 	elementsPath :
 	{
-		eleLabel : 'Elements path', // MISSING
+		eleLabel : 'Elementenpad',
 		eleTitle : '%1 element'
 	},
@@ -516,5 +539,5 @@
 		pasteMsg	: 'Plak de tekst in het volgende vak gebruik makend van uw toetsenbord (<strong>Ctrl/Cmd+V</strong>) en klik op <strong>OK</strong>.',
 		securityMsg	: 'Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.',
-		pasteArea	: 'Paste Area' // MISSING
+		pasteArea	: 'Plakgebied'
 	},
 
@@ -537,5 +560,5 @@
 		button			: 'Sjablonen',
 		title			: 'Inhoud sjabonen',
-		options : 'Template Options', // MISSING
+		options : 'Template opties',
 		insertOption	: 'Vervang de huidige inhoud',
 		selectPromptMsg	: 'Selecteer het sjabloon dat in de editor geopend moet worden (de actuele inhoud gaat verloren):',
@@ -548,5 +571,5 @@
 	{
 		label		: 'Stijl',
-		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle	: 'Opmaakstijlen',
 		panelTitle1	: 'Blok stijlen',
 		panelTitle2	: 'In-line stijlen',
@@ -606,5 +629,5 @@
 		textColorTitle	: 'Tekstkleur',
 		bgColorTitle	: 'Achtergrondkleur',
-		panelTitle		: 'Colors', // MISSING
+		panelTitle		: 'Kleuren',
 		auto			: 'Automatisch',
 		more			: 'Meer kleuren...'
@@ -658,4 +681,5 @@
 	{
 		title			: 'Controleer de spelling tijdens het typen',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'SCAYT inschakelen',
 		disable			: 'SCAYT uitschakelen',
@@ -669,7 +693,21 @@
 		addWord			: 'Woord toevoegen',
 		emptyDic		: 'De naam van het woordenboek mag niet leeg zijn.',
+
 		optionsTab		: 'Opties',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Talen',
+
 		dictionariesTab	: 'Woordenboeken',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'Over'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/no.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/no.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/no.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Stavekontroll mens du skriver',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Slå på SCAYT',
 		disable			: 'Slå av SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'Legg til ord',
 		emptyDic		: 'Ordboknavn skal ikke være tom',
+
 		optionsTab		: 'Valg',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Språk',
+
 		dictionariesTab	: 'Ordbøker',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'Om'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/pl.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/pl.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/pl.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Sprawdź pisownię podczas pisania (SCAYT)',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Włącz SCAYT',
 		disable			: 'Wyłącz SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'Dodaj słowo',
 		emptyDic		: 'Nazwa słownika nie może być pusta.',
+
 		optionsTab		: 'Opcje',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Języki',
+
 		dictionariesTab	: 'Słowniki',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'Na temat SCAYT'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/pt-br.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/pt-br.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/pt-br.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Correção gramatical durante a digitação',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Habilitar SCAYT',
 		disable			: 'Desabilitar SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'Adicionar palavra',
 		emptyDic		: 'O nome do dicionário não deveria estar vazio.',
+
 		optionsTab		: 'Opções',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Línguas',
+
 		dictionariesTab	: 'Dicionários',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'Sobre'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/pt.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/pt.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/pt.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/ro.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/ro.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/ro.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/ru.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/ru.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/ru.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Проверка Орфографии по Мере Ввода',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Включить ПОМВ',
 		disable			: 'Отключить ПОМВ',
@@ -669,7 +693,21 @@
 		addWord			: 'Добавить слово',
 		emptyDic		: 'Имя словаря должно быть не пустым.',
+
 		optionsTab		: 'Настройки',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Языки',
+
 		dictionariesTab	: 'Словари',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'О словарях'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/sk.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/sk.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/sk.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/sl.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/sl.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/sl.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Črkovanje med tipkanjem',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Omogoči SCAYT',
 		disable			: 'Onemogoči SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'Dodaj besedo',
 		emptyDic		: 'Ime slovarja ne more biti prazno.',
+
 		optionsTab		: 'Možnosti',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Jeziki',
+
 		dictionariesTab	: 'Slovarji',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'O storitvi'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/sr-latn.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/sr-latn.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/sr-latn.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/sr.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/sr.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/sr.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/sv.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/sv.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/sv.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/th.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/th.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/th.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Spell Check As You Type', // MISSING
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Enable SCAYT', // MISSING
 		disable			: 'Disable SCAYT', // MISSING
@@ -669,7 +693,21 @@
 		addWord			: 'Add Word', // MISSING
 		emptyDic		: 'Dictionary name should not be empty.', // MISSING
+
 		optionsTab		: 'Options', // MISSING
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Languages', // MISSING
+
 		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'About' // MISSING
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/tr.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/tr.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/tr.js	(revision 5538)
@@ -32,9 +32,9 @@
 	 * of reading non-English words. So be careful while translating it.
 	 */
-	editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING
+	editorTitle : 'Zengin metin editörü, %1, yardım için ALT 0 tuşuna basın.',
 
 	// ARIA descriptions.
-	toolbar	: 'Toolbar', // MISSING
-	editor	: 'Rich Text Editor', // MISSING
+	toolbar	: 'Toolbar',
+	editor	: 'Zengin Metin Editörü',
 
 	// Toolbar buttons without dialogs.
@@ -93,25 +93,25 @@
 		ok				: 'Tamam',
 		cancel			: 'İptal',
-		close			: 'Close', // MISSING
-		preview			: 'Preview', // MISSING
+		close			: 'Kapat',
+		preview			: 'Ön gösterim',
 		generalTab		: 'Genel',
 		advancedTab		: 'Gelişmiş',
-		validateNumberFailed : 'This value is not a number.', // MISSING
-		confirmNewPage	: 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING
-		confirmCancel	: 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING
-		options			: 'Options', // MISSING
-		target			: 'Target', // MISSING
-		targetNew		: 'New Window (_blank)', // MISSING
-		targetTop		: 'Topmost Window (_top)', // MISSING
-		targetSelf		: 'Same Window (_self)', // MISSING
-		targetParent	: 'Parent Window (_parent)', // MISSING
+		validateNumberFailed : 'Bu değer sayı değildir.',
+		confirmNewPage	: 'İceriğiniz kayıt edilmediğinden dolayı kaybolacaktır. Yeni bir sayfa yüklemek istediğinize eminsiniz?',
+		confirmCancel	: 'Bazı seçenekler değişmiştir. Dialog penceresini kapatmak istediğinize eminmisiniz?',
+		options			: 'Seçenekler',
+		target			: 'Hedef',
+		targetNew		: 'Yeni Pencere (_blank)',
+		targetTop		: 'Enüst Pencere (_top)',
+		targetSelf		: 'Aynı Pencere (_self)',
+		targetParent	: 'Ana Pencere (_parent)',
 
 		// Put the voice-only part of the label in the span.
-		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>'
 	},
 
 	contextmenu :
 	{
-		options : 'Context Menu Options' // MISSING
+		options : 'İçerik Menüsü Seçenekleri'
 	},
 
@@ -121,5 +121,5 @@
 		toolbar		: 'Özel Karakter Ekle',
 		title		: 'Özel Karakter Seç',
-		options : 'Special Character Options' // MISSING
+		options : 'Özel Karakter Seçenekleri'
 	},
 
@@ -127,14 +127,14 @@
 	link :
 	{
-		toolbar		: 'Köprü Ekle/Düzenle',
+		toolbar		: 'Link Ekle/Düzenle',
 		other 		: '<diğer>',
-		menu		: 'Köprü Düzenle',
-		title		: 'Köprü',
-		info		: 'Köprü Bilgisi',
+		menu		: 'Link Düzenle',
+		title		: 'Link',
+		info		: 'Link Bilgisi',
 		target		: 'Hedef',
 		upload		: 'Karşıya Yükle',
 		advanced	: 'Gelişmiş',
-		type		: 'Köprü Türü',
-		toUrl		: 'URL', // MISSING
+		type		: 'Link Türü',
+		toUrl		: 'URL',
 		toAnchor	: 'Bu sayfada çapa',
 		toEmail		: 'E-Posta',
@@ -144,5 +144,5 @@
 		targetPopupName	: 'Yeni Açılan Pencere Adı',
 		popupFeatures	: 'Yeni Açılan Pencere Özellikleri',
-		popupResizable	: 'Resizable', // MISSING
+		popupResizable	: 'Resizable',
 		popupStatusBar	: 'Durum Çubuğu',
 		popupLocationBar: 'Yer Çubuğu',
@@ -156,5 +156,5 @@
 		popupHeight		: 'Yükseklik',
 		popupTop		: 'Yukarıya Göre Konum',
-		id				: 'Id', // MISSING
+		id				: 'Id',
 		langDir			: 'Dil Yönü',
 		langDirLTR		: 'Soldan Sağa (LTR)',
@@ -169,6 +169,6 @@
 		charset			: 'Bağlı Kaynak Karakter Gurubu',
 		styles			: 'Biçem',
-		selectAnchor	: 'Çapa Seç',
-		anchorName		: 'Çapa Adı ile',
+		selectAnchor	: 'Bağlantı Seç',
+		anchorName		: 'Bağlantı Adı ile',
 		anchorId		: 'Eleman Kimlik Numarası ile',
 		emailAddress	: 'E-Posta Adresi',
@@ -176,5 +176,5 @@
 		emailBody		: 'İleti Gövdesi',
 		noAnchors		: '(Bu belgede hiç çapa yok)',
-		noUrl			: 'Lütfen köprü URL\'sini yazın',
+		noUrl			: 'Lütfen Link URL\'sini yazın',
 		noEmail			: 'Lütfen E-posta adresini yazın'
 	},
@@ -183,9 +183,32 @@
 	anchor :
 	{
-		toolbar		: 'Çapa Ekle/Düzenle',
-		menu		: 'Çapa Özellikleri',
-		title		: 'Çapa Özellikleri',
-		name		: 'Çapa Adı',
-		errorName	: 'Lütfen çapa için ad giriniz'
+		toolbar		: 'Bağlantı Ekle/Düzenle',
+		menu		: 'Bağlantı Özellikleri',
+		title		: 'Bağlantı Özellikleri',
+		name		: 'Bağlantı Adı',
+		errorName	: 'Lütfen bağlantı için ad giriniz'
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
 	},
 
@@ -201,7 +224,7 @@
 		matchCase			: 'Büyük/küçük harf duyarlı',
 		matchWord			: 'Kelimenin tamamı uysun',
-		matchCyclic			: 'Match cyclic', // MISSING
+		matchCyclic			: 'Eşleşen döngü',
 		replaceAll			: 'Tümünü Değiştir',
-		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+		replaceSuccessMsg	: '%1 bulunanlardan değiştirildi.'
 	},
 
@@ -223,5 +246,5 @@
 		widthPx		: 'piksel',
 		widthPc		: 'yüzde',
-		widthUnit	: 'width unit', // MISSING
+		widthUnit	: 'genişlik birimi',
 		height		: 'Yükseklik',
 		cellSpace	: 'Izgara kalınlığı',
@@ -234,11 +257,11 @@
 		headersRow		: 'İlk Satır',
 		headersBoth		: 'Her İkisi',
-		invalidRows		: 'Number of rows must be a number greater than 0.', // MISSING
-		invalidCols		: 'Number of columns must be a number greater than 0.', // MISSING
-		invalidBorder	: 'Border size must be a number.', // MISSING
-		invalidWidth	: 'Table width must be a number.', // MISSING
-		invalidHeight	: 'Table height must be a number.', // MISSING
-		invalidCellSpacing	: 'Cell spacing must be a number.', // MISSING
-		invalidCellPadding	: 'Cell padding must be a number.', // MISSING
+		invalidRows		: 'Satır sayısı 0 sayısından büyük olmalıdır.',
+		invalidCols		: 'Sütün sayısı 0 sayısından büyük olmalıdır.',
+		invalidBorder	: 'Çerceve büyüklüklüğü sayı olmalıdır.',
+		invalidWidth	: 'Tablo genişliği sayı olmalıdır.',
+		invalidHeight	: 'Tablo yüksekliği sayı olmalıdır.',
+		invalidCellSpacing	: 'Hücre boşluğu (spacing) sayı olmalıdır.',
+		invalidCellPadding	: 'Hücre aralığı (padding) sayı olmalıdır.',
 
 		cell :
@@ -253,26 +276,26 @@
 			splitHorizontal	: 'Hücreyi Yatay Böl',
 			splitVertical	: 'Hücreyi Dikey Böl',
-			title			: 'Cell Properties', // MISSING
-			cellType		: 'Cell Type', // MISSING
-			rowSpan			: 'Rows Span', // MISSING
-			colSpan			: 'Columns Span', // MISSING
-			wordWrap		: 'Word Wrap', // MISSING
-			hAlign			: 'Horizontal Alignment', // MISSING
-			vAlign			: 'Vertical Alignment', // MISSING
-			alignTop		: 'Top', // MISSING
-			alignMiddle		: 'Middle', // MISSING
-			alignBottom		: 'Bottom', // MISSING
-			alignBaseline	: 'Baseline', // MISSING
-			bgColor			: 'Background Color', // MISSING
-			borderColor		: 'Border Color', // MISSING
-			data			: 'Data', // MISSING
-			header			: 'Header', // MISSING
-			yes				: 'Yes', // MISSING
-			no				: 'No', // MISSING
-			invalidWidth	: 'Cell width must be a number.', // MISSING
-			invalidHeight	: 'Cell height must be a number.', // MISSING
-			invalidRowSpan	: 'Rows span must be a whole number.', // MISSING
-			invalidColSpan	: 'Columns span must be a whole number.', // MISSING
-			chooseColor		: 'Choose' // MISSING
+			title			: 'Hücre Özellikleri',
+			cellType		: 'Hücre Tipi',
+			rowSpan			: 'Satırlar Mesafesi (Span)',
+			colSpan			: 'Sütünlar Mesafesi (Span)',
+			wordWrap		: 'Kelime Kaydırma',
+			hAlign			: 'Düşey Hizalama',
+			vAlign			: 'Yataş Hizalama',
+			alignTop		: 'Üst',
+			alignMiddle		: 'Orta',
+			alignBottom		: 'Alt',
+			alignBaseline	: 'Tabana',
+			bgColor			: 'Arkaplan Rengi',
+			borderColor		: 'Çerçeve Rengi',
+			data			: 'Veri',
+			header			: 'Başlık',
+			yes				: 'Evet',
+			no				: 'Hayır',
+			invalidWidth	: 'Hücre genişliği sayı olmalıdır.',
+			invalidHeight	: 'Hücre yüksekliği sayı olmalıdır.',
+			invalidRowSpan	: 'Satırların mesafesi tam sayı olmalıdır.',
+			invalidColSpan	: 'Sütünların mesafesi tam sayı olmalıdır.',
+			chooseColor		: 'Seçiniz'
 		},
 
@@ -321,5 +344,5 @@
 		action		: 'İşlem',
 		method		: 'Yöntem',
-		encoding	: 'Encoding' // MISSING
+		encoding	: 'Kodlama'
 	},
 
@@ -362,5 +385,5 @@
 		type		: 'Tür',
 		typeText	: 'Metin',
-		typePass	: 'Parola'
+		typePass	: 'Şifre'
 	},
 
@@ -386,5 +409,5 @@
 		height		: 'Yükseklik',
 		lockRatio	: 'Oranı Kilitle',
-		unlockRatio	: 'Unlock Ratio', // MISSING
+		unlockRatio	: 'Kilitli Oran',
 		resetSize	: 'Boyutu Başa Döndür',
 		border		: 'Kenar',
@@ -396,12 +419,12 @@
 		alertUrl	: 'Lütfen resmin URL\'sini yazınız',
 		linkTab		: 'Köprü',
-		button2Img	: 'Do you want to transform the selected image button on a simple image?', // MISSING
-		img2Button	: 'Do you want to transform the selected image on a image button?', // MISSING
-		urlMissing	: 'Image source URL is missing.', // MISSING
-		validateWidth	: 'Width must be a whole number.', // MISSING
-		validateHeight	: 'Height must be a whole number.', // MISSING
-		validateBorder	: 'Border must be a whole number.', // MISSING
-		validateHSpace	: 'HSpace must be a whole number.', // MISSING
-		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+		button2Img	: 'Seçili resim butonunu basit resime çevirmek istermisiniz?',
+		img2Button	: 'Seçili olan resimi, resimli butona çevirmek istermisiniz?',
+		urlMissing	: 'Resmin URL kaynağı eksiktir.',
+		validateWidth	: 'Genişlik tam sayı olmalıdır.',
+		validateHeight	: 'Yükseklik tam sayı olmalıdır.',
+		validateBorder	: 'Çerçeve tam sayı olmalıdır.',
+		validateHSpace	: 'HSpace tam sayı olmalıdır.',
+		validateVSpace	: 'VSpace tam sayı olmalıdır.'
 	},
 
@@ -410,18 +433,18 @@
 	{
 		properties		: 'Flash Özellikleri',
-		propertiesTab	: 'Properties', // MISSING
+		propertiesTab	: 'Özellikler',
 		title			: 'Flash Özellikleri',
 		chkPlay			: 'Otomatik Oynat',
 		chkLoop			: 'Döngü',
 		chkMenu			: 'Flash Menüsünü Kullan',
-		chkFull			: 'Allow Fullscreen', // MISSING
+		chkFull			: 'Tam ekrana İzinver',
  		scale			: 'Boyutlandır',
 		scaleAll		: 'Hepsini Göster',
 		scaleNoBorder	: 'Kenar Yok',
 		scaleFit		: 'Tam Sığdır',
-		access			: 'Script Access', // MISSING
-		accessAlways	: 'Always', // MISSING
-		accessSameDomain: 'Same domain', // MISSING
-		accessNever		: 'Never', // MISSING
+		access			: 'Kod İzni',
+		accessAlways	: 'Herzaman',
+		accessSameDomain: 'Aynı domain',
+		accessNever		: 'Asla',
 		align			: 'Hizalama',
 		alignLeft		: 'Sol',
@@ -434,16 +457,16 @@
 		alignTextTop	: 'Yazı Tepeye',
 		alignTop		: 'Tepe',
-		quality			: 'Quality', // MISSING
-		qualityBest		: 'Best', // MISSING
-		qualityHigh		: 'High', // MISSING
-		qualityAutoHigh	: 'Auto High', // MISSING
-		qualityMedium	: 'Medium', // MISSING
-		qualityAutoLow	: 'Auto Low', // MISSING
-		qualityLow		: 'Low', // MISSING
-		windowModeWindow: 'Window', // MISSING
-		windowModeOpaque: 'Opaque', // MISSING
-		windowModeTransparent : 'Transparent', // MISSING
-		windowMode		: 'Window mode', // MISSING
-		flashvars		: 'Variables for Flash', // MISSING
+		quality			: 'Kalite',
+		qualityBest		: 'En iyi',
+		qualityHigh		: 'Yüksek',
+		qualityAutoHigh	: 'Otomatik Yükseklik',
+		qualityMedium	: 'Orta',
+		qualityAutoLow	: 'Otomatik Düşüklük',
+		qualityLow		: 'Düşük',
+		windowModeWindow: 'Pencere',
+		windowModeOpaque: 'Opak',
+		windowModeTransparent : 'Şeffaf',
+		windowMode		: 'Pencere modu',
+		flashvars		: 'Flash Değerleri',
 		bgcolor			: 'Arka Renk',
 		width			: 'Genişlik',
@@ -452,8 +475,8 @@
 		vSpace			: 'Dikey Boşluk',
 		validateSrc		: 'Lütfen köprü URL\'sini yazın',
-		validateWidth	: 'Width must be a number.', // MISSING
-		validateHeight	: 'Height must be a number.', // MISSING
-		validateHSpace	: 'HSpace must be a number.', // MISSING
-		validateVSpace	: 'VSpace must be a number.' // MISSING
+		validateWidth	: 'Width must be a number.',
+		validateHeight	: 'Yükseklik sayı olmalıdır.',
+		validateHSpace	: 'HSpace sayı olmalıdır.',
+		validateVSpace	: 'VSpace sayı olmalıdır.'
 	},
 
@@ -462,7 +485,7 @@
 	{
 		toolbar			: 'Yazım Denetimi',
-		title			: 'Spell Check', // MISSING
-		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
-		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		title			: 'Yazımı Denetle',
+		notAvailable	: 'Üzügünüz, bu servis şuanda hizmet dışıdır.',
+		errorLoading	: 'Uygulamada yüklerken hata oluştu: %s.',
 		notInDic		: 'Sözlükte Yok',
 		changeTo		: 'Şuna değiştir:',
@@ -485,11 +508,11 @@
 		toolbar	: 'İfade',
 		title	: 'İfade Ekle',
-		options : 'Smiley Options' // MISSING
+		options : 'İfade Seçenekleri'
 	},
 
 	elementsPath :
 	{
-		eleLabel : 'Elements path', // MISSING
-		eleTitle : '%1 element' // MISSING
+		eleLabel : 'Elementlerin yolu',
+		eleTitle : '%1 element'
 	},
 
@@ -516,13 +539,13 @@
 		pasteMsg	: 'Lütfen aşağıdaki kutunun içine yapıştırın. (<STRONG>Ctrl/Cmd+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.',
 		securityMsg	: 'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin direkt olarak panoya erişimine izin vermiyor. Bu pencere içine tekrar yapıştırmalısınız..',
-		pasteArea	: 'Paste Area' // MISSING
+		pasteArea	: 'Paste Area'
 	},
 
 	pastefromword :
 	{
-		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		confirmCleanup	: 'Yapıştırmaya çalıştığınız metin Word\'den kopyalanmıştır. Yapıştırmadan önce silmek istermisiniz?',
 		toolbar			: 'Word\'den Yapıştır',
 		title			: 'Word\'den Yapıştır',
-		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+		error			: 'Yapıştırmadaki veri bilgisi hata düzelene kadar silinmeyecektir'
 	},
 
@@ -537,5 +560,5 @@
 		button			: 'Şablonlar',
 		title			: 'İçerik Şablonları',
-		options : 'Template Options', // MISSING
+		options : 'Şablon Seçenekleri',
 		insertOption	: 'Mevcut içerik ile değiştir',
 		selectPromptMsg	: 'Düzenleyicide açmak için lütfen bir şablon seçin.<br>(hali hazırdaki içerik kaybolacaktır.):',
@@ -548,8 +571,8 @@
 	{
 		label		: 'Biçem',
-		panelTitle	: 'Formatting Styles', // MISSING
-		panelTitle1	: 'Block Styles', // MISSING
-		panelTitle2	: 'Inline Styles', // MISSING
-		panelTitle3	: 'Object Styles' // MISSING
+		panelTitle	: 'Stilleri Düzenliyor',
+		panelTitle1	: 'Blok Stilleri',
+		panelTitle2	: 'Inline Stilleri',
+		panelTitle3	: 'Nesne Stilleri'
 	},
 
@@ -573,17 +596,17 @@
 	div :
 	{
-		title				: 'Create Div Container', // MISSING
-		toolbar				: 'Create Div Container', // MISSING
-		cssClassInputLabel	: 'Stylesheet Classes', // MISSING
-		styleSelectLabel	: 'Style', // MISSING
-		IdInputLabel		: 'Id', // MISSING
-		languageCodeInputLabel	: ' Language Code', // MISSING
-		inlineStyleInputLabel	: 'Inline Style', // MISSING
-		advisoryTitleInputLabel	: 'Advisory Title', // MISSING
-		langDirLabel		: 'Language Direction', // MISSING
-		langDirLTRLabel		: 'Left to Right (LTR)', // MISSING
-		langDirRTLLabel		: 'Right to Left (RTL)', // MISSING
-		edit				: 'Edit Div', // MISSING
-		remove				: 'Remove Div' // MISSING
+		title				: 'Div İçeriği Oluştur',
+		toolbar				: 'Div İçeriği Oluştur',
+		cssClassInputLabel	: 'Stilltipi Sınıfı',
+		styleSelectLabel	: 'Stil',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Dil Kodu',
+		inlineStyleInputLabel	: 'Inline Stili',
+		advisoryTitleInputLabel	: 'Tavsiye Başlığı',
+		langDirLabel		: 'Dil Yönü',
+		langDirLTRLabel		: 'Soldan sağa (LTR)',
+		langDirRTLLabel		: 'Sağdan sola (RTL)',
+		edit				: 'Div Düzenle',
+		remove				: 'Div Kaldır'
   	},
 
@@ -591,5 +614,5 @@
 	{
 		label		: 'Yazı Türü',
-		voiceLabel	: 'Font', // MISSING
+		voiceLabel	: 'Font',
 		panelTitle	: 'Yazı Türü'
 	},
@@ -598,5 +621,5 @@
 	{
 		label		: 'Boyut',
-		voiceLabel	: 'Font Size', // MISSING
+		voiceLabel	: 'Font Size',
 		panelTitle	: 'Boyut'
 	},
@@ -606,5 +629,5 @@
 		textColorTitle	: 'Yazı Rengi',
 		bgColorTitle	: 'Arka Renk',
-		panelTitle		: 'Colors', // MISSING
+		panelTitle		: 'Renkler',
 		auto			: 'Otomatik',
 		more			: 'Diğer renkler...'
@@ -613,96 +636,111 @@
 	colors :
 	{
-		'000' : 'Black', // MISSING
-		'800000' : 'Maroon', // MISSING
-		'8B4513' : 'Saddle Brown', // MISSING
-		'2F4F4F' : 'Dark Slate Gray', // MISSING
-		'008080' : 'Teal', // MISSING
-		'000080' : 'Navy', // MISSING
-		'4B0082' : 'Indigo', // MISSING
-		'696969' : 'Dim Gray', // MISSING
-		'B22222' : 'Fire Brick', // MISSING
-		'A52A2A' : 'Brown', // MISSING
-		'DAA520' : 'Golden Rod', // MISSING
-		'006400' : 'Dark Green', // MISSING
-		'40E0D0' : 'Turquoise', // MISSING
-		'0000CD' : 'Medium Blue', // MISSING
-		'800080' : 'Purple', // MISSING
-		'808080' : 'Gray', // MISSING
-		'F00' : 'Red', // MISSING
-		'FF8C00' : 'Dark Orange', // MISSING
-		'FFD700' : 'Gold', // MISSING
-		'008000' : 'Green', // MISSING
-		'0FF' : 'Cyan', // MISSING
-		'00F' : 'Blue', // MISSING
-		'EE82EE' : 'Violet', // MISSING
-		'A9A9A9' : 'Dark Gray', // MISSING
-		'FFA07A' : 'Light Salmon', // MISSING
-		'FFA500' : 'Orange', // MISSING
-		'FFFF00' : 'Yellow', // MISSING
-		'00FF00' : 'Lime', // MISSING
-		'AFEEEE' : 'Pale Turquoise', // MISSING
-		'ADD8E6' : 'Light Blue', // MISSING
-		'DDA0DD' : 'Plum', // MISSING
-		'D3D3D3' : 'Light Grey', // MISSING
-		'FFF0F5' : 'Lavender Blush', // MISSING
-		'FAEBD7' : 'Antique White', // MISSING
-		'FFFFE0' : 'Light Yellow', // MISSING
-		'F0FFF0' : 'Honeydew', // MISSING
-		'F0FFFF' : 'Azure', // MISSING
-		'F0F8FF' : 'Alice Blue', // MISSING
-		'E6E6FA' : 'Lavender', // MISSING
-		'FFF' : 'White' // MISSING
+		'000' : 'Siyah',
+		'800000' : 'Kestane',
+		'8B4513' : 'Koyu Kahverengi',
+		'2F4F4F' : 'Koyu Kurşuni Gri',
+		'008080' : 'Teal',
+		'000080' : 'Mavi',
+		'4B0082' : 'Çivit Mavisi',
+		'696969' : 'Silik Gri',
+		'B22222' : 'Ateş Tuğlası',
+		'A52A2A' : 'Kahverengi',
+		'DAA520' : 'Altun Sırık',
+		'006400' : 'Koyu Yeşil',
+		'40E0D0' : 'Turkuaz',
+		'0000CD' : 'Orta Mavi',
+		'800080' : 'Pembe',
+		'808080' : 'Gri',
+		'F00' : 'Kırmızı',
+		'FF8C00' : 'Koyu Portakal',
+		'FFD700' : 'Altın',
+		'008000' : 'Yeşil',
+		'0FF' : 'Ciyan',
+		'00F' : 'Mavi',
+		'EE82EE' : 'Menekşe',
+		'A9A9A9' : 'Koyu Gri',
+		'FFA07A' : 'Açık Sarımsı',
+		'FFA500' : 'Portakal',
+		'FFFF00' : 'Sarı',
+		'00FF00' : 'Açık Yeşil',
+		'AFEEEE' : 'Sönük Turkuaz',
+		'ADD8E6' : 'Açık Mavi',
+		'DDA0DD' : 'Mor',
+		'D3D3D3' : 'Açık Gri',
+		'FFF0F5' : 'Eflatun Pembe',
+		'FAEBD7' : 'Antik Beyaz',
+		'FFFFE0' : 'Açık Sarı',
+		'F0FFF0' : 'Balsarısı',
+		'F0FFFF' : 'Gök Mavisi',
+		'F0F8FF' : 'Reha Mavi',
+		'E6E6FA' : 'Eflatun',
+		'FFF' : 'Beyaz'
 	},
 
 	scayt :
 	{
-		title			: 'Spell Check As You Type', // MISSING
-		enable			: 'Enable SCAYT', // MISSING
-		disable			: 'Disable SCAYT', // MISSING
-		about			: 'About SCAYT', // MISSING
-		toggle			: 'Toggle SCAYT', // MISSING
-		options			: 'Options', // MISSING
-		langs			: 'Languages', // MISSING
-		moreSuggestions	: 'More suggestions', // MISSING
-		ignore			: 'Ignore', // MISSING
-		ignoreAll		: 'Ignore All', // MISSING
-		addWord			: 'Add Word', // MISSING
-		emptyDic		: 'Dictionary name should not be empty.', // MISSING
-		optionsTab		: 'Options', // MISSING
-		languagesTab	: 'Languages', // MISSING
-		dictionariesTab	: 'Dictionaries', // MISSING
-		aboutTab		: 'About' // MISSING
+		title			: 'Girmiş olduğunuz kelime denetimi',
+		opera_title		: 'Not supported by Opera', // MISSING
+		enable			: 'SCAYT etkinleştir',
+		disable			: 'SCAYT pasifleştir',
+		about			: 'SCAYT hakkında',
+		toggle			: 'SCAYT değiştir',
+		options			: 'Seçenekler',
+		langs			: 'Diller',
+		moreSuggestions	: 'Daha fazla öneri',
+		ignore			: 'Yoksay',
+		ignoreAll		: 'Tümünü Yoksay',
+		addWord			: 'Kelime Ekle',
+		emptyDic		: 'Sözlük adı boş olamaz.',
+
+		optionsTab		: 'Seçenekler',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Diller',
+
+		dictionariesTab	: 'Sözlükler',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
+		aboutTab		: 'Hakkında'
 	},
 
 	about :
 	{
-		title		: 'About CKEditor', // MISSING
-		dlgTitle	: 'About CKEditor', // MISSING
-		moreInfo	: 'For licensing information please visit our web site:', // MISSING
-		copy		: 'Copyright &copy; $1. All rights reserved.' // MISSING
-	},
-
-	maximize : 'Maximize', // MISSING
-	minimize : 'Minimize', // MISSING
+		title		: 'CKEditor Hakkında',
+		dlgTitle	: 'CKEditor Hakkında',
+		moreInfo	: 'Lisanslama hakkında daha fazla bilgi almak için lütfen sitemizi ziyaret edin:',
+		copy		: 'Copyright &copy; $1. Tüm hakları saklıdır.'
+	},
+
+	maximize : 'Büyült',
+	minimize : 'Küçült',
 
 	fakeobjects :
 	{
-		anchor	: 'Anchor', // MISSING
-		flash	: 'Flash Animation', // MISSING
-		div		: 'Page Break', // MISSING
-		unknown	: 'Unknown Object' // MISSING
-	},
-
-	resize : 'Drag to resize', // MISSING
+		anchor	: 'Bağlantı',
+		flash	: 'Flash Animasyonu',
+		div		: 'Sayfa Kesimi',
+		unknown	: 'Bilinmeyen Nesne'
+	},
+
+	resize : 'Boyutlandırmak için sürükle',
 
 	colordialog :
 	{
-		title		: 'Select color', // MISSING
-		highlight	: 'Highlight', // MISSING
-		selected	: 'Selected', // MISSING
-		clear		: 'Clear' // MISSING
-	},
-
-	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+		title		: 'Renk seç',
+		highlight	: 'İşaretle',
+		selected	: 'Seçilmiş',
+		clear		: 'Temizle'
+	},
+
+	toolbarCollapse	: 'Toolbar\'ı topla',
+	toolbarExpand	: 'Toolbar\'ı aç'
 };
Index: /CKEditor/branches/versions/3.2.x/_source/lang/uk.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/uk.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/uk.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: 'Перефірка орфографії по мірі набору',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: 'Включити SCAYT',
 		disable			: 'Відключити SCAYT',
@@ -669,7 +693,21 @@
 		addWord			: 'Додати слово',
 		emptyDic		: 'Назва словника повинна бути заповнена.',
+
 		optionsTab		: 'Опції',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: 'Мови',
+
 		dictionariesTab	: 'Словники',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'Про'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/vi.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/vi.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/vi.js	(revision 5538)
@@ -32,9 +32,9 @@
 	 * of reading non-English words. So be careful while translating it.
 	 */
-	editorTitle : 'Rich text editor, %1, press ALT 0 for help.', // MISSING
+	editorTitle : 'Bộ soạn thảo, %1, nhấn ALT + 0 để xem hướng dẫn.',
 
 	// ARIA descriptions.
-	toolbar	: 'Toolbar', // MISSING
-	editor	: 'Rich Text Editor', // MISSING
+	toolbar	: 'Thanh công cụ',
+	editor	: 'Bộ soạn thảo',
 
 	// Toolbar buttons without dialogs.
@@ -50,12 +50,12 @@
 	bold			: 'Đậm',
 	italic			: 'Nghiêng',
-	selectAll		: 'Chọn Tất cả',
-	removeFormat	: 'Xoá Định dạng',
+	selectAll		: 'Chọn tất cả',
+	removeFormat	: 'Xoá định dạng',
 	strike			: 'Gạch xuyên ngang',
 	subscript		: 'Chỉ số dưới',
 	superscript		: 'Chỉ số trên',
-	horizontalrule	: 'Chèn Đường phân cách ngang',
-	pagebreak		: 'Chèn Ngắt trang',
-	unlink			: 'Xoá Liên kết',
+	horizontalrule	: 'Chèn đường phân cách ngang',
+	pagebreak		: 'Chèn ngắt trang',
+	unlink			: 'Xoá liên kết',
 	undo			: 'Khôi phục thao tác',
 	redo			: 'Làm lại thao tác',
@@ -68,5 +68,5 @@
 		protocol		: 'Giao thức',
 		upload			: 'Tải lên',
-		uploadSubmit	: 'Tải lên Máy chủ',
+		uploadSubmit	: 'Tải lên máy chủ',
 		image			: 'Hình ảnh',
 		flash			: 'Flash',
@@ -83,27 +83,27 @@
 		id				: 'Định danh',
 		name			: 'Tên',
-		langDir			: 'Đường dẫn Ngôn ngữ',
-		langDirLtr		: 'Trái sang Phải (LTR)',
-		langDirRtl		: 'Phải sang Trái (RTL)',
-		langCode		: 'Mã Ngôn ngữ',
+		langDir			: 'Hướng ngôn ngữ',
+		langDirLtr		: 'Trái sang phải (LTR)',
+		langDirRtl		: 'Phải sang trái (RTL)',
+		langCode		: 'Mã ngôn ngữ',
 		longDescr		: 'Mô tả URL',
 		cssClass		: 'Lớp Stylesheet',
-		advisoryTitle	: 'Advisory Title',
-		cssStyle		: 'Mẫu',
+		advisoryTitle	: 'Nhan đề hướng dẫn',
+		cssStyle		: 'Kiểu (style)',
 		ok				: 'Đồng ý',
 		cancel			: 'Bỏ qua',
-		close			: 'Close', // MISSING
-		preview			: 'Preview', // MISSING
-		generalTab		: 'Chung',
-		advancedTab		: 'Mở rộng',
+		close			: 'Đóng',
+		preview			: 'Xem trước',
+		generalTab		: 'Tab chung',
+		advancedTab		: 'Tab mở rộng',
 		validateNumberFailed : 'Giá trị này không phải là số.',
-		confirmNewPage	: 'Mọi thay đổi không được không được lưu lại của nội dung này sẽ bị mất. Bạn có chắc chắn muốn tải một trang mới?',
+		confirmNewPage	: 'Mọi thay đổi không được lưu lại, nội dung này sẽ bị mất. Bạn có chắc chắn muốn tải một trang mới?',
 		confirmCancel	: 'Một vài tùy chọn đã bị thay đổi. Bạn có chắc chắn muốn đóng hộp thoại?',
-		options			: 'Options', // MISSING
-		target			: 'Target', // MISSING
-		targetNew		: 'New Window (_blank)', // MISSING
-		targetTop		: 'Topmost Window (_top)', // MISSING
-		targetSelf		: 'Same Window (_self)', // MISSING
-		targetParent	: 'Parent Window (_parent)', // MISSING
+		options			: 'Tùy chọn',
+		target			: 'Đích đến',
+		targetNew		: 'Cửa sổ mới (_blank)',
+		targetTop		: 'Cửa sổ trên cùng (_top)',
+		targetSelf		: 'Tại trang (_self)',
+		targetParent	: 'Cửa sổ cha (_parent)',
 
 		// Put the voice-only part of the label in the span.
@@ -113,5 +113,5 @@
 	contextmenu :
 	{
-		options : 'Context Menu Options' // MISSING
+		options : 'Tùy chọn menu bổ xung'
 	},
 
@@ -119,7 +119,7 @@
 	specialChar		:
 	{
-		toolbar		: 'Chèn Ký tự đặc biệt',
-		title		: 'Hãy chọn Ký tự đặc biệt',
-		options : 'Special Character Options' // MISSING
+		toolbar		: 'Chèn ký tự đặc biệt',
+		title		: 'Hãy chọn ký tự đặc biệt',
+		options : 'Tùy chọn các ký tự đặc biệt'
 	},
 
@@ -127,21 +127,21 @@
 	link :
 	{
-		toolbar		: 'Chèn/Sửa Liên kết',
+		toolbar		: 'Chèn/Sửa liên kết',
 		other 		: '<khác>',
-		menu		: 'Sửa Liên kết',
+		menu		: 'Sửa liên kết',
 		title		: 'Liên kết',
-		info		: 'Thông tin Liên kết',
+		info		: 'Thông tin liên kết',
 		target		: 'Đích',
 		upload		: 'Tải lên',
 		advanced	: 'Mở rộng',
-		type		: 'Kiểu Liên kết',
-		toUrl		: 'URL', // MISSING
+		type		: 'Kiểu liên kết',
+		toUrl		: 'URL',
 		toAnchor	: 'Neo trong trang này',
 		toEmail		: 'Thư điện tử',
 		targetFrame		: '<khung>',
 		targetPopup		: '<cửa sổ popup>',
-		targetFrameName	: 'Tên Khung đích',
-		targetPopupName	: 'Tên Cửa sổ Popup',
-		popupFeatures	: 'Đặc điểm của Cửa sổ Popup',
+		targetFrameName	: 'Tên khung đích',
+		targetPopupName	: 'Tên cửa sổ Popup',
+		popupFeatures	: 'Đặc điểm của cửa sổ Popup',
 		popupResizable	: 'Có thể thay đổi kích cỡ',
 		popupStatusBar	: 'Thanh trạng thái',
@@ -153,28 +153,28 @@
 		popupDependent	: 'Phụ thuộc (Netscape)',
 		popupWidth		: 'Rộng',
-		popupLeft		: 'Vị trí Trái',
+		popupLeft		: 'Vị trí bên trái',
 		popupHeight		: 'Cao',
-		popupTop		: 'Vị trí Trên',
+		popupTop		: 'Vị trí phía trên',
 		id				: 'Định danh',
-		langDir			: 'Đường dẫn Ngôn ngữ',
-		langDirLTR		: 'Trái sang Phải (LTR)',
-		langDirRTL		: 'Phải sang Trái (RTL)',
-		acccessKey		: 'Phím Hỗ trợ truy cập',
+		langDir			: 'Hướng ngôn ngữ',
+		langDirLTR		: 'Trái sang phải (LTR)',
+		langDirRTL		: 'Phải sang trái (RTL)',
+		acccessKey		: 'Phím hỗ trợ truy cập',
 		name			: 'Tên',
-		langCode		: 'Đường dẫn Ngôn ngữ',
+		langCode		: 'Mã ngôn ngữ',
 		tabIndex		: 'Chỉ số của Tab',
-		advisoryTitle	: 'Advisory Title',
-		advisoryContentType	: 'Advisory Content Type',
+		advisoryTitle	: 'Nhan đề hướng dẫn',
+		advisoryContentType	: 'Nội dung hướng dẫn',
 		cssClasses		: 'Lớp Stylesheet',
 		charset			: 'Bảng mã của tài nguyên được liên kết đến',
-		styles			: 'Mẫu',
-		selectAnchor	: 'Chọn một Neo',
-		anchorName		: 'Theo Tên Neo',
-		anchorId		: 'Theo Định danh Thành phần',
+		styles			: 'Kiểu (style)',
+		selectAnchor	: 'Chọn một điểm neo',
+		anchorName		: 'Theo tên điểm neo',
+		anchorId		: 'Theo định danh thành phần',
 		emailAddress	: 'Thư điện tử',
-		emailSubject	: 'Tiêu đề Thông điệp',
-		emailBody		: 'Nội dung Thông điệp',
-		noAnchors		: '(Không có Neo nào trong tài liệu)',
-		noUrl			: 'Hãy đưa vào Liên kết URL',
+		emailSubject	: 'Tiêu đề thông điệp',
+		emailBody		: 'Nội dung thông điệp',
+		noAnchors		: '(Không có điểm neo nào trong tài liệu)',
+		noUrl			: 'Hãy đưa vào đường dẫn liên kết (URL)',
 		noEmail			: 'Hãy đưa vào địa chỉ thư điện tử'
 	},
@@ -183,9 +183,32 @@
 	anchor :
 	{
-		toolbar		: 'Chèn/Sửa Neo',
-		menu		: 'Thuộc tính Neo',
-		title		: 'Thuộc tính Neo',
-		name		: 'Tên của Neo',
-		errorName	: 'Hãy nhập vào tên của Neo'
+		toolbar		: 'Chèn/Sửa điểm neo',
+		menu		: 'Thuộc tính điểm neo',
+		title		: 'Thuộc tính điểm neo',
+		name		: 'Tên của điểm neo',
+		errorName	: 'Hãy nhập vào tên của điểm neo'
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Thuộc tính danh sách có thứ tự',
+		bulletedTitle		: 'Thuộc tính danh sách không thứ tự',
+		type				: 'Kiểu loại',
+		start				: 'Bắt đầu',
+		circle				: 'Khuyên tròn',
+		disc				: 'Hình đĩa',
+		square				: 'Hình vuông',
+		none				: 'Không gì cả',
+		notset				: '<không thiết lập>',
+		armenian			: 'Số theo kiểu Armenian',
+		georgian			: 'Số theo kiểu Georgian (an, ban, gan...)',
+		lowerRoman			: 'Số La Mã kiểu thường (i, ii, iii, iv, v...)',
+		upperRoman			: 'Số La Mã kiểu HOA (I, II, III, IV, V...)',
+		lowerAlpha			: 'Kiểu abc thường (a, b, c, d, e...)',
+		upperAlpha			: 'Kiểu ABC HOA (A, B, C, D, E...)',
+		lowerGreek			: 'Kiểu Hy Lạp (alpha, beta, gamma...)',
+		decimal				: 'Kiểu số (1, 2, 3 ...)',
+		decimalLeadingZero	: 'Kiểu số (01, 02, 03...)'
 	},
 
@@ -193,5 +216,5 @@
 	findAndReplace :
 	{
-		title				: 'Tìm kiếm và Thay Thế',
+		title				: 'Tìm kiếm và thay thế',
 		find				: 'Tìm kiếm',
 		replace				: 'Thay thế',
@@ -202,5 +225,5 @@
 		matchWord			: 'Giống toàn bộ từ',
 		matchCyclic			: 'Giống một phần',
-		replaceAll			: 'Thay thế Tất cả',
+		replaceAll			: 'Thay thế tất cả',
 		replaceSuccessMsg	: '%1 vị trí đã được thay thế.'
 	},
@@ -212,8 +235,8 @@
 		title		: 'Thuộc tính bảng',
 		menu		: 'Thuộc tính bảng',
-		deleteTable	: 'Xóa Bảng',
-		rows		: 'Hàng',
-		columns		: 'Cột',
-		border		: 'Cỡ Đường viền',
+		deleteTable	: 'Xóa bảng',
+		rows		: 'Số hàng',
+		columns		: 'Số cột',
+		border		: 'Kích thước đường viền',
 		align		: 'Canh lề',
 		alignLeft	: 'Trái',
@@ -221,41 +244,41 @@
 		alignRight	: 'Phải',
 		width		: 'Rộng',
-		widthPx		: 'điểm (px)',
-		widthPc		: '%',
-		widthUnit	: 'width unit', // MISSING
-		height		: 'Cao',
-		cellSpace	: 'Khoảng cách Ô',
-		cellPad		: 'Đệm Ô',
+		widthPx		: 'Điểm ảnh (px)',
+		widthPc		: 'Phần trăm (%)',
+		widthUnit	: 'Đơn vị',
+		height		: 'Chiều cao',
+		cellSpace	: 'Khoảng cách giữa các ô',
+		cellPad		: 'Khoảng đệm giữ ô và nội dung',
 		caption		: 'Đầu đề',
 		summary		: 'Tóm lược',
 		headers		: 'Đầu đề',
 		headersNone		: 'Không có',
-		headersColumn	: 'Cột Đầu tiên',
-		headersRow		: 'Hàng Đầu tiên',
+		headersColumn	: 'Cột đầu tiên',
+		headersRow		: 'Hàng đầu tiên',
 		headersBoth		: 'Cả hai',
 		invalidRows		: 'Số lượng hàng phải là một số lớn hơn 0.',
 		invalidCols		: 'Số lượng cột phải là một số lớn hơn 0.',
 		invalidBorder	: 'Kích cỡ của đường biên phải là một số nguyên.',
-		invalidWidth	: 'Chiều rộng của Bảng phải là một số nguyên.',
-		invalidHeight	: 'Chiều cao của Bảng phải là một số nguyên.',
+		invalidWidth	: 'Chiều rộng của bảng phải là một số nguyên.',
+		invalidHeight	: 'Chiều cao của bảng phải là một số nguyên.',
 		invalidCellSpacing	: 'Khoảng cách giữa các ô phải là một số nguyên.',
-		invalidCellPadding	: 'Đệm giữa các ô phải là một số nguyên.',
+		invalidCellPadding	: 'Khoảng đệm giữa ô và nội dung phải là một số nguyên.',
 
 		cell :
 		{
 			menu			: 'Ô',
-			insertBefore	: 'Chèn Ô Phía trước',
-			insertAfter		: 'Chèn Ô Phía sau',
-			deleteCell		: 'Xoá Ô',
-			merge			: 'Kết hợp Ô',
-			mergeRight		: 'Kết hợp Sang phải',
-			mergeDown		: 'Kết hợp Xuống dưới',
-			splitHorizontal	: 'Tách ngang Ô',
-			splitVertical	: 'Tách dọc Ô',
-			title			: 'Thuộc tính của Ô',
-			cellType		: 'Kiểu của Ô',
+			insertBefore	: 'Chèn ô Phía trước',
+			insertAfter		: 'Chèn ô Phía sau',
+			deleteCell		: 'Xoá ô',
+			merge			: 'Kết hợp ô',
+			mergeRight		: 'Kết hợp sang phải',
+			mergeDown		: 'Kết hợp xuống dưới',
+			splitHorizontal	: 'Phân tách ô theo chiều ngang',
+			splitVertical	: 'Phân tách ô theo chiều dọc',
+			title			: 'Thuộc tính của ô',
+			cellType		: 'Kiểu của ô',
 			rowSpan			: 'Kết hợp hàng',
 			colSpan			: 'Kết hợp cột',
-			wordWrap		: 'Word Wrap',
+			wordWrap		: 'Chữ liền hàng',
 			hAlign			: 'Canh lề ngang',
 			vAlign			: 'Canh lề dọc',
@@ -270,9 +293,9 @@
 			yes				: 'Có',
 			no				: 'Không',
-			invalidWidth	: 'Chiều rộng của Ô phải là một số nguyên.',
-			invalidHeight	: 'Chiều cao của Ô phải là một số nguyên.',
+			invalidWidth	: 'Chiều rộng của ô phải là một số nguyên.',
+			invalidHeight	: 'Chiều cao của ô phải là một số nguyên.',
 			invalidRowSpan	: 'Số hàng kết hợp phải là một số nguyên.',
 			invalidColSpan	: 'Số cột kết hợp phải là một số nguyên.',
-			chooseColor		: 'Choose' // MISSING
+			chooseColor		: 'Chọn màu'
 		},
 
@@ -280,7 +303,7 @@
 		{
 			menu			: 'Hàng',
-			insertBefore	: 'Chèn Hàng Phía trước',
-			insertAfter		: 'Chèn Hàng Phía sau',
-			deleteRow		: 'Xoá Hàng'
+			insertBefore	: 'Chèn hàng phía trước',
+			insertAfter		: 'Chèn hàng phía sau',
+			deleteRow		: 'Xoá hàng'
 		},
 
@@ -288,7 +311,7 @@
 		{
 			menu			: 'Cột',
-			insertBefore	: 'Chèn Cột Phía trước',
-			insertAfter		: 'Chèn Cột Phía sau',
-			deleteColumn	: 'Xoá Cột'
+			insertBefore	: 'Chèn cột phía trước',
+			insertAfter		: 'Chèn cột phía sau',
+			deleteColumn	: 'Xoá cột'
 		}
 	},
@@ -297,10 +320,10 @@
 	button :
 	{
-		title		: 'Thuộc tính Nút',
-		text		: 'Chuỗi hiển thị (Giá trị)',
+		title		: 'Thuộc tính của nút',
+		text		: 'Chuỗi hiển thị (giá trị)',
 		type		: 'Kiểu',
-		typeBtn		: 'Nút Bấm',
-		typeSbm		: 'Nút Gửi',
-		typeRst		: 'Nút Nhập lại'
+		typeBtn		: 'Nút bấm',
+		typeSbm		: 'Nút gửi',
+		typeRst		: 'Nút nhập lại'
 	},
 
@@ -308,6 +331,6 @@
 	checkboxAndRadio :
 	{
-		checkboxTitle : 'Thuộc tính Nút kiểm',
-		radioTitle	: 'Thuộc tính Nút chọn',
+		checkboxTitle : 'Thuộc tính nút kiểm',
+		radioTitle	: 'Thuộc tính nút chọn',
 		value		: 'Giá trị',
 		selected	: 'Được chọn'
@@ -317,6 +340,6 @@
 	form :
 	{
-		title		: 'Thuộc tính Biểu mẫu',
-		menu		: 'Thuộc tính Biểu mẫu',
+		title		: 'Thuộc tính biểu mẫu',
+		menu		: 'Thuộc tính biểu mẫu',
 		action		: 'Hành động',
 		method		: 'Phương thức',
@@ -327,5 +350,5 @@
 	select :
 	{
-		title		: 'Thuộc tính Ô chọn',
+		title		: 'Thuộc tính ô chọn',
 		selectInfo	: 'Thông tin',
 		opAvail		: 'Các tùy chọn có thể sử dụng',
@@ -341,5 +364,5 @@
 		btnDown		: 'Xuống',
 		btnSetValue : 'Giá trị được chọn',
-		btnDelete	: 'Xoá'
+		btnDelete	: 'Nút xoá'
 	},
 
@@ -347,7 +370,7 @@
 	textarea :
 	{
-		title		: 'Thuộc tính Vùng văn bản',
-		cols		: 'Cột',
-		rows		: 'Hàng'
+		title		: 'Thuộc tính vùng văn bản',
+		cols		: 'Số cột',
+		rows		: 'Số hàng'
 	},
 
@@ -355,9 +378,9 @@
 	textfield :
 	{
-		title		: 'Thuộc tính Trường văn bản',
+		title		: 'Thuộc tính trường văn bản',
 		name		: 'Tên',
 		value		: 'Giá trị',
-		charWidth	: 'Rộng',
-		maxChars	: 'Số Ký tự tối đa',
+		charWidth	: 'Độ rộng của ký tự',
+		maxChars	: 'Số ký tự tối đa',
 		type		: 'Kiểu',
 		typeText	: 'Ký tự',
@@ -368,5 +391,5 @@
 	hidden :
 	{
-		title	: 'Thuộc tính Trường ẩn',
+		title	: 'Thuộc tính trường ẩn',
 		name	: 'Tên',
 		value	: 'Giá trị'
@@ -376,32 +399,32 @@
 	image :
 	{
-		title		: 'Thuộc tính Hình ảnh',
-		titleButton	: 'Thuộc tính Nút hình ảnh',
-		menu		: 'Thuộc tính Hình ảnh',
-		infoTab		: 'Thông tin Hình ảnh',
-		btnUpload	: 'Tải lên Máy chủ',
+		title		: 'Thuộc tính của ảnh',
+		titleButton	: 'Thuộc tính nút của ảnh',
+		menu		: 'Thuộc tính của ảnh',
+		infoTab		: 'Thông tin của ảnh',
+		btnUpload	: 'Tải lên máy chủ',
 		upload		: 'Tải lên',
-		alt			: 'Chú thích Hình ảnh',
-		width		: 'Rộng',
-		height		: 'Cao',
+		alt			: 'Chú thích ảnh',
+		width		: 'Chiều rộng',
+		height		: 'chiều cao',
 		lockRatio	: 'Giữ nguyên tỷ lệ',
-		unlockRatio	: 'Unlock Ratio', // MISSING
+		unlockRatio	: 'Phá bỏ tỷ lệ',
 		resetSize	: 'Kích thước gốc',
 		border		: 'Đường viền',
-		hSpace		: 'HSpace',
-		vSpace		: 'VSpace',
+		hSpace		: 'Khoảng đệm ngang',
+		vSpace		: 'Khoảng đệm dọc',
 		align		: 'Vị trí',
-		alignLeft	: 'Trái',
-		alignRight	: 'Phải',
-		alertUrl	: 'Hãy đưa vào URL của hình ảnh',
-		linkTab		: 'Liên kết',
-		button2Img	: 'Bạn có muốn chuyển nút bấm bằng hình ảnh được chọn thành hình ảnh?',
-		img2Button	: 'Bạn có muốn chuyển đổi hình ảnh được chọn thành nút bấm bằng hình ảnh?',
-		urlMissing	: 'Image source URL is missing.', // MISSING
-		validateWidth	: 'Width must be a whole number.', // MISSING
-		validateHeight	: 'Height must be a whole number.', // MISSING
-		validateBorder	: 'Border must be a whole number.', // MISSING
-		validateHSpace	: 'HSpace must be a whole number.', // MISSING
-		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+		alignLeft	: 'Bên trái',
+		alignRight	: 'Bên phải',
+		alertUrl	: 'Hãy đưa vào đường dẫn của ảnh',
+		linkTab		: 'Tab liên kết',
+		button2Img	: 'Bạn có muốn chuyển nút bấm bằng ảnh được chọn thành ảnh?',
+		img2Button	: 'Bạn có muốn chuyển đổi ảnh được chọn thành nút bấm bằng ảnh?',
+		urlMissing	: 'Thiếu đường dẫn hình ảnh',
+		validateWidth	: 'Chiều rộng của ảnh phải là một số nguyên dương',
+		validateHeight	: 'Chiều cao của ảnh phải là một số nguyên dương',
+		validateBorder	: 'Chiều rộng của đường viền phải là một số nguyên dương',
+		validateHSpace	: 'Khoảng đệm ngang phải là một số nguyên dương',
+		validateVSpace	: 'Khoảng đệm dọc phải là một số nguyên dương'
 	},
 
@@ -414,11 +437,11 @@
 		chkPlay			: 'Tự động chạy',
 		chkLoop			: 'Lặp',
-		chkMenu			: 'Cho phép bật Menu của Flash',
-		chkFull			: 'Cho phép Toàn màn hình',
+		chkMenu			: 'Cho phép bật menu của Flash',
+		chkFull			: 'Cho phép toàn màn hình',
  		scale			: 'Tỷ lệ',
 		scaleAll		: 'Hiển thị tất cả',
 		scaleNoBorder	: 'Không đường viền',
 		scaleFit		: 'Vừa vặn',
-		access			: 'Truy cập Mã',
+		access			: 'Truy cập mã',
 		accessAlways	: 'Luôn luôn',
 		accessSameDomain: 'Cùng tên miền',
@@ -435,25 +458,25 @@
 		alignTop		: 'Trên',
 		quality			: 'Chất lượng',
-		qualityBest		: 'TỐt nhất',
+		qualityBest		: 'Tốt nhất',
 		qualityHigh		: 'Cao',
-		qualityAutoHigh	: 'Cao Tự động',
+		qualityAutoHigh	: 'Cao tự động',
 		qualityMedium	: 'Trung bình',
-		qualityAutoLow	: 'Thấp Tự động',
+		qualityAutoLow	: 'Thấp tự động',
 		qualityLow		: 'Thấp',
 		windowModeWindow: 'Cửa sổ',
 		windowModeOpaque: 'Mờ đục',
 		windowModeTransparent : 'Trong suốt',
-		windowMode		: 'Chế độ Cửa sổ',
+		windowMode		: 'Chế độ cửa sổ',
 		flashvars		: 'Các biến số dành cho Flash',
 		bgcolor			: 'Màu nền',
 		width			: 'Rộng',
 		height			: 'Cao',
-		hSpace			: 'HSpace',
-		vSpace			: 'VSpace',
-		validateSrc		: 'Hãy đưa vào Liên kết URL',
+		hSpace			: 'Khoảng đệm ngang',
+		vSpace			: 'Khoảng đệm dọc',
+		validateSrc		: 'Hãy đưa vào đường dẫn liên kết',
 		validateWidth	: 'Chiều rộng phải là số nguyên.',
 		validateHeight	: 'Chiều cao phải là số nguyên.',
-		validateHSpace	: 'HSpace phải là số nguyên.',
-		validateVSpace	: 'VSpace phải là số nguyên.'
+		validateHSpace	: 'Khoảng đệm ngang phải là số nguyên.',
+		validateVSpace	: 'Khoảng đệm dọc phải là số nguyên.'
 	},
 
@@ -461,6 +484,6 @@
 	spellCheck :
 	{
-		toolbar			: 'Kiểm tra Chính tả',
-		title			: 'Kiểm tra Chính tả',
+		toolbar			: 'Kiểm tra chính tả',
+		title			: 'Kiểm tra chính tả',
 		notAvailable	: 'Xin lỗi, dịch vụ này hiện tại không có.',
 		errorLoading	: 'Lỗi khi đang nạp dịch vụ ứng dụng: %s.',
@@ -468,7 +491,7 @@
 		changeTo		: 'Chuyển thành',
 		btnIgnore		: 'Bỏ qua',
-		btnIgnoreAll	: 'Bỏ qua Tất cả',
+		btnIgnoreAll	: 'Bỏ qua tất cả',
 		btnReplace		: 'Thay thế',
-		btnReplaceAll	: 'Thay thế Tất cả',
+		btnReplaceAll	: 'Thay thế tất cả',
 		btnUndo			: 'Phục hồi lại',
 		noSuggestions	: '- Không đưa ra gợi ý về từ -',
@@ -484,11 +507,11 @@
 	{
 		toolbar	: 'Hình biểu lộ cảm xúc (mặt cười)',
-		title	: 'Chèn Hình biểu lộ cảm xúc (mặt cười)',
-		options : 'Smiley Options' // MISSING
+		title	: 'Chèn hình biểu lộ cảm xúc (mặt cười)',
+		options : 'Tùy chọn hình  biểu lộ cảm xúc'
 	},
 
 	elementsPath :
 	{
-		eleLabel : 'Elements path', // MISSING
+		eleLabel : 'Nhãn thành phần',
 		eleTitle : '%1 thành phần'
 	},
@@ -507,5 +530,5 @@
 	},
 
-	blockquote : 'Khối Trích dẫn',
+	blockquote : 'Khối trích dẫn',
 
 	clipboard :
@@ -516,5 +539,5 @@
 		pasteMsg	: 'Hãy dán nội dung vào trong khung bên dưới, sử dụng tổ hợp phím (<STRONG>Ctrl/Cmd+V</STRONG>) và nhấn vào nút <STRONG>Đồng ý</STRONG>.',
 		securityMsg	: 'Do thiết lập bảo mật của trình duyệt nên trình biên tập không thể truy cập trực tiếp vào nội dung đã sao chép. Bạn cần phải dán lại nội dung vào cửa sổ này.',
-		pasteArea	: 'Paste Area' // MISSING
+		pasteArea	: 'Khu vực dán'
 	},
 
@@ -537,19 +560,19 @@
 		button			: 'Mẫu dựng sẵn',
 		title			: 'Nội dung Mẫu dựng sẵn',
-		options : 'Template Options', // MISSING
+		options : 'Tùy chọn mẫu dựng sẵn',
 		insertOption	: 'Thay thế nội dung hiện tại',
-		selectPromptMsg	: 'Hãy chọn Mẫu dựng sẵn để mở trong trình biên tập<br>(nội dung hiện tại sẽ bị mất):',
-		emptyListMsg	: '(Không có Mẫu dựng sẵn nào được định nghĩa)'
-	},
-
-	showBlocks : 'Hiển thị các Khối',
+		selectPromptMsg	: 'Hãy chọn mẫu dựng sẵn để mở trong trình biên tập<br>(nội dung hiện tại sẽ bị mất):',
+		emptyListMsg	: '(Không có mẫu dựng sẵn nào được định nghĩa)'
+	},
+
+	showBlocks : 'Hiển thị các khối',
 
 	stylesCombo :
 	{
 		label		: 'Kiểu',
-		panelTitle	: 'Formatting Styles', // MISSING
-		panelTitle1	: 'Kiểu Khối',
-		panelTitle2	: 'Kiểu Trực tiếp',
-		panelTitle3	: 'Kiểu Đối tượng'
+		panelTitle	: 'Phong cách định dạng',
+		panelTitle1	: 'Kiểu khối',
+		panelTitle2	: 'Kiểu trực tiếp',
+		panelTitle3	: 'Kiểu đối tượng'
 	},
 
@@ -559,6 +582,6 @@
 		panelTitle	: 'Định dạng',
 
-		tag_p		: 'Normal',
-		tag_pre		: 'Formatted',
+		tag_p		: 'Bình thường (P)',
+		tag_pre		: 'Đã thiết lập',
 		tag_address	: 'Address',
 		tag_h1		: 'Heading 1',
@@ -568,22 +591,22 @@
 		tag_h5		: 'Heading 5',
 		tag_h6		: 'Heading 6',
-		tag_div		: 'Normal (DIV)'
+		tag_div		: 'Bình thường (DIV)'
 	},
 
 	div :
 	{
-		title				: 'Create Div Container', // MISSING
-		toolbar				: 'Create Div Container', // MISSING
-		cssClassInputLabel	: 'Stylesheet Classes', // MISSING
-		styleSelectLabel	: 'Style', // MISSING
-		IdInputLabel		: 'Id', // MISSING
-		languageCodeInputLabel	: ' Language Code', // MISSING
-		inlineStyleInputLabel	: 'Inline Style', // MISSING
-		advisoryTitleInputLabel	: 'Advisory Title', // MISSING
-		langDirLabel		: 'Language Direction', // MISSING
-		langDirLTRLabel		: 'Left to Right (LTR)', // MISSING
-		langDirRTLLabel		: 'Right to Left (RTL)', // MISSING
-		edit				: 'Edit Div', // MISSING
-		remove				: 'Remove Div' // MISSING
+		title				: 'Tạo khối các thành phần',
+		toolbar				: 'Tạo khối các thành phần',
+		cssClassInputLabel	: 'Các lớp CSS',
+		styleSelectLabel	: 'Kiểu (style)',
+		IdInputLabel		: 'Định danh (id)',
+		languageCodeInputLabel	: 'Mã ngôn ngữ',
+		inlineStyleInputLabel	: 'Kiểu nội dòng',
+		advisoryTitleInputLabel	: 'Nhan đề hướng dẫn',
+		langDirLabel		: 'Hướng ngôn ngữ',
+		langDirLTRLabel		: 'Trái sang phải (LTR)',
+		langDirRTLLabel		: 'Phải qua trái (RTL)',
+		edit				: 'Chỉnh sửa',
+		remove				: 'Xóa bỏ'
   	},
 
@@ -606,5 +629,5 @@
 		textColorTitle	: 'Màu chữ',
 		bgColorTitle	: 'Màu nền',
-		panelTitle		: 'Colors', // MISSING
+		panelTitle		: 'Màu sắc',
 		auto			: 'Tự động',
 		more			: 'Màu khác...'
@@ -658,4 +681,5 @@
 	{
 		title			: 'Kiểm tra chính tả ngay khi gõ chữ (SCAYT)',
+		opera_title		: 'Không hỗ trợ trên trình duyệt Opera',
 		enable			: 'Bật SCAYT',
 		disable			: 'Tắt SCAYT',
@@ -666,10 +690,24 @@
 		moreSuggestions	: 'Đề xuất thêm',
 		ignore			: 'Bỏ qua',
-		ignoreAll		: 'Bỏ qua Tất cả',
-		addWord			: 'Thêm Từ',
+		ignoreAll		: 'Bỏ qua tất cả',
+		addWord			: 'Thêm từ',
 		emptyDic		: 'Tên của từ điển không được để trống.',
+
 		optionsTab		: 'Tùy chọn',
-		languagesTab	: 'Ngôn ngữ',
+		allCaps			: 'Không phân biệt chữ HOA chữ thường',
+		ignoreDomainNames : 'Bỏ qua tên miền',
+		mixedCase		: 'Không phân biệt loại chữ',
+		mixedWithDigits	: 'Không phân biệt chữ và số',
+
+		languagesTab	: 'Tab ngôn ngữ',
+
 		dictionariesTab	: 'Từ điển',
+		dic_field_name	: 'Tên từ điển',
+		dic_create		: 'Tạo',
+		dic_restore		: 'Phục hồi',
+		dic_delete		: 'Xóa',
+		dic_rename		: 'Thay tên',
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: 'Thông tin'
 	},
@@ -684,11 +722,11 @@
 
 	maximize : 'Phóng to tối đa',
-	minimize : 'Minimize', // MISSING
+	minimize : 'Thu nhỏ',
 
 	fakeobjects :
 	{
-		anchor	: 'Neo',
-		flash	: 'Hoạt họa Flash',
-		div		: 'Ngắt Trang',
+		anchor	: 'Điểm neo',
+		flash	: 'Flash',
+		div		: 'Ngắt trang',
 		unknown	: 'Đối tượng không rõ ràng'
 	},
@@ -698,11 +736,11 @@
 	colordialog :
 	{
-		title		: 'Select color', // MISSING
-		highlight	: 'Highlight', // MISSING
-		selected	: 'Selected', // MISSING
-		clear		: 'Clear' // MISSING
-	},
-
-	toolbarCollapse	: 'Collapse Toolbar', // MISSING
-	toolbarExpand	: 'Expand Toolbar' // MISSING
+		title		: 'Chọn màu',
+		highlight	: 'Màu chọn',
+		selected	: 'Màu đã chọn',
+		clear		: 'Xóa bỏ'
+	},
+
+	toolbarCollapse	: 'Thu gọn thanh công cụ',
+	toolbarExpand	: 'Mở rộng thnah công cụ'
 };
Index: /CKEditor/branches/versions/3.2.x/_source/lang/zh-cn.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/zh-cn.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/zh-cn.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: '即时拼写检查',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: '启用即时拼写检查',
 		disable			: '禁用即时拼写检查',
@@ -669,7 +693,21 @@
 		addWord			: '添加单词',
 		emptyDic		: '字典名不应为空.',
+
 		optionsTab		: '选项',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: '语言',
+
 		dictionariesTab	: '字典',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: '关于'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/lang/zh.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/lang/zh.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/lang/zh.js	(revision 5538)
@@ -190,4 +190,27 @@
 	},
 
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
 	// Find And Replace Dialog
 	findAndReplace :
@@ -658,4 +681,5 @@
 	{
 		title			: '即時拼寫檢查',
+		opera_title		: 'Not supported by Opera', // MISSING
 		enable			: '啟用即時拼寫檢查',
 		disable			: '關閉即時拼寫檢查',
@@ -669,7 +693,21 @@
 		addWord			: '添加單詞',
 		emptyDic		: '字典名不應為空.',
+
 		optionsTab		: '選項',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
 		languagesTab	: '語言',
+
 		dictionariesTab	: '字典',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.', // MISSING
+
 		aboutTab		: '關於'
 	},
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/a11yhelp/lang/he.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/a11yhelp/lang/he.js	(revision 5538)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/a11yhelp/lang/he.js	(revision 5538)
@@ -0,0 +1,216 @@
+﻿/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.setLang( 'a11yhelp', 'he',
+{
+	accessibilityHelp :
+	{
+		title : 'הוראות נגישות',
+		contents : 'הוראות נגישות. לסגירה לחץ אסקייפ (ESC).',
+		legend :
+		[
+			{
+				name : 'כללי',
+				items :
+						[
+							{
+								name : 'סרגל הכלים',
+								legend:
+									'לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. ' +
+									'עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. ' +
+									'עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. ' +
+									'לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר.'
+							},
+
+							{
+								name : 'דיאלוגים (חלונות תשאול)',
+								legend :
+									'בתוך דיאלוג, לחץ טאב (TAB) כדי לנווט לשדה הבא, לחץ שיפט (SHIFT) + טאב (TAB) כדי לנווט לשדה הקודם, לחץ אנטר (ENTER) כדי לשלוח את הדיאלוג, לחץ אסקייפ (ESC) כדי לבטל. ' +
+									'בתוך דיאלוגים בעלי מספר טאבים (לשוניות), לחץ אלט (ALT) + F10 כדי לנווט לשורת הטאבים. ' +
+									'נווט לטאב הבא עם טאב (TAB) או חץ שמאלי. ' +
+									'עבור לטאב הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. ' +
+									'לחץ רווח או אנטר (ENTER) כדי להיכנס לטאב.'
+							},
+
+							{
+								name : 'תפריט ההקשר (Context Menu)',
+								legend :
+									'לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. ' +
+									'עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. ' +
+									'עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. ' +
+									'לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. ' +
+									'פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. ' +
+									'חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. ' +
+									'סגור את תפריט ההקשר עם אסקייפ (ESC).'
+							},
+
+							{
+								name : 'תפריטים צפים (List boxes)',
+								legend :
+									'בתוך תפריט צף, עבור לפריט הבא עם טאב (TAB) או חץ למטה. ' +
+									'עבור לתפריט הקודם עם שיפט (SHIFT) + טאב (TAB) or חץ עליון. ' +
+									'Press SPACE or ENTER to select the list option. ' +
+									'Press ESC to close the list-box.'
+							},
+
+							{
+								name : 'עץ אלמנטים (Elements Path)',
+								legend :
+									'לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. ' +
+									'עבור לפריט הבא עם טאב (TAB) או חץ ימני. ' +
+									'עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. ' +
+									'לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך.'
+							}
+						]
+			},
+			{
+				name : 'פקודות',
+				items :
+						[
+							{
+								name : ' ביטול צעד אחרון',
+								legend : 'לחץ ${undo}'
+							},
+							{
+								name : ' חזרה על צעד אחרון',
+								legend : 'לחץ ${redo}'
+							},
+							{
+								name : ' הדגשה',
+								legend : 'לחץ ${bold}'
+							},
+							{
+								name : ' הטייה',
+								legend : 'לחץ ${italic}'
+							},
+							{
+								name : ' הוספת קו תחתון',
+								legend : 'לחץ ${underline}'
+							},
+							{
+								name : ' הוספת לינק',
+								legend : 'לחץ ${link}'
+							},
+							{
+								name : ' כיווץ סרגל הכלים',
+								legend : 'לחץ ${toolbarCollapse}'
+							},
+							{
+								name : ' הוראות נגישות',
+								legend : 'לחץ ${a11yHelp}'
+							}
+						]
+			}
+		]
+	}
+});
+/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.setLang( 'a11yhelp', 'he',
+{
+	accessibilityHelp :
+	{
+		title : 'הוראות נגישות',
+		contents : 'הוראות נגישות. לסגירה לחץ אסקייפ (ESC).',
+		legend :
+		[
+			{
+				name : 'כללי',
+				items :
+						[
+							{
+								name : 'סרגל הכלים',
+								legend:
+									'לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. ' +
+									'עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. ' +
+									'עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. ' +
+									'לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר.'
+							},
+
+							{
+								name : 'דיאלוגים (חלונות תשאול)',
+								legend :
+									'בתוך דיאלוג, לחץ טאב (TAB) כדי לנווט לשדה הבא, לחץ שיפט (SHIFT) + טאב (TAB) כדי לנווט לשדה הקודם, לחץ אנטר (ENTER) כדי לשלוח את הדיאלוג, לחץ אסקייפ (ESC) כדי לבטל. ' +
+									'בתוך דיאלוגים בעלי מספר טאבים (לשוניות), לחץ אלט (ALT) + F10 כדי לנווט לשורת הטאבים. ' +
+									'נווט לטאב הבא עם טאב (TAB) או חץ שמאלי. ' +
+									'עבור לטאב הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. ' +
+									'לחץ רווח או אנטר (ENTER) כדי להיכנס לטאב.'
+							},
+
+							{
+								name : 'תפריט ההקשר (Context Menu)',
+								legend :
+									'לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. ' +
+									'עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. ' +
+									'עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. ' +
+									'לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. ' +
+									'פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. ' +
+									'חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. ' +
+									'סגור את תפריט ההקשר עם אסקייפ (ESC).'
+							},
+
+							{
+								name : 'תפריטים צפים (List boxes)',
+								legend :
+									'בתוך תפריט צף, עבור לפריט הבא עם טאב (TAB) או חץ למטה. ' +
+									'עבור לתפריט הקודם עם שיפט (SHIFT) + טאב (TAB) or חץ עליון. ' +
+									'Press SPACE or ENTER to select the list option. ' +
+									'Press ESC to close the list-box.'
+							},
+
+							{
+								name : 'עץ אלמנטים (Elements Path)',
+								legend :
+									'לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. ' +
+									'עבור לפריט הבא עם טאב (TAB) או חץ ימני. ' +
+									'עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. ' +
+									'לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך.'
+							}
+						]
+			},
+			{
+				name : 'פקודות',
+				items :
+						[
+							{
+								name : ' ביטול צעד אחרון',
+								legend : 'לחץ ${undo}'
+							},
+							{
+								name : ' חזרה על צעד אחרון',
+								legend : 'לחץ ${redo}'
+							},
+							{
+								name : ' הדגשה',
+								legend : 'לחץ ${bold}'
+							},
+							{
+								name : ' הטייה',
+								legend : 'לחץ ${italic}'
+							},
+							{
+								name : ' הוספת קו תחתון',
+								legend : 'לחץ ${underline}'
+							},
+							{
+								name : ' הוספת לינק',
+								legend : 'לחץ ${link}'
+							},
+							{
+								name : ' כיווץ סרגל הכלים',
+								legend : 'לחץ ${toolbarCollapse}'
+							},
+							{
+								name : ' הוראות נגישות',
+								legend : 'לחץ ${a11yHelp}'
+							}
+						]
+			}
+		]
+	}
+});
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/a11yhelp/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/a11yhelp/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/a11yhelp/plugin.js	(revision 5538)
@@ -17,5 +17,5 @@
 	{
 		// List of available localizations.
-		availableLangs : { en:1 },
+		availableLangs : { en:1, he:1 },
 
 		init : function( editor )
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/button/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/button/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/button/plugin.js	(revision 5538)
@@ -173,5 +173,5 @@
 
 		output.push(
-					'></span>' +
+					'>&nbsp;</span>' +
 					'<span id="', id, '_label" class="cke_label">', this.label, '</span>' );
 
@@ -181,5 +181,5 @@
 					'<span class="cke_buttonarrow">'
 					// BLACK DOWN-POINTING TRIANGLE
-					+ ( CKEDITOR.env.hc ? '&#9660;' : '' )
+					+ ( CKEDITOR.env.hc ? '&#9660;' : '&nbsp;' )
 					+ '</span>' );
 		}
@@ -271,2 +271,7 @@
 	this.add( name, CKEDITOR.UI_BUTTON, definition );
 };
+
+CKEDITOR.on( 'reset', function()
+	{
+		CKEDITOR.ui.button._.instances = [];
+	});
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/clipboard/dialogs/paste.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/clipboard/dialogs/paste.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/clipboard/dialogs/paste.js	(revision 5538)
@@ -12,16 +12,21 @@
 	{
 		var doc =  new CKEDITOR.dom.document( win.document ),
-			$ = doc.$;
+			docElement = doc.$;
 
 		doc.getById( "cke_actscrpt" ).remove();
 
 		CKEDITOR.env.ie ?
-			$.body.contentEditable = "true" :
-			$.designMode = "on";
-
-		CKEDITOR.env.ie && doc.getWindow().on( 'blur', function()
-		{
-			 $.body.contentEditable = "false";
-		} );
+			docElement.body.contentEditable = "true" :
+			docElement.designMode = "on";
+
+		// IE before version 8 will leave cursor blinking inside the document after
+		// editor blurred unless we clean up the selection. (#4716)
+		if ( CKEDITOR.env.ie && CKEDITOR.env.version < 8 )
+		{
+			doc.getWindow().on( 'blur', function()
+			{
+				docElement.selection.empty();
+			} );
+		}
 
 		doc.on( "keydown", function( e )
@@ -61,8 +66,12 @@
 			this.parts.dialog.$.offsetHeight;
 
-			var htmlToLoad = '<!doctype html><html><head><style>body { margin: 3px; height: 95%; } </style></head><body>' +
-							 '<script id="cke_actscrpt" type="text/javascript">' +
-							 'window.parent.CKEDITOR.tools.callFunction( ' + CKEDITOR.tools.addFunction( onPasteFrameLoad, this ) + ', this );' +
-							 '</script></body></html>';
+			var htmlToLoad =
+				'<html dir="' + editor.config.contentsLangDirection + '"' +
+				' lang="' + ( editor.config.contentsLanguage || editor.langCode ) + '">' +
+					'<head><style>body { margin: 3px; height: 95%; } </style></head><body>' +
+					'<script id="cke_actscrpt" type="text/javascript">' +
+					'window.parent.CKEDITOR.tools.callFunction( ' + CKEDITOR.tools.addFunction( onPasteFrameLoad, this ) + ', this );' +
+					'</script></body>' +
+				'</html>';
 
 			var iframe = CKEDITOR.dom.element.createFromHtml(
@@ -108,4 +117,23 @@
 			container.setHtml( '' );
 			container.append( iframe );
+
+			// IE need a redirect on focus to make
+			// the cursor blinking inside iframe. (#5461)
+			if ( CKEDITOR.env.ie )
+			{
+				var focusGrabber = CKEDITOR.dom.element.createFromHtml( '<span tabindex="-1" style="position:absolute;" role="presentation"></span>' );
+				focusGrabber.on( 'focus', function()
+				{
+					iframe.$.contentWindow.focus();
+				});
+				container.append( focusGrabber );
+
+				// Override focus handler on field.
+				field.focus = function()
+				{
+					focusGrabber.focus();
+					this.fire( 'focus' );
+				};
+			}
 
 			field.getInputElement = function(){ return iframe; };
@@ -166,6 +194,5 @@
 						focus : function()
 						{
-							var win = this.getInputElement().$.contentWindow,
-								 body = win && win.document.body;
+							var win = this.getInputElement().$.contentWindow;
 
 							// #3291 : JAWS needs the 500ms delay to detect that the editor iframe
@@ -174,6 +201,4 @@
 							setTimeout( function()
 							{
-								// Reactivate design mode for IE to make the cursor blinking.
-								CKEDITOR.env.ie && body && ( body.contentEditable = "true" );
 								win.focus();
 							}, 500 );
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/clipboard/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/clipboard/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/clipboard/plugin.js	(revision 5538)
@@ -69,4 +69,6 @@
 		exec : function( editor, data )
 		{
+			this.type == 'cut' && fixCut( editor );
+
 			var success = tryToCutCopy( editor, this.type );
 
@@ -183,5 +185,5 @@
 
 		// Create container to paste into
-		var pastebin = new CKEDITOR.dom.element( mode == 'text' ? 'textarea' : 'div', doc );
+		var pastebin = new CKEDITOR.dom.element( mode == 'text' ? 'textarea' : CKEDITOR.env.webkit ? 'body' : 'div', doc );
 		pastebin.setAttribute( 'id', 'cke_pastebin' );
 		// Safari requires a filler node inside the div to have the content pasted into it. (#4882)
@@ -189,10 +191,7 @@
 		doc.getBody().append( pastebin );
 
-		// It's definitely a better user experience if we make the paste-bin pretty unnoticed
-		// by pulling it off the screen.
 		pastebin.setStyles(
 			{
 				position : 'absolute',
-				left : '-1000px',
 				// Position the bin exactly at the position of the selected element
 				// to avoid any subsequent document scroll.
@@ -202,4 +201,8 @@
 				overflow : 'hidden'
 			});
+
+		// It's definitely a better user experience if we make the paste-bin pretty unnoticed
+		// by pulling it off the screen.
+		pastebin.setStyle( this.config.contentsLangDirection == 'ltr' ? 'left' : 'right', '-1000px' );
 
 		var bms = sel.createBookmarks();
@@ -249,4 +252,34 @@
 	}
 
+	// Cutting off control type element in IE standards breaks the selection entirely. (#4881)
+	function fixCut( editor )
+	{
+		if ( !CKEDITOR.env.ie || editor.document.$.compatMode == 'BackCompat' )
+			return;
+
+		var sel = editor.getSelection();
+		var control;
+		if( ( sel.getType() == CKEDITOR.SELECTION_ELEMENT ) && ( control = sel.getSelectedElement() ) )
+		{
+			var range = sel.getRanges()[ 0 ];
+			var dummy = editor.document.createText( '' );
+			dummy.insertBefore( control );
+			range.setStartBefore( dummy );
+			range.setEndAfter( control );
+			sel.selectRanges( [ range ] );
+
+			// Clear up the fix if the paste wasn't succeeded.
+			setTimeout( function()
+			{
+				// Element still online?
+				if ( control.getParent() )
+				{
+					dummy.remove();
+					sel.selectElement( control );
+				}
+			}, 0 );
+		}
+	}
+
 	// Register the plugin.
 	CKEDITOR.plugins.add( 'clipboard',
@@ -319,5 +352,5 @@
 						function( evt )
 						{
-							if ( depressBeforePasteEvent )
+							if ( depressBeforeEvent )
 								return;
 
@@ -335,4 +368,5 @@
 						});
 
+					body.on( 'beforecut', function() { !depressBeforeEvent && fixCut( editor ); } );
 				});
 
@@ -340,14 +374,14 @@
 				if ( editor.contextMenu )
 				{
-					var depressBeforePasteEvent;
+					var depressBeforeEvent;
 					function stateFromNamedCommand( command )
 					{
-						// IE Bug: queryCommandEnabled('paste') fires also 'beforepaste',
+						// IE Bug: queryCommandEnabled('paste') fires also 'beforepaste(copy/cut)',
 						// guard to distinguish from the ordinary sources( either
 						// keyboard paste or execCommand ) (#4874).
-						CKEDITOR.env.ie && command == 'Paste'&& ( depressBeforePasteEvent = 1 );
+						CKEDITOR.env.ie && ( depressBeforeEvent = 1 );
 
 						var retval = editor.document.$.queryCommandEnabled( command ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED;
-						depressBeforePasteEvent = 0;
+						depressBeforeEvent = 0;
 						return retval;
 					}
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/colorbutton/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/colorbutton/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/colorbutton/plugin.js	(revision 5538)
@@ -141,6 +141,7 @@
 				// The data can be only a color code (without #) or colorName + color code
 				// If only a color code is provided, then the colorName is the color with the hash
+				// Convert the color from RGB to RRGGBB for better compatibility with IE and <font>. See #5676
 				if (!parts[1])
-					colorName = '#' + colorName;
+					colorName = '#' + colorName.replace( /^(.)(.)(.)$/, '$1$1$2$2$3$3' );
 
 				var colorLabel = editor.lang.colors[ colorCode ] || colorCode;
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/colordialog/dialogs/colordialog.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/colordialog/dialogs/colordialog.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/colordialog/dialogs/colordialog.js	(revision 5538)
@@ -29,6 +29,6 @@
 		{
 			var color = new $el( event.data.getTarget() ).getAttribute( 'title' );
-			$doc.getById( 'hicolor' ).setStyle( 'background-color', color );
-			$doc.getById( 'hicolortext' ).setHtml( color );
+			$doc.getById( hicolorId ).setStyle( 'background-color', color );
+			$doc.getById( hicolorTextId ).setHtml( color );
 		};
 
@@ -98,5 +98,5 @@
 		function clear()
 		{
-			$doc.getById( 'selhicolor' ).removeStyle( 'background-color' );
+			$doc.getById( selHiColorId ).removeStyle( 'background-color' );
 			dialog.getContentElement( 'picker', 'selectedColor' ).setValue( '' );
 		}
@@ -104,7 +104,12 @@
 		var clearActual = $tools.addFunction( function()
 		{
-			$doc.getById( 'hicolor' ).removeStyle( 'background-color' );
-			$doc.getById( 'hicolortext' ).setHtml( '&nbsp;' );
+			$doc.getById( hicolorId ).removeStyle( 'background-color' );
+			$doc.getById( hicolorTextId ).setHtml( '&nbsp;' );
 		} );
+
+		var numbering = function( id ){ return id + CKEDITOR.tools.getNextNumber(); },
+			hicolorId = numbering( 'hicolor' ),
+			hicolorTextId = numbering( 'hicolortext' ),
+			selHiColorId = numbering( 'selhicolor' );
 
 		return {
@@ -150,8 +155,8 @@
 											type : 'html',
 											html : '<span>' + lang.highlight +'</span>\
-												<div id="hicolor" style="border: 1px solid; height: 74px; width: 74px;"></div>\
-												<div id="hicolortext">&nbsp;</div>\
+												<div id="' + hicolorId + '" style="border: 1px solid; height: 74px; width: 74px;"></div>\
+												<div id="' + hicolorTextId + '">&nbsp;</div>\
 												<span>' + lang.selected +'</span>\
-												<div id="selhicolor" style="border: 1px solid; height: 20px; width: 74px;"></div>'
+												<div id="' + selHiColorId + '" style="border: 1px solid; height: 20px; width: 74px;"></div>'
 										},
 										{
@@ -164,5 +169,5 @@
 												try
 												{
-													$doc.getById( 'selhicolor' ).setStyle( 'background-color', this.getValue() );
+													$doc.getById( selHiColorId ).setStyle( 'background-color', this.getValue() );
 												}
 												catch ( e )
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/contextmenu/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/contextmenu/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/contextmenu/plugin.js	(revision 5538)
@@ -168,5 +168,5 @@
 
 					if ( nativeContextMenuOnCtrl
-						 && ( evt.$.ctrlKey || evt.$.metaKey ) )
+						 && ( CKEDITOR.env.mac ? evt.$.metaKey : evt.$.ctrlKey ) )
 						return;
 
@@ -206,14 +206,7 @@
 					     // Safari on Windows always show 'ctrlKey' as true in 'contextmenu' event,
 						// which make this property unreliable. (#4826)
-					     ( CKEDITOR.env.webkit ? holdCtrlKey : domEvent.$.ctrlKey || domEvent.$.metaKey ) )
+					     ( CKEDITOR.env.webkit ? holdCtrlKey : ( CKEDITOR.env.mac ? domEvent.$.metaKey : domEvent.$.ctrlKey ) ) )
 						return;
 
-					// Selection will be unavailable after context menu shows up
-					// in IE, lock it now.
-					if ( CKEDITOR.env.ie )
-					{
-						var selection = this.editor.getSelection();
-						selection && selection.lock();
-					}
 
 					// Cancel the browser context menu.
@@ -237,5 +230,5 @@
 					onKeyDown = function( event )
 					{
-						holdCtrlKey = event.data.$.ctrlKey || event.data.$.metaKey;
+						holdCtrlKey = CKEDITOR.env.mac ? event.data.$.metaKey : event.data.$.ctrlKey ;
 					},
 					resetOnKeyUp = function()
@@ -258,4 +251,13 @@
 		{
 			this.editor.focus();
+
+			// Selection will be unavailable after context menu shows up
+			// in IE, lock it now.
+			if ( CKEDITOR.env.ie )
+			{
+				var selection = this.editor.getSelection();
+				selection && selection.lock();
+			}
+
 			this._.onMenu( offsetParent || CKEDITOR.document.getDocumentElement(), corner, offsetX || 0, offsetY || 0 );
 		}
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/dialog/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/dialog/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/dialog/plugin.js	(revision 5538)
@@ -249,4 +249,5 @@
 					if ( this.fire( 'cancel', { hide : true } ).hide !== false )
 						this.hide();
+					evt.data.preventDefault();
 				}, this );
 
@@ -313,5 +314,6 @@
 				return;
 
-			var keystroke = evt.data.getKeystroke();
+			var keystroke = evt.data.getKeystroke(),
+				rtl = editor.lang.dir == 'rtl';
 
 			processed = 0;
@@ -346,5 +348,5 @@
 			{
 				// Arrow keys - used for changing tabs.
-				nextId = ( keystroke == 37 ? getPreviousVisibleTab.call( me ) : getNextVisibleTab.call( me ) );
+				nextId = ( keystroke == ( rtl ? 39 : 37 ) ? getPreviousVisibleTab.call( me ) : getNextVisibleTab.call( me ) );
 				me.selectPage( nextId );
 				me._.tabs[ nextId ][ 0 ].focus();
@@ -382,9 +384,4 @@
 					dialogElement.on( 'keypress', focusKeyPressHandler, this );
 
-				if ( CKEDITOR.env.ie6Compat )
-				{
-					var coverDoc = coverElement.getChild( 0 ).getFrameDocument();
-					coverDoc.on( 'keydown', focusKeydownHandler, this, null, 0 );
-				}
 			} );
 		this.on( 'hide', function()
@@ -542,4 +539,10 @@
 	CKEDITOR.dialog.prototype =
 	{
+		destroy : function()
+		{
+			this.hide();
+			this._.element.remove();
+		},
+
 		/**
 		 * Resizes the dialog.
@@ -658,5 +661,5 @@
 				element.appendTo( CKEDITOR.document.getBody() );
 			else
-				return;
+				element.setStyle( 'display', 'block' );
 
 			// FIREFOX BUG: Fix vanishing caret for Firefox 2 or Gecko 1.8.
@@ -692,5 +695,5 @@
 				CKEDITOR.dialog._.currentTop = this;
 				this._.parentDialog = null;
-				addCover( this._.editor );
+				showCover( this._.editor );
 
 				element.on( 'keydown', accessKeyDownHandler );
@@ -796,21 +799,22 @@
 		hide : function()
 		{
+			if ( !this.parts.dialog.isVisible() )
+				return;
+
 			this.fire( 'hide', {} );
 			this._.editor.fire( 'dialogHide', this );
-
-			// Remove the dialog's element from the root document.
 			var element = this._.element;
-			if ( !element.getParent() )
-				return;
-
-			element.remove();
+			element.setStyle( 'display', 'none' );
 			this.parts.dialog.setStyle( 'visibility', 'hidden' );
-
 			// Unregister all access keys associated with this dialog.
 			unregisterAccessKey( this );
 
+			// Close any child(top) dialogs first.
+			while( CKEDITOR.dialog._.currentTop != this )
+				CKEDITOR.dialog._.currentTop.hide();
+
 			// Maintain dialog ordering and remove cover if needed.
 			if ( !this._.parentDialog )
-				removeCover();
+				hideCover();
 			else
 			{
@@ -845,5 +849,5 @@
 				CKEDITOR.dialog._.currentZIndex -= 10;
 
-
+			delete this._.parentDialog;
 			// Reset the initial values of the dialog.
 			this.foreach( function( contentObj ) { contentObj.resetInitValue && contentObj.resetInitValue(); } );
@@ -1578,5 +1582,5 @@
 			if ( CKEDITOR.env.ie6Compat )
 			{
-				var coverDoc = coverElement.getChild( 0 ).getFrameDocument();
+				var coverDoc = currentCover.getChild( 0 ).getFrameDocument();
 				coverDoc.removeListener( 'mousemove', mouseMoveHandler );
 				coverDoc.removeListener( 'mouseup', mouseUpHandler );
@@ -1596,5 +1600,5 @@
 				if ( CKEDITOR.env.ie6Compat )
 				{
-					var coverDoc = coverElement.getChild( 0 ).getFrameDocument();
+					var coverDoc = currentCover.getChild( 0 ).getFrameDocument();
 					coverDoc.on( 'mousemove', mouseMoveHandler );
 					coverDoc.on( 'mouseup', mouseUpHandler );
@@ -1654,5 +1658,5 @@
 			if ( CKEDITOR.env.ie6Compat )
 			{
-				var coverDoc = coverElement.getChild( 0 ).getFrameDocument();
+				var coverDoc = currentCover.getChild( 0 ).getFrameDocument();
 				coverDoc.on( 'mousemove', mouseMoveHandler, dialog, { part : partName } );
 				coverDoc.on( 'mouseup', mouseUpHandler, dialog, { part : partName } );
@@ -1725,5 +1729,5 @@
 			if ( CKEDITOR.env.ie6Compat )
 			{
-				var coverDoc = coverElement.getChild( 0 ).getFrameDocument();
+				var coverDoc = currentCover.getChild( 0 ).getFrameDocument();
 				coverDoc.removeListener( 'mouseup', mouseUpHandler );
 				coverDoc.removeListener( 'mousemove', mouseMoveHandler );
@@ -1749,22 +1753,30 @@
 
 	var resizeCover;
-	var coverElement;
-
-	var addCover = function( editor )
+	// Caching resuable covers and allowing only one cover
+	// on screen.
+	var covers = {},
+		currentCover;
+
+	function showCover( editor )
 	{
 		var win = CKEDITOR.document.getWindow();
+		var backgroundColorStyle = editor.config.dialog_backgroundCoverColor || 'white',
+			backgroundCoverOpacity = editor.config.dialog_backgroundCoverOpacity,
+			baseFloatZIndex = editor.config.baseFloatZIndex,
+			coverKey = CKEDITOR.tools.genKey(
+					backgroundColorStyle,
+					backgroundCoverOpacity,
+					baseFloatZIndex ),
+			coverElement = covers[ coverKey ];
 
 		if ( !coverElement )
 		{
-			var backgroundColorStyle = editor.config.dialog_backgroundCoverColor || 'white';
-
 			var html = [
 					'<div style="position: ', ( CKEDITOR.env.ie6Compat ? 'absolute' : 'fixed' ),
-					'; z-index: ', editor.config.baseFloatZIndex,
+					'; z-index: ', baseFloatZIndex,
 					'; top: 0px; left: 0px; ',
 					( !CKEDITOR.env.ie6Compat ? 'background-color: ' + backgroundColorStyle : '' ),
-					'" id="cke_dialog_background_cover">'
+					'" class="cke_dialog_background_cover">'
 				];
-
 
 			if ( CKEDITOR.env.ie6Compat )
@@ -1803,12 +1815,17 @@
 
 			coverElement = CKEDITOR.dom.element.createFromHtml( html.join( '' ) );
-		}
-
-		var element = coverElement;
-
+			coverElement.setOpacity( backgroundCoverOpacity != undefined ? backgroundCoverOpacity : 0.5 );
+
+			coverElement.appendTo( CKEDITOR.document.getBody() );
+			covers[ coverKey ] = coverElement;
+		}
+		else
+			coverElement.	show();
+
+		currentCover = coverElement;
 		var resizeFunc = function()
 		{
 			var size = win.getViewPaneSize();
-			element.setStyles(
+			coverElement.setStyles(
 				{
 					width : size.width + 'px',
@@ -1821,5 +1838,5 @@
 			var pos = win.getScrollPosition(),
 				cursor = CKEDITOR.dialog._.currentTop;
-			element.setStyles(
+			coverElement.setStyles(
 					{
 						left : pos.x + 'px',
@@ -1853,18 +1870,13 @@
 			scrollFunc();
 		}
-
-		var opacity = editor.config.dialog_backgroundCoverOpacity;
-		element.setOpacity( typeof opacity != 'undefined' ? opacity : 0.5 );
-
-		element.appendTo( CKEDITOR.document.getBody() );
-	};
-
-	var removeCover = function()
-	{
-		if ( !coverElement )
+	}
+
+	function hideCover()
+	{
+		if ( !currentCover )
 			return;
 
 		var win = CKEDITOR.document.getWindow();
-		coverElement.remove();
+		currentCover.hide();
 		win.removeListener( 'resize', resizeCover );
 
@@ -1878,5 +1890,12 @@
 		}
 		resizeCover = null;
-	};
+	}
+
+	function removeCovers()
+	{
+		for ( var coverId in covers )
+			covers[ coverId ].remove();
+		covers = {};
+	}
 
 	var accessKeyProcessors = {};
@@ -2658,5 +2677,5 @@
 		canUndo: false,
 
-		editorFocus : CKEDITOR.env.ie
+		editorFocus : CKEDITOR.env.ie || CKEDITOR.env.webkit
 	};
 
@@ -2778,4 +2797,22 @@
 			}
 		};
+
+	CKEDITOR.on( 'instanceDestroyed', function( evt )
+	{
+		// Remove dialog cover on last instance destroy.
+		if ( CKEDITOR.tools.isEmpty( CKEDITOR.instances ) )
+		{
+			var currentTopDialog;
+			while ( ( currentTopDialog = CKEDITOR.dialog._.currentTop ) )
+				currentTopDialog.hide();
+			removeCovers();
+		}
+
+		var dialogs = evt.editor._.storedDialogs;
+		for ( var name in dialogs )
+			dialogs[ name ].destroy();
+
+	});
+
 	})();
 })();
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/dialogui/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/dialogui/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/dialogui/plugin.js	(revision 5538)
@@ -88,5 +88,12 @@
 					dialog.on( 'load', function()
 						{
-							this.getInputElement().on( 'change', function(){ this.fire( 'change', { value : this.getValue() } ); }, this );
+							this.getInputElement().on( 'change', function()
+							{
+								// Make sure 'onchange' doesn't get fired after dialog closed. (#5719)
+								if ( !dialog.parts.dialog.isVisible() )
+									return;
+
+								this.fire( 'change', { value : this.getValue() } );
+							}, this );
 						}, this );
 					this._.domOnChangeRegistered = true;
@@ -508,5 +515,5 @@
 							element.on( 'keydown', function( evt )
 								{
-									if ( evt.data.getKeystroke() in { 32:1, 13:1 } )
+									if ( evt.data.getKeystroke() in { 32:1 } )
 									{
 										me.click();
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/elementspath/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/elementspath/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/elementspath/plugin.js	(revision 5538)
@@ -169,7 +169,8 @@
 		ev = new CKEDITOR.dom.event( ev );
 
+		var rtl = editor.lang.dir == 'rtl';
 		switch ( ev.getKeystroke() )
 		{
-			case 37 :					// LEFT-ARROW
+			case rtl ? 39 : 37 :					// LEFT-ARROW
 			case 9 :					// TAB
 				element = CKEDITOR.document.getById( idBase + ( elementIndex + 1 ) );
@@ -179,5 +180,5 @@
 				return false;
 
-			case 39 :					// RIGHT-ARROW
+			case rtl ? 37 : 39 :					// RIGHT-ARROW
 			case CKEDITOR.SHIFT + 9 :	// SHIFT + TAB
 				element = CKEDITOR.document.getById( idBase + ( elementIndex - 1 ) );
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/enterkey/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/enterkey/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/enterkey/plugin.js	(revision 5538)
@@ -33,5 +33,5 @@
 						block = path.block;
 
-				if ( block.is( 'li' ) || block.getParent().is( 'li' ) )
+				if ( block && ( block.is( 'li' ) || block.getParent().is( 'li' ) ) )
 				{
 					editor.execCommand( 'outdent' );
@@ -101,6 +101,5 @@
 					// a Shift+Enter (#77). Create a new block element instead
 					// (later in the code).
-					if ( previousBlock.is( 'li' ) ||
-						 !( forceMode || headerTagRegex.test( previousBlock.getName() ) ) )
+					if ( previousBlock.is( 'li' ) || !headerTagRegex.test( previousBlock.getName() ) )
 					{
 						// Otherwise, duplicate the previous block.
@@ -113,4 +112,7 @@
 				if ( !newBlock )
 					newBlock = doc.createElement( blockTag );
+				// Force the enter block unless we're talking of a list item.
+				else if ( forceMode && !newBlock.is( 'li' ) )
+					newBlock.renameNode( blockTag );
 
 				// Recreate the inline elements tree, which was available
@@ -292,7 +294,19 @@
 	function shiftEnter( editor )
 	{
-		// On SHIFT+ENTER we want to enforce the mode to be respected, instead
+		// Only effective within document.
+		if ( editor.mode != 'wysiwyg' )
+			return false;
+
+		// On SHIFT+ENTER:
+		// 1. We want to enforce the mode to be respected, instead
 		// of cloning the current block. (#77)
-		return enter( editor, editor.config.shiftEnterMode, true );
+		// 2. Always perform a block break when inside <pre> (#5402).
+		if ( editor.getSelection().getStartElement().hasAscendant( 'pre', true ) )
+		{
+			setTimeout( function() { enterBlock( editor, editor.config.enterMode, null, true ); }, 0 );
+			return true;
+		}
+		else
+			return enter( editor, editor.config.shiftEnterMode, true );
 	}
 
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/fakeobjects/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/fakeobjects/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/fakeobjects/plugin.js	(revision 5538)
@@ -71,5 +71,6 @@
 		_cke_realelement : encodeURIComponent( realElement.getOuterHtml() ),
 		_cke_real_node_type : realElement.type,
-		alt : lang[ realElementType ] || lang.unknown
+		alt : lang[ realElementType ] || lang.unknown,
+		align : realElement.getAttribute( 'align' ) || ''
 	};
 
@@ -98,5 +99,6 @@
 		_cke_realelement : encodeURIComponent( html ),
 		_cke_real_node_type : realElement.type,
-		alt : lang[ realElementType ] || lang.unknown
+		alt : lang[ realElementType ] || lang.unknown,
+		align : realElement.attributes.align || ''
 	};
 
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/flash/dialogs/flash.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/flash/dialogs/flash.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/flash/dialogs/flash.js	(revision 5538)
@@ -176,6 +176,6 @@
 		var previewPreloader,
 			previewAreaHtml = '<div>' + CKEDITOR.tools.htmlEncode( editor.lang.common.preview ) +'<br>' +
-			'<div id="FlashPreviewLoader" style="display:none"><div class="loading">&nbsp;</div></div>' +
-			'<div id="FlashPreviewBox"></div></div>';
+			'<div id="FlashPreviewLoader' + CKEDITOR.tools.getNextNumber() + '" style="display:none"><div class="loading">&nbsp;</div></div>' +
+			'<div id="FlashPreviewBox' + CKEDITOR.tools.getNextNumber() + '" class="FlashPreviewBox"></div></div>';
 
 		return {
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/format/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/format/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/format/plugin.js	(revision 5538)
@@ -22,4 +22,5 @@
 			var tag = tags[ i ];
 			styles[ tag ] = new CKEDITOR.style( config[ 'format_' + tag ] );
+			styles[ tag ]._.enterMode = editor.config.enterMode;
 		}
 
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/image/dialogs/image.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/image/dialogs/image.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/image/dialogs/image.js	(revision 5538)
@@ -6,200 +6,205 @@
 (function()
 {
-	// Load image preview.
-	var IMAGE = 1,
-		LINK = 2,
-		PREVIEW = 4,
-		CLEANUP = 8,
-		regexGetSize = /^\s*(\d+)((px)|\%)?\s*$/i,
-		regexGetSizeOrEmpty = /(^\s*(\d+)((px)|\%)?\s*$)|^$/i,
-		pxLengthRegex = /^\d+px$/;
-
-	var onSizeChange = function()
+	var imageDialog = function( editor, dialogType )
 	{
-		var value = this.getValue(),	// This = input element.
-			dialog = this.getDialog(),
-			aMatch  =  value.match( regexGetSize );	// Check value
-		if ( aMatch )
+		// Load image preview.
+		var IMAGE = 1,
+			LINK = 2,
+			PREVIEW = 4,
+			CLEANUP = 8,
+			regexGetSize = /^\s*(\d+)((px)|\%)?\s*$/i,
+			regexGetSizeOrEmpty = /(^\s*(\d+)((px)|\%)?\s*$)|^$/i,
+			pxLengthRegex = /^\d+px$/;
+
+		var onSizeChange = function()
 		{
-			if ( aMatch[2] == '%' )			// % is allowed - > unlock ratio.
-				switchLockRatio( dialog, false );	// Unlock.
-			value = aMatch[1];
+			var value = this.getValue(),	// This = input element.
+				dialog = this.getDialog(),
+				aMatch  =  value.match( regexGetSize );	// Check value
+			if ( aMatch )
+			{
+				if ( aMatch[2] == '%' )			// % is allowed - > unlock ratio.
+					switchLockRatio( dialog, false );	// Unlock.
+				value = aMatch[1];
+			}
+
+			// Only if ratio is locked
+			if ( dialog.lockRatio )
+			{
+				var oImageOriginal = dialog.originalElement;
+				if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' )
+				{
+					if ( this.id == 'txtHeight' )
+					{
+						if ( value && value != '0' )
+							value = Math.round( oImageOriginal.$.width * ( value  / oImageOriginal.$.height ) );
+						if ( !isNaN( value ) )
+							dialog.setValueOf( 'info', 'txtWidth', value );
+					}
+					else		//this.id = txtWidth.
+					{
+						if ( value && value != '0' )
+							value = Math.round( oImageOriginal.$.height * ( value  / oImageOriginal.$.width ) );
+						if ( !isNaN( value ) )
+							dialog.setValueOf( 'info', 'txtHeight', value );
+					}
+				}
+			}
+			updatePreview( dialog );
+		};
+
+		var updatePreview = function( dialog )
+		{
+			//Don't load before onShow.
+			if ( !dialog.originalElement || !dialog.preview )
+				return 1;
+
+			// Read attributes and update imagePreview;
+			dialog.commitContent( PREVIEW, dialog.preview );
+			return 0;
+		};
+
+		// Custom commit dialog logic, where we're intended to give inline style
+		// field (txtdlgGenStyle) higher priority to avoid overwriting styles contribute
+		// by other fields.
+		function commitContent()
+		{
+			var args = arguments;
+			var inlineStyleField = this.getContentElement( 'advanced', 'txtdlgGenStyle' );
+			inlineStyleField && inlineStyleField.commit.apply( inlineStyleField, args );
+
+			this.foreach( function( widget )
+			{
+				if ( widget.commit &&  widget.id != 'txtdlgGenStyle' )
+					widget.commit.apply( widget, args );
+			});
 		}
 
-		// Only if ratio is locked
-		if ( dialog.lockRatio )
+		// Avoid recursions.
+		var incommit;
+
+		// Synchronous field values to other impacted fields is required, e.g. border
+		// size change should alter inline-style text as well.
+		function commitInternally( targetFields )
+		{
+			if ( incommit )
+				return;
+
+			incommit = 1;
+
+			var dialog = this.getDialog(),
+				element = dialog.imageElement;
+			if ( element )
+			{
+				// Commit this field and broadcast to target fields.
+				this.commit( IMAGE, element );
+
+				targetFields = [].concat( targetFields );
+				var length = targetFields.length,
+					field;
+				for ( var i = 0; i < length; i++ )
+				{
+					field = dialog.getContentElement.apply( dialog, targetFields[ i ].split( ':' ) );
+					// May cause recursion.
+					field && field.setup( IMAGE, element );
+				}
+			}
+
+			incommit = 0;
+		}
+
+		var switchLockRatio = function( dialog, value )
+		{
+			var oImageOriginal = dialog.originalElement;
+
+			// Dialog may already closed. (#5505)
+			if( !oImageOriginal )
+				return null;
+
+			var ratioButton = CKEDITOR.document.getById( btnLockSizesId );
+
+			if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' )
+			{
+				if ( value == 'check' )			// Check image ratio and original image ratio.
+				{
+					var width = dialog.getValueOf( 'info', 'txtWidth' ),
+						height = dialog.getValueOf( 'info', 'txtHeight' ),
+						originalRatio = oImageOriginal.$.width * 1000 / oImageOriginal.$.height,
+						thisRatio = width * 1000 / height;
+					dialog.lockRatio  = false;		// Default: unlock ratio
+
+					if ( !width && !height )
+						dialog.lockRatio = true;
+					else if ( !isNaN( originalRatio ) && !isNaN( thisRatio ) )
+					{
+						if ( Math.round( originalRatio ) == Math.round( thisRatio ) )
+							dialog.lockRatio = true;
+					}
+				}
+				else if ( value != undefined )
+					dialog.lockRatio = value;
+				else
+					dialog.lockRatio = !dialog.lockRatio;
+			}
+			else if ( value != 'check' )		// I can't lock ratio if ratio is unknown.
+				dialog.lockRatio = false;
+
+			if ( dialog.lockRatio )
+				ratioButton.removeClass( 'cke_btn_unlocked' );
+			else
+				ratioButton.addClass( 'cke_btn_unlocked' );
+
+			var lang = dialog._.editor.lang.image,
+				label =  lang[  dialog.lockRatio ? 'unlockRatio' : 'lockRatio' ];
+
+			ratioButton.setAttribute( 'title', label );
+			ratioButton.getFirst().setText( label );
+
+			return dialog.lockRatio;
+		};
+
+		var resetSize = function( dialog )
 		{
 			var oImageOriginal = dialog.originalElement;
 			if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' )
 			{
-				if ( this.id == 'txtHeight' )
-				{
-					if ( value && value != '0' )
-						value = Math.round( oImageOriginal.$.width * ( value  / oImageOriginal.$.height ) );
-					if ( !isNaN( value ) )
-						dialog.setValueOf( 'info', 'txtWidth', value );
+				dialog.setValueOf( 'info', 'txtWidth', oImageOriginal.$.width );
+				dialog.setValueOf( 'info', 'txtHeight', oImageOriginal.$.height );
+			}
+			updatePreview( dialog );
+		};
+
+		var setupDimension = function( type, element )
+		{
+			if ( type != IMAGE )
+				return;
+
+			function checkDimension( size, defaultValue )
+			{
+				var aMatch  =  size.match( regexGetSize );
+				if ( aMatch )
+				{
+					if ( aMatch[2] == '%' )				// % is allowed.
+					{
+						aMatch[1] += '%';
+						switchLockRatio( dialog, false );	// Unlock ratio
+					}
+					return aMatch[1];
 				}
-				else		//this.id = txtWidth.
-				{
-					if ( value && value != '0' )
-						value = Math.round( oImageOriginal.$.height * ( value  / oImageOriginal.$.width ) );
-					if ( !isNaN( value ) )
-						dialog.setValueOf( 'info', 'txtHeight', value );
-				}
+				return defaultValue;
 			}
-		}
-		updatePreview( dialog );
-	};
-
-	var updatePreview = function( dialog )
-	{
-		//Don't load before onShow.
-		if ( !dialog.originalElement || !dialog.preview )
-			return 1;
-
-		// Read attributes and update imagePreview;
-		dialog.commitContent( PREVIEW, dialog.preview );
-		return 0;
-	};
-
-	// Custom commit dialog logic, where we're intended to give inline style
-	// field (txtdlgGenStyle) higher priority to avoid overwriting styles contribute
-	// by other fields.
-	function commitContent()
-	{
-		var args = arguments;
-		var inlineStyleField = this.getContentElement( 'advanced', 'txtdlgGenStyle' );
-		inlineStyleField && inlineStyleField.commit.apply( inlineStyleField, args );
-
-		this.foreach( function( widget )
-		{
-			if ( widget.commit &&  widget.id != 'txtdlgGenStyle' )
-				widget.commit.apply( widget, args );
-		});
-	}
-
-	// Avoid recursions.
-	var incommit;
-
-	// Synchronous field values to other impacted fields is required, e.g. border
-	// size change should alter inline-style text as well.
-	function commitInternally( targetFields )
-	{
-		if ( incommit )
-			return;
-
-		incommit = 1;
-
-		var dialog = this.getDialog(),
-			element = dialog.imageElement;
-		if ( element )
-		{
-			// Commit this field and broadcast to target fields.
-			this.commit( IMAGE, element );
-
-			targetFields = [].concat( targetFields );
-			var length = targetFields.length,
-				field;
-			for ( var i = 0; i < length; i++ )
-			{
-				field = dialog.getContentElement.apply( dialog, targetFields[ i ].split( ':' ) );
-				// May cause recursion.
-				field && field.setup( IMAGE, element );
-			}
-		}
-
-		incommit = 0;
-	}
-
-	var switchLockRatio = function( dialog, value )
-	{
-		var oImageOriginal = dialog.originalElement,
-			ratioButton = CKEDITOR.document.getById( 'btnLockSizes' );
-
-		if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' )
-		{
-			if ( value == 'check' )			// Check image ratio and original image ratio.
-			{
-				var width = dialog.getValueOf( 'info', 'txtWidth' ),
-					height = dialog.getValueOf( 'info', 'txtHeight' ),
-					originalRatio = oImageOriginal.$.width * 1000 / oImageOriginal.$.height,
-					thisRatio = width * 1000 / height;
-				dialog.lockRatio  = false;		// Default: unlock ratio
-
-				if ( !width && !height )
-					dialog.lockRatio = true;
-				else if ( !isNaN( originalRatio ) && !isNaN( thisRatio ) )
-				{
-					if ( Math.round( originalRatio ) == Math.round( thisRatio ) )
-						dialog.lockRatio = true;
-				}
-			}
-			else if ( value != undefined )
-				dialog.lockRatio = value;
-			else
-				dialog.lockRatio = !dialog.lockRatio;
-		}
-		else if ( value != 'check' )		// I can't lock ratio if ratio is unknown.
-			dialog.lockRatio = false;
-
-		if ( dialog.lockRatio )
-			ratioButton.removeClass( 'cke_btn_unlocked' );
-		else
-			ratioButton.addClass( 'cke_btn_unlocked' );
-
-		var lang = dialog._.editor.lang.image,
-			label =  lang[  dialog.lockRatio ? 'unlockRatio' : 'lockRatio' ];
-
-		ratioButton.setAttribute( 'title', label );
-		ratioButton.getFirst().setText( label );
-
-		return dialog.lockRatio;
-	};
-
-	var resetSize = function( dialog )
-	{
-		var oImageOriginal = dialog.originalElement;
-		if ( oImageOriginal.getCustomData( 'isReady' ) == 'true' )
-		{
-			dialog.setValueOf( 'info', 'txtWidth', oImageOriginal.$.width );
-			dialog.setValueOf( 'info', 'txtHeight', oImageOriginal.$.height );
-		}
-		updatePreview( dialog );
-	};
-
-	var setupDimension = function( type, element )
-	{
-		if ( type != IMAGE )
-			return;
-
-		function checkDimension( size, defaultValue )
-		{
-			var aMatch  =  size.match( regexGetSize );
-			if ( aMatch )
-			{
-				if ( aMatch[2] == '%' )				// % is allowed.
-				{
-					aMatch[1] += '%';
-					switchLockRatio( dialog, false );	// Unlock ratio
-				}
-				return aMatch[1];
-			}
-			return defaultValue;
-		}
-
-		var dialog = this.getDialog(),
-			value = '',
-			dimension = (( this.id == 'txtWidth' )? 'width' : 'height' ),
-			size = element.getAttribute( dimension );
-
-		if ( size )
-			value = checkDimension( size, value );
-		value = checkDimension( element.getStyle( dimension ), value );
-
-		this.setValue( value );
-	};
-
-	var imageDialog = function( editor, dialogType )
-	{
+
+			var dialog = this.getDialog(),
+				value = '',
+				dimension = (( this.id == 'txtWidth' )? 'width' : 'height' ),
+				size = element.getAttribute( dimension );
+
+			if ( size )
+				value = checkDimension( size, value );
+			value = checkDimension( element.getStyle( dimension ), value );
+
+			this.setValue( value );
+		};
+
 		var previewPreloader;
 
@@ -214,5 +219,5 @@
 
 			// Hide loader
-			CKEDITOR.document.getById( 'ImagePreviewLoader' ).setStyle( 'display', 'none' );
+			CKEDITOR.document.getById( imagePreviewLoaderId ).setStyle( 'display', 'none' );
 
 			// New image -> new domensions
@@ -242,7 +247,16 @@
 
 			// Hide loader
-			CKEDITOR.document.getById( 'ImagePreviewLoader' ).setStyle( 'display', 'none' );
+			CKEDITOR.document.getById( imagePreviewLoaderId ).setStyle( 'display', 'none' );
 			switchLockRatio( this, false );	// Unlock.
 		};
+
+		var numbering = function( id ){ return id + CKEDITOR.tools.getNextNumber(); },
+			btnLockSizesId = numbering( 'btnLockSizes' ),
+			btnResetSizeId = numbering( 'btnResetSize' ),
+			imagePreviewLoaderId = numbering( 'ImagePreviewLoader' ),
+			imagePreviewBoxId = numbering( 'ImagePreviewBox' ),
+			previewLinkId = numbering( 'previewLink' ),
+			previewImageId = numbering( 'previewImage' );
+
 		return {
 			title : ( dialogType == 'image' ) ? editor.lang.image.title : editor.lang.image.titleButton,
@@ -269,8 +283,8 @@
 
 				//Hide loader.
-				CKEDITOR.document.getById( 'ImagePreviewLoader' ).setStyle( 'display', 'none' );
+				CKEDITOR.document.getById( imagePreviewLoaderId ).setStyle( 'display', 'none' );
 				// Create the preview before setup the dialog contents.
 				previewPreloader = new CKEDITOR.dom.element( 'img', editor.document );
-				this.preview = CKEDITOR.document.getById( 'previewImage' );
+				this.preview = CKEDITOR.document.getById( previewImageId );
 
 				// Copy of the image
@@ -433,6 +447,6 @@
 					this.hidePage( 'Link' );		//Hide Link tab.
 				var doc = this._.element.getDocument();
-				this.addFocusable( doc.getById( 'btnResetSize' ), 5 );
-				this.addFocusable( doc.getById( 'btnLockSizes' ), 5 );
+				this.addFocusable( doc.getById( btnResetSizeId ), 5 );
+				this.addFocusable( doc.getById( btnLockSizesId ), 5 );
 
 				this.commitContent = commitContent;
@@ -492,5 +506,5 @@
 													original.setCustomData( 'isReady', 'false' );
 													// Show loader
-													var loader = CKEDITOR.document.getById( 'ImagePreviewLoader' );
+													var loader = CKEDITOR.document.getById( imagePreviewLoaderId );
 													if ( loader )
 														loader.setStyle( 'display', '' );
@@ -719,6 +733,6 @@
 													{
 														// Activate Reset button
-														var	resetButton = CKEDITOR.document.getById( 'btnResetSize' ),
-															ratioButton = CKEDITOR.document.getById( 'btnLockSizes' );
+														var	resetButton = CKEDITOR.document.getById( btnResetSizeId ),
+															ratioButton = CKEDITOR.document.getById( btnLockSizesId );
 														if ( resetButton )
 														{
@@ -769,7 +783,7 @@
 													html : '<div>'+
 														'<a href="javascript:void(0)" tabindex="-1" title="' + editor.lang.image.unlockRatio +
-														'" class="cke_btn_locked" id="btnLockSizes" role="button"><span class="cke_label">' + editor.lang.image.unlockRatio + '</span></a>' +
+														'" class="cke_btn_locked" id="' + btnLockSizesId + '" role="button"><span class="cke_label">' + editor.lang.image.unlockRatio + '</span></a>' +
 														'<a href="javascript:void(0)" tabindex="-1" title="' + editor.lang.image.resetSize +
-														'" class="cke_btn_reset" id="btnResetSize" role="button"><span class="cke_label">' + editor.lang.image.resetSize + '</span></a>'+
+														'" class="cke_btn_reset" id="' + btnResetSizeId + '" role="button"><span class="cke_label">' + editor.lang.image.resetSize + '</span></a>'+
 														'</div>'
 												}
@@ -1051,8 +1065,8 @@
 											style : 'width:95%;',
 											html : '<div>' + CKEDITOR.tools.htmlEncode( editor.lang.common.preview ) +'<br>'+
-											'<div id="ImagePreviewLoader" style="display:none"><div class="loading">&nbsp;</div></div>'+
-											'<div id="ImagePreviewBox"><table><tr><td>'+
-											'<a href="javascript:void(0)" target="_blank" onclick="return false;" id="previewLink">'+
-											'<img id="previewImage" alt="" /></a>' +
+											'<div id="' + imagePreviewLoaderId + '" class="ImagePreviewLoader" style="display:none"><div class="loading">&nbsp;</div></div>'+
+											'<div id="' + imagePreviewBoxId + '" class="ImagePreviewBox"><table><tr><td>'+
+											'<a href="javascript:void(0)" target="_blank" onclick="return false;" id="' + previewLinkId + '">'+
+											'<img id="' + previewImageId + '" alt="" /></a>' +
 											( editor.config.image_previewText ||
 											'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. '+
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/indent/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/indent/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/indent/plugin.js	(revision 5538)
@@ -11,4 +11,7 @@
 {
 	var listNodeNames = { ol : 1, ul : 1 };
+
+	var isNotWhitespaces = CKEDITOR.dom.walker.whitespaces( true ),
+		isNotBookmark = CKEDITOR.dom.walker.bookmark( false, true );
 
 	function setState( editor, state )
@@ -188,4 +191,9 @@
 					   followingList.getName() in listNodeNames )
 				{
+					// IE requires a filler NBSP for nested list inside empty list item,
+					// otherwise the list item will be inaccessiable. (#4476)
+					if ( CKEDITOR.env.ie && !li.getFirst( function( node ){ return isNotWhitespaces( node ) && isNotBookmark( node ); } ) )
+						li.append( range.document.createText( '\u00a0' ) );
+
 					li.append( followingList );
 				}
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/link/dialogs/link.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/link/dialogs/link.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/link/dialogs/link.js	(revision 5538)
@@ -412,11 +412,11 @@
 										label : editor.lang.common.protocol,
 										'default' : 'http://',
-										style : 'width : 100%;',
 										items :
 										[
-											[ 'http://' ],
-											[ 'https://' ],
-											[ 'ftp://' ],
-											[ 'news://' ],
+											// Force 'ltr' for protocol names in BIDI. (#5433)
+											[ 'http://\u200E', 'http://' ],
+											[ 'https://\u200E', 'https://' ],
+											[ 'ftp://\u200E', 'ftp://' ],
+											[ 'news://\u200E', 'news://' ],
 											[ editor.lang.link.other , '' ]
 										],
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/list/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/list/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/list/plugin.js	(revision 5538)
@@ -235,4 +235,6 @@
 	}
 
+	var headerTagRegex = /^h[1-6]$/;
+
 	function createList( editor, groupObj, listsCreated )
 	{
@@ -286,6 +288,15 @@
 			var contentBlock = listContents.shift(),
 				listItem = doc.createElement( 'li' );
-			contentBlock.moveChildren( listItem );
-			contentBlock.remove();
+
+			// Preserve heading structure when converting to list item. (#5271)
+			if ( headerTagRegex.test( contentBlock.getName() ) )
+				contentBlock.appendTo( listItem );
+			else
+			{
+				contentBlock.copyAttributes( listItem );
+				contentBlock.moveChildren( listItem );
+				contentBlock.remove();
+			}
+
 			listItem.appendTo( listNode );
 
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/liststyle/dialogs/liststyle.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/liststyle/dialogs/liststyle.js	(revision 5538)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/liststyle/dialogs/liststyle.js	(revision 5538)
@@ -0,0 +1,189 @@
+﻿/*
+ * Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+(function()
+{
+	function getListElement( editor, listTag )
+	{
+		var range;
+		try { range  = editor.getSelection().getRanges()[ 0 ]; }
+		catch( e ) { return null; }
+
+		range.shrink( CKEDITOR.SHRINK_TEXT );
+		return range.getCommonAncestor().getAscendant( listTag, true );
+	}
+
+	var mapListStyle = {
+		'a' : 'lower-alpha',
+		'A' : 'upper-alpha',
+		'i' : 'lower-roman',
+		'I' : 'upper-roman',
+		'1' : 'decimal',
+		'disc' : 'disc',
+		'circle': 'circle',
+		'square' : 'square'
+	};
+
+	function listStyle( editor, startupPage )
+	{
+		if ( startupPage == 'bulletedListStyle' )
+		{
+			return {
+				title : editor.lang.list.bulletedTitle,
+				minWidth : 300,
+				minHeight : 50,
+				contents :
+				[
+					{
+						elements :
+						[
+							{
+								type : 'select',
+								label : editor.lang.list.type,
+								id : 'type',
+								style : 'width: 150px; margin: auto;',
+								items :
+								[
+									[ editor.lang.list.notset, '' ],
+									[ editor.lang.list.circle, 'circle' ],
+									[ editor.lang.list.disc,  'disc' ],
+									[ editor.lang.list.square, 'square' ]
+								],
+								setup : function( element )
+								{
+									var value = element.getStyle( 'list-style-type' )
+												|| mapListStyle[ element.getAttribute( 'type' ) ]
+												|| element.getAttribute( 'type' )
+												|| '';
+
+									this.setValue( value );
+								},
+								commit : function( element )
+								{
+									var value = this.getValue();
+									if ( value )
+										element.setStyle( 'list-style-type', value );
+									else
+										element.removeStyle( 'list-style-type' );
+								}
+							}
+						]
+					}
+				],
+				onShow: function()
+				{
+					var editor = this.getParentEditor(),
+						element = getListElement( editor, 'ul' );
+
+					element && this.setupContent( element );
+				},
+				onOk: function()
+				{
+					var editor = this.getParentEditor(),
+						element = getListElement( editor, 'ul' );
+
+					element && this.commitContent( element );
+				}
+			};
+		}
+		else if ( startupPage == 'numberedListStyle'  )
+		{
+			return {
+				title : editor.lang.list.numberedTitle,
+				minWidth : 300,
+				minHeight : 50,
+				contents :
+				[
+					{
+						elements :
+						[
+							{
+								type : 'hbox',
+								widths : [ '25%', '75%' ],
+								children :
+								[
+									{
+										label : editor.lang.list.start,
+										type : 'text',
+										id : 'start',
+										setup : function( element )
+										{
+											var value = element.getAttribute( 'start' ) || 1;
+											value && this.setValue( value );
+										},
+										commit : function( element )
+										{
+											element.setAttribute( 'start', this.getValue() );
+										}
+									},
+									{
+										type : 'select',
+										label : editor.lang.list.type,
+										id : 'type',
+										style : 'width: 100%;',
+										items :
+										[
+											[ editor.lang.list.notset, '' ],
+											[ editor.lang.list.armenian, 'armenian' ],
+											[ editor.lang.list.georgian, 'georgian' ],
+											[ editor.lang.list.lowerRoman, 'lower-roman' ],
+											[ editor.lang.list.upperRoman, 'upper-roman' ],
+											[ editor.lang.list.lowerAlpha, 'lower-alpha' ],
+											[ editor.lang.list.upperAlpha, 'upper-alpha' ],
+											[ editor.lang.list.lowerGreek, 'lower-greek' ],
+											[ editor.lang.list.decimal, 'decimal' ],
+											[ editor.lang.list.decimalLeadingZero, 'decimal-leading-zero' ]
+										],
+										setup : function( element )
+										{
+											var value = element.getStyle( 'list-style-type' )
+												|| mapListStyle[ element.getAttribute( 'type' ) ]
+												|| element.getAttribute( 'type' )
+												|| '';
+
+											this.setValue( value );
+										},
+										commit : function( element )
+										{
+											var value = this.getValue();
+											if ( value )
+												element.setStyle( 'list-style-type', value );
+											else
+												element.removeStyle( 'list-style-type' );
+										}
+									}
+								]
+							}
+						]
+					}
+				],
+				onShow: function()
+				{
+					var editor = this.getParentEditor(),
+						element = getListElement( editor, 'ol' );
+
+					element && this.setupContent( element );
+				},
+				onOk: function()
+				{
+					var editor = this.getParentEditor(),
+						element = getListElement( editor, 'ol' );
+
+					element && this.commitContent( element );
+				}
+			};
+		}
+	}
+
+	CKEDITOR.dialog.add( 'numberedListStyle', function( editor )
+		{
+			return listStyle( editor, 'numberedListStyle' );
+		});
+
+	CKEDITOR.dialog.add( 'bulletedListStyle', function( editor )
+		{
+			return listStyle( editor, 'bulletedListStyle' );
+		});
+})();
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/liststyle/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/liststyle/plugin.js	(revision 5538)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/liststyle/plugin.js	(revision 5538)
@@ -0,0 +1,59 @@
+﻿/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function()
+{
+	CKEDITOR.plugins.liststyle =
+	{
+		init : function( editor )
+		{
+
+			editor.addCommand( 'numberedListStyle', new CKEDITOR.dialogCommand( 'numberedListStyle' ) );
+			CKEDITOR.dialog.add( 'numberedListStyle', this.path + 'dialogs/liststyle.js' );
+			editor.addCommand( 'bulletedListStyle', new CKEDITOR.dialogCommand( 'bulletedListStyle' ) );
+			CKEDITOR.dialog.add( 'bulletedListStyle', this.path + 'dialogs/liststyle.js' );
+
+			//Register map group;
+			editor.addMenuGroup("list", 108);
+			// If the "menu" plugin is loaded, register the menu items.
+			if ( editor.addMenuItems )
+			{
+				editor.addMenuItems(
+					{
+						numberedlist :
+						{
+							label : editor.lang.list.numberedTitle,
+							group : 'list',
+							command: 'numberedListStyle'
+						},
+						bulletedlist :
+						{
+							label : editor.lang.list.bulletedTitle,
+							group : 'list',
+							command: 'bulletedListStyle'
+						}
+					});
+			}
+
+			// If the "contextmenu" plugin is loaded, register the listeners.
+			if ( editor.contextMenu )
+			{
+				editor.contextMenu.addListener( function( element, selection )
+					{
+						if ( !element )
+							return null;
+
+						if ( element.getAscendant( 'ol') )
+							return { numberedlist: CKEDITOR.TRISTATE_OFF };
+
+						if ( element.getAscendant( 'ul' ) )
+							return { bulletedlist: CKEDITOR.TRISTATE_OFF };
+					});
+			}
+		}
+	};
+
+	CKEDITOR.plugins.add( 'liststyle', CKEDITOR.plugins.liststyle );
+})();
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/maximize/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/maximize/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/maximize/plugin.js	(revision 5538)
@@ -79,27 +79,33 @@
 	}
 
-	function getResizeHandler( mainWindow, editor )
-	{
-		return function()
-		{
-			var viewPaneSize = mainWindow.getViewPaneSize();
-			editor.resize( viewPaneSize.width, viewPaneSize.height, null, true );
-		};
-	}
-
 	function refreshCursor( editor )
 	{
 		if ( editor.focusManager.hasFocus )
 		{
-			var focusGrabber = editor.container.append( CKEDITOR.dom.element.createFromHtml(
-				'<span tabindex="-1" style="position:absolute; left:-10000" role="presentation"></span>' ) );
-
-			focusGrabber.on( 'focus', function()
-				{
-					editor.focus();
-				} );
-			focusGrabber.focus();
-			focusGrabber.remove();
-		}
+			editor.toolbox.focus();
+			editor.focus();
+		}
+	}
+
+	/**
+	 * Adding an iframe shim to this element, OR removing the existing one if already applied.
+	 * Note: This will only affect IE version below 7.
+	 */
+	 function createIframeShim( element )
+	{
+		if ( !CKEDITOR.env.ie || CKEDITOR.env.version > 6 )
+			return null;
+
+		var shim = CKEDITOR.dom.element.createFromHtml( '<iframe frameborder="0" tabindex="-1"' +
+					' src="javascript:' +
+					   'void((function(){' +
+						   'document.open();' +
+						   ( CKEDITOR.env.isCustomDomain() ? 'document.domain=\'' + this.getDocument().$.domain + '\';' : '' ) +
+						   'document.close();' +
+					   '})())"' +
+					' style="display:block;position:absolute;z-index:-1;' +
+					'progid:DXImageTransform.Microsoft.Alpha(opacity=0);' +
+					'"></iframe>' );
+		return element.append( shim, true );
 	}
 
@@ -119,6 +125,13 @@
 			var outerScroll;
 
+			var shim;
+
 			// Saved resize handler function.
-			var resizeHandler = getResizeHandler( mainWindow, editor );
+			function resizeHandler()
+			{
+				var viewPaneSize = mainWindow.getViewPaneSize();
+				shim && shim.setStyles( { width : viewPaneSize.width + 'px', height : viewPaneSize.height + 'px' } );
+				editor.resize( viewPaneSize.width, viewPaneSize.height, null, true );
+			}
 
 			// Retain state after mode switches.
@@ -197,5 +210,7 @@
 									top : '0px'
 								} );
-							editor.resize( viewPaneSize.width, viewPaneSize.height, null, true );
+
+							shim =  createIframeShim( container );		// IE6 select element penetration when maximized. (#4459)
+							resizeHandler();
 
 							// Still not top left? Fix it. (Bug #174)
@@ -240,4 +255,10 @@
 							// Remove cke_maximized class.
 							container.removeClass( 'cke_maximized' );
+
+							if ( shim )
+							{
+								shim.remove();
+								shim = null;
+							}
 
 							// Emit a resize event, because this time the size is modified in
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/pagebreak/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/pagebreak/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/pagebreak/plugin.js	(revision 5538)
@@ -33,5 +33,5 @@
 				'display: block;' +
 				'float: none;' +
-				'width: 100%;' +
+				'width:100%;_width:99.9%;' +
 				'border-top: #999999 1px dotted;' +
 				'border-bottom: #999999 1px dotted;' +
@@ -85,4 +85,6 @@
 		var ranges = editor.getSelection().getRanges();
 
+		editor.fire( 'saveSnapshot' );
+
 		for ( var range, i = 0 ; i < ranges.length ; i++ )
 		{
@@ -100,4 +102,6 @@
 			}
 		}
+
+		editor.fire( 'saveSnapshot' );
 	}
 };
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/pastefromword/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/pastefromword/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/pastefromword/plugin.js	(revision 5538)
@@ -36,4 +36,6 @@
 							});
 					}
+					else
+						resetFromWord();
 				}
 			});
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/pastetext/dialogs/pastetext.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/pastetext/dialogs/pastetext.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/pastetext/dialogs/pastetext.js	(revision 5538)
@@ -53,4 +53,5 @@
 										'height:170px;' +
 										'resize: none;' +
+										'direction:' + editor.config.contentsLangDirection + ';' +
 										'border:1px solid black;' +
 										'background-color:white">' +
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/removeformat/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/removeformat/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/removeformat/plugin.js	(revision 5538)
@@ -16,4 +16,6 @@
 				command : 'removeFormat'
 			});
+
+		editor._.removeFormat = { filters: [] };
 	}
 });
@@ -33,4 +35,5 @@
 					( editor._.removeAttributes = editor.config.removeFormatAttributes.split( ',' ) );
 
+				var filter = CKEDITOR.plugins.removeformat.filter;
 				var ranges = editor.getSelection().getRanges();
 
@@ -71,5 +74,5 @@
 
 							// If this element can be removed (even partially).
-							if ( tagsRegex.test( pathElement.getName() ) )
+							if ( tagsRegex.test( pathElement.getName() ) && filter( editor, pathElement ) )
 								node.breakParent( pathElement );
 						}
@@ -93,5 +96,7 @@
 
 						// This node must not be a fake element.
-						if ( !( currentNode.getName() == 'img' && currentNode.getAttribute( '_cke_realelement' ) ) )
+						if ( !( currentNode.getName() == 'img'
+							&& currentNode.getAttribute( '_cke_realelement' ) )
+							&& filter( editor, currentNode ) )
 						{
 							// Remove elements nodes that match with this style rules.
@@ -111,5 +116,40 @@
 			}
 		}
+	},
+
+	/**
+	 * Perform the remove format filters on the passed element.
+	 * @param {CKEDITOR.editor} editor
+	 * @param {CKEDITOR.dom.element} element
+	 */
+	filter : function ( editor, element )
+	{
+		var filters = editor._.removeFormat.filters;
+		for ( var i = 0; i < filters.length; i++ )
+		{
+			if ( filters[ i ]( element ) === false )
+				return false;
+		}
+		return true;
 	}
+};
+
+/**
+ * Add to a collection of functions to decide whether a specific
+ * element should be considered as formatting element and thus
+ * could be removed during <b>removeFormat</b> command,
+ * Note: Only available with the existence of 'removeformat' plugin.
+ * @since 3.3
+ * @param {Function} func The function to be called, which will be passed a {CKEDITOR.dom.element} element to test.
+ * @example
+ *  // Don't remove empty span
+ *  editor.addRemoveFormatFilter.push( function( element )
+ *		{
+ *			return !( element.is( 'span' ) && CKEDITOR.tools.isEmpty( element.getAttributes() ) );
+ *		});
+ */
+CKEDITOR.editor.prototype.addRemoveFormatFilter = function( func )
+{
+	this._.removeFormat.filters.push( func );
 };
 
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/resize/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/resize/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/resize/plugin.js	(revision 5538)
@@ -12,16 +12,28 @@
 		if ( config.resize_enabled )
 		{
-			var container = null;
-			var origin, startSize;
+			var container = null,
+				origin,
+				startSize,
+				resizeHorizontal = ( config.resize_dir == 'both' || config.resize_dir == 'horizontal' ) &&
+					( config.resize_minWidth != config.resize_maxWidth ),
+				resizeVertical = ( config.resize_dir == 'both' || config.resize_dir == 'vertical' ) &&
+					( config.resize_minHeight != config.resize_maxHeight );
 
 			function dragHandler( evt )
 			{
-				var dx = evt.data.$.screenX - origin.x;
-				var dy = evt.data.$.screenY - origin.y;
-				var internalWidth = startSize.width + dx * ( editor.lang.dir == 'rtl' ? -1 : 1 );
-				var internalHeight = startSize.height + dy;
+				var dx = evt.data.$.screenX - origin.x,
+					dy = evt.data.$.screenY - origin.y,
+					width = startSize.width,
+					height = startSize.height,
+					internalWidth = width + dx * ( editor.lang.dir == 'rtl' ? -1 : 1 ),
+					internalHeight = height + dy;
 
-				editor.resize( Math.max( config.resize_minWidth, Math.min( internalWidth, config.resize_maxWidth ) ),
-						Math.max( config.resize_minHeight, Math.min( internalHeight, config.resize_maxHeight ) ) );
+				if ( resizeHorizontal )
+					width =  Math.max( config.resize_minWidth, Math.min( internalWidth, config.resize_maxWidth ) );
+
+				if ( resizeVertical )
+					height =  Math.max( config.resize_minHeight, Math.min( internalHeight, config.resize_maxHeight ) );
+
+				editor.resize( width, height );
 			}
 
@@ -62,5 +74,11 @@
 					if ( event.data.space == 'bottom' )
 					{
-						event.data.html += '<div class="cke_resizer"' +
+						var direction = '';
+						if ( resizeHorizontal && !resizeVertical)
+							direction = ' cke_resizer_horizontal';
+						if ( !resizeHorizontal && resizeVertical)
+							direction = ' cke_resizer_vertical';
+
+						event.data.html += '<div class="cke_resizer' + direction + '"' +
 							' title="' + CKEDITOR.tools.htmlEncode( editor.lang.resize ) + '"' +
 							' onmousedown="CKEDITOR.tools.callFunction(' + mouseDownFn + ', event)"' +
@@ -109,5 +127,5 @@
 
 /**
- * Whether to enable the resizing feature. If disabed the resize handler will not be visible.
+ * Whether to enable the resizing feature. If disabled the resize handler will not be visible.
  * @type Boolean
  * @default true
@@ -116,2 +134,13 @@
  */
 CKEDITOR.config.resize_enabled = true;
+
+/**
+ * The directions to which the editor resizing is enabled. Possible values
+ * are "both", "vertical" and "horizontal".
+ * @type String
+ * @default 'both'
+ * @since 3.3
+ * @example
+ * config.resize_dir = 'vertical';
+ */
+CKEDITOR.config.resize_dir = 'both';
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/scayt/dialogs/options.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/scayt/dialogs/options.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/scayt/dialogs/options.js	(revision 5538)
@@ -244,7 +244,7 @@
 		}
 
-		var about = '<p>' + captions[ 'about_throwt_image' ] + '</p>'+
-					'<p>' + captions[ 'version' ]  + dialog.data.scayt.version.toString() + '</p>' +
-					'<p>' + captions[ 'about_throwt_copy' ] + '</p>';
+		var about = '<p><img src="' + window.scayt.getAboutInfo().logoURL + '" /></p>' +
+				'<p>' + captions[ 'version' ] + window.scayt.getAboutInfo().version.toString() + '</p>' +
+				'<p>' + captions[ 'about_throwt_copy' ] + '</p>';
 
 		doc.getById( 'scayt_about' ).setHtml( about );
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/scayt/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/scayt/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/scayt/plugin.js	(revision 5538)
@@ -12,7 +12,5 @@
 {
 	var commandName 	= 'scaytcheck',
-		openPage		= '',
-		scayt_paused	= null,
-		scayt_control_id = null;
+		openPage		= '';
 
 	// Checks if a value exists in an array
@@ -48,7 +46,21 @@
 			oParams.sLang = editor.config.scayt_sLang || 'en_US';
 
+			// Introduce SCAYT onLoad callback. (#5632)
+			oParams.onLoad = function()
+				{
+					// Draw down word marker to avoid being covered by background-color style.(#5466)
+					if ( !( CKEDITOR.env.ie && CKEDITOR.env.version < 8 ) )
+						this.addStyle( this.selectorCss(), 'padding-bottom: 2px !important;' );
+
+					// Call scayt_control.focus when SCAYT loaded
+					// and only if editor has focus and scayt control creates at first time (#5720)
+					if ( editor.focusManager.hasFocus && !plugin.isControlRestored( editor ) )
+						this.focus();
+
+				};
+
 			oParams.onBeforeChange = function()
 			{
-				if ( !editor.checkDirty() )
+				if ( plugin.getScayt( editor ) && !editor.checkDirty() )
 					setTimeout( function(){ editor.resetDirty(); } );
 			};
@@ -63,8 +75,13 @@
 			}
 			// needs for restoring a specific scayt control settings
-			if ( scayt_control_id )
-				oParams.id = scayt_control_id;
+			if ( plugin.getControlId(editor) )
+				oParams.id = plugin.getControlId(editor);
 
 			var scayt_control = new window.scayt( oParams );
+
+			scayt_control.afterMarkupRemove.push( function( node )
+			{
+				( new CKEDITOR.dom.element( node, scayt_control.document ) ).mergeSiblings();
+			} );
 
 			// Copy config.
@@ -89,5 +106,5 @@
 			plugin.uiTabs = fTabs;
 			try {
-				scayt_control.setDisabled( scayt_paused === false );
+				scayt_control.setDisabled( plugin.isPaused( editor ) === false );
 			} catch (e) {}
 
@@ -121,11 +138,23 @@
 					if ( scayt_instance )
 					{
-						scayt_paused = scayt_instance.paused = !scayt_instance.disabled;
+						plugin.setPaused( editor, !scayt_instance.disabled );
 						// store a control id for restore a specific scayt control settings
-						scayt_control_id = scayt_instance.id;
+						plugin.setControlId( editor, scayt_instance.id );
 						scayt_instance.destroy( true );
 						delete plugin.instances[ editor.name ];
 					}
 				}
+				// Catch on source mode switch off (#5720)
+				else if ( ev.data.name == 'source'  && editor.mode == 'source' )
+					plugin.markControlRestore( editor );
+			});
+
+		editor.on( 'afterCommandExec', function( ev )
+			{
+				if ( !plugin.isScaytEnabled( editor ) )
+					return;
+
+				if ( editor.mode == 'wysiwyg' && ( ev.data.name == 'undo' || ev.data.name == 'redo' ) )
+					window.setTimeout( function() { plugin.getScayt( editor ).refresh(); }, 10 );
 			});
 
@@ -134,8 +163,13 @@
 				var editor = ev.editor,
 					scayt_instance = plugin.getScayt( editor );
+
+				// SCAYT instance might already get destroyed by mode switch (#5744).
+				if ( !scayt_instance )
+					return;
+
+				delete plugin.instances[ editor.name ];
 				// store a control id for restore a specific scayt control settings
-				scayt_control_id = scayt_instance.id;
+				plugin.setControlId( editor, scayt_instance.id );
 				scayt_instance.destroy( true );
-				delete plugin.instances[ editor.name ];
 			});
 
@@ -144,5 +178,9 @@
 			{
 				if ( plugin.isScaytEnabled( editor ) ) {
-					window.setTimeout( function(){ plugin.getScayt( editor ).refresh(); }, 10 );
+					window.setTimeout( function()
+						{
+							var instance = plugin.getScayt( editor );
+							instance && instance.refresh();
+						}, 10 );
 				}
 			});
@@ -159,6 +197,10 @@
 						editor.getSelection().unlock( true );
 
-					// Swallow any SCAYT engine errors.
-					window.setTimeout( function(){ scayt_instance.refresh(); }, 10 );
+					// Return focus to the editor and refresh SCAYT markup (#5573).
+					window.setTimeout( function()
+					{
+						scayt_instance.focus();
+						scayt_instance.refresh();
+					}, 10 );
 				}
 			}, this, null, 50 );
@@ -174,6 +216,11 @@
 						editor.getSelection().unlock( true );
 
-					// Swallow any SCAYT engine errors.
-					window.setTimeout( function(){ scayt_instance.refresh(); },10 );
+					// Return focus to the editor (#5573)
+					// Refresh SCAYT markup
+					window.setTimeout( function()
+					{
+						scayt_instance.focus();
+						scayt_instance.refresh();
+					}, 10 );
 				}
 			}, this, null, 50 );
@@ -209,12 +256,90 @@
 		}
 
+		// Override Image.equals method avoid CK snapshot module to add SCAYT markup to snapshots. (#5546)
+		var undoImagePrototype = CKEDITOR.plugins.undo.Image.prototype;
+		undoImagePrototype.equals =	 CKEDITOR.tools.override( undoImagePrototype.equals, function( org )
+		{
+			return function( otherImage )
+			{
+				var thisContents = this.contents,
+					otherContents = otherImage.contents;
+				var scayt_instance = plugin.getScayt( this.editor );
+				// Making the comparison based on content without SCAYT word markers.
+				if ( scayt_instance && plugin.isScaytReady( this.editor ) )
+				{
+					// scayt::reset might return value undefined. (#5742)
+					this.contents = scayt_instance.reset( thisContents ) || '';
+					otherImage.contents = scayt_instance.reset( otherContents ) || '';
+				}
+
+				var retval = org.apply( this, arguments );
+
+				this.contents = thisContents;
+				otherImage.contents = otherContents;
+				return retval;
+			};
+		});
+
 		if ( editor.document )
 			createInstance();
 	};
 
-	CKEDITOR.plugins.scayt =
+CKEDITOR.plugins.scayt =
 	{
 		engineLoaded : false,
 		instances : {},
+		// Data storage for SCAYT control, based on editor instances
+		controlInfo : {},
+		setControlInfo : function( editor, o )
+		{
+			if ( editor && editor.name && typeof ( this.controlInfo[ editor.name ] ) != 'object' )
+				this.controlInfo[ editor.name ] = {};
+
+			for ( var infoOpt in o )
+				this.controlInfo[ editor.name ][ infoOpt ] = o[ infoOpt ];
+		},
+		isControlRestored : function ( editor )
+		{
+			if ( editor &&
+					editor.name &&
+					this.controlInfo[ editor.name ] )
+			{
+				return this.controlInfo[ editor.name ].restored ;
+			}
+			return false;
+		},
+		markControlRestore : function ( editor )
+		{
+			this.setControlInfo( editor,{ restored:true } );
+		},
+		setControlId: function (editor, id)
+		{
+			this.setControlInfo( editor,{ id:id } );
+		},
+		getControlId: function (editor)
+		{
+			if ( editor &&
+					editor.name &&
+					this.controlInfo[ editor.name ] &&
+					this.controlInfo[ editor.name ].id )
+			{
+				return this.controlInfo[ editor.name ].id;
+			}
+			return null;
+		},
+		setPaused: function ( editor , bool )
+		{
+			this.setControlInfo( editor,{ paused:bool } );
+		},
+		isPaused: function (editor)
+		{
+			if ( editor &&
+					editor.name &&
+					this.controlInfo[editor.name] )
+			{
+				return this.controlInfo[editor.name].paused ;
+			}
+			return undefined;
+		},
 		getScayt : function( editor )
 		{
@@ -235,5 +360,5 @@
 			// SCAYT doesn't work with Opera.
 			if ( CKEDITOR.env.opera )
-				return null;
+				return editor.fire( 'showScaytState' );
 
 			if ( this.engineLoaded === true )
@@ -258,32 +383,37 @@
 			// Default to 'http' for unknown.
 			protocol = protocol.search( /https?:/) != -1? protocol : 'http:';
-			var baseUrl  = 'svc.spellchecker.net/spellcheck31/lf/scayt/scayt22.js';
+			var baseUrl  = 'svc.spellchecker.net/spellcheck31/lf/scayt24/loader__base.js';
 
 			var scaytUrl  =  editor.config.scayt_srcUrl || ( protocol + '//' + baseUrl );
 			var scaytConfigBaseUrl =  plugin.parseUrl( scaytUrl ).path +  '/';
 
-			CKEDITOR._djScaytConfig =
-			{
-				baseUrl: scaytConfigBaseUrl,
-				addOnLoad:
-				[
-					function()
-					{
-						CKEDITOR.fireOnce( 'scaytReady' );
-					}
-				],
-				isDebug: false
-			};
-			// Append javascript code.
-			CKEDITOR.document.getHead().append(
-				CKEDITOR.document.createElement( 'script',
-					{
-						attributes :
-							{
-								type : 'text/javascript',
-								src : scaytUrl
-							}
-					})
-			);
+			if( window.scayt == undefined )
+			{
+				CKEDITOR._djScaytConfig =
+				{
+					baseUrl: scaytConfigBaseUrl,
+					addOnLoad:
+					[
+						function()
+						{
+							CKEDITOR.fireOnce( 'scaytReady' );
+						}
+					],
+					isDebug: false
+				};
+				// Append javascript code.
+				CKEDITOR.document.getHead().append(
+					CKEDITOR.document.createElement( 'script',
+						{
+							attributes :
+								{
+									type : 'text/javascript',
+									src : scaytUrl
+								}
+						})
+				);
+			}
+			else
+				CKEDITOR.fireOnce( 'scaytReady' );
 
 			return null;
@@ -323,4 +453,7 @@
 		exec: function( editor )
 		{
+			var autoStartup = editor.config.scayt_autoStartup;
+			autoStartup = ( autoStartup == undefined ) || autoStartup;
+
 			if ( plugin.isScaytReady( editor ) )
 			{
@@ -330,17 +463,16 @@
 
 				var scayt_control = plugin.getScayt( editor );
+				// the place where the status of editor focus should be restored
+				// after there will be ability to store its state before SCAYT button click
+				// if (storedFocusState is focused )
+				//   scayt_control.focus();
+				//
+				// now focus is set certainly
+				scayt_control.focus( );
 				scayt_control.setDisabled( isEnabled );
 			}
-			else if ( !editor.config.scayt_autoStartup && plugin.engineLoaded >= 0 )	// Load first time
+			else if ( !autoStartup && plugin.engineLoaded >= 0 )	// Load first time
 			{
 				this.setState( CKEDITOR.TRISTATE_DISABLED );
-
-				editor.on( 'showScaytState', function()
-					{
-						this.removeListener();
-						this.setState( plugin.isScaytEnabled( editor ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );
-					},
-					this);
-
 				plugin.loadEngine( editor );
 			}
@@ -355,6 +487,23 @@
 		beforeInit : function( editor )
 		{
-			// Register own rbc menu group.
-			editor.config.menu_groups = 'scayt_suggest,scayt_moresuggest,scayt_control,' + editor.config.menu_groups;
+			var items_order = editor.config.scayt_contextMenuItemsOrder
+					|| 'suggest|moresuggest|control',
+				items_order_str = "";
+
+			items_order = items_order.split( '|' );
+
+			if ( items_order && items_order.length )
+			{
+				for ( var pos in items_order )
+					items_order_str += 'scayt_' + items_order[ pos ] + ( items_order.length != parseInt( pos, 10 ) + 1 ? ',' : '' );
+			}
+
+			// Register scayt rbc menu group.
+			if ( editor.config.scayt_contextMenuOntop )
+				// Put it on top of all context menu items
+				editor.config.menu_groups =  items_order_str + ',' + editor.config.menu_groups;
+			else
+				// Put it down
+				editor.config.menu_groups = editor.config.menu_groups + ',' +items_order_str;
 		},
 
@@ -449,5 +598,5 @@
 					{
 						label : editor.lang.scayt.title,
-						title : editor.lang.scayt.title,
+						title : CKEDITOR.env.opera ? editor.lang.scayt.opera_title : editor.lang.scayt.title,
 						className : 'cke_button_scayt',
 						onRender: function()
@@ -608,13 +757,28 @@
 			}
 
+			var showInitialState = function()
+				{
+					editor.removeListener( 'showScaytState', showInitialState );
+
+					if ( !CKEDITOR.env.opera )
+						command.setState( plugin.isScaytEnabled( editor ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );
+					else
+						command.setState( CKEDITOR.TRISTATE_DISABLED );
+				};
+
+			editor.on( 'showScaytState', showInitialState );
+
+			if ( CKEDITOR.env.opera )
+			{
+				editor.on( 'instanceReady', function()
+				{
+					showInitialState();
+				});
+			}
+
 			// Start plugin
-			if ( editor.config.scayt_autoStartup )
-			{
-				var showInitialState = function()
-				{
-					editor.removeListener( 'showScaytState', showInitialState );
-					command.setState( plugin.isScaytEnabled( editor ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );
-				};
-				editor.on( 'showScaytState', showInitialState );
+			var autoStartup = editor.config.scayt_autoStartup;
+			if ( ( autoStartup == undefined ) || autoStartup )
+			{
 				editor.on( 'instanceReady', function()
 				{
@@ -626,14 +790,16 @@
 		afterInit : function( editor )
 		{
-			// Prevent word marker line from displaying in elements path. (#3570)
-			var elementsPathFilters;
+			// Prevent word marker line from displaying in elements path and been removed when cleaning format. (#3570) (#4125)
+			var elementsPathFilters,
+					scaytFilter = function( element )
+					{
+						if ( element.hasAttribute( 'scaytid' ) )
+							return false;
+					};
+
 			if ( editor._.elementsPath && ( elementsPathFilters = editor._.elementsPath.filters ) )
-			{
-				elementsPathFilters.push( function( element )
-				{
-					if ( element.hasAttribute( 'scaytid' ) )
-						return false;
-				} );
-			}
+				elementsPathFilters.push( scaytFilter );
+
+			editor.addRemoveFormatFilter && editor.addRemoveFormatFilter( scaytFilter );
 
 		}
@@ -645,7 +811,7 @@
  * @name CKEDITOR.config.scayt_autoStartup
  * @type Boolean
- * @default false
- * @example
- * config.scayt_autoStartup = true;
+ * @default true
+ * @example
+ * config.scayt_autoStartup = false;
  */
 
@@ -766,2 +932,28 @@
  * config.scayt_userDictionaryName = 'MyDictionary';
  */
+
+/**
+ * Makes it possible to place the SCAYT context menu items above others.
+ * @name CKEDITOR.config.scayt_contextMenuOntop
+ * @type Boolean
+ * @default false
+ * @example
+ * config.scayt_contextMenuOntop = true;
+ */
+
+/**
+ * Define order of placing of SCAYT context menu items by groups.
+ * It must be a string with one or more of the following
+ * words separated by a pipe ("|"):
+ * <ul>
+ *     <li>'suggest'     - main suggestion word list,</li>
+ *     <li>'moresuggest' - more suggestions word list,</li>
+ *     <li>'control'     - SCAYT commands, such as 'Ignore' and 'Add Word'</li>
+ * </ul>
+ *
+ * @name CKEDITOR.config.scayt_contextMenuItemsOrder
+ * @type String
+ * @default 'suggest|moresuggest|control'
+ * @example
+ * config.scayt_contextMenuItemsOrder = 'moresuggest|control|suggest';
+ */
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/selection/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/selection/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/selection/plugin.js	(revision 5538)
@@ -210,5 +210,6 @@
 							{
 								var doc = editor.document,
-									sel = doc && doc.$.selection;
+									sel = editor.getSelection(),
+									nativeSel = sel && sel.getNative();
 
 								// There is a very specific case, when clicking
@@ -220,5 +221,5 @@
 								// such situation we have to test the range, to
 								// be sure it's valid.
-								if ( testIt && sel && sel.type == 'None' )
+								if ( testIt && nativeSel && nativeSel.type == 'None' )
 								{
 									// The "InsertImage" command can be used to
@@ -233,5 +234,14 @@
 								}
 
-								savedRange = sel && sel.createRange();
+								// Avoid saving selection from within text input. (#5747)
+								var parentTag;
+								if ( nativeSel.type == 'Text'
+									&& ( parentTag = nativeSel.createRange().parentElement().nodeName.toLowerCase() )
+									&& parentTag in { input: 1, textarea : 1 } )
+								{
+									return;
+								}
+
+								savedRange = nativeSel && sel.getRanges()[ 0 ];
 
 								checkSelectionChangeTimeout.call( editor );
@@ -753,14 +763,19 @@
 				function()
 				{
-					var range  = self.getRanges()[ 0 ];
-					range.shrink( CKEDITOR.SHRINK_ELEMENT );
-
-					var enclosed;
-					if ( range.startContainer.equals( range.endContainer )
-						&& ( range.endOffset - range.startOffset ) == 1
-						&& styleObjectElements[ ( enclosed = range.startContainer.getChild( range.startOffset ) ).getName() ] )
-					{
-						return enclosed.$;
+					var range  = self.getRanges()[ 0 ],
+						enclosed,
+						selected;
+
+					// Check first any enclosed element, e.g. <ul>[<li><a href="#">item</a></li>]</ul>
+					for ( var i = 2; i && !( ( enclosed = range.getEnclosedNode() )
+						&& ( enclosed.type == CKEDITOR.NODE_ELEMENT )
+						&& styleObjectElements[ enclosed.getName() ]
+						&& ( selected = enclosed ) ); i-- )
+					{
+						// Then check any deep wrapped element, e.g. [<b><i><img /></i></b>]
+						range.shrink( CKEDITOR.SHRINK_ELEMENT );
 					}
+
+					return  selected.$;
 				});
 
@@ -1010,4 +1025,5 @@
 var notWhitespaces = CKEDITOR.dom.walker.whitespaces( true );
 var fillerTextRegex = /\ufeff|\u00a0/;
+var nonCells = { table:1,tbody:1,tr:1 };
 
 CKEDITOR.dom.range.prototype.select =
@@ -1019,4 +1035,12 @@
 			var isStartMarkerAlone;
 			var dummySpan;
+
+			// IE doesn't support selecting the entire table row/cell, move the selection into cells, e.g.
+			// <table><tbody><tr>[<td>cell</b></td>... => <table><tbody><tr><td>[cell</td>...
+			if ( this.startContainer.type == CKEDITOR.NODE_ELEMENT && this.startContainer.getName() in nonCells
+				|| this.endContainer.type == CKEDITOR.NODE_ELEMENT && this.endContainer.getName() in nonCells )
+			{
+				this.shrink( CKEDITOR.NODE_ELEMENT, true );
+			}
 
 			var bookmark = this.createBookmark();
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/smiley/dialogs/smiley.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/smiley/dialogs/smiley.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/smiley/dialogs/smiley.js	(revision 5538)
@@ -134,9 +134,10 @@
 
 	// Build the HTML for the smiley images table.
+	var labelId = 'smiley_emtions_label' + CKEDITOR.tools.getNextNumber();
 	var html =
 	[
 		'<div>' +
-		'<span id="smiley_emtions_label" class="cke_voice_label">' + lang.options +'</span>',
-		'<table role="listbox" aria-labelledby="smiley_emtions_label" style="width:100%;height:100%" cellspacing="2" cellpadding="2"',
+		'<span id="' + labelId + '" class="cke_voice_label">' + lang.options +'</span>',
+		'<table role="listbox" aria-labelledby="' + labelId + '" style="width:100%;height:100%" cellspacing="2" cellpadding="2"',
 		CKEDITOR.env.ie && CKEDITOR.env.quirks ? ' style="position:absolute;"' : '',
 		'><tbody>'
@@ -149,4 +150,5 @@
 			html.push( '<tr>' );
 
+		var smileyLabelId = 'cke_smile_label_' + i + '_' + CKEDITOR.tools.getNextNumber();
 		html.push(
 			'<td class="cke_dark_background cke_hand cke_centered" style="vertical-align: middle;">' +
@@ -154,5 +156,5 @@
 					' aria-posinset="' + ( i +1 ) + '"',
 					' aria-setsize="' + size + '"',
-					' aria-labelledby="cke_smile_label_' + i + '"',
+					' aria-labelledby="' + smileyLabelId + '"',
 					' class="cke_smile" tabindex="-1" onkeydown="CKEDITOR.tools.callFunction( ', onKeydown, ', event, this );">',
 					'<img class="hand" title="', config.smiley_descriptions[i], '"' +
@@ -162,5 +164,5 @@
 						( CKEDITOR.env.ie ? ' onload="this.setAttribute(\'width\', 2); this.removeAttribute(\'width\');" ' : '' ),
 					'>' +
-					'<span id="cke_smile_label_' + i + '" class="cke_voice_label">' +config.smiley_descriptions[ i ]  + '</span>' +
+					'<span id="' + smileyLabelId + '" class="cke_voice_label">' +config.smiley_descriptions[ i ]  + '</span>' +
 				'</a>',
  			'</td>' );
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/smiley/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/smiley/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/smiley/plugin.js	(revision 5538)
@@ -65,5 +65,5 @@
  *     [
  *         'smiley', 'sad', 'wink', 'laugh', 'frown', 'cheeky', 'blush', 'surprise',
- *         'indecision', 'angry', 'angle', 'cool', 'devil', 'crying', 'enlightened', 'no',
+ *         'indecision', 'angry', 'angel', 'cool', 'devil', 'crying', 'enlightened', 'no',
  *         'yes', 'heart', 'broken heart', 'kiss', 'mail'
  *     ];
@@ -80,5 +80,5 @@
 	[
 		'smiley', 'sad', 'wink', 'laugh', 'frown', 'cheeky', 'blush', 'surprise',
-		'indecision', 'angry', 'angle', 'cool', 'devil', 'crying', 'enlightened', 'no',
+		'indecision', 'angry', 'angel', 'cool', 'devil', 'crying', 'enlightened', 'no',
 		'yes', 'heart', 'broken heart', 'kiss', 'mail'
 	];
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/specialchar/dialogs/specialchar.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/specialchar/dialogs/specialchar.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/specialchar/dialogs/specialchar.js	(revision 5538)
@@ -263,5 +263,6 @@
 				chars = this.definition.chars;
 
-			var html = [ '<table role="listbox" aria-labelledby="specialchar_table_label"' +
+			var charsTableLabel =  'specialchar_table_label' + CKEDITOR.tools.getNextNumber();
+			var html = [ '<table role="listbox" aria-labelledby="' + charsTableLabel + '"' +
 						 			' style="width: 320px; height: 100%; border-collapse: separate;"' +
 						 			' align="center" cellspacing="2" cellpadding="2" border="0">' ];
@@ -290,4 +291,6 @@
 						charDesc = charDesc || character;
 
+						var charLabelId =  'cke_specialchar_label_' + i + '_' + CKEDITOR.tools.getNextNumber();
+
 						html.push(
 							'<td class="cke_dark_background" style="cursor: default" role="presentation">' +
@@ -295,5 +298,5 @@
 							' aria-posinset="' + ( i +1 ) + '"',
 							' aria-setsize="' + size + '"',
-							' aria-labelledby="cke_specialchar_label_' + i + '"',
+							' aria-labelledby="' + charLabelId + '"',
 							' style="cursor: inherit; display: block; height: 1.25em; margin-top: 0.25em; text-align: center;" title="', CKEDITOR.tools.htmlEncode( charDesc ), '"' +
 							' onkeydown="CKEDITOR.tools.callFunction( ' + onKeydown + ', event, this )"' +
@@ -303,5 +306,5 @@
 							character +
 							'</span>' +
-							'<span class="cke_voice_label" id="cke_specialchar_label_' + i + '">' +
+							'<span class="cke_voice_label" id="' + charLabelId + '">' +
 							charDesc +
 							'</span></a>');
@@ -315,5 +318,5 @@
 			}
 
-			html.push( '</tbody></table>', '<span id="specialchar_table_label" class="cke_voice_label">' + lang.options +'</span>' );
+			html.push( '</tbody></table>', '<span id="' + charsTableLabel + '" class="cke_voice_label">' + lang.options +'</span>' );
 
 			this.getContentElement( 'info', 'charContainer' ).getElement().setHtml( html.join( '' ) );
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/styles/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/styles/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/styles/plugin.js	(revision 5538)
@@ -380,37 +380,7 @@
 		// Get the first node to be processed and the last, which concludes the
 		// processing.
-		var boundaryNodes = range.getBoundaryNodes();
-		var firstNode = boundaryNodes.startNode;
-		var lastNode = boundaryNodes.endNode.getNextSourceNode( true );
-
-		// Probably the document end is reached, we need a marker node.
-		if ( !lastNode )
-		{
-				var marker;
-				lastNode = marker = document.createText( '' );
-				lastNode.insertAfter( range.endContainer );
-		}
-		// The detection algorithm below skips the contents inside bookmark nodes, so
-		// we'll need to make sure lastNode isn't the &nbsp; inside a bookmark node.
-		var lastParent = lastNode.getParent();
-		if ( lastParent && lastParent.getAttribute( '_fck_bookmark' ) )
-			lastNode = lastParent;
-
-		if ( lastNode.equals( firstNode ) )
-		{
-			// If the last node is the same as the the first one, we must move
-			// it to the next one, otherwise the first one will not be
-			// processed.
-			lastNode = lastNode.getNextSourceNode( true );
-
-			// It may happen that there are no more nodes after it (the end of
-			// the document), so we must add something there to make our code
-			// simpler.
-			if ( !lastNode )
-			{
-				lastNode = marker = document.createText( '' );
-				lastNode.insertAfter( firstNode );
-			}
-		}
+		var boundaryNodes = range.createBookmark(),
+			firstNode = boundaryNodes.startNode,
+			lastNode = boundaryNodes.endNode;
 
 		var currentNode = firstNode;
@@ -551,5 +521,5 @@
 
 					// Let's merge our new style with its neighbors, if possible.
-					mergeSiblings( styleNode );
+					styleNode.mergeSiblings();
 
 					// As the style system breaks text nodes constantly, let's normalize
@@ -569,6 +539,6 @@
 		}
 
-		// Remove the temporary marking node.(#4111)
-		marker && marker.remove();
+		firstNode.remove();
+		lastNode.remove();
 		range.moveToBookmark( bookmark );
 		// Minimize the result range to exclude empty text nodes. (#5374)
@@ -625,5 +595,5 @@
 						 * them before removal.
 						 */
-						mergeSiblings( element );
+						element.mergeSiblings();
 						removeFromElement( this, element );
 
@@ -753,4 +723,8 @@
 		var iterator = range.createIterator();
 		iterator.enforceRealBlocks = true;
+
+		// make recognize <br /> tag as a separator in ENTER_BR mode (#5121)
+		if ( this._.enterMode )
+			iterator.enlargeBr = ( this._.enterMode != CKEDITOR.ENTER_BR );
 
 		var block;
@@ -1058,45 +1032,9 @@
 			{
 				// Check the cached nodes for merging.
-				mergeSiblings( firstChild );
-
-				if ( lastChild && !firstChild.equals( lastChild ) )
-					mergeSiblings( lastChild );
-			}
-		}
-	}
-
-	function mergeSiblings( element )
-	{
-		if ( !element || element.type != CKEDITOR.NODE_ELEMENT || !CKEDITOR.dtd.$removeEmpty[ element.getName() ] )
-			return;
-
-		mergeElements( element, element.getNext(), true );
-		mergeElements( element, element.getPrevious() );
-	}
-
-	function mergeElements( element, sibling, isNext )
-	{
-		if ( sibling && sibling.type == CKEDITOR.NODE_ELEMENT )
-		{
-			var hasBookmark = sibling.getAttribute( '_fck_bookmark' );
-
-			if ( hasBookmark )
-				sibling = isNext ? sibling.getNext() : sibling.getPrevious();
-
-			if ( sibling && sibling.type == CKEDITOR.NODE_ELEMENT && element.isIdentical( sibling ) )
-			{
-				// Save the last child to be checked too, to merge things like
-				// <b><i></i></b><b><i></i></b> => <b><i></i></b>
-				var innerSibling = isNext ? element.getLast() : element.getFirst();
-
-				if ( hasBookmark )
-					( isNext ? sibling.getPrevious() : sibling.getNext() ).move( element, !isNext );
-
-				sibling.moveChildren( element, !isNext );
-				sibling.remove();
-
-				// Now check the last inner child (see two comments above).
-				if ( innerSibling )
-					mergeSiblings( innerSibling );
+				firstChild.type == CKEDITOR.NODE_ELEMENT && firstChild.mergeSiblings();
+
+				if ( lastChild && !firstChild.equals( lastChild )
+					&& lastChild.type == CKEDITOR.NODE_ELEMENT  )
+					lastChild.mergeSiblings();
 			}
 		}
@@ -1423,4 +1361,5 @@
  * possible to set the URL from which loading the styles file.<br>
  * Previously this setting was available as config.stylesCombo_stylesSet<br>
+ * @name CKEDITOR.config.stylesSet
  * @type String|Array
  * @default 'default'
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/stylescombo/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/stylescombo/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/stylescombo/plugin.js	(revision 5538)
@@ -35,4 +35,5 @@
 							style = styles[ styleName ] = new CKEDITOR.style( styleDefinition );
 							style._name = styleName;
+							style._.enterMode = config.enterMode;
 
 							stylesList.push( style );
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/table/dialogs/table.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/table/dialogs/table.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/table/dialogs/table.js	(revision 5538)
@@ -44,4 +44,9 @@
 					else if ( ranges.length > 0 )
 					{
+						// Webkit could report the following range on cell selection (#4948):
+						// <table><tr><td>[&nbsp;</td></tr></table>]
+						if ( CKEDITOR.env.webkit )
+							ranges[ 0 ].shrink( CKEDITOR.NODE_ELEMENT );
+
 						var rangeRoot = ranges[0].getCommonAncestor( true );
 						selectedTable = rangeRoot.getAscendant( 'table', true );
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/tabletools/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/tabletools/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/tabletools/plugin.js	(revision 5538)
@@ -87,5 +87,5 @@
 	}
 
-	function getFocusedCell( cellsToDelete ) {
+	function getFocusElementAfterDelCells( cellsToDelete ) {
 		var i = 0,
 			last = cellsToDelete.length - 1,
@@ -249,14 +249,56 @@
 	}
 
+	function getFocusElementAfterDelCols( cells )
+	{
+		var cellIndexList = [],
+			table = cells[ 0 ] && cells[ 0 ].getAscendant( 'table' ),
+			i, length,
+			targetIndex, targetCell;
+
+		// get the cellIndex list of delete cells
+		for ( i = 0, length = cells.length; i < length; i++ )
+			cellIndexList.push( cells[i].$.cellIndex );
+
+		// get the focusable column index
+		cellIndexList.sort();
+		for ( i = 1, length = cellIndexList.length; i < length; i++ )
+		{
+			if ( cellIndexList[ i ] - cellIndexList[ i - 1 ] > 1 )
+			{
+				targetIndex = cellIndexList[ i - 1 ] + 1;
+				break;
+			}
+		}
+
+		if ( !targetIndex )
+			targetIndex = cellIndexList[ 0 ] > 0 ? ( cellIndexList[ 0 ] - 1 )
+							: ( cellIndexList[ cellIndexList.length - 1 ] + 1 );
+
+		// scan row by row to get the target cell
+		var rows = table.$.rows;
+		for ( i = 0, length = rows.length; i < length ; i++ )
+		{
+			targetCell = rows[ i ].cells[ targetIndex ];
+			if ( targetCell )
+				break;
+		}
+
+		return targetCell ?  new CKEDITOR.dom.element( targetCell ) :  table.getPrevious();
+	}
+
 	function deleteColumns( selectionOrCell )
 	{
 		if ( selectionOrCell instanceof CKEDITOR.dom.selection )
 		{
-			var colsToDelete = getSelectedCells( selectionOrCell );
-			for ( var i = colsToDelete.length ; i >= 0 ; i-- )
+			var colsToDelete = getSelectedCells( selectionOrCell ),
+				elementToFocus = getFocusElementAfterDelCols( colsToDelete );
+
+			for ( var i = colsToDelete.length - 1 ; i >= 0 ; i-- )
 			{
 				if ( colsToDelete[ i ] )
 					deleteColumns( colsToDelete[ i ] );
 			}
+
+			return elementToFocus;
 		}
 		else if ( selectionOrCell instanceof CKEDITOR.dom.element )
@@ -264,4 +306,6 @@
 			// Get the cell's table.
 			var table = selectionOrCell.getAscendant( 'table' );
+			if ( !table )
+				return null;
 
 			// Get the cell index.
@@ -289,4 +333,6 @@
 			}
 		}
+
+		return null;
 	}
 
@@ -316,5 +362,5 @@
 			var cellsToDelete = getSelectedCells( selectionOrCell );
 			var table = cellsToDelete[ 0 ] && cellsToDelete[ 0 ].getAscendant( 'table' );
-			var cellToFocus   = getFocusedCell( cellsToDelete );
+			var cellToFocus   = getFocusElementAfterDelCells( cellsToDelete );
 
 			for ( var i = cellsToDelete.length - 1 ; i >= 0 ; i-- )
@@ -727,7 +773,8 @@
 						selection.selectRanges( [ range ] );
 
-						// If the table's parent has only one child, remove it as well.
-						if ( table.getParent().getChildCount() == 1 )
-							table.getParent().remove();
+						// If the table's parent has only one child, remove it,except body,as well.( #5416 )
+						var parent = table.getParent();
+						if ( parent.getChildCount() == 1 && parent.getName() != 'body' )
+							parent.remove();
 						else
 							table.remove();
@@ -767,5 +814,6 @@
 					{
 						var selection = editor.getSelection();
-						deleteColumns( selection );
+						var element = deleteColumns( selection );
+						element &&  placeCursorInCell( element, true );
 					}
 				} );
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/templates/dialogs/templates.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/templates/dialogs/templates.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/templates/dialogs/templates.js	(revision 5538)
@@ -147,4 +147,5 @@
 			var listContainer;
 
+			var templateListLabelId = 'cke_tpl_list_label_' + CKEDITOR.tools.getNextNumber();
 			return {
 				title :editor.lang.templates.title,
@@ -177,8 +178,8 @@
 										focus: true,
 										html :
-											'<div class="cke_tpl_list" tabIndex="-1" role="listbox" aria-labelledby="cke_tpl_list_label">' +
+											'<div class="cke_tpl_list" tabIndex="-1" role="listbox" aria-labelledby="' + templateListLabelId+ '">' +
 												'<div class="cke_tpl_loading"><span></span></div>' +
 											'</div>' +
-											'<span class="cke_voice_label" id="cke_tpl_list_label">' + editor.lang.templates.options+ '</span>'
+											'<span class="cke_voice_label" id="' + templateListLabelId + '">' + editor.lang.templates.options+ '</span>'
 									},
 									{
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/uicolor/dialogs/uicolor.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/uicolor/dialogs/uicolor.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/uicolor/dialogs/uicolor.js	(revision 5538)
@@ -8,5 +8,6 @@
 	var dialog, picker, pickerContents,
 		// Actual UI color value.
-		uiColor = editor.getUiColor();
+		uiColor = editor.getUiColor(),
+		pickerId = 'cke_uicolor_picker' + CKEDITOR.tools.getNextNumber();
 
 	function setNewPickerColor( color )
@@ -17,5 +18,5 @@
 		picker.setValue( color, true );
 		// Refresh picker UI.
-		picker.refresh( 'cke_uicolor_picker' );
+		picker.refresh( pickerId );
 	}
 
@@ -34,5 +35,5 @@
 		id : 'yuiColorPicker',
 		type : 'html',
-		html : "<div id='cke_uicolor_picker' style='width: 360px; height: 200px; position: relative;'></div>",
+		html : "<div id='" + pickerId + "' class='cke_uicolor_picker' style='width: 360px; height: 200px; position: relative;'></div>",
 		onLoad : function( event )
 		{
@@ -43,5 +44,5 @@
 
 			// Create new color picker widget.
-			picker = new window.YAHOO.widget.ColorPicker( "cke_uicolor_picker",
+			picker = new window.YAHOO.widget.ColorPicker( pickerId,
 				{
 					showhsvcontrols : true,
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/uicolor/yui/assets/yui.css
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/uicolor/yui/assets/yui.css	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/uicolor/yui/assets/yui.css	(revision 5538)
@@ -13,3 +13,3 @@
 version: 2.7.0
 */
-#cke_uicolor_picker .yui-picker-panel{background:#e3e3e3;border-color:#888;}#cke_uicolor_picker .yui-picker-panel .hd{background-color:#ccc;font-size:100%;line-height:100%;border:1px solid #e3e3e3;font-weight:bold;overflow:hidden;padding:6px;color:#000;}#cke_uicolor_picker .yui-picker-panel .bd{background:#e8e8e8;margin:1px;height:200px;}#cke_uicolor_picker .yui-picker-panel .ft{background:#e8e8e8;margin:1px;padding:1px;}#cke_uicolor_picker .yui-picker{position:relative;}#cke_uicolor_picker .yui-picker-hue-thumb{cursor:default;width:18px;height:18px;top:-8px;left:-2px;z-index:9;position:absolute;}#cke_uicolor_picker .yui-picker-hue-bg{-moz-outline:none;outline:0 none;position:absolute;left:200px;height:183px;width:14px;background:url(hue_bg.png) no-repeat;top:4px;}#cke_uicolor_picker .yui-picker-bg{-moz-outline:none;outline:0 none;position:absolute;top:4px;left:4px;height:182px;width:182px;background-color:#F00;background-image:url(picker_mask.png);}*html #cke_uicolor_picker .yui-picker-bg{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='picker_mask.png',sizingMethod='scale');}#cke_uicolor_picker .yui-picker-mask{position:absolute;z-index:1;top:0;left:0;}#cke_uicolor_picker .yui-picker-thumb{cursor:default;width:11px;height:11px;z-index:9;position:absolute;top:-4px;left:-4px;}#cke_uicolor_picker .yui-picker-swatch{position:absolute;left:240px;top:4px;height:60px;width:55px;border:1px solid #888;}#cke_uicolor_picker .yui-picker-websafe-swatch{position:absolute;left:304px;top:4px;height:24px;width:24px;border:1px solid #888;}#cke_uicolor_picker .yui-picker-controls{position:absolute;top:72px;left:226px;font:1em monospace;}#cke_uicolor_picker .yui-picker-controls .hd{background:transparent;border-width:0!important;}#cke_uicolor_picker .yui-picker-controls .bd{height:100px;border-width:0!important;}#cke_uicolor_picker .yui-picker-controls ul{float:left;padding:0 2px 0 0;margin:0;}#cke_uicolor_picker .yui-picker-controls li{padding:2px;list-style:none;margin:0;}#cke_uicolor_picker .yui-picker-controls input{font-size:.85em;width:2.4em;}#cke_uicolor_picker .yui-picker-hex-controls{clear:both;padding:2px;}#cke_uicolor_picker .yui-picker-hex-controls input{width:4.6em;}#cke_uicolor_picker .yui-picker-controls a{font:1em arial,helvetica,clean,sans-serif;display:block;*display:inline-block;padding:0;color:#000;}
+.cke_uicolor_picker .yui-picker-panel{background:#e3e3e3;border-color:#888;}.cke_uicolor_picker .yui-picker-panel .hd{background-color:#ccc;font-size:100%;line-height:100%;border:1px solid #e3e3e3;font-weight:bold;overflow:hidden;padding:6px;color:#000;}.cke_uicolor_picker .yui-picker-panel .bd{background:#e8e8e8;margin:1px;height:200px;}.cke_uicolor_picker .yui-picker-panel .ft{background:#e8e8e8;margin:1px;padding:1px;}.cke_uicolor_picker .yui-picker{position:relative;}.cke_uicolor_picker .yui-picker-hue-thumb{cursor:default;width:18px;height:18px;top:-8px;left:-2px;z-index:9;position:absolute;}.cke_uicolor_picker .yui-picker-hue-bg{-moz-outline:none;outline:0 none;position:absolute;left:200px;height:183px;width:14px;background:url(hue_bg.png) no-repeat;top:4px;}.cke_uicolor_picker .yui-picker-bg{-moz-outline:none;outline:0 none;position:absolute;top:4px;left:4px;height:182px;width:182px;background-color:#F00;background-image:url(picker_mask.png);}*html .cke_uicolor_picker .yui-picker-bg{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='picker_mask.png',sizingMethod='scale');}.cke_uicolor_picker .yui-picker-mask{position:absolute;z-index:1;top:0;left:0;}.cke_uicolor_picker .yui-picker-thumb{cursor:default;width:11px;height:11px;z-index:9;position:absolute;top:-4px;left:-4px;}.cke_uicolor_picker .yui-picker-swatch{position:absolute;left:240px;top:4px;height:60px;width:55px;border:1px solid #888;}.cke_uicolor_picker .yui-picker-websafe-swatch{position:absolute;left:304px;top:4px;height:24px;width:24px;border:1px solid #888;}.cke_uicolor_picker .yui-picker-controls{position:absolute;top:72px;left:226px;font:1em monospace;}.cke_uicolor_picker .yui-picker-controls .hd{background:transparent;border-width:0!important;}.cke_uicolor_picker .yui-picker-controls .bd{height:100px;border-width:0!important;}.cke_uicolor_picker .yui-picker-controls ul{float:left;padding:0 2px 0 0;margin:0;}.cke_uicolor_picker .yui-picker-controls li{padding:2px;list-style:none;margin:0;}.cke_uicolor_picker .yui-picker-controls input{font-size:.85em;width:2.4em;}.cke_uicolor_picker .yui-picker-hex-controls{clear:both;padding:2px;}.cke_uicolor_picker .yui-picker-hex-controls input{width:4.6em;}.cke_uicolor_picker .yui-picker-controls a{font:1em arial,helvetica,clean,sans-serif;display:block;*display:inline-block;padding:0;color:#000;}
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/undo/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/undo/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/undo/plugin.js	(revision 5538)
@@ -115,11 +115,39 @@
 				editor.fire( 'saveSnapshot' );
 			};
+
+			/**
+			 * Update the undo stacks with any subsequent DOM changes after this call.
+			 * @name CKEDITOR.editor#updateUndo
+			 * @example
+			 * function()
+			 * {
+			 * editor.fire( 'updateSnapshot' );
+			 * ...
+			 *  // Ask to include subsequent (in this call stack) DOM changes to be
+			 * // considered as part of the first snapshot.
+			 * 	editor.fire( 'updateSnapshot' );
+			 * 	editor.document.body.append(...);
+			 * ...
+			 * }
+			 */
+			editor.on( 'updateSnapshot', function()
+			{
+				if ( undoManager.currentImage && new Image( editor ).equals( undoManager.currentImage ) )
+					setTimeout( function () { undoManager.update(); }, 0 );
+			});
 		}
 	});
 
-	// Gets a snapshot image which represent the current document status.
-	function Image( editor )
+	CKEDITOR.plugins.undo = {};
+
+	/**
+	 * Undo snapshot which represents the current document status.
+	 * @name CKEDITOR.plugins.undo.Image
+	 * @param editor The editor instance on which the image is created.
+	 */
+	var Image = CKEDITOR.plugins.undo.Image = function( editor )
 	{
-		var contents	= editor.getSnapshot(),
+		this.editor = editor;
+		var contents = editor.getSnapshot(),
 			selection	= contents && editor.getSelection();
 
@@ -129,5 +157,5 @@
 		this.contents	= contents;
 		this.bookmarks	= selection && selection.createBookmarks2( true );
-	}
+	};
 
 	// Attributes that browser may changing them when setting via innerHTML.
@@ -138,4 +166,5 @@
 		equals : function( otherImage, contentOnly )
 		{
+
 			var thisContents = this.contents,
 				otherContents = otherImage.contents;
@@ -398,6 +427,5 @@
 			// content, since actualy content may differ from
 			// the original snapshot due to dom change. (#4622)
-			this.snapshots.splice( this.index, 1, ( this.currentImage =  new Image( this.editor ) ) );
-
+			this.update();
 			this.fireChange();
 		},
@@ -498,4 +526,12 @@
 
 			return false;
+		},
+
+		/**
+		 * Update the last snapshot of the undo stack with the current editor content.
+		 */
+		update : function()
+		{
+			this.snapshots.splice( this.index, 1, ( this.currentImage = new Image( this.editor ) ) );
 		}
 	};
Index: /CKEditor/branches/versions/3.2.x/_source/plugins/wysiwygarea/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/plugins/wysiwygarea/plugin.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/plugins/wysiwygarea/plugin.js	(revision 5538)
@@ -171,4 +171,11 @@
 	}
 
+	function isBlankParagraph( block )
+	{
+		return block.getOuterHtml().match( emptyParagraphRegexp );
+	}
+
+	isNotWhitespace = CKEDITOR.dom.walker.whitespaces( true );
+
 	/**
 	 *  Auto-fixing block-less content by wrapping paragraph (#3190), prevent
@@ -192,4 +199,5 @@
 			 && !path.block )
 		{
+			editor.fire( 'updateSnapshot' );
 			restoreDirty( editor );
 			CKEDITOR.env.ie && restoreSelection( selection );
@@ -205,7 +213,7 @@
 			}
 
-			// If the fixed block is blank and already followed by a exitable
-			// block, we should revert the fix. (#3684)
-			if ( fixedBlock.getOuterHtml().match( emptyParagraphRegexp ) )
+			// If the fixed block is actually blank and is already followed by an exitable blank
+			// block, we should revert the fix and move into the existed one. (#3684)
+			if ( isBlankParagraph( fixedBlock ) )
 			{
 				var previousElement = fixedBlock.getPrevious( isNotWhitespace ),
@@ -214,8 +222,10 @@
 				if ( previousElement && previousElement.getName
 					 && !( previousElement.getName() in nonExitableElementNames )
+					 && isBlankParagraph( previousElement )
 					 && range.moveToElementEditStart( previousElement )
 					 || nextElement && nextElement.getName
-					   && !( nextElement.getName() in nonExitableElementNames )
-					   && range.moveToElementEditStart( nextElement ) )
+						&& !( nextElement.getName() in nonExitableElementNames )
+						&& isBlankParagraph( nextElement )
+						&& range.moveToElementEditStart( nextElement ) )
 				{
 					fixedBlock.remove();
@@ -246,4 +256,5 @@
 		if ( walker.previous() )
 		{
+			editor.fire( 'updateSnapshot' );
 			restoreDirty( editor );
 			CKEDITOR.env.ie && restoreSelection( selection );
@@ -271,4 +282,5 @@
 			var frameLabel = editor.lang.editorTitle.replace( '%1', editor.name );
 
+			var contentDomReadyHandler;
 			editor.on( 'editingBlockReady', function()
 				{
@@ -290,11 +302,4 @@
 							iframe.remove();
 
-						frameLoaded = 0;
-
-						var setDataFn = !CKEDITOR.env.gecko && CKEDITOR.tools.addFunction( function( doc )
-							{
-								CKEDITOR.tools.removeFunction( setDataFn );
-								doc.write( data );
-							});
 
 						var srcScript =
@@ -304,6 +309,4 @@
 							// call document.open().
 							( isCustomDomain ? ( 'document.domain="' + document.domain + '";' ) : '' ) +
-
-							( ( 'parent.CKEDITOR.tools.callFunction(' + setDataFn + ',document);' ) ) +
 
 							'document.close();';
@@ -313,7 +316,8 @@
   							' frameBorder="0"' +
   							' title="' + frameLabel + '"' +
-							// With FF, the 'src' attribute should be left empty to
+							// With IE, the custom domain has to be taken care at first,
+							// for other browers, the 'src' attribute should be left empty to
 							// trigger iframe's 'load' event.
-  							' src="' + ( CKEDITOR.env.gecko ? '' : 'javascript:void(function(){' + encodeURIComponent( srcScript ) + '}())' ) + '"' +
+  							' src="' + ( CKEDITOR.env.ie ? 'javascript:void(function(){' + encodeURIComponent( srcScript ) + '}())' : '' ) + '"' +
 							' tabIndex="' + editor.tabIndex + '"' +
   							' allowTransparency="true"' +
@@ -321,11 +325,13 @@
 
 						// With FF, it's better to load the data on iframe.load. (#3894,#4058)
-						CKEDITOR.env.gecko && iframe.on( 'load', function( ev )
-							{
+						iframe.on( 'load', function( ev )
+							{
+								frameLoaded = 1;
 								ev.removeListener();
 
 								var doc = iframe.getFrameDocument().$;
 
-								doc.open();
+								// Don't leave any history log in IE. (#5657)
+								doc.open( "text/html","replace" );
 								doc.write( data );
 								doc.close();
@@ -337,16 +343,17 @@
 					// The script that launches the bootstrap logic on 'domReady', so the document
 					// is fully editable even before the editing iframe is fully loaded (#4455).
+					contentDomReadyHandler = CKEDITOR.tools.addFunction( contentDomReady );
 					var activationScript =
 						'<script id="cke_actscrpt" type="text/javascript" cke_temp="1">' +
 							( isCustomDomain ? ( 'document.domain="' + document.domain + '";' ) : '' ) +
-							'parent.CKEDITOR._["contentDomReady' + editor.name + '"]( window );' +
+							'window.parent.CKEDITOR.tools.callFunction( ' + contentDomReadyHandler + ', window );' +
 						'</script>';
 
 					// Editing area bootstrap code.
-					var contentDomReady = function( domWindow )
+					function contentDomReady( domWindow )
 					{
-						if ( frameLoaded )
+						if ( !frameLoaded )
 							return;
-						frameLoaded = 1;
+						frameLoaded = 0;
 
 						editor.fire( 'ariaWidget', iframe );
@@ -358,6 +365,4 @@
 						var script = domDocument.getElementById( "cke_actscrpt" );
 						script.parentNode.removeChild( script );
-
-						delete CKEDITOR._[ 'contentDomReady' + editor.name ];
 
 						body.spellcheck = !editor.config.disableNativeSpellChecker;
@@ -375,5 +380,30 @@
 						}
 						else
+						{
+							// Gecko need a key event to 'wake up' the editing
+							// ability when document is empty.(#3864)
+							if ( CKEDITOR.env.gecko && !body.childNodes.length )
+							{
+								setTimeout( function()
+								{
+									restoreDirty( editor );
+
+									// Simulating keyboard character input by dispatching a keydown of white-space text.
+									var keyEventSimulate = domDocument.$.createEvent( "KeyEvents" );
+									keyEventSimulate.initKeyEvent( 'keypress', true, true, domWindow.$, false,
+										false, false, false, 0, 32 );
+									domDocument.$.dispatchEvent( keyEventSimulate );
+
+									// Restore the original document status by placing the cursor before a bogus br created (#5021).
+									domDocument.createElement( 'br', { attributes: { '_moz_editor_bogus_node' : 'TRUE', '_moz_dirty' : "" } } )
+										.replace( domDocument.getBody().getFirst() );
+									var nativeRange = new CKEDITOR.dom.range( domDocument );
+									nativeRange.setStartAt( new CKEDITOR.dom.element( body ) , CKEDITOR.POSITION_AFTER_START );
+									nativeRange.select();
+								}, 0 );
+							}
+
 							domDocument.designMode = 'on';
+						}
 
 						// IE, Opera and Safari may not support it and throw
@@ -440,31 +470,4 @@
 						focusTarget.on( 'focus', function()
 							{
-								// Gecko need a key event to 'wake up' the editing
-								// ability when document is empty.(#3864)
-								if ( CKEDITOR.env.gecko )
-								{
-									var first = body;
-									while ( first.firstChild )
-										first = first.firstChild;
-
-									if ( !first.nextSibling
-										&& ( 'BR' == first.tagName )
-										&& first.hasAttribute( '_moz_editor_bogus_node' ) )
-									{
-										restoreDirty( editor );
-										var keyEventSimulate = domDocument.$.createEvent( "KeyEvents" );
-										keyEventSimulate.initKeyEvent( 'keypress', true, true, domWindow.$, false,
-											false, false, false, 0, 32 );
-										domDocument.$.dispatchEvent( keyEventSimulate );
-										var bogusText = domDocument.getBody().getFirst() ;
-										// Compensate the line maintaining <br> if enterMode is not block.
-										if ( editor.config.enterMode == CKEDITOR.ENTER_BR )
-											domDocument.createElement( 'br', { attributes: { '_moz_dirty' : "" } } )
-												.replace( bogusText );
-										else
-											bogusText.remove();
-									}
-								}
-
 								editor.focusManager.focus();
 							});
@@ -574,5 +577,5 @@
 							},
 							0 );
-					};
+					}
 
 					editor.addMode( 'wysiwyg',
@@ -644,4 +647,6 @@
 									if ( !(/<head[\s|>]/).test( data ) )
 										data = data.replace( /<html[^>]*>/, '$&<head><title></title></head>' ) ;
+									else if ( !(/<title[\s|>]/).test( data ) )
+										data = data.replace( /<head[^>]*>/, '$&<title></title>' ) ;
 
 									// The base must be the first tag in the HEAD, e.g. to get relative
@@ -663,5 +668,6 @@
 									data =
 										config.docType +
-										'<html dir="' + config.contentsLangDirection + '">' +
+										'<html dir="' + config.contentsLangDirection + '"' +
+											' lang="' + ( config.contentsLanguage || editor.langCode ) + '">' +
 										'<title>' + frameLabel + '</title>' +
 										'<head>' +
@@ -678,5 +684,4 @@
 								data += activationScript;
 
-								CKEDITOR._[ 'contentDomReady' + editor.name ] = contentDomReady;
 
 								// The iframe is recreated on each call of setData, so we need to clear DOM objects
@@ -788,4 +793,5 @@
 				editor.on( 'destroy', function()
 				{
+					CKEDITOR.tools.removeFunction( contentDomReadyHandler );
 					ieFocusGrabber.clearCustomData();
 				} );
@@ -805,22 +811,19 @@
 			else
 			{
-				body.setAttribute( 'onpageshow', body.getAttribute( 'onpageshow' )
-						+ ';event.persisted && CKEDITOR.tools.callFunction(' +
-						CKEDITOR.tools.addFunction( function()
-						{
-							var allInstances = CKEDITOR.instances,
-								editor,
-								doc;
-							for ( var i in allInstances )
-							{
-								editor = allInstances[ i ];
-								doc = editor.document;
-								if ( doc )
-								{
-									doc.$.designMode = 'off';
-									doc.$.designMode = 'on';
-								}
-							}
-						} ) + ')' );
+				var currentHandler = body.getAttribute( 'onpageshow' );
+				body.setAttribute( 'onpageshow', ( currentHandler ? currentHandler + ';' : '') +
+							'event.persisted && (function(){' +
+								'var allInstances = CKEDITOR.instances, editor, doc;' +
+								'for ( var i in allInstances )' +
+								'{' +
+								'	editor = allInstances[ i ];' +
+								'	doc = editor.document;' +
+								'	if ( doc )' +
+								'	{' +
+								'		doc.$.designMode = "off";' +
+								'		doc.$.designMode = "on";' +
+								'	}' +
+								'}' +
+						'})();' );
 			}
 		} )();
Index: /CKEditor/branches/versions/3.2.x/_source/skins/kama/dialog.css
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/skins/kama/dialog.css	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/skins/kama/dialog.css	(revision 5538)
@@ -66,10 +66,4 @@
 {
 	margin-bottom: 10px;
-}
-
-.cke_skin_kama .cke_browser_ie.cke_rtl .cke_dialog_title
-{
-	position: static !important;
-	unicode-bidi: bidi-override;
 }
 
@@ -686,5 +680,5 @@
 }
 
-.cke_skin_kama .cke_dialog  #ImagePreviewBox
+.cke_skin_kama .cke_dialog  .ImagePreviewBox
 {
 	border : 2px ridge black;
@@ -696,5 +690,5 @@
 }
 
-.cke_skin_kama .cke_dialog #ImagePreviewBox table td {
+.cke_skin_kama .cke_dialog .ImagePreviewBox table td {
 	white-space: normal;
 }
@@ -706,5 +700,5 @@
 }
 
-.cke_skin_kama .cke_dialog  #ImagePreviewLoader
+.cke_skin_kama .cke_dialog  .ImagePreviewLoader
 {
 	position: absolute;
@@ -721,5 +715,5 @@
 }
 
-.cke_skin_kama .cke_dialog  #FlashPreviewBox
+.cke_skin_kama .cke_dialog  .FlashPreviewBox
 {
 	white-space : normal;
Index: /CKEditor/branches/versions/3.2.x/_source/skins/kama/mainui.css
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/skins/kama/mainui.css	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/skins/kama/mainui.css	(revision 5538)
@@ -134,4 +134,16 @@
 }
 
+.cke_skin_kama .cke_resizer_horizontal,
+.cke_skin_kama .cke_rtl .cke_resizer_horizontal
+{
+	cursor: e-resize;
+}
+
+.cke_skin_kama .cke_resizer_vertical,
+.cke_skin_kama .cke_rtl .cke_resizer_vertical
+{
+	cursor: n-resize;
+}
+
 .cke_skin_kama .cke_maximized .cke_resizer
 {
Index: /CKEditor/branches/versions/3.2.x/_source/skins/kama/templates.css
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/skins/kama/templates.css	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/skins/kama/templates.css	(revision 5538)
@@ -57,6 +57,20 @@
 	border: #ff9933 1px solid;
 	background-color: #fffacd;
+}
+
+.cke_skin_kama .cke_tpl_list a:active *,
+.cke_skin_kama .cke_tpl_list a:hover *,
+.cke_skin_kama .cke_tpl_list a:focus *
+{
 	cursor: pointer;
-	cursor: hand;
+}
+
+/* IE6 contextual selectors childs won't get :hover transition until,
+	the hover style of the link itself contains certain CSS declarations.*/
+.cke_skin_kama .cke_browser_ie6 .cke_tpl_list a:active,
+.cke_skin_kama .cke_browser_ie6 .cke_tpl_list a:hover,
+.cke_skin_kama .cke_browser_ie6 .cke_tpl_list a:focus
+{
+	background-position: 0 0;
 }
 
@@ -68,14 +82,4 @@
 }
 
-/*
- * Fix property 'cursor' doesn't inherit on table
- */
-.cke_skin_kama .cke_tpl_list a:active *,
-.cke_skin_kama .cke_tpl_list a:hover *,
-.cke_skin_kama .cke_tpl_list a:focus *
-{
-	cursor: inherit;
-}
-
 .cke_skin_kama .cke_tpl_empty, .cke_tpl_loading
 {
Index: /CKEditor/branches/versions/3.2.x/_source/skins/kama/toolbar.css
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/skins/kama/toolbar.css	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/skins/kama/toolbar.css	(revision 5538)
@@ -129,4 +129,10 @@
 }
 
+.cke_skin_kama .cke_toolgroup
+{
+	display: block;
+	height: 22px;
+}
+
 .cke_skin_kama .cke_button a,
 .cke_skin_kama .cke_button a:hover,
@@ -378,17 +384,4 @@
 }
 
-/* IE8 strict button valign correction */
-.cke_skin_kama .cke_browser_ie8 .cke_button .cke_label
-{
-	vertical-align: top;
-}
-
-.cke_skin_kama .cke_browser_iequirks.cke_browser_ie8 .cke_button .cke_label
-{
-	/* revert previous */
-	vertical-align: middle;
-}
-/* END IE8 strict button valign correction */
-
 /* Fix cursor shape consistency on toolbar combos (#4031) */
 .cke_skin_kama .cke_browser_ie .cke_rcombo,
Index: /CKEditor/branches/versions/3.2.x/_source/skins/office2003/dialog.css
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/skins/office2003/dialog.css	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/skins/office2003/dialog.css	(revision 5538)
@@ -611,5 +611,5 @@
 }
 
-.cke_skin_office2003 .cke_dialog  #ImagePreviewBox
+.cke_skin_office2003 .cke_dialog  .ImagePreviewBox
 {
 	border : 2px ridge black;
@@ -621,5 +621,5 @@
 }
 
-.cke_skin_office2003 .cke_dialog #ImagePreviewBox table td {
+.cke_skin_office2003 .cke_dialog .ImagePreviewBox table td {
 	white-space: normal;
 }
@@ -631,5 +631,5 @@
 }
 
-.cke_skin_office2003 .cke_dialog  #ImagePreviewLoader
+.cke_skin_office2003 .cke_dialog  .ImagePreviewLoader
 {
 	position: absolute;
@@ -646,5 +646,5 @@
 }
 
-.cke_skin_office2003 .cke_dialog  #FlashPreviewBox
+.cke_skin_office2003 .cke_dialog  .FlashPreviewBox
 {
 	white-space : normal;
Index: /CKEditor/branches/versions/3.2.x/_source/skins/office2003/mainui.css
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/skins/office2003/mainui.css	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/skins/office2003/mainui.css	(revision 5538)
@@ -94,9 +94,4 @@
 }
 
-.cke_skin_office2003 .cke_maximized .cke_resizer
-{
-	display: none;
-}
-
 .cke_skin_office2003 .cke_rtl .cke_resizer
 {
@@ -105,4 +100,21 @@
 	background-position: 0 -1115px;
 	float: left;
+}
+
+.cke_skin_office2003 .cke_resizer_horizontal,
+.cke_skin_office2003 .cke_rtl .cke_resizer_horizontal
+{
+	cursor: e-resize;
+}
+
+.cke_skin_office2003 .cke_resizer_vertical,
+.cke_skin_office2003 .cke_rtl .cke_resizer_vertical
+{
+	cursor: n-resize;
+}
+
+.cke_skin_office2003 .cke_maximized .cke_resizer
+{
+	display: none;
 }
 
Index: /CKEditor/branches/versions/3.2.x/_source/skins/office2003/templates.css
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/skins/office2003/templates.css	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/skins/office2003/templates.css	(revision 5538)
@@ -56,6 +56,20 @@
 	border: #ff9933 1px solid !important;
 	background-color: #fffacd !important;
+}
+
+.cke_skin_office2003 .cke_tpl_list a:active *,
+.cke_skin_office2003 .cke_tpl_list a:hover *,
+.cke_skin_office2003 .cke_tpl_list a:focus *
+{
 	cursor: pointer;
-	cursor: hand;
+}
+
+/* IE6 contextual selectors childs won't get :hover transition until,
+	the hover style of the link itself contains certain CSS declarations.*/
+.cke_skin_office2003 .cke_browser_ie6 .cke_tpl_list a:active,
+.cke_skin_office2003 .cke_browser_ie6 .cke_tpl_list a:hover,
+.cke_skin_office2003 .cke_browser_ie6 .cke_tpl_list a:focus
+{
+	background-position: 0 0;
 }
 
@@ -67,12 +81,4 @@
 }
 
-/*
- * Fix property 'cursor' doesn't inherit on table
- */
-.cke_skin_office2003 .cke_tpl_hover *
-{
-	cursor: inherit;
-}
-
 .cke_skin_office2003 .cke_tpl_empty, .cke_tpl_loading
 {
Index: /CKEditor/branches/versions/3.2.x/_source/skins/office2003/toolbar.css
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/skins/office2003/toolbar.css	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/skins/office2003/toolbar.css	(revision 5538)
@@ -313,5 +313,5 @@
 	padding-left: 3px;
 	cursor: default;
-
+	vertical-align:middle;
 	_background-image: url(images/sprites_ie6.png);
 	_background-position: 0 -970px;
Index: /CKEditor/branches/versions/3.2.x/_source/skins/v2/dialog.css
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/skins/v2/dialog.css	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/skins/v2/dialog.css	(revision 5538)
@@ -613,5 +613,5 @@
 }
 
-.cke_skin_v2 .cke_dialog  #ImagePreviewBox
+.cke_skin_v2 .cke_dialog  .ImagePreviewBox
 {
 	border : 2px ridge black;
@@ -623,5 +623,5 @@
 }
 
-.cke_skin_v2 .cke_dialog #ImagePreviewBox table td {
+.cke_skin_v2 .cke_dialog .ImagePreviewBox table td {
 	white-space: normal;
 }
@@ -633,5 +633,5 @@
 }
 
-.cke_skin_v2 .cke_dialog  #ImagePreviewLoader
+.cke_skin_v2 .cke_dialog  .ImagePreviewLoader
 {
 	position: absolute;
@@ -648,5 +648,5 @@
 }
 
-.cke_skin_v2 .cke_dialog  #FlashPreviewBox
+.cke_skin_v2 .cke_dialog  .FlashPreviewBox
 {
 	white-space : normal;
Index: /CKEditor/branches/versions/3.2.x/_source/skins/v2/mainui.css
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/skins/v2/mainui.css	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/skins/v2/mainui.css	(revision 5538)
@@ -111,4 +111,16 @@
 }
 
+.cke_skin_v2 .cke_resizer_horizontal,
+.cke_skin_v2 .cke_rtl .cke_resizer_horizontal
+{
+	cursor: e-resize;
+}
+
+.cke_skin_v2 .cke_resizer_vertical,
+.cke_skin_v2 .cke_rtl .cke_resizer_vertical
+{
+	cursor: n-resize;
+}
+
 .cke_skin_v2 .cke_maximized .cke_resizer
 {
Index: /CKEditor/branches/versions/3.2.x/_source/skins/v2/templates.css
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/skins/v2/templates.css	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/skins/v2/templates.css	(revision 5538)
@@ -56,6 +56,20 @@
 	border: #ff9933 1px solid !important;
 	background-color: #fffacd !important;
+}
+
+.cke_skin_v2 .cke_tpl_list a:active *,
+.cke_skin_v2 .cke_tpl_list a:hover *,
+.cke_skin_v2 .cke_tpl_list a:focus *
+{
 	cursor: pointer;
-	cursor: hand;
+}
+
+/* IE6 contextual selectors childs won't get :hover transition until,
+	the hover style of the link itself contains certain CSS declarations.*/
+.cke_skin_v2 .cke_browser_ie6 .cke_tpl_list a:active,
+.cke_skin_v2 .cke_browser_ie6 .cke_tpl_list a:hover,
+.cke_skin_v2 .cke_browser_ie6 .cke_tpl_list a:focus
+{
+	background-position: 0 0;
 }
 
@@ -67,12 +81,4 @@
 }
 
-/*
- * Fix property 'cursor' doesn't inherit on table
- */
-.cke_skin_v2 .cke_tpl_hover *
-{
-	cursor: inherit;
-}
-
 .cke_skin_v2 .cke_tpl_empty, .cke_tpl_loading
 {
Index: /CKEditor/branches/versions/3.2.x/_source/skins/v2/toolbar.css
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/skins/v2/toolbar.css	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/skins/v2/toolbar.css	(revision 5538)
@@ -286,4 +286,5 @@
 	display: none;
 	padding-left: 3px;
+	vertical-align:middle;
 }
 
Index: /CKEditor/branches/versions/3.2.x/_source/themes/default/theme.js
===================================================================
--- /CKEditor/branches/versions/3.2.x/_source/themes/default/theme.js	(revision 5537)
+++ /CKEditor/branches/versions/3.2.x/_source/themes/default/theme.js	(revision 5538)
@@ -127,7 +127,7 @@
 						'<span class="cke_wrapper cke_', editor.lang.dir, '" role="presentation">' +
 							'<table class="cke_editor" border="0" cellspacing="0" cellpadding="0" role="presentation"><tbody>' +
-								'<tr', topHtml		? '' : ' style="display:none"', '><td id="cke_top_'		, name, '" class="cke_top" role="presentation">'	, topHtml		, '</td></tr>' +
-								'<tr', contentsHtml	? '' : ' style="display:none"', '><td id="cke_contents_', name, '" class="cke_contents" style="height:', height, '" role="presentation">', contentsHtml, '</td></tr>' +
-								'<tr', bottomHtml	? '' : ' style="display:none"', '><td id="cke_bottom_'	, name, '" class="cke_bottom" role="presentation">'	, bottomHtml	, '</td></tr>' +
+								'<tr', topHtml		? '' : ' style="display:none"', ' role="presentation"><td id="cke_top_'		, name, '" class="cke_top" role="presentation">'	, topHtml		, '</td></tr>' +
+								'<tr', contentsHtml	? '' : ' style="display:none"', ' role="presentation"><td id="cke_contents_', name, '" class="cke_contents" style="height:', height, '" role="presentation">', contentsHtml, '</td></tr>' +
+								'<tr', bottomHtml	? '' : ' style="display:none"', ' role="presentation"><td id="cke_bottom_'	, name, '" class="cke_bottom" role="presentation">'	, bottomHtml	, '</td></tr>' +
 							'</tbody></table>' +
 							//Hide the container when loading skins, later restored by skin css.
Index: /CKEditor/branches/versions/3.2.x/ckeditor.asp
===================================================================
--- /CKEditor/branches/versions/3.2.x/ckeditor.asp	(revision 5538)
+++ /CKEditor/branches/versions/3.2.x/ckeditor.asp	(revision 5538)
@@ -0,0 +1,958 @@
+﻿<%
+ '
+ ' Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+ ' For licensing, see LICENSE.html or http://ckeditor.com/license
+
+' Shared variable for all instances ("static")
+dim CKEDITOR_initComplete
+dim CKEDITOR_returnedEvents
+
+ ''
+ ' \brief CKEditor class that can be used to create editor
+ ' instances in ASP pages on server side.
+ ' @see http://ckeditor.com
+ '
+ ' Sample usage:
+ ' @code
+ ' editor = new CKEditor
+ ' editor.editor "editor1", "<p>Initial value.</p>", empty, empty
+ ' @endcode
+
+Class CKEditor
+
+	''
+	' The version of %CKEditor.
+	private version
+
+	''
+	' A constant string unique for each release of %CKEditor.
+	private mTimeStamp
+
+	''
+	' URL to the %CKEditor installation directory (absolute or relative to document root).
+	' If not set, CKEditor will try to guess it's path.
+	'
+	' Example usage:
+	' @code
+	' editor.basePath = "/ckeditor/"
+	' @endcode
+	Public basePath
+
+	''
+	' A boolean variable indicating whether CKEditor has been initialized.
+	' Set it to true only if you have already included
+	' &lt;script&gt; tag loading ckeditor.js in your website.
+	Public initialized
+
+	''
+	' Boolean variable indicating whether created code should be printed out or returned by a function.
+	'
+	' Example 1: get the code creating %CKEditor instance and print it on a page with the "echo" function.
+	' @code
+	' editor = new CKEditor
+	' editor.returnOutput = true
+	' code = editor.editor("editor1", "<p>Initial value.</p>", empty, empty)
+	' response.write "<p>Editor 1:</p>"
+	' response.write code
+	' @endcode
+	Public returnOutput
+
+	''
+	' A Dictionary with textarea attributes.
+	'
+	' When %CKEditor is created with the editor() method, a HTML &lt;textarea&gt; element is created,
+	' it will be displayed to anyone with JavaScript disabled or with incompatible browser.
+	public textareaAttributes
+
+	''
+	' A string indicating the creation date of %CKEditor.
+	' Do not change it unless you want to force browsers to not use previously cached version of %CKEditor.
+	public timestamp
+
+	''
+	' A dictionary that holds the instance configuration.
+	private oInstanceConfig
+
+	''
+	' A dictionary that holds the configuration for all the instances.
+	private oAllInstancesConfig
+
+	''
+	' A dictionary that holds event listeners for the instance.
+	private oInstanceEvents
+
+	''
+	' A dictionary that holds event listeners for all the instances.
+	private oAllInstancesEvents
+
+	''
+	' A Dictionary that holds global event listeners (CKEDITOR object)
+	private oGlobalEvents
+
+
+	Private Sub Class_Initialize()
+		version = "%VERSION%"
+		timeStamp = "%TIMESTAMP%"
+		mTimeStamp = "%TIMESTAMP%"
+
+		Set oInstanceConfig = CreateObject("Scripting.Dictionary")
+		Set oAllInstancesConfig = CreateObject("Scripting.Dictionary")
+
+		Set oInstanceEvents = CreateObject("Scripting.Dictionary")
+		Set oAllInstancesEvents = CreateObject("Scripting.Dictionary")
+		Set oGlobalEvents = CreateObject("Scripting.Dictionary")
+
+		Set textareaAttributes = CreateObject("Scripting.Dictionary")
+		textareaAttributes.Add "rows", 8
+		textareaAttributes.Add "cols", 60
+	End Sub
+
+	''
+	 ' Creates a %CKEditor instance.
+	 ' In incompatible browsers %CKEditor will downgrade to plain HTML &lt;textarea&gt; element.
+	 '
+	 ' @param name (string) Name of the %CKEditor instance (this will be also the "name" attribute of textarea element).
+	 ' @param value (string) Initial value.
+	 '
+	 ' Example usage:
+	 ' @code
+	 ' set editor = New CKEditor
+	 ' editor.editor "field1", "<p>Initial value.</p>"
+	 ' @endcode
+	 '
+	 ' Advanced example:
+	 ' @code
+	 ' set editor = new CKEditor
+	 ' set config = CreateObject("Scripting.Dictionary")
+	 ' config.Add "toolbar", Array( _
+	 '	Array( "Source", "-", "Bold", "Italic", "Underline", "Strike" ), _
+	 '	Array( "Image", "Link", "Unlink", "Anchor" ) _
+	 ' )
+	 ' set events = CreateObject("Scripting.Dictionary")
+	 ' events.Add "instanceReady", "function (evt) { alert('Loaded second editor: ' + evt.editor.name );}"
+
+	 ' editor.editor "field1", "<p>Initial value.</p>", config, events
+	 ' @endcode
+	 '
+	public function editor(name, value)
+		dim attr, out, js, customConfig, extraConfig
+		dim attribute
+
+		attr = ""
+
+		for each attribute in textareaAttributes
+			attr = attr & " " &  attribute & "=""" & replace( textareaAttributes( attribute ), """", "&quot" ) & """"
+		next
+
+		out = "<textarea name=""" & name & """" & attr & ">" & Server.HtmlEncode(value) & "</textarea>" & vbcrlf
+
+		if not(initialized) then
+			out = out & init()
+		end if
+
+		set customConfig = configSettings()
+		js = returnGlobalEvents()
+
+		extraConfig = (new JSON)( empty, customConfig, false )
+		if extraConfig<>"" then extraConfig = ", " & extraConfig
+		js = js & "CKEDITOR.replace('" & name & "'" & extraConfig & ");"
+
+		out = out & script(js)
+
+		if not(returnOutput) then
+			response.write out
+			out = ""
+		end if
+
+		editor = out
+
+		oInstanceConfig.RemoveAll
+		oInstanceEvents.RemoveAll
+	end function
+
+	''
+	 ' Replaces a &lt;textarea&gt; with a %CKEditor instance.
+	 '
+	 ' @param id (string) The id or name of textarea element.
+	 '
+	 ' Example 1: adding %CKEditor to &lt;textarea name="article"&gt;&lt;/textarea&gt; element:
+	 ' @code
+	 ' set editor = New CKEditor
+	 ' editor.replace "article"
+	 ' @endcode
+	 '
+	public function replaceInstance(id)
+		dim out, js, customConfig, extraConfig
+
+		out = ""
+		if not(initialized) then
+			out = out & init()
+		end if
+
+		set customConfig = configSettings()
+		js = returnGlobalEvents()
+
+		extraConfig = (new JSON)( empty, customConfig, false )
+		if extraConfig<>"" then extraConfig = ", " & extraConfig
+		js = js & "CKEDITOR.replace('" & id & "'" & extraConfig & ");"
+
+		out = out & script(js)
+
+		if not(returnOutput) then
+			response.write out
+			out = ""
+		end if
+
+		replaceInstance = out
+
+		oInstanceConfig.RemoveAll
+		oInstanceEvents.RemoveAll
+	end function
+
+	''
+	 ' Replace all &lt;textarea&gt; elements available in the document with editor instances.
+	 '
+	 ' @param className (string) If set, replace all textareas with class className in the page.
+	 '
+	 ' Example 1: replace all &lt;textarea&gt; elements in the page.
+	 ' @code
+	 ' editor = new CKEditor
+	 ' editor.replaceAll empty
+	 ' @endcode
+	 '
+	 ' Example 2: replace all &lt;textarea class="myClassName"&gt; elements in the page.
+	 ' @code
+	 ' editor = new CKEditor
+	 ' editor.replaceAll 'myClassName'
+	 ' @endcode
+	 '
+	function replaceAll(className)
+		dim out, js, customConfig
+
+		out = ""
+		if not(initialized) then
+			out = out & init()
+		end if
+
+		set customConfig = configSettings()
+		js = returnGlobalEvents()
+
+		if (customConfig.Count=0) then
+			if (isEmpty(className)) then
+				js = js & "CKEDITOR.replaceAll();"
+			else
+				js = js & "CKEDITOR.replaceAll('" & className & "');"
+			end if
+		else
+			js = js & "CKEDITOR.replaceAll( function(textarea, config) {\n"
+			if not(isEmpty(className)) then
+				js = js & "	var classRegex = new RegExp('(?:^| )' + '" & className & "' + '(?:$| )');\n"
+				js = js & "	if (!classRegex.test(textarea.className))\n"
+				js = js & "		return false;\n"
+			end if
+			js = js & "	CKEDITOR.tools.extend(config, " & (new JSON)( empty, customConfig, false ) & ", true);"
+			js = js & "} );"
+		end if
+
+		out = out & script(js)
+
+		if not(returnOutput) then
+			response.write out
+			out = ""
+		end if
+
+		replaceAll = out
+
+		oInstanceConfig.RemoveAll
+		oInstanceEvents.RemoveAll
+	end function
+
+
+	''
+	' A Dictionary that holds the %CKEditor configuration for all instances
+	' For the list of available options, see http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html
+	'
+	' Example usage:
+	' @code
+	' editor.config("height") = 400
+	' // Use @@ at the beggining of a string to ouput it without surrounding quotes.
+	' editor.config("width") = "@@screen.width * 0.8"
+	' @endcode
+	Public Property Let Config( configKey, configValue )
+		oAllInstancesConfig.Add configKey, configValue
+	End Property
+
+	''
+	' Configuration options for the next instance
+	'
+	Public Property Let instanceConfig( configKey, configValue )
+		oInstanceConfig.Add configKey, configValue
+	End Property
+
+	''
+	 ' Adds event listener.
+	 ' Events are fired by %CKEditor in various situations.
+	 '
+	 ' @param eventName (string) Event name.
+	 ' @param javascriptCode (string) Javascript anonymous function or function name.
+	 '
+	 ' Example usage:
+	 ' @code
+	 ' editor.addEventHandler  "instanceReady", "function (ev) { " & _
+	 '    " alert('Loaded: ' + ev.editor.name); " & _
+	 ' "}"
+	 ' @endcode
+	 '
+	public sub addEventHandler(eventName, javascriptCode)
+		if not(oAllInstancesEvents.Exists( eventName ) ) then
+			oAllInstancesEvents.Add eventName, Array()
+		end if
+
+		dim listeners, size
+		listeners = oAllInstancesEvents( eventName )
+		size = ubound(listeners) + 1
+		redim preserve listeners(size)
+		listeners(size) = javascriptCode
+
+		oAllInstancesEvents( eventName ) = listeners
+'		'' Avoid duplicates. fixme...
+'		if (!in_array($javascriptCode, $this->_events[$event])) {
+'			$this->_events[$event][] = $javascriptCode;
+'		}
+	end sub
+
+	''
+	 ' Clear registered event handlers.
+	 ' Note: this function will have no effect on already created editor instances.
+	 '
+	 ' @param eventName (string) Event name, if set to 'empty' all event handlers will be removed.
+	 '
+	public sub clearEventHandlers( eventName )
+		if not(isEmpty( eventName )) then
+			oAllInstancesEvents.Remove eventName
+		else
+			oAllInstancesEvents.RemoveAll
+		end if
+	end sub
+
+
+	''
+	 ' Adds event listener only for the next instance.
+	 ' Events are fired by %CKEditor in various situations.
+	 '
+	 ' @param eventName (string) Event name.
+	 ' @param javascriptCode (string) Javascript anonymous function or function name.
+	 '
+	 ' Example usage:
+	 ' @code
+	 ' editor.addInstanceEventHandler  "instanceReady", "function (ev) { " & _
+	 '    " alert('Loaded: ' + ev.editor.name); " & _
+	 ' "}"
+	 ' @endcode
+	 '
+	public sub addInstanceEventHandler(eventName, javascriptCode)
+		if not(oInstanceEvents.Exists( eventName ) ) then
+			oInstanceEvents.Add eventName, Array()
+		end if
+
+		dim listeners, size
+		listeners = oInstanceEvents( eventName )
+		size = ubound(listeners) + 1
+		redim preserve listeners(size)
+		listeners(size) = javascriptCode
+
+		oInstanceEvents( eventName ) = listeners
+'		'' Avoid duplicates. fixme...
+'		if (!in_array($javascriptCode, $this->_events[$event])) {
+'			$this->_events[$event][] = $javascriptCode;
+'		}
+	end sub
+
+	''
+	 ' Clear registered event handlers.
+	 ' Note: this function will have no effect on already created editor instances.
+	 '
+	 ' @param eventName (string) Event name, if set to 'empty' all event handlers will be removed.
+	 '
+	public sub clearInstanceEventHandlers( eventName )
+		if not(isEmpty( eventName )) then
+			oInstanceEvents.Remove eventName
+		else
+			oInstanceEvents.RemoveAll
+		end if
+	end sub
+
+	''
+	 ' Adds global event listener.
+	 '
+	 ' @param event (string) Event name.
+	 ' @param javascriptCode (string) Javascript anonymous function or function name.
+	 '
+	 ' Example usage:
+	 ' @code
+	 ' editor.addGlobalEventHandler "dialogDefinition", "function (ev) { " & _
+	 '   "  alert('Loading dialog: ' + ev.data.name); " & _
+	 ' "}"
+	 ' @endcode
+	 '
+	public sub addGlobalEventHandler( eventName, javascriptCode)
+		if not(oGlobalEvents.Exists( eventName ) ) then
+			oGlobalEvents.Add eventName, Array()
+		end if
+
+		dim listeners, size
+		listeners = oGlobalEvents( eventName )
+		size = ubound(listeners) + 1
+		redim preserve listeners(size)
+		listeners(size) = javascriptCode
+
+		oGlobalEvents( eventName ) = listeners
+
+'		// Avoid duplicates.
+'		if (!in_array($javascriptCode, $this->_globalEvents[$event])) {
+'			$this->_globalEvents[$event][] = $javascriptCode;
+'		}
+	end sub
+
+	''
+	 ' Clear registered global event handlers.
+	 ' Note: this function will have no effect if the event handler has been already printed/returned.
+	 '
+	 ' @param eventName (string) Event name, if set to 'empty' all event handlers will be removed .
+	 '
+	public sub clearGlobalEventHandlers( eventName )
+		if not(isEmpty( eventName )) then
+			oGlobalEvents.Remove eventName
+		else
+			oGlobalEvents.RemoveAll
+		end if
+	end sub
+
+	''
+	 ' Prints javascript code.
+	 '
+	 ' @param string js
+	 '
+	private function script(js)
+		script = "<script type=""text/javascript"">" & _
+			"//<![CDATA[" & vbcrlf & _
+			js & vbcrlf & _
+			"//]]>" & _
+			"</script>" & vbcrlf
+	end function
+
+	''
+	 ' Returns the configuration array (global and instance specific settings are merged into one array).
+	 '
+	 ' @param instanceConfig (Dictionary) The specific configurations to apply to editor instance.
+	 ' @param instanceEvents (Dictionary) Event listeners for editor instance.
+	 '
+	private function configSettings()
+		dim mergedConfig, mergedEvents
+		set mergedConfig = cloneDictionary(oAllInstancesConfig)
+		set mergedEvents = cloneDictionary(oAllInstancesEvents)
+
+		if not(isEmpty(oInstanceConfig)) then
+			set mergedConfig = mergeDictionary(mergedConfig, oInstanceConfig)
+		end if
+
+		if not(isEmpty(oInstanceEvents)) then
+			for each eventName in oInstanceEvents
+				code = oInstanceEvents( eventName )
+
+				if not(mergedEvents.Exists( eventName)) then
+					mergedEvents.Add eventName, code
+				else
+
+					dim listeners, size
+					listeners = mergedEvents( eventName )
+					size = ubound(listeners)
+					if isArray( code ) then
+						addedCount = ubound(code)
+						redim preserve listeners( size + addedCount + 1 )
+						for i = 0 to addedCount
+							listeners(size + i + 1) = code (i)
+						next
+					else
+						size = size + 1
+						redim preserve listeners(size)
+						listeners(size) = code
+					end if
+
+					mergedEvents( eventName ) = listeners
+				end if
+			next
+
+		end if
+
+		dim i, eventName, handlers, configON, ub, code
+
+		if mergedEvents.Count>0 then
+			if mergedConfig.Exists( "on" ) then
+				set configON = mergedConfig.items( "on" )
+			else
+				set configON = CreateObject("Scripting.Dictionary")
+				mergedConfig.Add "on", configOn
+			end if
+
+			for each eventName in mergedEvents
+				handlers = mergedEvents( eventName )
+				code = ""
+
+				if isArray(handlers) then
+					uB = ubound(handlers)
+					if (uB = 0) then
+						code = handlers(0)
+					else
+						code = "function (ev) {"
+						for i=0 to uB
+							code = code & "(" & handlers(i) & ")(ev);"
+						next
+						code = code & "}"
+					end if
+				else
+					code = handlers
+				end if
+				' Using @@ at the beggining to signal JSON that we don't want this quoted.
+				configON.Add eventName, "@@" & code
+			next
+
+'			set mergedConfig.Item("on") = configOn
+		end if
+
+		set configSettings = mergedConfig
+	end function
+
+	 ''
+		' Returns a copy of a scripting.dictionary object
+		'
+	private function cloneDictionary( base )
+		dim newOne, tmpKey
+
+		Set newOne = CreateObject("Scripting.Dictionary")
+		for each tmpKey in base
+			newOne.Add tmpKey , base( tmpKey )
+		next
+
+		set cloneDictionary = newOne
+	end function
+
+	 ''
+		' Combines two scripting.dictionary objects
+		' The base object isn't modified, and extra gets all the properties in base
+		'
+	private function mergeDictionary(base, extra)
+		dim newOne, tmpKey
+
+		for each tmpKey in base
+			if not(extra.Exists( tmpKey )) then
+				extra.Add tmpKey, base( tmpKey )
+			end if
+		next
+
+		set mergeDictionary = extra
+	end function
+
+	''
+	 ' Return global event handlers.
+	 '
+	private function returnGlobalEvents()
+		dim out, eventName, handlers
+		dim handlersForEvent, handler, code, i
+		out = ""
+
+		if (isempty(CKEDITOR_returnedEvents)) then
+			set CKEDITOR_returnedEvents = CreateObject("Scripting.Dictionary")
+		end if
+
+		for each eventName in oGlobalEvents
+			handlers = oGlobalEvents( eventName )
+
+			if not(CKEDITOR_returnedEvents.Exists(eventName)) then
+				CKEDITOR_returnedEvents.Add eventName, CreateObject("Scripting.Dictionary")
+			end if
+
+				set handlersForEvent = CKEDITOR_returnedEvents.Item( eventName )
+
+				' handlersForEvent is another dictionary
+				' and handlers is an array
+
+				for i = 0 to ubound(handlers)
+					code = handlers( i )
+
+					' Return only new events
+					if not(handlersForEvent.Exists( code )) then
+						if (out <> "") then out = out & vbcrlf
+						out = out & "CKEDITOR.on('" &  eventName & "', " & code & ");"
+						handlersForEvent.Add code, code
+					end if
+				next
+		next
+
+		returnGlobalEvents = out
+	end function
+
+	''
+	 ' Initializes CKEditor (executed only once).
+	 '
+	private function init()
+		dim out, args, path, extraCode, file
+		out = ""
+
+		if (CKEDITOR_initComplete) then
+			init = ""
+			exit function
+		end if
+
+		if (initialized) then
+			CKEDITOR_initComplete = true
+			init = ""
+			exit function
+		end if
+
+		args = ""
+		path = ckeditorPath()
+
+		if (timestamp <> "") and (timestamp <> "%" & "TIMESTAMP%") then
+			args = "?t=" & timestamp
+		end if
+
+		' Skip relative paths...
+		if (instr(path, "..") <> 0) then
+			out = out & script("window.CKEDITOR_BASEPATH='" &  path  & "';")
+		end if
+
+		out = out & "<scr" & "ipt type=""text/javascript"" src=""" & path & ckeditorFileName() & args & """></scr" & "ipt>" & vbcrlf
+
+		extraCode = ""
+		if (timestamp <> mTimeStamp) then
+			extraCode = extraCode & "CKEDITOR.timestamp = '" & timestamp & "';"
+		end if
+		if (extraCode <> "") then
+			out = out & script(extraCode)
+		end if
+
+		CKEDITOR_initComplete = true
+		initialized = true
+
+		init = out
+	end function
+
+	private function ckeditorFileName()
+		ckeditorFileName = "ckeditor.js"
+		' CKReleaser %REMOVE_START%
+		ckeditorFileName = "ckeditor_source.js"
+		' CKReleaser %REMOVE_END%
+	end function
+
+	''
+	 ' Return path to ckeditor.js.
+	 '
+	private function ckeditorPath()
+		if (basePath <> "") then
+			ckeditorPath = basePath
+		else
+			' In classic ASP we can't get the location of this included script
+			ckeditorPath = "/ckeditor/"
+		end if
+
+		' Try to check if that folder contains the CKEditor files:
+		' If it's a full URL avoid checking it as it might point to an external server.
+		if (instr(ckeditorPath, "://") <> 0) then exit function
+
+		dim filename, oFSO, exists
+		filename = server.mapPath(basePath & ckeditorFileName())
+		set oFSO = Server.CreateObject("Scripting.FileSystemObject")
+		exists = oFSO.FileExists(filename)
+		set oFSO = nothing
+
+		if not(exists) then
+			response.clear
+			response.write "<h1>CKEditor path validation failed</h1>"
+			response.write "<p>The path &quot;" & ckeditorPath & "&quot; doesn't include the CKEditor main file (" & ckeditorFileName() & ")</p>"
+			response.write "<p>Please, verify that you have set it correctly and/or adjust the 'basePath' property</p>"
+			response.write "<p>Checked for physical file: &quot;" & filename & "&quot;</p>"
+			response.end
+		end if
+	end function
+
+End Class
+
+
+
+' URL: http://www.webdevbros.net/2007/04/26/generate-json-from-asp-datatypes/
+'**************************************************************************************************************
+'' @CLASSTITLE:		JSON
+'' @CREATOR:		Michal Gabrukiewicz (gabru at grafix.at), Michael Rebec
+'' @CONTRIBUTORS:	- Cliff Pruitt (opensource at crayoncowboy.com)
+''					- Sylvain Lafontaine
+''					- Jef Housein
+''					- Jeremy Brown
+'' @CREATEDON:		2007-04-26 12:46
+'' @CDESCRIPTION:	Comes up with functionality for JSON (http://json.org) to use within ASP.
+''					Correct escaping of characters, generating JSON Grammer out of ASP datatypes and structures
+''					Some examples (all use the <em>toJSON()</em> method but as it is the class' default method it can be left out):
+''					<code>
+''					<%
+''					'simple number
+''					output = (new JSON)("myNum", 2, false)
+''					'generates {"myNum": 2}
+''
+''					'array with different datatypes
+''					output = (new JSON)("anArray", array(2, "x", null), true)
+''					'generates "anArray": [2, "x", null]
+''					'(note: the last parameter was true, thus no surrounding brackets in the result)
+''					% >
+''					</code>
+'' @REQUIRES:		-
+'' @OPTIONEXPLICIT:	yes
+'' @VERSION:		1.5.1
+
+'**************************************************************************************************************
+class JSON
+
+	'private members
+	private output, innerCall
+
+	'**********************************************************************************************************
+	'* constructor
+	'**********************************************************************************************************
+	public sub class_initialize()
+		newGeneration()
+	end sub
+
+	'******************************************************************************************
+	'' @SDESCRIPTION:	STATIC! takes a given string and makes it JSON valid
+	'' @DESCRIPTION:	all characters which needs to be escaped are beeing replaced by their
+	''					unicode representation according to the
+	''					RFC4627#2.5 - http://www.ietf.org/rfc/rfc4627.txt?number=4627
+	'' @PARAM:			val [string]: value which should be escaped
+	'' @RETURN:			[string] JSON valid string
+	'******************************************************************************************
+	public function escape(val)
+		dim cDoubleQuote, cRevSolidus, cSolidus
+		cDoubleQuote = &h22
+		cRevSolidus = &h5C
+		cSolidus = &h2F
+		dim i, currentDigit
+		for i = 1 to (len(val))
+			currentDigit = mid(val, i, 1)
+			if ascw(currentDigit) > &h00 and ascw(currentDigit) < &h1F then
+				currentDigit = escapequence(currentDigit)
+			elseif ascw(currentDigit) >= &hC280 and ascw(currentDigit) <= &hC2BF then
+				currentDigit = "\u00" + right(padLeft(hex(ascw(currentDigit) - &hC200), 2, 0), 2)
+			elseif ascw(currentDigit) >= &hC380 and ascw(currentDigit) <= &hC3BF then
+				currentDigit = "\u00" + right(padLeft(hex(ascw(currentDigit) - &hC2C0), 2, 0), 2)
+			else
+				select case ascw(currentDigit)
+					case cDoubleQuote: currentDigit = escapequence(currentDigit)
+					case cRevSolidus: currentDigit = escapequence(currentDigit)
+					case cSolidus: currentDigit = escapequence(currentDigit)
+				end select
+			end if
+			escape = escape & currentDigit
+		next
+	end function
+
+	'******************************************************************************************************************
+	'' @SDESCRIPTION:	generates a representation of a name value pair in JSON grammer
+	'' @DESCRIPTION:	It generates a name value pair which is represented as <em>{"name": value}</em> in JSON.
+	''					the generation is fully recursive. Thus the value can also be a complex datatype (array in dictionary, etc.) e.g.
+	''					<code>
+	''					<%
+	''					set j = new JSON
+	''					j.toJSON "n", array(RS, dict, false), false
+	''					j.toJSON "n", array(array(), 2, true), false
+	''					% >
+	''					</code>
+	'' @PARAM:			name [string]: name of the value (accessible with javascript afterwards). leave empty to get just the value
+	'' @PARAM:			val [variant], [int], [float], [array], [object], [dictionary]: value which needs
+	''					to be generated. Conversation of the data types is as follows:<br>
+	''					- <strong>ASP datatype -> JavaScript datatype</strong>
+	''					- NOTHING, NULL -> null
+	''					- INT, DOUBLE -> number
+	''					- STRING -> string
+	''					- BOOLEAN -> bool
+	''					- ARRAY -> array
+	''					- DICTIONARY -> Represents it as name value pairs. Each key is accessible as property afterwards. json will look like <code>"name": {"key1": "some value", "key2": "other value"}</code>
+	''					- <em>multidimensional array</em> -> Generates a 1-dimensional array (flat) with all values of the multidimensional array
+	''					- <em>request</em> object -> every property and collection (cookies, form, querystring, etc) of the asp request object is exposed as an item of a dictionary. Property names are <strong>lowercase</strong>. e.g. <em>servervariables</em>.
+	''					- OBJECT -> name of the type (if unknown type) or all its properties (if class implements <em>reflect()</em> method)
+	''					Implement a <strong>reflect()</strong> function if you want your custom classes to be recognized. The function must return
+	''					a dictionary where the key holds the property name and the value its value. Example of a reflect function within a User class which has firstname and lastname properties
+	''					<code>
+	''					<%
+	''					function reflect()
+	''					.	set reflect = server.createObject("scripting.dictionary")
+	''					.	reflect.add "firstname", firstname
+	''					.	reflect.add "lastname", lastname
+	''					end function
+	''					% >
+	''					</code>
+	''					Example of how to generate a JSON representation of the asp request object and access the <em>HTTP_HOST</em> server variable in JavaScript:
+	''					<code>
+	''					<script>alert(<%= (new JSON)(empty, request, false) % >.servervariables.HTTP_HOST);</script>
+	''					</code>
+	'' @PARAM:			nested [bool]: indicates if the name value pair is already nested within another? if yes then the <em>{}</em> are left out.
+	'' @RETURN:			[string] returns a JSON representation of the given name value pair
+	'******************************************************************************************************************
+	public default function toJSON(name, val, nested)
+		if not nested and not isEmpty(name) then write("{")
+		if not isEmpty(name) then write("""" & escape(name) & """: ")
+		generateValue(val)
+		if not nested and not isEmpty(name) then write("}")
+		toJSON = output
+
+		if innerCall = 0 then newGeneration()
+	end function
+
+	'******************************************************************************************************************
+	'* generate
+	'******************************************************************************************************************
+	private function generateValue(val)
+		if isNull(val) then
+			write("null")
+		elseif isArray(val) then
+			generateArray(val)
+		elseif isObject(val) then
+			dim tName : tName = typename(val)
+			if val is nothing then
+				write("null")
+			elseif tName = "Dictionary" or tName = "IRequestDictionary" then
+				generateDictionary(val)
+			elseif tName = "IRequest" then
+				set req = server.createObject("scripting.dictionary")
+				req.add "clientcertificate", val.ClientCertificate
+				req.add "cookies", val.cookies
+				req.add "form", val.form
+				req.add "querystring", val.queryString
+				req.add "servervariables", val.serverVariables
+				req.add "totalbytes", val.totalBytes
+				generateDictionary(req)
+			elseif tName = "IStringList" then
+				if val.count = 1 then
+					toJSON empty, val(1), true
+				else
+					generateArray(val)
+				end if
+			else
+				generateObject(val)
+			end if
+		else
+			'bool
+			dim varTyp
+			varTyp = varType(val)
+			if varTyp = 11 then
+				if val then write("true") else write("false")
+			'int, long, byte
+			elseif varTyp = 2 or varTyp = 3 or varTyp = 17 or varTyp = 19 then
+				write(cLng(val))
+			'single, double, currency
+			elseif varTyp = 4 or varTyp = 5 or varTyp = 6 or varTyp = 14 then
+				write(replace(cDbl(val), ",", "."))
+			else
+				' Using @@ at the beggining to signal JSON that we don't want this quoted.
+				if left(val, 2) = "@@" then
+					write( mid( val, 3 ) )
+				else
+					write("""" & escape(val & "") & """")
+				end if
+			end if
+		end if
+		generateValue = output
+	end function
+
+	'******************************************************************************************************************
+	'* generateArray
+	'******************************************************************************************************************
+	private sub generateArray(val)
+		dim item, i
+		write("[")
+		i = 0
+		'the for each allows us to support also multi dimensional arrays
+		for each item in val
+			if i > 0 then write(",")
+			generateValue(item)
+			i = i + 1
+		next
+		write("]")
+	end sub
+
+	'******************************************************************************************************************
+	'* generateDictionary
+	'******************************************************************************************************************
+	private sub generateDictionary(val)
+		innerCall = innerCall + 1
+		if val.count = 0 then
+			toJSON empty, null, true
+			exit sub
+		end if
+		dim key, i
+		write("{")
+		i = 0
+		for each key in val
+			if i > 0 then write(",")
+			toJSON key, val(key), true
+			i = i + 1
+		next
+		write("}")
+		innerCall = innerCall - 1
+	end sub
+
+	'******************************************************************************************************************
+	'* generateObject
+	'******************************************************************************************************************
+	private sub generateObject(val)
+		dim props
+		on error resume next
+		set props = val.reflect()
+		if err = 0 then
+			on error goto 0
+			innerCall = innerCall + 1
+			toJSON empty, props, true
+			innerCall = innerCall - 1
+		else
+			on error goto 0
+			write("""" & escape(typename(val)) & """")
+		end if
+	end sub
+
+	'******************************************************************************************************************
+	'* newGeneration
+	'******************************************************************************************************************
+	private sub newGeneration()
+		output = empty
+		innerCall = 0
+	end sub
+
+	'******************************************************************************************
+	'* JsonEscapeSquence
+	'******************************************************************************************
+	private function escapequence(digit)
+		escapequence = "\u00" + right(padLeft(hex(ascw(digit)), 2, 0), 2)
+	end function
+
+	'******************************************************************************************
+	'* padLeft
+	'******************************************************************************************
+	private function padLeft(value, totalLength, paddingChar)
+		padLeft = right(clone(paddingChar, totalLength) & value, totalLength)
+	end function
+
+	'******************************************************************************************
+	'* clone
+	'******************************************************************************************
+	private function clone(byVal str, n)
+		dim i
+		for i = 1 to n : clone = clone & str : next
+	end function
+
+	'******************************************************************************************
+	'* write
+	'******************************************************************************************
+	private sub write(val)
+		output = output & val
+	end sub
+
+end class
+%>
