Index: /CKEditor/branches/versions/3.1.x/CHANGES.html
===================================================================
--- /CKEditor/branches/versions/3.1.x/CHANGES.html	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/CHANGES.html	(revision 5180)
@@ -35,4 +35,78 @@
 		CKEditor Changelog
 	</h1>
+	<h3>
+		CKEditor 3.2 (SVN)</h3>
+	<p>
+		New features:</p>
+	<ul>
+		<li><a href="http://dev.fckeditor.net/ticket/4399">#4399</a> : Improved support for external file browsers by allowing executing a callback function.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4612">#4612</a> : The text of links is now updated if it matches the URL to which it points to.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4936">#4936</a> : New localization support for the Welsh language.</li>
+	</ul>
+	<p>
+		Fixed issues:</p>
+	<ul>
+		<li><a href="http://dev.fckeditor.net/ticket/4272">#4272</a> : Kama skin toolbar was broken in IE+Quirks+RTL.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4987">#4987</a> : Changed the url which is called by the Browser Server button in the Link tab of Image Properties dialog.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5030">#5030</a> : The CKEDITOR.timestamp wasn't been appended to the skin.js file.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4993">#4993</a> : Removed the float style from images when the user selects 'not set' for alignment.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4944">#4944</a> : Fixed a bug where nested list structures with inconsequent levels were not being pasted correctly from MS Word.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4637">#4637</a> : Table cells' 'nowrap' attribute was not being loaded by the cell property dialog. Thanks to pomu0325.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4724">#4724</a> : Using the mouse to insert a link in IE might create incorrect results.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4640">#4640</a> : Small optimizations for the fileBrowser plugin.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4583">#4583</a> : The "Target Frame Name" field is now visible when target is set to 'frame' only.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4863">#4863</a> : Fixing iframedialog's height doesn't stretch to 100%.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4964">#4964</a> : The BACKSPACE key positioning was not correct in some cases with Firefox.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4980">#4980</a> : Setting border, vspace and hspace of images to zero was not working.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4773">#4773</a> : The fileBrowser plugin was overwriting onClick functions eventually defined on fileButton elements.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4731">#4731</a> : The clipboard plugin was missing a reference to the dialog plugin.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5051">#5051</a> : The about plugin was missing a reference to the dialog plugin.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5146">#5146</a> : The wsc plugin was missing a reference to the dialog plugin.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4632">#4632</a> : The print command will now properly break on the insertion point of page break for printing.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4862">#4862</a> : The English (United Kingdom) language file has been renamed to en-gb.js.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4618">#4618</a> : Selecting an emoticon or the lock and reset buttons in the image dialog fired the onBeforeUnload event in IE.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4678">#4678</a> : It was not possible to set tables' width to empty value.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5012">#5012</a> : Fixed dependency issues with the menu plugin.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5040">#5040</a> : The editor will not properly ignore font related settings that have extra item separators (semi-colons).</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4046">#4046</a> : Justify should respect config.enterMode = CKEDITOR.ENTER_BR.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4622">#4622</a> : Inserting tables multiple times was corrupting the undo system.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4647">#4647</a> : [IE] Selection on an element within positioned container is lost after open context-menu then click one menu item.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4683">#4683</a> : Double-quote character in attribute values was not escaped in the editor output.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4762">#4762</a> : [IE] Unexpected vertical-scrolling behavior happens whenever focus is moving out of editor in source mode.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4772">#4772</a> : Text color was not being applied properly on links.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4795">#4795</a> : [IE] Press 'Del' key on horizontal line or table result in error.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4824">#4824</a> : [IE] &lt;br/&gt; at the very first table cell breaks the editor selection.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4851">#4851</a> : [IE] Delete table rows with context-menu may cause error.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4951">#4951</a> : Replacing text with empty string was throwing errors.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4963">#4963</a> : Link dialog was not opening properly for e-mail type links.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5043">#5043</a> : Removed the possibility of having an unwanted script tag being outputted with the editor contents.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/3678">#3678</a> : There were issues when editing links inside floating divs with IE.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4763">#4763</a> : Pressing ENTER key with text selected was not deleting the text in some situations.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5096">#5096</a> : Simple ampersand attribute value doesn't work for more than one occurrence.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/3494">#3494</a> : Context menu is too narrow in some translations.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5005">#5005</a> : Fixed HTML errors in PHP samples.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5123">#5123</a> : Fixed broken XHTML in User Interface Languages sample.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4893">#4893</a> : Editor now understands table cell inline styles.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4611">#4611</a> : Selection around &lt;select&gt; in editor doesn't cause error anymore.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4886">#4886</a> : Extra BR tags were being created in the output HTML.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4933">#4933</a> : Empty tags with BR were being left in the DOM.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5127">#5127</a> : There were errors when removing dialog definition pages through code.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4767">#4767</a> : CKEditor was not working when ckeditor_source.js is loaded in the &lt;body&gt; .</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5062">#5062</a> : Avoided security warning message when loading the wysiwyg area in IE6 under HTTPS.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5135">#5135</a> : The TAB key will now behave properly when in Source mode.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4988">#4988</a> : It wasn't possible to use forcePasteAsPlainText with Safari on Mac.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5095">#5095</a> : Safari on Mac deleted the current selection in the editor when Edit menu was clicked.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5140">#5140</a> : In High Contrast mode, arrows were now been displayed for menus with submenus.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5163">#5163</a> : The undo system was not working on some specific cases.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/5162">#5162</a> : The ajax sample was throwing errors when loading data.</li>
+		<li><a href="http://dev.fckeditor.net/ticket/4999">#4999</a> : The Template dialog was not generating an undo snapshot.</li>
+		<li>Updated the following language files:<ul>
+			<li><a href="http://dev.fckeditor.net/ticket/5006">#5006</a> : Dutch;</li>
+			<li><a href="http://dev.fckeditor.net/ticket/5039">#5039</a> : Finnish;</li>
+			<li><a href="http://dev.fckeditor.net/ticket/5148">#5148</a> : Hebrew;</li>
+			<li><a href="http://dev.fckeditor.net/ticket/5071">#5071</a> : Russian;</li>
+			<li><a href="http://dev.fckeditor.net/ticket/5147">#5147</a> : Spanish;</li>
+		</ul></li>
+	</ul>
 	<h3>
 		CKEditor 3.1</h3>
Index: /CKEditor/branches/versions/3.1.x/_dev/docs_build/docs_build.conf
===================================================================
--- /CKEditor/branches/versions/3.1.x/_dev/docs_build/docs_build.conf	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_dev/docs_build/docs_build.conf	(revision 5180)
@@ -17,6 +17,11 @@
 		'../../_source/core/',
 		'../../_source/plugins/',
-		'../../_source/skins/kama/skin.js',
-		'../../_source/lang/en.js'
+		'../../_source/skins/kama/skin.js'
+	],
+
+	// Files to exclude.
+	E:
+	[
+		'yui.js'
 	],
 
Index: /CKEditor/branches/versions/3.1.x/_dev/docs_build/template/allfiles.tmpl
===================================================================
--- /CKEditor/branches/versions/3.1.x/_dev/docs_build/template/allfiles.tmpl	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_dev/docs_build/template/allfiles.tmpl	(revision 5180)
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 	<head>
-		<meta http-equiv="content-type" content="text/html; charset={+IO.encoding+}"" />
+		<meta http-equiv="content-type" content="text/html; charset={+IO.encoding+}" />
 		{! Link.base = ""; /* all generated links will be relative to this */ !}
-		<title>File Index - CKEditor 3.0 JavaScript API Documentation</title>
+		<title>File Index - CKEditor 3 JavaScript API Documentation</title>
 		<meta name="generator" content="JsDoc Toolkit" />
 		
@@ -26,5 +26,5 @@
 			<div>
 				<h2>{+new Link().toSrc(item.alias).withText(item.name)+}</h2>
-				<if test="item.desc">{+resolveLinks(summarize(item.desc))+}</if>
+				<if test="item.desc">{+resolveLinks(item.desc)+}</if>
 				<dl>
 					<if test="item.author">
Index: /CKEditor/branches/versions/3.1.x/_dev/docs_build/template/class.tmpl
===================================================================
--- /CKEditor/branches/versions/3.1.x/_dev/docs_build/template/class.tmpl	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_dev/docs_build/template/class.tmpl	(revision 5180)
@@ -6,5 +6,5 @@
 		<meta name="generator" content="JsDoc Toolkit" />
 		{! Link.base = "../"; /* all generated links will be relative to this */ !}
-		<title>{+data.alias+} - CKEditor 3.0 JavaScript API Documentation</title>
+		<title>{+data.alias+} - CKEditor 3 JavaScript API Documentation</title>
 
 		<style type="text/css">
@@ -51,4 +51,7 @@
 <!-- ============================== class summary ========================== -->			
 			<p class="description">
+				<if test="data.version"><br />Version
+					{+ data.version +}.<br />
+				</if>
 				<if test="data.augments.length"><br />Extends
 					{+
@@ -210,5 +213,5 @@
 							!}&nbsp;</td>
 							<td class="nameDescription">
-								<div class="fixedFont"><if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name)+}</b>{+makeSignature(member.params)+}
+								<div class="fixedFont"><if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name.replace(/\^\d+$/, ''))+}</b>{+makeSignature(member.params)+}
 								</div>
 								<div class="description">{+resolveLinks(summarize(member.desc))+}</div>
@@ -249,4 +252,64 @@
 			</if>
 
+<!-- ============================== events summary ======================== -->
+			<if test="data.events.length">
+				{! var ownEvents = data.events.filter(function($){return $.memberOf == data.alias  && !$.isNamespace}).sort(makeSortby("name")); !}
+				<if test="ownEvents.length">
+				<table class="summaryTable" cellspacing="0" summary="A summary of the events documented in the class {+data.alias+}.">
+					<caption>Event Summary</caption>
+					<thead>
+						<tr>
+							<th scope="col">Event Attributes</th>
+							<th scope="col">Event Name and Description</th>
+						</tr>
+					</thead>
+					<tbody>
+					<for each="member" in="ownEvents">
+						<tr>
+							<td class="attributes">{!
+								if (member.isPrivate) output += "&lt;private&gt; ";
+								if (member.isInner) output += "&lt;inner&gt; ";
+								if (member.isStatic) output += "&lt;static&gt; ";
+							!}&nbsp;</td>
+							<td class="nameDescription">
+								<div class="fixedFont"><if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name)+}</b>{+makeSignature(member.params)+}
+								</div>
+								<div class="description">{+resolveLinks(summarize(member.desc))+}</div>
+							</td>
+						</tr>
+					</for>
+					</tbody>
+				</table>
+				</if>
+				
+				<if test="data.inheritsFrom.length">
+				<dl class="inheritsList">
+				{!
+					var borrowedMembers = data.events.filter(function($) {return $.memberOf != data.alias});
+					var contributers = [];
+					borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)});
+					for (var i = 0, l = contributers.length; i < l; i++) {
+						output +=
+							"<dt>Events borrowed from class "+new Link().toSymbol(contributers[i])+": </dt>"
+							+
+							"<dd>" +
+							borrowedMembers
+							.filter(
+								function($) { return $.memberOf == contributers[i] }
+							)
+							.sort(makeSortby("name"))
+							.map(
+								function($) { return new Link().toSymbol($.alias).withText($.name) }
+							)
+							.join(", ")
+							+
+							"</dd>";
+					}
+				
+				!}
+				</dl>
+				</if>
+			</if>
+
 <!-- ============================== constructor details ==================== -->		
 			<if test="!data.isBuiltin() && (data.isNamespace || data.is('CONSTRUCTOR'))">
@@ -398,5 +461,5 @@
 							<dt class="heading">Deprecated:</dt>
 							<dt>
-								{+ member.deprecated +}
+								{+ resolveLinks(member.deprecated) +}
 							</dt>
 							</dl>
@@ -437,5 +500,5 @@
 					
 					<span class="light">{{+ new Link().toSymbol( member.type || 'Undefined') +}}</span>
-					<if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name+}</b>{+makeSignature(member.params)+}
+					<if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name.replace(/\^\d+$/, '')+}</b>{+makeSignature(member.params)+}
 					
 					</div>
@@ -484,5 +547,5 @@
 							<dt class="heading">Deprecated:</dt>
 							<dt>
-								{+member.deprecated+}
+								{+resolveLinks(member.deprecated)+}
 							</dt>
 							</dl>
@@ -527,5 +590,115 @@
 				</for>
 			</if>
-			
+
+			<!-- ============================== event details ========================= -->		
+			<if test="defined(ownEvents) && ownEvents.length">
+				<div class="sectionTitle">
+					Event Detail
+				</div>
+				<for each="member" in="ownEvents">
+					<a name="event:{+Link.symbolNameToLinkName(member)+}"> </a>
+					<div class="fixedFont" style="float:left">{!
+						if (member.isPrivate) output += "&lt;private&gt; ";
+						if (member.isInner) output += "&lt;inner&gt; ";
+						if (member.isStatic) output += "&lt;static&gt; ";
+					!}
+					
+					<if test="member.type"><span class="light">{{+new Link().toSymbol(member.type)+}}</span></if>
+					<if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if>
+					<b>{+member.name+}</b> : &lt;object&gt;.{+new Link().toSymbol('CKEDITOR.event#on').withText('on')+}( '{+member.name+}', function( e ){ ... } )
+					
+					</div>
+					<div style="float:right">
+						<span class="heading">Since:</span>
+							<if test="member.since">
+								{+ member.since +}
+							<else />
+								3.0
+							</if>
+					</div>
+					<div style="clear:both"></div>
+					<div class="description">
+						{+resolveLinks(member.desc)+}
+						<if test="member.srcFile != data.srcFile">
+							<br />
+							<i>Defined in: </i> {+new Link().toSrc(member.srcFile)+}.
+						</if>
+						<if test="member.author"><br /><i>Author: </i>{+member.author+}.</if>
+					</div>
+					
+					<if test="member.example.length">
+					<for each="example" in="member.example">
+						<if test="example.desc">
+							<pre class="code">{+example+}</pre>
+						</if>
+					</for>
+					<else />
+						<pre class="code"><span style="color:red">NO EXAMPLE AVAILABLE</span></pre>
+					</if>
+					
+							<dl class="detailList">
+							<dt class="heading">Parameters:</dt>
+								<dt>
+									<span class="light fixedFont">{{+new Link().toSymbol('CKEDITOR.eventInfo')+}}</span> <b>e</b>
+								</dt>
+								<dd>The standard event object passed to event listeners.</dd>
+
+							<for each="item" in="member.params">
+								<dt>
+									{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}<b>e.{+item.name+}</b>
+									<if test="item.isOptional"><i>Optional<if test="item.defaultValue">, Default: {+item.defaultValue+}</if></i></if>
+								</dt>
+								<dd>{+ resolveLinks(item.desc) +}</dd>
+							</for>
+							</dl>
+
+						<if test="member.deprecated">
+							<dl class="detailList">
+							<dt class="heading">Deprecated:</dt>
+							<dt>
+								{+ resolveLinks(member.deprecated) +}
+							</dt>
+							</dl>
+						</if>
+						<if test="member.exceptions.length">
+							<dl class="detailList">
+							<dt class="heading">Throws:</dt>
+							<for each="item" in="member.exceptions">
+								<dt>
+									{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+} <b>{+item.name+}</b>
+								</dt>
+								<dd>{+ resolveLinks(item.desc) +}</dd>
+							</for>
+							</dl>
+						</if>
+						<if test="member.returns.length">
+							<dl class="detailList">
+							<dt class="heading">Returns:</dt>
+							<for each="item" in="member.returns">
+								<dd>{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}{+resolveLinks(item.desc)+}</dd>
+							</for>
+							</dl>
+						</if>
+						<if test="member.requires.length">
+							<dl class="detailList">
+							<dt class="heading">Requires:</dt>
+							<for each="item" in="member.requires">
+								<dd>{+ resolveLinks(item) +}</dd>
+							</for>
+							</dl>
+						</if>
+						<if test="member.see.length">
+							<dl class="detailList">
+							<dt class="heading">See:</dt>
+							<for each="item" in="member.see">
+								<dd>{+ new Link().toSymbol(item) +}</dd>
+							</for>
+							</dl>
+						</if>
+
+					<if test="!$member_last"><hr /></if>
+				</for>
+			</if>
+
 			<hr />
 		</div>
Index: /CKEditor/branches/versions/3.1.x/_dev/docs_build/template/index.tmpl
===================================================================
--- /CKEditor/branches/versions/3.1.x/_dev/docs_build/template/index.tmpl	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_dev/docs_build/template/index.tmpl	(revision 5180)
@@ -3,7 +3,7 @@
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 	<head>
-		<meta http-equiv="content-type" content="text/html; charset={+IO.encoding+}"" />
+		<meta http-equiv="content-type" content="text/html; charset={+IO.encoding+}" />
 		
-		<title>CKEditor 3.0 JavaScript API Documentation</title>
+		<title>CKEditor 3 JavaScript API Documentation</title>
 		<meta name="generator" content="JsDoc Toolkit" />
 		
Index: /CKEditor/branches/versions/3.1.x/_dev/docs_build/template/publish.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_dev/docs_build/template/publish.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_dev/docs_build/template/publish.js	(revision 5180)
@@ -1,9 +1,10 @@
+/** Called automatically by JsDoc Toolkit. */
 function publish(symbolSet) {
 	publish.conf = {  // trailing slash expected for dirs
-		ext: ".html",
-		outDir: JSDOC.opt.d || SYS.pwd+"../out/jsdoc/",
-		templatesDir: JSDOC.opt.t.replace( /\/+$/, '' ) + '/',
-		symbolsDir: "symbols/",
-		srcDir: "symbols/src/"
+		ext:          ".html",
+		outDir:       JSDOC.opt.d || SYS.pwd+"../out/jsdoc/",
+		templatesDir: ( JSDOC.opt.t && JSDOC.opt.t.replace( /\/+$/, '' ) + '/' ) || SYS.pwd+"../templates/jsdoc/",
+		symbolsDir:   "symbols/",
+		srcDir:       "symbols/src/"
 	};
 	if (!IO.exists(publish.conf.templatesDir)) {
@@ -11,4 +12,5 @@
 	}
 
+	// is source output is suppressed, just display the links to the source file
 	if (JSDOC.opt.s && defined(Link) && Link.prototype._makeSrcLink) {
 		Link.prototype._makeSrcLink = function(srcFilePath) {
@@ -17,9 +19,11 @@
 	}
 
+	// create the folders and subfolders to hold the output
 	IO.mkPath((publish.conf.outDir+"symbols/src").split("/"));
 
-	// used to check the details of things being linked to
+	// used to allow Link to check the details of things being linked to
 	Link.symbolSet = symbolSet;
 
+	// create the required templates
 	try {
 		var classTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"class.tmpl");
@@ -27,15 +31,17 @@
 	}
 	catch(e) {
-		print(e.message);
+		print("Couldn't create the required templates: "+e);
 		quit();
 	}
 
-	// filters
+	// some ustility filters
 	function hasNoParent($) {return ($.memberOf == "")}
 	function isaFile($) {return ($.is("FILE"))}
 	function isaClass($) {return ($.is("CONSTRUCTOR") || $.isNamespace)}
 
+	// get an array version of the symbolset, useful for filtering
 	var symbols = symbolSet.toArray();
 
+	// create the hilited source code files
 	var files = JSDOC.opt.srcFiles;
  	for (var i = 0, l = files.length; i < l; i++) {
@@ -45,21 +51,45 @@
  	}
 
+ 	// get a list of all the classes in the symbolset
  	var classes = symbols.filter(isaClass).sort(makeSortby("alias"));
 
+	// create a filemap in which outfiles must be to be named uniquely, ignoring case
+	if (JSDOC.opt.u) {
+		var filemapCounts = {};
+		Link.filemap = {};
+		for (var i = 0, l = classes.length; i < l; i++) {
+			var lcAlias = classes[i].alias.toLowerCase();
+
+			if (!filemapCounts[lcAlias]) filemapCounts[lcAlias] = 1;
+			else filemapCounts[lcAlias]++;
+
+			Link.filemap[classes[i].alias] =
+				(filemapCounts[lcAlias] > 1)?
+				lcAlias+"_"+filemapCounts[lcAlias] : lcAlias;
+		}
+	}
+
+	// create a class index, displayed in the left-hand column of every class page
 	Link.base = "../";
  	publish.classesIndex = classesTemplate.process(classes); // kept in memory
 
+	// create each of the class pages
 	for (var i = 0, l = classes.length; i < l; i++) {
 		var symbol = classes[i];
+
+		symbol.events = symbol.getEvents();   // 1 order matters
+		symbol.methods = symbol.getMethods(); // 2
+
 		var output = "";
 		output = classTemplate.process(symbol);
 
-		IO.saveFile(publish.conf.outDir+"symbols/", symbol.alias+publish.conf.ext, output);
-	}
-
-	// regenrate the index with different relative links
+		IO.saveFile(publish.conf.outDir+"symbols/", ((JSDOC.opt.u)? Link.filemap[symbol.alias] : symbol.alias) + publish.conf.ext, output);
+	}
+
+	// regenerate the index with different relative links, used in the index pages
 	Link.base = "";
 	publish.classesIndex = classesTemplate.process(classes);
 
+	// create the class index page
 	try {
 		var classesindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"index.tmpl");
@@ -71,4 +101,5 @@
 	classesindexTemplate = classesIndex = classes = null;
 
+	// create the file index page
 	try {
 		var fileindexTemplate = new JSDOC.JsPlate(publish.conf.templatesDir+"allfiles.tmpl");
@@ -76,6 +107,6 @@
 	catch(e) { print(e.message); quit(); }
 
-	var documentedFiles = symbols.filter(isaFile);
-	var allFiles = [];
+	var documentedFiles = symbols.filter(isaFile); // files that have file-level docs
+	var allFiles = []; // not all files have file-level docs, but we need to list every one
 
 	for (var i = 0; i < files.length; i++) {
@@ -96,4 +127,5 @@
 	allFiles = allFiles.sort( ckeditor_sortFiles );
 
+	// output the file index page
 	var filesIndex = fileindexTemplate.process(allFiles);
 	IO.saveFile(publish.conf.outDir, "files"+publish.conf.ext, filesIndex);
@@ -102,5 +134,5 @@
 
 
-/** Just the first sentence. Should not break on dotted variable names. */
+/** Just the first sentence (up to a full stop). Should not break on dotted variable names. */
 function summarize(desc) {
 	if (typeof desc != "undefined")
@@ -108,5 +140,5 @@
 }
 
-/** make a symbol sorter by some attribute */
+/** Make a symbol sorter by some attribute. */
 function makeSortby(attribute) {
 	return function(a, b) {
@@ -121,4 +153,5 @@
 }
 
+/** Pull in the contents of an external file at the given path. */
 function include(path) {
 	var path = publish.conf.templatesDir+path;
@@ -126,4 +159,5 @@
 }
 
+/** Turn a raw source file into a code-hilited page in the docs. */
 function makeSrcFile(path, srcDir, name) {
 	if (JSDOC.opt.s) return;
@@ -145,4 +179,5 @@
 }
 
+/** Build output for displaying function parameters. */
 function makeSignature(params) {
 	if (!params) return "()";
Index: /CKEditor/branches/versions/3.1.x/_dev/docs_build/template/static/header.html
===================================================================
--- /CKEditor/branches/versions/3.1.x/_dev/docs_build/template/static/header.html	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_dev/docs_build/template/static/header.html	(revision 5180)
@@ -1,4 +1,4 @@
 <div id="header">
-	<h1>CKEditor 3.0 JavaScript API Documentation</h1>
+	<h1>CKEditor 3 JavaScript API Documentation</h1>
 	<hr />
 </div>
Index: /CKEditor/branches/versions/3.1.x/_dev/fixlineends/fixlineends.php
===================================================================
--- /CKEditor/branches/versions/3.1.x/_dev/fixlineends/fixlineends.php	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_dev/fixlineends/fixlineends.php	(revision 5180)
@@ -287,5 +287,5 @@
 
             case 'LF':
-                if(substr($line, -2) === CRLF) {
+                if (substr($line, -2) === CRLF) {
                     $line = substr($line, 0, -2) . LF;
                     $modified = true;
Index: /CKEditor/branches/versions/3.1.x/_dev/releaser/release.bat
===================================================================
--- /CKEditor/branches/versions/3.1.x/_dev/releaser/release.bat	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_dev/releaser/release.bat	(revision 5180)
@@ -11,3 +11,3 @@
 :: rmdir /S /Q release
 
-java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.1" ckeditor_3.1 --run-before-release=langtool.bat
+java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.1.1" ckeditor_3.1.1 --run-before-release=langtool.bat
Index: /CKEditor/branches/versions/3.1.x/_dev/releaser/release.sh
===================================================================
--- /CKEditor/branches/versions/3.1.x/_dev/releaser/release.sh	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_dev/releaser/release.sh	(revision 5180)
@@ -13,4 +13,4 @@
 
 pushd $DIR
-java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.1" ckeditor_3.1 --run-before-release=$LANGTOOL
+java -jar ckreleaser/ckreleaser.jar ckreleaser.release ../.. release "3.1.1" ckeditor_3.1.1 --run-before-release=$LANGTOOL
 popd
Index: /CKEditor/branches/versions/3.1.x/_samples/ajax.html
===================================================================
--- /CKEditor/branches/versions/3.1.x/_samples/ajax.html	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_samples/ajax.html	(revision 5180)
@@ -34,10 +34,12 @@
 	/*
 	if ( editor.setData )
-	editor.setData( html );
+		editor.setData( html );
 	else
-	CKEDITOR.on( 'loaded', function()
 	{
-	editor.setData( html );
-	});
+		CKEDITOR.on( 'loaded', function()
+			{
+				editor.setData( html );
+			});
+	}
 	*/
 }
Index: /CKEditor/branches/versions/3.1.x/_samples/php/advanced.php
===================================================================
--- /CKEditor/branches/versions/3.1.x/_samples/php/advanced.php	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_samples/php/advanced.php	(revision 5180)
@@ -75,4 +75,5 @@
 echo $CKEditor->editor("editor2", $initialValue, $config);
 ?>
+			<p>
 				<input type="submit" value="Submit"/>
 			</p>
Index: /CKEditor/branches/versions/3.1.x/_samples/php/events.php
===================================================================
--- /CKEditor/branches/versions/3.1.x/_samples/php/events.php	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_samples/php/events.php	(revision 5180)
@@ -112,4 +112,5 @@
 $CKEditor->editor("editor2", $initialValue, $config, $events);
 ?>
+			<p>
 				<input type="submit" value="Submit"/>
 			</p>
Index: /CKEditor/branches/versions/3.1.x/_samples/ui_languages.html
===================================================================
--- /CKEditor/branches/versions/3.1.x/_samples/ui_languages.html	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_samples/ui_languages.html	(revision 5180)
@@ -36,8 +36,7 @@
 			<label for="editor1">
 				Available languages (<span id="count"> </span>languages!):</label><br />
-			<select disabled="disabled" id="languages" onchange="createEditor( this.value );">
 				<script type="text/javascript">
 				//<![CDATA[
-
+					document.write( '<select disabled="disabled" id="languages" onchange="createEditor( this.value );">' );
 					// Get the language list from the _languages.js file.
 					for ( var i = 0 ; i < window.CKEDITOR_LANGS.length ; i++ )
@@ -48,8 +47,7 @@
 							'</option>' );
 					}
-
+					document.write( '</select>' );
 				//]]>
 				</script>
-			</select>
 			<br />
 			<span style="color: #888888">(You may see strange characters if your system doesn't
Index: /CKEditor/branches/versions/3.1.x/_source/adapters/jquery.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/adapters/jquery.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/adapters/jquery.js	(revision 5180)
@@ -184,8 +184,12 @@
 								$element.parents( 'form' ).submit( onSubmit );
 
+								// Bind to form-pre-serialize from jQuery Forms plugin.
+								$element.parents( 'form' ).bind( 'form-pre-serialize', onSubmit );
+
 								// Unbind when editor destroyed.
 								$element.bind( 'destroy.ckeditor', function()
 								{
 									$element.parents( 'form' ).unbind( 'submit', onSubmit );
+									$element.parents( 'form' ).unbind( 'form-pre-serialize', onSubmit );
 								});
 							}
Index: /CKEditor/branches/versions/3.1.x/_source/core/_bootstrap.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/_bootstrap.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/_bootstrap.js	(revision 5180)
@@ -77,2 +77,8 @@
 }
 */
+
+/**
+ * Fired when a CKEDITOR core object is fully loaded and ready for interaction.
+ * @name CKEDITOR#loaded
+ * @event
+ */
Index: /CKEditor/branches/versions/3.1.x/_source/core/ckeditor.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/ckeditor.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/ckeditor.js	(revision 5180)
@@ -95,2 +95,9 @@
  */
 CKEDITOR.TRISTATE_DISABLED = 0;
+
+/**
+ * Fired when the CKEDITOR.currentInstance object reference changes. This may
+ * happen when setting the focus on different editor instances in the page.
+ * @name CKEDITOR#currentInstance
+ * @event
+ */
Index: /CKEditor/branches/versions/3.1.x/_source/core/ckeditor_basic.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/ckeditor_basic.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/ckeditor_basic.js	(revision 5180)
@@ -138,5 +138,5 @@
 		};
 
-		/**
+		/*
 		 * @ignore
 		 * Documented at ckeditor.js.
Index: /CKEditor/branches/versions/3.1.x/_source/core/command.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/command.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/command.js	(revision 5180)
@@ -13,5 +13,5 @@
 			return false;
 
-		if( this.editorFocus )     // Give editor focus if necessary (#4355).
+		if ( this.editorFocus )     // Give editor focus if necessary (#4355).
 			editor.focus();
 
Index: /CKEditor/branches/versions/3.1.x/_source/core/config.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/config.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/config.js	(revision 5180)
@@ -90,6 +90,6 @@
 	 * automatically localize the editor to the user language, if supported,
 	 * otherwise the {@link CKEDITOR.config.defaultLanguage} language is used.
-	 * @default true
-	 * @type Boolean
+	 * @default '' (empty)
+	 * @type String
 	 * @example
 	 * // Load the German interface.
@@ -168,5 +168,7 @@
 
 	/**
-	 * Sets the 'id' attribute to be used on body if it doesn't have one.
+	 * Sets the "id" attribute to be used on the body element of the editing
+	 * area.
+	 * @since 3.1
 	 * @type String
 	 * @default ''
@@ -175,5 +177,7 @@
 
 	/**
-	 * Sets the 'class' attribute to be used on body if it doesn't have one.
+	 * Sets the "class" attribute to be used on the body element of the editing
+	 * area.
+	 * @since 3.1
 	 * @type String
 	 * @default ''
@@ -186,4 +190,5 @@
 	 * &lt;body&gt; tags. The final output will also reflect this setting,
 	 * including the &lt;body&gt; contents only if this setting is disabled.
+	 * @since 3.1
 	 * @type Boolean
 	 * @default false
Index: /CKEditor/branches/versions/3.1.x/_source/core/dataprocessor.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/dataprocessor.js	(revision 5180)
+++ /CKEditor/branches/versions/3.1.x/_source/core/dataprocessor.js	(revision 5180)
@@ -0,0 +1,66 @@
+﻿/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the "virtual" {@link CKEDITOR.dataProcessor} class, which
+ *		defines the basic structure of data processor objects to be
+ *		set to {@link CKEDITOR.editor.dataProcessor}.
+ */
+
+/**
+ * If defined, points to the data processor which is responsible to translate
+ * and transform the editor data on input and output.
+ * Generaly it will point to an instance of {@link CKEDITOR.htmlDataProcessor},
+ * which handles HTML data. The editor may also handle other data formats by
+ * using different data processors provided by specific plugins.
+ * @name CKEDITOR.editor.dataProcessor
+ * @type CKEDITOR.dataProcessor
+ */
+
+/**
+ * Represents a data processor, which is responsible to translate and transform
+ * the editor data on input and output.
+ * This class is not really part of the API. It's here for documentation
+ * purposes, and serves as the base ("interface") for data processors
+ * implementation.
+ * @name CKEDITOR.dataProcessor
+ * @contructor
+ * @example
+ */
+
+/**
+ * Transforms input data into HTML to be loaded in the editor.
+ * While the editor is able to handle non HTML data (like BBCode), at runtime
+ * it can handle HTML data only. The role of the data processor is transforming
+ * the input data into HTML through this function.
+ * @name CKEDITOR.dataProcessor.prototype.toHtml
+ * @function
+ * @param {String} data The input data to be transformed.
+ * @param {String} [fixForBody] The tag name to be used if the data must be
+ *		fixed because it is supposed to be loaded direcly into the &lt;body&gt;
+ *		tag. This is generally not used by non-HTML data processors.
+ * @example
+ * // Tranforming BBCode data, having a custom BBCode data processor.
+ * var data = 'This is [b]an example[/b].';
+ * var html = editor.dataProcessor.toHtml( data );  // '&lt;p&gt;This is &lt;b&gt;an example&lt;/b&gt;.&lt;/p&gt;'
+ */
+
+/**
+ * Transforms HTML into data to be outputted by the editor, in the format
+ * expected by the data processor.
+ * While the editor is able to handle non HTML data (like BBCode), at runtime
+ * it can handle HTML data only. The role of the data processor is transforming
+ * the HTML data containined by the editor into a specific data format through
+ * this function.
+ * @name CKEDITOR.dataProcessor.prototype.toDataFormat
+ * @function
+ * @param {String} html The HTML to be transformed.
+ * @param {String} fixForBody The tag name to be used if the output data is
+ *		coming from &lt;body&gt; and may be eventually fixed for it. This is
+ * generally not used by non-HTML data processors.
+ * // Tranforming into BBCode data, having a custom BBCode data processor.
+ * var html = '&lt;p&gt;This is &lt;b&gt;an example&lt;/b&gt;.&lt;/p&gt;';
+ * var data = editor.dataProcessor.toDataFormat( html );  // 'This is [b]an example[/b].'
+ */
Index: /CKEditor/branches/versions/3.1.x/_source/core/dom/document.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/dom/document.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/dom/document.js	(revision 5180)
@@ -169,5 +169,4 @@
 
 			return (
-			/** @ignore */
 			this.getHead = function()
 				{
@@ -188,5 +187,4 @@
 
 			return (
-			/** @ignore */
 			this.getBody = function()
 				{
@@ -195,4 +193,8 @@
 		},
 
+		/**
+		 * Gets the DOM document element for this document.
+		 * @returns {CKEDITOR.dom.element} The DOM document element.
+		 */
 		getDocumentElement : function()
 		{
@@ -200,5 +202,4 @@
 
 			return (
-			/** @ignore */
 			this.getDocumentElement = function()
 				{
@@ -210,5 +211,4 @@
 		 * Gets the window object that holds this document.
 		 * @returns {CKEDITOR.dom.window} The window object.
-		 * @example
 		 */
 		getWindow : function()
@@ -217,5 +217,4 @@
 
 			return (
-			/** @ignore */
 			this.getWindow = function()
 				{
Index: /CKEditor/branches/versions/3.1.x/_source/core/dom/domobject.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/dom/domobject.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/dom/domobject.js	(revision 5180)
@@ -182,4 +182,7 @@
 	};
 
+	/**
+	 * @name CKEDITOR.dom.domObject.prototype.removeCustomData
+	 */
 	domObjectProto.removeCustomData = function( key )
 	{
@@ -194,4 +197,7 @@
 	};
 
+	/**
+	 * @name CKEDITOR.dom.domObject.prototype.getCustomData
+	 */
 	domObjectProto.getUniqueId = function()
 	{
Index: /CKEditor/branches/versions/3.1.x/_source/core/dom/element.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/dom/element.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/dom/element.js	(revision 5180)
@@ -244,8 +244,11 @@
 			if ( !lastChild || !lastChild.is || !lastChild.is( 'br' ) )
 			{
-				this.append(
-					CKEDITOR.env.opera ?
+				var bogus = CKEDITOR.env.opera ?
 						this.getDocument().createText('') :
-						this.getDocument().createElement( 'br' ) );
+						this.getDocument().createElement( 'br' );
+
+				CKEDITOR.env.gecko && bogus.setAttribute( 'type', '_moz' );
+
+				this.append( bogus );
 			}
 		},
@@ -619,5 +622,4 @@
 
 			return (
-			/** @ignore */
 			this.getName = function()
 				{
@@ -1347,5 +1349,5 @@
 					continue;
 
-				if( attrName == 'checked' && ( attrValue = this.getAttribute( attrName ) ) )
+				if ( attrName == 'checked' && ( attrValue = this.getAttribute( attrName ) ) )
 					dest.setAttribute( attrName, attrValue );
 				// IE BUG: value attribute is never specified even if it exists.
Index: /CKEditor/branches/versions/3.1.x/_source/core/dom/node.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/dom/node.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/dom/node.js	(revision 5180)
@@ -195,25 +195,28 @@
 				var currentIndex = -1;
 
-				for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )
-				{
-					var candidate = parentNode.childNodes[i];
-
-					if ( normalized &&
-							candidate.nodeType == 3 &&
-							candidate.previousSibling &&
-							candidate.previousSibling.nodeType == 3 )
+				if ( parentNode )
+				{
+					for ( var i = 0 ; i < parentNode.childNodes.length ; i++ )
 					{
-						continue;
+						var candidate = parentNode.childNodes[i];
+
+						if ( normalized &&
+								candidate.nodeType == 3 &&
+								candidate.previousSibling &&
+								candidate.previousSibling.nodeType == 3 )
+						{
+							continue;
+						}
+
+						currentIndex++;
+
+						if ( candidate == node )
+							break;
 					}
 
-					currentIndex++;
-
-					if ( candidate == node )
-						break;
+					address.unshift( currentIndex );
 				}
 
-				address.unshift( currentIndex );
-
-				node = node.parentNode;
+				node = parentNode;
 			}
 
@@ -233,5 +236,4 @@
 
 			return (
-			/** @ignore */
 			this.getDocument = function()
 				{
Index: /CKEditor/branches/versions/3.1.x/_source/core/dom/range.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/dom/range.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/dom/range.js	(revision 5180)
@@ -134,5 +134,5 @@
 			currentNode = levelStartNode.getNext();
 
-			while( currentNode )
+			while ( currentNode )
 			{
 				// Stop processing when the current node matches a node in the
@@ -181,5 +181,5 @@
 				currentNode = levelStartNode.getPrevious();
 
-				while( currentNode )
+				while ( currentNode )
 				{
 					// Stop processing when the current node matches a node in the
@@ -253,8 +253,8 @@
 
 		// Cleanup any marked node.
-		if( removeStartNode )
+		if ( removeStartNode )
 			startNode.remove();
 
-		if( removeEndNode && endNode.$.parentNode )
+		if ( removeEndNode && endNode.$.parentNode )
 			endNode.remove();
 	};
@@ -279,5 +279,5 @@
 					return false;
 				}
-			else if( node.type == CKEDITOR.NODE_ELEMENT )
+			else if ( node.type == CKEDITOR.NODE_ELEMENT )
 			{
 				// If there are non-empty inline elements (e.g. <img />), then we're not
@@ -743,7 +743,10 @@
 					startOffset = startContainer.getIndex() + 1;
 					startContainer = startContainer.getParent();
-					// Check if it is necessary to update the end boundary.
-					if ( !collapsed && this.startContainer.equals( this.endContainer ) )
+
+					// Check all necessity of updating the end boundary.
+					if ( this.startContainer.equals( this.endContainer ) )
 						this.setEnd( nextText, this.endOffset - this.startOffset );
+					else if ( startContainer.equals( this.endContainer ) )
+						this.endOffset += 1;
 				}
 
@@ -751,5 +754,8 @@
 
 				if ( collapsed )
+				{
 					this.collapse( true );
+					return;
+				}
 			}
 
Index: /CKEditor/branches/versions/3.1.x/_source/core/dom/window.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/dom/window.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/dom/window.js	(revision 5180)
@@ -37,5 +37,5 @@
 		{
 			// Webkit is sometimes failed to focus iframe, blur it first(#3835).
-			if( CKEDITOR.env.webkit && this.$.parent )
+			if ( CKEDITOR.env.webkit && this.$.parent )
 				this.$.parent.focus();
 			this.$.focus();
Index: /CKEditor/branches/versions/3.1.x/_source/core/editor.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/editor.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/editor.js	(revision 5180)
@@ -576,17 +576,19 @@
 
 		/**
-		 * Sets the editor data. The data must be provided in raw format (HTML).
-		 * <b>Note:</b> This's an asynchronous method, the {@param callback}
-		 * function should be relied on if you want to interact with the editor
-		 * after data is fully loaded.
-		 *
-		 * @param {String} data HTML code to replace the curent content in the editor.
-		 * @param {Function} callback Function to be called after the setData is completed.
-		 * @example
-		 * CKEDITOR.instances.editor1.<b>setData( '&lt;p&gt;This is the editor data.&lt;/p&gt;' )</b>;
-		 * CKEDITOR.instances.editor1.setData( '&lt;p&gt;Some other editor data.&lt;/p&gt;', function()
-		 * {
-		 * 		CKEDITOR.instances.editor1.checkDirty(); 	// true
-		 * } );
+		 * Sets the editor data. The data must be provided in raw format (HTML).<br />
+		 * <br />
+		 * Note that this menthod is asynchronous. The "callback" parameter must
+		 * be used if interaction with the editor is needed after setting the data.
+		 * @param {String} data HTML code to replace the curent content in the
+		 *		editor.
+		 * @param {Function} callback Function to be called after the setData
+		 *		is completed.
+		 * @example
+		 * CKEDITOR.instances.editor1.<b>setData</b>( '&lt;p&gt;This is the editor data.&lt;/p&gt;' );
+		 * @example
+		 * CKEDITOR.instances.editor1.<b>setData</b>( '&lt;p&gt;Some other editor data.&lt;/p&gt;', function()
+		 *     {
+		 *         this.checkDirty();    // true
+		 *     });
 		 */
 		setData : function( data , callback )
@@ -600,4 +602,5 @@
 				} );
 			}
+
 			// Fire "setData" so data manipulation may happen.
 			var eventData = { dataValue : data };
@@ -659,5 +662,5 @@
 				var data = this.getData();
 
-				if( this.config.htmlEncodeOutput )
+				if ( this.config.htmlEncodeOutput )
 					data = CKEDITOR.tools.htmlEncode( data );
 
@@ -686,7 +689,30 @@
  * Whether escape HTML when editor update original input element.
  * @name CKEDITOR.config.htmlEncodeOutput
- * @type {Boolean}
+ * @since 3.1
+ * @type Boolean
  * @default false
  * @example
  * config.htmlEncodeOutput = true;
  */
+
+/**
+ * Fired when a CKEDITOR instance is created, but still before initializing it.
+ * To interact with a fully initialized instance, use the
+ * {@link CKEDITOR#instanceReady} event instead.
+ * @name CKEDITOR#instanceCreated
+ * @event
+ * @param {CKEDITOR.editor} editor The editor instance that has been created.
+ */
+
+/**
+ * Fired when a CKEDITOR instance is destroyed.
+ * @name CKEDITOR#instanceDestroyed
+ * @event
+ * @param {CKEDITOR.editor} editor The editor instance that has been destroyed.
+ */
+
+/**
+ * Fired when all plugins are loaded and initialized into the editor instance.
+ * @name CKEDITOR#pluginsLoaded
+ * @event
+ */
Index: /CKEditor/branches/versions/3.1.x/_source/core/editor_basic.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/editor_basic.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/editor_basic.js	(revision 5180)
@@ -137,5 +137,5 @@
 			element = document.getElementById( elementOrId );
 
-			if( !element )
+			if ( !element )
 				throw '[CKEDITOR.editor.appendTo] The element with id "' + elementOrId + '" was not found.';
 		}
Index: /CKEditor/branches/versions/3.1.x/_source/core/event.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/event.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/event.js	(revision 5180)
@@ -78,5 +78,6 @@
 			 * @param {String} eventName The event name to which listen.
 			 * @param {Function} listenerFunction The function listening to the
-			 *		event.
+			 *		event. A single {@link CKEDITOR.eventInfo} object instanced
+			 *		is passed to this function containing all the event data.
 			 * @param {Object} [scopeObj] The object used to scope the listener
 			 *		call (the this object. If omitted, the current object is used.
Index: /CKEditor/branches/versions/3.1.x/_source/core/focusmanager.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/focusmanager.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/focusmanager.js	(revision 5180)
@@ -122,2 +122,16 @@
 	}
 };
+
+/**
+ * Fired when the editor instance receives the input focus.
+ * @name CKEDITOR.editor#focus
+ * @event
+ * @param {CKEDITOR.editor} editor The editor instance.
+ */
+
+/**
+ * Fired when the editor instance loses the input focus.
+ * @name CKEDITOR.editor#blur
+ * @event
+ * @param {CKEDITOR.editor} editor The editor instance.
+ */
Index: /CKEditor/branches/versions/3.1.x/_source/core/htmlparser.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/htmlparser.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/htmlparser.js	(revision 5180)
@@ -202,5 +202,5 @@
 
 				// Comment
-				if( ( tagName = parts[ 2 ] ) )
+				if ( ( tagName = parts[ 2 ] ) )
 					this.onComment( tagName );
 			}
Index: /CKEditor/branches/versions/3.1.x/_source/core/htmlparser/basicwriter.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/htmlparser/basicwriter.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/htmlparser/basicwriter.js	(revision 5180)
@@ -61,4 +61,8 @@
 		attribute : function( attName, attValue )
 		{
+			// Browsers don't always escape quote in attribute values. (#4683)
+			if ( typeof attValue == 'string' )
+				attValue = attValue.replace( /"/g, '&quot;' );
+
 			this._.output.push( ' ', attName, '="', attValue, '"' );
 		},
Index: /CKEditor/branches/versions/3.1.x/_source/core/htmlparser/element.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/htmlparser/element.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/htmlparser/element.js	(revision 5180)
@@ -115,5 +115,5 @@
 			element.filterChildren = function()
 			{
-				if( !isChildrenFiltered )
+				if ( !isChildrenFiltered )
 				{
 					var writer = new CKEDITOR.htmlParser.basicWriter();
@@ -172,5 +172,5 @@
 			// Iterate over the attributes twice since filters may alter
 			// other attributes.
-			for( var i = 0 ; i < 2; i++ )
+			for ( var i = 0 ; i < 2; i++ )
 			{
 				for ( a in attributes )
@@ -178,5 +178,5 @@
 					newAttrName = a;
 					value = attributes[ a ];
-					if( i == 1 )
+					if ( i == 1 )
 						attribsArray.push( [ a, value ] );
 					else if ( filter )
@@ -189,5 +189,5 @@
 								break;
 							}
-							else if( newAttrName != a )
+							else if ( newAttrName != a )
 							{
 								delete attributes[ a ];
@@ -198,7 +198,7 @@
 								break;
 						}
-						if( newAttrName )
+						if ( newAttrName )
 						{
-							if( ( value = filter.onAttribute( element, newAttrName, value ) ) === false )
+							if ( ( value = filter.onAttribute( element, newAttrName, value ) ) === false )
 								delete attributes[ newAttrName ];
 							else
Index: /CKEditor/branches/versions/3.1.x/_source/core/htmlparser/filter.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/htmlparser/filter.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/htmlparser/filter.js	(revision 5180)
@@ -151,5 +151,5 @@
 	function addItemsToList( list, items, priority )
 	{
-		if( typeof items == 'function' )
+		if ( typeof items == 'function' )
 			items = [ items ];
 
Index: /CKEditor/branches/versions/3.1.x/_source/core/htmlparser/fragment.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/htmlparser/fragment.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/htmlparser/fragment.js	(revision 5180)
@@ -65,4 +65,5 @@
 			fragment = new CKEDITOR.htmlParser.fragment(),
 			pendingInline = [],
+			pendingBRs = [],
 			currentNode = fragment,
 		    // Indicate we're inside a <pre> element, spaces should be touched differently.
@@ -72,4 +73,6 @@
 		function checkPending( newTagName )
 		{
+			var pendingBRsSent;
+
 			if ( pendingInline.length > 0 )
 			{
@@ -83,4 +86,10 @@
 					if ( ( !currentDtd || currentDtd[ pendingName ] ) && ( !newTagName || !pendingDtd || pendingDtd[ newTagName ] || !CKEDITOR.dtd[ newTagName ] ) )
 					{
+						if ( !pendingBRsSent )
+						{
+							sendPendingBRs();
+							pendingBRsSent = 1;
+						}
+
 						// Get a clone for the pending element.
 						pendingElement = pendingElement.clone();
@@ -98,4 +107,10 @@
 				}
 			}
+		}
+
+		function sendPendingBRs()
+		{
+			while ( pendingBRs.length )
+				currentNode.add( pendingBRs.shift() );
 		}
 
@@ -182,4 +197,10 @@
 			}
 
+			if ( tagName == 'br' )
+			{
+				pendingBRs.push( element );
+				return;
+			}
+
 			var currentName = currentNode.name;
 
@@ -197,5 +218,5 @@
 
 				// Fixing malformed nested lists by moving it into a previous list item. (#3828)
-				if( tagName in listBlocks
+				if ( tagName in listBlocks
 					&& currentName in listBlocks )
 				{
@@ -240,5 +261,5 @@
 				}
 
-				if( addPoint )
+				if ( addPoint )
 					currentNode = addPoint;
 				// Try adding it to the return point, or the parent element.
@@ -309,6 +330,9 @@
 				currentNode = candidate;
 
-				if( currentNode.name == 'pre' )
+				if ( currentNode.name == 'pre' )
 					inPre = false;
+
+				if ( candidate._.isBlockLike )
+					sendPendingBRs();
 
 				addElement( candidate, candidate.parent );
@@ -322,5 +346,5 @@
 			}
 
-			if( tagName == 'body' )
+			if ( tagName == 'body' )
 				fixForBody = false;
 		};
@@ -337,4 +361,5 @@
 			}
 
+			sendPendingBRs();
 			checkPending();
 
@@ -366,4 +391,6 @@
 		// Parse it.
 		parser.parse( fragmentHtml );
+
+		sendPendingBRs();
 
 		// Close all pending nodes.
Index: /CKEditor/branches/versions/3.1.x/_source/core/lang.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/lang.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/lang.js	(revision 5180)
@@ -25,4 +25,5 @@
 			'ca'	: 1,
 			'cs'	: 1,
+			'cy'	: 1,
 			'da'	: 1,
 			'de'	: 1,
@@ -30,5 +31,5 @@
 			'en-au'	: 1,
 			'en-ca'	: 1,
-			'en-uk'	: 1,
+			'en-gb'	: 1,
 			'en'	: 1,
 			'eo'	: 1,
Index: /CKEditor/branches/versions/3.1.x/_source/core/loader.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/loader.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/loader.js	(revision 5180)
@@ -162,6 +162,6 @@
 				// We must guarantee the execution order of the scripts, so we
 				// need to load them one by one. (#4145)
-				// The followin if/else block has been taken from the scriptloader core code.
-				if ( CKEDITOR.env.ie )
+				// The following if/else block has been taken from the scriptloader core code.
+				if ( typeof(script.onreadystatechange) !== "undefined" )
 				{
 					/** @ignore */
@@ -191,5 +191,5 @@
 			/**
 			 * Loads a specific script, including its dependencies. This is not a
-			 * synchronous loading, which means that the code the be loaded will
+			 * synchronous loading, which means that the code to be loaded will
 			 * not necessarily be available after this call.
 			 * @example
@@ -218,5 +218,8 @@
 
 				// Append the <script> element to the DOM.
-				if ( document.body )
+				// If the page is fully loaded, we can't use document.write
+				// but if the script is run while the body is loading then it's safe to use it
+				// Unfortunately, Firefox <3.6 doesn't support document.readyState, so it won't get this improvement
+				if ( document.body && (!document.readyState || document.readyState == 'complete') )
 				{
 					pendingLoad.push( scriptName );
Index: /CKEditor/branches/versions/3.1.x/_source/core/skins.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/skins.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/skins.js	(revision 5180)
@@ -195,5 +195,5 @@
 			{
 				paths[ skinName ] = skinPath;
-				CKEDITOR.scriptLoader.load( skinPath + 'skin.js', function()
+				CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( skinPath + 'skin.js' ), function()
 						{
 							 loadPart( editor, skinName, skinPart, callback );
Index: /CKEditor/branches/versions/3.1.x/_source/core/xml.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/core/xml.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/core/xml.js	(revision 5180)
@@ -120,5 +120,5 @@
 				{
 					var node;
-					while( ( node = result.iterateNext() ) )
+					while ( ( node = result.iterateNext() ) )
 						nodes.push( node );
 				}
Index: /CKEditor/branches/versions/3.1.x/_source/lang/_languages.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/lang/_languages.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/lang/_languages.js	(revision 5180)
@@ -15,4 +15,5 @@
 		ca		: 'Catalan',
 		cs		: 'Czech',
+		cy		: 'Welsh',
 		da		: 'Danish',
 		de		: 'German',
@@ -21,5 +22,5 @@
 		'en-au'	: 'English (Australia)',
 		'en-ca'	: 'English (Canadian)',
-		'en-uk'	: 'English (United Kingdom)',
+		'en-gb'	: 'English (United Kingdom)',
 		eo		: 'Esperanto',
 		es		: 'Spanish',
Index: /CKEditor/branches/versions/3.1.x/_source/lang/_translationstatus.txt
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/lang/_translationstatus.txt	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/lang/_translationstatus.txt	(revision 5180)
@@ -9,4 +9,5 @@
 ca.js      Found: 426 Missing: 63
 cs.js      Found: 433 Missing: 56
+cy.js      Found: 474 Missing: 15
 da.js      Found: 426 Missing: 63
 de.js      Found: 466 Missing: 23
@@ -14,11 +15,11 @@
 en-au.js   Found: 385 Missing: 104
 en-ca.js   Found: 385 Missing: 104
-en-uk.js   Found: 385 Missing: 104
+en-gb.js   Found: 385 Missing: 104
 eo.js      Found: 275 Missing: 214
-es.js      Found: 426 Missing: 63
+es.js      Found: 489 Missing: 0
 et.js      Found: 316 Missing: 173
 eu.js      Found: 426 Missing: 63
 fa.js      Found: 317 Missing: 172
-fi.js      Found: 434 Missing: 55
+fi.js      Found: 489 Missing: 0
 fo.js      Found: 316 Missing: 173
 fr-ca.js   Found: 317 Missing: 172
@@ -26,5 +27,5 @@
 gl.js      Found: 298 Missing: 191
 gu.js      Found: 316 Missing: 173
-he.js      Found: 435 Missing: 54
+he.js      Found: 489 Missing: 0
 hi.js      Found: 317 Missing: 172
 hr.js      Found: 426 Missing: 63
@@ -40,5 +41,5 @@
 ms.js      Found: 280 Missing: 209
 nb.js      Found: 432 Missing: 57
-nl.js      Found: 433 Missing: 56
+nl.js      Found: 489 Missing: 0
 no.js      Found: 432 Missing: 57
 pl.js      Found: 433 Missing: 56
@@ -46,7 +47,7 @@
 pt.js      Found: 297 Missing: 192
 ro.js      Found: 316 Missing: 173
-ru.js      Found: 322 Missing: 167
+ru.js      Found: 489 Missing: 0
 sk.js      Found: 317 Missing: 172
-sl.js      Found: 315 Missing: 174
+sl.js      Found: 432 Missing: 57
 sr-latn.js Found: 291 Missing: 198
 sr.js      Found: 291 Missing: 198
Index: /CKEditor/branches/versions/3.1.x/_source/lang/cy.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/lang/cy.js	(revision 5180)
+++ /CKEditor/branches/versions/3.1.x/_source/lang/cy.js	(revision 5180)
@@ -0,0 +1,697 @@
+﻿/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the
+ * Welsh language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['cy'] =
+{
+	/**
+	 * The language reading direction. Possible values are "rtl" for
+	 * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right
+	 * languages (like English).
+	 * @default 'ltr'
+	 */
+	dir : 'ltr',
+
+	/*
+	 * Screenreader titles. Please note that screenreaders are not always capable
+	 * of reading non-English words. So be careful while translating it.
+	 */
+	editorTitle		: 'Golygydd testun cyfoethog, %1',
+
+	// Toolbar buttons without dialogs.
+	source			: 'Tarddle',
+	newPage			: 'Tudalen newydd',
+	save			: 'Cadw',
+	preview			: 'Rhagolwg',
+	cut				: 'Torri',
+	copy			: 'Copïo',
+	paste			: 'Gludo',
+	print			: 'Argraffu',
+	underline		: 'Tanlinellu',
+	bold			: 'Bras',
+	italic			: 'Italig',
+	selectAll		: 'Dewis Popeth',
+	removeFormat	: 'Tynnu Fformat',
+	strike			: 'Llinell Trwyddo',
+	subscript		: 'Is-sgript',
+	superscript		: 'Uwchsgript',
+	horizontalrule	: 'Mewnosod Llinell Lorweddol',
+	pagebreak		: 'Mewnosod Toriad Tudalen i Argraffu',
+	unlink			: 'Datgysylltu',
+	undo			: 'Dadwneud',
+	redo			: 'Ailadrodd',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Pori\'r Gweinydd',
+		url				: 'URL',
+		protocol		: 'Protocol',
+		upload			: 'Lanlwytho',
+		uploadSubmit	: 'Anfon i\'r Gweinydd',
+		image			: 'Delwedd',
+		flash			: 'Flash',
+		form			: 'Ffurflen',
+		checkbox		: 'Blwch ticio',
+		radio		: 'Botwm Radio',
+		textField		: 'Maes Testun',
+		textarea		: 'Ardal Testun',
+		hiddenField		: 'Maes Cudd',
+		button			: 'Botwm',
+		select	: 'Maes Dewis',
+		imageButton		: 'Botwm Delwedd',
+		notSet			: '<heb osod>',
+		id				: 'Id',
+		name			: 'Name',
+		langDir			: 'Cyfeiriad Iaith',
+		langDirLtr		: 'Chwith i\'r Dde (LTR)',
+		langDirRtl		: 'Dde i\'r Chwith (RTL)',
+		langCode		: 'Cod Iaith',
+		longDescr		: 'URL Disgrifiad Hir',
+		cssClass		: 'Dosbarth Dalen Arddull',
+		advisoryTitle	: 'Teitl Cynghorol',
+		cssStyle		: 'Arddull',
+		ok				: 'Iawn',
+		cancel			: 'Diddymu',
+		generalTab		: 'Cyffredinol',
+		advancedTab		: 'Uwch',
+		validateNumberFailed	: 'Nid yw\'r gwerth hwn yn rhif.',
+		confirmNewPage	: 'Byddwch yn colli unrhyw newidiadau i\'r cynnwys sydd heb eu cadw. A ydych am barhau i lwytho tudalen newydd?',
+		confirmCancel	: 'Mae rhai o\'r opsiynau wedi\'u newid. A ydych wir am gau\'r deialog?',
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, ddim ar gael</span>'
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Mewnosod Nodau Arbennig',
+		title		: 'Dewis Nod Arbennig'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Dolen',
+		menu		: 'Golygu Dolen',
+		title		: 'Dolen',
+		info		: 'Gwyb ar y Ddolen',
+		target		: 'Targed',
+		upload		: 'Lanlwytho',
+		advanced	: 'Uwch',
+		type		: 'Math y Ddolen',
+		toAnchor	: 'Dolen at angor yn y testun',
+		toEmail		: 'E-bost',
+		target		: 'Targed',
+		targetNotSet	: '<heb osod>',
+		targetFrame	: '<ffrâm>',
+		targetPopup	: '<ffenestr bop>',
+		targetNew	: 'Ffenestr Newydd (_blank)',
+		targetTop	: 'Ffenestr Dop (_top)',
+		targetSelf	: 'R\'un Ffenestr (_self)',
+		targetParent	: 'Ffenestr y Rhiant (_parent)',
+		targetFrameName	: 'Enw Ffrâm y Targed',
+		targetPopupName	: 'Enw Ffenestr Bop',
+		popupFeatures	: 'Nodweddion Ffenestr Bop',
+		popupResizable	: 'Ailfeintiol',
+		popupStatusBar	: 'Bar Statws',
+		popupLocationBar	: 'Bar Safle',
+		popupToolbar	: 'Bar Offer',
+		popupMenuBar	: 'Dewislen',
+		popupFullScreen	: 'Sgrin Llawn (IE)',
+		popupScrollBars	: 'Barrau Sgrolio',
+		popupDependent	: 'Dibynnol (Netscape)',
+		popupWidth		: 'Lled',
+		popupLeft		: 'Safle Chwith',
+		popupHeight		: 'Uchder',
+		popupTop		: 'Safle Top',
+		id				: 'Id',
+		langDir			: 'Cyfeiriad Iaith',
+		langDirNotSet	: '<heb osod>',
+		langDirLTR		: 'Chwith i\'r Dde (LTR)',
+		langDirRTL		: 'Dde i\'r Chwith (RTL)',
+		acccessKey		: 'Allwedd Mynediad',
+		name			: 'Enw',
+		langCode		: 'Cod Iaith',
+		tabIndex		: 'Indecs Tab',
+		advisoryTitle	: 'Teitl Cynghorol',
+		advisoryContentType	: 'Math y Cynnwys Cynghorol',
+		cssClasses		: 'Dosbarthiadau Dalen Arddull',
+		charset			: 'Set nodau\'r Adnodd Cysylltiedig',
+		styles			: 'Arddull',
+		selectAnchor	: 'Dewiswch Angor',
+		anchorName		: 'Gan Enw\'r Angor',
+		anchorId		: 'Gan Id yr Elfen',
+		emailAddress	: 'Cyfeiriad E-Bost',
+		emailSubject	: 'Testun y Message Subject',
+		emailBody		: 'Pwnc y Neges',
+		noAnchors		: '(Dim angorau ar gael yn y ddogfen)',
+		noUrl			: 'Teipiwch URL y ddolen',
+		noEmail			: 'Teipiwch gyfeiriad yr e-bost'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Angor',
+		menu		: 'Golygwch yr Angor',
+		title		: 'Priodweddau\'r Angor',
+		name		: 'Enw\'r Angor',
+		errorName	: 'Teipiwch enw\'r angor'
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Chwilio ac Amnewid',
+		find				: 'Chwilio',
+		replace				: 'Amnewid',
+		findWhat			: 'Chwilio\'r term:',
+		replaceWith			: 'Amnewid gyda:',
+		notFoundMsg			: 'Nid oedd y testun wedi\'i ddarganfod.',
+		matchCase			: 'Cyfateb i\'r cas',
+		matchWord			: 'Cyfateb gair cyfan',
+		matchCyclic			: 'Cyfateb cylchol',
+		replaceAll			: 'Amnewid pob un',
+		replaceSuccessMsg	: 'Amnewidiwyd %1 achlysur.'
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tabl',
+		title		: 'Nodweddion Tabl',
+		menu		: 'Nodweddion Tabl',
+		deleteTable	: 'Dileu Tabl',
+		rows		: 'Rhesi',
+		columns		: 'Colofnau',
+		border		: 'Maint yr Ymyl',
+		align		: 'Aliniad',
+		alignNotSet	: '<Heb osod>',
+		alignLeft	: 'Chwith',
+		alignCenter	: 'Canol',
+		alignRight	: 'Dde',
+		width		: 'Lled',
+		widthPx		: 'picsel',
+		widthPc		: 'y cant',
+		height		: 'Uchder',
+		cellSpace	: 'Bylchu\'r gell',
+		cellPad		: 'Padio\'r gell',
+		caption		: 'Pennawd',
+		summary		: 'Crynodeb',
+		headers		: 'Penynnau',
+		headersNone		: 'Dim',
+		headersColumn	: 'Colofn gyntaf',
+		headersRow		: 'Rhes gyntaf',
+		headersBoth		: 'Y Ddau',
+		invalidRows		: 'Mae\'n rhaid cael o leiaf un rhes.',
+		invalidCols		: 'Mae\'n rhaid cael o leiaf un golofn.',
+		invalidBorder	: 'Mae\'n rhaid i faint yr ymyl fod yn rhif.',
+		invalidWidth	: 'Mae\'n rhaid i led y tabl fod yn rhif.',
+		invalidHeight	: 'Mae\'n rhaid i uchder y tabl fod yn rhif.',
+		invalidCellSpacing	: 'Mae\'n rhaid i fylchiad y gell fod yn rhif.',
+		invalidCellPadding	: 'Mae\'n rhaid i badiad y gell fod yn rhif.',
+
+		cell :
+		{
+			menu			: 'Cell',
+			insertBefore	: 'Mewnosod Cell Cyn',
+			insertAfter		: 'Mewnosod Cell Ar Ôl',
+			deleteCell		: 'Dileu Celloedd',
+			merge			: 'Cyfuno Celloedd',
+			mergeRight		: 'Cyfuno i\'r Dde',
+			mergeDown		: 'Cyfuno i Lawr',
+			splitHorizontal	: 'Hollti\'r Gell yn Lorweddol',
+			splitVertical	: 'Hollti\'r Gell yn Fertigol',
+			title			: 'Priodweddau\'r Gell',
+			cellType		: 'Math y Gell',
+			rowSpan			: 'Rhychwant Rhesi',
+			colSpan			: 'Rhychwant Colofnau',
+			wordWrap		: 'Lapio Geiriau',
+			hAlign			: 'Aliniad Llorweddol',
+			vAlign			: 'Aliniad Fertigol',
+			alignTop		: 'Top',
+			alignMiddle		: 'Canol',
+			alignBottom		: 'Gwaelod',
+			alignBaseline	: 'Baslinell',
+			bgColor			: 'Lliw Cefndir',
+			borderColor		: 'Lliw Ymyl',
+			data			: 'Data',
+			header			: 'Pennyn',
+			yes				: 'Ie',
+			no				: 'Na',
+			invalidWidth	: 'Mae\'n rhaid i led y gell fod yn rhif.',
+			invalidHeight	: 'Mae\'n rhaid i uchder y gell fod yn rhif.',
+			invalidRowSpan	: 'Mae\'n rhaid i rychwant y rhesi fod yn gyfanrif.',
+			invalidColSpan	: 'Mae\'n rhaid i rychwant y colofnau fod yn gyfanrif.',
+			chooseColor : 'Choose'
+		},
+
+		row :
+		{
+			menu			: 'Rhes',
+			insertBefore	: 'Mewnosod Rhes Cyn',
+			insertAfter		: 'Mewnosod Rhes Ar Ôl',
+			deleteRow		: 'Dileu Rhesi'
+		},
+
+		column :
+		{
+			menu			: 'Colofn',
+			insertBefore	: 'Mewnosod Colofn Cyn',
+			insertAfter		: 'Mewnosod Colofn Ar Ôl',
+			deleteColumn	: 'Dileu Colofnau'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Priodweddau Botymau',
+		text		: 'Testun (Gwerth)',
+		type		: 'Math',
+		typeBtn		: 'Botwm',
+		typeSbm		: 'Gyrru',
+		typeRst		: 'Ailosod'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Priodweddau Blwch Ticio',
+		radioTitle	: 'Priodweddau Botwm Radio',
+		value		: 'Gwerth',
+		selected	: 'Dewiswyd'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Priodweddau Ffurflen',
+		menu		: 'Priodweddau Ffurflen',
+		action		: 'Gweithred',
+		method		: 'Dull',
+		encoding	: 'Amgodio',
+		target		: 'Targed',
+		targetNotSet	: '<heb osod>',
+		targetNew	: 'Ffenestr Newydd (_blank)',
+		targetTop	: 'Ffenestr Dop (_top)',
+		targetSelf	: 'R\'un Ffenestr (_self)',
+		targetParent	: 'Ffenestr y Rhiant(_parent)'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Priodweddau Maes Dewis',
+		selectInfo	: 'Gwyb Dewis',
+		opAvail		: 'Opsiynau ar Gael',
+		value		: 'Gwerth',
+		size		: 'Maint',
+		lines		: 'llinellau',
+		chkMulti	: 'Caniatàu aml-ddewisiadau',
+		opText		: 'Testun',
+		opValue		: 'Gwerth',
+		btnAdd		: 'Ychwanegu',
+		btnModify	: 'Newid',
+		btnUp		: 'Lan',
+		btnDown		: 'Lawr',
+		btnSetValue : 'Gosod fel gwerth a ddewiswyd',
+		btnDelete	: 'Dileu'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Priodweddau Ardal Testun',
+		cols		: 'Colofnau',
+		rows		: 'Rhesi'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Priodweddau Maes Testun',
+		name		: 'Enw',
+		value		: 'Gwerth',
+		charWidth	: 'Lled Nod',
+		maxChars	: 'Uchafswm y Nodau',
+		type		: 'Math',
+		typeText	: 'Testun',
+		typePass	: 'Cyfrinair'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Priodweddau Maes Cudd',
+		name	: 'Enw',
+		value	: 'Gwerth'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Priodweddau Delwedd',
+		titleButton	: 'Priodweddau Botwm Delwedd',
+		menu		: 'Priodweddau Delwedd',
+		infoTab	: 'Gwyb Delwedd',
+		btnUpload	: 'Anfon i\'r Gweinydd',
+		url		: 'URL',
+		upload	: 'lanlwytho',
+		alt		: 'Testun Amgen',
+		width		: 'Lled',
+		height	: 'Uchder',
+		lockRatio	: 'Cloi Cymhareb',
+		resetSize	: 'Ailosod Maint',
+		border	: 'Ymyl',
+		hSpace	: 'BwlchLl',
+		vSpace	: 'BwlchF',
+		align		: 'Alinio',
+		alignLeft	: 'Chwith',
+		alignRight	: 'Dde',
+		preview	: 'Rhagolwg',
+		alertUrl	: 'Rhowch URL y ddelwedd',
+		linkTab	: 'Dolen',
+		button2Img	: 'Ydych am drawsffurfio\'r botwm ddelwedd hwn ar ddelwedd syml?',
+		img2Button	: 'Ydych am drawsffurfio\'r ddelwedd hon ar fotwm delwedd?',
+		urlMissing : 'URL tarddle\'r ddelwedd ar goll.'
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Priodweddau Flash',
+		propertiesTab	: 'Priodweddau',
+		title		: 'Priodweddau Flash',
+		chkPlay		: 'AwtoChwarae',
+		chkLoop		: 'Lwpio',
+		chkMenu		: 'Galluogi Dewislen Flash',
+		chkFull		: 'Caniatàu Sgrin Llawn',
+ 		scale		: 'Graddfa',
+		scaleAll		: 'Dangos pob',
+		scaleNoBorder	: 'Dim Ymyl',
+		scaleFit		: 'Ffit Union',
+		access			: 'Mynediad Sgript',
+		accessAlways	: 'Pob amser',
+		accessSameDomain	: 'R\'un parth',
+		accessNever	: 'Byth',
+		align		: 'Alinio',
+		alignLeft	: 'Chwith',
+		alignAbsBottom: 'Gwaelod Abs',
+		alignAbsMiddle: 'Canol Abs',
+		alignBaseline	: 'Baslinell',
+		alignBottom	: 'Gwaelod',
+		alignMiddle	: 'Canol',
+		alignRight	: 'Dde',
+		alignTextTop	: 'Testun Top',
+		alignTop	: 'Top',
+		quality		: 'Ansawdd',
+		qualityBest		 : 'Gorau',
+		qualityHigh		 : 'Uchel',
+		qualityAutoHigh	 : 'Uchel Awto',
+		qualityMedium	 : 'Canolig',
+		qualityAutoLow	 : 'Isel Awto',
+		qualityLow		 : 'Isel',
+		windowModeWindow	 : 'Ffenestr',
+		windowModeOpaque	 : 'Afloyw',
+		windowModeTransparent	 : 'Tryloyw',
+		windowMode	: 'Modd ffenestr',
+		flashvars	: 'Newidynnau ar gyfer Flash',
+		bgcolor	: 'Lliw cefndir',
+		width	: 'Lled',
+		height	: 'Uchder',
+		hSpace	: 'BwlchLl',
+		vSpace	: 'BwlchF',
+		validateSrc : 'Ni all yr URL fod yn wag.',
+		validateWidth : 'Rhaid i\'r Lled fod yn rhif.',
+		validateHeight : 'Rhaid i\'r Uchder fod yn rhif.',
+		validateHSpace : 'Rhaid i\'r BwlchLl fod yn rhif.',
+		validateVSpace : 'Rhaid i\'r BwlchF fod yn rhif.'
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Gwirio Sillafu',
+		title			: 'Gwirio Sillafu',
+		notAvailable	: 'Nid yw\'r gwasanaeth hwn ar gael yn bresennol.',
+		errorLoading	: 'Error loading application service host: %s.',
+		notInDic		: 'Nid i\'w gael yn y geiriadur',
+		changeTo		: 'Newid i',
+		btnIgnore		: 'Anwybyddu Un',
+		btnIgnoreAll	: 'Anwybyddu Pob',
+		btnReplace		: 'Amnewid Un',
+		btnReplaceAll	: 'Amnewid Pob',
+		btnUndo			: 'Dadwneud',
+		noSuggestions	: '- Dim awgrymiadau -',
+		progress		: 'Gwirio sillafu yn ar y gweill...',
+		noMispell		: 'Gwirio sillafu wedi gorffen: Dim camsillaf.',
+		noChanges		: 'Gwirio sillafu wedi gorffen: Dim newidiadau',
+		oneChange		: 'Gwirio sillafu wedi gorffen: Newidiwyd 1 gair',
+		manyChanges		: 'Gwirio sillafu wedi gorffen: Newidiwyd %1 gair',
+		ieSpellDownload	: 'Gwirydd sillafu heb ei arsefydlu. A ydych am ei lawrlwytho nawr?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Gwenoglun',
+		title	: 'Mewnosod Gwenoglun'
+	},
+
+	elementsPath :
+	{
+		eleTitle : 'Elfen %1'
+	},
+
+	numberedlist : 'Mewnosod/Tynnu Rhestr Rhifol',
+	bulletedlist : 'Mewnosod/Tynnu Rhestr Bwled',
+	indent : 'Cynyddu\'r Mewnoliad',
+	outdent : 'Lleihau\'r Mewnoliad',
+
+	justify :
+	{
+		left : 'Alinio i\'r Chwith',
+		center : 'Alinio i\'r Canol',
+		right : 'Alinio i\'r Dde',
+		block : 'Aliniad Bloc'
+	},
+
+	blockquote : 'Dyfyniad bloc',
+
+	clipboard :
+	{
+		title		: 'Gludo',
+		cutError	: 'Nid yw gosodiadau diogelwch eich porwr yn caniatàu\'r golygydd i gynnal \'gweithredoedd torri\' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl+X).',
+		copyError	: 'Nid yw gosodiadau diogelwch eich porwr yn caniatàu\'r golygydd i gynnal \'gweithredoedd copïo\' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl+C).',
+		pasteMsg	: 'Gludwch i mewn i\'r blwch canlynol gan ddefnyddio\'r bysellfwrdd (<strong>Ctrl+V</strong>) a phwyso <strong>Iawn</strong>.',
+		securityMsg	: 'Oherwydd gosodiadau diogelwch eich porwr, nid yw\'r porwr yn gallu ennill mynediad i\'r data ar y clipfwrdd yn uniongyrchol. Mae angen i chi ei ludo eto i\'r ffenestr hon.'
+	},
+
+	pastefromword :
+	{
+		confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar : 'Gludo o Word',
+		title : 'Gludo o Word',
+		error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button : 'Gludo fel testun plaen',
+		title : 'Gludo fel Testun Plaen'
+	},
+
+	templates :
+	{
+		button : 'Templedi',
+		title : 'Templedi Cynnwys',
+		insertOption: 'Amnewid y cynnwys go iawn',
+		selectPromptMsg: 'Dewiswch dempled i\'w agor yn y golygydd',
+		emptyListMsg : '(Dim templedi wedi\'u diffinio)'
+	},
+
+	showBlocks : 'Dangos Blociau',
+
+	stylesCombo :
+	{
+		label : 'Arddulliau',
+		voiceLabel : 'Arddulliau',
+		panelVoiceLabel : 'Dewiswch arddull',
+		panelTitle1 : 'Arddulliau Bloc',
+		panelTitle2 : 'Arddulliau Mewnol',
+		panelTitle3 : 'Arddulliau Gwrthrych'
+	},
+
+	format :
+	{
+		label : 'Fformat',
+		voiceLabel : 'Fformat',
+		panelTitle : 'Fformat Paragraff',
+		panelVoiceLabel : 'Dewiswch fformat y paragraff',
+
+		tag_p : 'Normal',
+		tag_pre : 'Wedi\'i Fformatio',
+		tag_address : 'Cyfeiriad',
+		tag_h1 : 'Pennawd 1',
+		tag_h2 : 'Pennawd 2',
+		tag_h3 : 'Pennawd 3',
+		tag_h4 : 'Pennawd 4',
+		tag_h5 : 'Pennawd 5',
+		tag_h6 : 'Pennawd 6',
+		tag_div : 'Normal (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
+  	},
+
+	font :
+	{
+		label : 'Ffont',
+		voiceLabel : 'Ffont',
+		panelTitle : 'Enw\'r Ffont',
+		panelVoiceLabel : 'Dewiswch ffont'
+	},
+
+	fontSize :
+	{
+		label : 'Maint',
+		voiceLabel : 'Maint y Ffont',
+		panelTitle : 'Maint y Ffont',
+		panelVoiceLabel : 'Dewiswch faint i\'r ffont'
+	},
+
+	colorButton :
+	{
+		textColorTitle : 'Lliw Testun',
+		bgColorTitle : 'Lliw Cefndir',
+		auto : 'Awtomatig',
+		more : 'Mwy o Liwiau...'
+	},
+
+	colors :
+	{
+		'000' : 'Du',
+		'800000' : 'Marwn',
+		'8B4513' : 'Brown Cyfrwy',
+		'2F4F4F' : 'Llechen Tywyll',
+		'008080' : 'Corhwyad',
+		'000080' : 'Nefi',
+		'4B0082' : 'Indigo',
+		'696969' : 'Llwyd Pwl',
+		'B22222' : 'Bric Tân',
+		'A52A2A' : 'Brown',
+		'DAA520' : 'Rhoden Aur',
+		'006400' : 'Gwyrdd Tywyll',
+		'40E0D0' : 'Gwyrddlas',
+		'0000CD' : 'Glas Canolig',
+		'800080' : 'Porffor',
+		'808080' : 'Llwyd',
+		'F00' : 'Coch',
+		'FF8C00' : 'Oren Tywyll',
+		'FFD700' : 'Aur',
+		'008000' : 'Gwyrdd',
+		'0FF' : 'Cyan',
+		'00F' : 'Glas',
+		'EE82EE' : 'Fioled',
+		'A9A9A9' : 'Llwyd Tywyll',
+		'FFA07A' : 'Samwn Golau',
+		'FFA500' : 'Oren',
+		'FFFF00' : 'Melyn',
+		'00FF00' : 'Leim',
+		'AFEEEE' : 'Gwyrddlas Golau',
+		'ADD8E6' : 'Glas Golau',
+		'DDA0DD' : 'Eirinen',
+		'D3D3D3' : 'Llwyd Golau',
+		'FFF0F5' : 'Gwrid Lafant',
+		'FAEBD7' : 'Gwyn Hynafol',
+		'FFFFE0' : 'Melyn Golau',
+		'F0FFF0' : 'Melwn Gwyrdd Golau',
+		'F0FFFF' : 'Aswr',
+		'F0F8FF' : 'Glas Alys',
+		'E6E6FA' : 'Lafant',
+		'FFF' : 'Gwyn'
+	},
+
+	scayt :
+	{
+		title : 'Gwirio\'r Sillafu Wrth Deipio',
+		enable : 'Galluogi SCAYT',
+		disable : 'Analluogi SCAYT',
+		about : 'Ynghylch SCAYT',
+		toggle : 'Togl SCAYT',
+		options : 'Opsiynau',
+		langs : 'Ieithoedd',
+		moreSuggestions : 'Awgrymiadau pellach',
+		ignore : 'Anwybyddu',
+		ignoreAll : 'Anwybyddu pob',
+		addWord : 'Ychwanegu Gair',
+		emptyDic : 'Ni ddylai enw\'r geiriadur fod yn wag.',
+		optionsTab : 'Opsiynau',
+		languagesTab : 'Ieithoedd',
+		dictionariesTab : 'Geiriaduron',
+		aboutTab : 'Ynghylch'
+	},
+
+	about :
+	{
+		title : 'Ynghylch CKEditor',
+		dlgTitle : 'Ynghylch CKEditor',
+		moreInfo : 'Am wybodaeth ynghylch trwyddedau, ewch i\'n gwefan:',
+		copy : 'Hawlfraint &copy; $1. Cedwir pob hawl.'
+	},
+
+	maximize : 'Mwyhau',
+	minimize : 'Lleihau',
+
+	fakeobjects :
+	{
+		anchor : 'Angor',
+		flash : 'Animeiddiant Flash',
+		div : 'Toriad Tudalen',
+		unknown : 'Gwrthrych Anhysbys'
+	},
+
+	resize : 'Llusgo i ailfeintio',
+
+	colordialog :
+	{
+		title : 'Dewis lliw',
+		highlight : 'Uwcholeuo',
+		selected : 'Dewiswyd',
+		clear : 'Clirio'
+	},
+
+	toolbarCollapse : 'Cyfangu\'r Bar Offer',
+	toolbarExpand : 'Ehangu\'r Bar Offer'
+};
Index: /CKEditor/branches/versions/3.1.x/_source/lang/en-ca.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/lang/en-ca.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/lang/en-ca.js	(revision 5180)
@@ -6,5 +6,5 @@
 /**
  * @fileOverview Defines the {@link CKEDITOR.lang} object, for the
- * English (Australia) language.
+ * English (Canadian) language.
  */
 
Index: /CKEditor/branches/versions/3.1.x/_source/lang/en-gb.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/lang/en-gb.js	(revision 5180)
+++ /CKEditor/branches/versions/3.1.x/_source/lang/en-gb.js	(revision 5180)
@@ -0,0 +1,697 @@
+﻿/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.lang} object, for the
+ * English (United Kingdom) language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['en-gb'] =
+{
+	/**
+	 * The language reading direction. Possible values are "rtl" for
+	 * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right
+	 * languages (like English).
+	 * @default 'ltr'
+	 */
+	dir : 'ltr',
+
+	/*
+	 * Screenreader titles. Please note that screenreaders are not always capable
+	 * of reading non-English words. So be careful while translating it.
+	 */
+	editorTitle		: 'Rich text editor, %1',
+
+	// Toolbar buttons without dialogs.
+	source			: 'Source',
+	newPage			: 'New Page',
+	save			: 'Save',
+	preview			: 'Preview',
+	cut				: 'Cut',
+	copy			: 'Copy',
+	paste			: 'Paste',
+	print			: 'Print',
+	underline		: 'Underline',
+	bold			: 'Bold',
+	italic			: 'Italic',
+	selectAll		: 'Select All',
+	removeFormat	: 'Remove Format',
+	strike			: 'Strike Through',
+	subscript		: 'Subscript',
+	superscript		: 'Superscript',
+	horizontalrule	: 'Insert Horizontal Line',
+	pagebreak		: 'Insert Page Break for Printing',
+	unlink			: 'Unlink',
+	undo			: 'Undo',
+	redo			: 'Redo',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Browse Server',
+		url				: 'URL',
+		protocol		: 'Protocol',
+		upload			: 'Upload',
+		uploadSubmit	: 'Send it to the Server',
+		image			: 'Image',
+		flash			: 'Flash',
+		form			: 'Form',
+		checkbox		: 'Checkbox',
+		radio		: 'Radio Button',
+		textField		: 'Text Field',
+		textarea		: 'Textarea',
+		hiddenField		: 'Hidden Field',
+		button			: 'Button',
+		select	: 'Selection Field',
+		imageButton		: 'Image Button',
+		notSet			: '<not set>',
+		id				: 'Id',
+		name			: 'Name',
+		langDir			: 'Language Direction',
+		langDirLtr		: 'Left to Right (LTR)',
+		langDirRtl		: 'Right to Left (RTL)',
+		langCode		: 'Language Code',
+		longDescr		: 'Long Description URL',
+		cssClass		: 'Stylesheet Classes',
+		advisoryTitle	: 'Advisory Title',
+		cssStyle		: 'Style',
+		ok				: 'OK',
+		cancel			: 'Cancel',
+		generalTab		: 'General',
+		advancedTab		: 'Advanced',
+		validateNumberFailed	: 'This value is not a number.',
+		confirmNewPage	: 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',
+		confirmCancel	: 'Some of the options have been changed. Are you sure to close the dialog?',
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Insert Special Character',
+		title		: 'Select Special Character'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Link',
+		menu		: 'Edit Link',
+		title		: 'Link',
+		info		: 'Link Info',
+		target		: 'Target',
+		upload		: 'Upload',
+		advanced	: 'Advanced',
+		type		: 'Link Type',
+		toAnchor	: 'Link to anchor in the text',
+		toEmail		: 'E-mail',
+		target		: 'Target',
+		targetNotSet	: '<not set>',
+		targetFrame	: '<frame>',
+		targetPopup	: '<popup window>',
+		targetNew	: 'New Window (_blank)',
+		targetTop	: 'Topmost Window (_top)',
+		targetSelf	: 'Same Window (_self)',
+		targetParent	: 'Parent Window (_parent)',
+		targetFrameName	: 'Target Frame Name',
+		targetPopupName	: 'Popup Window Name',
+		popupFeatures	: 'Popup Window Features',
+		popupResizable	: 'Resizable',
+		popupStatusBar	: 'Status Bar',
+		popupLocationBar	: 'Location Bar',
+		popupToolbar	: 'Toolbar',
+		popupMenuBar	: 'Menu Bar',
+		popupFullScreen	: 'Full Screen (IE)',
+		popupScrollBars	: 'Scroll Bars',
+		popupDependent	: 'Dependent (Netscape)',
+		popupWidth		: 'Width',
+		popupLeft		: 'Left Position',
+		popupHeight		: 'Height',
+		popupTop		: 'Top Position',
+		id				: 'Id',
+		langDir			: 'Language Direction',
+		langDirNotSet	: '<not set>',
+		langDirLTR		: 'Left to Right (LTR)',
+		langDirRTL		: 'Right to Left (RTL)',
+		acccessKey		: 'Access Key',
+		name			: 'Name',
+		langCode		: 'Language Code',
+		tabIndex		: 'Tab Index',
+		advisoryTitle	: 'Advisory Title',
+		advisoryContentType	: 'Advisory Content Type',
+		cssClasses		: 'Stylesheet Classes',
+		charset			: 'Linked Resource Charset',
+		styles			: 'Style',
+		selectAnchor	: 'Select an Anchor',
+		anchorName		: 'By Anchor Name',
+		anchorId		: 'By Element Id',
+		emailAddress	: 'E-Mail Address',
+		emailSubject	: 'Message Subject',
+		emailBody		: 'Message Body',
+		noAnchors		: '(No anchors available in the document)',
+		noUrl			: 'Please type the link URL',
+		noEmail			: 'Please type the e-mail address'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Anchor',
+		menu		: 'Edit Anchor',
+		title		: 'Anchor Properties',
+		name		: 'Anchor Name',
+		errorName	: 'Please type the anchor name'
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Find and Replace',
+		find				: 'Find',
+		replace				: 'Replace',
+		findWhat			: 'Find what:',
+		replaceWith			: 'Replace with:',
+		notFoundMsg			: 'The specified text was not found.',
+		matchCase			: 'Match case',
+		matchWord			: 'Match whole word',
+		matchCyclic			: 'Match cyclic',
+		replaceAll			: 'Replace All',
+		replaceSuccessMsg	: '%1 occurrence(s) replaced.'
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Table',
+		title		: 'Table Properties',
+		menu		: 'Table Properties',
+		deleteTable	: 'Delete Table',
+		rows		: 'Rows',
+		columns		: 'Columns',
+		border		: 'Border size',
+		align		: 'Alignment',
+		alignNotSet	: '<Not set>',
+		alignLeft	: 'Left',
+		alignCenter	: 'Centre',
+		alignRight	: 'Right',
+		width		: 'Width',
+		widthPx		: 'pixels',
+		widthPc		: 'percent',
+		height		: 'Height',
+		cellSpace	: 'Cell spacing',
+		cellPad		: 'Cell padding',
+		caption		: 'Caption',
+		summary		: 'Summary',
+		headers		: 'Headers',
+		headersNone		: 'None',
+		headersColumn	: 'First column',
+		headersRow		: 'First Row',
+		headersBoth		: 'Both',
+		invalidRows		: 'Number of rows must be a number greater than 0.',
+		invalidCols		: 'Number of columns must be a number greater than 0.',
+		invalidBorder	: 'Border size must be a number.',
+		invalidWidth	: 'Table width must be a number.',
+		invalidHeight	: 'Table height must be a number.',
+		invalidCellSpacing	: 'Cell spacing must be a number.',
+		invalidCellPadding	: 'Cell padding must be a number.',
+
+		cell :
+		{
+			menu			: 'Cell',
+			insertBefore	: 'Insert Cell Before',
+			insertAfter		: 'Insert Cell After',
+			deleteCell		: 'Delete Cells',
+			merge			: 'Merge Cells',
+			mergeRight		: 'Merge Right',
+			mergeDown		: 'Merge Down',
+			splitHorizontal	: 'Split Cell Horizontally',
+			splitVertical	: 'Split Cell Vertically',
+			title			: 'Cell Properties',
+			cellType		: 'Cell Type',
+			rowSpan			: 'Rows Span',
+			colSpan			: 'Columns Span',
+			wordWrap		: 'Word Wrap',
+			hAlign			: 'Horizontal Alignment',
+			vAlign			: 'Vertical Alignment',
+			alignTop		: 'Top',
+			alignMiddle		: 'Middle',
+			alignBottom		: 'Bottom',
+			alignBaseline	: 'Baseline',
+			bgColor			: 'Background Color',
+			borderColor		: 'Border Color',
+			data			: 'Data',
+			header			: 'Header',
+			yes				: 'Yes',
+			no				: 'No',
+			invalidWidth	: 'Cell width must be a number.',
+			invalidHeight	: 'Cell height must be a number.',
+			invalidRowSpan	: 'Rows span must be a whole number.',
+			invalidColSpan	: 'Columns span must be a whole number.',
+			chooseColor : 'Choose' // MISSING
+		},
+
+		row :
+		{
+			menu			: 'Row',
+			insertBefore	: 'Insert Row Before',
+			insertAfter		: 'Insert Row After',
+			deleteRow		: 'Delete Rows'
+		},
+
+		column :
+		{
+			menu			: 'Column',
+			insertBefore	: 'Insert Column Before',
+			insertAfter		: 'Insert Column After',
+			deleteColumn	: 'Delete Columns'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Button Properties',
+		text		: 'Text (Value)',
+		type		: 'Type',
+		typeBtn		: 'Button',
+		typeSbm		: 'Submit',
+		typeRst		: 'Reset'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Checkbox Properties',
+		radioTitle	: 'Radio Button Properties',
+		value		: 'Value',
+		selected	: 'Selected'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Form Properties',
+		menu		: 'Form Properties',
+		action		: 'Action',
+		method		: 'Method',
+		encoding	: 'Encoding',
+		target		: 'Target',
+		targetNotSet	: '<not set>',
+		targetNew	: 'New Window (_blank)',
+		targetTop	: 'Topmost Window (_top)',
+		targetSelf	: 'Same Window (_self)',
+		targetParent	: 'Parent Window (_parent)'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Selection Field Properties',
+		selectInfo	: 'Select Info',
+		opAvail		: 'Available Options',
+		value		: 'Value',
+		size		: 'Size',
+		lines		: 'lines',
+		chkMulti	: 'Allow multiple selections',
+		opText		: 'Text',
+		opValue		: 'Value',
+		btnAdd		: 'Add',
+		btnModify	: 'Modify',
+		btnUp		: 'Up',
+		btnDown		: 'Down',
+		btnSetValue : 'Set as selected value',
+		btnDelete	: 'Delete'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Textarea Properties',
+		cols		: 'Columns',
+		rows		: 'Rows'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Text Field Properties',
+		name		: 'Name',
+		value		: 'Value',
+		charWidth	: 'Character Width',
+		maxChars	: 'Maximum Characters',
+		type		: 'Type',
+		typeText	: 'Text',
+		typePass	: 'Password'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Hidden Field Properties',
+		name	: 'Name',
+		value	: 'Value'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Image Properties',
+		titleButton	: 'Image Button Properties',
+		menu		: 'Image Properties',
+		infoTab	: 'Image Info',
+		btnUpload	: 'Send it to the Server',
+		url		: 'URL',
+		upload	: 'Upload',
+		alt		: 'Alternative Text',
+		width		: 'Width',
+		height	: 'Height',
+		lockRatio	: 'Lock Ratio',
+		resetSize	: 'Reset Size',
+		border	: 'Border',
+		hSpace	: 'HSpace',
+		vSpace	: 'VSpace',
+		align		: 'Align',
+		alignLeft	: 'Left',
+		alignRight	: 'Right',
+		preview	: 'Preview',
+		alertUrl	: 'Please type the image URL',
+		linkTab	: 'Link',
+		button2Img	: 'Do you want to transform the selected image button on a simple image?',
+		img2Button	: 'Do you want to transform the selected image on a image button?',
+		urlMissing : 'Image source URL is missing.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Flash Properties',
+		propertiesTab	: 'Properties',
+		title		: 'Flash Properties',
+		chkPlay		: 'Auto Play',
+		chkLoop		: 'Loop',
+		chkMenu		: 'Enable Flash Menu',
+		chkFull		: 'Allow Fullscreen',
+ 		scale		: 'Scale',
+		scaleAll		: 'Show all',
+		scaleNoBorder	: 'No Border',
+		scaleFit		: 'Exact Fit',
+		access			: 'Script Access',
+		accessAlways	: 'Always',
+		accessSameDomain	: 'Same domain',
+		accessNever	: 'Never',
+		align		: 'Align',
+		alignLeft	: 'Left',
+		alignAbsBottom: 'Abs Bottom',
+		alignAbsMiddle: 'Abs Middle',
+		alignBaseline	: 'Baseline',
+		alignBottom	: 'Bottom',
+		alignMiddle	: 'Middle',
+		alignRight	: 'Right',
+		alignTextTop	: 'Text Top',
+		alignTop	: 'Top',
+		quality		: 'Quality',
+		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',
+		flashvars	: 'Variables for Flash',
+		bgcolor	: 'Background colour',
+		width	: 'Width',
+		height	: 'Height',
+		hSpace	: 'HSpace',
+		vSpace	: 'VSpace',
+		validateSrc : 'URL must not be empty.',
+		validateWidth : 'Width must be a number.',
+		validateHeight : 'Height must be a number.',
+		validateHSpace : 'HSpace must be a number.',
+		validateVSpace : 'VSpace must be a number.'
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Check Spelling',
+		title			: 'Spell Check',
+		notAvailable	: 'Sorry, but service is unavailable now.',
+		errorLoading	: 'Error loading application service host: %s.',
+		notInDic		: 'Not in dictionary',
+		changeTo		: 'Change to',
+		btnIgnore		: 'Ignore',
+		btnIgnoreAll	: 'Ignore All',
+		btnReplace		: 'Replace',
+		btnReplaceAll	: 'Replace All',
+		btnUndo			: 'Undo',
+		noSuggestions	: '- No suggestions -',
+		progress		: 'Spell check in progress...',
+		noMispell		: 'Spell check complete: No misspellings found',
+		noChanges		: 'Spell check complete: No words changed',
+		oneChange		: 'Spell check complete: One word changed',
+		manyChanges		: 'Spell check complete: %1 words changed',
+		ieSpellDownload	: 'Spell checker not installed. Do you want to download it now?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Smiley',
+		title	: 'Insert a Smiley'
+	},
+
+	elementsPath :
+	{
+		eleTitle : '%1 element'
+	},
+
+	numberedlist : 'Insert/Remove Numbered List',
+	bulletedlist : 'Insert/Remove Bulleted List',
+	indent : 'Increase Indent',
+	outdent : 'Decrease Indent',
+
+	justify :
+	{
+		left : 'Left Justify',
+		center : 'Centre Justify',
+		right : 'Right Justify',
+		block : 'Block Justify'
+	},
+
+	blockquote : 'Blockquote',
+
+	clipboard :
+	{
+		title		: 'Paste',
+		cutError	: 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).',
+		copyError	: 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).',
+		pasteMsg	: 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK',
+		securityMsg	: 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'
+	},
+
+	pastefromword :
+	{
+		confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar : 'Paste from Word',
+		title : 'Paste from Word',
+		error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button : 'Paste as plain text',
+		title : 'Paste as Plain Text'
+	},
+
+	templates :
+	{
+		button : 'Templates',
+		title : 'Content Templates',
+		insertOption: 'Replace actual contents',
+		selectPromptMsg: 'Please select the template to open in the editor',
+		emptyListMsg : '(No templates defined)'
+	},
+
+	showBlocks : 'Show Blocks',
+
+	stylesCombo :
+	{
+		label : 'Styles',
+		voiceLabel : 'Styles', // MISSING
+		panelVoiceLabel : 'Select a style', // MISSING
+		panelTitle1 : 'Block Styles',
+		panelTitle2 : 'Inline Styles',
+		panelTitle3 : 'Object Styles'
+	},
+
+	format :
+	{
+		label : 'Format',
+		voiceLabel : 'Format', // MISSING
+		panelTitle : 'Paragraph Format',
+		panelVoiceLabel : 'Select a paragraph format', // MISSING
+
+		tag_p : 'Normal',
+		tag_pre : 'Formatted',
+		tag_address : 'Address',
+		tag_h1 : 'Heading 1',
+		tag_h2 : 'Heading 2',
+		tag_h3 : 'Heading 3',
+		tag_h4 : 'Heading 4',
+		tag_h5 : 'Heading 5',
+		tag_h6 : 'Heading 6',
+		tag_div : 'Normal (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
+  	},
+
+	font :
+	{
+		label : 'Font',
+		voiceLabel : 'Font', // MISSING
+		panelTitle : 'Font Name',
+		panelVoiceLabel : 'Select a font' // MISSING
+	},
+
+	fontSize :
+	{
+		label : 'Size',
+		voiceLabel : 'Font Size', // MISSING
+		panelTitle : 'Font Size',
+		panelVoiceLabel : 'Select a font size' // MISSING
+	},
+
+	colorButton :
+	{
+		textColorTitle : 'Text Colour',
+		bgColorTitle : 'Background Colour',
+		auto : 'Automatic',
+		more : 'More Colours...'
+	},
+
+	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
+	},
+
+	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
+	},
+
+	about :
+	{
+		title : 'About CKEditor',
+		dlgTitle : 'About CKEditor', // MISSING
+		moreInfo : 'For licensing information please visit our web site:',
+		copy : 'Copyright &copy; $1. All rights reserved.'
+	},
+
+	maximize : 'Maximize',
+	minimize : 'Minimize', // MISSING
+
+	fakeobjects :
+	{
+		anchor : 'Anchor', // MISSING
+		flash : 'Flash Animation', // MISSING
+		div : 'Page Break', // MISSING
+		unknown : 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title : 'Select color', // MISSING
+		highlight : 'Highlight', // MISSING
+		selected : 'Selected', // MISSING
+		clear : 'Clear' // MISSING
+	},
+
+	toolbarCollapse : 'Collapse Toolbar', // MISSING
+	toolbarExpand : 'Expand Toolbar' // MISSING
+};
Index: Editor/branches/versions/3.1.x/_source/lang/en-uk.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/lang/en-uk.js	(revision 5179)
+++ 	(revision )
@@ -1,697 +1,0 @@
-﻿/*
-Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-
-/**
- * @fileOverview Defines the {@link CKEDITOR.lang} object, for the
- * English (Australia) language.
- */
-
-/**#@+
-   @type String
-   @example
-*/
-
-/**
- * Constains the dictionary of language entries.
- * @namespace
- */
-CKEDITOR.lang['en-uk'] =
-{
-	/**
-	 * The language reading direction. Possible values are "rtl" for
-	 * Right-To-Left languages (like Arabic) and "ltr" for Left-To-Right
-	 * languages (like English).
-	 * @default 'ltr'
-	 */
-	dir : 'ltr',
-
-	/*
-	 * Screenreader titles. Please note that screenreaders are not always capable
-	 * of reading non-English words. So be careful while translating it.
-	 */
-	editorTitle		: 'Rich text editor, %1',
-
-	// Toolbar buttons without dialogs.
-	source			: 'Source',
-	newPage			: 'New Page',
-	save			: 'Save',
-	preview			: 'Preview',
-	cut				: 'Cut',
-	copy			: 'Copy',
-	paste			: 'Paste',
-	print			: 'Print',
-	underline		: 'Underline',
-	bold			: 'Bold',
-	italic			: 'Italic',
-	selectAll		: 'Select All',
-	removeFormat	: 'Remove Format',
-	strike			: 'Strike Through',
-	subscript		: 'Subscript',
-	superscript		: 'Superscript',
-	horizontalrule	: 'Insert Horizontal Line',
-	pagebreak		: 'Insert Page Break for Printing',
-	unlink			: 'Unlink',
-	undo			: 'Undo',
-	redo			: 'Redo',
-
-	// Common messages and labels.
-	common :
-	{
-		browseServer	: 'Browse Server',
-		url				: 'URL',
-		protocol		: 'Protocol',
-		upload			: 'Upload',
-		uploadSubmit	: 'Send it to the Server',
-		image			: 'Image',
-		flash			: 'Flash',
-		form			: 'Form',
-		checkbox		: 'Checkbox',
-		radio		: 'Radio Button',
-		textField		: 'Text Field',
-		textarea		: 'Textarea',
-		hiddenField		: 'Hidden Field',
-		button			: 'Button',
-		select	: 'Selection Field',
-		imageButton		: 'Image Button',
-		notSet			: '<not set>',
-		id				: 'Id',
-		name			: 'Name',
-		langDir			: 'Language Direction',
-		langDirLtr		: 'Left to Right (LTR)',
-		langDirRtl		: 'Right to Left (RTL)',
-		langCode		: 'Language Code',
-		longDescr		: 'Long Description URL',
-		cssClass		: 'Stylesheet Classes',
-		advisoryTitle	: 'Advisory Title',
-		cssStyle		: 'Style',
-		ok				: 'OK',
-		cancel			: 'Cancel',
-		generalTab		: 'General',
-		advancedTab		: 'Advanced',
-		validateNumberFailed	: 'This value is not a number.',
-		confirmNewPage	: 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?',
-		confirmCancel	: 'Some of the options have been changed. Are you sure to close the dialog?',
-
-		// Put the voice-only part of the label in the span.
-		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
-	},
-
-	// Special char dialog.
-	specialChar		:
-	{
-		toolbar		: 'Insert Special Character',
-		title		: 'Select Special Character'
-	},
-
-	// Link dialog.
-	link :
-	{
-		toolbar		: 'Link',
-		menu		: 'Edit Link',
-		title		: 'Link',
-		info		: 'Link Info',
-		target		: 'Target',
-		upload		: 'Upload',
-		advanced	: 'Advanced',
-		type		: 'Link Type',
-		toAnchor	: 'Link to anchor in the text',
-		toEmail		: 'E-mail',
-		target		: 'Target',
-		targetNotSet	: '<not set>',
-		targetFrame	: '<frame>',
-		targetPopup	: '<popup window>',
-		targetNew	: 'New Window (_blank)',
-		targetTop	: 'Topmost Window (_top)',
-		targetSelf	: 'Same Window (_self)',
-		targetParent	: 'Parent Window (_parent)',
-		targetFrameName	: 'Target Frame Name',
-		targetPopupName	: 'Popup Window Name',
-		popupFeatures	: 'Popup Window Features',
-		popupResizable	: 'Resizable',
-		popupStatusBar	: 'Status Bar',
-		popupLocationBar	: 'Location Bar',
-		popupToolbar	: 'Toolbar',
-		popupMenuBar	: 'Menu Bar',
-		popupFullScreen	: 'Full Screen (IE)',
-		popupScrollBars	: 'Scroll Bars',
-		popupDependent	: 'Dependent (Netscape)',
-		popupWidth		: 'Width',
-		popupLeft		: 'Left Position',
-		popupHeight		: 'Height',
-		popupTop		: 'Top Position',
-		id				: 'Id',
-		langDir			: 'Language Direction',
-		langDirNotSet	: '<not set>',
-		langDirLTR		: 'Left to Right (LTR)',
-		langDirRTL		: 'Right to Left (RTL)',
-		acccessKey		: 'Access Key',
-		name			: 'Name',
-		langCode		: 'Language Code',
-		tabIndex		: 'Tab Index',
-		advisoryTitle	: 'Advisory Title',
-		advisoryContentType	: 'Advisory Content Type',
-		cssClasses		: 'Stylesheet Classes',
-		charset			: 'Linked Resource Charset',
-		styles			: 'Style',
-		selectAnchor	: 'Select an Anchor',
-		anchorName		: 'By Anchor Name',
-		anchorId		: 'By Element Id',
-		emailAddress	: 'E-Mail Address',
-		emailSubject	: 'Message Subject',
-		emailBody		: 'Message Body',
-		noAnchors		: '(No anchors available in the document)',
-		noUrl			: 'Please type the link URL',
-		noEmail			: 'Please type the e-mail address'
-	},
-
-	// Anchor dialog
-	anchor :
-	{
-		toolbar		: 'Anchor',
-		menu		: 'Edit Anchor',
-		title		: 'Anchor Properties',
-		name		: 'Anchor Name',
-		errorName	: 'Please type the anchor name'
-	},
-
-	// Find And Replace Dialog
-	findAndReplace :
-	{
-		title				: 'Find and Replace',
-		find				: 'Find',
-		replace				: 'Replace',
-		findWhat			: 'Find what:',
-		replaceWith			: 'Replace with:',
-		notFoundMsg			: 'The specified text was not found.',
-		matchCase			: 'Match case',
-		matchWord			: 'Match whole word',
-		matchCyclic			: 'Match cyclic',
-		replaceAll			: 'Replace All',
-		replaceSuccessMsg	: '%1 occurrence(s) replaced.'
-	},
-
-	// Table Dialog
-	table :
-	{
-		toolbar		: 'Table',
-		title		: 'Table Properties',
-		menu		: 'Table Properties',
-		deleteTable	: 'Delete Table',
-		rows		: 'Rows',
-		columns		: 'Columns',
-		border		: 'Border size',
-		align		: 'Alignment',
-		alignNotSet	: '<Not set>',
-		alignLeft	: 'Left',
-		alignCenter	: 'Centre',
-		alignRight	: 'Right',
-		width		: 'Width',
-		widthPx		: 'pixels',
-		widthPc		: 'percent',
-		height		: 'Height',
-		cellSpace	: 'Cell spacing',
-		cellPad		: 'Cell padding',
-		caption		: 'Caption',
-		summary		: 'Summary',
-		headers		: 'Headers',
-		headersNone		: 'None',
-		headersColumn	: 'First column',
-		headersRow		: 'First Row',
-		headersBoth		: 'Both',
-		invalidRows		: 'Number of rows must be a number greater than 0.',
-		invalidCols		: 'Number of columns must be a number greater than 0.',
-		invalidBorder	: 'Border size must be a number.',
-		invalidWidth	: 'Table width must be a number.',
-		invalidHeight	: 'Table height must be a number.',
-		invalidCellSpacing	: 'Cell spacing must be a number.',
-		invalidCellPadding	: 'Cell padding must be a number.',
-
-		cell :
-		{
-			menu			: 'Cell',
-			insertBefore	: 'Insert Cell Before',
-			insertAfter		: 'Insert Cell After',
-			deleteCell		: 'Delete Cells',
-			merge			: 'Merge Cells',
-			mergeRight		: 'Merge Right',
-			mergeDown		: 'Merge Down',
-			splitHorizontal	: 'Split Cell Horizontally',
-			splitVertical	: 'Split Cell Vertically',
-			title			: 'Cell Properties',
-			cellType		: 'Cell Type',
-			rowSpan			: 'Rows Span',
-			colSpan			: 'Columns Span',
-			wordWrap		: 'Word Wrap',
-			hAlign			: 'Horizontal Alignment',
-			vAlign			: 'Vertical Alignment',
-			alignTop		: 'Top',
-			alignMiddle		: 'Middle',
-			alignBottom		: 'Bottom',
-			alignBaseline	: 'Baseline',
-			bgColor			: 'Background Color',
-			borderColor		: 'Border Color',
-			data			: 'Data',
-			header			: 'Header',
-			yes				: 'Yes',
-			no				: 'No',
-			invalidWidth	: 'Cell width must be a number.',
-			invalidHeight	: 'Cell height must be a number.',
-			invalidRowSpan	: 'Rows span must be a whole number.',
-			invalidColSpan	: 'Columns span must be a whole number.',
-			chooseColor : 'Choose' // MISSING
-		},
-
-		row :
-		{
-			menu			: 'Row',
-			insertBefore	: 'Insert Row Before',
-			insertAfter		: 'Insert Row After',
-			deleteRow		: 'Delete Rows'
-		},
-
-		column :
-		{
-			menu			: 'Column',
-			insertBefore	: 'Insert Column Before',
-			insertAfter		: 'Insert Column After',
-			deleteColumn	: 'Delete Columns'
-		}
-	},
-
-	// Button Dialog.
-	button :
-	{
-		title		: 'Button Properties',
-		text		: 'Text (Value)',
-		type		: 'Type',
-		typeBtn		: 'Button',
-		typeSbm		: 'Submit',
-		typeRst		: 'Reset'
-	},
-
-	// Checkbox and Radio Button Dialogs.
-	checkboxAndRadio :
-	{
-		checkboxTitle : 'Checkbox Properties',
-		radioTitle	: 'Radio Button Properties',
-		value		: 'Value',
-		selected	: 'Selected'
-	},
-
-	// Form Dialog.
-	form :
-	{
-		title		: 'Form Properties',
-		menu		: 'Form Properties',
-		action		: 'Action',
-		method		: 'Method',
-		encoding	: 'Encoding',
-		target		: 'Target',
-		targetNotSet	: '<not set>',
-		targetNew	: 'New Window (_blank)',
-		targetTop	: 'Topmost Window (_top)',
-		targetSelf	: 'Same Window (_self)',
-		targetParent	: 'Parent Window (_parent)'
-	},
-
-	// Select Field Dialog.
-	select :
-	{
-		title		: 'Selection Field Properties',
-		selectInfo	: 'Select Info',
-		opAvail		: 'Available Options',
-		value		: 'Value',
-		size		: 'Size',
-		lines		: 'lines',
-		chkMulti	: 'Allow multiple selections',
-		opText		: 'Text',
-		opValue		: 'Value',
-		btnAdd		: 'Add',
-		btnModify	: 'Modify',
-		btnUp		: 'Up',
-		btnDown		: 'Down',
-		btnSetValue : 'Set as selected value',
-		btnDelete	: 'Delete'
-	},
-
-	// Textarea Dialog.
-	textarea :
-	{
-		title		: 'Textarea Properties',
-		cols		: 'Columns',
-		rows		: 'Rows'
-	},
-
-	// Text Field Dialog.
-	textfield :
-	{
-		title		: 'Text Field Properties',
-		name		: 'Name',
-		value		: 'Value',
-		charWidth	: 'Character Width',
-		maxChars	: 'Maximum Characters',
-		type		: 'Type',
-		typeText	: 'Text',
-		typePass	: 'Password'
-	},
-
-	// Hidden Field Dialog.
-	hidden :
-	{
-		title	: 'Hidden Field Properties',
-		name	: 'Name',
-		value	: 'Value'
-	},
-
-	// Image Dialog.
-	image :
-	{
-		title		: 'Image Properties',
-		titleButton	: 'Image Button Properties',
-		menu		: 'Image Properties',
-		infoTab	: 'Image Info',
-		btnUpload	: 'Send it to the Server',
-		url		: 'URL',
-		upload	: 'Upload',
-		alt		: 'Alternative Text',
-		width		: 'Width',
-		height	: 'Height',
-		lockRatio	: 'Lock Ratio',
-		resetSize	: 'Reset Size',
-		border	: 'Border',
-		hSpace	: 'HSpace',
-		vSpace	: 'VSpace',
-		align		: 'Align',
-		alignLeft	: 'Left',
-		alignRight	: 'Right',
-		preview	: 'Preview',
-		alertUrl	: 'Please type the image URL',
-		linkTab	: 'Link',
-		button2Img	: 'Do you want to transform the selected image button on a simple image?',
-		img2Button	: 'Do you want to transform the selected image on a image button?',
-		urlMissing : 'Image source URL is missing.' // MISSING
-	},
-
-	// Flash Dialog
-	flash :
-	{
-		properties		: 'Flash Properties',
-		propertiesTab	: 'Properties',
-		title		: 'Flash Properties',
-		chkPlay		: 'Auto Play',
-		chkLoop		: 'Loop',
-		chkMenu		: 'Enable Flash Menu',
-		chkFull		: 'Allow Fullscreen',
- 		scale		: 'Scale',
-		scaleAll		: 'Show all',
-		scaleNoBorder	: 'No Border',
-		scaleFit		: 'Exact Fit',
-		access			: 'Script Access',
-		accessAlways	: 'Always',
-		accessSameDomain	: 'Same domain',
-		accessNever	: 'Never',
-		align		: 'Align',
-		alignLeft	: 'Left',
-		alignAbsBottom: 'Abs Bottom',
-		alignAbsMiddle: 'Abs Middle',
-		alignBaseline	: 'Baseline',
-		alignBottom	: 'Bottom',
-		alignMiddle	: 'Middle',
-		alignRight	: 'Right',
-		alignTextTop	: 'Text Top',
-		alignTop	: 'Top',
-		quality		: 'Quality',
-		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',
-		flashvars	: 'Variables for Flash',
-		bgcolor	: 'Background colour',
-		width	: 'Width',
-		height	: 'Height',
-		hSpace	: 'HSpace',
-		vSpace	: 'VSpace',
-		validateSrc : 'URL must not be empty.',
-		validateWidth : 'Width must be a number.',
-		validateHeight : 'Height must be a number.',
-		validateHSpace : 'HSpace must be a number.',
-		validateVSpace : 'VSpace must be a number.'
-	},
-
-	// Speller Pages Dialog
-	spellCheck :
-	{
-		toolbar			: 'Check Spelling',
-		title			: 'Spell Check',
-		notAvailable	: 'Sorry, but service is unavailable now.',
-		errorLoading	: 'Error loading application service host: %s.',
-		notInDic		: 'Not in dictionary',
-		changeTo		: 'Change to',
-		btnIgnore		: 'Ignore',
-		btnIgnoreAll	: 'Ignore All',
-		btnReplace		: 'Replace',
-		btnReplaceAll	: 'Replace All',
-		btnUndo			: 'Undo',
-		noSuggestions	: '- No suggestions -',
-		progress		: 'Spell check in progress...',
-		noMispell		: 'Spell check complete: No misspellings found',
-		noChanges		: 'Spell check complete: No words changed',
-		oneChange		: 'Spell check complete: One word changed',
-		manyChanges		: 'Spell check complete: %1 words changed',
-		ieSpellDownload	: 'Spell checker not installed. Do you want to download it now?'
-	},
-
-	smiley :
-	{
-		toolbar	: 'Smiley',
-		title	: 'Insert a Smiley'
-	},
-
-	elementsPath :
-	{
-		eleTitle : '%1 element'
-	},
-
-	numberedlist : 'Insert/Remove Numbered List',
-	bulletedlist : 'Insert/Remove Bulleted List',
-	indent : 'Increase Indent',
-	outdent : 'Decrease Indent',
-
-	justify :
-	{
-		left : 'Left Justify',
-		center : 'Centre Justify',
-		right : 'Right Justify',
-		block : 'Block Justify'
-	},
-
-	blockquote : 'Blockquote',
-
-	clipboard :
-	{
-		title		: 'Paste',
-		cutError	: 'Your browser security settings don\'t permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).',
-		copyError	: 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).',
-		pasteMsg	: 'Please paste inside the following box using the keyboard (<strong>Ctrl+V</strong>) and hit OK',
-		securityMsg	: 'Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.'
-	},
-
-	pastefromword :
-	{
-		confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
-		toolbar : 'Paste from Word',
-		title : 'Paste from Word',
-		error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING
-	},
-
-	pasteText :
-	{
-		button : 'Paste as plain text',
-		title : 'Paste as Plain Text'
-	},
-
-	templates :
-	{
-		button : 'Templates',
-		title : 'Content Templates',
-		insertOption: 'Replace actual contents',
-		selectPromptMsg: 'Please select the template to open in the editor',
-		emptyListMsg : '(No templates defined)'
-	},
-
-	showBlocks : 'Show Blocks',
-
-	stylesCombo :
-	{
-		label : 'Styles',
-		voiceLabel : 'Styles', // MISSING
-		panelVoiceLabel : 'Select a style', // MISSING
-		panelTitle1 : 'Block Styles',
-		panelTitle2 : 'Inline Styles',
-		panelTitle3 : 'Object Styles'
-	},
-
-	format :
-	{
-		label : 'Format',
-		voiceLabel : 'Format', // MISSING
-		panelTitle : 'Paragraph Format',
-		panelVoiceLabel : 'Select a paragraph format', // MISSING
-
-		tag_p : 'Normal',
-		tag_pre : 'Formatted',
-		tag_address : 'Address',
-		tag_h1 : 'Heading 1',
-		tag_h2 : 'Heading 2',
-		tag_h3 : 'Heading 3',
-		tag_h4 : 'Heading 4',
-		tag_h5 : 'Heading 5',
-		tag_h6 : 'Heading 6',
-		tag_div : 'Normal (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
-  	},
-
-	font :
-	{
-		label : 'Font',
-		voiceLabel : 'Font', // MISSING
-		panelTitle : 'Font Name',
-		panelVoiceLabel : 'Select a font' // MISSING
-	},
-
-	fontSize :
-	{
-		label : 'Size',
-		voiceLabel : 'Font Size', // MISSING
-		panelTitle : 'Font Size',
-		panelVoiceLabel : 'Select a font size' // MISSING
-	},
-
-	colorButton :
-	{
-		textColorTitle : 'Text Colour',
-		bgColorTitle : 'Background Colour',
-		auto : 'Automatic',
-		more : 'More Colours...'
-	},
-
-	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
-	},
-
-	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
-	},
-
-	about :
-	{
-		title : 'About CKEditor',
-		dlgTitle : 'About CKEditor', // MISSING
-		moreInfo : 'For licensing information please visit our web site:',
-		copy : 'Copyright &copy; $1. All rights reserved.'
-	},
-
-	maximize : 'Maximize',
-	minimize : 'Minimize', // MISSING
-
-	fakeobjects :
-	{
-		anchor : 'Anchor', // MISSING
-		flash : 'Flash Animation', // MISSING
-		div : 'Page Break', // MISSING
-		unknown : 'Unknown Object' // MISSING
-	},
-
-	resize : 'Drag to resize', // MISSING
-
-	colordialog :
-	{
-		title : 'Select color', // MISSING
-		highlight : 'Highlight', // MISSING
-		selected : 'Selected', // MISSING
-		clear : 'Clear' // MISSING
-	},
-
-	toolbarCollapse : 'Collapse Toolbar', // MISSING
-	toolbarExpand : 'Expand Toolbar' // MISSING
-};
Index: /CKEditor/branches/versions/3.1.x/_source/lang/es.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/lang/es.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/lang/es.js	(revision 5180)
@@ -87,11 +87,11 @@
 		advisoryTitle	: 'Título',
 		cssStyle		: 'Estilo',
-		ok				: 'OK',
+		ok				: 'Aceptar',
 		cancel			: 'Cancelar',
 		generalTab		: 'General',
 		advancedTab		: 'Avanzado',
 		validateNumberFailed	: 'El valor no es un número.',
-		confirmNewPage	: 'Cualquier cambio que no se haya guardado se perderá. ¿Está seguro de querer crear una nueva página?',
-		confirmCancel	: 'Algunas de las opciones se han cambiado. ¿Está seguro de querer cerrar el diálogo?',
+		confirmNewPage	: 'Cualquier cambio que no se haya guardado se perderá.\r\n¿Está seguro de querer crear una nueva página?',
+		confirmCancel	: 'Algunas de las opciones se han cambiado.\r\n¿Está seguro de querer cerrar el diálogo?',
 
 		// Put the voice-only part of the label in the span.
@@ -149,5 +149,5 @@
 		acccessKey		: 'Clave de Acceso',
 		name			: 'Nombre',
-		langCode		: 'Orientación',
+		langCode		: 'Código idioma',
 		tabIndex		: 'Indice de tabulación',
 		advisoryTitle	: 'Título',
@@ -261,5 +261,5 @@
 			invalidRowSpan	: 'La expansión de filas debe ser un número entero.',
 			invalidColSpan	: 'La expansión de columnas debe ser un número entero.',
-			chooseColor : 'Choose' // MISSING
+			chooseColor : 'Elegir'
 		},
 
@@ -392,5 +392,5 @@
 		button2Img	: '¿Desea convertir el botón de imagen en una simple imagen?',
 		img2Button	: '¿Desea convertir la imagen en un botón de imagen?',
-		urlMissing : 'Image source URL is missing.' // MISSING
+		urlMissing : 'Debe indicar la URL de la imagen.'
 	},
 
@@ -434,5 +434,5 @@
 		windowModeTransparent	 : 'Transparente',
 		windowMode	: 'WindowMode',
-		flashvars	: 'FlashVars',
+		flashvars	: 'Opciones',
 		bgcolor	: 'Color de Fondo',
 		width	: 'Anchura',
@@ -467,5 +467,5 @@
 		oneChange		: 'Control finalizado: se ha cambiado una palabra',
 		manyChanges		: 'Control finalizado: se ha cambiado %1 palabras',
-		ieSpellDownload	: 'Módulo de Control de Ortografía no instalado. ¿Desea descargarlo ahora?'
+		ieSpellDownload	: 'Módulo de Control de Ortografía no instalado.\r\n¿Desea descargarlo ahora?'
 	},
 
@@ -499,16 +499,16 @@
 	{
 		title		: 'Pegar',
-		cutError	: 'La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado. Por favor use el teclado (Ctrl+X).',
-		copyError	: 'La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado. Por favor use el teclado (Ctrl+C).',
-		pasteMsg	: 'Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl+V</STRONG>); luego presione <STRONG>OK</STRONG>.',
-		securityMsg	: 'Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles. Es necesario que lo pegue de nuevo en esta ventana.'
+		cutError	: 'La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado.\r\nPor favor use el teclado (Ctrl+X).',
+		copyError	: 'La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado.\r\nPor favor use el teclado (Ctrl+C).',
+		pasteMsg	: 'Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl+V</STRONG>);\r\nluego presione <STRONG>Aceptar</STRONG>.',
+		securityMsg	: 'Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles.\r\nEs necesario que lo pegue de nuevo en esta ventana.'
 	},
 
 	pastefromword :
 	{
-		confirmCleanup : 'El texto que desea parece provenir de Word. Desea depurarlo antes de pegarlo?',
+		confirmCleanup : 'El texto que desea parece provenir de Word.\r\n¿Desea depurarlo antes de pegarlo?',
 		toolbar : 'Pegar desde Word',
 		title : 'Pegar desde Word',
-		error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+		error : 'No ha sido posible limpiar los datos debido a un error interno'
 	},
 
@@ -561,17 +561,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				: 'Crear contenedor DIV',
+		toolbar				: 'Crear contenedor DIV',
+		cssClassInputLabel	: 'Clase de hoja de estilos',
+		styleSelectLabel	: 'Estilo',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Codigo de idioma',
+		inlineStyleInputLabel	: 'Estilo',
+		advisoryTitleInputLabel	: 'Título',
+		langDirLabel		: 'Orientación',
+		langDirLTRLabel		: 'Izquierda a Derecha (LTR)',
+		langDirRTLLabel		: 'Derecha a Izquierda (RTL)',
+		edit				: 'Editar Div',
+		remove				: 'Quitar Div'
   	},
 
@@ -602,44 +602,44 @@
 	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' : 'Negro',
+		'800000' : 'Marrón oscuro',
+		'8B4513' : 'Marrón tierra',
+		'2F4F4F' : 'Pizarra Oscuro',
+		'008080' : 'Azul verdoso',
+		'000080' : 'Azul marino',
+		'4B0082' : 'Añil',
+		'696969' : 'Gris oscuro',
+		'B22222' : 'Ladrillo',
+		'A52A2A' : 'Marrón',
+		'DAA520' : 'Oro oscuro',
+		'006400' : 'Verde oscuro',
+		'40E0D0' : 'Turquesa',
+		'0000CD' : 'Azul medio-oscuro',
+		'800080' : 'Púrpura',
+		'808080' : 'Gris',
+		'F00' : 'Rojo',
+		'FF8C00' : 'Naranja oscuro',
+		'FFD700' : 'Oro',
+		'008000' : 'Verde',
+		'0FF' : 'Cian',
+		'00F' : 'Azul',
+		'EE82EE' : 'Violeta',
+		'A9A9A9' : 'Gris medio',
+		'FFA07A' : 'Salmón claro',
+		'FFA500' : 'Naranja',
+		'FFFF00' : 'Amarillo',
+		'00FF00' : 'Lima',
+		'AFEEEE' : 'Turquesa claro',
+		'ADD8E6' : 'Azul claro',
+		'DDA0DD' : 'Violeta claro',
+		'D3D3D3' : 'Gris claro',
+		'FFF0F5' : 'Lavanda rojizo',
+		'FAEBD7' : 'Blanco antiguo',
+		'FFFFE0' : 'Amarillo claro',
+		'F0FFF0' : 'Miel',
+		'F0FFFF' : 'Azul celeste',
+		'F0F8FF' : 'Azul pálido',
+		'E6E6FA' : 'Lavanda',
+		'FFF' : 'Blanco'
 	},
 
@@ -647,8 +647,8 @@
 	{
 		title : 'Comprobar Ortografía Mientras Escribe',
-		enable : 'Activar COME',
-		disable : 'Desactivar COME',
-		about : 'Acerca de COME',
-		toggle : 'Cambiar COME',
+		enable : 'Activar Corrector',
+		disable : 'Desactivar Corrector',
+		about : 'Acerca de Corrector',
+		toggle : 'Cambiar Corrector',
 		options : 'Opciones',
 		langs : 'Idiomas',
@@ -673,5 +673,5 @@
 
 	maximize : 'Maximizar',
-	minimize : 'Minimize', // MISSING
+	minimize : 'Minimizar',
 
 	fakeobjects :
@@ -687,11 +687,11 @@
 	colordialog :
 	{
-		title : 'Select color', // MISSING
-		highlight : 'Highlight', // MISSING
-		selected : 'Selected', // MISSING
-		clear : 'Clear' // MISSING
-	},
-
-	toolbarCollapse : 'Collapse Toolbar', // MISSING
-	toolbarExpand : 'Expand Toolbar' // MISSING
+		title : 'Elegir color',
+		highlight : 'Muestra',
+		selected : 'Elegido',
+		clear : 'Borrar'
+	},
+
+	toolbarCollapse : 'Contraer barra de herramientas',
+	toolbarExpand : 'Expandir barra de herramientas'
 };
Index: /CKEditor/branches/versions/3.1.x/_source/lang/fi.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/lang/fi.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/lang/fi.js	(revision 5180)
@@ -507,8 +507,8 @@
 	pastefromword :
 	{
-		confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
-		toolbar : 'Liitä Wordista',
-		title : 'Liitä Wordista',
-		error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+		confirmCleanup : 'Liittämäsi teksti näyttäisi olevan Word-dokumentista. Haluatko siivota sen ennen liittämistä? (Suositus: Kyllä)',
+		toolbar : 'Liitä Word-dokumentista',
+		title : 'Liitä Word-dokumentista',
+		error : 'Liitetyn tiedon siivoaminen ei onnistunut sisäisen virheen takia'
 	},
 
@@ -561,17 +561,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				: 'Luo div-kehikko',
+		toolbar				: 'Luo div-kehikko',
+		cssClassInputLabel	: 'Tyylitiedoston luokat',
+		styleSelectLabel	: 'Tyyli',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Kielen koodi',
+		inlineStyleInputLabel	: 'Sisätyyli',
+		advisoryTitleInputLabel	: 'Ohjeistava otsikko',
+		langDirLabel		: 'Kielen suunta',
+		langDirLTRLabel		: 'Vasemmalta oikealle (LTR)',
+		langDirRTLLabel		: 'Oikealta vasemmalle (RTL)',
+		edit				: 'Muokkaa Diviä',
+		remove				: 'Poista Div'
   	},
 
@@ -602,44 +602,44 @@
 	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' : 'Musta',
+		'800000' : 'Kastanjanruskea',
+		'8B4513' : 'Satulanruskea',
+		'2F4F4F' : 'Tumma liuskekivenharmaa',
+		'008080' : 'Sinivihreä',
+		'000080' : 'Laivastonsininen',
+		'4B0082' : 'Indigonsininen',
+		'696969' : 'Tummanharmaa',
+		'B22222' : 'Tiili',
+		'A52A2A' : 'Ruskea',
+		'DAA520' : 'Kultapiisku',
+		'006400' : 'Tummanvihreä',
+		'40E0D0' : 'Turkoosi',
+		'0000CD' : 'Keskisininen',
+		'800080' : 'Purppura',
+		'808080' : 'Harmaa',
+		'F00' : 'Punainen',
+		'FF8C00' : 'Tumma oranssi',
+		'FFD700' : 'Kulta',
+		'008000' : 'Vihreä',
+		'0FF' : 'Syaani',
+		'00F' : 'Sininen',
+		'EE82EE' : 'Violetti',
+		'A9A9A9' : 'Tummanharmaa',
+		'FFA07A' : 'Vaaleanlohenpunainen',
+		'FFA500' : 'Oranssi',
+		'FFFF00' : 'Keltainen',
+		'00FF00' : 'Limetin vihreä',
+		'AFEEEE' : 'Haalea turkoosi',
+		'ADD8E6' : 'Vaaleansininen',
+		'DDA0DD' : 'Luumu',
+		'D3D3D3' : 'Vaaleanharmaa',
+		'FFF0F5' : 'Laventelinpunainen',
+		'FAEBD7' : 'Antiikinvalkoinen',
+		'FFFFE0' : 'Vaaleankeltainen',
+		'F0FFF0' : 'Hunajameloni',
+		'F0FFFF' : 'Asurinsininen',
+		'F0F8FF' : 'Alice Blue -sininen',
+		'E6E6FA' : 'Lavanteli',
+		'FFF' : 'Valkoinen'
 	},
 
Index: /CKEditor/branches/versions/3.1.x/_source/lang/he.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/lang/he.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/lang/he.js	(revision 5180)
@@ -77,5 +77,5 @@
 		imageButton		: 'כפתור תמונה',
 		notSet			: '<לא נקבע>',
-		id				: 'זיהוי (Id)',
+		id				: 'זיהוי (ID)',
 		name			: 'שם',
 		langDir			: 'כיוון שפה',
@@ -118,5 +118,5 @@
 		type		: 'סוג קישור',
 		toAnchor	: 'עוגן בעמוד זה',
-		toEmail		: 'דוא\'\'ל',
+		toEmail		: 'דוא"ל',
 		target		: 'מטרה',
 		targetNotSet	: '<לא נקבע>',
@@ -142,5 +142,5 @@
 		popupHeight		: 'גובה',
 		popupTop		: 'מיקום צד עליון',
-		id				: 'זיהוי (Id)',
+		id				: 'זיהוי (ID)',
 		langDir			: 'כיוון שפה',
 		langDirNotSet	: '<לא נקבע>',
@@ -157,12 +157,12 @@
 		styles			: 'סגנון',
 		selectAnchor	: 'בחירת עוגן',
-		anchorName		: 'עפ\'\'י שם העוגן',
-		anchorId		: 'עפ\'\'י זיהוי (Id) הרכיב',
-		emailAddress	: 'כתובת הדוא\'\'ל',
+		anchorName		: 'עפ"י שם העוגן',
+		anchorId		: 'עפ"י זיהוי (ID) האלמנט',
+		emailAddress	: 'כתובת הדוא"ל',
 		emailSubject	: 'נושא ההודעה',
 		emailBody		: 'גוף ההודעה',
 		noAnchors		: '(אין עוגנים זמינים בדף)',
 		noUrl			: 'יש להקליד את כתובת הקישור (URL)',
-		noEmail			: 'יש להקליד את כתובת הדוא\'\'ל'
+		noEmail			: 'יש להקליד את כתובת הדוא"ל'
 	},
 
@@ -174,5 +174,5 @@
 		title		: 'מאפייני נקודת עיגון',
 		name		: 'שם לנקודת עיגון',
-		errorName	: 'יש להזין שם לנקודת עיגון'
+		errorName	: 'יש להקליד שם לנקודת עיגון'
 	},
 
@@ -215,5 +215,5 @@
 		cellPad		: 'ריפוד תא',
 		caption		: 'כיתוב',
-		summary		: 'סיכום',
+		summary		: 'תקציר',
 		headers		: 'כותרות',
 		headersNone		: 'אין',
@@ -238,5 +238,5 @@
 			mergeRight		: 'מזג ימינה',
 			mergeDown		: 'מזג למטה',
-			splitHorizontal	: 'פיצלו תא אופקית',
+			splitHorizontal	: 'פיצול תא אופקית',
 			splitVertical	: 'פיצול תא אנכית',
 			title			: 'תכונות התא',
@@ -351,6 +351,6 @@
 		name		: 'שם',
 		value		: 'ערך',
-		charWidth	: 'רוחב באותיות',
-		maxChars	: 'מקסימות אותיות',
+		charWidth	: 'רוחב לפי תווים',
+		maxChars	: 'מקסימום תווים',
 		type		: 'סוג',
 		typeText	: 'טקסט',
@@ -501,5 +501,5 @@
 		cutError	: 'הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+X).',
 		copyError	: 'הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+C).',
-		pasteMsg	: 'נא להדביק בתוך הקופסה באמצעות (<STRONG>Ctrl+V</STRONG>) וללחוץ על <STRONG>אישור</STRONG>.',
+		pasteMsg	: 'נא להדביק בתוך הקופסה באמצעות (<b>Ctrl+V</b>) וללחוץ על <b>אישור</b>.',
 		securityMsg	: 'עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (Clipboard) בצורה ישירה. נא להדביק שוב בחלון זה.'
 	},
@@ -510,5 +510,5 @@
 		toolbar : 'הדבקה מ-Word',
 		title : 'הדבקה מ-Word',
-		error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+		error : 'לא ניתן היה לנקות את המידע בשל תקלה פנימית.'
 	},
 
@@ -561,17 +561,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)',
+		toolbar				: 'יצירת מיכל (Div)',
+		cssClassInputLabel	: 'מחלקת עיצוב',
+		styleSelectLabel	: 'סגנון',
+		IdInputLabel		: 'מזהה (ID)',
+		languageCodeInputLabel	: 'קוד שפה',
+		inlineStyleInputLabel	: 'סגנון פנימי',
+		advisoryTitleInputLabel	: 'כותרת מוצעת',
+		langDirLabel		: 'כיוון שפה',
+		langDirLTRLabel		: 'שמאל לימין (LTR)',
+		langDirRTLLabel		: 'ימין לשמאל (RTL)',
+		edit				: 'עריכת מיכל (Div)',
+		remove				: 'הסרת מיכל (Div)'
   	},
 
@@ -602,44 +602,44 @@
 	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' : 'שחור',
+		'800000' : 'סגול כהה',
+		'8B4513' : 'חום בהיר',
+		'2F4F4F' : 'אפור צפחה',
+		'008080' : 'כחול-ירוק',
+		'000080' : 'כחול-סגול',
+		'4B0082' : 'אינדיגו',
+		'696969' : 'אפור מעומעם',
+		'B22222' : 'אדום-חום',
+		'A52A2A' : 'חום',
+		'DAA520' : 'כתום זהב',
+		'006400' : 'ירוק כהה',
+		'40E0D0' : 'טורקיז',
+		'0000CD' : 'כחול בינוני',
+		'800080' : 'סגול',
+		'808080' : 'אפור',
+		'F00' : 'אדום',
+		'FF8C00' : 'כתום כהה',
+		'FFD700' : 'זהב',
+		'008000' : 'ירוק',
+		'0FF' : 'ציאן',
+		'00F' : 'כחול',
+		'EE82EE' : 'סגלגל',
+		'A9A9A9' : 'אפור כהה',
+		'FFA07A' : 'כתום-וורוד',
+		'FFA500' : 'כתום',
+		'FFFF00' : 'צהוב',
+		'00FF00' : 'ליים',
+		'AFEEEE' : 'טורקיז בהיר',
+		'ADD8E6' : 'כחול בהיר',
+		'DDA0DD' : 'שזיף',
+		'D3D3D3' : 'אפור בהיר',
+		'FFF0F5' : 'לבנדר מסמיק',
+		'FAEBD7' : 'לבן עתיק',
+		'FFFFE0' : 'צהוב בהיר',
+		'F0FFF0' : 'טל דבש',
+		'F0FFFF' : 'תכלת',
+		'F0F8FF' : 'כחול טיפת מים',
+		'E6E6FA' : 'לבנדר',
+		'FFF' : 'לבן'
 	},
 
@@ -672,6 +672,6 @@
 	},
 
-	maximize : 'הגדל למקסימום',
-	minimize : 'הקטן למינימום',
+	maximize : 'הגדלה למקסימום',
+	minimize : 'הקטנה למינימום',
 
 	fakeobjects :
Index: /CKEditor/branches/versions/3.1.x/_source/lang/nl.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/lang/nl.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/lang/nl.js	(revision 5180)
@@ -510,5 +510,5 @@
 		toolbar : 'Plakken als Word-gegevens',
 		title : 'Plakken als Word-gegevens',
-		error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+		error : 'Het was niet mogelijk om de geplakte tekst op te schonen door een interne fout'
 	},
 
@@ -561,17 +561,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 aanmaken',
+		toolbar				: 'Div aanmaken',
+		cssClassInputLabel	: 'Stylesheet klassen',
+		styleSelectLabel	: 'Stijl',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Taalcode',
+		inlineStyleInputLabel	: 'Inline stijl',
+		advisoryTitleInputLabel	: 'informatieve titel',
+		langDirLabel		: 'Schrijfrichting',
+		langDirLTRLabel		: 'Links naar rechts (LTR)',
+		langDirRTLLabel		: 'Rechts naar links (RTL)',
+		edit				: 'Div wijzigen',
+		remove				: 'Div verwijderen'
   	},
 
@@ -602,44 +602,44 @@
 	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' : 'Zwart',
+		'800000' : 'Kastanjebruin',
+		'8B4513' : 'Chocoladebruin',
+		'2F4F4F' : 'Donkerleigrijs',
+		'008080' : 'Blauwgroen',
+		'000080' : 'Marine',
+		'4B0082' : 'Indigo',
+		'696969' : 'Donkergrijs',
+		'B22222' : 'Baksteen',
+		'A52A2A' : 'Bruin',
+		'DAA520' : 'Donkergeel',
+		'006400' : 'Donkergroen',
+		'40E0D0' : 'Turquoise',
+		'0000CD' : 'Middenblauw',
+		'800080' : 'Paars',
+		'808080' : 'Grijs',
+		'F00' : 'Rood',
+		'FF8C00' : 'Donkeroranje',
+		'FFD700' : 'Goud',
+		'008000' : 'Groen',
+		'0FF' : 'Cyaan',
+		'00F' : 'Blauw',
+		'EE82EE' : 'Violet',
+		'A9A9A9' : 'Donkergrijs',
+		'FFA07A' : 'Lichtzalm',
+		'FFA500' : 'Oranje',
+		'FFFF00' : 'Geel',
+		'00FF00' : 'Felgroen',
+		'AFEEEE' : 'Lichtturquoise',
+		'ADD8E6' : 'Lichtblauw',
+		'DDA0DD' : 'Pruim',
+		'D3D3D3' : 'Lichtgrijs',
+		'FFF0F5' : 'Linnen',
+		'FAEBD7' : 'Ivoor',
+		'FFFFE0' : 'Lichtgeel',
+		'F0FFF0' : 'Honingdauw',
+		'F0FFFF' : 'Azuur',
+		'F0F8FF' : 'Licht hemelsblauw',
+		'E6E6FA' : 'Lavendel',
+		'FFF' : 'Wit'
 	},
 
@@ -693,5 +693,5 @@
 	},
 
-	toolbarCollapse : 'Collapse Toolbar', // MISSING
-	toolbarExpand : 'Expand Toolbar' // MISSING
+	toolbarCollapse : 'Werkbalk inklappen',
+	toolbarExpand : 'Werkbalk uitklappen'
 };
Index: /CKEditor/branches/versions/3.1.x/_source/lang/ru.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/lang/ru.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/lang/ru.js	(revision 5180)
@@ -32,5 +32,5 @@
 	 * of reading non-English words. So be careful while translating it.
 	 */
-	editorTitle		: 'Rich text editor, %1', // MISSING
+	editorTitle		: 'Редактор с «богатым» форматированием, %1',
 
 	// Toolbar buttons without dialogs.
@@ -91,10 +91,10 @@
 		generalTab		: 'Информация',
 		advancedTab		: 'Расширенный',
-		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
+		validateNumberFailed	: 'Это значение не является числом.',
+		confirmNewPage	: 'Все несохраненные изменения будут утеряны. Вы уверены, что хотите перейти на другую страницу?',
+		confirmCancel	: 'Некоторые опции были изменены. Вы уверены, что хотите закрыть диалог?',
 
 		// 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">, недоступно</span>'
 	},
 
@@ -130,5 +130,5 @@
 		targetPopupName	: 'Имя всплывающего окна',
 		popupFeatures	: 'Свойства всплывающего окна',
-		popupResizable	: 'Resizable', // MISSING
+		popupResizable	: 'Изменяемый размер',
 		popupStatusBar	: 'Строка состояния',
 		popupLocationBar	: 'Панель локации',
@@ -142,12 +142,12 @@
 		popupHeight		: 'Высота',
 		popupTop		: 'Позиция сверху',
-		id				: 'Id', // MISSING
+		id				: 'Id',
 		langDir			: 'Направление языка',
 		langDirNotSet	: '<не определено>',
-		langDirLTR		: 'Слева на право (LTR)',
-		langDirRTL		: 'Справа на лево (RTL)',
+		langDirLTR		: 'Слева направо (LTR)',
+		langDirRTL		: 'Справа налево (RTL)',
 		acccessKey		: 'Горячая клавиша',
 		name			: 'Имя',
-		langCode		: 'Направление языка',
+		langCode		: 'Код языка',
 		tabIndex		: 'Последовательность перехода',
 		advisoryTitle	: 'Заголовок',
@@ -187,8 +187,8 @@
 		notFoundMsg			: 'Указанный текст не найден.',
 		matchCase			: 'Учитывать регистр',
-		matchWord			: 'Совпадение целых слов',
-		matchCyclic			: 'Match cyclic', // MISSING
+		matchWord			: 'Только слово целиком',
+		matchCyclic			: 'Начинать с начала после достижения конца',
 		replaceAll			: 'Заменить все',
-		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+		replaceSuccessMsg	: '%1 совпадение(й) заменено.'
 	},
 
@@ -221,11 +221,11 @@
 		headersRow		: 'Первая строка',
 		headersBoth		: 'Оба варианта',
-		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		: 'Число строк должно быть больше 0.',
+		invalidCols		: 'Число столбцов должно быть больше 0.',
+		invalidBorder	: 'Ширина бордюра должна быть числом.',
+		invalidWidth	: 'Ширина таблицы должна быть числом.',
+		invalidHeight	: 'Высота таблицы должна быть числом.',
+		invalidCellSpacing	: 'Размер промежутков (cellspacing) между ячейками должны быть числом.',
+		invalidCellPadding	: 'Отступы внутри ячеек (cellpadding) должны быть числом.',
 
 		cell :
@@ -235,31 +235,31 @@
 			insertAfter		: 'Вставить ячейку после',
 			deleteCell		: 'Удалить ячейки',
-			merge			: 'Соединить ячейки',
-			mergeRight		: 'Соединить вправо',
-			mergeDown		: 'Соединить вниз',
+			merge			: 'Объединить ячейки',
+			mergeRight		: 'Объединить с правой',
+			mergeDown		: 'Объединить с нижней',
 			splitHorizontal	: 'Разбить ячейку горизонтально',
 			splitVertical	: 'Разбить ячейку вертикально',
-			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			: 'Свойства ячейки',
+			cellType		: 'Тип ячейки',
+			rowSpan			: 'Rows Span',
+			colSpan			: 'Columns Span',
+			wordWrap		: 'Перенос по словам',
+			hAlign			: 'Выравнивание по горизонтали',
+			vAlign			: 'Выравнивание по вертикали',
+			alignTop		: 'По верху',
+			alignMiddle		: 'Посередине',
+			alignBottom		: 'По низу',
+			alignBaseline	: 'По базовой линии',
+			bgColor			: 'Цвет фона',
+			borderColor		: 'Цвет границы',
+			data			: 'Данные',
+			header			: 'Заголовок',
+			yes				: 'Да',
+			no				: 'Нет',
+			invalidWidth	: 'Ширина ячейки должна быть числом.',
+			invalidHeight	: 'Высота ячейки должна быть числом.',
+			invalidRowSpan	: 'Rows span must be a whole number.',
+			invalidColSpan	: 'Columns span must be a whole number.',
+			chooseColor : 'Выберите'
 		},
 
@@ -308,10 +308,10 @@
 		action		: 'Действие',
 		method		: 'Метод',
-		encoding	: 'Encoding', // MISSING
+		encoding	: 'Кодировка',
 		target		: 'Цель',
 		targetNotSet	: '<не определено>',
 		targetNew	: 'Новое окно (_blank)',
 		targetTop	: 'Самое верхнее окно (_top)',
-		targetSelf	: 'Тоже окно (_self)',
+		targetSelf	: 'То же окно (_self)',
 		targetParent	: 'Родительское окно (_parent)'
 	},
@@ -373,5 +373,5 @@
 		menu		: 'Свойства изображения',
 		infoTab	: 'Информация о изображении',
-		btnUpload	: 'Послать на сервер',
+		btnUpload	: 'Отправить на сервер',
 		url		: 'URL',
 		upload	: 'Закачать',
@@ -390,7 +390,7 @@
 		alertUrl	: 'Пожалуйста, введите URL изображения',
 		linkTab	: 'Ссылка',
-		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
+		button2Img	: 'Do you want to transform the selected image button on a simple image?',
+		img2Button	: 'Do you want to transform the selected image on a image button?',
+		urlMissing : 'Отсутствует URL картинки.'
 	},
 
@@ -399,18 +399,18 @@
 	{
 		properties		: 'Свойства Flash',
-		propertiesTab	: 'Properties', // MISSING
+		propertiesTab	: 'Свойства',
 		title		: 'Свойства Flash',
 		chkPlay		: 'Авто проигрывание',
 		chkLoop		: 'Повтор',
 		chkMenu		: 'Включить меню Flash',
-		chkFull		: 'Allow Fullscreen', // MISSING
+		chkFull		: 'разрешить полноэкранный режим',
  		scale		: 'Масштабировать',
 		scaleAll		: 'Показывать все',
 		scaleNoBorder	: 'Без бордюра',
 		scaleFit		: 'Точное совпадение',
-		access			: 'Script Access', // MISSING
-		accessAlways	: 'Always', // MISSING
-		accessSameDomain	: 'Same domain', // MISSING
-		accessNever	: 'Never', // MISSING
+		access			: 'Область доступа скрипта',
+		accessAlways	: 'Всегда',
+		accessSameDomain	: 'Тот же домен',
+		accessNever	: 'Никогда',
 		align		: 'Выравнивание',
 		alignLeft	: 'По левому краю',
@@ -423,16 +423,16 @@
 		alignTextTop	: 'Текст наверху',
 		alignTop	: 'По верху',
-		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		: 'Качество',
+		qualityBest		 : 'Лучшее',
+		qualityHigh		 : 'Высокое',
+		qualityAutoHigh	 : 'Высокое (авто)',
+		qualityMedium	 : 'Среднее',
+		qualityAutoLow	 : 'Низкое (авто)',
+		qualityLow		 : 'Низкое',
+		windowModeWindow	 : 'Окно',
+		windowModeOpaque	 : 'Непрозрачный',
+		windowModeTransparent	 : 'Прозрачный',
+		windowMode	: 'Оконный режим',
+		flashvars	: 'Переменные для Flash',
 		bgcolor	: 'Цвет фона',
 		width	: 'Ширина',
@@ -441,8 +441,8 @@
 		vSpace	: 'Вертикальный отступ',
 		validateSrc : 'Пожалуйста, введите URL ссылки',
-		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 : 'Ширина задается числом.',
+		validateHeight : 'Высота задается числом.',
+		validateHSpace : 'Горизонтальный отступ задается числом.',
+		validateVSpace : 'Вертикальный отступ задается числом.'
 	},
 
@@ -451,7 +451,7 @@
 	{
 		toolbar			: 'Проверить орфографию',
-		title			: 'Spell Check', // MISSING
-		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
-		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		title			: 'Проверка правописания',
+		notAvailable	: 'Извините, сервис сейчас недоступен.',
+		errorLoading	: 'Ошибка при загрузке служебного хоста приложения: %s.',
 		notInDic		: 'Нет в словаре',
 		changeTo		: 'Заменить на',
@@ -466,5 +466,5 @@
 		noChanges		: 'Проверка орфографии закончена: ни одного слова не изменено',
 		oneChange		: 'Проверка орфографии закончена: одно слово изменено',
-		manyChanges		: 'Проверка орфографии закончена: 1% слов изменен',
+		manyChanges		: 'Проверка орфографии закончена: 1% слов изменено',
 		ieSpellDownload	: 'Модуль проверки орфографии не установлен. Хотите скачать его сейчас?'
 	},
@@ -478,5 +478,5 @@
 	elementsPath :
 	{
-		eleTitle : '%1 element' // MISSING
+		eleTitle : '%1 элемент'
 	},
 
@@ -507,8 +507,8 @@
 	pastefromword :
 	{
-		confirmCleanup : 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		confirmCleanup : 'Текст, который вы хотите вставить, похож на копируемый из Word. Вы хотите очистить его перед вставкой?',
 		toolbar : 'Вставить из Word',
 		title : 'Вставить из Word',
-		error : 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+		error : 'Невозможно очистить вставленные данные из-за внутренней ошибки'
 	},
 
@@ -533,9 +533,9 @@
 	{
 		label : 'Стиль',
-		voiceLabel : 'Styles', // MISSING
-		panelVoiceLabel : 'Select a style', // MISSING
-		panelTitle1 : 'Block Styles', // MISSING
-		panelTitle2 : 'Inline Styles', // MISSING
-		panelTitle3 : 'Object Styles' // MISSING
+		voiceLabel : 'Стили',
+		panelVoiceLabel : 'Выберите стиль',
+		panelTitle1 : 'Block Styles',
+		panelTitle2 : 'Inline Styles',
+		panelTitle3 : 'Стили объекта'
 	},
 
@@ -543,7 +543,7 @@
 	{
 		label : 'Форматирование',
-		voiceLabel : 'Format', // MISSING
+		voiceLabel : 'Форматирование',
 		panelTitle : 'Форматирование',
-		panelVoiceLabel : 'Select a paragraph format', // MISSING
+		panelVoiceLabel : 'Выберите форматирование абзаца',
 
 		tag_p : 'Нормальный',
@@ -561,17 +561,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-контейнер',
+		toolbar				: 'Создать Div-контейнер',
+		cssClassInputLabel	: 'Классы таблицы стилей',
+		styleSelectLabel	: 'Стиль',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: 'Код языка',
+		inlineStyleInputLabel	: 'Локальный стиль',
+		advisoryTitleInputLabel	: 'Advisory Title',
+		langDirLabel		: 'Направление письма',
+		langDirLTRLabel		: 'Слева направо (LTR)',
+		langDirRTLLabel		: 'Справа налево (RTL)',
+		edit				: 'Редактировать Div',
+		remove				: 'Убрать Div'
   	},
 
@@ -579,7 +579,7 @@
 	{
 		label : 'Шрифт',
-		voiceLabel : 'Font', // MISSING
+		voiceLabel : 'Шрифт',
 		panelTitle : 'Шрифт',
-		panelVoiceLabel : 'Select a font' // MISSING
+		panelVoiceLabel : 'Выберите шрифт'
 	},
 
@@ -587,7 +587,7 @@
 	{
 		label : 'Размер',
-		voiceLabel : 'Font Size', // MISSING
+		voiceLabel : 'Размер шрифта',
 		panelTitle : 'Размер',
-		panelVoiceLabel : 'Select a font size' // MISSING
+		panelVoiceLabel : 'Выберите размер шрифта'
 	},
 
@@ -602,96 +602,96 @@
 	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' : 'Черный',
+		'800000' : 'Бордовый',
+		'8B4513' : 'Старой кожи',
+		'2F4F4F' : 'Темный синевато-серый',
+		'008080' : 'Чайный',
+		'000080' : 'Темно-синиый',
+		'4B0082' : 'Индиго',
+		'696969' : 'Грязно-серый',
+		'B22222' : 'Огнеупорный кирпич',
+		'A52A2A' : 'Коричневый',
+		'DAA520' : 'Красное золото',
+		'006400' : 'Темно-зеленый',
+		'40E0D0' : 'Бирюзовый',
+		'0000CD' : 'Синий',
+		'800080' : 'Пурпурный',
+		'808080' : 'Серый',
+		'F00' : 'Красный',
+		'FF8C00' : 'Темно-оранжевый',
+		'FFD700' : 'Золотой',
+		'008000' : 'Зеленый',
+		'0FF' : 'Морской волны',
+		'00F' : 'Голубой',
+		'EE82EE' : 'Фиолетовый',
+		'A9A9A9' : 'Темно-серый',
+		'FFA07A' : 'Светлый оранжево-розовый',
+		'FFA500' : 'Оранжевый',
+		'FFFF00' : 'Желтый',
+		'00FF00' : 'Известковый',
+		'AFEEEE' : 'Бледно-бирюзовый',
+		'ADD8E6' : 'Свелто-синий',
+		'DDA0DD' : 'Сливовый',
+		'D3D3D3' : 'Светло-серый',
+		'FFF0F5' : 'Бледный розово-лиловый ',
+		'FAEBD7' : 'Античный белый',
+		'FFFFE0' : 'Светло-желтый',
+		'F0FFF0' : 'Свежего меда',
+		'F0FFFF' : 'Лазурь',
+		'F0F8FF' : 'Бледно-голубой',
+		'E6E6FA' : 'Бледно-лиловый',
+		'FFF' : 'Белый'
 	},
 
 	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 : 'Проверка Орфографии по Мере Ввода',
+		enable : 'Включить ПОМВ',
+		disable : 'Отключить ПОМВ',
+		about : 'О ПОМВ',
+		toggle : 'Переключить ПОМВ',
+		options : 'Настройки',
+		langs : 'Языки',
+		moreSuggestions : 'Больше вариантов',
+		ignore : 'Пропустить',
+		ignoreAll : 'Пропустить всё',
+		addWord : 'Добавить слово',
+		emptyDic : 'Имя словаря должно быть не пустым.',
+		optionsTab : 'Настройки',
+		languagesTab : 'Языки',
+		dictionariesTab : 'Словари',
+		aboutTab : 'О словарях'
 	},
 
 	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',
+		dlgTitle : 'О программе CKEditor',
+		moreInfo : 'По вопросам лицензирования обращайтесь на наш сайт:',
+		copy : 'Copyright &copy; $1. Все права защищены.'
+	},
+
+	maximize : 'Максимизировать',
+	minimize : 'Минимизировать',
 
 	fakeobjects :
 	{
-		anchor : 'Anchor', // MISSING
-		flash : 'Flash Animation', // MISSING
-		div : 'Page Break', // MISSING
-		unknown : 'Unknown Object' // MISSING
-	},
-
-	resize : 'Drag to resize', // MISSING
+		anchor : 'Якорь',
+		flash : 'Flash-анимация',
+		div : 'Разрыв страницы',
+		unknown : 'Неизвестный объект'
+	},
+
+	resize : 'Перетащите для изменения размера',
 
 	colordialog :
 	{
-		title : 'Select color', // MISSING
-		highlight : 'Highlight', // MISSING
-		selected : 'Selected', // MISSING
-		clear : 'Clear' // MISSING
-	},
-
-	toolbarCollapse : 'Collapse Toolbar', // MISSING
-	toolbarExpand : 'Expand Toolbar' // MISSING
+		title : 'Выберите цвет',
+		highlight : 'Выделить',
+		selected : 'Выбранное',
+		clear : 'Очистить'
+	},
+
+	toolbarCollapse : 'Свернуть панель инструментов',
+	toolbarExpand : 'Развернуть панель инструментов'
 };
Index: /CKEditor/branches/versions/3.1.x/_source/lang/sl.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/lang/sl.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/lang/sl.js	(revision 5180)
@@ -32,5 +32,5 @@
 	 * of reading non-English words. So be careful while translating it.
 	 */
-	editorTitle		: 'Rich text editor, %1', // MISSING
+	editorTitle		: 'Urejevalnik obogatenega besedila, %1',
 
 	// Toolbar buttons without dialogs.
@@ -89,12 +89,12 @@
 		ok				: 'V redu',
 		cancel			: 'Prekliči',
-		generalTab		: 'General', // MISSING
+		generalTab		: 'Splošno',
 		advancedTab		: 'Napredno',
-		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
+		validateNumberFailed	: 'Ta vrednost ni število.',
+		confirmNewPage	: 'Vse neshranjene spremembe te vsebine bodo izgubljene. Ali gotovo želiš naložiti novo stran?',
+		confirmCancel	: 'Nekaj možnosti je bilo spremenjenih. Ali gotovo želiš zapreti okno?',
 
 		// 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">, nedosegljiv</span>'
 	},
 
@@ -130,5 +130,5 @@
 		targetPopupName	: 'Ime pojavnega okna',
 		popupFeatures	: 'Značilnosti pojavnega okna',
-		popupResizable	: 'Resizable', // MISSING
+		popupResizable	: 'Spremenljive velikosti',
 		popupStatusBar	: 'Vrstica stanja',
 		popupLocationBar	: 'Naslovna vrstica',
@@ -142,5 +142,5 @@
 		popupHeight		: 'Višina',
 		popupTop		: 'Lega na vrhu',
-		id				: 'Id', // MISSING
+		id				: 'Id',
 		langDir			: 'Smer jezika',
 		langDirNotSet	: '<ni postavljen>',
@@ -188,7 +188,7 @@
 		matchCase			: 'Razlikuj velike in male črke',
 		matchWord			: 'Samo cele besede',
-		matchCyclic			: 'Match cyclic', // MISSING
+		matchCyclic			: 'Primerjaj znake v cirilici',
 		replaceAll			: 'Zamenjaj vse',
-		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+		replaceSuccessMsg	: '%1 pojavitev je bilo zamenjano.'
 	},
 
@@ -216,16 +216,16 @@
 		caption		: 'Naslov',
 		summary		: 'Povzetek',
-		headers		: 'Headers', // MISSING
-		headersNone		: 'None', // MISSING
-		headersColumn	: 'First column', // MISSING
-		headersRow		: 'First Row', // MISSING
-		headersBoth		: 'Both', // MISSING
-		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
+		headers		: 'Glave',
+		headersNone		: 'Brez',
+		headersColumn	: 'Prvi stolpec',
+		headersRow		: 'Prva vrstica',
+		headersBoth		: 'Oboje',
+		invalidRows		: 'Število vrstic mora biti večje od 0.',
+		invalidCols		: 'Število stolpcev mora biti večje od 0.',
+		invalidBorder	: 'Širina obrobe mora biti število.',
+		invalidWidth	: 'Širina tabele mora biti število.',
+		invalidHeight	: 'Višina tabele mora biti število.',
+		invalidCellSpacing	: 'Razmik med celicami mora biti število.',
+		invalidCellPadding	: 'Zamik celic mora biti število',
 
 		cell :
@@ -240,26 +240,26 @@
 			splitHorizontal	: 'Razdeli celico vodoravno',
 			splitVertical	: 'Razdeli celico navpično',
-			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			: 'Lastnosti celice',
+			cellType		: 'Vrsta celice',
+			rowSpan			: 'Razpon vrstic',
+			colSpan			: 'Razpon stolpcev',
+			wordWrap		: 'Prelom besedila',
+			hAlign			: 'Vodoravna poravnava',
+			vAlign			: 'Navpična poravnava',
+			alignTop		: 'Vrh',
+			alignMiddle		: 'Sredina',
+			alignBottom		: 'Dno',
+			alignBaseline	: 'Osnovnica',
+			bgColor			: 'Barva ozadja',
+			borderColor		: 'Barva obrobe',
+			data			: 'Podatki',
+			header			: 'Glava',
+			yes				: 'Da',
+			no				: 'Ne',
+			invalidWidth	: 'Širina celice mora biti število.',
+			invalidHeight	: 'Višina celice mora biti število.',
+			invalidRowSpan	: 'Razpon vrstic mora biti celo število.',
+			invalidColSpan	: 'Razpon stolpcev mora biti celo število.',
+			chooseColor : 'Izberi'
 		},
 
@@ -308,5 +308,5 @@
 		action		: 'Akcija',
 		method		: 'Metoda',
-		encoding	: 'Encoding', // MISSING
+		encoding	: 'Kodiranje znakov',
 		target		: 'Cilj',
 		targetNotSet	: '<ni postavljen>',
@@ -390,7 +390,7 @@
 		alertUrl	: 'Vnesite URL slike',
 		linkTab	: 'Povezava',
-		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
+		button2Img	: 'Želiš pretvoriti izbrani gumb s sliko v preprosto sliko?',
+		img2Button	: 'Želiš pretvoriti izbrano sliko v gumb s sliko?',
+		urlMissing : 'Manjka vir (URL) slike.'
 	},
 
@@ -399,18 +399,18 @@
 	{
 		properties		: 'Lastnosti Flash',
-		propertiesTab	: 'Properties', // MISSING
+		propertiesTab	: 'Lastnosti',
 		title		: 'Lastnosti Flash',
 		chkPlay		: 'Samodejno predvajaj',
 		chkLoop		: 'Ponavljanje',
 		chkMenu		: 'Omogoči Flash Meni',
-		chkFull		: 'Allow Fullscreen', // MISSING
+		chkFull		: 'Dovoli celozaslonski način',
  		scale		: 'Povečava',
 		scaleAll		: 'Pokaži vse',
 		scaleNoBorder	: 'Brez obrobe',
 		scaleFit		: 'Natančno prileganje',
-		access			: 'Script Access', // MISSING
-		accessAlways	: 'Always', // MISSING
-		accessSameDomain	: 'Same domain', // MISSING
-		accessNever	: 'Never', // MISSING
+		access			: 'Dostop skript',
+		accessAlways	: 'Vedno',
+		accessSameDomain	: 'Samo ista domena',
+		accessNever	: 'Nikoli',
 		align		: 'Poravnava',
 		alignLeft	: 'Levo',
@@ -423,16 +423,16 @@
 		alignTextTop	: 'Besedilo na vrh',
 		alignTop	: 'Na vrh',
-		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		: 'Kakovost',
+		qualityBest		 : 'Najvišja',
+		qualityHigh		 : 'Visoka',
+		qualityAutoHigh	 : 'Samodejno visoka',
+		qualityMedium	 : 'Srednja',
+		qualityAutoLow	 : 'Samodejno nizka',
+		qualityLow		 : 'Nizka',
+		windowModeWindow	 : 'Okno',
+		windowModeOpaque	 : 'Motno',
+		windowModeTransparent	 : 'Prosojno',
+		windowMode	: 'Vrsta okna',
+		flashvars	: 'Spremenljivke za Flash',
 		bgcolor	: 'Barva ozadja',
 		width	: 'Širina',
@@ -441,8 +441,8 @@
 		vSpace	: 'Navpični razmik',
 		validateSrc : 'Vnesite URL povezave',
-		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 : 'Širina mora biti število.',
+		validateHeight : 'Višina mora biti število.',
+		validateHSpace : 'Vodoravni razmik mora biti število.',
+		validateVSpace : 'Navpični razmik mora biti število.'
 	},
 
@@ -451,7 +451,7 @@
 	{
 		toolbar			: 'Preveri črkovanje',
-		title			: 'Spell Check', // MISSING
-		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
-		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		title			: 'Črkovalnik',
+		notAvailable	: 'Oprostite, storitev trenutno ni dosegljiva.',
+		errorLoading	: 'Napaka pri nalaganju storitve programa na naslovu %s.',
 		notInDic		: 'Ni v slovarju',
 		changeTo		: 'Spremeni v',
@@ -478,5 +478,5 @@
 	elementsPath :
 	{
-		eleTitle : '%1 element' // MISSING
+		eleTitle : '%1 element'
 	},
 
@@ -533,9 +533,9 @@
 	{
 		label : 'Slog',
-		voiceLabel : 'Styles', // MISSING
-		panelVoiceLabel : 'Select a style', // MISSING
-		panelTitle1 : 'Block Styles', // MISSING
-		panelTitle2 : 'Inline Styles', // MISSING
-		panelTitle3 : 'Object Styles' // MISSING
+		voiceLabel : 'Slogi',
+		panelVoiceLabel : 'Izberi slog',
+		panelTitle1 : 'Slogi odstavkov',
+		panelTitle2 : 'Slogi besedila',
+		panelTitle3 : 'Slogi objektov'
 	},
 
@@ -543,7 +543,7 @@
 	{
 		label : 'Oblika',
-		voiceLabel : 'Format', // MISSING
+		voiceLabel : 'Oblika',
 		panelTitle : 'Oblika',
-		panelVoiceLabel : 'Select a paragraph format', // MISSING
+		panelVoiceLabel : 'Izberi obliko odstavka',
 
 		tag_p : 'Navaden',
@@ -556,5 +556,5 @@
 		tag_h5 : 'Naslov 5',
 		tag_h6 : 'Naslov 6',
-		tag_div : 'Normal (DIV)' // MISSING
+		tag_div : 'Navaden (DIV)'
 	},
 
@@ -579,7 +579,7 @@
 	{
 		label : 'Pisava',
-		voiceLabel : 'Font', // MISSING
+		voiceLabel : 'Pisava',
 		panelTitle : 'Pisava',
-		panelVoiceLabel : 'Select a font' // MISSING
+		panelVoiceLabel : 'Izberi pisavo'
 	},
 
@@ -587,7 +587,7 @@
 	{
 		label : 'Velikost',
-		voiceLabel : 'Font Size', // MISSING
+		voiceLabel : 'Velikost',
 		panelTitle : 'Velikost',
-		panelVoiceLabel : 'Select a font size' // MISSING
+		panelVoiceLabel : 'Izberi velikost'
 	},
 
@@ -646,49 +646,49 @@
 	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 : 'Črkovanje med tipkanjem',
+		enable : 'Omogoči SCAYT',
+		disable : 'Onemogoči SCAYT',
+		about : 'O storitvi SCAYT',
+		toggle : 'Preklopi SCAYT',
+		options : 'Možnosti',
+		langs : 'Jeziki',
+		moreSuggestions : 'Več predlogov',
+		ignore : 'Prezri',
+		ignoreAll : 'Prezri vse',
+		addWord : 'Dodaj besedo',
+		emptyDic : 'Ime slovarja ne more biti prazno.',
+		optionsTab : 'Možnosti',
+		languagesTab : 'Jeziki',
+		dictionariesTab : 'Slovarji',
+		aboutTab : 'O storitvi'
 	},
 
 	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 : 'O programu CKEditor',
+		dlgTitle : 'O programu CKEditor',
+		moreInfo : 'Za informacijo o licenci prostim obiščite našo spletno stran:',
+		copy : 'Copyright &copy; $1. Vse pravice pridržane.'
+	},
+
+	maximize : 'Maksimiraj',
+	minimize : 'Minimiraj',
 
 	fakeobjects :
 	{
-		anchor : 'Anchor', // MISSING
-		flash : 'Flash Animation', // MISSING
-		div : 'Page Break', // MISSING
-		unknown : 'Unknown Object' // MISSING
-	},
-
-	resize : 'Drag to resize', // MISSING
+		anchor : 'Sidro',
+		flash : 'Flash animacija',
+		div : 'Prelom strani',
+		unknown : 'Neznan objekt'
+	},
+
+	resize : 'Potegni za spremembo velikosti',
 
 	colordialog :
 	{
-		title : 'Select color', // MISSING
-		highlight : 'Highlight', // MISSING
-		selected : 'Selected', // MISSING
-		clear : 'Clear' // MISSING
+		title : 'Izberi barvo',
+		highlight : 'Poudarjeno',
+		selected : 'Izbrano',
+		clear : 'Počisti'
 	},
 
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/about/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/about/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/about/plugin.js	(revision 5180)
@@ -6,4 +6,5 @@
 CKEDITOR.plugins.add( 'about',
 {
+	requires : [ 'dialog'],
 	init : function( editor )
 	{
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/basicstyles/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/basicstyles/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/basicstyles/plugin.js	(revision 5180)
@@ -43,8 +43,51 @@
 
 // Basic Inline Styles.
+/**
+ * The style definition to be used to apply the bold style in the text.
+ * @type Object
+ * @example
+ * config.coreStyles_bold = { element : 'b', overrides : 'strong' };
+ * @example
+ * config.coreStyles_bold = { element : 'span', attributes : {'class': 'Bold'} };
+ */
 CKEDITOR.config.coreStyles_bold			= { element : 'strong', overrides : 'b' };
+/**
+ * The style definition to be used to apply the italic style in the text.
+ * @type Object
+ * @default { element : 'em', overrides : 'i' }
+ * @example
+ * CKEDITOR.config.coreStyles_italic		= { element : 'span', attributes : {'class': 'Italic'} };
+ */
 CKEDITOR.config.coreStyles_italic		= { element : 'em', overrides : 'i' };
+/**
+ * The style definition to be used to apply the underline style in the text.
+ * @type Object
+ * @default { element : 'u' }
+ * @example
+ * CKEDITOR.config.coreStyles_underline	= { element : 'span', attributes : {'class': 'Underline'}};
+ */
 CKEDITOR.config.coreStyles_underline	= { element : 'u' };
+/**
+ * The style definition to be used to apply the strike style in the text.
+ * @type Object
+ * @default { element : 'strike' }
+ * @example
+ * CKEDITOR.config.coreStyles_strike		= { element : 'span', attributes : {'class': 'StrikeThrough'}, overrides : 'strike' };
+ */
 CKEDITOR.config.coreStyles_strike		= { element : 'strike' };
+/**
+ * The style definition to be used to apply the subscript style in the text.
+ * @type Object
+ * @default { element : 'sub' }
+ * @example
+ * CKEDITOR.config.coreStyles_subscript	= { element : 'span', attributes : {'class': 'Subscript'}, overrides : 'sub' };
+ */
 CKEDITOR.config.coreStyles_subscript	= { element : 'sub' };
+/**
+ * The style definition to be used to apply the superscript style in the text.
+ * @type Object
+ * @default { element : 'sup' }
+ * @example
+ * CKEDITOR.config.coreStyles_superscript	= { element : 'span', attributes : {'class': 'Superscript'}, overrides : 'sup' };
+ */
 CKEDITOR.config.coreStyles_superscript	= { element : 'sup' };
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/clipboard/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/clipboard/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/clipboard/plugin.js	(revision 5180)
@@ -164,4 +164,17 @@
 		if ( CKEDITOR.env.ie && doc.getById( 'cke_pastebin' ) )
 			return;
+
+		// If the browser supports it, get the data directly
+		if (mode == 'text' && evt.data && evt.data.$.clipboardData)
+		{
+			// evt.data.$.clipboardData.types contains all the flavours in Mac's Safari, but not on windows.
+			var plain = evt.data.$.clipboardData.getData( 'text/plain' );
+			if (plain)
+			{
+				evt.data.preventDefault();
+				callback( plain );
+				return;
+			}
+		}
 
 		var sel = this.getSelection(),
@@ -242,5 +255,5 @@
 	CKEDITOR.plugins.add( 'clipboard',
 		{
-			requires : [ 'htmldataprocessor' ],
+			requires : [ 'dialog', 'htmldataprocessor' ],
 			init : function( editor )
 			{
@@ -306,8 +319,8 @@
 				{
 					var body = editor.document.getBody();
-					body.on( ( mode == 'text' && CKEDITOR.env.ie ) ? 'paste' : 'beforepaste',
+					body.on( ( (mode == 'text' && CKEDITOR.env.ie) || CKEDITOR.env.webkit ) ? 'paste' : 'beforepaste',
 						function( evt )
 						{
-							if( depressBeforePasteEvent )
+							if ( depressBeforePasteEvent )
 								return;
 
@@ -357,2 +370,13 @@
 		});
 })();
+
+/**
+ * Fired when a clipboard operation is about to be taken into the editor.
+ * Listeners can manipulate the data to be pasted before having it effectively
+ * inserted into the document.
+ * @name CKEDITOR.editor#paste
+ * @since 3.1
+ * @event
+ * @param {String} [data.html] The HTML data to be pasted. If not available, e.data.text will be defined.
+ * @param {String} [data.text] The plain text data to be pasted, available when plain text operations are to used. If not available, e.data.html will be defined.
+ */
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/colorbutton/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/colorbutton/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/colorbutton/plugin.js	(revision 5180)
@@ -195,5 +195,11 @@
 		element		: 'span',
 		styles		: { 'color' : '#(color)' },
-		overrides	: [ { element : 'font', attributes : { 'color' : null } } ]
+		overrides	: [ { element : 'font', attributes : { 'color' : null } } ],
+
+		// Fore color style must be applied inside links instead of around it.
+		childRule : function( element )
+		{
+			return element.getName() != 'a';
+		}
 	};
 
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/contextmenu/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/contextmenu/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/contextmenu/plugin.js	(revision 5180)
@@ -55,9 +55,5 @@
 				menu.onClick = CKEDITOR.tools.bind( function( item )
 				{
-					var noUnlock = true;
 					menu.hide();
-
-					if ( CKEDITOR.env.ie )
-						menu.onEscape();
 
 					if ( item.onClick )
@@ -66,5 +62,4 @@
 						editor.execCommand( item.command );
 
-					noUnlock = false;
 				}, this );
 
@@ -72,7 +67,4 @@
 				{
 					editor.focus();
-
-					if ( CKEDITOR.env.ie )
-						editor.getSelection().unlock( true );
 				};
 			}
@@ -139,5 +131,5 @@
 				{
 					evt = evt.data;
-					if( evt.$.button != 2 )
+					if ( evt.$.button != 2 )
 					{
 						if ( evt.getKeystroke() == CKEDITOR.CTRL + 1 )
@@ -152,5 +144,5 @@
 					var target = evt.getTarget();
 
-					if( !contextMenuOverrideButton )
+					if ( !contextMenuOverrideButton )
 					{
 						var ownerDoc =  target.getDocument();
@@ -211,5 +203,5 @@
 				this );
 
-			if( CKEDITOR.env.webkit )
+			if ( CKEDITOR.env.webkit )
 			{
 				var holdCtrlKey,
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/dialog/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/dialog/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/dialog/plugin.js	(revision 5180)
@@ -93,12 +93,4 @@
 		definition = new definitionObject( this, definition );
 
-		// Fire the "dialogDefinition" event, making it possible to customize
-		// the dialog definition.
-		this.definition = definition = CKEDITOR.fire( 'dialogDefinition',
-			{
-				name : dialogName,
-				definition : definition
-			}
-			, editor ).definition;
 
 		var doc = CKEDITOR.document;
@@ -149,4 +141,12 @@
 		CKEDITOR.event.call( this );
 
+		// Fire the "dialogDefinition" event, making it possible to customize
+		// the dialog definition.
+		this.definition = definition = CKEDITOR.fire( 'dialogDefinition',
+			{
+				name : dialogName,
+				definition : definition
+			}
+			, editor ).definition;
 		// Initialize load, show, hide, ok and cancel events.
 		if ( definition.onLoad )
@@ -806,5 +806,5 @@
 							expand : !!contents.expand,
 							padding : contents.padding,
-							style : contents.style || 'width: 100%;'
+							style : contents.style || 'width: 100%; height: 100%;'
 						}, pageHtml );
 
@@ -950,5 +950,6 @@
 		getContentElement : function( pageId, elementId )
 		{
-			return this._.contents[pageId][elementId];
+			var page = this._.contents[ pageId ];
+			return page && page[ elementId ];
 		},
 
@@ -1747,5 +1748,5 @@
 				var dialogPos = cursor.getPosition();
 				cursor.move( dialogPos.x, dialogPos.y );
-			} while( ( cursor = cursor._.parentDialog ) );
+			} while ( ( cursor = cursor._.parentDialog ) );
 		};
 
@@ -2778,2 +2779,17 @@
  * config.dialog_magnetDistance = 30;
  */
+
+/**
+ * Fired when a dialog definition is about to be used to create a dialog into
+ * an editor instance. This event makes it possible to customize the definition
+ * before creating it.
+ * <p>Note that this event is called only the first time a specific dialog is
+ * opened. Successive openings will use the cached dialog, and this event will
+ * not get fired.</p>
+ * @name CKEDITOR#dialogDefinition
+ * @event
+ * @param {CKEDITOR.dialog.dialogDefinition} data The dialog defination that
+ *		is being loaded.
+ * @param {CKEDITOR.editor} editor The editor instance that will use the
+ *		dialog.
+ */
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/dialogui/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/dialogui/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/dialogui/plugin.js	(revision 5180)
@@ -956,5 +956,5 @@
 				setValue : function( value )
 				{
-					value = value || '';
+					!value && ( value = '' );
 					return CKEDITOR.ui.dialog.uiElement.prototype.setValue.call( this, value );
 				},
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/div/dialogs/div.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/div/dialogs/div.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/div/dialogs/div.js	(revision 5180)
@@ -28,8 +28,8 @@
 		var retval = [];
 		var children = element.getChildren();
-		for( var i = 0 ; i < children.count() ; i++ )
+		for ( var i = 0 ; i < children.count() ; i++ )
 		{
 			var child = children.getItem( i );
-			if( ! ( child.type === CKEDITOR.NODE_TEXT
+			if ( ! ( child.type === CKEDITOR.NODE_TEXT
 				&& ( /^[ \t\n\r]+$/ ).test( child.getText() ) ) )
 				retval.push( child );
@@ -56,5 +56,5 @@
 
 			// Exclude 'td' and 'th' when 'wrapping table'
-			if( editor.config.div_wrapTable )
+			if ( editor.config.div_wrapTable )
 			{
 				delete definition.td;
@@ -95,5 +95,5 @@
 			{
 				// Exclude layout container elements
-				if( /^(?!vbox|hbox)/.test( field.type ) )
+				if ( /^(?!vbox|hbox)/.test( field.type ) )
 				{
 					if ( !field.setup )
@@ -150,11 +150,11 @@
 
 			// collect all included elements from dom-iterator
-			for( i = 0 ; i < ranges.length ; i++ )
+			for ( i = 0 ; i < ranges.length ; i++ )
 			{
 				iterator = ranges[ i ].createIterator();
-				while( ( block = iterator.getNextParagraph() ) )
+				while ( ( block = iterator.getNextParagraph() ) )
 				{
 					// include contents of blockLimit elements.
-					if( block.getName() in divLimitDefinition )
+					if ( block.getName() in divLimitDefinition )
 					{
 						var j, childNodes = block.getChildren();
@@ -165,5 +165,5 @@
 					{
 						// Bypass dtd disallowed elements.
-						while( !dtd[ block.getName() ] && block.getName() != 'body' )
+						while ( !dtd[ block.getName() ] && block.getName() != 'body' )
 							block = block.getParent();
 						addSafely( containedBlocks, block, database );
@@ -177,5 +177,5 @@
 			var ancestor, blockEl, divElement;
 
-			for( i = 0 ; i < blockGroups.length ; i++ )
+			for ( i = 0 ; i < blockGroups.length ; i++ )
 			{
 				var currentNode = blockGroups[ i ][ 0 ];
@@ -189,9 +189,9 @@
 
 				// Normalize the blocks in each group to a common parent.
-				for( j = 0; j < blockGroups[ i ].length ; j++ )
+				for ( j = 0; j < blockGroups[ i ].length ; j++ )
 				{
 					currentNode = blockGroups[ i ][ j ];
 
-					while( !currentNode.getParent().equals( ancestor ) )
+					while ( !currentNode.getParent().equals( ancestor ) )
 						currentNode = currentNode.getParent();
 
@@ -411,5 +411,5 @@
 			onOk : function()
 			{
-				if( command == 'editdiv' )
+				if ( command == 'editdiv' )
 					containers = [ this._element ];
 				else
@@ -417,5 +417,5 @@
 
 				// Update elements attributes
-				for( var i = 0 ; i < containers.length ; i++ )
+				for ( var i = 0 ; i < containers.length ; i++ )
 					this.commitContent( containers[ i ] );
 				this.hide();
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/div/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/div/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/div/plugin.js	(revision 5180)
@@ -48,5 +48,5 @@
 						{
 							range = ranges[ i ];
-							if( range.collapsed )
+							if ( range.collapsed )
 								findDiv( selection.getStartElement() );
 							else
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/domiterator/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/domiterator/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/domiterator/plugin.js	(revision 5180)
@@ -12,5 +12,7 @@
 (function()
 {
-
+	/**
+	 * @name CKEDITOR.dom.iterator
+	 */
 	function iterator( range )
 	{
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/editingblock/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/editingblock/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/editingblock/plugin.js	(revision 5180)
@@ -235,2 +235,9 @@
  */
 CKEDITOR.config.editingBlock = true;
+
+/**
+ * Fired when a CKEDITOR instance is created, fully initialized and ready for interaction.
+ * @name CKEDITOR#instanceReady
+ * @event
+ * @param {CKEDITOR.editor} editor The editor instance that has been created.
+ */
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/filebrowser/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/filebrowser/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/filebrowser/plugin.js	(revision 5180)
@@ -279,5 +279,16 @@
 				if ( url )
 				{
-					element.onClick = uploadFile;
+					var onClick = element.onClick;
+					element.onClick = function( evt )
+					{
+						// "element" here means the definition object, so we need to find the correct
+						// button to scope the event call
+						var sender = evt.sender;
+						if ( onClick && onClick.call( sender, evt ) === false )
+							return false;
+
+						return uploadFile.call( sender, evt );
+					};
+
 					element.filebrowser.url = url;
 					element.hidden = false;
@@ -336,5 +347,6 @@
 		}
 
-		return ( definition.getContents( tabId ).get( elementId ).filebrowser && definition.getContents( tabId ).get( elementId ).filebrowser.url );
+		var elementFileBrowser = definition.getContents( tabId ).get( elementId ).filebrowser;
+		return ( elementFileBrowser && elementFileBrowser.url );
 	}
 
@@ -348,4 +360,7 @@
 			dialog.getContentElement( targetInput[ 0 ], targetInput[ 1 ] ).reset();
 
+		if ( typeof data == 'function' && data.call( this._.filebrowserSe ) === false )
+			return;
+
 		if ( onSelect && onSelect.call( this._.filebrowserSe, fileUrl, data ) === false )
 			return;
@@ -367,12 +382,14 @@
 			CKEDITOR.on( 'dialogDefinition', function( evt )
 			{
+				var definition = evt.data.definition,
+					element;
 				// Associate filebrowser to elements with 'filebrowser' attribute.
-				for ( var i in evt.data.definition.contents )
+				for ( var i in definition.contents )
 				{
-					attachFileBrowser( evt.editor, evt.data.name, evt.data.definition, evt.data.definition.contents[ i ].elements );
-					if ( evt.data.definition.contents[ i ].hidden && evt.data.definition.contents[ i ].filebrowser )
+					element = definition.contents[ i ] ;
+					attachFileBrowser( evt.editor, evt.data.name, definition, element.elements );
+					if ( element.hidden && element.filebrowser )
 					{
-						evt.data.definition.contents[ i ].hidden =
-							!isConfigured( evt.data.definition, evt.data.definition.contents[ i ][ 'id' ], evt.data.definition.contents[ i ].filebrowser );
+						element.hidden = !isConfigured( definition, element[ 'id' ], element.filebrowser );
 					}
 				}
@@ -382,2 +399,81 @@
 
 } )();
+
+/**
+ * The location of an external file browser, that should be launched when "Browse Server" button is pressed.
+ * If configured, the "Browse Server" button will appear in Link, Image and Flash dialogs.
+ * @see The <a href="http://docs.cksource.com/CKEditor_3.x/Developers_Guide/File_Browser_(Uploader)">File Browser/Uploader</a> documentation.
+ * @name CKEDITOR.config.filebrowserBrowseUrl
+ * @since 3.0
+ * @type String
+ * @default '' (empty string = disabled)
+ * @example
+ * config.filebrowserBrowseUrl = '/browser/browse.php';
+ */
+
+/**
+ * The location of a script that handles file uploads.
+ * If set, the "Upload" tab will appear in "Link", "Image" and "Flash" dialogs.
+ * @name CKEDITOR.config.filebrowserUploadUrl
+ * @see The <a href="http://docs.cksource.com/CKEditor_3.x/Developers_Guide/File_Browser_(Uploader)">File Browser/Uploader</a> documentation.
+ * @since 3.0
+ * @type String
+ * @default '' (empty string = disabled)
+ * @example
+ * config.filebrowserUploadUrl = '/uploader/upload.php';
+ */
+
+/**
+ * The location of an external file browser, that should be launched when "Browse Server" button is pressed in the Image dialog.
+ * If not set, CKEditor will use {@link CKEDITOR.config.filebrowserBrowseUrl}.
+ * @name CKEDITOR.config.filebrowserImageBrowseUrl
+ * @since 3.0
+ * @type String
+ * @default '' (empty string = disabled)
+ * @example
+ * config.filebrowserImageBrowseUrl = '/browser/browse.php?type=Images';
+ */
+
+/**
+ * The location of an external file browser, that should be launched when "Browse Server" button is pressed in the Flash dialog.
+ * If not set, CKEditor will use {@link CKEDITOR.config.filebrowserBrowseUrl}.
+ * @name CKEDITOR.config.filebrowserFlashBrowseUrl
+ * @since 3.0
+ * @type String
+ * @default '' (empty string = disabled)
+ * @example
+ * config.filebrowserFlashBrowseUrl = '/browser/browse.php?type=Flash';
+ */
+
+/**
+ * The location of a script that handles file uploads in the Image dialog.
+ * If not set, CKEditor will use {@link CKEDITOR.config.filebrowserUploadUrl}.
+ * @name CKEDITOR.config.filebrowserImageUploadUrl
+ * @since 3.0
+ * @type String
+ * @default '' (empty string = disabled)
+ * @example
+ * config.filebrowserImageUploadUrl = '/uploader/upload.php?type=Images';
+ */
+
+/**
+ * The location of a script that handles file uploads in the Flash dialog.
+ * If not set, CKEditor will use {@link CKEDITOR.config.filebrowserUploadUrl}.
+ * @name CKEDITOR.config.filebrowserFlashUploadUrl
+ * @since 3.0
+ * @type String
+ * @default '' (empty string = disabled)
+ * @example
+ * config.filebrowserFlashUploadUrl = '/uploader/upload.php?type=Flash';
+ */
+
+/**
+ * The location of an external file browser, that should be launched when "Browse Server" button is pressed in the Link tab of Image dialog.
+ * If not set, CKEditor will use {@link CKEDITOR.config.filebrowserBrowseUrl}.
+ * @name CKEDITOR.config.filebrowserImageBrowseLinkUrl
+ * @since 3.2
+ * @type String
+ * @default '' (empty string = disabled)
+ * @example
+ * config.filebrowserImageBrowseLinkUrl = '/browser/browse.php';
+ */
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/find/dialogs/find.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/find/dialogs/find.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/find/dialogs/find.js	(revision 5180)
@@ -108,5 +108,5 @@
 				var currentTextNode = this.textNode;
 				// Already at the end of document, no more character available.
-				if(  currentTextNode === null )
+				if (  currentTextNode === null )
 					return cursorStep.call( this );
 
@@ -114,5 +114,5 @@
 
 				// There are more characters in the text node, step forward.
-				if( currentTextNode
+				if ( currentTextNode
 				    && rtl
 					&& this.offset > 0 )
@@ -121,5 +121,5 @@
 					return cursorStep.call( this );
 				}
-				else if( currentTextNode
+				else if ( currentTextNode
 					&& this.offset < currentTextNode.getLength() - 1 )
 				{
@@ -143,5 +143,5 @@
 
 						// Marking as match character boundaries.
-						if( !currentTextNode
+						if ( !currentTextNode
 						   && checkCharactersBoundary( this._.walker.current ) )
 							this._.matchBoundary = true;
@@ -311,11 +311,14 @@
 			{
 				var lastCursor,
+						nextRangeWalker,
 						cursors = this._.cursors;
-				if ( !( lastCursor = cursors[ cursors.length - 1 ] ) )
-					return null;
-				return new characterRange(
-										new characterWalker(
-											getRangeAfterCursor( lastCursor ) ),
-										maxLength );
+
+				if ( ( lastCursor = cursors[ cursors.length - 1 ] ) )
+					nextRangeWalker = new characterWalker( getRangeAfterCursor( lastCursor ) );
+				// In case it's an empty range (no cursors), figure out next range from walker (#4951).
+				else
+					nextRangeWalker = this._.walker;
+
+				return new characterRange( nextRangeWalker, maxLength );
 			},
 
@@ -428,5 +431,5 @@
 			find : function( pattern, matchCase, matchWord, matchCyclic, highlightMatched, cyclicRerun )
 			{
-				if( !this.matchRange )
+				if ( !this.matchRange )
 					this.matchRange =
 						new characterRange(
@@ -709,5 +712,5 @@
 										}
 										editor.fire( 'saveSnapshot' );
-										while( finder.replace( dialog,
+										while ( finder.replace( dialog,
 											dialog.getValueOf( 'replace', 'txtFindReplace' ),
 											dialog.getValueOf( 'replace', 'txtReplace' ),
@@ -802,5 +805,5 @@
 							}
 
-							if( isUserSelect )
+							if ( isUserSelect )
 								// synchronize fields on tab switch.
 								syncFieldsBetweenTabs.call( this, pageId );
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/floatpanel/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/floatpanel/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/floatpanel/plugin.js	(revision 5180)
@@ -136,4 +136,7 @@
 					});
 
+				// To allow the context menu to decrease back their width
+				element.getFirst().removeStyle('width');
+
 				// Configure the IFrame blur event. Do that only once.
 				if ( !this._.blurSet )
@@ -193,7 +196,32 @@
 						var panelLoad = CKEDITOR.tools.bind( function ()
 						{
+							var target = element.getFirst();
+
 							if ( block.autoSize )
 							{
-								var target = element.getFirst();
+								// We must adjust first the width or IE6 could include extra lines in the height computation
+								var widthNode = block.element.$;
+
+								if ( CKEDITOR.env.gecko || CKEDITOR.env.opera)
+									widthNode = widthNode.parentNode;
+
+								if ( CKEDITOR.env.ie)
+									widthNode = widthNode.document.body;
+
+								var width = widthNode.scrollWidth;
+								// Account for extra height needed due to IE quirks box model bug:
+								// http://en.wikipedia.org/wiki/Internet_Explorer_box_model_bug
+								// (#3426)
+								if ( CKEDITOR.env.ie && CKEDITOR.env.quirks && width > 0 )
+									width += ( target.$.offsetWidth || 0 ) - ( target.$.clientWidth || 0 );
+								// A little extra at the end.
+								// If not present, IE6 might break into the next line, but also it looks better this way
+								width += 4 ;
+
+								target.setStyle( 'width', width + 'px' );
+
+								// IE doesn't compute the scrollWidth if a filter is applied previously
+								block.element.addClass( 'cke_frameLoaded' );
+
 								var height = block.element.$.scrollHeight;
 
@@ -210,5 +238,5 @@
 							}
 							else
-								element.getFirst().removeStyle( 'height' );
+								target.removeStyle( 'height' );
 
 							var panelElement = panel.element,
@@ -228,5 +256,5 @@
 
 							// Vertical off screen is simpler.
-							if( top + panelSize.height > viewportSize.height + windowScroll.y )
+							if ( top + panelSize.height > viewportSize.height + windowScroll.y )
 								top -= panelSize.height;
 
@@ -344,9 +372,9 @@
 		var isLastInstance = CKEDITOR.tools.isEmpty( CKEDITOR.instances );
 
-		for( var i in panels )
+		for ( var i in panels )
 		{
 			var panel = panels[ i ];
 			// Safe to destroy it since there're no more instances.(#4241)
-			if( isLastInstance )
+			if ( isLastInstance )
 				panel.destroy();
 			// Panel might be used by other instances, just hide them.(#4552)
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/font/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/font/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/font/plugin.js	(revision 5180)
@@ -18,11 +18,19 @@
 		for ( var i = 0 ; i < names.length ; i++ )
 		{
-			var vars = {};
-			var parts = names[ i ].split( '/' );
-
-			var name = names[ i ] = parts[ 0 ];
-			vars[ styleType ] = values[ i ] = parts[ 1 ] || name;
-
-			styles[ name ] = new CKEDITOR.style( styleDefinition, vars );
+			var parts = names[ i ];
+
+			if ( parts )
+			{
+				parts = parts.split( '/' );
+
+				var vars = {},
+					name = names[ i ] = parts[ 0 ];
+
+				vars[ styleType ] = values[ i ] = parts[ 1 ] || name;
+
+				styles[ name ] = new CKEDITOR.style( styleDefinition, vars );
+			}
+			else
+				names.splice( i--, 1 );
 		}
 
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/forms/dialogs/select.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/forms/dialogs/select.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/forms/dialogs/select.js	(revision 5180)
@@ -74,5 +74,5 @@
 	{
 		combo = getSelect( combo );
-		while( combo.getChild( 0 ) && combo.getChild( 0 ).remove() )
+		while ( combo.getChild( 0 ) && combo.getChild( 0 ).remove() )
 		{ /*jsl:pass*/ }
 	}
@@ -163,5 +163,5 @@
 			{
 				editor.insertElement(element);
-				if( CKEDITOR.env.ie )
+				if ( CKEDITOR.env.ie )
 				{
 					var sel = editor.getSelection(),
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/forms/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/forms/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/forms/plugin.js	(revision 5180)
@@ -167,5 +167,5 @@
 	{
 		// Cleanup certain IE form elements default values.
-		if( CKEDITOR.env.ie )
+		if ( CKEDITOR.env.ie )
 		{
 			var dataProcessor = editor.dataProcessor,
@@ -180,5 +180,5 @@
 						var attrs = input.attributes,
 							type = attrs.type;
-						if( type == 'checkbox' || type == 'radio' )
+						if ( type == 'checkbox' || type == 'radio' )
 							attrs.value == 'on' && delete attrs.value;
 					}
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/htmldataprocessor/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/htmldataprocessor/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/htmldataprocessor/plugin.js	(revision 5180)
@@ -17,5 +17,5 @@
 		var lastIndex = block.children.length,
 			last = block.children[ lastIndex - 1 ];
-		while(  last && last.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.trim( last.value ) )
+		while (  last && last.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.trim( last.value ) )
 			last = block.children[ --lastIndex ];
 		return last;
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/htmlwriter/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/htmlwriter/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/htmlwriter/plugin.js	(revision 5180)
@@ -172,6 +172,11 @@
 		attribute : function( attName, attValue )
 		{
-			if ( this.forceSimpleAmpersand )
-				attValue = attValue.replace( /&amp;/, '&' );
+
+			if ( typeof attValue == 'string' )
+			{
+				this.forceSimpleAmpersand && ( attValue = attValue.replace( /&amp;/g, '&' ) );
+				// Browsers don't always escape quote in attribute values. (#4683)
+				attValue = attValue.replace( /"/g, '&quot;' );
+			}
 
 			this._.output.push( ' ', attName, '="', attValue, '"' );
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/image/dialogs/image.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/image/dialogs/image.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/image/dialogs/image.js	(revision 5180)
@@ -86,5 +86,5 @@
 	function commitInternally( targetFields )
 	{
-		if( incommit )
+		if ( incommit )
 			return;
 
@@ -93,5 +93,5 @@
 		var dialog = this.getDialog(),
 			element = dialog.imageElement;
-		if( element )
+		if ( element )
 		{
 			// Commit this field and broadcast to target fields.
@@ -386,5 +386,5 @@
 
 				// Remove empty style attribute.
-				if( !this.imageElement.getAttribute( 'style' ) )
+				if ( !this.imageElement.getAttribute( 'style' ) )
 					this.imageElement.removeAttribute( 'style' );
 
@@ -683,5 +683,5 @@
 																		element.removeStyle( 'height' );
 
-																	if( !internalCommit && type == IMAGE )
+																	if ( !internalCommit && type == IMAGE )
 																		element.removeAttribute( 'height' );
 																}
@@ -717,7 +717,8 @@
 														if ( resetButton )
 														{
-															resetButton.on( 'click', function()
+															resetButton.on( 'click', function(evt)
 																{
 																	resetSize( this );
+																	evt.data.preventDefault();
 																}, this.getDialog() );
 															resetButton.on( 'mouseover', function()
@@ -733,5 +734,5 @@
 														if ( ratioButton )
 														{
-															ratioButton.on( 'click', function()
+															ratioButton.on( 'click', function(evt)
 																{
 																	var locked = switchLockRatio( this ),
@@ -748,4 +749,5 @@
 																		}
 																	}
+																	evt.data.preventDefault();
 																}, this.getDialog() );
 															ratioButton.on( 'mouseover', function()
@@ -799,9 +801,7 @@
 															var value,
 																borderStyle = element.getStyle( 'border-width' );
-
 															borderStyle = borderStyle && borderStyle.match( /^(\d+px)(?: \1 \1 \1)?$/ );
 															value = borderStyle && parseInt( borderStyle[ 1 ], 10 );
-															!value && ( value = element.getAttribute( 'border' ) );
-
+															isNaN ( parseInt( value, 10 ) ) && ( value = element.getAttribute( 'border' ) );
 															this.setValue( value );
 														}
@@ -812,5 +812,5 @@
 														if ( type == IMAGE || type == PREVIEW )
 														{
-															if ( value )
+															if ( !isNaN( value ) )
 															{
 																element.setStyle( 'border-width', CKEDITOR.tools.cssLength( value ) );
@@ -824,5 +824,5 @@
 															}
 
-															if( !internalCommit && type == IMAGE )
+															if ( !internalCommit && type == IMAGE )
 																element.removeAttribute( 'border' );
 														}
@@ -872,5 +872,5 @@
 
 															value = ( marginLeftPx == marginRightPx ) && marginLeftPx;
-															!value && ( value = element.getAttribute( 'hspace' ) );
+															isNaN( parseInt( value, 10 ) ) && ( value = element.getAttribute( 'hspace' ) );
 
 															this.setValue( value );
@@ -882,5 +882,5 @@
 														if ( type == IMAGE || type == PREVIEW )
 														{
-															if ( value )
+															if ( !isNaN( value ) )
 															{
 																element.setStyle( 'margin-left', CKEDITOR.tools.cssLength( value ) );
@@ -893,5 +893,5 @@
 															}
 
-															if( !internalCommit && type == IMAGE )
+															if ( !internalCommit && type == IMAGE )
 																element.removeAttribute( 'hspace' );
 														}
@@ -940,5 +940,5 @@
 
 															value = ( marginTopPx == marginBottomPx ) && marginTopPx;
-															!value && ( value = element.getAttribute( 'vspace' ) );
+															isNaN ( parseInt( value, 10 ) ) && ( value = element.getAttribute( 'vspace' ) );
 															this.setValue( value );
 														}
@@ -949,5 +949,5 @@
 														if ( type == IMAGE || type == PREVIEW )
 														{
-															if ( value )
+															if ( !isNaN( value ) )
 															{
 																element.setStyle( 'margin-top', CKEDITOR.tools.cssLength( value ) );
@@ -960,5 +960,5 @@
 															}
 
-															if( !internalCommit && type == IMAGE )
+															if ( !internalCommit && type == IMAGE )
 																element.removeAttribute( 'vspace' );
 														}
@@ -1023,8 +1023,8 @@
 															if ( value )
 																element.setStyle( 'float', value );
-															else if ( !value && this.isChanged( ) )
+															else
 																element.removeStyle( 'float' );
 
-															if( !internalCommit && type == IMAGE )
+															if ( !internalCommit && type == IMAGE )
 															{
 																value = ( element.getAttribute( 'align' ) || '' ).toLowerCase();
@@ -1112,5 +1112,10 @@
 							type : 'button',
 							id : 'browse',
-							filebrowser : 'Link:txtUrl',
+							filebrowser :
+							{
+								action : 'Browse',
+								target: 'Link:txtUrl',
+								url: editor.config.filebrowserImageBrowseLinkUrl || editor.config.filebrowserBrowseUrl
+							},
 							style : 'float:right',
 							hidden : true,
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/indent/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/indent/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/indent/plugin.js	(revision 5180)
@@ -160,5 +160,5 @@
 				for ( i = count - 1 ; i >= 0 ; i-- )
 				{
-					if( ( child = children.getItem( i ) ) && child.is && child.is( 'li' )  )
+					if ( ( child = children.getItem( i ) ) && child.is && child.is( 'li' )  )
 						pendingLis.push( child );
 				}
@@ -178,5 +178,5 @@
 
 				// Nest preceding <ul>/<ol> inside current <li> if any.
-				while( ( followingList = followingList.getNext() ) &&
+				while ( ( followingList = followingList.getNext() ) &&
 					   followingList.is &&
 					   followingList.getName() in listNodeNames )
@@ -322,2 +322,28 @@
 		indentClasses : null
 	});
+
+/**
+ * Size of each indentation step
+ * @type Number
+ * @default 40
+ * @example
+ * config.indentOffset = 4;
+ */
+
+ /**
+ * Unit for the indentation style
+ * @type String
+ * @default 'px'
+ * @example
+ * config.indentUnit = 'em';
+ */
+
+ /**
+ * List of classes to use for indenting the contents. If it's null, no classes will be used
+ * and instead the {@link #indentUnit} and {@link #indentOffset} properties will be used.
+ * @type Array
+ * default null
+ * @example
+ * // Use the classes 'Indent1', 'Indent2', 'Indent3'
+ * config.indentClasses = ['Indent1', 'Indent2', 'Indent3'];
+ */
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/justify/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/justify/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/justify/plugin.js	(revision 5180)
@@ -67,5 +67,7 @@
 		exec : function( editor )
 		{
-			var selection = editor.getSelection();
+			var selection = editor.getSelection(),
+				enterMode = editor.config.enterMode;
+
 			if ( !selection )
 				return;
@@ -81,4 +83,6 @@
 			{
 				iterator = ranges[ i ].createIterator();
+				iterator.enlargeBr = enterMode != CKEDITOR.ENTER_BR;
+
 				while ( ( block = iterator.getNextParagraph() ) )
 				{
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/keystrokes/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/keystrokes/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/keystrokes/plugin.js	(revision 5180)
@@ -217,2 +217,12 @@
 	[ CKEDITOR.ALT + 109 /*-*/, 'toolbarCollapse' ]
 ];
+
+/**
+ * Fired when any keyboard key (or combination) is pressed into the editing area.
+ * @name CKEDITOR#key
+ * @event
+ * @param {Number} data.keyCode A number representing the key code (or
+ *		combination). It is the sum of the current key code and the
+ *		{@link CKEDITOR.CTRL}, {@link CKEDITOR.SHIFT} and {@link CKEDITOR.ALT}
+ *		constants, if those are pressed.
+ */
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/link/dialogs/link.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/link/dialogs/link.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/link/dialogs/link.js	(revision 5180)
@@ -18,16 +18,24 @@
 
 		popupFeatures = popupFeatures.getElement();
-
-		if ( value == 'popup' )
-		{
-			popupFeatures.show();
-			targetName.setLabel( editor.lang.link.targetPopupName );
-		}
-		else
-		{
-			popupFeatures.hide();
-			targetName.setLabel( editor.lang.link.targetFrameName );
-			this.getDialog().setValueOf( 'target', 'linkTargetName', value.charAt( 0 ) == '_' ? value : '' );
-		}
+		popupFeatures.hide();
+		targetName.setValue( '' );
+
+		switch ( value )
+ 		{
+			case 'frame' :
+				targetName.setLabel( editor.lang.link.targetFrameName );
+				targetName.getElement().show();
+				break;
+			case 'popup' :
+				popupFeatures.show();
+				targetName.setLabel( editor.lang.link.targetPopupName );
+				targetName.getElement().show();
+				break;
+			default :
+				targetName.setValue( value );
+				targetName.getElement().hide();
+				break;
+ 		}
+
 	};
 
@@ -70,9 +78,10 @@
 
 	// Loads the parameters in a selected link to the link dialog fields.
-	var emailRegex = /^mailto:([^?]+)(?:\?(.+))?$/,
+	var javascriptProtocolRegex = /^javascript:/,
+		emailRegex = /^mailto:([^?]+)(?:\?(.+))?$/,
 		emailSubjectRegex = /subject=([^;?:@&=$,\/]*)/,
 		emailBodyRegex = /body=([^;?:@&=$,\/]*)/,
 		anchorRegex = /^#(.*)$/,
-		urlRegex = /^(?!javascript)((?:http|https|ftp|news):\/\/)?(.*)$/,
+		urlRegex = /^((?:http|https|ftp|news):\/\/)?(.*)$/,
 		selectableTargets = /^(_(?:self|top|parent|blank))$/,
 		encodedEmailLinkRegex = /^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/,
@@ -86,4 +95,5 @@
 	{
 		var href = element ? ( element.getAttribute( '_cke_saved_href' ) || element.getAttribute( 'href' ) ) : '',
+		 	javascriptMatch,
 			emailMatch,
 			anchorMatch,
@@ -91,22 +101,7 @@
 			retval = {};
 
-		if ( ( anchorMatch = href.match( anchorRegex ) ) )
+		if ( ( javascriptMatch = href.match( javascriptProtocolRegex ) ) )
 		{
-			retval.type = 'anchor';
-			retval.anchor = {};
-			retval.anchor.name = retval.anchor.id = anchorMatch[1];
-		}
-		// urlRegex matches empty strings, so need to check for href as well.
-		else if ( href && ( urlMatch = href.match( urlRegex ) ) )
-		{
-			retval.type = 'url';
-			retval.url = {};
-			retval.url.protocol = urlMatch[1];
-			retval.url.url = urlMatch[2];
-		}
-		// Protected email link as encoded string.
-		else if ( !emailProtection || emailProtection == 'encode' )
-		{
-			if( emailProtection == 'encode' )
+			if ( emailProtection == 'encode' )
 			{
 				href = href.replace( encodedEmailLinkRegex,
@@ -116,10 +111,45 @@
 							       String.fromCharCode.apply( String, protectedAddress.split( ',' ) ) +
 							       ( rest && unescapeSingleQuote( rest ) );
-						} );
+						});
 			}
-
-			emailMatch = href.match( emailRegex );
-
-			if( emailMatch )
+			// Protected email link as function call.
+			else if ( emailProtection )
+			{
+				href.replace( functionCallProtectedEmailLinkRegex, function( match, funcName, funcArgs )
+				{
+					if ( funcName == compiledProtectionFunction.name )
+					{
+						retval.type = 'email';
+						var email = retval.email = {};
+
+						var paramRegex = /[^,\s]+/g,
+							paramQuoteRegex = /(^')|('$)/g,
+							paramsMatch = funcArgs.match( paramRegex ),
+							paramsMatchLength = paramsMatch.length,
+							paramName,
+							paramVal;
+
+						for ( var i = 0; i < paramsMatchLength; i++ )
+						{
+							paramVal = decodeURIComponent( unescapeSingleQuote( paramsMatch[ i ].replace( paramQuoteRegex, '' ) ) );
+							paramName = compiledProtectionFunction.params[ i ].toLowerCase();
+							email[ paramName ] = paramVal;
+						}
+						email.address = [ email.name, email.domain ].join( '@' );
+					}
+				} );
+			}
+		}
+
+		if ( !retval.type )
+		{
+			if ( ( anchorMatch = href.match( anchorRegex ) ) )
+			{
+				retval.type = 'anchor';
+				retval.anchor = {};
+				retval.anchor.name = retval.anchor.id = anchorMatch[1];
+			}
+			// Protected email link as encoded string.
+			else if ( ( emailMatch = href.match( emailRegex ) ) )
 			{
 				var subjectMatch = href.match( emailSubjectRegex ),
@@ -132,34 +162,15 @@
 				bodyMatch && ( email.body = decodeURIComponent( bodyMatch[ 1 ] ) );
 			}
+			// urlRegex matches empty strings, so need to check for href as well.
+			else if (  href && ( urlMatch = href.match( urlRegex ) ) )
+			{
+				retval.type = 'url';
+				retval.url = {};
+				retval.url.protocol = urlMatch[1];
+				retval.url.url = urlMatch[2];
+			}
+			else
+				retval.type = 'url';
 		}
-		// Protected email link as function call.
-		else if( emailProtection )
-		{
-			href.replace( functionCallProtectedEmailLinkRegex, function( match, funcName, funcArgs )
-			{
-				if( funcName == compiledProtectionFunction.name )
-				{
-					retval.type = 'email';
-					var email = retval.email = {};
-
-					var paramRegex = /[^,\s]+/g,
-						paramQuoteRegex = /(^')|('$)/g,
-						paramsMatch = funcArgs.match( paramRegex ),
-						paramsMatchLength = paramsMatch.length,
-						paramName,
-						paramVal;
-
-					for ( var i = 0; i < paramsMatchLength; i++ )
-					{
-						paramVal = decodeURIComponent( unescapeSingleQuote( paramsMatch[ i ].replace( paramQuoteRegex, '' ) ) );
-						paramName = compiledProtectionFunction.params[ i ].toLowerCase();
-						email[ paramName ] = paramVal;
-					}
-					email.address = [ email.name, email.domain ].join( '@' );
-				}
-			} );
-		}
-		else
-			retval.type = 'url';
 
 		// Load target and popup settings.
@@ -228,5 +239,5 @@
 			anchors = retval.anchors = [];
 
-		for( var i = 0; i < elements.count() ; i++ )
+		for ( var i = 0; i < elements.count() ; i++ )
 		{
 			var item = elements.getItem( i );
@@ -299,5 +310,5 @@
 
 	// Compile the protection function pattern.
-	if( emailProtection && emailProtection != 'encode' )
+	if ( emailProtection && emailProtection != 'encode' )
 	{
 		var compiledProtectionFunction = {};
@@ -482,4 +493,8 @@
 										commit : function( data )
 										{
+											// IE will not trigger the onChange event if the mouse has been used
+											// to carry all the operations #4724
+											this.onChange();
+
 											if ( !data.url )
 												data.url = {};
@@ -1313,5 +1328,7 @@
 			{
 				// We're only editing an existing link, so just overwrite the attributes.
-				var element = this._.selectedElement;
+				var element = this._.selectedElement,
+					href = element.getAttribute( '_cke_saved_href' ),
+					textView = element.getHtml();
 
 				// IE BUG: Setting the name attribute to an existing link doesn't work.
@@ -1334,5 +1351,7 @@
 				element.setAttributes( attributes );
 				element.removeAttributes( removeAttributes );
-
+				// Update text view when user changes protocol #4612.
+				if (href == textView)
+					element.setHtml( attributes._cke_saved_href );
 				// Make the element display as an anchor if a name has been set.
 				if ( element.getAttribute( 'name' ) )
@@ -1360,20 +1379,26 @@
 
 /**
- * The e-mail address anti-spam protection option.
+ * The e-mail address anti-spam protection option. The protection will be
+ * applied when creating or modifying e-mail links through the editor interface.<br>
+ * Two methods of protection can be choosed:
+ * <ol>	<li>The e-mail parts (name, domain and any other query string) are
+ *			assembled into a function call pattern. Such function must be
+ *			provided by the developer in the pages that will use the contents.
+ *		<li>Only the e-mail address is obfuscated into a special string that
+ *			has no meaning for humans or spam bots, but which is properly
+ *			rendered and accepted by the browser.</li></ol>
+ * Both approaches require JavaScript to be enabled.
  * @name CKEDITOR.config.emailProtection
- * @type {String}
- * Two forms of protection could be choosed from :
- * 1. The whole address parts ( name, domain with any other query string ) are assembled into a
- *   function call pattern which invoke you own provided function, with the specified arguments.
- * 2. Only the e-mail address is obfuscated into unicode code point sequences, replacement are
- *   done by a String.fromCharCode() call.
- * Note: Both approaches require JavaScript to be enabled.
- * @default ''
+ * @since 3.1
+ * @type String
+ * @default '' (empty string = disabled)
  * @example
- *  config.emailProtection = '';
- *  // href="mailto:tester@ckeditor.com?subject=subject&body=body"
- *  config.emailProtection = 'encode';
- *  // href="<a href=\"javascript:void(location.href=\'mailto:\'+String.fromCharCode(116,101,115,116,101,114,64,99,107,101,100,105,116,111,114,46,99,111,109)+\'?subject=subject&body=body\')\">e-mail</a>"
- *  config.emailProtection = 'mt(NAME,DOMAIN,SUBJECT,BODY)';
- *  // href="javascript:mt('tester','ckeditor.com','subject','body')"
+ * // href="mailto:tester@ckeditor.com?subject=subject&body=body"
+ * config.emailProtection = '';
+ * @example
+ * // href="<a href=\"javascript:void(location.href=\'mailto:\'+String.fromCharCode(116,101,115,116,101,114,64,99,107,101,100,105,116,111,114,46,99,111,109)+\'?subject=subject&body=body\')\">e-mail</a>"
+ * config.emailProtection = 'encode';
+ * @example
+ * // href="javascript:mt('tester','ckeditor.com','subject','body')"
+ * config.emailProtection = 'mt(NAME,DOMAIN,SUBJECT,BODY)';
  */
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/list/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/list/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/list/plugin.js	(revision 5180)
@@ -571,5 +571,5 @@
 				tailNbspmatch;
 
-			if( nodeBefore
+			if ( nodeBefore
 				&& ( nodeBefore.name && nodeBefore.name == 'br'
 					|| nodeBefore.value && ( tailNbspmatch = nodeBefore.value.match( tailNbspRegex ) ) ) )
@@ -595,9 +595,9 @@
 
 	var defaultListDataFilterRules = { elements : {} };
-	for( var i in dtd.$listItem )
+	for ( var i in dtd.$listItem )
 		defaultListDataFilterRules.elements[ i ] = getExtendNestedListFilter();
 
 	var defaultListHtmlFilterRules = { elements : {} };
-	for( i in dtd.$listItem )
+	for ( i in dtd.$listItem )
 		defaultListHtmlFilterRules.elements[ i ] = getExtendNestedListFilter( true );
 
@@ -632,5 +632,5 @@
 		{
 			var dataProcessor = editor.dataProcessor;
-			if( dataProcessor )
+			if ( dataProcessor )
 			{
 				dataProcessor.dataFilter.addRules( defaultListDataFilterRules );
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/listblock/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/listblock/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/listblock/plugin.js	(revision 5180)
@@ -210,5 +210,5 @@
 								i = -1;
 
-							while( ( link = links.getItem( ++i ) ) )
+							while ( ( link = links.getItem( ++i ) ) )
 							{
 								if ( link.equals( selected ) )
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/menu/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/menu/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/menu/plugin.js	(revision 5180)
@@ -9,41 +9,36 @@
 	{
 		var groups = editor.config.menu_groups.split( ',' ),
-			groupsOrder = {};
+			groupsOrder = editor._.menuGroups = {},
+			menuItems = editor._.menuItems = {};
 
 		for ( var i = 0 ; i < groups.length ; i++ )
 			groupsOrder[ groups[ i ] ] = i + 1;
 
-		editor._.menuGroups = groupsOrder;
-		editor._.menuItems = {};
+		editor.addMenuGroup = function( name, order )
+			{
+				groupsOrder[ name ] = order || 100;
+			};
+
+		editor.addMenuItem = function( name, definition )
+			{
+				if ( groupsOrder[ definition.group ] )
+					menuItems[ name ] = new CKEDITOR.menuItem( this, name, definition );
+			};
+
+		editor.addMenuItems = function( definitions )
+			{
+				for ( var itemName in definitions )
+				{
+					this.addMenuItem( itemName, definitions[ itemName ] );
+				}
+			};
+
+		editor.getMenuItem = function( name )
+			{
+				return menuItems[ name ];
+			};
 	},
 
 	requires : [ 'floatpanel' ]
-});
-
-CKEDITOR.tools.extend( CKEDITOR.editor.prototype,
-{
-	addMenuGroup : function( name, order )
-	{
-		this._.menuGroups[ name ] = order || 100;
-	},
-
-	addMenuItem : function( name, definition )
-	{
-		if ( this._.menuGroups[ definition.group ] )
-			this._.menuItems[ name ] = new CKEDITOR.menuItem( this, name, definition );
-	},
-
-	addMenuItems : function( definitions )
-	{
-		for ( var itemName in definitions )
-		{
-			this.addMenuItem( itemName, definitions[ itemName ] );
-		}
-	},
-
-	getMenuItem : function( name )
-	{
-		return this._.menuItems[ name ];
-	}
 });
 
@@ -344,5 +339,11 @@
 			{
 				output.push(
-							'<span class="cke_menuarrow"></span>' );
+							'<span class="cke_menuarrow">',
+								'<span>&#',
+									( this.editor.lang.dir == 'rtl' ?
+										'9668' :	// BLACK LEFT-POINTING POINTER
+										'9658' ),	// BLACK RIGHT-POINTING POINTER
+								';</span>',
+							'</span>' );
 			}
 
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/pagebreak/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/pagebreak/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/pagebreak/plugin.js	(revision 5180)
@@ -37,4 +37,5 @@
 				'border-bottom: #999999 1px dotted;' +
 				'height: 5px;' +
+				'page-break-after: always;' +
 
 			'}' );
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/pastefromword/filter/default.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/pastefromword/filter/default.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/pastefromword/filter/default.js	(revision 5180)
@@ -26,5 +26,5 @@
 		{
 			child = children[ i ];
-			if( !child.name )
+			if ( !child.name )
 				continue;
 
@@ -81,7 +81,7 @@
 			if ( typeof name == 'object' )
 			{
-				for( var style in name )
-				{
-					if( name.hasOwnProperty( style ) )
+				for ( var style in name )
+				{
+					if ( name.hasOwnProperty( style ) )
 						addingStyleText += style + ':' + name[ style ] + ';';
 				}
@@ -94,5 +94,5 @@
 		}
 
-		if( !this.attributes )
+		if ( !this.attributes )
 			this.attributes = {};
 
@@ -187,5 +187,5 @@
 			{
 				var styleText = element.attributes && element.attributes.style;
-				if( /mso-list\s*:\s*Ignore/i.test( styleText ) )
+				if ( /mso-list\s*:\s*Ignore/i.test( styleText ) )
 					return true;
 			},
@@ -258,5 +258,5 @@
 				return function( cssLength )
 				{
-					if( cssLengthRelativeUnit.test( cssLength ) )
+					if ( cssLengthRelativeUnit.test( cssLength ) )
 					{
 						calculator.setStyle( 'width', cssLength );
@@ -329,5 +329,5 @@
 						var attributes = child.attributes;
 
-						if( child.name in CKEDITOR.dtd.$listItem )
+						if ( child.name in CKEDITOR.dtd.$listItem )
 						{
 							var listItemChildren = child.children,
@@ -336,5 +336,5 @@
 
 							// Move out nested list.
-							if( last.name in CKEDITOR.dtd.$list )
+							if ( last.name in CKEDITOR.dtd.$list )
 							{
 								children.splice( i + 1, 0, last );
@@ -421,6 +421,6 @@
 									// There might be a negative gap between two list levels. (#4944)
 									var diff = indent - listItemIndent,
-										parent = list.parent;
-									while( diff-- && parent )
+										parent;
+									while ( diff-- && ( parent = list.parent ) )
 										list = parent.parent;
 
@@ -478,7 +478,7 @@
 										 newValue,
 										 newName;
-									 for( var i = 0 ; i < styles.length; i++ )
+									 for ( var i = 0 ; i < styles.length; i++ )
 									 {
-										if( styles[ i ] )
+										if ( styles[ i ] )
 										{
 											namePattern = styles[ i ][ 0 ];
@@ -493,13 +493,13 @@
 												whitelist && ( newValue = newValue || value );
 
-												if( typeof newValue == 'function' )
+												if ( typeof newValue == 'function' )
 													newValue = newValue( value, element, name );
 
 												// Return an couple indicate both name and value
 												// changed.
-												if( newValue && newValue.push )
+												if ( newValue && newValue.push )
 													name = newValue[ 0 ], newValue = newValue[ 1 ];
 
-												if( typeof newValue == 'string' )
+												if ( typeof newValue == 'string' )
 													rules.push( [ name, newValue ] );
 												return;
@@ -568,5 +568,5 @@
 				bogusAttrFilter : function( value, element )
 				{
-					if( element.name.indexOf( 'cke:' ) == -1 )
+					if ( element.name.indexOf( 'cke:' ) == -1 )
 						return false;
 				},
@@ -646,5 +646,5 @@
 							element.filterChildren();
 							// Is the heading actually a list item?
-							if( resolveListItem( element ) )
+							if ( resolveListItem( element ) )
 								return;
 
@@ -721,10 +721,10 @@
 
 													// Reject MS-Word Normal styles.
-													if( className.match( /MsoNormal/ ) )
+													if ( className.match( /MsoNormal/ ) )
 														return;
 
-													if( !rules[ tagName ] )
+													if ( !rules[ tagName ] )
 														rules[ tagName ] = {};
-													if( className )
+													if ( className )
 														rules[ tagName ][ className ] = styleBlock;
 													else
@@ -739,8 +739,8 @@
 										className = element.attributes && element.attributes[ 'class' ],
 										style;
-									if( name in rules )
+									if ( name in rules )
 									{
 										style = rules[ name ];
-										if( typeof style == 'object' )
+										if ( typeof style == 'object' )
 											style = style[ className ];
 										// Maintain style rules priorities.
@@ -783,5 +783,5 @@
 						// Instead we use a clear-float div after the table to properly achieve the same layout.
 						var singleChild = element.onlyChild();
-						if( singleChild && singleChild.name == 'table' )
+						if ( singleChild && singleChild.name == 'table' )
 						{
 							var attrs = element.attributes;
@@ -925,5 +925,5 @@
 					{
 						var attrs = element.attributes;
-						if( attrs && !attrs.href && attrs.name )
+						if ( attrs && !attrs.href && attrs.name )
 							delete element.name;
 					},
@@ -984,5 +984,5 @@
 							function( value, element )
 							{
-								if( element.name == 'img' )
+								if ( element.name == 'img' )
 									return value;
 							} ],
@@ -991,5 +991,5 @@
 							function( value, element )
 							{
-								if( element.name in { table : 1, td : 1, th : 1, img : 1 } )
+								if ( element.name in { table : 1, td : 1, th : 1, img : 1 } )
 									return value;
 							} ]
@@ -1001,7 +1001,7 @@
 						[ ( /-color$/ ), null, function( value )
 						{
-							if( value == 'transparent' )
+							if ( value == 'transparent' )
 								return false;
-							if( CKEDITOR.env.gecko )
+							if ( CKEDITOR.env.gecko )
 								return value.replace( /-moz-use-text-color/g, 'transparent' );
 						} ],
@@ -1018,5 +1018,5 @@
 					'width' : function( value, element )
 					{
-						if( element.name in dtd.$tableContent )
+						if ( element.name in dtd.$tableContent )
 							return false;
 					},
@@ -1024,5 +1024,5 @@
 					'border' : function( value, element )
 					{
-						if( element.name in dtd.$tableContent )
+						if ( element.name in dtd.$tableContent )
 							return false;
 					},
@@ -1065,5 +1065,5 @@
 
 							// Reveal the <img> element in conditional comments for Firefox.
-							if( CKEDITOR.env.gecko && imageInfo )
+							if ( CKEDITOR.env.gecko && imageInfo )
 							{
 								var img = CKEDITOR.htmlParser.fragment.fromHtml( imageInfo[ 0 ] ).children[ 0 ],
@@ -1108,5 +1108,5 @@
 		// comments, fixing them first( convert it to upperlevel-revealed one ).
 		// e.g. <![if !vml]>...<![endif]>
-		if( CKEDITOR.env.gecko )
+		if ( CKEDITOR.env.gecko )
 			data = data.replace( /(<!--\[if[^<]*?\])-->([\S\s]*?)<!--(\[endif\]-->)/gi, '$1$2$3' );
 
@@ -1145,9 +1145,10 @@
 
 /**
- * Whether the ignore all font-related format styles, including:
- * - font size;
- * - font family;
- * - font fore/background color;
+ * Whether to ignore all font related formatting styles, including:
+ * <ul>	<li>font size;</li>
+ *		<li>font family;</li>
+ *		<li>font foreground/background color.</li></ul>
  * @name CKEDITOR.config.pasteFromWordRemoveFontStyles
+ * @since 3.1
  * @type Boolean
  * @default true
@@ -1157,6 +1158,7 @@
 
 /**
- * Whether transform MS-Word Outline Numbered Heading into html list.
+ * Whether to transform MS Word outline numbered headings into lists.
  * @name CKEDITOR.config.pasteFromWordNumberedHeadingToList
+ * @since 3.1
  * @type Boolean
  * @default false
@@ -1166,8 +1168,9 @@
 
 /**
- * Whether remove element styles that can't be managed with editor, note that this
- * this doesn't handle the font-specific styles, which depends on
- * how {@link CKEDITOR.config.pasteFromWordRemoveFontStyles} is configured.
+ * Whether to remove element styles that can't be managed with the editor. Note
+ * that this doesn't handle the font specific styles, which depends on the
+ * {@link CKEDITOR.config.pasteFromWordRemoveFontStyles} setting instead.
  * @name CKEDITOR.config.pasteFromWordRemoveStyles
+ * @since 3.1
  * @type Boolean
  * @default true
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/pastefromword/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/pastefromword/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/pastefromword/plugin.js	(revision 5180)
@@ -28,5 +28,5 @@
 				{
 					forceFromWord = 1;
-					if( editor.execCommand( 'paste' ) === false )
+					if ( editor.execCommand( 'paste' ) === false )
 					{
 						editor.on( 'dialogHide', function ( evt )
@@ -60,5 +60,5 @@
 							if ( isLazyLoad )
 								editor.fire( 'paste', data );
-							else if( !editor.config.pasteFromWordPromptCleanup
+							else if ( !editor.config.pasteFromWordPromptCleanup
 							  || ( forceFromWord || confirm( editor.lang.pastefromword.confirmCleanup ) ) )
 							 {
@@ -97,6 +97,8 @@
 
 /**
- * Whether prompt the user about the clean-up of content from MS-Word.
+ * Whether to prompt the user about the clean up of content being pasted from
+ * MS Word.
  * @name CKEDITOR.config.pasteFromWordPromptCleanup
+ * @since 3.1
  * @type Boolean
  * @default undefined
@@ -106,7 +108,9 @@
 
 /**
- * The file that provides the MS-Word Filtering rules.
- * Note: It's a global configuration which are shared by all editor instances.
+ * The file that provides the MS Word cleanup function for pasting operations.
+ * Note: This is a global configuration shared by all editor instances present
+ * in the page.
  * @name CKEDITOR.config.pasteFromWordCleanupFile
+ * @since 3.1
  * @type String
  * @default 'default'
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/pastetext/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/pastetext/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/pastetext/plugin.js	(revision 5180)
@@ -58,5 +58,5 @@
 	{
 		// Native text insertion.
-		if( CKEDITOR.env.ie )
+		if ( CKEDITOR.env.ie )
 		{
 			var selection = doc.selection;
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/scayt/dialogs/options.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/scayt/dialogs/options.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/scayt/dialogs/options.js	(revision 5180)
@@ -31,14 +31,14 @@
 
 	function setCheckedValue(radioObj, newValue) {
-		if(!radioObj)
+		if (!radioObj)
 			return;
 		var radioLength = radioObj.length;
-		if(radioLength == undefined) {
+		if (radioLength == undefined) {
 			radioObj.checked = (radioObj.value == newValue.toString());
 			return;
 		}
-		for(var i = 0; i < radioLength; i++) {
+		for (var i = 0; i < radioLength; i++) {
 			radioObj[i].checked = false;
-			if(radioObj[i].value == newValue.toString()) {
+			if (radioObj[i].value == newValue.toString()) {
 				radioObj[i].checked = true;
 			}
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/selection/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/selection/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/selection/plugin.js	(revision 5180)
@@ -460,15 +460,19 @@
 
 								testRange.moveToElementText( child );
+
+								var comparisonStart = testRange.compareEndPoints( 'StartToStart', range ),
+									comparisonEnd = testRange.compareEndPoints( 'EndToStart', range );
+
 								testRange.collapse();
 
-								var comparison = testRange.compareEndPoints( 'StartToStart', range );
-
-								if ( comparison > 0 )
+								if ( comparisonStart > 0 )
 									break;
-								else if ( comparison === 0 )
-									return {
-										container : parent,
-										offset : i
-									};
+								// When selection stay at the side of certain self-closing elements, e.g. BR,
+								// our comparison will never shows an equality. (#4824)
+								else if ( !comparisonStart
+									|| comparisonEnd == 1 && comparisonStart == -1 )
+									return { container : parent, offset : i };
+								else if ( !comparisonEnd )
+									return { container : parent, offset : i + 1 };
 
 								testRange = null;
@@ -489,6 +493,15 @@
 						var distance = testRange.text.replace( /(\r\n|\r)/g, '\n' ).length;
 
-						while ( distance > 0 )
-							distance -= siblings[ --i ].nodeValue.length;
+						try
+						{
+							while ( distance > 0 )
+								distance -= siblings[ --i ].nodeValue.length;
+						}
+						// Measurement in IE could be somtimes wrong because of <select> element. (#4611)
+						catch( e )
+						{
+							distance = 0;
+						}
+
 
 						if ( distance === 0 )
@@ -629,5 +642,5 @@
 							// selected node on the start which doesn't have
 							// visual impact. ( #3231 )
-							while( true )
+							while ( true )
 							{
 								var startContainer = range.startContainer,
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/showborders/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/showborders/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/showborders/plugin.js	(revision 5180)
@@ -111,5 +111,5 @@
 			}
 
-			if( htmlFilter )
+			if ( htmlFilter )
 			{
 				htmlFilter.addRules(
@@ -134,5 +134,5 @@
 			CKEDITOR.on( 'dialogDefinition', function( ev )
 				{
-					if( ev.editor != editor )
+					if ( ev.editor != editor )
 						return;
 
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/smiley/dialogs/smiley.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/smiley/dialogs/smiley.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/smiley/dialogs/smiley.js	(revision 5180)
@@ -45,4 +45,5 @@
 
 		dialog.hide();
+		evt.data.preventDefault();
 	};
 
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/sourcearea/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/sourcearea/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/sourcearea/plugin.js	(revision 5180)
@@ -15,5 +15,6 @@
 	init : function( editor )
 	{
-		var sourcearea = CKEDITOR.plugins.sourcearea;
+		var sourcearea = CKEDITOR.plugins.sourcearea,
+			win = CKEDITOR.document.getWindow();
 
 		editor.on( 'editingBlockReady', function()
@@ -49,27 +50,24 @@
 							};
 
-							// The textarea height/width='100%' doesn't
-							// constraint to the 'td' in IE strick mode
+							// Having to make <textarea> fixed sized to conque the following bugs:
+							// 1. The textarea height/width='100%' doesn't constraint to the 'td' in IE6/7.
+							// 2. Unexpected vertical-scrolling behavior happens whenever focus is moving out of editor
+							// if text content within it has overflowed. (#4762)
 							if ( CKEDITOR.env.ie )
 							{
-								if ( !CKEDITOR.env.ie8Compat )
-								{
-									onResize = function()
-										{
-											// Holder rectange size is stretched by textarea,
-											// so hide it just for a moment.
-											textarea.hide();
-											textarea.setStyle( 'height', holderElement.$.clientHeight + 'px' );
-											// When we have proper holder size, show textarea again.
-											textarea.show();
-										};
-									editor.on( 'resize', onResize );
-									editor.on( 'afterCommandExec', function( event )
-									{
-										if ( event.data.name == 'toolbarCollapse' )
-											onResize();
-									});
-									styles.height = holderElement.$.clientHeight + 'px';
-								}
+								onResize = function()
+								{
+									// Holder rectange size is stretched by textarea,
+									// so hide it just for a moment.
+									textarea.hide();
+									textarea.setStyle( 'height', holderElement.$.clientHeight + 'px' );
+									textarea.setStyle( 'width', holderElement.$.clientWidth + 'px' );
+									// When we have proper holder size, show textarea again.
+									textarea.show();
+								};
+
+								editor.on( 'resize', onResize );
+								win.on( 'resize', onResize );
+								setTimeout( onResize, 0 );
 							}
 							else
@@ -140,5 +138,8 @@
 
 							if ( onResize )
+							{
 								editor.removeListener( 'resize', onResize );
+								win.removeListener( 'resize', onResize );
+							}
 
 							if ( CKEDITOR.env.ie && CKEDITOR.env.version < 8 )
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/specialchar/dialogs/specialchar.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/specialchar/dialogs/specialchar.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/specialchar/dialogs/specialchar.js	(revision 5180)
@@ -253,5 +253,5 @@
 				html.push( '<tr>' ) ;
 
-				for( var j = 0 ; j < columns ; j++, i++ )
+				for ( var j = 0 ; j < columns ; j++, i++ )
 				{
 					if ( chars[ i ] )
@@ -341,5 +341,6 @@
 												type : 'html',
 												id : 'charPreview',
-												style : 'border:1px solid #eeeeee;background-color:#EAEAD1;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:\'Microsoft Sans Serif\',Arial,Helvetica,Verdana;text-align:center;',
+												className : 'cke_dark_background',
+												style : 'border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:\'Microsoft Sans Serif\',Arial,Helvetica,Verdana;text-align:center;',
 												html : '<div>&nbsp;</div>'
 											},
@@ -347,5 +348,6 @@
 												type : 'html',
 												id : 'htmlPreview',
-												style : 'border:1px solid #eeeeee;background-color:#EAEAD1;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:\'Microsoft Sans Serif\',Arial,Helvetica,Verdana;text-align:center;',
+												className : 'cke_dark_background',
+												style : 'border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:\'Microsoft Sans Serif\',Arial,Helvetica,Verdana;text-align:center;',
 												html : '<div>&nbsp;</div>'
 											}
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/styles/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/styles/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/styles/plugin.js	(revision 5180)
@@ -210,5 +210,5 @@
 								return false;
 					}
-					if( fullMatch )
+					if ( fullMatch )
 						return true;
 				}
@@ -376,5 +376,7 @@
 
 				// Check if the current node can be a child of the style element.
-				if ( !nodeName || ( dtd[ nodeName ] && ( currentNode.getPosition( lastNode ) | CKEDITOR.POSITION_PRECEDING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED ) == ( CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED ) ) )
+				if ( !nodeName || ( dtd[ nodeName ]
+					&& ( currentNode.getPosition( lastNode ) | CKEDITOR.POSITION_PRECEDING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED ) == ( CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED )
+					&& ( !def.childRule || def.childRule( currentNode ) ) ) )
 				{
 					var currentParent = currentNode.getParent();
@@ -382,5 +384,7 @@
 					// Check if the style element can be a child of the current
 					// node parent or if the element is not defined in the DTD.
-					if ( currentParent && ( ( currentParent.getDtd() || CKEDITOR.dtd.span )[ elementName ] || isUnknownElement ) )
+					if ( currentParent
+						&& ( ( currentParent.getDtd() || CKEDITOR.dtd.span )[ elementName ] || isUnknownElement )
+						&& ( !def.parentRule || def.parentRule( currentParent ) ) )
 					{
 						// This node will be part of our range, so if it has not
@@ -407,5 +411,6 @@
 							while ( !includedNode.$.nextSibling
 								&& ( parentNode = includedNode.getParent(), dtd[ parentNode.getName() ] )
-								&& ( parentNode.getPosition( firstNode ) | CKEDITOR.POSITION_FOLLOWING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED ) == ( CKEDITOR.POSITION_FOLLOWING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED ) )
+								&& ( parentNode.getPosition( firstNode ) | CKEDITOR.POSITION_FOLLOWING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED ) == ( CKEDITOR.POSITION_FOLLOWING + CKEDITOR.POSITION_IDENTICAL + CKEDITOR.POSITION_IS_CONTAINED )
+								&& ( !def.childRule || def.childRule( parentNode ) ) )
 							{
 								includedNode = parentNode;
@@ -576,5 +581,5 @@
 						break;
 					// Avoid copying any matched element.
-					else if( newElement.match )
+					else if ( newElement.match )
 						continue;
 					else
@@ -646,5 +651,5 @@
 				{
 					// Remove style from element or overriding element.
-					if( currentNode.getName() == this.element )
+					if ( currentNode.getName() == this.element )
 						removeFromElement( this, currentNode );
 					else
@@ -683,5 +688,5 @@
 		var previousPreBlock;
 
-		while( ( block = iterator.getNextParagraph() ) )		// Only one =
+		while ( ( block = iterator.getNextParagraph() ) )		// Only one =
 		{
 			var newBlock = getElement( this, doc );
@@ -891,5 +896,5 @@
 		// Now remove override styles on the element.
 		attributes = overrides[ element.getName() ];
-		if( attributes )
+		if ( attributes )
 			removeAttrs();
 		removeNoAttribsElement( element );
@@ -1127,5 +1132,5 @@
 	function getOverrides( style )
 	{
-		if( style._.overrides )
+		if ( style._.overrides )
 			return style._.overrides;
 
@@ -1192,5 +1197,5 @@
 			var temp = new CKEDITOR.dom.element( 'span' );
 			temp.setAttribute( 'style', unparsedCssText );
-			styleText = temp.getAttribute( 'style' );
+			styleText = temp.getAttribute( 'style' ) || '';
 		}
 		else
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/tab/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/tab/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/tab/plugin.js	(revision 5180)
@@ -6,4 +6,10 @@
 (function()
 {
+	var meta =
+	{
+		editorFocus : false,
+		modes : { wysiwyg:1, source:1 }
+	};
+
 	var blurCommand =
 		{
@@ -40,5 +46,5 @@
 
 			// Register the "tab" and "shiftTab" commands.
-			editor.addCommand( 'tab',
+			editor.addCommand( 'tab', CKEDITOR.tools.extend(
 				{
 					exec : function( editor )
@@ -62,7 +68,7 @@
 						return true;
 					}
-				});
-
-			editor.addCommand( 'shiftTab',
+				}, meta ) );
+
+			editor.addCommand( 'shiftTab', CKEDITOR.tools.extend(
 				{
 					exec : function( editor )
@@ -75,8 +81,8 @@
 						return true;
 					}
-				});
-
-			editor.addCommand( 'blur', blurCommand );
-			editor.addCommand( 'blurBack', blurBackCommand );
+				}, meta ) );
+
+			editor.addCommand( 'blur', CKEDITOR.tools.extend( blurCommand, meta ) );
+			editor.addCommand( 'blurBack', CKEDITOR.tools.extend( blurBackCommand, meta ) );
 		}
 	});
@@ -105,5 +111,5 @@
 		element = this.getNextSourceNode( ignoreChildren, CKEDITOR.NODE_ELEMENT );
 
-		while( element )
+		while ( element )
 		{
 			if ( element.isVisible() && element.getTabIndex() === 0 )
@@ -126,5 +132,5 @@
 		element = this.getDocument().getBody().getFirst();
 
-		while( ( element = element.getNextSourceNode( false, CKEDITOR.NODE_ELEMENT ) ) )
+		while ( ( element = element.getNextSourceNode( false, CKEDITOR.NODE_ELEMENT ) ) )
 		{
 			if ( !passedCurrent )
@@ -189,5 +195,5 @@
 	var element = this.getDocument().getBody().getLast();
 
-	while( ( element = element.getPreviousSourceNode( false, CKEDITOR.NODE_ELEMENT ) ) )
+	while ( ( element = element.getPreviousSourceNode( false, CKEDITOR.NODE_ELEMENT ) ) )
 	{
 		if ( !passedCurrent )
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/table/dialogs/table.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/table/dialogs/table.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/table/dialogs/table.js	(revision 5180)
@@ -155,5 +155,5 @@
 					if ( !this.hasColumnHeaders && ( headers == 'col' || headers == 'both' ) )
 					{
-						for( row = 0 ; row < table.$.rows.length ; row++ )
+						for ( row = 0 ; row < table.$.rows.length ; row++ )
 						{
 							newCell = new CKEDITOR.dom.element( table.$.rows[ row ].cells[ 0 ] );
@@ -166,5 +166,5 @@
 					if ( ( this.hasColumnHeaders ) && !( headers == 'col' || headers == 'both' ) )
 					{
-						for( i = 0 ; i < table.$.rows.length ; i++ )
+						for ( i = 0 ; i < table.$.rows.length ; i++ )
 						{
 							row = new CKEDITOR.dom.element( table.$.rows[i] );
@@ -193,5 +193,5 @@
 						table.removeStyle( 'width' );
 
-					if( !table.getAttribute( 'style' ) )
+					if ( !table.getAttribute( 'style' ) )
 						table.removeAttribute( 'style' );
 				}
@@ -381,4 +381,6 @@
 														if ( widthMatch )
 															this.setValue( widthMatch[1] );
+														else
+															this.setValue( '' );
 													},
 													commit : commitValue
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/tabletools/dialogs/tableCell.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/tabletools/dialogs/tableCell.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/tabletools/dialogs/tableCell.js	(revision 5180)
@@ -105,17 +105,23 @@
 													labelLayout : 'horizontal',
 													validate : validate[ 'number' ]( langCell.invalidWidth ),
-													setup : function( selectedCell )
-													{
-														var widthMatch = widthPattern.exec( selectedCell.$.style.width );
-														if ( widthMatch )
-															this.setValue( widthMatch[1] );
+													setup : function( element )
+													{
+														var widthAttr = parseInt( element.getAttribute( 'width' ), 10 ),
+																widthStyle = parseInt( element.getStyle( 'width' ), 10 );
+
+														!isNaN( widthAttr ) && this.setValue( widthAttr );
+														!isNaN( widthStyle ) && this.setValue( widthStyle );
 													},
-													commit : function( selectedCell )
-													{
-														var unit = this.getDialog().getValueOf( 'info', 'widthType' );
-														if ( this.getValue() !== '' )
-															selectedCell.$.style.width = this.getValue() + unit;
+													commit : function( element )
+													{
+														var value = parseInt( this.getValue(), 10 ),
+																unit = this.getDialog().getValueOf( 'info', 'widthType' );
+
+														if ( !isNaN( value ) )
+															element.setStyle( 'width', value + unit );
 														else
-															selectedCell.$.style.width = '';
+															element.removeStyle( 'width' );
+
+														element.removeAttribute( 'width' );
 													},
 													'default' : ''
@@ -155,16 +161,22 @@
 													labelLayout : 'horizontal',
 													validate : validate[ 'number' ]( langCell.invalidHeight ),
-													setup : function( selectedCell )
-													{
-														var heightMatch = heightPattern.exec( selectedCell.$.style.height );
-														if ( heightMatch )
-															this.setValue( heightMatch[1] );
+													setup : function( element )
+													{
+														var heightAttr = parseInt( element.getAttribute( 'height' ), 10 ),
+																heightStyle = parseInt( element.getStyle( 'height' ), 10 );
+
+														!isNaN( heightAttr ) && this.setValue( heightAttr );
+														!isNaN( heightStyle ) && this.setValue( heightStyle );
 													},
-													commit : function( selectedCell )
-													{
-														if ( this.getValue() !== '' )
-															selectedCell.$.style.height = this.getValue() + 'px';
+													commit : function( element )
+													{
+														var value = parseInt( this.getValue(), 10 );
+
+														if ( !isNaN( value ) )
+															element.setStyle( 'height', CKEDITOR.tools.cssLength( value ) );
 														else
-															selectedCell.$.style.height = '';
+															element.removeStyle( 'height' );
+
+														element.removeAttribute( 'height' );
 													}
 												},
@@ -188,10 +200,20 @@
 												[ langCell.no, 'no' ]
 											],
-											commit : function( selectedCell )
+											setup : function( element )
+											{
+												var wordWrapAttr = element.getAttribute( 'noWrap' ),
+														wordWrapStyle = element.getStyle( 'white-space' );
+
+												if ( wordWrapStyle == 'nowrap' || wordWrapAttr )
+													this.setValue( 'no' );
+											},
+											commit : function( element )
 											{
 												if ( this.getValue() == 'no' )
-													selectedCell.setAttribute( 'noWrap', 'nowrap' );
+													element.setStyle( 'white-space', 'nowrap' );
 												else
-													selectedCell.removeAttribute( 'noWrap' );
+													element.removeStyle( 'white-space' );
+
+												element.removeAttribute( 'noWrap' );
 											}
 										},
@@ -211,14 +233,21 @@
 												[ langTable.alignRight, 'right' ]
 											],
-											setup : function( selectedCell )
-											{
-												this.setValue( selectedCell.getAttribute( 'align' ) || '' );
+											setup : function( element )
+											{
+												var alignAttr = element.getAttribute( 'align' ),
+														textAlignStyle = element.getStyle( 'text-align');
+
+												this.setValue(  textAlignStyle || alignAttr || '' );
 											},
 											commit : function( selectedCell )
 											{
-												if ( this.getValue() )
-													selectedCell.setAttribute( 'align', this.getValue() );
+												var value = this.getValue();
+
+												if ( value )
+													selectedCell.setStyle( 'text-align', value );
 												else
-													selectedCell.removeAttribute( 'align' );
+													selectedCell.removeStyle( 'text-align' );
+
+												selectedCell.removeAttribute( 'align' );
 											}
 										},
@@ -238,14 +267,33 @@
 												[ langCell.alignBaseline, 'baseline' ]
 											],
-											setup : function( selectedCell )
-											{
-												this.setValue( selectedCell.getAttribute( 'vAlign' ) || '' );
-											},
-											commit : function( selectedCell )
-											{
-												if ( this.getValue() )
-													selectedCell.setAttribute( 'vAlign', this.getValue() );
+											setup : function( element )
+											{
+												var vAlignAttr = element.getAttribute( 'vAlign' ),
+														vAlignStyle = element.getStyle( 'vertical-align' );
+
+												switch( vAlignStyle )
+												{
+													// Ignore all other unrelated style values..
+													case 'top':
+													case 'middle':
+													case 'bottom':
+													case 'baseline':
+														break;
+													default:
+														vAlignStyle = '';
+												}
+
+												this.setValue( vAlignStyle || vAlignAttr || '' );
+											},
+											commit : function( element )
+											{
+												var value = this.getValue();
+
+												if ( value )
+													element.setStyle( 'vertical-align', value );
 												else
-													selectedCell.removeAttribute( 'vAlign' );
+													element.removeStyle( 'vertical-align' );
+
+												element.removeAttribute( 'vAlign' );
 											}
 										}
@@ -290,9 +338,12 @@
 											setup : function( selectedCell )
 											{
-												this.setValue( selectedCell.getAttribute( 'rowSpan' ) || '' );
+												var attrVal = parseInt( selectedCell.getAttribute( 'rowSpan' ), 10 );
+												if ( attrVal && attrVal  != 1 )
+												 	this.setValue(  attrVal );
 											},
 											commit : function( selectedCell )
 											{
-												if ( this.getValue() )
+												var value = parseInt( this.getValue(), 10 );
+												if ( value && value != 1 )
 													selectedCell.setAttribute( 'rowSpan', this.getValue() );
 												else
@@ -308,11 +359,14 @@
 											'default' : '',
 											validate : validate.integer( langCell.invalidColSpan ),
-											setup : function( selectedCell )
-											{
-												this.setValue( selectedCell.getAttribute( 'colSpan' ) || '' );
+											setup : function( element )
+											{
+												var attrVal = parseInt( element.getAttribute( 'colSpan' ), 10 );
+												if ( attrVal && attrVal  != 1 )
+												 	this.setValue(  attrVal );
 											},
 											commit : function( selectedCell )
 											{
-												if ( this.getValue() )
+												var value = parseInt( this.getValue(), 10 );
+												if ( value && value != 1 )
 													selectedCell.setAttribute( 'colSpan', this.getValue() );
 												else
@@ -334,14 +388,21 @@
 													widths : [ '70%', '30%' ],
 													'default' : '',
-													setup : function( selectedCell )
-													{
-														this.setValue( selectedCell.getAttribute( 'bgColor' ) || '' );
+													setup : function( element )
+													{
+														var bgColorAttr = element.getAttribute( 'bgColor' ),
+																bgColorStyle = element.getStyle( 'background-color' );
+
+														this.setValue( bgColorStyle || bgColorAttr );
 													},
 													commit : function( selectedCell )
 													{
-														if ( this.getValue() )
-															selectedCell.setAttribute( 'bgColor', this.getValue() );
+														var value = this.getValue();
+
+														if ( value )
+															selectedCell.setStyle( 'background-color', this.getValue() );
 														else
-															selectedCell.removeAttribute( 'bgColor' );
+															selectedCell.removeStyle( 'background-color' );
+
+														selectedCell.removeAttribute( 'bgColor');
 													}
 												},
@@ -378,14 +439,20 @@
 													widths : [ '70%', '30%' ],
 													'default' : '',
-													setup : function( selectedCell )
-													{
-														this.setValue( selectedCell.getStyle( 'border-color' ) || '' );
+													setup : function( element )
+													{
+														var borderColorAttr = element.getAttribute( 'borderColor' ),
+																borderColorStyle = element.getStyle( 'border-color' );
+
+														this.setValue( borderColorStyle || borderColorAttr );
 													},
 													commit : function( selectedCell )
 													{
-														if ( this.getValue() )
+														var value = this.getValue();
+														if ( value )
 															selectedCell.setStyle( 'border-color', this.getValue() );
 														else
 															selectedCell.removeStyle( 'border-color' );
+
+														selectedCell.removeAttribute( 'borderColor');
 													}
 												},
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/tabletools/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/tabletools/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/tabletools/plugin.js	(revision 5180)
@@ -124,13 +124,34 @@
 		if ( selectionOrRow instanceof CKEDITOR.dom.selection )
 		{
-			var cells = getSelectedCells( selectionOrRow );
-			var rowsToDelete = [];
+			var cells = getSelectedCells( selectionOrRow ),
+				cellsCount = cells.length,
+				rowsToDelete = [],
+				cursorPosition,
+				previousRowIndex,
+				nextRowIndex;
 
 			// Queue up the rows - it's possible and likely that we have duplicates.
-			for ( var i = 0 ; i < cells.length ; i++ )
-			{
-				var row = cells[ i ].getParent();
-				rowsToDelete[ row.$.rowIndex ] = row;
-			}
+			for ( var i = 0 ; i < cellsCount ; i++ )
+			{
+				var row = cells[ i ].getParent(),
+						rowIndex = row.$.rowIndex;
+
+				!i && ( previousRowIndex = rowIndex - 1 );
+				rowsToDelete[ rowIndex ] = row;
+				i == cellsCount - 1 && ( nextRowIndex = rowIndex + 1 );
+			}
+
+			var table = row.getAscendant( 'table' ),
+					rows =  table.$.rows,
+					rowCount = rows.length;
+
+			// Where to put the cursor after rows been deleted?
+			// 1. Into next sibling row if any;
+			// 2. Into previous sibling row if any;
+			// 3. Into table's parent element if it's the very last row.
+			cursorPosition = new CKEDITOR.dom.element(
+				nextRowIndex < rowCount && table.$.rows[ nextRowIndex ] ||
+				previousRowIndex > 0 && table.$.rows[ previousRowIndex ] ||
+				table.$.parentNode );
 
 			for ( i = rowsToDelete.length ; i >= 0 ; i-- )
@@ -139,8 +160,10 @@
 					deleteRows( rowsToDelete[ i ] );
 			}
+
+			return cursorPosition;
 		}
 		else if ( selectionOrRow instanceof CKEDITOR.dom.element )
 		{
-			var table = selectionOrRow.getAscendant( 'table' );
+			table = selectionOrRow.getAscendant( 'table' );
 
 			if ( table.$.rows.length == 1 )
@@ -149,4 +172,6 @@
 				selectionOrRow.remove();
 		}
+
+		return 0;
 	}
 
@@ -332,5 +357,5 @@
 	{
 		var oRow = tableMap[ rowIndex ];
-		if( typeof cell == 'undefined' )
+		if ( typeof cell == 'undefined' )
 			return oRow;
 
@@ -339,5 +364,5 @@
 			if ( cell.is && oRow[c] == cell.$ )
 				return c;
-			else if( c == cell )
+			else if ( c == cell )
 				return new CKEDITOR.dom.element( oRow[ c ] );
 		}
@@ -351,9 +376,9 @@
 		{
 			var row = tableMap[ r ];
-			if( typeof cell == 'undefined' )
+			if ( typeof cell == 'undefined' )
 				oCol.push( row[ colIndex ] );
-			else if( cell.is && row[ colIndex ] == cell.$ )
+			else if ( cell.is && row[ colIndex ] == cell.$ )
 				return r;
-			else if( r == cell )
+			else if ( r == cell )
 				return new CKEDITOR.dom.element( row[ colIndex ] );
 		}
@@ -388,5 +413,5 @@
 			startColumn = cellInRow( map, startRow, firstCell );
 
-		if( mergeDirection )
+		if ( mergeDirection )
 		{
 			var targetCell;
@@ -409,5 +434,5 @@
 			// 1. No cell could be merged.
 			// 2. Same cell actually.
-			if( !targetCell || firstCell.$ == targetCell  )
+			if ( !targetCell || firstCell.$ == targetCell  )
 				return false;
 
@@ -446,8 +471,8 @@
 			{
 				// Trim all cell fillers and check to remove empty cells.
-				if( trimCell( cell ), cell.getChildren().count() )
+				if ( trimCell( cell ), cell.getChildren().count() )
 				{
 					// Merge vertically cells as two separated paragraphs.
-					if( rowIndex != lastRowIndex
+					if ( rowIndex != lastRowIndex
 						&& cellFirstChild
 						&& !( cellFirstChild.isBlockBoundary
@@ -455,5 +480,5 @@
 					{
 						var last = frag.getLast( CKEDITOR.dom.walker.whitespaces( true ) );
-						if( last && !( last.is && last.is( 'br' ) ) )
+						if ( last && !( last.is && last.is( 'br' ) ) )
 							frag.append( new CKEDITOR.dom.element( 'br' ) );
 					}
@@ -470,13 +495,13 @@
 			frag.moveChildren( firstCell );
 
-			if( !CKEDITOR.env.ie )
+			if ( !CKEDITOR.env.ie )
 				firstCell.appendBogus();
 
-			if( totalColSpan >= mapWidth )
+			if ( totalColSpan >= mapWidth )
 				firstCell.removeAttribute( 'rowSpan' );
 			else
 				firstCell.$.rowSpan = totalRowSpan;
 
-			if( totalRowSpan >= mapHeight )
+			if ( totalRowSpan >= mapHeight )
 				firstCell.removeAttribute( 'colSpan' );
 			else
@@ -490,5 +515,5 @@
 			{
 				var tailTr = trs.getItem( i );
-				if( !tailTr.$.cells.length )
+				if ( !tailTr.$.cells.length )
 				{
 					tailTr.remove();
@@ -509,7 +534,7 @@
 	{
 		var cells = getSelectedCells( selection );
-		if( cells.length > 1 )
+		if ( cells.length > 1 )
 			return false;
-		else if( isDetect )
+		else if ( isDetect )
 			return true;
 
@@ -526,5 +551,5 @@
 			newRowIndex;
 
-		if( rowSpan > 1 )
+		if ( rowSpan > 1 )
 		{
 			newRowSpan = Math.ceil( rowSpan / 2 );
@@ -542,5 +567,5 @@
 				candidateCell = newCellRow[ c ];
 				// Catch first cell actually following the column.
-				if( candidateCell.parentNode == newCellTr.$
+				if ( candidateCell.parentNode == newCellTr.$
 					&& c > colIndex )
 				{
@@ -553,5 +578,5 @@
 
 			// The destination row is empty, append at will.
-			if( !candidateCell )
+			if ( !candidateCell )
 				newCellTr.append( newCell, true );
 		}
@@ -569,12 +594,12 @@
 		}
 
-		if( !CKEDITOR.env.ie )
+		if ( !CKEDITOR.env.ie )
 			newCell.appendBogus();
 
 		cell.$.rowSpan = newRowSpan;
 		newCell.$.rowSpan = newCellRowSpan;
-		if( newRowSpan == 1 )
+		if ( newRowSpan == 1 )
 			cell.removeAttribute( 'rowSpan' );
-		if( newCellRowSpan == 1 )
+		if ( newCellRowSpan == 1 )
 			newCell.removeAttribute( 'rowSpan' );
 
@@ -585,7 +610,7 @@
 	{
 		var cells = getSelectedCells( selection );
-		if( cells.length > 1 )
+		if ( cells.length > 1 )
 			return false;
-		else if( isDetect )
+		else if ( isDetect )
 			return true;
 
@@ -601,5 +626,5 @@
 			newCellColSpan;
 
-		if( colSpan > 1 )
+		if ( colSpan > 1 )
 		{
 			newColSpan = Math.ceil( colSpan / 2 );
@@ -615,12 +640,12 @@
 		newCell = cell.clone();
 		newCell.insertAfter( cell );
-		if( !CKEDITOR.env.ie )
+		if ( !CKEDITOR.env.ie )
 			newCell.appendBogus();
 
 		cell.$.colSpan = newColSpan;
 		newCell.$.colSpan = newCellColSpan;
-		if( newColSpan == 1 )
+		if ( newColSpan == 1 )
 			cell.removeAttribute( 'colSpan' );
-		if( newCellColSpan == 1 )
+		if ( newCellColSpan == 1 )
 			newCell.removeAttribute( 'colSpan' );
 
@@ -669,5 +694,5 @@
 					{
 						var selection = editor.getSelection();
-						deleteRows( selection );
+						placeCursorInCell( deleteRows( selection ) );
 					}
 				} );
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/templates/dialogs/templates.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/templates/dialogs/templates.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/templates/dialogs/templates.js	(revision 5180)
@@ -40,10 +40,10 @@
 		var html = '<table style="width:350px;" class="cke_tpl_preview"><tr>';
 
-		if( template.image && imagesPath )
+		if ( template.image && imagesPath )
 			html += '<td class="cke_tpl_preview_img"><img src="' + CKEDITOR.getUrl( imagesPath + template.image ) + '"></td>';
 
 		html += '<td style="white-space:normal;"><span class="cke_tpl_title">' + template.title + '</span><br/>';
 
-		if( template.description )
+		if ( template.description )
 			html += '<span>' + template.description + '</span>';
 
@@ -80,5 +80,5 @@
 			isInsert = dialog.getValueOf( 'selectTpl', 'chkInsertOpt' );
 
-		if( isInsert )
+		if ( isInsert )
 		{
 			// Everything should happen after the document is loaded (#4073).
@@ -92,5 +92,11 @@
 				range.moveToElementEditStart( editor.document.getBody() );
 				range.select( true );
+				setTimeout( function ()
+				{
+					editor.fire( 'saveSnapshot' );
+				}, 0 );
 			} );
+
+			editor.fire( 'saveSnapshot' );
 			editor.setData( html );
 		}
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/toolbar/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/toolbar/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/toolbar/plugin.js	(revision 5180)
@@ -264,4 +264,6 @@
 										var dy = toolboxContainer.$.offsetHeight - previousHeight;
 										contents.setStyle( 'height', ( contentHeight - dy ) + 'px' );
+
+										editor.fire( 'resize' );
 									},
 
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/undo/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/undo/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/undo/plugin.js	(revision 5180)
@@ -121,12 +121,12 @@
 	function Image( editor )
 	{
-		var selection = editor.getSelection();
-
-		this.contents	= editor.getSnapshot();
+		var contents	= editor.getSnapshot(),
+			selection	= contents && editor.getSelection();
+
+		// In IE, we need to remove the expando attributes.
+		CKEDITOR.env.ie && contents && ( contents = contents.replace( /\s+_cke_expando=".*?"/g, '' ) );
+
+		this.contents	= contents;
 		this.bookmarks	= selection && selection.createBookmarks2( true );
-
-		// In IE, we need to remove the expando attributes.
-		if ( CKEDITOR.env.ie )
-			this.contents = this.contents.replace( /\s+_cke_expando=".*?"/g, '' );
 	}
 
@@ -142,5 +142,5 @@
 
 			// For IE6/7 : Comparing only the protected attribute values but not the original ones.(#4522)
-			if( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) )
+			if ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) )
 			{
 				thisContents = thisContents.replace( protectedAttrs, '' );
@@ -148,5 +148,5 @@
 			}
 
-			if( thisContents != otherContents )
+			if ( thisContents != otherContents )
 				return false;
 
@@ -352,4 +352,8 @@
 				image = new Image( this.editor );
 
+			// Do nothing if it was not possible to retrieve an image.
+			if ( image.contents === false )
+				return false;
+
 			// Check if this is a duplicate. In such case, do nothing.
 			if ( this.currentImage && image.equals( this.currentImage, onContentOnly ) )
@@ -391,5 +395,8 @@
 			this.index = image.index;
 
-			this.currentImage = image;
+			// Update current image with the actual editor
+			// 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.fireChange();
@@ -504,2 +511,9 @@
  */
 CKEDITOR.config.undoStackSize = 20;
+
+/**
+ * Fired when the editor is about to save an undo snapshot. This event can be
+ * fired by plugins and customizations to make the editor saving undo snapshots.
+ * @name CKEDITOR.editor#saveSnapshot
+ * @event
+ */
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/wsc/dialogs/ciframe.html
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/wsc/dialogs/ciframe.html	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/wsc/dialogs/ciframe.html	(revision 5180)
@@ -17,5 +17,5 @@
 	var results = regex.exec( window.location.href ) ;
 
-	if( results )
+	if ( results )
 		return results[ 1 ] ;
 	else
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/wsc/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/wsc/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/wsc/plugin.js	(revision 5180)
@@ -11,4 +11,5 @@
 CKEDITOR.plugins.add( 'wsc',
 {
+	requires : [ 'dialog' ],
 	init : function( editor )
 	{
Index: /CKEditor/branches/versions/3.1.x/_source/plugins/wysiwygarea/plugin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/plugins/wysiwygarea/plugin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/plugins/wysiwygarea/plugin.js	(revision 5180)
@@ -90,5 +90,5 @@
 				if ( isBlock )
 				{
-					while( ( current = range.getCommonAncestor( false, true ) )
+					while ( ( current = range.getCommonAncestor( false, true ) )
 							&& ( dtd = CKEDITOR.dtd[ current.getName() ] )
 							&& !( dtd && dtd [ elementName ] ) )
@@ -144,5 +144,5 @@
 	function restoreDirty( editor )
 	{
-		if( !editor.checkDirty() )
+		if ( !editor.checkDirty() )
 			setTimeout( function(){ editor.resetDirty(); } );
 	}
@@ -196,5 +196,5 @@
 			// 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 ( fixedBlock.getOuterHtml().match( emptyParagraphRegexp ) )
 			{
 				var previousElement = fixedBlock.getPrevious( isNotWhitespace ),
@@ -215,5 +215,5 @@
 			range.select();
 			// Notify non-IE that selection has changed.
-			if( !CKEDITOR.env.ie )
+			if ( !CKEDITOR.env.ie )
 				editor.selectionChange();
 		}
@@ -226,5 +226,5 @@
 		{
 			restoreDirty( editor );
-			if( !CKEDITOR.env.ie )
+			if ( !CKEDITOR.env.ie )
 				body.appendBogus();
 			else
@@ -268,10 +268,11 @@
   							' style="width:100%;height:100%"' +
   							' frameBorder="0"' +
-							// Support for custom document.domain in IE.
-							( isCustomDomain ?
+							( !CKEDITOR.env.webkit ?
+								// Support for custom document.domain in IE.
 								' src="javascript:void((function(){' +
-									'document.open();' +
-									'document.domain=\'' + document.domain + '\';' +
-									'document.close();' +
+								'document.open();' +		// To avoid HTTPS warnings.
+								( isCustomDomain ?
+									'document.domain=\'' + document.domain + '\';' : '' ) +
+								'document.close();' +
 								'})())"' : '' ) +
   							' tabIndex="-1"' +
@@ -341,5 +342,5 @@
 					// is fully editable even before the editing iframe is fully loaded (#4455).
 					var activationScript =
-						'<script id="cke_actscrpt" type="text/javascript">' +
+						'<script id="cke_actscrpt" type="text/javascript" cke_temp="1">' +
 							'window.parent.CKEDITOR._["contentDomReady' + editor.name + '"]( window );' +
 						'</script>';
@@ -417,5 +418,5 @@
 						// IE standard compliant in editing frame doesn't focus the editor when
 						// clicking outside actual content, manually apply the focus. (#1659)
-						if( CKEDITOR.env.ie
+						if ( CKEDITOR.env.ie
 							&& domDocument.$.compatMode == 'CSS1Compat' )
 						{
@@ -446,8 +447,8 @@
 								{
 									var first = body;
-									while( first.firstChild )
+									while ( first.firstChild )
 										first = first.firstChild;
 
-									if( !first.nextSibling
+									if ( !first.nextSibling
 										&& ( 'BR' == first.tagName )
 										&& first.hasAttribute( '_moz_editor_bogus_node' ) )
@@ -476,18 +477,32 @@
 						if ( CKEDITOR.env.ie )
 						{
-							// Cancel default action for backspace in IE on control types. (#4047)
+							// Override keystrokes which should have deletion behavior
+							//  on control types in IE . (#4047)
 							domDocument.on( 'keydown', function( evt )
 							{
-								// Backspace.
-								var control = evt.data.getKeystroke() == 8
-											  && editor.getSelection().getSelectedElement();
-								if ( control )
-								{
-									// Make undo snapshot.
-									editor.fire( 'saveSnapshot' );
-									// Remove manually.
-									control.remove();
-									editor.fire( 'saveSnapshot' );
-									evt.cancel();
+								var keyCode = evt.data.getKeystroke();
+
+								// Backspace OR Delete.
+								if ( keyCode in { 8 : 1, 46 : 1 } )
+								{
+									var sel = editor.getSelection(),
+										control = sel.getSelectedElement();
+
+									if ( control )
+									{
+										// Make undo snapshot.
+										editor.fire( 'saveSnapshot' );
+
+										// Delete any element that 'hasLayout' (e.g. hr,table) in IE8 will
+										// break up the selection, safely manage it here. (#4795)
+										var bookmark = sel.getRanges()[ 0 ].createBookmark();
+										// Remove the control manually.
+										control.remove();
+										sel.selectBookmarks( [ bookmark ] );
+
+										editor.fire( 'saveSnapshot' );
+
+										evt.data.preventDefault();
+									}
 								}
 							} );
@@ -495,10 +510,10 @@
 							// PageUp/PageDown scrolling is broken in document
 							// with standard doctype, manually fix it. (#4736)
-							if( domDocument.$.compatMode == 'CSS1Compat' )
+							if ( domDocument.$.compatMode == 'CSS1Compat' )
 							{
 								var pageUpDownKeys = { 33 : 1, 34 : 1 };
 								domDocument.on( 'keydown', function( evt )
 								{
-									if( evt.data.getKeystroke() in pageUpDownKeys )
+									if ( evt.data.getKeystroke() in pageUpDownKeys )
 									{
 										setTimeout( function ()
@@ -746,5 +761,5 @@
 
 			// Create an invisible element to grab focus.
-			if( CKEDITOR.env.ie )
+			if ( CKEDITOR.env.ie )
 			{
 				var ieFocusGrabber;
@@ -764,17 +779,15 @@
 
 	// Fixing Firefox 'Back-Forward Cache' break design mode. (#4514)
-	if( CKEDITOR.env.gecko )
+	if ( CKEDITOR.env.gecko )
 	{
-		var topWin = window.top;
-
 		( function ()
 		{
-			var topBody = topWin.document.body;
-
-			if( !topBody )
-				topWin.addEventListener( 'load', arguments.callee, false );
+			var body = document.body;
+
+			if ( !body )
+				window.addEventListener( 'load', arguments.callee, false );
 			else
 			{
-				topBody.setAttribute( 'onpageshow', topBody.getAttribute( 'onpageshow' )
+				body.setAttribute( 'onpageshow', body.getAttribute( 'onpageshow' )
 						+ ';event.persisted && CKEDITOR.tools.callFunction(' +
 						CKEDITOR.tools.addFunction( function()
@@ -783,9 +796,9 @@
 								editor,
 								doc;
-							for( var i in allInstances )
+							for ( var i in allInstances )
 							{
 								editor = allInstances[ i ];
 								doc = editor.document;
-								if( doc )
+								if ( doc )
 								{
 									doc.$.designMode = 'off';
@@ -846,2 +859,8 @@
  */
 CKEDITOR.config.ignoreEmptyParagraph = true;
+
+/**
+ * Fired when data is loaded and ready for retrieval in an editor instance.
+ * @name CKEDITOR.editor#dataReady
+ * @event
+ */
Index: /CKEditor/branches/versions/3.1.x/_source/skins/kama/dialog.css
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/skins/kama/dialog.css	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/skins/kama/dialog.css	(revision 5180)
@@ -333,5 +333,5 @@
 .cke_skin_kama .cke_browser_webkit a.cke_dialog_ui_button
 {
-	float: right;
+	display:inline-block;
 	padding-top: 3px;
 	padding-bottom: 2px;
Index: /CKEditor/branches/versions/3.1.x/_source/skins/kama/menu.css
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/skins/kama/menu.css	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/skins/kama/menu.css	(revision 5180)
@@ -95,6 +95,8 @@
 	margin-left: 24px;
 	background-color: #fff;
-	_overflow: hidden;
-	_width: 80px;
+}
+/* Set these after the document has been loaded and we know the dimensions*/
+.cke_skin_kama .cke_frameLoaded .cke_menuitem .cke_label
+{
 	filter: alpha(opacity=70); /* IE */
 	opacity: 0.70; /* Safari, Opera and Mozilla */
@@ -165,4 +167,20 @@
 }
 
+.cke_skin_kama .cke_menuarrow span
+{
+	display: none;
+}
+
+.cke_hc .cke_skin_kama .cke_menuarrow
+{
+	width: auto;
+	margin-top: 0;
+}
+
+.cke_hc .cke_skin_kama .cke_menuarrow span
+{
+	display: inline;
+}
+
 /* #3766 In the context menu, long labels with second level menu get wrapped */
 .cke_browser_ie.cke_ltr .cke_skin_kama .cke_menuarrow
Index: /CKEditor/branches/versions/3.1.x/_source/skins/kama/skin.js
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/skins/kama/skin.js	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/skins/kama/skin.js	(revision 5180)
@@ -94,5 +94,5 @@
 			{
 				var node = document.getById( uiColorStylesheetId );
-				if( !node )
+				if ( !node )
 				{
 					node = document.getHead().append( 'style' );
Index: /CKEditor/branches/versions/3.1.x/_source/skins/office2003/menu.css
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/skins/office2003/menu.css	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/skins/office2003/menu.css	(revision 5180)
@@ -94,6 +94,8 @@
 	margin-left: 24px;
 	background-color: #fff;
-	_overflow: hidden;
-	_width: 80px;
+}
+/* Set these after the document has been loaded and we know the dimensions*/
+.cke_skin_office2003 .cke_frameLoaded .cke_menuitem .cke_label
+{
 	filter: alpha(opacity=70); /* IE */
 	opacity: 0.70; /* Safari, Opera and Mozilla */
@@ -161,4 +163,20 @@
 }
 
+.cke_skin_office2003 .cke_menuarrow span
+{
+	display: none;
+}
+
+.cke_hc .cke_skin_office2003 .cke_menuarrow
+{
+	width: auto;
+	margin-top: 0;
+}
+
+.cke_hc .cke_skin_office2003 .cke_menuarrow span
+{
+	display: inline;
+}
+
 /* #3766 In the context menu, long labels with second level menu get wrapped */
 .cke_browser_ie.cke_ltr .cke_skin_office2003 .cke_menuarrow
Index: /CKEditor/branches/versions/3.1.x/_source/skins/office2003/toolbar.css
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/skins/office2003/toolbar.css	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/skins/office2003/toolbar.css	(revision 5180)
@@ -66,4 +66,6 @@
 	display: inline-block;
 	float: left;
+	!height: 28px;
+	!line-height: 28px;
 }
 
Index: /CKEditor/branches/versions/3.1.x/_source/skins/v2/menu.css
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/skins/v2/menu.css	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/skins/v2/menu.css	(revision 5180)
@@ -94,6 +94,8 @@
 	margin-left: 24px;
 	background-color: #fff;
-	_overflow: hidden;
-	_width: 80px;
+}
+/* Set these after the document has been loaded and we know the dimensions*/
+.cke_skin_v2 .cke_frameLoaded .cke_menuitem .cke_label
+{
 	filter: alpha(opacity=70); /* IE */
 	opacity: 0.70; /* Safari, Opera and Mozilla */
@@ -164,4 +166,20 @@
 }
 
+.cke_skin_v2 .cke_menuarrow span
+{
+	display: none;
+}
+
+.cke_hc .cke_skin_v2 .cke_menuarrow
+{
+	width: auto;
+	margin-top: 0;
+}
+
+.cke_hc .cke_skin_v2 .cke_menuarrow span
+{
+	display: inline;
+}
+
 /* #3766 In the context menu, long labels with second level menu get wrapped */
 .cke_browser_ie.cke_ltr .cke_skin_v2 .cke_menuarrow
Index: /CKEditor/branches/versions/3.1.x/_source/skins/v2/richcombo.css
===================================================================
--- /CKEditor/branches/versions/3.1.x/_source/skins/v2/richcombo.css	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/_source/skins/v2/richcombo.css	(revision 5180)
@@ -273,2 +273,7 @@
 	float: none;
 }
+
+.cke_skin_v2 .cke_browser_iequirks .cke_rcombo .cke_openbutton
+{
+	height: 22px;
+}
Index: /CKEditor/branches/versions/3.1.x/ckeditor.pack
===================================================================
--- /CKEditor/branches/versions/3.1.x/ckeditor.pack	(revision 5179)
+++ /CKEditor/branches/versions/3.1.x/ckeditor.pack	(revision 5180)
@@ -47,4 +47,10 @@
 		'CKEDITOR.STARTEND' : 3,
 		'CKEDITOR.UI_BUTTON' : 1,
+		'CKEDITOR.DIALOG_RESIZE_NONE' : 0,
+		'CKEDITOR.DIALOG_RESIZE_WIDTH' : 1,
+		'CKEDITOR.DIALOG_RESIZE_HEIGHT' : 2,
+		'CKEDITOR.DIALOG_RESIZE_BOTH' : 3,
+		'CKEDITOR.VALIDATE_OR' : 1,
+		'CKEDITOR.VALIDATE_AND' : 2,
 		'CKEDITOR.STYLE_BLOCK' : 1,
 		'CKEDITOR.STYLE_INLINE' : 2,
@@ -56,10 +62,4 @@
 		'CKEDITOR.UI_RICHCOMBO' : 3,
 		'CKEDITOR.UI_MENUBUTTON' : 5,
-		'CKEDITOR.DIALOG_RESIZE_NONE' : 0,
-		'CKEDITOR.DIALOG_RESIZE_WIDTH' : 1,
-		'CKEDITOR.DIALOG_RESIZE_HEIGHT' : 2,
-		'CKEDITOR.DIALOG_RESIZE_BOTH' : 3,
-		'CKEDITOR.VALIDATE_OR' : 1,
-		'CKEDITOR.VALIDATE_AND' : 2,
 		'CKEDITOR.UI_PANEL' : 2
 	},
@@ -182,4 +182,5 @@
 					'_source/plugins/wysiwygarea/plugin.js',
 					'_source/plugins/wsc/plugin.js',
+					'_source/plugins/dialog/plugin.js',
 					'_source/plugins/styles/plugin.js',
 					'_source/plugins/domiterator/plugin.js',
@@ -193,8 +194,7 @@
 					'_source/plugins/htmlwriter/plugin.js',
 					'_source/plugins/menubutton/plugin.js',
-					'_source/plugins/dialog/plugin.js',
+					'_source/plugins/dialogui/plugin.js',
 					'_source/plugins/panel/plugin.js',
 					'_source/plugins/listblock/plugin.js',
-					'_source/plugins/dialogui/plugin.js',
 					'_source/themes/default/theme.js'
 				]
