tchao 3 years ago
parent
commit
ef4c5fa929
100 changed files with 49827 additions and 0 deletions
  1. 1367 0
      web/js/ckeditor/CHANGES.html
  2. 1327 0
      web/js/ckeditor/LICENSE.html
  3. 306 0
      web/js/ckeditor/_source/adapters/jquery.js
  4. 87 0
      web/js/ckeditor/_source/core/_bootstrap.js
  5. 238 0
      web/js/ckeditor/_source/core/ckeditor_basic.js
  6. 209 0
      web/js/ckeditor/_source/core/command.js
  7. 129 0
      web/js/ckeditor/_source/core/commanddefinition.js
  8. 431 0
      web/js/ckeditor/_source/core/config.js
  9. 65 0
      web/js/ckeditor/_source/core/dataprocessor.js
  10. 20 0
      web/js/ckeditor/_source/core/dom.js
  11. 32 0
      web/js/ckeditor/_source/core/dom/comment.js
  12. 251 0
      web/js/ckeditor/_source/core/dom/document.js
  13. 49 0
      web/js/ckeditor/_source/core/dom/documentfragment.js
  14. 145 0
      web/js/ckeditor/_source/core/dom/event.js
  15. 695 0
      web/js/ckeditor/_source/core/dom/node.js
  16. 26 0
      web/js/ckeditor/_source/core/dom/nodelist.js
  17. 2032 0
      web/js/ckeditor/_source/core/dom/range.js
  18. 128 0
      web/js/ckeditor/_source/core/dom/text.js
  19. 96 0
      web/js/ckeditor/_source/core/dom/window.js
  20. 266 0
      web/js/ckeditor/_source/core/dtd.js
  21. 186 0
      web/js/ckeditor/_source/core/editor_basic.js
  22. 291 0
      web/js/ckeditor/_source/core/env.js
  23. 342 0
      web/js/ckeditor/_source/core/event.js
  24. 120 0
      web/js/ckeditor/_source/core/eventInfo.js
  25. 152 0
      web/js/ckeditor/_source/core/focusmanager.js
  26. 224 0
      web/js/ckeditor/_source/core/htmlparser.js
  27. 43 0
      web/js/ckeditor/_source/core/htmlparser/cdata.js
  28. 60 0
      web/js/ckeditor/_source/core/htmlparser/comment.js
  29. 497 0
      web/js/ckeditor/_source/core/htmlparser/fragment.js
  30. 55 0
      web/js/ckeditor/_source/core/htmlparser/text.js
  31. 157 0
      web/js/ckeditor/_source/core/lang.js
  32. 240 0
      web/js/ckeditor/_source/core/loader.js
  33. 83 0
      web/js/ckeditor/_source/core/plugindefinition.js
  34. 103 0
      web/js/ckeditor/_source/core/plugins.js
  35. 180 0
      web/js/ckeditor/_source/core/scriptloader.js
  36. 184 0
      web/js/ckeditor/_source/core/skins.js
  37. 19 0
      web/js/ckeditor/_source/core/themes.js
  38. 763 0
      web/js/ckeditor/_source/core/tools.js
  39. 84 0
      web/js/ckeditor/_source/lang/_languages.js
  40. 61 0
      web/js/ckeditor/_source/lang/_translationstatus.txt
  41. 812 0
      web/js/ckeditor/_source/lang/af.js
  42. 812 0
      web/js/ckeditor/_source/lang/ar.js
  43. 812 0
      web/js/ckeditor/_source/lang/bg.js
  44. 812 0
      web/js/ckeditor/_source/lang/bn.js
  45. 812 0
      web/js/ckeditor/_source/lang/bs.js
  46. 812 0
      web/js/ckeditor/_source/lang/cs.js
  47. 812 0
      web/js/ckeditor/_source/lang/cy.js
  48. 812 0
      web/js/ckeditor/_source/lang/de.js
  49. 812 0
      web/js/ckeditor/_source/lang/en-au.js
  50. 812 0
      web/js/ckeditor/_source/lang/en-gb.js
  51. 812 0
      web/js/ckeditor/_source/lang/en.js
  52. 812 0
      web/js/ckeditor/_source/lang/eo.js
  53. 812 0
      web/js/ckeditor/_source/lang/et.js
  54. 812 0
      web/js/ckeditor/_source/lang/fa.js
  55. 812 0
      web/js/ckeditor/_source/lang/fi.js
  56. 812 0
      web/js/ckeditor/_source/lang/fo.js
  57. 812 0
      web/js/ckeditor/_source/lang/fr.js
  58. 812 0
      web/js/ckeditor/_source/lang/gl.js
  59. 812 0
      web/js/ckeditor/_source/lang/gu.js
  60. 812 0
      web/js/ckeditor/_source/lang/he.js
  61. 812 0
      web/js/ckeditor/_source/lang/hi.js
  62. 812 0
      web/js/ckeditor/_source/lang/hr.js
  63. 812 0
      web/js/ckeditor/_source/lang/hu.js
  64. 812 0
      web/js/ckeditor/_source/lang/is.js
  65. 812 0
      web/js/ckeditor/_source/lang/ja.js
  66. 812 0
      web/js/ckeditor/_source/lang/lt.js
  67. 812 0
      web/js/ckeditor/_source/lang/mn.js
  68. 812 0
      web/js/ckeditor/_source/lang/nl.js
  69. 812 0
      web/js/ckeditor/_source/lang/no.js
  70. 812 0
      web/js/ckeditor/_source/lang/ro.js
  71. 812 0
      web/js/ckeditor/_source/lang/sk.js
  72. 812 0
      web/js/ckeditor/_source/lang/sl.js
  73. 812 0
      web/js/ckeditor/_source/lang/sr-latn.js
  74. 812 0
      web/js/ckeditor/_source/lang/sr.js
  75. 811 0
      web/js/ckeditor/_source/lang/sv.js
  76. 811 0
      web/js/ckeditor/_source/lang/tr.js
  77. 812 0
      web/js/ckeditor/_source/lang/vi.js
  78. 108 0
      web/js/ckeditor/_source/plugins/a11yhelp/lang/en.js
  79. 216 0
      web/js/ckeditor/_source/plugins/a11yhelp/lang/he.js
  80. 24 0
      web/js/ckeditor/_source/plugins/about/plugin.js
  81. 228 0
      web/js/ckeditor/_source/plugins/adobeair/plugin.js
  82. 152 0
      web/js/ckeditor/_source/plugins/ajax/plugin.js
  83. 88 0
      web/js/ckeditor/_source/plugins/autogrow/plugin.js
  84. 101 0
      web/js/ckeditor/_source/plugins/basicstyles/plugin.js
  85. 223 0
      web/js/ckeditor/_source/plugins/clipboard/dialogs/paste.js
  86. 294 0
      web/js/ckeditor/_source/plugins/colorbutton/plugin.js
  87. 340 0
      web/js/ckeditor/_source/plugins/colordialog/dialogs/colordialog.js
  88. 15 0
      web/js/ckeditor/_source/plugins/colordialog/plugin.js
  89. 177 0
      web/js/ckeditor/_source/plugins/contextmenu/plugin.js
  90. 16 0
      web/js/ckeditor/_source/plugins/devtools/lang/en.js
  91. 173 0
      web/js/ckeditor/_source/plugins/devtools/plugin.js
  92. 1166 0
      web/js/ckeditor/_source/plugins/dialog/dialogDefinition.js
  93. 3289 0
      web/js/ckeditor/_source/plugins/dialog/plugin.js
  94. 207 0
      web/js/ckeditor/_source/plugins/dialogadvtab/plugin.js
  95. 121 0
      web/js/ckeditor/_source/plugins/div/plugin.js
  96. 361 0
      web/js/ckeditor/_source/plugins/domiterator/plugin.js
  97. 275 0
      web/js/ckeditor/_source/plugins/editingblock/plugin.js
  98. 218 0
      web/js/ckeditor/_source/plugins/elementspath/plugin.js
  99. 250 0
      web/js/ckeditor/_source/plugins/entities/plugin.js
  100. 0 0
      web/js/ckeditor/_source/plugins/find/dialogs/find.js

File diff suppressed because it is too large
+ 1367 - 0
web/js/ckeditor/CHANGES.html


File diff suppressed because it is too large
+ 1327 - 0
web/js/ckeditor/LICENSE.html


+ 306 - 0
web/js/ckeditor/_source/adapters/jquery.js

@@ -0,0 +1,306 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview jQuery adapter provides easy use of basic CKEditor functions
+ *   and access to internal API. It also integrates some aspects of CKEditor with
+ *   jQuery framework.
+ *
+ * Every TEXTAREA, DIV and P elements can be converted to working editor.
+ *
+ * Plugin exposes some of editor's event to jQuery event system. All of those are namespaces inside
+ * ".ckeditor" namespace and can be binded/listened on supported textarea, div and p nodes.
+ *
+ * Available jQuery events:
+ * - instanceReady.ckeditor( editor, rootNode )
+ *   Triggered when new instance is ready.
+ * - destroy.ckeditor( editor )
+ *   Triggered when instance is destroyed.
+ * - getData.ckeditor( editor, eventData )
+ *   Triggered when getData event is fired inside editor. It can change returned data using eventData reference.
+ * - setData.ckeditor( editor )
+ *   Triggered when getData event is fired inside editor.
+ *
+ * @example
+ * <script src="jquery.js"></script>
+ * <script src="ckeditor.js"></script>
+ * <script src="adapters/jquery/adapter.js"></script>
+ */
+
+(function()
+{
+	/**
+	 * Allows CKEditor to override jQuery.fn.val(), making it possible to use the val()
+	 * function on textareas, as usual, having it synchronized with CKEditor.<br>
+	 * <br>
+	 * This configuration option is global and executed during the jQuery Adapter loading.
+	 * It can't be customized across editor instances.
+	 * @type Boolean
+	 * @example
+	 * &lt;script&gt;
+	 * CKEDITOR.config.jqueryOverrideVal = true;
+	 * &lt;/script&gt;
+	 * &lt;!-- Important: The JQuery adapter is loaded *after* setting jqueryOverrideVal --&gt;
+	 * &lt;script src="/ckeditor/adapters/jquery.js"&gt;&lt;/script&gt;
+	 * @example
+	 * // ... then later in the code ...
+	 *
+	 * $( 'textarea' ).ckeditor();
+	 * // ...
+	 * $( 'textarea' ).val( 'New content' );
+	 */
+	CKEDITOR.config.jqueryOverrideVal = typeof CKEDITOR.config.jqueryOverrideVal == 'undefined'
+		? true : CKEDITOR.config.jqueryOverrideVal;
+
+	var jQuery = window.jQuery;
+
+	if ( typeof jQuery == 'undefined' )
+		return;
+
+	// jQuery object methods.
+	jQuery.extend( jQuery.fn,
+	/** @lends jQuery.fn */
+	{
+		/**
+		 * Return existing CKEditor instance for first matched element.
+		 * Allows to easily use internal API. Doesn't return jQuery object.
+		 *
+		 * Raised exception if editor doesn't exist or isn't ready yet.
+		 *
+		 * @name jQuery.ckeditorGet
+		 * @return CKEDITOR.editor
+		 * @see CKEDITOR.editor
+		 */
+		ckeditorGet: function()
+		{
+			var instance = this.eq( 0 ).data( 'ckeditorInstance' );
+			if ( !instance )
+				throw "CKEditor not yet initialized, use ckeditor() with callback.";
+			return instance;
+		},
+		/**
+		 * Triggers creation of CKEditor in all matched elements (reduced to DIV, P and TEXTAREAs).
+		 * Binds callback to instanceReady event of all instances. If editor is already created, than
+		 * callback is fired right away.
+		 *
+		 * Mixed parameter order allowed.
+		 *
+		 * @param callback Function to be run on editor instance. Passed parameters: [ textarea ].
+		 * Callback is fiered in "this" scope being ckeditor instance and having source textarea as first param.
+		 *
+		 * @param config Configuration options for new instance(s) if not already created.
+		 * See URL
+		 *
+		 * @example
+		 * $( 'textarea' ).ckeditor( function( textarea ) {
+		 *   $( textarea ).val( this.getData() )
+		 * } );
+		 *
+		 * @name jQuery.fn.ckeditor
+		 * @return jQuery.fn
+		 */
+		ckeditor: function( callback, config )
+		{
+			if ( !CKEDITOR.env.isCompatible )
+				return this;
+
+			if ( !jQuery.isFunction( callback ))
+			{
+				var tmp = config;
+				config = callback;
+				callback = tmp;
+			}
+			config = config || {};
+
+			this.filter( 'textarea, div, p' ).each( function()
+			{
+				var $element = jQuery( this ),
+					editor = $element.data( 'ckeditorInstance' ),
+					instanceLock = $element.data( '_ckeditorInstanceLock' ),
+					element = this;
+
+				if ( editor && !instanceLock )
+				{
+					if ( callback )
+						callback.apply( editor, [ this ] );
+				}
+				else if ( !instanceLock )
+				{
+					// CREATE NEW INSTANCE
+
+					// Handle config.autoUpdateElement inside this plugin if desired.
+					if ( config.autoUpdateElement
+						|| ( typeof config.autoUpdateElement == 'undefined' && CKEDITOR.config.autoUpdateElement ) )
+					{
+						config.autoUpdateElementJquery = true;
+					}
+
+					// Always disable config.autoUpdateElement.
+					config.autoUpdateElement = false;
+					$element.data( '_ckeditorInstanceLock', true );
+
+					// Set instance reference in element's data.
+					editor = CKEDITOR.replace( element, config );
+					$element.data( 'ckeditorInstance', editor );
+
+					// Register callback.
+					editor.on( 'instanceReady', function( event )
+					{
+						var editor = event.editor;
+						setTimeout( function()
+						{
+							// Delay bit more if editor is still not ready.
+							if ( !editor.element )
+							{
+								setTimeout( arguments.callee, 100 );
+								return;
+							}
+
+							// Remove this listener.
+							event.removeListener( 'instanceReady', this.callee );
+
+							// Forward setData on dataReady.
+							editor.on( 'dataReady', function()
+							{
+								$element.trigger( 'setData' + '.ckeditor', [ editor ] );
+							});
+
+							// Forward getData.
+							editor.on( 'getData', function( event ) {
+								$element.trigger( 'getData' + '.ckeditor', [ editor, event.data ] );
+							}, 999 );
+
+							// Forward destroy event.
+							editor.on( 'destroy', function()
+							{
+								$element.trigger( 'destroy.ckeditor', [ editor ] );
+							});
+
+							// Integrate with form submit.
+							if ( editor.config.autoUpdateElementJquery && $element.is( 'textarea' ) && $element.parents( 'form' ).length )
+							{
+								var onSubmit = function()
+								{
+									$element.ckeditor( function()
+									{
+										editor.updateElement();
+									});
+								};
+
+								// Bind to submit event.
+								$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 );
+								});
+							}
+
+							// Garbage collect on destroy.
+							editor.on( 'destroy', function()
+							{
+								$element.data( 'ckeditorInstance', null );
+							});
+
+							// Remove lock.
+							$element.data( '_ckeditorInstanceLock', null );
+
+							// Fire instanceReady event.
+							$element.trigger( 'instanceReady.ckeditor', [ editor ] );
+
+							// Run given (first) code.
+							if ( callback )
+								callback.apply( editor, [ element ] );
+						}, 0 );
+					}, null, null, 9999);
+				}
+				else
+				{
+					// Editor is already during creation process, bind our code to the event.
+					CKEDITOR.on( 'instanceReady', function( event )
+					{
+						var editor = event.editor;
+						setTimeout( function()
+						{
+							// Delay bit more if editor is still not ready.
+							if ( !editor.element )
+							{
+								setTimeout( arguments.callee, 100 );
+								return;
+							}
+
+							if ( editor.element.$ == element )
+							{
+								// Run given code.
+								if ( callback )
+									callback.apply( editor, [ element ] );
+							}
+						}, 0 );
+					}, null, null, 9999);
+				}
+			});
+			return this;
+		}
+	});
+
+	// New val() method for objects.
+	if ( CKEDITOR.config.jqueryOverrideVal )
+	{
+		jQuery.fn.val = CKEDITOR.tools.override( jQuery.fn.val, function( oldValMethod )
+		{
+			/**
+			 * CKEditor-aware val() method.
+			 *
+			 * Acts same as original jQuery val(), but for textareas which have CKEditor instances binded to them, method
+			 * returns editor's content. It also works for settings values.
+			 *
+			 * @param oldValMethod
+			 * @name jQuery.fn.val
+			 */
+			return function( newValue, forceNative )
+			{
+				var isSetter = typeof newValue != 'undefined',
+					result;
+
+				this.each( function()
+				{
+					var $this = jQuery( this ),
+						editor = $this.data( 'ckeditorInstance' );
+
+					if ( !forceNative && $this.is( 'textarea' ) && editor )
+					{
+						if ( isSetter )
+							editor.setData( newValue );
+						else
+						{
+							result = editor.getData();
+							// break;
+							return null;
+						}
+					}
+					else
+					{
+						if ( isSetter )
+							oldValMethod.call( $this, newValue );
+						else
+						{
+							result = oldValMethod.call( $this );
+							// break;
+							return null;
+						}
+					}
+
+					return true;
+				});
+				return isSetter ? this : result;
+			};
+		});
+	}
+})();

+ 87 - 0
web/js/ckeditor/_source/core/_bootstrap.js

@@ -0,0 +1,87 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview API initialization code.
+ */
+
+(function()
+{
+	// Disable HC detaction in WebKit. (#5429)
+	if ( CKEDITOR.env.webkit )
+	{
+		CKEDITOR.env.hc = false;
+		return;
+	}
+
+	// Check whether high contrast is active by creating a colored border.
+	var hcDetect = CKEDITOR.dom.element.createFromHtml(
+		'<div style="width:0px;height:0px;position:absolute;left:-10000px;' +
+			'border: 1px solid;border-color: red blue;"></div>', CKEDITOR.document );
+
+	hcDetect.appendTo( CKEDITOR.document.getHead() );
+
+	// Update CKEDITOR.env.
+	// Catch exception needed sometimes for FF. (#4230)
+	try
+	{
+		CKEDITOR.env.hc = hcDetect.getComputedStyle( 'border-top-color' ) == hcDetect.getComputedStyle( 'border-right-color' );
+	}
+	catch (e)
+	{
+		CKEDITOR.env.hc = false;
+	}
+
+	if ( CKEDITOR.env.hc )
+		CKEDITOR.env.cssClass += ' cke_hc';
+
+	hcDetect.remove();
+})();
+
+// Load core plugins.
+CKEDITOR.plugins.load( CKEDITOR.config.corePlugins.split( ',' ), function()
+	{
+		CKEDITOR.status = 'loaded';
+		CKEDITOR.fire( 'loaded' );
+
+		// Process all instances created by the "basic" implementation.
+		var pending = CKEDITOR._.pending;
+		if ( pending )
+		{
+			delete CKEDITOR._.pending;
+
+			for ( var i = 0 ; i < pending.length ; i++ )
+				CKEDITOR.add( pending[ i ] );
+		}
+	});
+
+// Needed for IE6 to not request image (HTTP 200 or 304) for every CSS background. (#6187)
+if ( CKEDITOR.env.ie )
+{
+	// Remove IE mouse flickering on IE6 because of background images.
+	try
+	{
+		document.execCommand( 'BackgroundImageCache', false, true );
+	}
+	catch (e)
+	{
+		// We have been reported about loading problems caused by the above
+		// line. For safety, let's just ignore errors.
+	}
+}
+
+/**
+ * Indicates that CKEditor is running on a High Contrast environment.
+ * @name CKEDITOR.env.hc
+ * @example
+ * if ( CKEDITOR.env.hc )
+ *     alert( 'You're running on High Contrast mode. The editor interface will get adapted to provide you a better experience.' );
+ */
+
+/**
+ * Fired when a CKEDITOR core object is fully loaded and ready for interaction.
+ * @name CKEDITOR#loaded
+ * @event
+ */

+ 238 - 0
web/js/ckeditor/_source/core/ckeditor_basic.js

@@ -0,0 +1,238 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Contains the second part of the {@link CKEDITOR} object
+ *		definition, which defines the basic editor features to be available in
+ *		the root ckeditor_basic.js file.
+ */
+
+if ( CKEDITOR.status == 'unloaded' )
+{
+	(function()
+	{
+		CKEDITOR.event.implementOn( CKEDITOR );
+
+		/**
+		 * Forces the full CKEditor core code, in the case only the basic code has been
+		 * loaded (ckeditor_basic.js). This method self-destroys (becomes undefined) in
+		 * the first call or as soon as the full code is available.
+		 * @example
+		 * // Check if the full core code has been loaded and load it.
+		 * if ( CKEDITOR.loadFullCore )
+		 *     <b>CKEDITOR.loadFullCore()</b>;
+		 */
+		CKEDITOR.loadFullCore = function()
+		{
+			// If not the basic code is not ready it, just mark it to be loaded.
+			if ( CKEDITOR.status != 'basic_ready' )
+			{
+				CKEDITOR.loadFullCore._load = 1;
+				return;
+			}
+
+			// Destroy this function.
+			delete CKEDITOR.loadFullCore;
+
+			// Append the script to the head.
+			var script = document.createElement( 'script' );
+			script.type = 'text/javascript';
+			script.src = CKEDITOR.basePath + 'ckeditor.js';
+
+			document.getElementsByTagName( 'head' )[0].appendChild( script );
+		};
+
+		/**
+		 * The time to wait (in seconds) to load the full editor code after the
+		 * page load, if the "ckeditor_basic" file is used. If set to zero, the
+		 * editor is loaded on demand, as soon as an instance is created.
+		 *
+		 * This value must be set on the page before the page load completion.
+		 * @type Number
+		 * @default 0 (zero)
+		 * @example
+		 * // Loads the full source after five seconds.
+		 * CKEDITOR.loadFullCoreTimeout = 5;
+		 */
+		CKEDITOR.loadFullCoreTimeout = 0;
+
+		/**
+		 * The class name used to identify &lt;textarea&gt; elements to be replace
+		 * by CKEditor instances.
+		 * @type String
+		 * @default 'ckeditor'
+		 * @example
+		 * <b>CKEDITOR.replaceClass</b> = 'rich_editor';
+		 */
+		CKEDITOR.replaceClass = 'ckeditor';
+
+		/**
+		 * Enables the replacement of all textareas with class name matching
+		 * {@link CKEDITOR.replaceClass}.
+		 * @type Boolean
+		 * @default true
+		 * @example
+		 * // Disable the auto-replace feature.
+		 * <b>CKEDITOR.replaceByClassEnabled</b> = false;
+		 */
+		CKEDITOR.replaceByClassEnabled = 1;
+
+		var createInstance = function( elementOrIdOrName, config, creationFunction, data )
+		{
+			if ( CKEDITOR.env.isCompatible )
+			{
+				// Load the full core.
+				if ( CKEDITOR.loadFullCore )
+					CKEDITOR.loadFullCore();
+
+				var editor = creationFunction( elementOrIdOrName, config, data );
+				CKEDITOR.add( editor );
+				return editor;
+			}
+
+			return null;
+		};
+
+		/**
+		 * Replaces a &lt;textarea&gt; or a DOM element (DIV) with a CKEditor
+		 * instance. For textareas, the initial value in the editor will be the
+		 * textarea value. For DOM elements, their innerHTML will be used
+		 * instead. We recommend using TEXTAREA and DIV elements only.
+		 * @param {Object|String} elementOrIdOrName The DOM element (textarea), its
+		 *		ID or name.
+		 * @param {Object} [config] The specific configurations to apply to this
+		 *		editor instance. Configurations set here will override global CKEditor
+		 *		settings.
+		 * @returns {CKEDITOR.editor} The editor instance created.
+		 * @example
+		 * &lt;textarea id="myfield" name="myfield"&gt;&lt:/textarea&gt;
+		 * ...
+		 * <b>CKEDITOR.replace( 'myfield' )</b>;
+		 * @example
+		 * var textarea = document.body.appendChild( document.createElement( 'textarea' ) );
+		 * <b>CKEDITOR.replace( textarea )</b>;
+		 */
+		CKEDITOR.replace = function( elementOrIdOrName, config )
+		{
+			return createInstance( elementOrIdOrName, config, CKEDITOR.editor.replace );
+		};
+
+		/**
+		 * Creates a new editor instance inside a specific DOM element.
+		 * @param {Object|String} elementOrId The DOM element or its ID.
+		 * @param {Object} [config] The specific configurations to apply to this
+		 *		editor instance. Configurations set here will override global CKEditor
+		 *		settings.
+		 * @param {String} [data] Since 3.3. Initial value for the instance.
+		 * @returns {CKEDITOR.editor} The editor instance created.
+		 * @example
+		 * &lt;div id="editorSpace"&gt;&lt:/div&gt;
+		 * ...
+		 * <b>CKEDITOR.appendTo( 'editorSpace' )</b>;
+		 */
+		CKEDITOR.appendTo = function( elementOrId, config, data )
+		{
+			return createInstance( elementOrId, config, CKEDITOR.editor.appendTo, data );
+		};
+
+		// Documented at ckeditor.js.
+		CKEDITOR.add = function( editor )
+		{
+			// For now, just put the editor in the pending list. It will be
+			// processed as soon as the full code gets loaded.
+			var pending = this._.pending || ( this._.pending = [] );
+			pending.push( editor );
+		};
+
+		/**
+		 * Replace all &lt;textarea&gt; elements available in the document with
+		 * editor instances.
+		 * @example
+		 * // Replace all &lt;textarea&gt; elements in the page.
+		 * CKEDITOR.replaceAll();
+		 * @example
+		 * // Replace all &lt;textarea class="myClassName"&gt; elements in the page.
+		 * CKEDITOR.replaceAll( 'myClassName' );
+		 * @example
+		 * // Selectively replace &lt;textarea&gt; elements, based on custom assertions.
+		 * CKEDITOR.replaceAll( function( textarea, config )
+		 *     {
+		 *         // Custom code to evaluate the replace, returning false
+		 *         // if it must not be done.
+		 *         // It also passes the "config" parameter, so the
+		 *         // developer can customize the instance.
+		 *     } );
+		 */
+		CKEDITOR.replaceAll = function()
+		{
+			var textareas = document.getElementsByTagName( 'textarea' );
+
+			for ( var i = 0 ; i < textareas.length ; i++ )
+			{
+				var config = null,
+					textarea = textareas[i];
+
+				// The "name" and/or "id" attribute must exist.
+				if ( !textarea.name && !textarea.id )
+					continue;
+
+				if ( typeof arguments[0] == 'string' )
+				{
+					// The textarea class name could be passed as the function
+					// parameter.
+
+					var classRegex = new RegExp( '(?:^|\\s)' + arguments[0] + '(?:$|\\s)' );
+
+					if ( !classRegex.test( textarea.className ) )
+						continue;
+				}
+				else if ( typeof arguments[0] == 'function' )
+				{
+					// An assertion function could be passed as the function parameter.
+					// It must explicitly return "false" to ignore a specific <textarea>.
+					config = {};
+					if ( arguments[0]( textarea, config ) === false )
+						continue;
+				}
+
+				this.replace( textarea, config );
+			}
+		};
+
+		(function()
+		{
+			var onload = function()
+			{
+				var loadFullCore = CKEDITOR.loadFullCore,
+					loadFullCoreTimeout = CKEDITOR.loadFullCoreTimeout;
+
+				// Replace all textareas with the default class name.
+				if ( CKEDITOR.replaceByClassEnabled )
+					CKEDITOR.replaceAll( CKEDITOR.replaceClass );
+
+				CKEDITOR.status = 'basic_ready';
+
+				if ( loadFullCore && loadFullCore._load )
+					loadFullCore();
+				else if ( loadFullCoreTimeout )
+				{
+					setTimeout( function()
+						{
+							if ( CKEDITOR.loadFullCore )
+								CKEDITOR.loadFullCore();
+						}
+						, loadFullCoreTimeout * 1000 );
+				}
+			};
+
+			if ( window.addEventListener )
+				window.addEventListener( 'load', onload, false );
+			else if ( window.attachEvent )
+				window.attachEvent( 'onload', onload );
+		})();
+
+		CKEDITOR.status = 'basic_loaded';
+	})();
+}

+ 209 - 0
web/js/ckeditor/_source/core/command.js

@@ -0,0 +1,209 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * Creates a command class instance.
+ * @class Represents a command that can be executed on an editor instance.
+ * @param {CKEDITOR.editor} editor The editor instance this command will be
+ *		related to.
+ * @param {CKEDITOR.commandDefinition} commandDefinition The command
+ *		definition.
+ * @augments CKEDITOR.event
+ * @example
+ * var command = new CKEDITOR.command( editor,
+ *     {
+ *         exec : function( editor )
+ *         {
+ *             alert( editor.document.getBody().getHtml() );
+ *         }
+ *     });
+ */
+CKEDITOR.command = function( editor, commandDefinition )
+{
+	/**
+	 * Lists UI items that are associated to this command. This list can be
+	 * used to interact with the UI on command execution (by the execution code
+	 * itself, for example).
+	 * @type Array
+	 * @example
+	 * alert( 'Number of UI items associated to this command: ' + command.<b>uiItems</b>.length );
+	 */
+	this.uiItems = [];
+
+	/**
+	 * Executes the command.
+	 * @param {Object} [data] Any data to pass to the command. Depends on the
+	 *		command implementation and requirements.
+	 * @returns {Boolean} A boolean indicating that the command has been
+	 *      successfully executed.
+	 * @example
+	 * command.<b>exec()</b>;  // The command gets executed.
+	 */
+	this.exec = function( data )
+	{
+		if ( this.state == CKEDITOR.TRISTATE_DISABLED )
+			return false;
+
+		if ( this.editorFocus )     // Give editor focus if necessary (#4355).
+			editor.focus();
+
+		return ( commandDefinition.exec.call( this, editor, data ) !== false );
+	};
+
+	CKEDITOR.tools.extend( this, commandDefinition,
+		// Defaults
+		/** @lends CKEDITOR.command.prototype */
+		{
+			/**
+			 * The editor modes within which the command can be executed. The
+			 * execution will have no action if the current mode is not listed
+			 * in this property.
+			 * @type Object
+			 * @default { wysiwyg : 1 }
+			 * @see CKEDITOR.editor.prototype.mode
+			 * @example
+			 * // Enable the command in both WYSIWYG and Source modes.
+			 * command.<b>modes</b> = { wysiwyg : 1, source : 1 };
+			 * @example
+			 * // Enable the command in Source mode only.
+			 * command.<b>modes</b> = { source : 1 };
+			 */
+			modes : { wysiwyg : 1 },
+
+			/**
+			 * Indicates that the editor will get the focus before executing
+			 * the command.
+			 * @type Boolean
+			 * @default true
+			 * @example
+			 * // Do not force the editor to have focus when executing the command.
+			 * command.<b>editorFocus</b> = false;
+			 */
+			editorFocus : 1,
+
+			/**
+			 * Indicates the editor state. Possible values are:
+			 * <ul>
+			 * <li>{@link CKEDITOR.TRISTATE_DISABLED}: the command is
+			 *		disabled. It's execution will have no effect. Same as
+			 *		{@link disable}.</li>
+			 * <li>{@link CKEDITOR.TRISTATE_ON}: the command is enabled
+			 *		and currently active in the editor (for context sensitive commands,
+			 *		for example).</li>
+			 * <li>{@link CKEDITOR.TRISTATE_OFF}: the command is enabled
+			 *		and currently inactive in the editor (for context sensitive
+			 *		commands, for example).</li>
+			 * </ul>
+			 * Do not set this property directly, using the {@link #setState}
+			 * method instead.
+			 * @type Number
+			 * @default {@link CKEDITOR.TRISTATE_OFF}
+			 * @example
+			 * if ( command.<b>state</b> == CKEDITOR.TRISTATE_DISABLED )
+			 *     alert( 'This command is disabled' );
+			 */
+			state : CKEDITOR.TRISTATE_OFF
+		});
+
+	// Call the CKEDITOR.event constructor to initialize this instance.
+	CKEDITOR.event.call( this );
+};
+
+CKEDITOR.command.prototype =
+{
+	/**
+	 * Enables the command for execution. The command state (see
+	 * {@link CKEDITOR.command.prototype.state}) available before disabling it
+	 * is restored.
+	 * @example
+	 * command.<b>enable()</b>;
+	 * command.exec();    // Execute the command.
+	 */
+	enable : function()
+	{
+		if ( this.state == CKEDITOR.TRISTATE_DISABLED )
+			this.setState( ( !this.preserveState || ( typeof this.previousState == 'undefined' ) ) ? CKEDITOR.TRISTATE_OFF : this.previousState );
+	},
+
+	/**
+	 * Disables the command for execution. The command state (see
+	 * {@link CKEDITOR.command.prototype.state}) will be set to
+	 * {@link CKEDITOR.TRISTATE_DISABLED}.
+	 * @example
+	 * command.<b>disable()</b>;
+	 * command.exec();    // "false" - Nothing happens.
+	 */
+	disable : function()
+	{
+		this.setState( CKEDITOR.TRISTATE_DISABLED );
+	},
+
+	/**
+	 * Sets the command state.
+	 * @param {Number} newState The new state. See {@link #state}.
+	 * @returns {Boolean} Returns "true" if the command state changed.
+	 * @example
+	 * command.<b>setState( CKEDITOR.TRISTATE_ON )</b>;
+	 * command.exec();    // Execute the command.
+	 * command.<b>setState( CKEDITOR.TRISTATE_DISABLED )</b>;
+	 * command.exec();    // "false" - Nothing happens.
+	 * command.<b>setState( CKEDITOR.TRISTATE_OFF )</b>;
+	 * command.exec();    // Execute the command.
+	 */
+	setState : function( newState )
+	{
+		// Do nothing if there is no state change.
+		if ( this.state == newState )
+			return false;
+
+		this.previousState = this.state;
+
+		// Set the new state.
+		this.state = newState;
+
+		// Fire the "state" event, so other parts of the code can react to the
+		// change.
+		this.fire( 'state' );
+
+		return true;
+	},
+
+	/**
+	 * Toggles the on/off (active/inactive) state of the command. This is
+	 * mainly used internally by context sensitive commands.
+	 * @example
+	 * command.<b>toggleState()</b>;
+	 */
+	toggleState : function()
+	{
+		if ( this.state == CKEDITOR.TRISTATE_OFF )
+			this.setState( CKEDITOR.TRISTATE_ON );
+		else if ( this.state == CKEDITOR.TRISTATE_ON )
+			this.setState( CKEDITOR.TRISTATE_OFF );
+	}
+};
+
+CKEDITOR.event.implementOn( CKEDITOR.command.prototype, true );
+
+/**
+ * Indicates the previous command state.
+ * @name CKEDITOR.command.prototype.previousState
+ * @type Number
+ * @see #state
+ * @example
+ * alert( command.<b>previousState</b> );
+ */
+
+/**
+ * Fired when the command state changes.
+ * @name CKEDITOR.command#state
+ * @event
+ * @example
+ * command.on( <b>'state'</b> , function( e )
+ *     {
+ *         // Alerts the new state.
+ *         alert( this.state );
+ *     });
+ */

+ 129 - 0
web/js/ckeditor/_source/core/commanddefinition.js

@@ -0,0 +1,129 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the "virtual" {@link CKEDITOR.commandDefinition} class,
+ *		which contains the defintion of a command. This file is for
+ *		documentation purposes only.
+ */
+
+/**
+ * (Virtual Class) Do not call this constructor. This class is not really part
+ * of the API.
+ * @name CKEDITOR.commandDefinition
+ * @class Virtual class that illustrates the features of command objects to be
+ *		passed to the {@link CKEDITOR.editor.prototype.addCommand} function.
+ * @example
+ */
+
+ /**
+ * The function to be fired when the commend is executed.
+ * @name CKEDITOR.commandDefinition.prototype.exec
+ * @function
+ * @param {CKEDITOR.editor} editor The editor within which run the command.
+ * @param {Object} [data] Additional data to be used to execute the command.
+ * @returns {Boolean} Whether the command has been successfully executed.
+ *		Defaults to "true", if nothing is returned.
+ * @example
+ * editorInstance.addCommand( 'sample',
+ * {
+ *     exec : function( editor )
+ *     {
+ *         alert( 'Executing a command for the editor name "' + editor.name + '"!' );
+ *     }
+ * });
+ */
+
+/**
+ * Whether the command need to be hooked into the redo/undo system.
+ * @name  CKEDITOR.commandDefinition.prototype.canUndo
+ * @type {Boolean}
+ * @default true
+ * @field
+ * @example
+ * editorInstance.addCommand( 'alertName',
+ * {
+ *     exec : function( editor )
+ *     {
+ *         alert( editor.name );
+ *     },
+ *     canUndo : false    // No support for undo/redo
+ * });
+ */
+
+/**
+ * Whether the command is asynchronous, which means that the
+ * {@link CKEDITOR.editor#event:afterCommandExec} event will be fired by the
+ * command itself manually, and that the return value of this command is not to
+ * be returned by the {@link CKEDITOR.command#exec} function.
+ * @name  CKEDITOR.commandDefinition.prototype.async
+ * @default false
+ * @type {Boolean}
+ * @example
+ * editorInstance.addCommand( 'loadOptions',
+ * {
+ *     exec : function( editor )
+ *     {
+ *         // Asynchronous operation below.
+ *         CKEDITOR.ajax.loadXml( 'data.xml', function()
+ *             {
+ *                 editor.fire( 'afterCommandExec' );
+ *             ));
+ *     },
+ *     async : true    // The command need some time to complete after exec function returns.
+ * });
+ */
+
+/**
+ * Whether the command should give focus to the editor before execution.
+ * @name  CKEDITOR.commandDefinition.prototype.editorFocus
+ * @type {Boolean}
+ * @default true
+ * @see CKEDITOR.command#editorFocus
+ * @example
+ * editorInstance.addCommand( 'maximize',
+ * {
+ *     exec : function( editor )
+ *     {
+ *         // ...
+ *     },
+ *     editorFocus : false    // The command doesn't require focusing the editing document.
+ * });
+ */
+
+
+/**
+ * Whether the command state should be set to {@link CKEDITOR.TRISTATE_DISABLED} on startup.
+ * @name  CKEDITOR.commandDefinition.prototype.startDisabled
+ * @type {Boolean}
+ * @default false
+ * @example
+ * editorInstance.addCommand( 'unlink',
+ * {
+ *     exec : function( editor )
+ *     {
+ *         // ...
+ *     },
+ *     startDisabled : true    // Command is unavailable until selection is inside a link.
+ * });
+ */
+
+/**
+ * The editor modes within which the command can be executed. The execution
+ * will have no action if the current mode is not listed in this property.
+ * @name  CKEDITOR.commandDefinition.prototype.modes
+ * @type Object
+ * @default { wysiwyg : 1 }
+ * @see CKEDITOR.command#modes
+ * @example
+ * editorInstance.addCommand( 'link',
+ * {
+ *     exec : function( editor )
+ *     {
+ *         // ...
+ *     },
+ *     modes : { wysiwyg : 1 }    // Command is available in wysiwyg mode only.
+ * });
+ */

+ 431 - 0
web/js/ckeditor/_source/core/config.js

@@ -0,0 +1,431 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.config} object, which holds the
+ * default configuration settings.
+ */
+
+/**
+ * Used in conjuction with {@link CKEDITOR.config.enterMode} and
+ * {@link CKEDITOR.config.shiftEnterMode} to make the editor produce &lt;p&gt;
+ * tags when using the ENTER key.
+ * @constant
+ */
+CKEDITOR.ENTER_P	= 1;
+
+/**
+ * Used in conjuction with {@link CKEDITOR.config.enterMode} and
+ * {@link CKEDITOR.config.shiftEnterMode} to make the editor produce &lt;br&gt;
+ * tags when using the ENTER key.
+ * @constant
+ */
+CKEDITOR.ENTER_BR	= 2;
+
+/**
+ * Used in conjuction with {@link CKEDITOR.config.enterMode} and
+ * {@link CKEDITOR.config.shiftEnterMode} to make the editor produce &lt;div&gt;
+ * tags when using the ENTER key.
+ * @constant
+ */
+CKEDITOR.ENTER_DIV	= 3;
+
+/**
+ * @namespace Holds the default configuration settings. Changes to this object are
+ * reflected in all editor instances, if not specificaly specified for those
+ * instances.
+ */
+CKEDITOR.config =
+{
+	/**
+	 * The URL path for the custom configuration file to be loaded. If not
+	 * overloaded with inline configurations, it defaults to the "config.js"
+	 * file present in the root of the CKEditor installation directory.<br /><br />
+	 *
+	 * CKEditor will recursively load custom configuration files defined inside
+	 * other custom configuration files.
+	 * @type String
+	 * @default '&lt;CKEditor folder&gt;/config.js'
+	 * @example
+	 * // Load a specific configuration file.
+	 * CKEDITOR.replace( 'myfiled', { customConfig : '/myconfig.js' } );
+	 * @example
+	 * // Do not load any custom configuration file.
+	 * CKEDITOR.replace( 'myfiled', { customConfig : '' } );
+	 */
+	customConfig : 'config.js',
+
+	/**
+	 * Whether the replaced element (usually a textarea) is to be updated
+	 * automatically when posting the form containing the editor.
+	 * @type Boolean
+	 * @default true
+	 * @example
+	 * config.autoUpdateElement = true;
+	 */
+	autoUpdateElement : true,
+
+	/**
+	 * The base href URL used to resolve relative and absolute URLs in the
+	 * editor content.
+	 * @type String
+	 * @default '' (empty)
+	 * @example
+	 * config.baseHref = 'http://www.example.com/path/';
+	 */
+	baseHref : '',
+
+	/**
+	 * The CSS file(s) to be used to apply style to the contents. It should
+	 * reflect the CSS used in the final pages where the contents are to be
+	 * used.
+	 * @type String|Array
+	 * @default '&lt;CKEditor folder&gt;/contents.css'
+	 * @example
+	 * config.contentsCss = '/css/mysitestyles.css';
+	 * config.contentsCss = ['/css/mysitestyles.css', '/css/anotherfile.css'];
+	 */
+	contentsCss : CKEDITOR.basePath + 'contents.css',
+
+	/**
+	 * The writting direction of the language used to write the editor
+	 * contents. Allowed values are:
+	 * <ul>
+	 *     <li>'ui' - which indicate content direction will be the same with the user interface language direction;</li>
+	 *     <li>'ltr' - for Left-To-Right language (like English);</li>
+	 *     <li>'rtl' - for Right-To-Left languages (like Arabic).</li>
+	 * </ul>
+	 * @default 'ui'
+	 * @type String
+	 * @example
+	 * config.contentsLangDirection = 'rtl';
+	 */
+	contentsLangDirection : 'ui',
+
+	/**
+	 * Language code of  the writting language which is used to author the editor
+	 * contents.
+	 * @default Same value with editor's UI language.
+	 * @type String
+	 * @example
+	 * config.contentsLanguage = 'fr';
+	 */
+	contentsLanguage : '',
+
+	/**
+	 * The user interface language localization to use. If empty, the editor
+	 * automatically localize the editor to the user language, if supported,
+	 * otherwise the {@link CKEDITOR.config.defaultLanguage} language is used.
+	 * @default '' (empty)
+	 * @type String
+	 * @example
+	 * // Load the German interface.
+	 * config.language = 'de';
+	 */
+	language : '',
+
+	/**
+	 * The language to be used if {@link CKEDITOR.config.language} is left empty and it's not
+	 * possible to localize the editor to the user language.
+	 * @default 'en'
+	 * @type String
+	 * @example
+	 * config.defaultLanguage = 'it';
+	 */
+	defaultLanguage : 'en',
+
+	/**
+	 * Sets the behavior for the ENTER key. It also dictates other behaviour
+	 * rules in the editor, like whether the &lt;br&gt; element is to be used
+	 * as a paragraph separator when indenting text.
+	 * The allowed values are the following constants, and their relative
+	 * behavior:
+	 * <ul>
+	 *     <li>{@link CKEDITOR.ENTER_P} (1): new &lt;p&gt; paragraphs are created;</li>
+	 *     <li>{@link CKEDITOR.ENTER_BR} (2): lines are broken with &lt;br&gt; elements;</li>
+	 *     <li>{@link CKEDITOR.ENTER_DIV} (3): new &lt;div&gt; blocks are created.</li>
+	 * </ul>
+	 * <strong>Note</strong>: It's recommended to use the
+	 * {@link CKEDITOR.ENTER_P} value because of its semantic value and
+	 * correctness. The editor is optimized for this value.
+	 * @type Number
+	 * @default {@link CKEDITOR.ENTER_P}
+	 * @example
+	 * // Not recommended.
+	 * config.enterMode = CKEDITOR.ENTER_BR;
+	 */
+	enterMode : CKEDITOR.ENTER_P,
+
+	/**
+	 * Force the respect of {@link CKEDITOR.config.enterMode} as line break regardless of the context,
+	 * E.g. If {@link CKEDITOR.config.enterMode} is set to {@link CKEDITOR.ENTER_P},
+	 * press enter key inside a 'div' will create a new paragraph with 'p' instead of 'div'.
+	 * @since 3.2.1
+	 * @default false
+	 * @example
+	 * // Not recommended.
+	 * config.forceEnterMode = true;
+	 */
+	forceEnterMode : false,
+
+	/**
+	 * Just like the {@link CKEDITOR.config.enterMode} setting, it defines the behavior for the SHIFT+ENTER key.
+	 * The allowed values are the following constants, and their relative
+	 * behavior:
+	 * <ul>
+	 *     <li>{@link CKEDITOR.ENTER_P} (1): new &lt;p&gt; paragraphs are created;</li>
+	 *     <li>{@link CKEDITOR.ENTER_BR} (2): lines are broken with &lt;br&gt; elements;</li>
+	 *     <li>{@link CKEDITOR.ENTER_DIV} (3): new &lt;div&gt; blocks are created.</li>
+	 * </ul>
+	 * @type Number
+	 * @default {@link CKEDITOR.ENTER_BR}
+	 * @example
+	 * config.shiftEnterMode = CKEDITOR.ENTER_P;
+	 */
+	shiftEnterMode : CKEDITOR.ENTER_BR,
+
+	/**
+	 * A comma separated list of plugins that are not related to editor
+	 * instances. Reserved to plugins that extend the core code only.<br /><br />
+	 *
+	 * There are no ways to override this setting, except by editing the source
+	 * code of CKEditor (_source/core/config.js).
+	 * @type String
+	 * @example
+	 */
+	corePlugins : '',
+
+	/**
+	 * Sets the doctype to be used when loading the editor content as HTML.
+	 * @type String
+	 * @default '&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;'
+	 * @example
+	 * // Set the doctype to the HTML 4 (quirks) mode.
+	 * config.docType = '&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;';
+	 */
+	docType : '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',
+
+	/**
+	 * Sets the "id" attribute to be used on the body element of the editing
+	 * area. This can be useful when reusing the original CSS file you're using
+	 * on your live website and you want to assing to the editor the same id
+	 * you're using for the region that'll hold the contents. In this way,
+	 * id specific CSS rules will be enabled.
+	 * @since 3.1
+	 * @type String
+	 * @default '' (empty)
+	 * @example
+	 * config.bodyId = 'contents_id';
+	 */
+	bodyId : '',
+
+	/**
+	 * Sets the "class" attribute to be used on the body element of the editing
+	 * area. This can be useful when reusing the original CSS file you're using
+	 * on your live website and you want to assing to the editor the same class
+	 * name you're using for the region that'll hold the contents. In this way,
+	 * class specific CSS rules will be enabled.
+	 * @since 3.1
+	 * @type String
+	 * @default '' (empty)
+	 * @example
+	 * config.bodyClass = 'contents';
+	 */
+	bodyClass : '',
+
+	/**
+	 * Indicates whether the contents to be edited are being inputted as a full
+	 * HTML page. A full page includes the &lt;html&gt;, &lt;head&gt; and
+	 * &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
+	 * @example
+	 * config.fullPage = true;
+	 */
+	fullPage : false,
+
+	/**
+	 * The height of editing area( content ), in relative or absolute, e.g. 30px, 5em.
+	 * Note: Percentage unit is not supported yet. e.g. 30%.
+	 * @type Number|String
+	 * @default '200'
+	 * @example
+	 * config.height = 500;
+	 * config.height = '25em';
+	 * config.height = '300px';
+	 */
+	height : 200,
+
+	/**
+	 * Comma separated list of plugins to load and initialize for an editor
+	 * instance. This should be rarely changed, using instead the
+	 * {@link CKEDITOR.config.extraPlugins} and
+	 * {@link CKEDITOR.config.removePlugins} for customizations.
+	 * @type String
+	 * @example
+	 */
+	plugins :
+		'about,' +
+		'a11yhelp,' +
+		'basicstyles,' +
+		'bidi,' +
+		'blockquote,' +
+		'button,' +
+		'clipboard,' +
+		'colorbutton,' +
+		'colordialog,' +
+		'contextmenu,' +
+		'dialogadvtab,' +
+		'div,' +
+		'elementspath,' +
+		'enterkey,' +
+		'entities,' +
+		'filebrowser,' +
+		'find,' +
+		'flash,' +
+		'font,' +
+		'format,' +
+		'forms,' +
+		'horizontalrule,' +
+		'htmldataprocessor,' +
+		'iframe,' +
+		'image,' +
+		'indent,' +
+		'justify,' +
+		'keystrokes,' +
+		'link,' +
+		'list,' +
+		'liststyle,' +
+		'maximize,' +
+		'newpage,' +
+		'pagebreak,' +
+		'pastefromword,' +
+		'pastetext,' +
+		'popup,' +
+		'preview,' +
+		'print,' +
+		'removeformat,' +
+		'resize,' +
+		'save,' +
+		'scayt,' +
+		'smiley,' +
+		'showblocks,' +
+		'showborders,' +
+		'sourcearea,' +
+		'stylescombo,' +
+		'table,' +
+		'tabletools,' +
+		'specialchar,' +
+		'tab,' +
+		'templates,' +
+		'toolbar,' +
+		'undo,' +
+		'wysiwygarea,' +
+		'wsc',
+
+	/**
+	 * List of additional plugins to be loaded. This is a tool setting which
+	 * makes it easier to add new plugins, whithout having to touch and
+	 * possibly breaking the {@link CKEDITOR.config.plugins} setting.
+	 * @type String
+	 * @example
+	 * config.extraPlugins = 'myplugin,anotherplugin';
+	 */
+	extraPlugins : '',
+
+	/**
+	 * List of plugins that must not be loaded. This is a tool setting which
+	 * makes it easier to avoid loading plugins definied in the
+	 * {@link CKEDITOR.config.plugins} setting, whithout having to touch it and
+	 * potentially breaking it.
+	 * @type String
+	 * @example
+	 * config.removePlugins = 'elementspath,save,font';
+	 */
+	removePlugins : '',
+
+	/**
+	 * List of regular expressions to be executed over the input HTML,
+	 * indicating HTML source code that matched must <strong>not</strong> present in WYSIWYG mode for editing.
+	 * @type Array
+	 * @default [] (empty array)
+	 * @example
+	 * config.protectedSource.push( /<\?[\s\S]*?\?>/g );   // PHP Code
+	 * config.protectedSource.push( /<%[\s\S]*?%>/g );   // ASP Code
+	 * config.protectedSource.push( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi );   // ASP.Net Code
+	 */
+	protectedSource : [],
+
+	/**
+	 * The editor tabindex value.
+	 * @type Number
+	 * @default 0 (zero)
+	 * @example
+	 * config.tabIndex = 1;
+	 */
+	tabIndex : 0,
+
+	/**
+	 * The theme to be used to build the UI.
+	 * @type String
+	 * @default 'default'
+	 * @see CKEDITOR.config.skin
+	 * @example
+	 * config.theme = 'default';
+	 */
+	theme : 'default',
+
+	/**
+	 * The skin to load. It may be the name of the skin folder inside the
+	 * editor installation path, or the name and the path separated by a comma.
+	 * @type String
+	 * @default 'default'
+	 * @example
+	 * config.skin = 'v2';
+	 * @example
+	 * config.skin = 'myskin,/customstuff/myskin/';
+	 */
+	skin : 'kama',
+
+	/**
+	 * The editor width in CSS size format or pixel integer.
+	 * @type String|Number
+	 * @default '' (empty)
+	 * @example
+	 * config.width = 850;
+	 * @example
+	 * config.width = '75%';
+	 */
+	width : '',
+
+	/**
+	 * The base Z-index for floating dialogs and popups.
+	 * @type Number
+	 * @default 10000
+	 * @example
+	 * config.baseFloatZIndex = 2000
+	 */
+	baseFloatZIndex : 10000
+};
+
+/**
+ * Indicates that some of the editor features, like alignment and text
+ * direction, should used the "computed value" of the feature to indicate it's
+ * on/off state, instead of using the "real value".<br />
+ * <br />
+ * If enabled, in a left to right written document, the "Left Justify"
+ * alignment button will show as active, even if the aligment style is not
+ * explicitly applied to the current paragraph in the editor.
+ * @name CKEDITOR.config.useComputedState
+ * @type Boolean
+ * @default true
+ * @since 3.4
+ * @example
+ * config.useComputedState = false;
+ */
+
+// PACKAGER_RENAME( CKEDITOR.config )

+ 65 - 0
web/js/ckeditor/_source/core/dataprocessor.js

@@ -0,0 +1,65 @@
+/*
+Copyright (c) 2003-2011, 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.prototype.dataProcessor
+ * @type CKEDITOR.dataProcessor
+ */
+
+/**
+ * This class is here for documentation purposes only and is not really part of
+ * the API. It serves as the base ("interface") for data processors
+ * implementation.
+ * @name CKEDITOR.dataProcessor
+ * @class Represents a data processor, which is responsible to translate and
+ *        transform the editor data on input and output.
+ * @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].'
+ */

+ 20 - 0
web/js/ckeditor/_source/core/dom.js

@@ -0,0 +1,20 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.dom} object, which contains DOM
+ *		manipulation objects and function.
+ */
+
+/**
+ * @namespace DOM manipulation objects, classes and functions.
+ * @see CKEDITOR.dom.element
+ * @see CKEDITOR.dom.node
+ * @example
+ */
+CKEDITOR.dom =
+{};
+
+// PACKAGER_RENAME( CKEDITOR.dom )

+ 32 - 0
web/js/ckeditor/_source/core/dom/comment.js

@@ -0,0 +1,32 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.dom.comment} class, which represents
+ *		a DOM comment node.
+ */
+
+CKEDITOR.dom.comment = CKEDITOR.tools.createClass(
+{
+	base : CKEDITOR.dom.node,
+
+	$ : function( text, ownerDocument )
+	{
+		if ( typeof text == 'string' )
+			text = ( ownerDocument ? ownerDocument.$ : document ).createComment( text );
+
+		this.base( text );
+	},
+
+	proto :
+	{
+		type : CKEDITOR.NODE_COMMENT,
+
+		getOuterHtml : function()
+		{
+			return '<!--' + this.$.nodeValue + '-->';
+		}
+	}
+});

+ 251 - 0
web/js/ckeditor/_source/core/dom/document.js

@@ -0,0 +1,251 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.dom.document} class, which
+ *		represents a DOM document.
+ */
+
+/**
+ * Represents a DOM document.
+ * @constructor
+ * @augments CKEDITOR.dom.domObject
+ * @param {Object} domDocument A native DOM document.
+ * @example
+ * var document = new CKEDITOR.dom.document( document );
+ */
+CKEDITOR.dom.document = function( domDocument )
+{
+	CKEDITOR.dom.domObject.call( this, domDocument );
+};
+
+// PACKAGER_RENAME( CKEDITOR.dom.document )
+
+CKEDITOR.dom.document.prototype = new CKEDITOR.dom.domObject();
+
+CKEDITOR.tools.extend( CKEDITOR.dom.document.prototype,
+	/** @lends CKEDITOR.dom.document.prototype */
+	{
+		/**
+		 * Appends a CSS file to the document.
+		 * @param {String} cssFileUrl The CSS file URL.
+		 * @example
+		 * <b>CKEDITOR.document.appendStyleSheet( '/mystyles.css' )</b>;
+		 */
+		appendStyleSheet : function( cssFileUrl )
+		{
+			if ( this.$.createStyleSheet )
+				this.$.createStyleSheet( cssFileUrl );
+			else
+			{
+				var link = new CKEDITOR.dom.element( 'link' );
+				link.setAttributes(
+					{
+						rel		:'stylesheet',
+						type	: 'text/css',
+						href	: cssFileUrl
+					});
+
+				this.getHead().append( link );
+			}
+		},
+
+		appendStyleText : function( cssStyleText )
+		{
+			if ( this.$.createStyleSheet )
+			{
+				var styleSheet = this.$.createStyleSheet( "" );
+				styleSheet.cssText = cssStyleText ;
+			}
+			else
+			{
+				var style = new CKEDITOR.dom.element( 'style', this );
+				style.append( new CKEDITOR.dom.text( cssStyleText, this ) );
+				this.getHead().append( style );
+			}
+		},
+
+		createElement : function( name, attribsAndStyles )
+		{
+			var element = new CKEDITOR.dom.element( name, this );
+
+			if ( attribsAndStyles )
+			{
+				if ( attribsAndStyles.attributes )
+					element.setAttributes( attribsAndStyles.attributes );
+
+				if ( attribsAndStyles.styles )
+					element.setStyles( attribsAndStyles.styles );
+			}
+
+			return element;
+		},
+
+		createText : function( text )
+		{
+			return new CKEDITOR.dom.text( text, this );
+		},
+
+		focus : function()
+		{
+			this.getWindow().focus();
+		},
+
+		/**
+		 * Gets and element based on its id.
+		 * @param {String} elementId The element id.
+		 * @returns {CKEDITOR.dom.element} The element instance, or null if not found.
+		 * @example
+		 * var element = <b>CKEDITOR.document.getById( 'myElement' )</b>;
+		 * alert( element.getId() );  // "myElement"
+		 */
+		getById : function( elementId )
+		{
+			var $ = this.$.getElementById( elementId );
+			return $ ? new CKEDITOR.dom.element( $ ) : null;
+		},
+
+		getByAddress : function( address, normalized )
+		{
+			var $ = this.$.documentElement;
+
+			for ( var i = 0 ; $ && i < address.length ; i++ )
+			{
+				var target = address[ i ];
+
+				if ( !normalized )
+				{
+					$ = $.childNodes[ target ];
+					continue;
+				}
+
+				var currentIndex = -1;
+
+				for (var j = 0 ; j < $.childNodes.length ; j++ )
+				{
+					var candidate = $.childNodes[ j ];
+
+					if ( normalized === true &&
+							candidate.nodeType == 3 &&
+							candidate.previousSibling &&
+							candidate.previousSibling.nodeType == 3 )
+					{
+						continue;
+					}
+
+					currentIndex++;
+
+					if ( currentIndex == target )
+					{
+						$ = candidate;
+						break;
+					}
+				}
+			}
+
+			return $ ? new CKEDITOR.dom.node( $ ) : null;
+		},
+
+		getElementsByTag : function( tagName, namespace )
+		{
+			if ( !( CKEDITOR.env.ie && ! ( document.documentMode > 8 ) ) && namespace )
+				tagName = namespace + ':' + tagName;
+			return new CKEDITOR.dom.nodeList( this.$.getElementsByTagName( tagName ) );
+		},
+
+		/**
+		 * Gets the &lt;head&gt; element for this document.
+		 * @returns {CKEDITOR.dom.element} The &lt;head&gt; element.
+		 * @example
+		 * var element = <b>CKEDITOR.document.getHead()</b>;
+		 * alert( element.getName() );  // "head"
+		 */
+		getHead : function()
+		{
+			var head = this.$.getElementsByTagName( 'head' )[0];
+			if ( !head )
+				head = this.getDocumentElement().append( new CKEDITOR.dom.element( 'head' ), true );
+			else
+			head = new CKEDITOR.dom.element( head );
+
+			return (
+			this.getHead = function()
+				{
+					return head;
+				})();
+		},
+
+		/**
+		 * Gets the &lt;body&gt; element for this document.
+		 * @returns {CKEDITOR.dom.element} The &lt;body&gt; element.
+		 * @example
+		 * var element = <b>CKEDITOR.document.getBody()</b>;
+		 * alert( element.getName() );  // "body"
+		 */
+		getBody : function()
+		{
+			var body = new CKEDITOR.dom.element( this.$.body );
+
+			return (
+			this.getBody = function()
+				{
+					return body;
+				})();
+		},
+
+		/**
+		 * Gets the DOM document element for this document.
+		 * @returns {CKEDITOR.dom.element} The DOM document element.
+		 */
+		getDocumentElement : function()
+		{
+			var documentElement = new CKEDITOR.dom.element( this.$.documentElement );
+
+			return (
+			this.getDocumentElement = function()
+				{
+					return documentElement;
+				})();
+		},
+
+		/**
+		 * Gets the window object that holds this document.
+		 * @returns {CKEDITOR.dom.window} The window object.
+		 */
+		getWindow : function()
+		{
+			var win = new CKEDITOR.dom.window( this.$.parentWindow || this.$.defaultView );
+
+			return (
+			this.getWindow = function()
+				{
+					return win;
+				})();
+		},
+
+		/**
+		 * Defines the document contents through document.write. Note that the
+		 * previous document contents will be lost (cleaned).
+		 * @since 3.5
+		 * @param {String} html The HTML defining the document contents.
+		 * @example
+		 * document.write(
+		 *     '&lt;html&gt;' +
+		 *         '&lt;head&gt;&lt;title&gt;Sample Doc&lt;/title&gt;&lt;/head&gt;' +
+		 *         '&lt;body&gt;Document contents created by code&lt;/body&gt;' +
+		 *      '&lt;/html&gt;' );
+		 */
+		write : function( html )
+		{
+			// Don't leave any history log in IE. (#5657)
+			this.$.open( 'text/html', 'replace' );
+
+			// Support for custom document.domain in IE.
+			CKEDITOR.env.isCustomDomain() &&  ( this.$.domain = document.domain );
+
+			this.$.write( html );
+			this.$.close();
+		}
+	});

+ 49 - 0
web/js/ckeditor/_source/core/dom/documentfragment.js

@@ -0,0 +1,49 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @class DocumentFragment is a "lightweight" or "minimal" Document object. It is
+ * commonly used to extract a portion of a document's tree or to create a new
+ * fragment of a document. Various operations may take DocumentFragment objects
+ * as arguments and results in all the child nodes of the DocumentFragment being
+ * moved to the child list of this node.
+ * @param {Object} ownerDocument
+ */
+CKEDITOR.dom.documentFragment = function( ownerDocument )
+{
+	ownerDocument = ownerDocument || CKEDITOR.document;
+	this.$ = ownerDocument.$.createDocumentFragment();
+};
+
+CKEDITOR.tools.extend( CKEDITOR.dom.documentFragment.prototype,
+	CKEDITOR.dom.element.prototype,
+	{
+		type : CKEDITOR.NODE_DOCUMENT_FRAGMENT,
+		insertAfterNode : function( node )
+		{
+			node = node.$;
+			node.parentNode.insertBefore( this.$, node.nextSibling );
+		}
+	},
+	true,
+	{
+		'append' : 1,
+		'appendBogus' : 1,
+		'getFirst' : 1,
+		'getLast' : 1,
+		'appendTo' : 1,
+		'moveChildren' : 1,
+		'insertBefore' : 1,
+		'insertAfterNode' : 1,
+		'replace' : 1,
+		'trim' : 1,
+		'type' : 1,
+		'ltrim' : 1,
+		'rtrim' : 1,
+		'getDocument' : 1,
+		'getChildCount' : 1,
+		'getChild' : 1,
+		'getChildren' : 1
+	} );

+ 145 - 0
web/js/ckeditor/_source/core/dom/event.js

@@ -0,0 +1,145 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.dom.event} class, which
+ *		represents the a native DOM event object.
+ */
+
+/**
+ * Represents a native DOM event object.
+ * @constructor
+ * @param {Object} domEvent A native DOM event object.
+ * @example
+ */
+CKEDITOR.dom.event = function( domEvent )
+{
+	/**
+	 * The native DOM event object represented by this class instance.
+	 * @type Object
+	 * @example
+	 */
+	this.$ = domEvent;
+};
+
+CKEDITOR.dom.event.prototype =
+{
+	/**
+	 * Gets the key code associated to the event.
+	 * @returns {Number} The key code.
+	 * @example
+	 * alert( event.getKey() );  "65" is "a" has been pressed
+	 */
+	getKey : function()
+	{
+		return this.$.keyCode || this.$.which;
+	},
+
+	/**
+	 * Gets a number represeting the combination of the keys pressed during the
+	 * event. It is the sum with the current key code and the {@link CKEDITOR.CTRL},
+	 * {@link CKEDITOR.SHIFT} and {@link CKEDITOR.ALT} constants.
+	 * @returns {Number} The number representing the keys combination.
+	 * @example
+	 * alert( event.getKeystroke() == 65 );                                   // "a" key
+	 * alert( event.getKeystroke() == CKEDITOR.CTRL + 65 );                   // CTRL + "a" key
+	 * alert( event.getKeystroke() == CKEDITOR.CTRL + CKEDITOR.SHIFT + 65 );  // CTRL + SHIFT + "a" key
+	 */
+	getKeystroke : function()
+	{
+		var keystroke = this.getKey();
+
+		if ( this.$.ctrlKey || this.$.metaKey )
+			keystroke += CKEDITOR.CTRL;
+
+		if ( this.$.shiftKey )
+			keystroke += CKEDITOR.SHIFT;
+
+		if ( this.$.altKey )
+			keystroke += CKEDITOR.ALT;
+
+		return keystroke;
+	},
+
+	/**
+	 * Prevents the original behavior of the event to happen. It can optionally
+	 * stop propagating the event in the event chain.
+	 * @param {Boolean} [stopPropagation] Stop propagating this event in the
+	 *		event chain.
+	 * @example
+	 * var element = CKEDITOR.document.getById( 'myElement' );
+	 * element.on( 'click', function( ev )
+	 *     {
+	 *         // The DOM event object is passed by the "data" property.
+	 *         var domEvent = ev.data;
+	 *         // Prevent the click to chave any effect in the element.
+	 *         domEvent.preventDefault();
+	 *     });
+	 */
+	preventDefault : function( stopPropagation )
+	{
+		var $ = this.$;
+		if ( $.preventDefault )
+			$.preventDefault();
+		else
+			$.returnValue = false;
+
+		if ( stopPropagation )
+			this.stopPropagation();
+	},
+
+	stopPropagation : function()
+	{
+		var $ = this.$;
+		if ( $.stopPropagation )
+			$.stopPropagation();
+		else
+			$.cancelBubble = true;
+	},
+
+	/**
+	 * Returns the DOM node where the event was targeted to.
+	 * @returns {CKEDITOR.dom.node} The target DOM node.
+	 * @example
+	 * var element = CKEDITOR.document.getById( 'myElement' );
+	 * element.on( 'click', function( ev )
+	 *     {
+	 *         // The DOM event object is passed by the "data" property.
+	 *         var domEvent = ev.data;
+	 *         // Add a CSS class to the event target.
+	 *         domEvent.getTarget().addClass( 'clicked' );
+	 *     });
+	 */
+
+	getTarget : function()
+	{
+		var rawNode = this.$.target || this.$.srcElement;
+		return rawNode ? new CKEDITOR.dom.node( rawNode ) : null;
+	}
+};
+
+// For the followind constants, we need to go over the Unicode boundaries
+// (0x10FFFF) to avoid collision.
+
+/**
+ * CTRL key (0x110000).
+ * @constant
+ * @example
+ */
+CKEDITOR.CTRL = 0x110000;
+
+/**
+ * SHIFT key (0x220000).
+ * @constant
+ * @example
+ */
+CKEDITOR.SHIFT = 0x220000;
+
+/**
+ * ALT key (0x440000).
+ * @constant
+ * @example
+ */
+CKEDITOR.ALT = 0x440000;

+ 695 - 0
web/js/ckeditor/_source/core/dom/node.js

@@ -0,0 +1,695 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.dom.node} class which is the base
+ *		class for classes that represent DOM nodes.
+ */
+
+/**
+ * Base class for classes representing DOM nodes. This constructor may return
+ * an instance of a class that inherits from this class, like
+ * {@link CKEDITOR.dom.element} or {@link CKEDITOR.dom.text}.
+ * @augments CKEDITOR.dom.domObject
+ * @param {Object} domNode A native DOM node.
+ * @constructor
+ * @see CKEDITOR.dom.element
+ * @see CKEDITOR.dom.text
+ * @example
+ */
+CKEDITOR.dom.node = function( domNode )
+{
+	if ( domNode )
+	{
+		switch ( domNode.nodeType )
+		{
+			// Safari don't consider document as element node type. (#3389)
+			case CKEDITOR.NODE_DOCUMENT :
+				return new CKEDITOR.dom.document( domNode );
+
+			case CKEDITOR.NODE_ELEMENT :
+				return new CKEDITOR.dom.element( domNode );
+
+			case CKEDITOR.NODE_TEXT :
+				return new CKEDITOR.dom.text( domNode );
+		}
+
+		// Call the base constructor.
+		CKEDITOR.dom.domObject.call( this, domNode );
+	}
+
+	return this;
+};
+
+CKEDITOR.dom.node.prototype = new CKEDITOR.dom.domObject();
+
+/**
+ * Element node type.
+ * @constant
+ * @example
+ */
+CKEDITOR.NODE_ELEMENT = 1;
+
+/**
+ * Document node type.
+ * @constant
+ * @example
+ */
+CKEDITOR.NODE_DOCUMENT = 9;
+
+/**
+ * Text node type.
+ * @constant
+ * @example
+ */
+CKEDITOR.NODE_TEXT = 3;
+
+/**
+ * Comment node type.
+ * @constant
+ * @example
+ */
+CKEDITOR.NODE_COMMENT = 8;
+
+CKEDITOR.NODE_DOCUMENT_FRAGMENT = 11;
+
+CKEDITOR.POSITION_IDENTICAL = 0;
+CKEDITOR.POSITION_DISCONNECTED = 1;
+CKEDITOR.POSITION_FOLLOWING = 2;
+CKEDITOR.POSITION_PRECEDING = 4;
+CKEDITOR.POSITION_IS_CONTAINED = 8;
+CKEDITOR.POSITION_CONTAINS = 16;
+
+CKEDITOR.tools.extend( CKEDITOR.dom.node.prototype,
+	/** @lends CKEDITOR.dom.node.prototype */
+	{
+		/**
+		 * Makes this node a child of another element.
+		 * @param {CKEDITOR.dom.element} element The target element to which
+		 *		this node will be appended.
+		 * @returns {CKEDITOR.dom.element} The target element.
+		 * @example
+		 * var p = new CKEDITOR.dom.element( 'p' );
+		 * var strong = new CKEDITOR.dom.element( 'strong' );
+		 * strong.appendTo( p );
+		 *
+		 * // result: "&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;"
+		 */
+		appendTo : function( element, toStart )
+		{
+			element.append( this, toStart );
+			return element;
+		},
+
+		clone : function( includeChildren, cloneId )
+		{
+			var $clone = this.$.cloneNode( includeChildren );
+
+			var removeIds = function( node )
+			{
+				if ( node.nodeType != CKEDITOR.NODE_ELEMENT )
+					return;
+
+				if ( !cloneId )
+					node.removeAttribute( 'id', false );
+				node.removeAttribute( 'data-cke-expando', false );
+
+				if ( includeChildren )
+				{
+					var childs = node.childNodes;
+					for ( var i=0; i < childs.length; i++ )
+						removeIds( childs[ i ] );
+				}
+			};
+
+			// The "id" attribute should never be cloned to avoid duplication.
+			removeIds( $clone );
+
+			return new CKEDITOR.dom.node( $clone );
+		},
+
+		hasPrevious : function()
+		{
+			return !!this.$.previousSibling;
+		},
+
+		hasNext : function()
+		{
+			return !!this.$.nextSibling;
+		},
+
+		/**
+		 * Inserts this element after a node.
+		 * @param {CKEDITOR.dom.node} node The node that will precede this element.
+		 * @returns {CKEDITOR.dom.node} The node preceding this one after
+		 *		insertion.
+		 * @example
+		 * var em = new CKEDITOR.dom.element( 'em' );
+		 * var strong = new CKEDITOR.dom.element( 'strong' );
+		 * strong.insertAfter( em );
+		 *
+		 * // result: "&lt;em&gt;&lt;/em&gt;&lt;strong&gt;&lt;/strong&gt;"
+		 */
+		insertAfter : function( node )
+		{
+			node.$.parentNode.insertBefore( this.$, node.$.nextSibling );
+			return node;
+		},
+
+		/**
+		 * Inserts this element before a node.
+		 * @param {CKEDITOR.dom.node} node The node that will succeed this element.
+		 * @returns {CKEDITOR.dom.node} The node being inserted.
+		 * @example
+		 * var em = new CKEDITOR.dom.element( 'em' );
+		 * var strong = new CKEDITOR.dom.element( 'strong' );
+		 * strong.insertBefore( em );
+		 *
+		 * // result: "&lt;strong&gt;&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;"
+		 */
+		insertBefore : function( node )
+		{
+			node.$.parentNode.insertBefore( this.$, node.$ );
+			return node;
+		},
+
+		insertBeforeMe : function( node )
+		{
+			this.$.parentNode.insertBefore( node.$, this.$ );
+			return node;
+		},
+
+		/**
+		 * Retrieves a uniquely identifiable tree address for this node.
+		 * The tree address returned is an array of integers, with each integer
+		 * indicating a child index of a DOM node, starting from
+		 * <code>document.documentElement</code>.
+		 *
+		 * For example, assuming <code>&lt;body&gt;</code> is the second child
+		 * of <code>&lt;html&gt;</code> (<code>&lt;head&gt;</code> being the first),
+		 * and we would like to address the third child under the
+		 * fourth child of <code>&lt;body&gt;</code>, the tree address returned would be:
+		 * [1, 3, 2]
+		 *
+		 * The tree address cannot be used for finding back the DOM tree node once
+		 * the DOM tree structure has been modified.
+		 */
+		getAddress : function( normalized )
+		{
+			var address = [];
+			var $documentElement = this.getDocument().$.documentElement;
+			var node = this.$;
+
+			while ( node && node != $documentElement )
+			{
+				var parentNode = node.parentNode;
+
+				if ( parentNode )
+				{
+					// Get the node index. For performance, call getIndex
+					// directly, instead of creating a new node object.
+					address.unshift( this.getIndex.call( { $ : node }, normalized ) );
+				}
+
+				node = parentNode;
+			}
+
+			return address;
+		},
+
+		/**
+		 * Gets the document containing this element.
+		 * @returns {CKEDITOR.dom.document} The document.
+		 * @example
+		 * var element = CKEDITOR.document.getById( 'example' );
+		 * alert( <strong>element.getDocument().equals( CKEDITOR.document )</strong> );  // "true"
+		 */
+		getDocument : function()
+		{
+			return new CKEDITOR.dom.document( this.$.ownerDocument || this.$.parentNode.ownerDocument );
+		},
+
+		getIndex : function( normalized )
+		{
+			// Attention: getAddress depends on this.$
+
+			var current = this.$,
+				index = 0;
+
+			while ( ( current = current.previousSibling ) )
+			{
+				// When normalizing, do not count it if this is an
+				// empty text node or if it's a text node following another one.
+				if ( normalized && current.nodeType == 3 &&
+					 ( !current.nodeValue.length ||
+					   ( current.previousSibling && current.previousSibling.nodeType == 3 ) ) )
+				{
+					continue;
+				}
+
+				index++;
+			}
+
+			return index;
+		},
+
+		getNextSourceNode : function( startFromSibling, nodeType, guard )
+		{
+			// If "guard" is a node, transform it in a function.
+			if ( guard && !guard.call )
+			{
+				var guardNode = guard;
+				guard = function( node )
+				{
+					return !node.equals( guardNode );
+				};
+			}
+
+			var node = ( !startFromSibling && this.getFirst && this.getFirst() ),
+				parent;
+
+			// Guarding when we're skipping the current element( no children or 'startFromSibling' ).
+			// send the 'moving out' signal even we don't actually dive into.
+			if ( !node )
+			{
+				if ( this.type == CKEDITOR.NODE_ELEMENT && guard && guard( this, true ) === false )
+					return null;
+				node = this.getNext();
+			}
+
+			while ( !node && ( parent = ( parent || this ).getParent() ) )
+			{
+				// The guard check sends the "true" paramenter to indicate that
+				// we are moving "out" of the element.
+				if ( guard && guard( parent, true ) === false )
+					return null;
+
+				node = parent.getNext();
+			}
+
+			if ( !node )
+				return null;
+
+			if ( guard && guard( node ) === false )
+				return null;
+
+			if ( nodeType && nodeType != node.type )
+				return node.getNextSourceNode( false, nodeType, guard );
+
+			return node;
+		},
+
+		getPreviousSourceNode : function( startFromSibling, nodeType, guard )
+		{
+			if ( guard && !guard.call )
+			{
+				var guardNode = guard;
+				guard = function( node )
+				{
+					return !node.equals( guardNode );
+				};
+			}
+
+			var node = ( !startFromSibling && this.getLast && this.getLast() ),
+				parent;
+
+			// Guarding when we're skipping the current element( no children or 'startFromSibling' ).
+			// send the 'moving out' signal even we don't actually dive into.
+			if ( !node )
+			{
+				if ( this.type == CKEDITOR.NODE_ELEMENT && guard && guard( this, true ) === false )
+					return null;
+				node = this.getPrevious();
+			}
+
+			while ( !node && ( parent = ( parent || this ).getParent() ) )
+			{
+				// The guard check sends the "true" paramenter to indicate that
+				// we are moving "out" of the element.
+				if ( guard && guard( parent, true ) === false )
+					return null;
+
+				node = parent.getPrevious();
+			}
+
+			if ( !node )
+				return null;
+
+			if ( guard && guard( node ) === false )
+				return null;
+
+			if ( nodeType && node.type != nodeType )
+				return node.getPreviousSourceNode( false, nodeType, guard );
+
+			return node;
+		},
+
+		getPrevious : function( evaluator )
+		{
+			var previous = this.$, retval;
+			do
+			{
+				previous = previous.previousSibling;
+				retval = previous && new CKEDITOR.dom.node( previous );
+			}
+			while ( retval && evaluator && !evaluator( retval ) )
+			return retval;
+		},
+
+		/**
+		 * Gets the node that follows this element in its parent's child list.
+		 * @param {Function} evaluator Filtering the result node.
+		 * @returns {CKEDITOR.dom.node} The next node or null if not available.
+		 * @example
+		 * var element = CKEDITOR.dom.element.createFromHtml( '&lt;div&gt;&lt;b&gt;Example&lt;/b&gt; &lt;i&gt;next&lt;/i&gt;&lt;/div&gt;' );
+		 * var first = <strong>element.getFirst().getNext()</strong>;
+		 * alert( first.getName() );  // "i"
+		 */
+		getNext : function( evaluator )
+		{
+			var next = this.$, retval;
+			do
+			{
+				next = next.nextSibling;
+				retval = next && new CKEDITOR.dom.node( next );
+			}
+			while ( retval && evaluator && !evaluator( retval ) )
+			return retval;
+		},
+
+		/**
+		 * Gets the parent element for this node.
+		 * @returns {CKEDITOR.dom.element} The parent element.
+		 * @example
+		 * var node = editor.document.getBody().getFirst();
+		 * var parent = node.<strong>getParent()</strong>;
+		 * alert( node.getName() );  // "body"
+		 */
+		getParent : function()
+		{
+			var parent = this.$.parentNode;
+			return ( parent && parent.nodeType == 1 ) ? new CKEDITOR.dom.node( parent ) : null;
+		},
+
+		getParents : function( closerFirst )
+		{
+			var node = this;
+			var parents = [];
+
+			do
+			{
+				parents[  closerFirst ? 'push' : 'unshift' ]( node );
+			}
+			while ( ( node = node.getParent() ) )
+
+			return parents;
+		},
+
+		getCommonAncestor : function( node )
+		{
+			if ( node.equals( this ) )
+				return this;
+
+			if ( node.contains && node.contains( this ) )
+				return node;
+
+			var start = this.contains ? this : this.getParent();
+
+			do
+			{
+				if ( start.contains( node ) )
+					return start;
+			}
+			while ( ( start = start.getParent() ) );
+
+			return null;
+		},
+
+		getPosition : function( otherNode )
+		{
+			var $ = this.$;
+			var $other = otherNode.$;
+
+			if ( $.compareDocumentPosition )
+				return $.compareDocumentPosition( $other );
+
+			// IE and Safari have no support for compareDocumentPosition.
+
+			if ( $ == $other )
+				return CKEDITOR.POSITION_IDENTICAL;
+
+			// Only element nodes support contains and sourceIndex.
+			if ( this.type == CKEDITOR.NODE_ELEMENT && otherNode.type == CKEDITOR.NODE_ELEMENT )
+			{
+				if ( $.contains )
+				{
+					if ( $.contains( $other ) )
+						return CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING;
+
+					if ( $other.contains( $ ) )
+						return CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING;
+				}
+
+				if ( 'sourceIndex' in $ )
+				{
+					return ( $.sourceIndex < 0 || $other.sourceIndex < 0 ) ? CKEDITOR.POSITION_DISCONNECTED :
+						( $.sourceIndex < $other.sourceIndex ) ? CKEDITOR.POSITION_PRECEDING :
+						CKEDITOR.POSITION_FOLLOWING;
+				}
+			}
+
+			// For nodes that don't support compareDocumentPosition, contains
+			// or sourceIndex, their "address" is compared.
+
+			var addressOfThis = this.getAddress(),
+				addressOfOther = otherNode.getAddress(),
+				minLevel = Math.min( addressOfThis.length, addressOfOther.length );
+
+				// Determinate preceed/follow relationship.
+				for ( var i = 0 ; i <= minLevel - 1 ; i++ )
+ 				{
+					if ( addressOfThis[ i ] != addressOfOther[ i ] )
+					{
+						if ( i < minLevel )
+						{
+							return addressOfThis[ i ] < addressOfOther[ i ] ?
+						            CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_FOLLOWING;
+						}
+						break;
+					}
+ 				}
+
+				// Determinate contains/contained relationship.
+				return ( addressOfThis.length < addressOfOther.length ) ?
+							CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING :
+							CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING;
+		},
+
+		/**
+		 * Gets the closest ancestor node of this node, specified by its name.
+		 * @param {String} reference The name of the ancestor node to search or
+		 *		an object with the node names to search for.
+		 * @param {Boolean} [includeSelf] Whether to include the current
+		 *		node in the search.
+		 * @returns {CKEDITOR.dom.node} The located ancestor node or null if not found.
+		 * @since 3.6.1
+		 * @example
+		 * // Suppose we have the following HTML structure:
+		 * // &lt;div id="outer"&gt;&lt;div id="inner"&gt;&lt;p&gt;&lt;b&gt;Some text&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;
+		 * // If node == &lt;b&gt;
+		 * ascendant = node.getAscendant( 'div' );      // ascendant == &lt;div id="inner"&gt
+		 * ascendant = node.getAscendant( 'b' );        // ascendant == null
+		 * ascendant = node.getAscendant( 'b', true );  // ascendant == &lt;b&gt;
+		 * ascendant = node.getAscendant( { div: 1, p: 1} );      // Searches for the first 'div' or 'p': ascendant == &lt;div id="inner"&gt
+		 */
+		getAscendant : function( reference, includeSelf )
+		{
+			var $ = this.$,
+				name;
+
+			if ( !includeSelf )
+				$ = $.parentNode;
+
+			while ( $ )
+			{
+				if ( $.nodeName && ( name = $.nodeName.toLowerCase(), ( typeof reference == 'string' ? name == reference : name in reference ) ) )
+					return new CKEDITOR.dom.node( $ );
+
+				$ = $.parentNode;
+			}
+			return null;
+		},
+
+		hasAscendant : function( name, includeSelf )
+		{
+			var $ = this.$;
+
+			if ( !includeSelf )
+				$ = $.parentNode;
+
+			while ( $ )
+			{
+				if ( $.nodeName && $.nodeName.toLowerCase() == name )
+					return true;
+
+				$ = $.parentNode;
+			}
+			return false;
+		},
+
+		move : function( target, toStart )
+		{
+			target.append( this.remove(), toStart );
+		},
+
+		/**
+		 * Removes this node from the document DOM.
+		 * @param {Boolean} [preserveChildren] Indicates that the children
+		 *		elements must remain in the document, removing only the outer
+		 *		tags.
+		 * @example
+		 * var element = CKEDITOR.dom.element.getById( 'MyElement' );
+		 * <strong>element.remove()</strong>;
+		 */
+		remove : function( preserveChildren )
+		{
+			var $ = this.$;
+			var parent = $.parentNode;
+
+			if ( parent )
+			{
+				if ( preserveChildren )
+				{
+					// Move all children before the node.
+					for ( var child ; ( child = $.firstChild ) ; )
+					{
+						parent.insertBefore( $.removeChild( child ), $ );
+					}
+				}
+
+				parent.removeChild( $ );
+			}
+
+			return this;
+		},
+
+		replace : function( nodeToReplace )
+		{
+			this.insertBefore( nodeToReplace );
+			nodeToReplace.remove();
+		},
+
+		trim : function()
+		{
+			this.ltrim();
+			this.rtrim();
+		},
+
+		ltrim : function()
+		{
+			var child;
+			while ( this.getFirst && ( child = this.getFirst() ) )
+			{
+				if ( child.type == CKEDITOR.NODE_TEXT )
+				{
+					var trimmed = CKEDITOR.tools.ltrim( child.getText() ),
+						originalLength = child.getLength();
+
+					if ( !trimmed )
+					{
+						child.remove();
+						continue;
+					}
+					else if ( trimmed.length < originalLength )
+					{
+						child.split( originalLength - trimmed.length );
+
+						// IE BUG: child.remove() may raise JavaScript errors here. (#81)
+						this.$.removeChild( this.$.firstChild );
+					}
+				}
+				break;
+			}
+		},
+
+		rtrim : function()
+		{
+			var child;
+			while ( this.getLast && ( child = this.getLast() ) )
+			{
+				if ( child.type == CKEDITOR.NODE_TEXT )
+				{
+					var trimmed = CKEDITOR.tools.rtrim( child.getText() ),
+						originalLength = child.getLength();
+
+					if ( !trimmed )
+					{
+						child.remove();
+						continue;
+					}
+					else if ( trimmed.length < originalLength )
+					{
+						child.split( trimmed.length );
+
+						// IE BUG: child.getNext().remove() may raise JavaScript errors here.
+						// (#81)
+						this.$.lastChild.parentNode.removeChild( this.$.lastChild );
+					}
+				}
+				break;
+			}
+
+			if ( !CKEDITOR.env.ie && !CKEDITOR.env.opera )
+			{
+				child = this.$.lastChild;
+
+				if ( child && child.type == 1 && child.nodeName.toLowerCase() == 'br' )
+				{
+					// Use "eChildNode.parentNode" instead of "node" to avoid IE bug (#324).
+					child.parentNode.removeChild( child ) ;
+				}
+			}
+		},
+
+		/**
+		 * Checks if this node is read-only (should not be changed). Additionally
+		 * it returns the element that defines the read-only state of this node
+		 * (if present). It may be the node itself or any of its parent
+		 * nodes.
+		 * @returns {CKEDITOR.dom.element|Boolean} An element containing
+		 *		read-only attributes or "false" if none is found.
+		 * @since 3.5
+		 * @example
+		 * // For the following HTML:
+		 * // &lt;div contenteditable="false"&gt;Some &lt;b&gt;text&lt;/b&gt;&lt;/div&gt;
+		 *
+		 * // If "ele" is the above &lt;div&gt;
+		 * ele.isReadOnly();  // the &lt;div&gt; element
+		 *
+		 * // If "ele" is the above &lt;b&gt;
+		 * ele.isReadOnly();  // the &lt;div&gt; element
+		 */
+		isReadOnly : function()
+		{
+			var current = this;
+			while( current )
+			{
+				if ( current.type == CKEDITOR.NODE_ELEMENT )
+				{
+					if ( current.is( 'body' ) || !!current.data( 'cke-editable' ) )
+						break;
+
+					if ( current.getAttribute( 'contentEditable' ) == 'false' )
+						return current;
+					else if ( current.getAttribute( 'contentEditable' ) == 'true' )
+						break;
+				}
+				current = current.getParent();
+			}
+
+			return false;
+		}
+	}
+);

+ 26 - 0
web/js/ckeditor/_source/core/dom/nodelist.js

@@ -0,0 +1,26 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @class
+ */
+CKEDITOR.dom.nodeList = function( nativeList )
+{
+	this.$ = nativeList;
+};
+
+CKEDITOR.dom.nodeList.prototype =
+{
+	count : function()
+	{
+		return this.$.length;
+	},
+
+	getItem : function( index )
+	{
+		var $node = this.$[ index ];
+		return $node ? new CKEDITOR.dom.node( $node ) : null;
+	}
+};

File diff suppressed because it is too large
+ 2032 - 0
web/js/ckeditor/_source/core/dom/range.js


+ 128 - 0
web/js/ckeditor/_source/core/dom/text.js

@@ -0,0 +1,128 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.dom.text} class, which represents
+ *		a DOM text node.
+ */
+
+/**
+ * Represents a DOM text node.
+ * @constructor
+ * @augments CKEDITOR.dom.node
+ * @param {Object|String} text A native DOM text node or a string containing
+ *		the text to use to create a new text node.
+ * @param {CKEDITOR.dom.document} [ownerDocument] The document that will contain
+ *		the node in case of new node creation. Defaults to the current document.
+ * @example
+ * var nativeNode = document.createTextNode( 'Example' );
+ * var text = CKEDITOR.dom.text( nativeNode );
+ * @example
+ * var text = CKEDITOR.dom.text( 'Example' );
+ */
+CKEDITOR.dom.text = function( text, ownerDocument )
+{
+	if ( typeof text == 'string' )
+		text = ( ownerDocument ? ownerDocument.$ : document ).createTextNode( text );
+
+	// Theoretically, we should call the base constructor here
+	// (not CKEDITOR.dom.node though). But, IE doesn't support expando
+	// properties on text node, so the features provided by domObject will not
+	// work for text nodes (which is not a big issue for us).
+	//
+	// CKEDITOR.dom.domObject.call( this, element );
+
+	/**
+	 * The native DOM text node represented by this class instance.
+	 * @type Object
+	 * @example
+	 * var element = new CKEDITOR.dom.text( 'Example' );
+	 * alert( element.$.nodeType );  // "3"
+	 */
+	this.$ = text;
+};
+
+CKEDITOR.dom.text.prototype = new CKEDITOR.dom.node();
+
+CKEDITOR.tools.extend( CKEDITOR.dom.text.prototype,
+	/** @lends CKEDITOR.dom.text.prototype */
+	{
+		/**
+		 * The node type. This is a constant value set to
+		 * {@link CKEDITOR.NODE_TEXT}.
+		 * @type Number
+		 * @example
+		 */
+		type : CKEDITOR.NODE_TEXT,
+
+		getLength : function()
+		{
+			return this.$.nodeValue.length;
+		},
+
+		getText : function()
+		{
+			return this.$.nodeValue;
+		},
+
+		setText : function( text )
+		{
+			this.$.nodeValue = text;
+		},
+
+		/**
+		 * Breaks this text node into two nodes at the specified offset,
+		 * keeping both in the tree as siblings. This node then only contains
+		 * all the content up to the offset point. A new text node, which is
+		 * inserted as the next sibling of this node, contains all the content
+		 * at and after the offset point. When the offset is equal to the
+		 * length of this node, the new node has no data.
+		 * @param {Number} The position at which to split, starting from zero.
+		 * @returns {CKEDITOR.dom.text} The new text node.
+		 */
+		split : function( offset )
+		{
+			// If the offset is after the last char, IE creates the text node
+			// on split, but don't include it into the DOM. So, we have to do
+			// that manually here.
+			if ( CKEDITOR.env.ie && offset == this.getLength() )
+			{
+				var next = this.getDocument().createText( '' );
+				next.insertAfter( this );
+				return next;
+			}
+
+			var doc = this.getDocument();
+			var retval = new CKEDITOR.dom.text( this.$.splitText( offset ), doc );
+
+			// IE BUG: IE8 does not update the childNodes array in DOM after splitText(),
+			// we need to make some DOM changes to make it update. (#3436)
+			if ( CKEDITOR.env.ie8 )
+			{
+				var workaround = new CKEDITOR.dom.text( '', doc );
+				workaround.insertAfter( retval );
+				workaround.remove();
+			}
+
+			return retval;
+		},
+
+		/**
+		 * Extracts characters from indexA up to but not including indexB.
+		 * @param {Number} indexA An integer between 0 and one less than the
+		 *		length of the text.
+		 * @param {Number} [indexB] An integer between 0 and the length of the
+		 *		string. If omitted, extracts characters to the end of the text.
+		 */
+		substring : function( indexA, indexB )
+		{
+			// We need the following check due to a Firefox bug
+			// https://bugzilla.mozilla.org/show_bug.cgi?id=458886
+			if ( typeof indexB != 'number' )
+				return this.$.nodeValue.substr( indexA );
+			else
+				return this.$.nodeValue.substring( indexA, indexB );
+		}
+	});

+ 96 - 0
web/js/ckeditor/_source/core/dom/window.js

@@ -0,0 +1,96 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.dom.document} class, which
+ *		represents a DOM document.
+ */
+
+/**
+ * Represents a DOM window.
+ * @constructor
+ * @augments CKEDITOR.dom.domObject
+ * @param {Object} domWindow A native DOM window.
+ * @example
+ * var document = new CKEDITOR.dom.window( window );
+ */
+CKEDITOR.dom.window = function( domWindow )
+{
+	CKEDITOR.dom.domObject.call( this, domWindow );
+};
+
+CKEDITOR.dom.window.prototype = new CKEDITOR.dom.domObject();
+
+CKEDITOR.tools.extend( CKEDITOR.dom.window.prototype,
+	/** @lends CKEDITOR.dom.window.prototype */
+	{
+		/**
+		 * Moves the selection focus to this window.
+		 * @function
+		 * @example
+		 * var win = new CKEDITOR.dom.window( window );
+		 * <b>win.focus()</b>;
+		 */
+		focus : function()
+		{
+			// Webkit is sometimes failed to focus iframe, blur it first(#3835).
+			if ( CKEDITOR.env.webkit && this.$.parent )
+				this.$.parent.focus();
+			this.$.focus();
+		},
+
+		/**
+		 * Gets the width and height of this window's viewable area.
+		 * @function
+		 * @returns {Object} An object with the "width" and "height"
+		 *		properties containing the size.
+		 * @example
+		 * var win = new CKEDITOR.dom.window( window );
+		 * var size = <b>win.getViewPaneSize()</b>;
+		 * alert( size.width );
+		 * alert( size.height );
+		 */
+		getViewPaneSize : function()
+		{
+			var doc = this.$.document,
+				stdMode = doc.compatMode == 'CSS1Compat';
+			return {
+				width : ( stdMode ? doc.documentElement.clientWidth : doc.body.clientWidth ) || 0,
+				height : ( stdMode ? doc.documentElement.clientHeight : doc.body.clientHeight ) || 0
+			};
+		},
+
+		/**
+		 * Gets the current position of the window's scroll.
+		 * @function
+		 * @returns {Object} An object with the "x" and "y" properties
+		 *		containing the scroll position.
+		 * @example
+		 * var win = new CKEDITOR.dom.window( window );
+		 * var pos = <b>win.getScrollPosition()</b>;
+		 * alert( pos.x );
+		 * alert( pos.y );
+		 */
+		getScrollPosition : function()
+		{
+			var $ = this.$;
+
+			if ( 'pageXOffset' in $ )
+			{
+				return {
+					x : $.pageXOffset || 0,
+					y : $.pageYOffset || 0
+				};
+			}
+			else
+			{
+				var doc = $.document;
+				return {
+					x : doc.documentElement.scrollLeft || doc.body.scrollLeft || 0,
+					y : doc.documentElement.scrollTop || doc.body.scrollTop || 0
+				};
+			}
+		}
+	});

File diff suppressed because it is too large
+ 266 - 0
web/js/ckeditor/_source/core/dtd.js


+ 186 - 0
web/js/ckeditor/_source/core/editor_basic.js

@@ -0,0 +1,186 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+if ( !CKEDITOR.editor )
+{
+	/**
+	 * No element is linked to the editor instance.
+	 * @constant
+	 * @example
+	 */
+	CKEDITOR.ELEMENT_MODE_NONE = 0;
+
+	/**
+	 * The element is to be replaced by the editor instance.
+	 * @constant
+	 * @example
+	 */
+	CKEDITOR.ELEMENT_MODE_REPLACE = 1;
+
+	/**
+	 * The editor is to be created inside the element.
+	 * @constant
+	 * @example
+	 */
+	CKEDITOR.ELEMENT_MODE_APPENDTO = 2;
+
+	/**
+	 * Creates an editor class instance. This constructor should be rarely
+	 * used, in favor of the {@link CKEDITOR} editor creation functions.
+	 * @ class Represents an editor instance.
+	 * @param {Object} instanceConfig Configuration values for this specific
+	 *		instance.
+	 * @param {CKEDITOR.dom.element} [element] The element linked to this
+	 *		instance.
+	 * @param {Number} [mode] The mode in which the element is linked to this
+	 *		instance. See {@link #elementMode}.
+	 * @param {String} [data] Since 3.3. Initial value for the instance.
+	 * @augments CKEDITOR.event
+	 * @example
+	 */
+	CKEDITOR.editor = function( instanceConfig, element, mode, data )
+	{
+		this._ =
+		{
+			// Save the config to be processed later by the full core code.
+			instanceConfig : instanceConfig,
+			element : element,
+			data : data
+		};
+
+		/**
+		 * The mode in which the {@link #element} is linked to this editor
+		 * instance. It can be any of the following values:
+		 * <ul>
+		 * <li>{@link CKEDITOR.ELEMENT_MODE_NONE}: No element is linked to the
+		 *		editor instance.</li>
+		 * <li>{@link CKEDITOR.ELEMENT_MODE_REPLACE}: The element is to be
+		 *		replaced by the editor instance.</li>
+		 * <li>{@link CKEDITOR.ELEMENT_MODE_APPENDTO}: The editor is to be
+		 *		created inside the element.</li>
+		 * </ul>
+		 * @name CKEDITOR.editor.prototype.elementMode
+		 * @type Number
+		 * @example
+		 * var editor = CKEDITOR.replace( 'editor1' );
+		 * alert( <b>editor.elementMode</b> );  "1"
+		 */
+		this.elementMode = mode || CKEDITOR.ELEMENT_MODE_NONE;
+
+		// Call the CKEDITOR.event constructor to initialize this instance.
+		CKEDITOR.event.call( this );
+
+		this._init();
+	};
+
+	/**
+	 * Replaces a &lt;textarea&gt; or a DOM element (DIV) with a CKEditor
+	 * instance. For textareas, the initial value in the editor will be the
+	 * textarea value. For DOM elements, their innerHTML will be used
+	 * instead. We recommend using TEXTAREA and DIV elements only. Do not use
+	 * this function directly. Use {@link CKEDITOR.replace} instead.
+	 * @param {Object|String} elementOrIdOrName The DOM element (textarea), its
+	 *		ID or name.
+	 * @param {Object} [config] The specific configurations to apply to this
+	 *		editor instance. Configurations set here will override global CKEditor
+	 *		settings.
+	 * @returns {CKEDITOR.editor} The editor instance created.
+	 * @example
+	 */
+	CKEDITOR.editor.replace = function( elementOrIdOrName, config )
+	{
+		var element = elementOrIdOrName;
+
+		if ( typeof element != 'object' )
+		{
+			// Look for the element by id. We accept any kind of element here.
+			element = document.getElementById( elementOrIdOrName );
+
+			// Elements that should go into head are unacceptable (#6791).
+			if ( element && element.tagName.toLowerCase() in {style:1,script:1,base:1,link:1,meta:1,title:1} )
+				element = null;
+
+			// If not found, look for elements by name. In this case we accept only
+			// textareas.
+			if ( !element )
+			{
+				var i = 0,
+					textareasByName	= document.getElementsByName( elementOrIdOrName );
+
+				while ( ( element = textareasByName[ i++ ] ) && element.tagName.toLowerCase() != 'textarea' )
+				{ /*jsl:pass*/ }
+			}
+
+			if ( !element )
+				throw '[CKEDITOR.editor.replace] The element with id or name "' + elementOrIdOrName + '" was not found.';
+		}
+
+		// Do not replace the textarea right now, just hide it. The effective
+		// replacement will be done by the _init function.
+		element.style.visibility = 'hidden';
+
+		// Create the editor instance.
+		return new CKEDITOR.editor( config, element, CKEDITOR.ELEMENT_MODE_REPLACE );
+	};
+
+	/**
+	 * Creates a new editor instance inside a specific DOM element. Do not use
+	 * this function directly. Use {@link CKEDITOR.appendTo} instead.
+	 * @param {Object|String} elementOrId The DOM element or its ID.
+	 * @param {Object} [config] The specific configurations to apply to this
+	 *		editor instance. Configurations set here will override global CKEditor
+	 *		settings.
+	 * @param {String} [data] Since 3.3. Initial value for the instance.
+	 * @returns {CKEDITOR.editor} The editor instance created.
+	 * @example
+	 */
+	CKEDITOR.editor.appendTo = function( elementOrId, config, data )
+	{
+		var element = elementOrId;
+		if ( typeof element != 'object' )
+		{
+			element = document.getElementById( elementOrId );
+
+			if ( !element )
+				throw '[CKEDITOR.editor.appendTo] The element with id "' + elementOrId + '" was not found.';
+		}
+
+		// Create the editor instance.
+		return new CKEDITOR.editor( config, element, CKEDITOR.ELEMENT_MODE_APPENDTO, data );
+	};
+
+	CKEDITOR.editor.prototype =
+	{
+		/**
+		 * Initializes the editor instance. This function will be overriden by the
+		 * full CKEDITOR.editor implementation (editor.js).
+		 * @private
+		 */
+		_init : function()
+		{
+			var pending = CKEDITOR.editor._pending || ( CKEDITOR.editor._pending = [] );
+			pending.push( this );
+		},
+
+		// Both fire and fireOnce will always pass this editor instance as the
+		// "editor" param in CKEDITOR.event.fire. So, we override it to do that
+		// automaticaly.
+
+		/** @ignore */
+		fire : function( eventName, data )
+		{
+			return CKEDITOR.event.prototype.fire.call( this, eventName, data, this );
+		},
+
+		/** @ignore */
+		fireOnce : function( eventName, data )
+		{
+			return CKEDITOR.event.prototype.fireOnce.call( this, eventName, data, this );
+		}
+	};
+
+	// "Inherit" (copy actually) from CKEDITOR.event.
+	CKEDITOR.event.implementOn( CKEDITOR.editor.prototype, true );
+}

+ 291 - 0
web/js/ckeditor/_source/core/env.js

@@ -0,0 +1,291 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.env} object, which constains
+ *		environment and browser information.
+ */
+
+if ( !CKEDITOR.env )
+{
+	/**
+	 * @namespace Environment and browser information.
+	 */
+	CKEDITOR.env = (function()
+	{
+		var agent = navigator.userAgent.toLowerCase();
+		var opera = window.opera;
+
+		var env =
+		/** @lends CKEDITOR.env */
+		{
+			/**
+			 * Indicates that CKEditor is running on Internet Explorer.
+			 * @type Boolean
+			 * @example
+			 * if ( CKEDITOR.env.ie )
+			 *     alert( "I'm on IE!" );
+			 */
+			ie		: /*@cc_on!@*/false,
+
+			/**
+			 * Indicates that CKEditor is running on Opera.
+			 * @type Boolean
+			 * @example
+			 * if ( CKEDITOR.env.opera )
+			 *     alert( "I'm on Opera!" );
+			 */
+			opera	: ( !!opera && opera.version ),
+
+			/**
+			 * Indicates that CKEditor is running on a WebKit based browser, like
+			 * Safari.
+			 * @type Boolean
+			 * @example
+			 * if ( CKEDITOR.env.webkit )
+			 *     alert( "I'm on WebKit!" );
+			 */
+			webkit	: ( agent.indexOf( ' applewebkit/' ) > -1 ),
+
+			/**
+			 * Indicates that CKEditor is running on Adobe AIR.
+			 * @type Boolean
+			 * @example
+			 * if ( CKEDITOR.env.air )
+			 *     alert( "I'm on AIR!" );
+			 */
+			air		: ( agent.indexOf( ' adobeair/' ) > -1 ),
+
+			/**
+			 * Indicates that CKEditor is running on Macintosh.
+			 * @type Boolean
+			 * @example
+			 * if ( CKEDITOR.env.mac )
+			 *     alert( "I love apples!" );
+			 */
+			mac	: ( agent.indexOf( 'macintosh' ) > -1 ),
+
+			/**
+			 * Indicates that CKEditor is running on a quirks mode environemnt.
+			 * @type Boolean
+			 * @example
+			 * if ( CKEDITOR.env.quirks )
+			 *     alert( "Nooooo!" );
+			 */
+			quirks : ( document.compatMode == 'BackCompat' ),
+
+			/**
+			 * Indicates that CKEditor is running on a mobile like environemnt.
+			 * @type Boolean
+			 * @example
+			 * if ( CKEDITOR.env.mobile )
+			 *     alert( "I'm running with CKEditor today!" );
+			 */
+			mobile : ( agent.indexOf( 'mobile' ) > -1 ),
+
+			/**
+			 * Indicates that the browser has a custom domain enabled. This has
+			 * been set with "document.domain".
+			 * @returns {Boolean} "true" if a custom domain is enabled.
+			 * @example
+			 * if ( CKEDITOR.env.isCustomDomain() )
+			 *     alert( "I'm in a custom domain!" );
+			 */
+			isCustomDomain : function()
+			{
+				if ( !this.ie )
+					return false;
+
+				var domain = document.domain,
+					hostname = window.location.hostname;
+
+				return domain != hostname &&
+					domain != ( '[' + hostname + ']' );	// IPv6 IP support (#5434)
+			},
+
+			/**
+			 * Indicates that page is running under an encrypted connection.
+			 * @returns {Boolean} "true" if the page has an encrypted connection.
+			 * @example
+			 * if ( CKEDITOR.env.secure )
+			 *     alert( "I'm in SSL!" );
+			 */
+			secure : location.protocol == 'https:'
+		};
+
+		/**
+		 * Indicates that CKEditor is running on a Gecko based browser, like
+		 * Firefox.
+		 * @name CKEDITOR.env.gecko
+		 * @type Boolean
+		 * @example
+		 * if ( CKEDITOR.env.gecko )
+		 *     alert( "I'm riding a gecko!" );
+		 */
+		env.gecko = ( navigator.product == 'Gecko' && !env.webkit && !env.opera );
+
+		var version = 0;
+
+		// Internet Explorer 6.0+
+		if ( env.ie )
+		{
+			version = parseFloat( agent.match( /msie (\d+)/ )[1] );
+
+			/**
+			 * Indicates that CKEditor is running on Internet Explorer 8.
+			 * @name CKEDITOR.env.ie8
+			 * @type Boolean
+			 * @example
+			 * if ( CKEDITOR.env.ie8 )
+			 *     alert( "I'm on IE8!" );
+			 */
+			env.ie8 = !!document.documentMode;
+
+			/**
+			 * Indicates that CKEditor is running on Internet Explorer 8 on
+			 * standards mode.
+			 * @name CKEDITOR.env.ie8Compat
+			 * @type Boolean
+			 * @example
+			 * if ( CKEDITOR.env.ie8Compat )
+			 *     alert( "Now I'm on IE8, for real!" );
+			 */
+			env.ie8Compat = document.documentMode == 8;
+
+			/**
+			 * Indicates that CKEditor is running on Internet Explorer 9's standards mode.
+			 * @name CKEDITOR.env.ie9Compat
+			 * @type Boolean
+			 * @example
+			 * if ( CKEDITOR.env.ie9Compat )
+			 *     alert( "IE9, the beauty of the web!" );
+			 */
+			env.ie9Compat = document.documentMode == 9;
+
+			/**
+			 * Indicates that CKEditor is running on an IE7-like environment, which
+			 * includes IE7 itself and IE8's IE7 document mode.
+			 * @name CKEDITOR.env.ie7Compat
+			 * @type Boolean
+			 * @example
+			 * if ( CKEDITOR.env.ie8Compat )
+			 *     alert( "I'm on IE7 or on an IE7 like IE8!" );
+			 */
+			env.ie7Compat = ( ( version == 7 && !document.documentMode )
+					|| document.documentMode == 7 );
+
+			/**
+			 * Indicates that CKEditor is running on an IE6-like environment, which
+			 * includes IE6 itself and IE7 and IE8 quirks mode.
+			 * @name CKEDITOR.env.ie6Compat
+			 * @type Boolean
+			 * @example
+			 * if ( CKEDITOR.env.ie6Compat )
+			 *     alert( "I'm on IE6 or quirks mode!" );
+			 */
+			env.ie6Compat = ( version < 7 || env.quirks );
+		}
+
+		// Gecko.
+		if ( env.gecko )
+		{
+			var geckoRelease = agent.match( /rv:([\d\.]+)/ );
+			if ( geckoRelease )
+			{
+				geckoRelease = geckoRelease[1].split( '.' );
+				version = geckoRelease[0] * 10000 + ( geckoRelease[1] || 0 ) * 100 + ( geckoRelease[2] || 0 ) * 1;
+			}
+		}
+
+		// Opera 9.50+
+		if ( env.opera )
+			version = parseFloat( opera.version() );
+
+		// Adobe AIR 1.0+
+		// Checked before Safari because AIR have the WebKit rich text editor
+		// features from Safari 3.0.4, but the version reported is 420.
+		if ( env.air )
+			version = parseFloat( agent.match( / adobeair\/(\d+)/ )[1] );
+
+		// WebKit 522+ (Safari 3+)
+		if ( env.webkit )
+			version = parseFloat( agent.match( / applewebkit\/(\d+)/ )[1] );
+
+		/**
+		 * Contains the browser version.<br />
+		 * <br />
+		 * For gecko based browsers (like Firefox) it contains the revision
+		 * number with first three parts concatenated with a padding zero
+		 * (e.g. for revision 1.9.0.2 we have 10900).<br />
+		 * <br />
+		 * For webkit based browser (like Safari and Chrome) it contains the
+		 * WebKit build version (e.g. 522).
+		 * @name CKEDITOR.env.version
+		 * @type Boolean
+		 * @example
+		 * if ( CKEDITOR.env.ie && <b>CKEDITOR.env.version</b> <= 6 )
+		 *     alert( "Ouch!" );
+		 */
+		env.version = version;
+
+		/**
+		 * Indicates that CKEditor is running on a compatible browser.
+		 * @name CKEDITOR.env.isCompatible
+		 * @type Boolean
+		 * @example
+		 * if ( CKEDITOR.env.isCompatible )
+		 *     alert( "Your browser is pretty cool!" );
+		 */
+		env.isCompatible =
+			!env.mobile && (
+			( env.ie && version >= 6 ) ||
+			( env.gecko && version >= 10801 ) ||
+			( env.opera && version >= 9.5 ) ||
+			( env.air && version >= 1 ) ||
+			( env.webkit && version >= 522 ) ||
+			false );
+
+		/**
+		 * The CSS class to be appended on the main UI containers, making it
+		 * easy to apply browser specific styles to it.
+		 * @name CKEDITOR.env.cssClass
+		 * @type String
+		 * @example
+		 * myDiv.className = CKEDITOR.env.cssClass;
+		 */
+		env.cssClass =
+			'cke_browser_' + (
+				env.ie ? 'ie' :
+				env.gecko ? 'gecko' :
+				env.opera ? 'opera' :
+				env.webkit ? 'webkit' :
+				'unknown' );
+
+		if ( env.quirks )
+			env.cssClass += ' cke_browser_quirks';
+
+		if ( env.ie )
+		{
+			env.cssClass += ' cke_browser_ie' + (
+				env.version < 7 ? '6' :
+				env.version >= 8 ? document.documentMode:
+				'7' );
+
+			if ( env.quirks )
+				env.cssClass += ' cke_browser_iequirks';
+		}
+
+		if ( env.gecko && version < 10900 )
+			env.cssClass += ' cke_browser_gecko18';
+
+		if ( env.air )
+			env.cssClass += ' cke_browser_air';
+
+		return env;
+	})();
+}
+
+// PACKAGER_RENAME( CKEDITOR.env )
+// PACKAGER_RENAME( CKEDITOR.env.ie )

+ 342 - 0
web/js/ckeditor/_source/core/event.js

@@ -0,0 +1,342 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.event} class, which serves as the
+ *		base for classes and objects that require event handling features.
+ */
+
+if ( !CKEDITOR.event )
+{
+	/**
+	 * Creates an event class instance. This constructor is rearely used, being
+	 * the {@link #.implementOn} function used in class prototypes directly
+	 * instead.
+	 * @class This is a base class for classes and objects that require event
+	 * handling features.<br />
+	 * <br />
+	 * Do not confuse this class with {@link CKEDITOR.dom.event} which is
+	 * instead used for DOM events. The CKEDITOR.event class implements the
+	 * internal event system used by the CKEditor to fire API related events.
+	 * @example
+	 */
+	CKEDITOR.event = function()
+	{};
+
+	/**
+	 * Implements the {@link CKEDITOR.event} features in an object.
+	 * @param {Object} targetObject The object into which implement the features.
+	 * @example
+	 * var myObject = { message : 'Example' };
+	 * <b>CKEDITOR.event.implementOn( myObject }</b>;
+	 * myObject.on( 'testEvent', function()
+	 *     {
+	 *         alert( this.message );  // "Example"
+	 *     });
+	 * myObject.fire( 'testEvent' );
+	 */
+	CKEDITOR.event.implementOn = function( targetObject )
+	{
+		var eventProto = CKEDITOR.event.prototype;
+
+		for ( var prop in eventProto )
+		{
+			if ( targetObject[ prop ] == undefined )
+				targetObject[ prop ] = eventProto[ prop ];
+		}
+	};
+
+	CKEDITOR.event.prototype = (function()
+	{
+		// Returns the private events object for a given object.
+		var getPrivate = function( obj )
+		{
+			var _ = ( obj.getPrivate && obj.getPrivate() ) || obj._ || ( obj._ = {} );
+			return _.events || ( _.events = {} );
+		};
+
+		var eventEntry = function( eventName )
+		{
+			this.name = eventName;
+			this.listeners = [];
+		};
+
+		eventEntry.prototype =
+		{
+			// Get the listener index for a specified function.
+			// Returns -1 if not found.
+			getListenerIndex : function( listenerFunction )
+			{
+				for ( var i = 0, listeners = this.listeners ; i < listeners.length ; i++ )
+				{
+					if ( listeners[i].fn == listenerFunction )
+						return i;
+				}
+				return -1;
+			}
+		};
+
+		return /** @lends CKEDITOR.event.prototype */ {
+			/**
+			 * Registers a listener to a specific event in the current object.
+			 * @param {String} eventName The event name to which listen.
+			 * @param {Function} listenerFunction The function listening to the
+			 *		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.
+			 * @param {Object} [listenerData] Data to be sent as the
+			 *		{@link CKEDITOR.eventInfo#listenerData} when calling the
+			 *		listener.
+			 * @param {Number} [priority] The listener priority. Lower priority
+			 *		listeners are called first. Listeners with the same priority
+			 *		value are called in registration order. Defaults to 10.
+			 * @example
+			 * someObject.on( 'someEvent', function()
+			 *     {
+			 *         alert( this == someObject );  // "true"
+			 *     });
+			 * @example
+			 * someObject.on( 'someEvent', function()
+			 *     {
+			 *         alert( this == anotherObject );  // "true"
+			 *     }
+			 *     , anotherObject );
+			 * @example
+			 * someObject.on( 'someEvent', function( event )
+			 *     {
+			 *         alert( event.listenerData );  // "Example"
+			 *     }
+			 *     , null, 'Example' );
+			 * @example
+			 * someObject.on( 'someEvent', function() { ... } );                   // 2nd called
+			 * someObject.on( 'someEvent', function() { ... }, null, null, 100 );  // 3rd called
+			 * someObject.on( 'someEvent', function() { ... }, null, null, 1 );    // 1st called
+			 */
+			on : function( eventName, listenerFunction, scopeObj, listenerData, priority )
+			{
+				// Get the event entry (create it if needed).
+				var events = getPrivate( this ),
+					event = events[ eventName ] || ( events[ eventName ] = new eventEntry( eventName ) );
+
+				if ( event.getListenerIndex( listenerFunction ) < 0 )
+				{
+					// Get the listeners.
+					var listeners = event.listeners;
+
+					// Fill the scope.
+					if ( !scopeObj )
+						scopeObj = this;
+
+					// Default the priority, if needed.
+					if ( isNaN( priority ) )
+						priority = 10;
+
+					var me = this;
+
+					// Create the function to be fired for this listener.
+					var listenerFirer = function( editor, publisherData, stopFn, cancelFn )
+					{
+						var ev =
+						{
+							name : eventName,
+							sender : this,
+							editor : editor,
+							data : publisherData,
+							listenerData : listenerData,
+							stop : stopFn,
+							cancel : cancelFn,
+							removeListener : function()
+							{
+								me.removeListener( eventName, listenerFunction );
+							}
+						};
+
+						listenerFunction.call( scopeObj, ev );
+
+						return ev.data;
+					};
+					listenerFirer.fn = listenerFunction;
+					listenerFirer.priority = priority;
+
+					// Search for the right position for this new listener, based on its
+					// priority.
+					for ( var i = listeners.length - 1 ; i >= 0 ; i-- )
+					{
+						// Find the item which should be before the new one.
+						if ( listeners[ i ].priority <= priority )
+						{
+							// Insert the listener in the array.
+							listeners.splice( i + 1, 0, listenerFirer );
+							return;
+						}
+					}
+
+					// If no position has been found (or zero length), put it in
+					// the front of list.
+					listeners.unshift( listenerFirer );
+				}
+			},
+
+			/**
+			 * Fires an specific event in the object. All registered listeners are
+			 * called at this point.
+			 * @function
+			 * @param {String} eventName The event name to fire.
+			 * @param {Object} [data] Data to be sent as the
+			 *		{@link CKEDITOR.eventInfo#data} when calling the
+			 *		listeners.
+			 * @param {CKEDITOR.editor} [editor] The editor instance to send as the
+			 *		{@link CKEDITOR.eventInfo#editor} when calling the
+			 *		listener.
+			 * @returns {Boolean|Object} A booloan indicating that the event is to be
+			 *		canceled, or data returned by one of the listeners.
+			 * @example
+			 * someObject.on( 'someEvent', function() { ... } );
+			 * someObject.on( 'someEvent', function() { ... } );
+			 * <b>someObject.fire( 'someEvent' )</b>;  // both listeners are called
+			 * @example
+			 * someObject.on( 'someEvent', function( event )
+			 *     {
+			 *         alert( event.data );  // "Example"
+			 *     });
+			 * <b>someObject.fire( 'someEvent', 'Example' )</b>;
+			 */
+			fire : (function()
+			{
+				// Create the function that marks the event as stopped.
+				var stopped = false;
+				var stopEvent = function()
+				{
+					stopped = true;
+				};
+
+				// Create the function that marks the event as canceled.
+				var canceled = false;
+				var cancelEvent = function()
+				{
+					canceled = true;
+				};
+
+				return function( eventName, data, editor )
+				{
+					// Get the event entry.
+					var event = getPrivate( this )[ eventName ];
+
+					// Save the previous stopped and cancelled states. We may
+					// be nesting fire() calls.
+					var previousStopped = stopped,
+						previousCancelled = canceled;
+
+					// Reset the stopped and canceled flags.
+					stopped = canceled = false;
+
+					if ( event )
+					{
+						var listeners = event.listeners;
+
+						if ( listeners.length )
+						{
+							// As some listeners may remove themselves from the
+							// event, the original array length is dinamic. So,
+							// let's make a copy of all listeners, so we are
+							// sure we'll call all of them.
+							listeners = listeners.slice( 0 );
+
+							// Loop through all listeners.
+							for ( var i = 0 ; i < listeners.length ; i++ )
+							{
+								// Call the listener, passing the event data.
+								var retData = listeners[i].call( this, editor, data, stopEvent, cancelEvent );
+
+								if ( typeof retData != 'undefined' )
+									data = retData;
+
+								// No further calls is stopped or canceled.
+								if ( stopped || canceled )
+									break;
+							}
+						}
+					}
+
+					var ret = canceled || ( typeof data == 'undefined' ? false : data );
+
+					// Restore the previous stopped and canceled states.
+					stopped = previousStopped;
+					canceled = previousCancelled;
+
+					return ret;
+				};
+			})(),
+
+			/**
+			 * Fires an specific event in the object, releasing all listeners
+			 * registered to that event. The same listeners are not called again on
+			 * successive calls of it or of {@link #fire}.
+			 * @param {String} eventName The event name to fire.
+			 * @param {Object} [data] Data to be sent as the
+			 *		{@link CKEDITOR.eventInfo#data} when calling the
+			 *		listeners.
+			 * @param {CKEDITOR.editor} [editor] The editor instance to send as the
+			 *		{@link CKEDITOR.eventInfo#editor} when calling the
+			 *		listener.
+			 * @returns {Boolean|Object} A booloan indicating that the event is to be
+			 *		canceled, or data returned by one of the listeners.
+			 * @example
+			 * someObject.on( 'someEvent', function() { ... } );
+			 * someObject.fire( 'someEvent' );  // above listener called
+			 * <b>someObject.fireOnce( 'someEvent' )</b>;  // above listener called
+			 * someObject.fire( 'someEvent' );  // no listeners called
+			 */
+			fireOnce : function( eventName, data, editor )
+			{
+				var ret = this.fire( eventName, data, editor );
+				delete getPrivate( this )[ eventName ];
+				return ret;
+			},
+
+			/**
+			 * Unregisters a listener function from being called at the specified
+			 *		event. No errors are thrown if the listener has not been
+			 *		registered previously.
+			 * @param {String} eventName The event name.
+			 * @param {Function} listenerFunction The listener function to unregister.
+			 * @example
+			 * var myListener = function() { ... };
+			 * someObject.on( 'someEvent', myListener );
+			 * someObject.fire( 'someEvent' );  // myListener called
+			 * <b>someObject.removeListener( 'someEvent', myListener )</b>;
+			 * someObject.fire( 'someEvent' );  // myListener not called
+			 */
+			removeListener : function( eventName, listenerFunction )
+			{
+				// Get the event entry.
+				var event = getPrivate( this )[ eventName ];
+
+				if ( event )
+				{
+					var index = event.getListenerIndex( listenerFunction );
+					if ( index >= 0 )
+						event.listeners.splice( index, 1 );
+				}
+			},
+
+			/**
+			 * Checks if there is any listener registered to a given event.
+			 * @param {String} eventName The event name.
+			 * @example
+			 * var myListener = function() { ... };
+			 * someObject.on( 'someEvent', myListener );
+			 * alert( someObject.<b>hasListeners( 'someEvent' )</b> );  // "true"
+			 * alert( someObject.<b>hasListeners( 'noEvent' )</b> );    // "false"
+			 */
+			hasListeners : function( eventName )
+			{
+				var event = getPrivate( this )[ eventName ];
+				return ( event && event.listeners.length > 0 ) ;
+			}
+		};
+	})();
+}

+ 120 - 0
web/js/ckeditor/_source/core/eventInfo.js

@@ -0,0 +1,120 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the "virtual" {@link CKEDITOR.eventInfo} class, which
+ *		contains the defintions of the event object passed to event listeners.
+ *		This file is for documentation purposes only.
+ */
+
+/**
+ * (Virtual Class) Do not call this constructor. This class is not really part
+ * of the API.
+ * @class Virtual class that illustrates the features of the event object to be
+ * passed to event listeners by a {@link CKEDITOR.event} based object.
+ * @name CKEDITOR.eventInfo
+ * @example
+ * // Do not do this.
+ * var myEvent = new CKEDITOR.eventInfo();  // Error: CKEDITOR.eventInfo is undefined
+ */
+
+/**
+ * The event name.
+ * @name CKEDITOR.eventInfo.prototype.name
+ * @field
+ * @type String
+ * @example
+ * someObject.on( 'someEvent', function( event )
+ *     {
+ *         alert( <b>event.name</b> );  // "someEvent"
+ *     });
+ * someObject.fire( 'someEvent' );
+ */
+
+/**
+ * The object that publishes (sends) the event.
+ * @name CKEDITOR.eventInfo.prototype.sender
+ * @field
+ * @type Object
+ * @example
+ * someObject.on( 'someEvent', function( event )
+ *     {
+ *         alert( <b>event.sender</b> == someObject );  // "true"
+ *     });
+ * someObject.fire( 'someEvent' );
+ */
+
+/**
+ * The editor instance that holds the sender. May be the same as sender. May be
+ * null if the sender is not part of an editor instance, like a component
+ * running in standalone mode.
+ * @name CKEDITOR.eventInfo.prototype.editor
+ * @field
+ * @type CKEDITOR.editor
+ * @example
+ * myButton.on( 'someEvent', function( event )
+ *     {
+ *         alert( <b>event.editor</b> == myEditor );  // "true"
+ *     });
+ * myButton.fire( 'someEvent', null, <b>myEditor</b> );
+ */
+
+/**
+ * Any kind of additional data. Its format and usage is event dependent.
+ * @name CKEDITOR.eventInfo.prototype.data
+ * @field
+ * @type Object
+ * @example
+ * someObject.on( 'someEvent', function( event )
+ *     {
+ *         alert( <b>event.data</b> );  // "Example"
+ *     });
+ * someObject.fire( 'someEvent', <b>'Example'</b> );
+ */
+
+/**
+ * Any extra data appended during the listener registration.
+ * @name CKEDITOR.eventInfo.prototype.listenerData
+ * @field
+ * @type Object
+ * @example
+ * someObject.on( 'someEvent', function( event )
+ *     {
+ *         alert( <b>event.listenerData</b> );  // "Example"
+ *     }
+ *     , null, <b>'Example'</b> );
+ */
+
+/**
+ * Indicates that no further listeners are to be called.
+ * @name CKEDITOR.eventInfo.prototype.stop
+ * @function
+ * @example
+ * someObject.on( 'someEvent', function( event )
+ *     {
+ *         <b>event.stop()</b>;
+ *     });
+ * someObject.on( 'someEvent', function( event )
+ *     {
+ *         // This one will not be called.
+ *     });
+ * alert( someObject.fire( 'someEvent' ) );  // "false"
+ */
+
+/**
+ * Indicates that the event is to be cancelled (if cancelable).
+ * @name CKEDITOR.eventInfo.prototype.cancel
+ * @function
+ * @example
+ * someObject.on( 'someEvent', function( event )
+ *     {
+ *         <b>event.cancel()</b>;
+ *     });
+ * someObject.on( 'someEvent', function( event )
+ *     {
+ *         // This one will not be called.
+ *     });
+ * alert( someObject.fire( 'someEvent' ) );  // "true"
+ */

+ 152 - 0
web/js/ckeditor/_source/core/focusmanager.js

@@ -0,0 +1,152 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.focusManager} class, which is used
+ *		to handle the focus on editor instances..
+ */
+
+/**
+ * Creates a focusManager class instance.
+ * @class Manages the focus activity in an editor instance. This class is to be
+ * used mainly by UI elements coders when adding interface elements that need
+ * to set the focus state of the editor.
+ * @param {CKEDITOR.editor} editor The editor instance.
+ * @example
+ * var focusManager = <b>new CKEDITOR.focusManager( editor )</b>;
+ * focusManager.focus();
+ */
+CKEDITOR.focusManager = function( editor )
+{
+	if ( editor.focusManager )
+		return editor.focusManager;
+
+	/**
+	 * Indicates that the editor instance has focus.
+	 * @type Boolean
+	 * @example
+	 * alert( CKEDITOR.instances.editor1.focusManager.hasFocus );  // e.g "true"
+	 */
+	this.hasFocus = false;
+
+	/**
+	 * Object used to hold private stuff.
+	 * @private
+	 */
+	this._ =
+	{
+		editor : editor
+	};
+
+	return this;
+};
+
+CKEDITOR.focusManager.prototype =
+{
+	/**
+	 * Used to indicate that the editor instance has the focus.<br />
+	 * <br />
+	 * Note that this function will not explicitelly set the focus in the
+	 * editor (for example, making the caret blinking on it). Use
+	 * {@link CKEDITOR.editor#focus} for it instead.
+	 * @example
+	 * var editor = CKEDITOR.instances.editor1;
+	 * <b>editor.focusManager.focus()</b>;
+	 */
+	focus : function()
+	{
+		if ( this._.timer )
+			clearTimeout( this._.timer );
+
+		if ( !this.hasFocus )
+		{
+			// If another editor has the current focus, we first "blur" it. In
+			// this way the events happen in a more logical sequence, like:
+			//		"focus 1" > "blur 1" > "focus 2"
+			// ... instead of:
+			//		"focus 1" > "focus 2" > "blur 1"
+			if ( CKEDITOR.currentInstance )
+				CKEDITOR.currentInstance.focusManager.forceBlur();
+
+			var editor = this._.editor;
+
+			editor.container.getChild( 1 ).addClass( 'cke_focus' );
+
+			this.hasFocus = true;
+			editor.fire( 'focus' );
+		}
+	},
+
+	/**
+	 * Used to indicate that the editor instance has lost the focus.<br />
+	 * <br />
+	 * Note that this functions acts asynchronously with a delay of 100ms to
+	 * avoid subsequent blur/focus effects. If you want the "blur" to happen
+	 * immediately, use the {@link #forceBlur} function instead.
+	 * @example
+	 * var editor = CKEDITOR.instances.editor1;
+	 * <b>editor.focusManager.blur()</b>;
+	 */
+	blur : function()
+	{
+		var focusManager = this;
+
+		if ( focusManager._.timer )
+			clearTimeout( focusManager._.timer );
+
+		focusManager._.timer = setTimeout(
+			function()
+			{
+				delete focusManager._.timer;
+				focusManager.forceBlur();
+			}
+			, 100 );
+	},
+
+	/**
+	 * Used to indicate that the editor instance has lost the focus. Unlike
+	 * {@link #blur}, this function is synchronous, marking the instance as
+	 * "blured" immediately.
+	 * @example
+	 * var editor = CKEDITOR.instances.editor1;
+	 * <b>editor.focusManager.forceBlur()</b>;
+	 */
+	forceBlur : function()
+	{
+		if ( this.hasFocus )
+		{
+			var editor = this._.editor;
+
+			editor.container.getChild( 1 ).removeClass( 'cke_focus' );
+
+			this.hasFocus = false;
+			editor.fire( 'blur' );
+		}
+	}
+};
+
+/**
+ * Fired when the editor instance receives the input focus.
+ * @name CKEDITOR.editor#focus
+ * @event
+ * @param {CKEDITOR.editor} editor The editor instance.
+ * @example
+ * editor.on( 'focus', function( e )
+ *     {
+ *         alert( 'The editor named ' + e.editor.name + ' is now focused' );
+ *     });
+ */
+
+/**
+ * Fired when the editor instance loses the input focus.
+ * @name CKEDITOR.editor#blur
+ * @event
+ * @param {CKEDITOR.editor} editor The editor instance.
+ * @example
+ * editor.on( 'blur', function( e )
+ *     {
+ *         alert( 'The editor named ' + e.editor.name + ' lost the focus' );
+ *     });
+ */

+ 224 - 0
web/js/ckeditor/_source/core/htmlparser.js

@@ -0,0 +1,224 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * Creates a {@link CKEDITOR.htmlParser} class instance.
+ * @class Provides an "event like" system to parse strings of HTML data.
+ * @example
+ * var parser = new CKEDITOR.htmlParser();
+ * parser.onTagOpen = function( tagName, attributes, selfClosing )
+ *     {
+ *         alert( tagName );
+ *     };
+ * parser.parse( '&lt;p&gt;Some &lt;b&gt;text&lt;/b&gt;.&lt;/p&gt;' );
+ */
+CKEDITOR.htmlParser = function()
+{
+	this._ =
+	{
+		htmlPartsRegex : new RegExp( '<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\s>]+)\\s*((?:(?:"[^"]*")|(?:\'[^\']*\')|[^"\'>])*)\\/?>))', 'g' )
+	};
+};
+
+(function()
+{
+	var attribsRegex	= /([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,
+		emptyAttribs	= {checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};
+
+	CKEDITOR.htmlParser.prototype =
+	{
+		/**
+		 * Function to be fired when a tag opener is found. This function
+		 * should be overriden when using this class.
+		 * @param {String} tagName The tag name. The name is guarantted to be
+		 *		lowercased.
+		 * @param {Object} attributes An object containing all tag attributes. Each
+		 *		property in this object represent and attribute name and its
+		 *		value is the attribute value.
+		 * @param {Boolean} selfClosing true if the tag closes itself, false if the
+		 * 		tag doesn't.
+		 * @example
+		 * var parser = new CKEDITOR.htmlParser();
+		 * parser.onTagOpen = function( tagName, attributes, selfClosing )
+		 *     {
+		 *         alert( tagName );  // e.g. "b"
+		 *     });
+		 * parser.parse( "&lt;!-- Example --&gt;&lt;b&gt;Hello&lt;/b&gt;" );
+		 */
+		onTagOpen	: function() {},
+
+		/**
+		 * Function to be fired when a tag closer is found. This function
+		 * should be overriden when using this class.
+		 * @param {String} tagName The tag name. The name is guarantted to be
+		 *		lowercased.
+		 * @example
+		 * var parser = new CKEDITOR.htmlParser();
+		 * parser.onTagClose = function( tagName )
+		 *     {
+		 *         alert( tagName );  // e.g. "b"
+		 *     });
+		 * parser.parse( "&lt;!-- Example --&gt;&lt;b&gt;Hello&lt;/b&gt;" );
+		 */
+		onTagClose	: function() {},
+
+		/**
+		 * Function to be fired when text is found. This function
+		 * should be overriden when using this class.
+		 * @param {String} text The text found.
+		 * @example
+		 * var parser = new CKEDITOR.htmlParser();
+		 * parser.onText = function( text )
+		 *     {
+		 *         alert( text );  // e.g. "Hello"
+		 *     });
+		 * parser.parse( "&lt;!-- Example --&gt;&lt;b&gt;Hello&lt;/b&gt;" );
+		 */
+		onText		: function() {},
+
+		/**
+		 * Function to be fired when CDATA section is found. This function
+		 * should be overriden when using this class.
+		 * @param {String} cdata The CDATA been found.
+		 * @example
+		 * var parser = new CKEDITOR.htmlParser();
+		 * parser.onCDATA = function( cdata )
+		 *     {
+		 *         alert( cdata );  // e.g. "var hello;"
+		 *     });
+		 * parser.parse( "&lt;script&gt;var hello;&lt;/script&gt;" );
+		 */
+		onCDATA		: function() {},
+
+		/**
+		 * Function to be fired when a commend is found. This function
+		 * should be overriden when using this class.
+		 * @param {String} comment The comment text.
+		 * @example
+		 * var parser = new CKEDITOR.htmlParser();
+		 * parser.onComment = function( comment )
+		 *     {
+		 *         alert( comment );  // e.g. " Example "
+		 *     });
+		 * parser.parse( "&lt;!-- Example --&gt;&lt;b&gt;Hello&lt;/b&gt;" );
+		 */
+		onComment	: function() {},
+
+		/**
+		 * Parses text, looking for HTML tokens, like tag openers or closers,
+		 * or comments. This function fires the onTagOpen, onTagClose, onText
+		 * and onComment function during its execution.
+		 * @param {String} html The HTML to be parsed.
+		 * @example
+		 * var parser = new CKEDITOR.htmlParser();
+		 * // The onTagOpen, onTagClose, onText and onComment should be overriden
+		 * // at this point.
+		 * parser.parse( "&lt;!-- Example --&gt;&lt;b&gt;Hello&lt;/b&gt;" );
+		 */
+		parse : function( html )
+		{
+			var parts,
+				tagName,
+				nextIndex = 0,
+				cdata;	// The collected data inside a CDATA section.
+
+			while ( ( parts = this._.htmlPartsRegex.exec( html ) ) )
+			{
+				var tagIndex = parts.index;
+				if ( tagIndex > nextIndex )
+				{
+					var text = html.substring( nextIndex, tagIndex );
+
+					if ( cdata )
+						cdata.push( text );
+					else
+						this.onText( text );
+				}
+
+				nextIndex = this._.htmlPartsRegex.lastIndex;
+
+				/*
+				 "parts" is an array with the following items:
+					0 : The entire match for opening/closing tags and comments.
+					1 : Group filled with the tag name for closing tags.
+					2 : Group filled with the comment text.
+					3 : Group filled with the tag name for opening tags.
+					4 : Group filled with the attributes part of opening tags.
+				 */
+
+				// Closing tag
+				if ( ( tagName = parts[ 1 ] ) )
+				{
+					tagName = tagName.toLowerCase();
+
+					if ( cdata && CKEDITOR.dtd.$cdata[ tagName ] )
+					{
+						// Send the CDATA data.
+						this.onCDATA( cdata.join('') );
+						cdata = null;
+					}
+
+					if ( !cdata )
+					{
+						this.onTagClose( tagName );
+						continue;
+					}
+				}
+
+				// If CDATA is enabled, just save the raw match.
+				if ( cdata )
+				{
+					cdata.push( parts[ 0 ] );
+					continue;
+				}
+
+				// Opening tag
+				if ( ( tagName = parts[ 3 ] ) )
+				{
+					tagName = tagName.toLowerCase();
+
+					// There are some tag names that can break things, so let's
+					// simply ignore them when parsing. (#5224)
+					if ( /="/.test( tagName ) )
+						continue;
+
+					var attribs = {},
+						attribMatch,
+						attribsPart = parts[ 4 ],
+						selfClosing = !!( attribsPart && attribsPart.charAt( attribsPart.length - 1 ) == '/' );
+
+					if ( attribsPart )
+					{
+						while ( ( attribMatch = attribsRegex.exec( attribsPart ) ) )
+						{
+							var attName = attribMatch[1].toLowerCase(),
+								attValue = attribMatch[2] || attribMatch[3] || attribMatch[4] || '';
+
+							if ( !attValue && emptyAttribs[ attName ] )
+								attribs[ attName ] = attName;
+							else
+								attribs[ attName ] = attValue;
+						}
+					}
+
+					this.onTagOpen( tagName, attribs, selfClosing );
+
+					// Open CDATA mode when finding the appropriate tags.
+					if ( !cdata && CKEDITOR.dtd.$cdata[ tagName ] )
+						cdata = [];
+
+					continue;
+				}
+
+				// Comment
+				if ( ( tagName = parts[ 2 ] ) )
+					this.onComment( tagName );
+			}
+
+			if ( html.length > nextIndex )
+				this.onText( html.substring( nextIndex, html.length ) );
+		}
+	};
+})();

+ 43 - 0
web/js/ckeditor/_source/core/htmlparser/cdata.js

@@ -0,0 +1,43 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function()
+{
+
+	/**
+	 * A lightweight representation of HTML text.
+	 * @constructor
+	 * @example
+	 */
+	CKEDITOR.htmlParser.cdata = function( value )
+	{
+		/**
+		 * The CDATA value.
+		 * @type String
+		 * @example
+		 */
+		this.value = value;
+	};
+
+	CKEDITOR.htmlParser.cdata.prototype =
+	{
+		/**
+		 * CDATA has the same type as {@link CKEDITOR.htmlParser.text} This is
+		 * a constant value set to {@link CKEDITOR.NODE_TEXT}.
+		 * @type Number
+		 * @example
+		 */
+		type : CKEDITOR.NODE_TEXT,
+
+		/**
+		 * Writes write the CDATA with no special manipulations.
+		 * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML.
+		 */
+		writeHtml : function( writer )
+		{
+			writer.write( this.value );
+		}
+	};
+})();

+ 60 - 0
web/js/ckeditor/_source/core/htmlparser/comment.js

@@ -0,0 +1,60 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * A lightweight representation of an HTML comment.
+ * @constructor
+ * @example
+ */
+CKEDITOR.htmlParser.comment = function( value )
+{
+	/**
+	 * The comment text.
+	 * @type String
+	 * @example
+	 */
+	this.value = value;
+
+	/** @private */
+	this._ =
+	{
+		isBlockLike : false
+	};
+};
+
+CKEDITOR.htmlParser.comment.prototype =
+{
+	/**
+	 * The node type. This is a constant value set to {@link CKEDITOR.NODE_COMMENT}.
+	 * @type Number
+	 * @example
+	 */
+	type : CKEDITOR.NODE_COMMENT,
+
+	/**
+	 * Writes the HTML representation of this comment to a CKEDITOR.htmlWriter.
+	 * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML.
+	 * @example
+	 */
+	writeHtml : function( writer, filter )
+	{
+		var comment = this.value;
+
+		if ( filter )
+		{
+			if ( !( comment = filter.onComment( comment, this ) ) )
+				return;
+
+			if ( typeof comment != 'string' )
+			{
+				comment.parent = this.parent;
+				comment.writeHtml( writer, filter );
+				return;
+			}
+		}
+
+		writer.comment( comment );
+	}
+};

+ 497 - 0
web/js/ckeditor/_source/core/htmlparser/fragment.js

@@ -0,0 +1,497 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * A lightweight representation of an HTML DOM structure.
+ * @constructor
+ * @example
+ */
+CKEDITOR.htmlParser.fragment = function()
+{
+	/**
+	 * The nodes contained in the root of this fragment.
+	 * @type Array
+	 * @example
+	 * var fragment = CKEDITOR.htmlParser.fragment.fromHtml( '<b>Sample</b> Text' );
+	 * alert( fragment.children.length );  "2"
+	 */
+	this.children = [];
+
+	/**
+	 * Get the fragment parent. Should always be null.
+	 * @type Object
+	 * @default null
+	 * @example
+	 */
+	this.parent = null;
+
+	/** @private */
+	this._ =
+	{
+		isBlockLike : true,
+		hasInlineStarted : false
+	};
+};
+
+(function()
+{
+	// Block-level elements whose internal structure should be respected during
+	// parser fixing.
+	var nonBreakingBlocks = CKEDITOR.tools.extend( { table:1,ul:1,ol:1,dl:1 }, CKEDITOR.dtd.table, CKEDITOR.dtd.ul, CKEDITOR.dtd.ol, CKEDITOR.dtd.dl );
+
+	// IE < 8 don't output the close tag on definition list items. (#6975)
+	var optionalCloseTags = CKEDITOR.env.ie && CKEDITOR.env.version < 8 ? { dd : 1, dt :1 } : {};
+
+	var listBlocks = { ol:1, ul:1 };
+
+	// Dtd of the fragment element, basically it accept anything except for intermediate structure, e.g. orphan <li>.
+	var rootDtd = CKEDITOR.tools.extend( {}, { html: 1 }, CKEDITOR.dtd.html, CKEDITOR.dtd.body, CKEDITOR.dtd.head, { style:1,script:1 } );
+
+	/**
+	 * Creates a {@link CKEDITOR.htmlParser.fragment} from an HTML string.
+	 * @param {String} fragmentHtml The HTML to be parsed, filling the fragment.
+	 * @param {Number} [fixForBody=false] Wrap body with specified element if needed.
+	 * @param {CKEDITOR.htmlParser.element} contextNode Parse the html as the content of this element.
+	 * @returns CKEDITOR.htmlParser.fragment The fragment created.
+	 * @example
+	 * var fragment = CKEDITOR.htmlParser.fragment.fromHtml( '<b>Sample</b> Text' );
+	 * alert( fragment.children[0].name );  "b"
+	 * alert( fragment.children[1].value );  " Text"
+	 */
+	CKEDITOR.htmlParser.fragment.fromHtml = function( fragmentHtml, fixForBody, contextNode )
+	{
+		var parser = new CKEDITOR.htmlParser(),
+			fragment = contextNode || new CKEDITOR.htmlParser.fragment(),
+			pendingInline = [],
+			pendingBRs = [],
+			currentNode = fragment,
+		    // Indicate we're inside a <pre> element, spaces should be touched differently.
+			inPre = false;
+
+		function checkPending( newTagName )
+		{
+			var pendingBRsSent;
+
+			if ( pendingInline.length > 0 )
+			{
+				for ( var i = 0 ; i < pendingInline.length ; i++ )
+				{
+					var pendingElement = pendingInline[ i ],
+						pendingName = pendingElement.name,
+						pendingDtd = CKEDITOR.dtd[ pendingName ],
+						currentDtd = currentNode.name && CKEDITOR.dtd[ currentNode.name ];
+
+					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();
+
+						// Add it to the current node and make it the current,
+						// so the new element will be added inside of it.
+						pendingElement.parent = currentNode;
+						currentNode = pendingElement;
+
+						// Remove the pending element (back the index by one
+						// to properly process the next entry).
+						pendingInline.splice( i, 1 );
+						i--;
+					}
+				}
+			}
+		}
+
+		function sendPendingBRs()
+		{
+			while ( pendingBRs.length )
+				currentNode.add( pendingBRs.shift() );
+		}
+
+		/*
+		* Beside of simply append specified element to target, this function also takes
+		* care of other dirty lifts like forcing block in body, trimming spaces at
+		* the block boundaries etc.
+		*
+		* @param {Element} element  The element to be added as the last child of {@link target}.
+		* @param {Element} target The parent element to relieve the new node.
+		* @param {Boolean} [moveCurrent=false] Don't change the "currentNode" global unless
+		* there's a return point node specified on the element, otherwise move current onto {@link target} node.
+		 */
+		function addElement( element, target, moveCurrent )
+		{
+			// Ignore any element that has already been added.
+			if ( element.previous !== undefined )
+				return;
+
+			target = target || currentNode || fragment;
+
+			// Current element might be mangled by fix body below,
+			// save it for restore later.
+			var savedCurrent = currentNode;
+
+			// If the target is the fragment and this inline element can't go inside
+			// body (if fixForBody).
+			if ( fixForBody && ( !target.type || target.name == 'body' ) )
+			{
+				var elementName, realElementName;
+				if ( element.attributes
+					 && ( realElementName =
+						  element.attributes[ 'data-cke-real-element-type' ] ) )
+					elementName = realElementName;
+				else
+					elementName =  element.name;
+
+				if ( elementName && !( elementName in CKEDITOR.dtd.$body || elementName == 'body' || element.isOrphan ) )
+				{
+					// Create a <p> in the fragment.
+					currentNode = target;
+					parser.onTagOpen( fixForBody, {} );
+
+					// The new target now is the <p>.
+					element.returnPoint = target = currentNode;
+				}
+			}
+
+			// Rtrim empty spaces on block end boundary. (#3585)
+			if ( element._.isBlockLike
+				 && element.name != 'pre' )
+			{
+
+				var length = element.children.length,
+					lastChild = element.children[ length - 1 ],
+					text;
+				if ( lastChild && lastChild.type == CKEDITOR.NODE_TEXT )
+				{
+					if ( !( text = CKEDITOR.tools.rtrim( lastChild.value ) ) )
+						element.children.length = length -1;
+					else
+						lastChild.value = text;
+				}
+			}
+
+			target.add( element );
+
+			if ( element.returnPoint )
+			{
+				currentNode = element.returnPoint;
+				delete element.returnPoint;
+			}
+			else
+				currentNode = moveCurrent ? target : savedCurrent;
+		}
+
+		parser.onTagOpen = function( tagName, attributes, selfClosing, optionalClose )
+		{
+			var element = new CKEDITOR.htmlParser.element( tagName, attributes );
+
+			// "isEmpty" will be always "false" for unknown elements, so we
+			// must force it if the parser has identified it as a selfClosing tag.
+			if ( element.isUnknown && selfClosing )
+				element.isEmpty = true;
+
+			// Check for optional closed elements, including browser quirks and manually opened blocks.
+			element.isOptionalClose = tagName in optionalCloseTags || optionalClose;
+
+			// This is a tag to be removed if empty, so do not add it immediately.
+			if ( CKEDITOR.dtd.$removeEmpty[ tagName ] )
+			{
+				pendingInline.push( element );
+				return;
+			}
+			else if ( tagName == 'pre' )
+				inPre = true;
+			else if ( tagName == 'br' && inPre )
+			{
+				currentNode.add( new CKEDITOR.htmlParser.text( '\n' ) );
+				return;
+			}
+
+			if ( tagName == 'br' )
+			{
+				pendingBRs.push( element );
+				return;
+			}
+
+			while( 1 )
+			{
+				var currentName = currentNode.name;
+
+				var currentDtd = currentName ? ( CKEDITOR.dtd[ currentName ]
+						|| ( currentNode._.isBlockLike ? CKEDITOR.dtd.div : CKEDITOR.dtd.span ) )
+						: rootDtd;
+
+				// If the element cannot be child of the current element.
+				if ( !element.isUnknown && !currentNode.isUnknown && !currentDtd[ tagName ] )
+				{
+					// Current node doesn't have a close tag, time for a close
+					// as this element isn't fit in. (#7497)
+					if ( currentNode.isOptionalClose )
+						parser.onTagClose( currentName );
+					// Fixing malformed nested lists by moving it into a previous list item. (#3828)
+					else if ( tagName in listBlocks
+						&& currentName in listBlocks )
+					{
+						var children = currentNode.children,
+							lastChild = children[ children.length - 1 ];
+
+						// Establish the list item if it's not existed.
+						if ( !( lastChild && lastChild.name == 'li' ) )
+							addElement( ( lastChild = new CKEDITOR.htmlParser.element( 'li' ) ), currentNode );
+
+						!element.returnPoint && ( element.returnPoint = currentNode );
+						currentNode = lastChild;
+					}
+					// Establish new list root for orphan list items.
+					else if ( tagName in CKEDITOR.dtd.$listItem && currentName != tagName )
+						parser.onTagOpen( tagName == 'li' ? 'ul' : 'dl', {}, 0, 1 );
+					// We're inside a structural block like table and list, AND the incoming element
+					// is not of the same type (e.g. <td>td1<td>td2</td>), we simply add this new one before it,
+					// and most importantly, return back to here once this element is added,
+					// e.g. <table><tr><td>td1</td><p>p1</p><td>td2</td></tr></table>
+					else if ( currentName in nonBreakingBlocks && currentName != tagName )
+					{
+						!element.returnPoint && ( element.returnPoint = currentNode );
+						currentNode = currentNode.parent;
+					}
+					else
+					{
+						// The current element is an inline element, which
+						// need to be continued even after the close, so put
+						// it in the pending list.
+						if ( currentName in CKEDITOR.dtd.$inline )
+							pendingInline.unshift( currentNode );
+
+						// The most common case where we just need to close the
+						// current one and append the new one to the parent.
+						if ( currentNode.parent )
+							addElement( currentNode, currentNode.parent, 1 );
+						// We've tried our best to fix the embarrassment here, while
+						// this element still doesn't find it's parent, mark it as
+						// orphan and show our tolerance to it.
+						else
+						{
+							element.isOrphan = 1;
+							break;
+						}
+					}
+				}
+				else
+					break;
+			}
+
+			checkPending( tagName );
+			sendPendingBRs();
+
+			element.parent = currentNode;
+
+			if ( element.isEmpty )
+				addElement( element );
+			else
+				currentNode = element;
+		};
+
+		parser.onTagClose = function( tagName )
+		{
+			// Check if there is any pending tag to be closed.
+			for ( var i = pendingInline.length - 1 ; i >= 0 ; i-- )
+			{
+				// If found, just remove it from the list.
+				if ( tagName == pendingInline[ i ].name )
+				{
+					pendingInline.splice( i, 1 );
+					return;
+				}
+			}
+
+			var pendingAdd = [],
+				newPendingInline = [],
+				candidate = currentNode;
+
+			while ( candidate != fragment && candidate.name != tagName )
+			{
+				// If this is an inline element, add it to the pending list, if we're
+				// really closing one of the parents element later, they will continue
+				// after it.
+				if ( !candidate._.isBlockLike )
+					newPendingInline.unshift( candidate );
+
+				// This node should be added to it's parent at this point. But,
+				// it should happen only if the closing tag is really closing
+				// one of the nodes. So, for now, we just cache it.
+				pendingAdd.push( candidate );
+
+				// Make sure return point is properly restored.
+				candidate = candidate.returnPoint || candidate.parent;
+			}
+
+			if ( candidate != fragment )
+			{
+				// Add all elements that have been found in the above loop.
+				for ( i = 0 ; i < pendingAdd.length ; i++ )
+				{
+					var node = pendingAdd[ i ];
+					addElement( node, node.parent );
+				}
+
+				currentNode = candidate;
+
+				if ( currentNode.name == 'pre' )
+					inPre = false;
+
+				if ( candidate._.isBlockLike )
+					sendPendingBRs();
+
+				addElement( candidate, candidate.parent );
+
+				// The parent should start receiving new nodes now, except if
+				// addElement changed the currentNode.
+				if ( candidate == currentNode )
+					currentNode = currentNode.parent;
+
+				pendingInline = pendingInline.concat( newPendingInline );
+			}
+
+			if ( tagName == 'body' )
+				fixForBody = false;
+		};
+
+		parser.onText = function( text )
+		{
+			// Trim empty spaces at beginning of text contents except <pre>.
+			if ( ( !currentNode._.hasInlineStarted || pendingBRs.length ) && !inPre )
+			{
+				text = CKEDITOR.tools.ltrim( text );
+
+				if ( text.length === 0 )
+					return;
+			}
+
+			sendPendingBRs();
+			checkPending();
+
+			if ( fixForBody
+				 && ( !currentNode.type || currentNode.name == 'body' )
+				 && CKEDITOR.tools.trim( text ) )
+			{
+				this.onTagOpen( fixForBody, {}, 0, 1 );
+			}
+
+			// Shrinking consequential spaces into one single for all elements
+			// text contents.
+			if ( !inPre )
+				text = text.replace( /[\t\r\n ]{2,}|[\t\r\n]/g, ' ' );
+
+			currentNode.add( new CKEDITOR.htmlParser.text( text ) );
+		};
+
+		parser.onCDATA = function( cdata )
+		{
+			currentNode.add( new CKEDITOR.htmlParser.cdata( cdata ) );
+		};
+
+		parser.onComment = function( comment )
+		{
+			sendPendingBRs();
+			checkPending();
+			currentNode.add( new CKEDITOR.htmlParser.comment( comment ) );
+		};
+
+		// Parse it.
+		parser.parse( fragmentHtml );
+
+		// Send all pending BRs except one, which we consider a unwanted bogus. (#5293)
+		sendPendingBRs( !CKEDITOR.env.ie && 1 );
+
+		// Close all pending nodes, make sure return point is properly restored.
+		while ( currentNode != fragment )
+			addElement( currentNode, currentNode.parent, 1 );
+
+		return fragment;
+	};
+
+	CKEDITOR.htmlParser.fragment.prototype =
+	{
+		/**
+		 * Adds a node to this fragment.
+		 * @param {Object} node The node to be added. It can be any of of the
+		 *		following types: {@link CKEDITOR.htmlParser.element},
+		 *		{@link CKEDITOR.htmlParser.text} and
+		 *		{@link CKEDITOR.htmlParser.comment}.
+		 *	@param {Number} [index] From where the insertion happens.
+		 * @example
+		 */
+		add : function( node, index )
+		{
+			isNaN( index ) && ( index = this.children.length );
+
+			var previous = index > 0 ? this.children[ index - 1 ] : null;
+			if ( previous )
+			{
+				// If the block to be appended is following text, trim spaces at
+				// the right of it.
+				if ( node._.isBlockLike && previous.type == CKEDITOR.NODE_TEXT )
+				{
+					previous.value = CKEDITOR.tools.rtrim( previous.value );
+
+					// If we have completely cleared the previous node.
+					if ( previous.value.length === 0 )
+					{
+						// Remove it from the list and add the node again.
+						this.children.pop();
+						this.add( node );
+						return;
+					}
+				}
+
+				previous.next = node;
+			}
+
+			node.previous = previous;
+			node.parent = this;
+
+			this.children.splice( index, 0, node );
+
+			this._.hasInlineStarted = node.type == CKEDITOR.NODE_TEXT || ( node.type == CKEDITOR.NODE_ELEMENT && !node._.isBlockLike );
+		},
+
+		/**
+		 * Writes the fragment HTML to a CKEDITOR.htmlWriter.
+		 * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML.
+		 * @example
+		 * var writer = new CKEDITOR.htmlWriter();
+		 * var fragment = CKEDITOR.htmlParser.fragment.fromHtml( '&lt;P&gt;&lt;B&gt;Example' );
+		 * fragment.writeHtml( writer )
+		 * alert( writer.getHtml() );  "&lt;p&gt;&lt;b&gt;Example&lt;/b&gt;&lt;/p&gt;"
+		 */
+		writeHtml : function( writer, filter )
+		{
+			var isChildrenFiltered;
+			this.filterChildren = function()
+			{
+				var writer = new CKEDITOR.htmlParser.basicWriter();
+				this.writeChildrenHtml.call( this, writer, filter, true );
+				var html = writer.getHtml();
+				this.children = new CKEDITOR.htmlParser.fragment.fromHtml( html ).children;
+				isChildrenFiltered = 1;
+			};
+
+			// Filtering the root fragment before anything else.
+			!this.name && filter && filter.onFragment( this );
+
+			this.writeChildrenHtml( writer, isChildrenFiltered ? null : filter );
+		},
+
+		writeChildrenHtml : function( writer, filter )
+		{
+			for ( var i = 0 ; i < this.children.length ; i++ )
+				this.children[i].writeHtml( writer, filter );
+		}
+	};
+})();

+ 55 - 0
web/js/ckeditor/_source/core/htmlparser/text.js

@@ -0,0 +1,55 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function()
+{
+	var spacesRegex = /[\t\r\n ]{2,}|[\t\r\n]/g;
+
+	/**
+	 * A lightweight representation of HTML text.
+	 * @constructor
+	 * @example
+	 */
+ 	CKEDITOR.htmlParser.text = function( value )
+	{
+		/**
+		 * The text value.
+		 * @type String
+		 * @example
+		 */
+		this.value = value;
+
+		/** @private */
+		this._ =
+		{
+			isBlockLike : false
+		};
+	};
+
+	CKEDITOR.htmlParser.text.prototype =
+	{
+		/**
+		 * The node type. This is a constant value set to {@link CKEDITOR.NODE_TEXT}.
+		 * @type Number
+		 * @example
+		 */
+		type : CKEDITOR.NODE_TEXT,
+
+		/**
+		 * Writes the HTML representation of this text to a CKEDITOR.htmlWriter.
+		 * @param {CKEDITOR.htmlWriter} writer The writer to which write the HTML.
+		 * @example
+		 */
+		writeHtml : function( writer, filter )
+		{
+			var text = this.value;
+
+			if ( filter && !( text = filter.onText( text, this ) ) )
+				return;
+
+			writer.text( text );
+		}
+	};
+})();

+ 157 - 0
web/js/ckeditor/_source/core/lang.js

@@ -0,0 +1,157 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function()
+{
+	var loadedLangs = {};
+
+	/**
+	 * @namespace Holds language related functions.
+	 */
+	CKEDITOR.lang =
+	{
+		/**
+		 * The list of languages available in the editor core.
+		 * @type Object
+		 * @example
+		 * alert( CKEDITOR.lang.en );  // "true"
+		 */
+		languages :
+		{
+			'af'	: 1,
+			'ar'	: 1,
+			'bg'	: 1,
+			'bn'	: 1,
+			'bs'	: 1,
+			'ca'	: 1,
+			'cs'	: 1,
+			'cy'	: 1,
+			'da'	: 1,
+			'de'	: 1,
+			'el'	: 1,
+			'en-au'	: 1,
+			'en-ca'	: 1,
+			'en-gb'	: 1,
+			'en'	: 1,
+			'eo'	: 1,
+			'es'	: 1,
+			'et'	: 1,
+			'eu'	: 1,
+			'fa'	: 1,
+			'fi'	: 1,
+			'fo'	: 1,
+			'fr-ca'	: 1,
+			'fr'	: 1,
+			'gl'	: 1,
+			'gu'	: 1,
+			'he'	: 1,
+			'hi'	: 1,
+			'hr'	: 1,
+			'hu'	: 1,
+			'is'	: 1,
+			'it'	: 1,
+			'ja'	: 1,
+			'ka'	: 1,
+			'km'	: 1,
+			'ko'	: 1,
+			'lt'	: 1,
+			'lv'	: 1,
+			'mn'	: 1,
+			'ms'	: 1,
+			'nb'	: 1,
+			'nl'	: 1,
+			'no'	: 1,
+			'pl'	: 1,
+			'pt-br'	: 1,
+			'pt'	: 1,
+			'ro'	: 1,
+			'ru'	: 1,
+			'sk'	: 1,
+			'sl'	: 1,
+			'sr-latn'	: 1,
+			'sr'	: 1,
+			'sv'	: 1,
+			'th'	: 1,
+			'tr'	: 1,
+			'uk'	: 1,
+			'vi'	: 1,
+			'zh-cn'	: 1,
+			'zh'	: 1
+		},
+
+		/**
+		 * Loads a specific language file, or auto detect it. A callback is
+		 * then called when the file gets loaded.
+		 * @param {String} languageCode The code of the language file to be
+		 *		loaded. If null or empty, autodetection will be performed. The
+		 *		same happens if the language is not supported.
+		 * @param {String} defaultLanguage The language to be used if
+		 *		languageCode is not supported or if the autodetection fails.
+		 * @param {Function} callback A function to be called once the
+		 *		language file is loaded. Two parameters are passed to this
+		 *		function: the language code and the loaded language entries.
+		 * @example
+		 */
+		load : function( languageCode, defaultLanguage, callback )
+		{
+			// If no languageCode - fallback to browser or default.
+			// If languageCode - fallback to no-localized version or default.
+			if ( !languageCode || !CKEDITOR.lang.languages[ languageCode ] )
+				languageCode = this.detect( defaultLanguage, languageCode );
+
+			if ( !this[ languageCode ] )
+			{
+				CKEDITOR.scriptLoader.load( CKEDITOR.getUrl(
+					'_source/' +	// @Packager.RemoveLine
+					'lang/' + languageCode + '.js' ),
+					function()
+						{
+							callback( languageCode, this[ languageCode ] );
+						}
+						, this );
+			}
+			else
+				callback( languageCode, this[ languageCode ] );
+		},
+
+		/**
+		 * Returns the language that best fit the user language. For example,
+		 * suppose that the user language is "pt-br". If this language is
+		 * supported by the editor, it is returned. Otherwise, if only "pt" is
+		 * supported, it is returned instead. If none of the previous are
+		 * supported, a default language is then returned.
+		 * @param {String} defaultLanguage The default language to be returned
+		 *		if the user language is not supported.
+		 * @param {String} [probeLanguage] A language code to try to use,
+		 *		instead of the browser based autodetection.
+		 * @returns {String} The detected language code.
+		 * @example
+		 * alert( CKEDITOR.lang.detect( 'en' ) );  // e.g., in a German browser: "de"
+		 */
+		detect : function( defaultLanguage, probeLanguage )
+		{
+			var languages = this.languages;
+			probeLanguage = probeLanguage || navigator.userLanguage || navigator.language;
+
+			var parts = probeLanguage
+					.toLowerCase()
+					.match( /([a-z]+)(?:-([a-z]+))?/ ),
+				lang = parts[1],
+				locale = parts[2];
+
+			if ( languages[ lang + '-' + locale ] )
+				lang = lang + '-' + locale;
+			else if ( !languages[ lang ] )
+				lang = null;
+
+			CKEDITOR.lang.detect = lang ?
+				function() { return lang; } :
+				function( defaultLanguage ) { return defaultLanguage; };
+
+			return lang || defaultLanguage;
+		}
+	};
+
+})();

+ 240 - 0
web/js/ckeditor/_source/core/loader.js

@@ -0,0 +1,240 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.loader} objects, which is used to
+ *		load core scripts and their dependencies from _source.
+ */
+
+if ( typeof CKEDITOR == 'undefined' )
+	CKEDITOR = {};
+
+if ( !CKEDITOR.loader )
+{
+	/**
+	 * Load core scripts and their dependencies from _source.
+	 * @namespace
+	 * @example
+	 */
+	CKEDITOR.loader = (function()
+	{
+		// Table of script names and their dependencies.
+		var scripts =
+		{
+			'core/_bootstrap'		: [ 'core/config', 'core/ckeditor', 'core/plugins', 'core/scriptloader', 'core/tools', /* The following are entries that we want to force loading at the end to avoid dependence recursion */ 'core/dom/comment', 'core/dom/elementpath', 'core/dom/text', 'core/dom/rangelist' ],
+			'core/ckeditor'			: [ 'core/ckeditor_basic', 'core/dom', 'core/dtd', 'core/dom/document', 'core/dom/element', 'core/editor', 'core/event', 'core/htmlparser', 'core/htmlparser/element', 'core/htmlparser/fragment', 'core/htmlparser/filter', 'core/htmlparser/basicwriter', 'core/tools' ],
+			'core/ckeditor_base'	: [],
+			'core/ckeditor_basic'	: [ 'core/editor_basic', 'core/env', 'core/event' ],
+			'core/command'			: [],
+			'core/config'			: [ 'core/ckeditor_base' ],
+			'core/dom'				: [],
+			'core/dom/comment'		: [ 'core/dom/node' ],
+			'core/dom/document'		: [ 'core/dom', 'core/dom/domobject', 'core/dom/window' ],
+			'core/dom/documentfragment'	: [ 'core/dom/element' ],
+			'core/dom/element'		: [ 'core/dom', 'core/dom/document', 'core/dom/domobject', 'core/dom/node', 'core/dom/nodelist', 'core/tools' ],
+			'core/dom/elementpath'	: [ 'core/dom/element' ],
+			'core/dom/event'		: [],
+			'core/dom/node'			: [ 'core/dom/domobject', 'core/tools' ],
+			'core/dom/nodelist'		: [ 'core/dom/node' ],
+			'core/dom/domobject'	: [ 'core/dom/event' ],
+			'core/dom/range'		: [ 'core/dom/document', 'core/dom/documentfragment', 'core/dom/element', 'core/dom/walker' ],
+			'core/dom/rangelist'    : [ 'core/dom/range' ],
+			'core/dom/text'			: [ 'core/dom/node', 'core/dom/domobject' ],
+			'core/dom/walker'		: [ 'core/dom/node' ],
+			'core/dom/window'		: [ 'core/dom/domobject' ],
+			'core/dtd'				: [ 'core/tools' ],
+			'core/editor'			: [ 'core/command', 'core/config', 'core/editor_basic', 'core/focusmanager', 'core/lang', 'core/plugins', 'core/skins', 'core/themes', 'core/tools', 'core/ui' ],
+			'core/editor_basic'		: [ 'core/event' ],
+			'core/env'				: [],
+			'core/event'			: [],
+			'core/focusmanager'		: [],
+			'core/htmlparser'		: [],
+			'core/htmlparser/comment'	: [ 'core/htmlparser' ],
+			'core/htmlparser/element'	: [ 'core/htmlparser', 'core/htmlparser/fragment' ],
+			'core/htmlparser/fragment'	: [ 'core/htmlparser', 'core/htmlparser/comment', 'core/htmlparser/text', 'core/htmlparser/cdata' ],
+			'core/htmlparser/text'		: [ 'core/htmlparser' ],
+			'core/htmlparser/cdata'		: [ 'core/htmlparser' ],
+			'core/htmlparser/filter'	: [ 'core/htmlparser' ],
+			'core/htmlparser/basicwriter': [ 'core/htmlparser' ],
+			'core/lang'				: [],
+			'core/plugins'			: [ 'core/resourcemanager' ],
+			'core/resourcemanager'	: [ 'core/scriptloader', 'core/tools' ],
+			'core/scriptloader'		: [ 'core/dom/element', 'core/env' ],
+			'core/skins'			: [ 'core/scriptloader' ],
+			'core/themes'			: [ 'core/resourcemanager' ],
+			'core/tools'			: [ 'core/env' ],
+			'core/ui'				: []
+		};
+
+		var basePath = (function()
+		{
+			// This is a copy of CKEDITOR.basePath, but requires the script having
+			// "_source/core/loader.js".
+			if ( CKEDITOR && CKEDITOR.basePath )
+				return CKEDITOR.basePath;
+
+			// Find out the editor directory path, based on its <script> tag.
+			var path = '';
+			var scripts = document.getElementsByTagName( 'script' );
+
+			for ( var i = 0 ; i < scripts.length ; i++ )
+			{
+				var match = scripts[i].src.match( /(^|.*?[\\\/])(?:_source\/)?core\/loader.js(?:\?.*)?$/i );
+
+				if ( match )
+				{
+					path = match[1];
+					break;
+				}
+			}
+
+			// In IE (only) the script.src string is the raw valued entered in the
+			// HTML. Other browsers return the full resolved URL instead.
+			if ( path.indexOf('://') == -1 )
+			{
+				// Absolute path.
+				if ( path.indexOf( '/' ) === 0 )
+					path = location.href.match( /^.*?:\/\/[^\/]*/ )[0] + path;
+				// Relative path.
+				else
+					path = location.href.match( /^[^\?]*\// )[0] + path;
+			}
+
+			return path;
+		})();
+
+		var timestamp = 'B5GJ5GG';
+
+		var getUrl = function( resource )
+		{
+			if ( CKEDITOR && CKEDITOR.getUrl )
+				return CKEDITOR.getUrl( resource );
+
+			return basePath + resource +
+				( resource.indexOf( '?' ) >= 0 ? '&' : '?' ) +
+				't=' + timestamp;
+		};
+
+		var pendingLoad = [];
+
+		/** @lends CKEDITOR.loader */
+		return {
+			/**
+			 * The list of loaded scripts in their loading order.
+			 * @type Array
+			 * @example
+			 * // Alert the loaded script names.
+			 * alert( <b>CKEDITOR.loader.loadedScripts</b> );
+			 */
+			loadedScripts : [],
+
+			loadPending : function()
+			{
+				var scriptName = pendingLoad.shift();
+
+				if ( !scriptName )
+					return;
+
+				var scriptSrc = getUrl( '_source/' + scriptName + '.js' );
+
+				var script = document.createElement( 'script' );
+				script.type = 'text/javascript';
+				script.src = scriptSrc;
+
+				function onScriptLoaded()
+				{
+					// Append this script to the list of loaded scripts.
+					CKEDITOR.loader.loadedScripts.push( scriptName );
+
+					// Load the next.
+					CKEDITOR.loader.loadPending();
+				}
+
+				// We must guarantee the execution order of the scripts, so we
+				// need to load them one by one. (#4145)
+				// The following if/else block has been taken from the scriptloader core code.
+				if ( typeof(script.onreadystatechange) !== "undefined" )
+				{
+					/** @ignore */
+					script.onreadystatechange = function()
+					{
+						if ( script.readyState == 'loaded' || script.readyState == 'complete' )
+						{
+							script.onreadystatechange = null;
+							onScriptLoaded();
+						}
+					};
+				}
+				else
+				{
+					/** @ignore */
+					script.onload = function()
+					{
+						// Some browsers, such as Safari, may call the onLoad function
+						// immediately. Which will break the loading sequence. (#3661)
+						setTimeout( function() { onScriptLoaded( scriptName ); }, 0 );
+					};
+				}
+
+				document.body.appendChild( script );
+			},
+
+			/**
+			 * Loads a specific script, including its dependencies. This is not a
+			 * synchronous loading, which means that the code to be loaded will
+			 * not necessarily be available after this call.
+			 * @example
+			 * CKEDITOR.loader.load( 'core/dom/element' );
+			 */
+			load : function( scriptName, defer )
+			{
+				// Check if the script has already been loaded.
+				if ( scriptName in this.loadedScripts )
+					return;
+
+				// Get the script dependencies list.
+				var dependencies = scripts[ scriptName ];
+				if ( !dependencies )
+					throw 'The script name"' + scriptName + '" is not defined.';
+
+				// Mark the script as loaded, even before really loading it, to
+				// avoid cross references recursion.
+				this.loadedScripts[ scriptName ] = true;
+
+				// Load all dependencies first.
+				for ( var i = 0 ; i < dependencies.length ; i++ )
+					this.load( dependencies[ i ], true );
+
+				var scriptSrc = getUrl( '_source/' + scriptName + '.js' );
+
+				// Append the <script> element to the DOM.
+				// 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 );
+
+					if ( !defer )
+						this.loadPending();
+				}
+				else
+				{
+					// Append this script to the list of loaded scripts.
+					this.loadedScripts.push( scriptName );
+
+					document.write( '<script src="' + scriptSrc + '" type="text/javascript"><\/script>' );
+				}
+			}
+		};
+	})();
+}
+
+// Check if any script has been defined for autoload.
+if ( CKEDITOR._autoLoad )
+{
+	CKEDITOR.loader.load( CKEDITOR._autoLoad );
+	delete CKEDITOR._autoLoad;
+}

+ 83 - 0
web/js/ckeditor/_source/core/plugindefinition.js

@@ -0,0 +1,83 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the "virtual" {@link CKEDITOR.pluginDefinition} class, which
+ *		contains the defintion of a plugin. This file is for documentation
+ *		purposes only.
+ */
+
+/**
+ * (Virtual Class) Do not call this constructor. This class is not really part
+ *		of the API. It just illustrates the features of plugin objects to be
+ *		passed to the {@link CKEDITOR.plugins.add} function.
+ * @name CKEDITOR.pluginDefinition
+ * @constructor
+ * @example
+ */
+
+/**
+ * A list of plugins that are required by this plugin. Note that this property
+ * doesn't guarantee the loading order of the plugins.
+ * @name CKEDITOR.pluginDefinition.prototype.requires
+ * @type Array
+ * @example
+ * CKEDITOR.plugins.add( 'sample',
+ * {
+ *     requires : [ 'button', 'selection' ]
+ * });
+ */
+
+/**
+ * A list of language files available for this plugin. These files are stored inside
+ * the "lang" directory, which is inside the plugin directory, follow the name
+ * pattern of "langCode.js", and contain a language definition created with {@link CKEDITOR.pluginDefinition#setLang}.
+ * While the plugin is being loaded, the editor checks this list to see if
+ * a language file of the current editor language ({@link CKEDITOR.editor#langCode})
+ * is available, and if so, loads it. Otherwise, the file represented by the first list item
+ * in the list is loaded.
+ * @name CKEDITOR.pluginDefinition.prototype.lang
+ * @type Array
+ * @example
+ * CKEDITOR.plugins.add( 'sample',
+ * {
+ *     lang : [ 'en', 'fr' ]
+ * });
+ */
+
+ /**
+ * Function called on initialization of every editor instance created in the
+ * page before the init() call task. The beforeInit function will be called for
+ * all plugins, after that the init function is called for all of them. This
+ * feature makes it possible to initialize things that could be used in the
+ * init function of other plugins.
+ * @name CKEDITOR.pluginDefinition.prototype.beforeInit
+ * @function
+ * @param {CKEDITOR.editor} editor The editor instance being initialized.
+ * @example
+ * CKEDITOR.plugins.add( 'sample',
+ * {
+ *     beforeInit : function( editor )
+ *     {
+ *         alert( 'Editor "' + editor.name + '" is to be initialized!' );
+ *     }
+ * });
+ */
+
+ /**
+ * Function called on initialization of every editor instance created in the
+ * page.
+ * @name CKEDITOR.pluginDefinition.prototype.init
+ * @function
+ * @param {CKEDITOR.editor} editor The editor instance being initialized.
+ * @example
+ * CKEDITOR.plugins.add( 'sample',
+ * {
+ *     init : function( editor )
+ *     {
+ *         alert( 'Editor "' + editor.name + '" is being initialized!' );
+ *     }
+ * });
+ */

+ 103 - 0
web/js/ckeditor/_source/core/plugins.js

@@ -0,0 +1,103 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.plugins} object, which is used to
+ *		manage plugins registration and loading.
+ */
+
+/**
+ * Manages plugins registration and loading.
+ * @namespace
+ * @augments CKEDITOR.resourceManager
+ * @example
+ */
+CKEDITOR.plugins = new CKEDITOR.resourceManager(
+	'_source/' +	// @Packager.RemoveLine
+	'plugins/', 'plugin' );
+
+// PACKAGER_RENAME( CKEDITOR.plugins )
+
+CKEDITOR.plugins.load = CKEDITOR.tools.override( CKEDITOR.plugins.load, function( originalLoad )
+	{
+		return function( name, callback, scope )
+		{
+			var allPlugins = {};
+
+			var loadPlugins = function( names )
+			{
+				originalLoad.call( this, names, function( plugins )
+					{
+						CKEDITOR.tools.extend( allPlugins, plugins );
+
+						var requiredPlugins = [];
+						for ( var pluginName in plugins )
+						{
+							var plugin = plugins[ pluginName ],
+								requires = plugin && plugin.requires;
+
+							if ( requires )
+							{
+								for ( var i = 0 ; i < requires.length ; i++ )
+								{
+									if ( !allPlugins[ requires[ i ] ] )
+										requiredPlugins.push( requires[ i ] );
+								}
+							}
+						}
+
+						if ( requiredPlugins.length )
+							loadPlugins.call( this, requiredPlugins );
+						else
+						{
+							// Call the "onLoad" function for all plugins.
+							for ( pluginName in allPlugins )
+							{
+								plugin = allPlugins[ pluginName ];
+								if ( plugin.onLoad && !plugin.onLoad._called )
+								{
+									plugin.onLoad();
+									plugin.onLoad._called = 1;
+								}
+							}
+
+							// Call the callback.
+							if ( callback )
+								callback.call( scope || window, allPlugins );
+						}
+					}
+					, this);
+
+			};
+
+			loadPlugins.call( this, name );
+		};
+	});
+
+/**
+ * Loads a specific language file, or auto detect it. A callback is
+ * then called when the file gets loaded.
+ * @param {String} pluginName The name of the plugin to which the provided translation
+ * 		should be attached.
+ * @param {String} languageCode The code of the language translation provided.
+ * @param {Object} languageEntries An object that contains pairs of label and
+ *		the respective translation.
+ * @example
+ * CKEDITOR.plugins.setLang( 'myPlugin', 'en', {
+ * 	title : 'My plugin',
+ * 	selectOption : 'Please select an option'
+ * } );
+ */
+CKEDITOR.plugins.setLang = function( pluginName, languageCode, languageEntries )
+{
+	var plugin = this.get( pluginName ),
+		pluginLangEntries = plugin.langEntries || ( plugin.langEntries = {} ),
+		pluginLang = plugin.lang || ( plugin.lang = [] );
+
+	if ( CKEDITOR.tools.indexOf( pluginLang, languageCode ) == -1 )
+		pluginLang.push( languageCode );
+
+	pluginLangEntries[ languageCode ] = languageEntries;
+};

+ 180 - 0
web/js/ckeditor/_source/core/scriptloader.js

@@ -0,0 +1,180 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.scriptLoader} object, used to load scripts
+ *		asynchronously.
+ */
+
+/**
+ * Load scripts asynchronously.
+ * @namespace
+ * @example
+ */
+CKEDITOR.scriptLoader = (function()
+{
+	var uniqueScripts = {},
+		waitingList = {};
+
+	return /** @lends CKEDITOR.scriptLoader */ {
+		/**
+		 * Loads one or more external script checking if not already loaded
+		 * previously by this function.
+		 * @param {String|Array} scriptUrl One or more URLs pointing to the
+		 *		scripts to be loaded.
+		 * @param {Function} [callback] A function to be called when the script
+		 *		is loaded and executed. If a string is passed to "scriptUrl", a
+		 *		boolean parameter is passed to the callback, indicating the
+		 *		success of the load. If an array is passed instead, two array
+		 *		parameters are passed to the callback; the first contains the
+		 *		URLs that have been properly loaded, and the second the failed
+		 *		ones.
+		 * @param {Object} [scope] The scope ("this" reference) to be used for
+		 *		the callback call. Default to {@link CKEDITOR}.
+		 * @param {Boolean} [showBusy] Changes the cursor of the document while
++		 *		the script is loaded.
+		 * @example
+		 * CKEDITOR.scriptLoader.load( '/myscript.js' );
+		 * @example
+		 * CKEDITOR.scriptLoader.load( '/myscript.js', function( success )
+		 *     {
+		 *         // Alerts "true" if the script has been properly loaded.
+		 *         // HTTP error 404 should return "false".
+		 *         alert( success );
+		 *     });
+		 * @example
+		 * CKEDITOR.scriptLoader.load( [ '/myscript1.js', '/myscript2.js' ], function( completed, failed )
+		 *     {
+		 *         alert( 'Number of scripts loaded: ' + completed.length );
+		 *         alert( 'Number of failures: ' + failed.length );
+		 *     });
+		 */
+		load : function( scriptUrl, callback, scope, showBusy )
+		{
+			var isString = ( typeof scriptUrl == 'string' );
+
+			if ( isString )
+				scriptUrl = [ scriptUrl ];
+
+			if ( !scope )
+				scope = CKEDITOR;
+
+			var scriptCount = scriptUrl.length,
+				completed = [],
+				failed = [];
+
+			var doCallback = function( success )
+			{
+				if ( callback )
+				{
+					if ( isString )
+						callback.call( scope, success );
+					else
+						callback.call( scope, completed, failed );
+				}
+			};
+
+			if ( scriptCount === 0 )
+			{
+				doCallback( true );
+				return;
+			}
+
+			var checkLoaded = function( url, success )
+			{
+				( success ? completed : failed ).push( url );
+
+				if ( --scriptCount <= 0 )
+				{
+					showBusy && CKEDITOR.document.getDocumentElement().removeStyle( 'cursor' );
+					doCallback( success );
+				}
+			};
+
+			var onLoad = function( url, success )
+			{
+				// Mark this script as loaded.
+				uniqueScripts[ url ] = 1;
+
+				// Get the list of callback checks waiting for this file.
+				var waitingInfo = waitingList[ url ];
+				delete waitingList[ url ];
+
+				// Check all callbacks waiting for this file.
+				for ( var i = 0 ; i < waitingInfo.length ; i++ )
+					waitingInfo[ i ]( url, success );
+			};
+
+			var loadScript = function( url )
+			{
+				if ( uniqueScripts[ url ] )
+				{
+					checkLoaded( url, true );
+					return;
+				}
+
+				var waitingInfo = waitingList[ url ] || ( waitingList[ url ] = [] );
+				waitingInfo.push( checkLoaded );
+
+				// Load it only for the first request.
+				if ( waitingInfo.length > 1 )
+					return;
+
+				// Create the <script> element.
+				var script = new CKEDITOR.dom.element( 'script' );
+				script.setAttributes( {
+					type : 'text/javascript',
+					src : url } );
+
+				if ( callback )
+				{
+					if ( CKEDITOR.env.ie )
+					{
+						// FIXME: For IE, we are not able to return false on error (like 404).
+
+						/** @ignore */
+						script.$.onreadystatechange = function ()
+						{
+							if ( script.$.readyState == 'loaded' || script.$.readyState == 'complete' )
+							{
+								script.$.onreadystatechange = null;
+								onLoad( url, true );
+							}
+						};
+					}
+					else
+					{
+						/** @ignore */
+						script.$.onload = function()
+						{
+							// Some browsers, such as Safari, may call the onLoad function
+							// immediately. Which will break the loading sequence. (#3661)
+							setTimeout( function() { onLoad( url, true ); }, 0 );
+						};
+
+						// FIXME: Opera and Safari will not fire onerror.
+
+						/** @ignore */
+						script.$.onerror = function()
+						{
+							onLoad( url, false );
+						};
+					}
+				}
+
+				// Append it to <head>.
+				script.appendTo( CKEDITOR.document.getHead() );
+
+				CKEDITOR.fire( 'download', url );		// @Packager.RemoveLine
+			};
+
+			showBusy && CKEDITOR.document.getDocumentElement().setStyle( 'cursor', 'wait' );
+			for ( var i = 0 ; i < scriptCount ; i++ )
+			{
+				loadScript( scriptUrl[ i ] );
+			}
+		}
+	};
+})();

+ 184 - 0
web/js/ckeditor/_source/core/skins.js

@@ -0,0 +1,184 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.skins} object, which is used to
+ *		manage skins loading.
+ */
+
+/**
+ * Manages skins loading.
+ * @namespace
+ * @example
+ */
+CKEDITOR.skins = (function()
+{
+	// Holds the list of loaded skins.
+	var loaded = {},
+		paths = {};
+
+	var loadPart = function( editor, skinName, part, callback )
+	{
+		// Get the skin definition.
+		var skinDefinition = loaded[ skinName ];
+
+		if ( !editor.skin )
+		{
+			editor.skin = skinDefinition;
+
+			// Trigger init function if any.
+			if ( skinDefinition.init )
+				skinDefinition.init( editor );
+		}
+
+		var appendSkinPath = function( fileNames )
+		{
+			for ( var n = 0 ; n < fileNames.length ; n++ )
+			{
+				fileNames[ n ] = CKEDITOR.getUrl( paths[ skinName ] + fileNames[ n ] );
+			}
+		};
+
+		function fixCSSTextRelativePath( cssStyleText, baseUrl )
+		{
+			return cssStyleText.replace( /url\s*\(([\s'"]*)(.*?)([\s"']*)\)/g,
+					function( match, opener, path, closer )
+					{
+						if ( /^\/|^\w?:/.test( path ) )
+							return match;
+						else
+							return 'url(' + baseUrl + opener +  path + closer + ')';
+					} );
+		}
+
+		// Get the part definition.
+		part = skinDefinition[ part ];
+		var partIsLoaded = !part || !!part._isLoaded;
+
+		// Call the callback immediately if already loaded.
+		if ( partIsLoaded )
+			callback && callback();
+		else
+		{
+			// Put the callback in a queue.
+			var pending = part._pending || ( part._pending = [] );
+			pending.push( callback );
+
+			// We may have more than one skin part load request. Just the first
+			// one must do the loading job.
+			if ( pending.length > 1 )
+				return;
+
+			// Check whether the "css" and "js" properties have been defined
+			// for that part.
+			var cssIsLoaded = !part.css || !part.css.length,
+				jsIsLoaded = !part.js || !part.js.length;
+
+			// This is the function that will trigger the callback calls on
+			// load.
+			var checkIsLoaded = function()
+			{
+				if ( cssIsLoaded && jsIsLoaded )
+				{
+					// Mark the part as loaded.
+					part._isLoaded = 1;
+
+					// Call all pending callbacks.
+					for ( var i = 0 ; i < pending.length ; i++ )
+					{
+						if ( pending[ i ] )
+							pending[ i ]();
+					}
+				}
+			};
+
+			// Load the "css" pieces.
+			if ( !cssIsLoaded )
+			{
+				var cssPart = part.css;
+
+				if ( CKEDITOR.tools.isArray( cssPart ) )
+				{
+					appendSkinPath( cssPart );
+					for ( var c = 0 ; c < cssPart.length ; c++ )
+						CKEDITOR.document.appendStyleSheet( cssPart[ c ] );
+				}
+				else
+				{
+					cssPart = fixCSSTextRelativePath(
+								cssPart, CKEDITOR.getUrl( paths[ skinName ] ) );
+					// Processing Inline CSS part.
+					CKEDITOR.document.appendStyleText( cssPart );
+				}
+
+				part.css = cssPart;
+
+				cssIsLoaded = 1;
+			}
+
+			// Load the "js" pieces.
+			if ( !jsIsLoaded )
+			{
+				appendSkinPath( part.js );
+				CKEDITOR.scriptLoader.load( part.js, function()
+					{
+						jsIsLoaded = 1;
+						checkIsLoaded();
+					});
+			}
+
+			// We may have nothing to load, so check it immediately.
+			checkIsLoaded();
+		}
+	};
+
+	return /** @lends CKEDITOR.skins */ {
+
+		/**
+		 * Registers a skin definition.
+		 * @param {String} skinName The skin name.
+		 * @param {Object} skinDefinition The skin definition.
+		 * @example
+		 */
+		add : function( skinName, skinDefinition )
+		{
+			loaded[ skinName ] = skinDefinition;
+
+			skinDefinition.skinPath = paths[ skinName ]
+				|| ( paths[ skinName ] =
+						CKEDITOR.getUrl(
+							'_source/' +	// @Packager.RemoveLine
+							'skins/' + skinName + '/' ) );
+		},
+
+		/**
+		 * Loads a skin part. Skins are defined in parts, which are basically
+		 * separated CSS files. This function is mainly used by the core code and
+		 * should not have much use out of it.
+		 * @param {String} skinName The name of the skin to be loaded.
+		 * @param {String} skinPart The skin part to be loaded. Common skin parts
+		 *		are "editor" and "dialog".
+		 * @param {Function} [callback] A function to be called once the skin
+		 *		part files are loaded.
+		 * @example
+		 */
+		load : function( editor, skinPart, callback )
+		{
+			var skinName = editor.skinName,
+				skinPath = editor.skinPath;
+
+			if ( loaded[ skinName ] )
+				loadPart( editor, skinName, skinPart, callback );
+			else
+			{
+				paths[ skinName ] = skinPath;
+				CKEDITOR.scriptLoader.load( CKEDITOR.getUrl( skinPath + 'skin.js' ), function()
+						{
+							 loadPart( editor, skinName, skinPart, callback );
+						});
+			}
+		}
+	};
+})();

+ 19 - 0
web/js/ckeditor/_source/core/themes.js

@@ -0,0 +1,19 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.themes} object, which is used to
+ *		manage themes registration and loading.
+ */
+
+/**
+ * Manages themes registration and loading.
+ * @namespace
+ * @augments CKEDITOR.resourceManager
+ * @example
+ */
+CKEDITOR.themes = new CKEDITOR.resourceManager(
+	'_source/'+		// @Packager.RemoveLine
+	'themes/', 'theme' );

+ 763 - 0
web/js/ckeditor/_source/core/tools.js

@@ -0,0 +1,763 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.tools} object, which contains
+ *		utility functions.
+ */
+
+(function()
+{
+	var functions = [];
+
+	CKEDITOR.on( 'reset', function()
+		{
+			functions = [];
+		});
+
+	/**
+	 * Utility functions.
+	 * @namespace
+	 * @example
+	 */
+	CKEDITOR.tools =
+	{
+		/**
+		 * Compare the elements of two arrays.
+		 * @param {Array} arrayA An array to be compared.
+		 * @param {Array} arrayB The other array to be compared.
+		 * @returns {Boolean} "true" is the arrays have the same lenght and
+		 *		their elements match.
+		 * @example
+		 * var a = [ 1, 'a', 3 ];
+		 * var b = [ 1, 3, 'a' ];
+		 * var c = [ 1, 'a', 3 ];
+		 * var d = [ 1, 'a', 3, 4 ];
+		 *
+		 * alert( CKEDITOR.tools.arrayCompare( a, b ) );  // false
+		 * alert( CKEDITOR.tools.arrayCompare( a, c ) );  // true
+		 * alert( CKEDITOR.tools.arrayCompare( a, d ) );  // false
+		 */
+		arrayCompare : function( arrayA, arrayB )
+		{
+			if ( !arrayA && !arrayB )
+				return true;
+
+			if ( !arrayA || !arrayB || arrayA.length != arrayB.length )
+				return false;
+
+			for ( var i = 0 ; i < arrayA.length ; i++ )
+			{
+				if ( arrayA[ i ] != arrayB[ i ] )
+					return false;
+			}
+
+			return true;
+		},
+
+		/**
+		 * Creates a deep copy of an object.
+		 * Attention: there is no support for recursive references.
+		 * @param {Object} object The object to be cloned.
+		 * @returns {Object} The object clone.
+		 * @example
+		 * var obj =
+		 *     {
+		 *         name : 'John',
+		 *         cars :
+		 *             {
+		 *                 Mercedes : { color : 'blue' },
+		 *                 Porsche : { color : 'red' }
+		 *             }
+		 *     };
+		 * var clone = CKEDITOR.tools.clone( obj );
+		 * clone.name = 'Paul';
+		 * clone.cars.Porsche.color = 'silver';
+		 * alert( obj.name );	// John
+		 * alert( clone.name );	// Paul
+		 * alert( obj.cars.Porsche.color );	// red
+		 * alert( clone.cars.Porsche.color );	// silver
+		 */
+		clone : function( obj )
+		{
+			var clone;
+
+			// Array.
+			if ( obj && ( obj instanceof Array ) )
+			{
+				clone = [];
+
+				for ( var i = 0 ; i < obj.length ; i++ )
+					clone[ i ] = this.clone( obj[ i ] );
+
+				return clone;
+			}
+
+			// "Static" types.
+			if ( obj === null
+				|| ( typeof( obj ) != 'object' )
+				|| ( obj instanceof String )
+				|| ( obj instanceof Number )
+				|| ( obj instanceof Boolean )
+				|| ( obj instanceof Date )
+				|| ( obj instanceof RegExp) )
+			{
+				return obj;
+			}
+
+			// Objects.
+			clone = new obj.constructor();
+
+			for ( var propertyName in obj )
+			{
+				var property = obj[ propertyName ];
+				clone[ propertyName ] = this.clone( property );
+			}
+
+			return clone;
+		},
+
+		/**
+		 * Turn the first letter of string to upper-case.
+		 * @param {String} str
+		 */
+		capitalize: function( str )
+		{
+			return str.charAt( 0 ).toUpperCase() + str.substring( 1 ).toLowerCase();
+		},
+
+		/**
+		 * Copy the properties from one object to another. By default, properties
+		 * already present in the target object <strong>are not</strong> overwritten.
+		 * @param {Object} target The object to be extended.
+		 * @param {Object} source[,souce(n)] The objects from which copy
+		 *		properties. Any number of objects can be passed to this function.
+		 * @param {Boolean} [overwrite] If 'true' is specified it indicates that
+		 *            properties already present in the target object could be
+		 *            overwritten by subsequent objects.
+		 * @param {Object} [properties] Only properties within the specified names
+		 *            list will be received from the source object.
+		 * @returns {Object} the extended object (target).
+		 * @example
+		 * // Create the sample object.
+		 * var myObject =
+		 * {
+		 *     prop1 : true
+		 * };
+		 *
+		 * // Extend the above object with two properties.
+		 * CKEDITOR.tools.extend( myObject,
+		 *     {
+		 *         prop2 : true,
+		 *         prop3 : true
+		 *     } );
+		 *
+		 * // Alert "prop1", "prop2" and "prop3".
+		 * for ( var p in myObject )
+		 *     alert( p );
+		 */
+		extend : function( target )
+		{
+			var argsLength = arguments.length,
+				overwrite, propertiesList;
+
+			if ( typeof ( overwrite = arguments[ argsLength - 1 ] ) == 'boolean')
+				argsLength--;
+			else if ( typeof ( overwrite = arguments[ argsLength - 2 ] ) == 'boolean' )
+			{
+				propertiesList = arguments [ argsLength -1 ];
+				argsLength-=2;
+			}
+			for ( var i = 1 ; i < argsLength ; i++ )
+			{
+				var source = arguments[ i ];
+				for ( var propertyName in source )
+				{
+					// Only copy existed fields if in overwrite mode.
+					if ( overwrite === true || target[ propertyName ] == undefined )
+					{
+						// Only copy  specified fields if list is provided.
+						if ( !propertiesList || ( propertyName in propertiesList ) )
+							target[ propertyName ] = source[ propertyName ];
+
+					}
+				}
+			}
+
+			return target;
+		},
+
+		/**
+		 * Creates an object which is an instance of a class which prototype is a
+		 * predefined object. All properties defined in the source object are
+		 * automatically inherited by the resulting object, including future
+		 * changes to it.
+		 * @param {Object} source The source object to be used as the prototype for
+		 *		the final object.
+		 * @returns {Object} The resulting copy.
+		 */
+		prototypedCopy : function( source )
+		{
+			var copy = function()
+			{};
+			copy.prototype = source;
+			return new copy();
+		},
+
+		/**
+		 * Checks if an object is an Array.
+		 * @param {Object} object The object to be checked.
+		 * @type Boolean
+		 * @returns <i>true</i> if the object is an Array, otherwise <i>false</i>.
+		 * @example
+		 * alert( CKEDITOR.tools.isArray( [] ) );      // "true"
+		 * alert( CKEDITOR.tools.isArray( 'Test' ) );  // "false"
+		 */
+		isArray : function( object )
+		{
+			return ( !!object && object instanceof Array );
+		},
+
+		/**
+		 * Whether the object contains no properties of it's own.
+ 		 * @param object
+		 */
+		isEmpty : function ( object )
+		{
+			for ( var i in object )
+			{
+				if ( object.hasOwnProperty( i ) )
+					return false;
+			}
+			return true;
+		},
+
+		/**
+		 * Transforms a CSS property name to its relative DOM style name.
+		 * @param {String} cssName The CSS property name.
+		 * @returns {String} The transformed name.
+		 * @example
+		 * alert( CKEDITOR.tools.cssStyleToDomStyle( 'background-color' ) );  // "backgroundColor"
+		 * alert( CKEDITOR.tools.cssStyleToDomStyle( 'float' ) );             // "cssFloat"
+		 */
+		cssStyleToDomStyle : ( function()
+		{
+			var test = document.createElement( 'div' ).style;
+
+			var cssFloat = ( typeof test.cssFloat != 'undefined' ) ? 'cssFloat'
+				: ( typeof test.styleFloat != 'undefined' ) ? 'styleFloat'
+				: 'float';
+
+			return function( cssName )
+			{
+				if ( cssName == 'float' )
+					return cssFloat;
+				else
+				{
+					return cssName.replace( /-./g, function( match )
+						{
+							return match.substr( 1 ).toUpperCase();
+						});
+				}
+			};
+		} )(),
+
+		/**
+		 * Build the HTML snippet of a set of &lt;style>/&lt;link>.
+		 * @param css {String|Array} Each of which are url (absolute) of a CSS file or
+		 * a trunk of style text.
+		 */
+		buildStyleHtml : function ( css )
+		{
+			css = [].concat( css );
+			var item, retval = [];
+			for ( var i = 0; i < css.length; i++ )
+			{
+				item = css[ i ];
+				// Is CSS style text ?
+				if ( /@import|[{}]/.test(item) )
+					retval.push('<style>' + item + '</style>');
+				else
+					retval.push('<link type="text/css" rel=stylesheet href="' + item + '">');
+			}
+			return retval.join( '' );
+		},
+
+		/**
+		 * Replace special HTML characters in a string with their relative HTML
+		 * entity values.
+		 * @param {String} text The string to be encoded.
+		 * @returns {String} The encode string.
+		 * @example
+		 * alert( CKEDITOR.tools.htmlEncode( 'A > B & C < D' ) );  // "A &amp;gt; B &amp;amp; C &amp;lt; D"
+		 */
+		htmlEncode : function( text )
+		{
+			var standard = function( text )
+			{
+				var span = new CKEDITOR.dom.element( 'span' );
+				span.setText( text );
+				return span.getHtml();
+			};
+
+			var fix1 = ( standard( '\n' ).toLowerCase() == '<br>' ) ?
+				function( text )
+				{
+					// #3874 IE and Safari encode line-break into <br>
+					return standard( text ).replace( /<br>/gi, '\n' );
+				} :
+				standard;
+
+			var fix2 = ( standard( '>' ) == '>' ) ?
+				function( text )
+				{
+					// WebKit does't encode the ">" character, which makes sense, but
+					// it's different than other browsers.
+					return fix1( text ).replace( />/g, '&gt;' );
+				} :
+				fix1;
+
+			var fix3 = ( standard( '  ' ) == '&nbsp; ' ) ?
+				function( text )
+				{
+					// #3785 IE8 changes spaces (>= 2) to &nbsp;
+					return fix2( text ).replace( /&nbsp;/g, ' ' );
+				} :
+				fix2;
+
+			this.htmlEncode = fix3;
+
+			return this.htmlEncode( text );
+		},
+
+		/**
+		 * Replace special HTML characters in HTMLElement's attribute with their relative HTML entity values.
+		 * @param {String} The attribute's value to be encoded.
+		 * @returns {String} The encode value.
+		 * @example
+		 * element.setAttribute( 'title', '<a " b >' );
+		 * alert( CKEDITOR.tools.htmlEncodeAttr( element.getAttribute( 'title' ) );  // "&gt;a &quot; b &lt;"
+		 */
+		htmlEncodeAttr : function( text )
+		{
+			return text.replace( /"/g, '&quot;' ).replace( /</g, '&lt;' ).replace( />/g, '&gt;' );
+		},
+
+		/**
+		 * Gets a unique number for this CKEDITOR execution session. It returns
+		 * progressive numbers starting at 1.
+		 * @function
+		 * @returns {Number} A unique number.
+		 * @example
+		 * alert( CKEDITOR.tools.<b>getNextNumber()</b> );  // "1" (e.g.)
+		 * alert( CKEDITOR.tools.<b>getNextNumber()</b> );  // "2"
+		 */
+		getNextNumber : (function()
+		{
+			var last = 0;
+			return function()
+			{
+				return ++last;
+			};
+		})(),
+
+		/**
+		 * Gets a unique ID for CKEditor's interface elements. It returns a
+		 * string with the "cke_" prefix and a progressive number.
+		 * @function
+		 * @returns {String} A unique ID.
+		 * @example
+		 * alert( CKEDITOR.tools.<b>getNextId()</b> );  // "cke_1" (e.g.)
+		 * alert( CKEDITOR.tools.<b>getNextId()</b> );  // "cke_2"
+		 */
+		getNextId : function()
+		{
+			return 'cke_' + this.getNextNumber();
+		},
+
+		/**
+		 * Creates a function override.
+		 * @param {Function} originalFunction The function to be overridden.
+		 * @param {Function} functionBuilder A function that returns the new
+		 *		function. The original function reference will be passed to this
+		 *		function.
+		 * @returns {Function} The new function.
+		 * @example
+		 * var example =
+		 * {
+		 *     myFunction : function( name )
+		 *     {
+		 *         alert( 'Name: ' + name );
+		 *     }
+		 * };
+		 *
+		 * example.myFunction = CKEDITOR.tools.override( example.myFunction, function( myFunctionOriginal )
+		 *     {
+		 *         return function( name )
+		 *             {
+		 *                 alert( 'Override Name: ' + name );
+		 *                 myFunctionOriginal.call( this, name );
+		 *             };
+		 *     });
+		 */
+		override : function( originalFunction, functionBuilder )
+		{
+			return functionBuilder( originalFunction );
+		},
+
+		/**
+		 * Executes a function after specified delay.
+		 * @param {Function} func The function to be executed.
+		 * @param {Number} [milliseconds] The amount of time (millisecods) to wait
+		 *		to fire the function execution. Defaults to zero.
+		 * @param {Object} [scope] The object to hold the function execution scope
+		 *		(the "this" object). By default the "window" object.
+		 * @param {Object|Array} [args] A single object, or an array of objects, to
+		 *		pass as arguments to the function.
+		 * @param {Object} [ownerWindow] The window that will be used to set the
+		 *		timeout. By default the current "window".
+		 * @returns {Object} A value that can be used to cancel the function execution.
+		 * @example
+		 * CKEDITOR.tools.<b>setTimeout(
+		 *     function()
+		 *     {
+		 *         alert( 'Executed after 2 seconds' );
+		 *     },
+		 *     2000 )</b>;
+		 */
+		setTimeout : function( func, milliseconds, scope, args, ownerWindow )
+		{
+			if ( !ownerWindow )
+				ownerWindow = window;
+
+			if ( !scope )
+				scope = ownerWindow;
+
+			return ownerWindow.setTimeout(
+				function()
+				{
+					if ( args )
+						func.apply( scope, [].concat( args ) ) ;
+					else
+						func.apply( scope ) ;
+				},
+				milliseconds || 0 );
+		},
+
+		/**
+		 * Remove spaces from the start and the end of a string. The following
+		 * characters are removed: space, tab, line break, line feed.
+		 * @function
+		 * @param {String} str The text from which remove the spaces.
+		 * @returns {String} The modified string without the boundary spaces.
+		 * @example
+		 * alert( CKEDITOR.tools.trim( '  example ' );  // "example"
+		 */
+		trim : (function()
+		{
+			// We are not using \s because we don't want "non-breaking spaces" to be caught.
+			var trimRegex = /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;
+			return function( str )
+			{
+				return str.replace( trimRegex, '' ) ;
+			};
+		})(),
+
+		/**
+		 * Remove spaces from the start (left) of a string. The following
+		 * characters are removed: space, tab, line break, line feed.
+		 * @function
+		 * @param {String} str The text from which remove the spaces.
+		 * @returns {String} The modified string excluding the removed spaces.
+		 * @example
+		 * alert( CKEDITOR.tools.ltrim( '  example ' );  // "example "
+		 */
+		ltrim : (function()
+		{
+			// We are not using \s because we don't want "non-breaking spaces" to be caught.
+			var trimRegex = /^[ \t\n\r]+/g;
+			return function( str )
+			{
+				return str.replace( trimRegex, '' ) ;
+			};
+		})(),
+
+		/**
+		 * Remove spaces from the end (right) of a string. The following
+		 * characters are removed: space, tab, line break, line feed.
+		 * @function
+		 * @param {String} str The text from which remove the spaces.
+		 * @returns {String} The modified string excluding the removed spaces.
+		 * @example
+		 * alert( CKEDITOR.tools.ltrim( '  example ' );  // "  example"
+		 */
+		rtrim : (function()
+		{
+			// We are not using \s because we don't want "non-breaking spaces" to be caught.
+			var trimRegex = /[ \t\n\r]+$/g;
+			return function( str )
+			{
+				return str.replace( trimRegex, '' ) ;
+			};
+		})(),
+
+		/**
+		 * Returns the index of an element in an array.
+		 * @param {Array} array The array to be searched.
+		 * @param {Object} entry The element to be found.
+		 * @returns {Number} The (zero based) index of the first entry that matches
+		 *		the entry, or -1 if not found.
+		 * @example
+		 * var letters = [ 'a', 'b', 0, 'c', false ];
+		 * alert( CKEDITOR.tools.indexOf( letters, '0' ) );  "-1" because 0 !== '0'
+		 * alert( CKEDITOR.tools.indexOf( letters, false ) );  "4" because 0 !== false
+		 */
+		indexOf :
+			// #2514: We should try to use Array.indexOf if it does exist.
+			( Array.prototype.indexOf ) ?
+				function( array, entry )
+					{
+						return array.indexOf( entry );
+					}
+			:
+				function( array, entry )
+				{
+					for ( var i = 0, len = array.length ; i < len ; i++ )
+					{
+						if ( array[ i ] === entry )
+							return i;
+					}
+					return -1;
+				},
+
+		/**
+		 * Creates a function that will always execute in the context of a
+		 * specified object.
+		 * @param {Function} func The function to be executed.
+		 * @param {Object} obj The object to which bind the execution context.
+		 * @returns {Function} The function that can be used to execute the
+		 *		"func" function in the context of "obj".
+		 * @example
+		 * var obj = { text : 'My Object' };
+		 *
+		 * function alertText()
+		 * {
+		 *     alert( this.text );
+		 * }
+		 *
+		 * var newFunc = <b>CKEDITOR.tools.bind( alertText, obj )</b>;
+		 * newFunc();  // Alerts "My Object".
+		 */
+		bind : function( func, obj )
+		{
+			return function() { return func.apply( obj, arguments ); };
+		},
+
+		/**
+		 * Class creation based on prototype inheritance, with supports of the
+		 * following features:
+		 * <ul>
+		 * <li> Static fields </li>
+		 * <li> Private fields </li>
+		 * <li> Public (prototype) fields </li>
+		 * <li> Chainable base class constructor </li>
+		 * </ul>
+		 * @param {Object} definition The class definition object.
+		 * @returns {Function} A class-like JavaScript function.
+		 */
+		createClass : function( definition )
+		{
+			var $ = definition.$,
+				baseClass = definition.base,
+				privates = definition.privates || definition._,
+				proto = definition.proto,
+				statics = definition.statics;
+
+			if ( privates )
+			{
+				var originalConstructor = $;
+				$ = function()
+				{
+					// Create (and get) the private namespace.
+					var _ = this._ || ( this._ = {} );
+
+					// Make some magic so "this" will refer to the main
+					// instance when coding private functions.
+					for ( var privateName in privates )
+					{
+						var priv = privates[ privateName ];
+
+						_[ privateName ] =
+							( typeof priv == 'function' ) ? CKEDITOR.tools.bind( priv, this ) : priv;
+					}
+
+					originalConstructor.apply( this, arguments );
+				};
+			}
+
+			if ( baseClass )
+			{
+				$.prototype = this.prototypedCopy( baseClass.prototype );
+				$.prototype.constructor = $;
+				$.prototype.base = function()
+				{
+					this.base = baseClass.prototype.base;
+					baseClass.apply( this, arguments );
+					this.base = arguments.callee;
+				};
+			}
+
+			if ( proto )
+				this.extend( $.prototype, proto, true );
+
+			if ( statics )
+				this.extend( $, statics, true );
+
+			return $;
+		},
+
+		/**
+		 * Creates a function reference that can be called later using
+		 * CKEDITOR.tools.callFunction. This approach is specially useful to
+		 * make DOM attribute function calls to JavaScript defined functions.
+		 * @param {Function} fn The function to be executed on call.
+		 * @param {Object} [scope] The object to have the context on "fn" execution.
+		 * @returns {Number} A unique reference to be used in conjuction with
+		 *		CKEDITOR.tools.callFunction.
+		 * @example
+		 * var ref = <b>CKEDITOR.tools.addFunction</b>(
+		 *     function()
+		 *     {
+		 *         alert( 'Hello!');
+		 *     });
+		 * CKEDITOR.tools.callFunction( ref );  // Hello!
+		 */
+		addFunction : function( fn, scope )
+		{
+			return functions.push( function()
+				{
+					return fn.apply( scope || this, arguments );
+				}) - 1;
+		},
+
+		/**
+		 * Removes the function reference created with {@see CKEDITOR.tools.addFunction}.
+		 * @param {Number} ref The function reference created with
+		 *		CKEDITOR.tools.addFunction.
+		 */
+		removeFunction : function( ref )
+		{
+			functions[ ref ] = null;
+		},
+
+		/**
+		 * Executes a function based on the reference created with
+		 * CKEDITOR.tools.addFunction.
+		 * @param {Number} ref The function reference created with
+		 *		CKEDITOR.tools.addFunction.
+		 * @param {[Any,[Any,...]} params Any number of parameters to be passed
+		 *		to the executed function.
+		 * @returns {Any} The return value of the function.
+		 * @example
+		 * var ref = CKEDITOR.tools.addFunction(
+		 *     function()
+		 *     {
+		 *         alert( 'Hello!');
+		 *     });
+		 * <b>CKEDITOR.tools.callFunction( ref )</b>;  // Hello!
+		 */
+		callFunction : function( ref )
+		{
+			var fn = functions[ ref ];
+			return fn && fn.apply( window, Array.prototype.slice.call( arguments, 1 ) );
+		},
+
+		/**
+		 * Append the 'px' length unit to the size if it's missing.
+		 * @param length
+		 */
+		cssLength : (function()
+		{
+			return function( length )
+			{
+				return length + ( !length || isNaN( Number( length ) ) ? '' : 'px' );
+			};
+		})(),
+
+		/**
+		 * Convert the specified CSS length value to the calculated pixel length inside this page.
+		 * <strong>Note:</strong> Percentage based value is left intact.
+		 * @param {String} cssLength CSS length value.
+		 */
+		convertToPx : ( function ()
+			{
+				var calculator;
+
+				return function( cssLength )
+				{
+					if ( !calculator )
+					{
+						calculator = CKEDITOR.dom.element.createFromHtml(
+								'<div style="position:absolute;left:-9999px;' +
+								'top:-9999px;margin:0px;padding:0px;border:0px;"' +
+								'></div>', CKEDITOR.document );
+						CKEDITOR.document.getBody().append( calculator );
+					}
+
+					if ( !(/%$/).test( cssLength ) )
+					{
+						calculator.setStyle( 'width', cssLength );
+						return calculator.$.clientWidth;
+					}
+
+					return cssLength;
+				};
+			} )(),
+
+		/**
+		 * String specified by {@param str} repeats {@param times} times.
+		 * @param str
+		 * @param times
+		 */
+		repeat : function( str, times )
+		{
+			return new Array( times + 1 ).join( str );
+		},
+
+		/**
+		 * Return the first successfully executed function's return value that
+		 * doesn't throw any exception.
+		 */
+		tryThese : function()
+		{
+			var returnValue;
+			for ( var i = 0, length = arguments.length; i < length; i++ )
+			{
+				var lambda = arguments[i];
+				try
+				{
+					returnValue = lambda();
+					break;
+				}
+				catch (e) {}
+			}
+			return returnValue;
+		},
+
+		/**
+		 * Generate a combined key from a series of params.
+		 * @param {String} subKey One or more string used as sub keys.
+		 * @example
+		 * var key = CKEDITOR.tools.genKey( 'key1', 'key2', 'key3' );
+		 * alert( key );		// "key1-key2-key3".
+		 */
+		genKey : function()
+		{
+			return Array.prototype.slice.call( arguments ).join( '-' );
+		}
+	};
+})();
+
+// PACKAGER_RENAME( CKEDITOR.tools )

+ 84 - 0
web/js/ckeditor/_source/lang/_languages.js

@@ -0,0 +1,84 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+var CKEDITOR_LANGS = (function()
+{
+	var langs =
+	{
+		af		: 'Afrikaans',
+		ar		: 'Arabic',
+		bg		: 'Bulgarian',
+		bn		: 'Bengali/Bangla',
+		bs		: 'Bosnian',
+		ca		: 'Catalan',
+		cs		: 'Czech',
+		cy		: 'Welsh',
+		da		: 'Danish',
+		de		: 'German',
+		el		: 'Greek',
+		en		: 'English',
+		'en-au'	: 'English (Australia)',
+		'en-ca'	: 'English (Canadian)',
+		'en-gb'	: 'English (United Kingdom)',
+		eo		: 'Esperanto',
+		es		: 'Spanish',
+		et		: 'Estonian',
+		eu		: 'Basque',
+		fa		: 'Persian',
+		fi		: 'Finnish',
+		fo		: 'Faroese',
+		fr		: 'French',
+		'fr-ca'	: 'French (Canada)',
+		gl		: 'Galician',
+		gu		: 'Gujarati',
+		he		: 'Hebrew',
+		hi		: 'Hindi',
+		hr		: 'Croatian',
+		hu		: 'Hungarian',
+		is		: 'Icelandic',
+		it		: 'Italian',
+		ja		: 'Japanese',
+		ka		: 'Georgian',
+		km		: 'Khmer',
+		ko		: 'Korean',
+		lt		: 'Lithuanian',
+		lv		: 'Latvian',
+		mn		: 'Mongolian',
+		ms		: 'Malay',
+		nb		: 'Norwegian Bokmal',
+		nl		: 'Dutch',
+		no		: 'Norwegian',
+		pl		: 'Polish',
+		pt		: 'Portuguese (Portugal)',
+		'pt-br'	: 'Portuguese (Brazil)',
+		ro		: 'Romanian',
+		ru		: 'Russian',
+		sk		: 'Slovak',
+		sl		: 'Slovenian',
+		sr		: 'Serbian (Cyrillic)',
+		'sr-latn'	: 'Serbian (Latin)',
+		sv		: 'Swedish',
+		th		: 'Thai',
+		tr		: 'Turkish',
+		uk		: 'Ukrainian',
+		vi		: 'Vietnamese',
+		zh		: 'Chinese Traditional',
+		'zh-cn'	: 'Chinese Simplified'
+	};
+
+	var langsArray = [];
+
+	for ( var code in langs )
+	{
+		langsArray.push( { code : code, name : langs[ code ] } );
+	}
+
+	langsArray.sort( function( a, b )
+		{
+			return ( a.name < b.name ) ? -1 : 1;
+		});
+
+	return langsArray;
+})();

+ 61 - 0
web/js/ckeditor/_source/lang/_translationstatus.txt

@@ -0,0 +1,61 @@
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+
+af.js      Found: 549 Missing: 24
+ar.js      Found: 467 Missing: 106
+bg.js      Found: 291 Missing: 282
+bn.js      Found: 292 Missing: 281
+bs.js      Found: 175 Missing: 398
+ca.js      Found: 550 Missing: 23
+cs.js      Found: 550 Missing: 23
+cy.js      Found: 573 Missing: 0
+da.js      Found: 417 Missing: 156
+de.js      Found: 568 Missing: 5
+el.js      Found: 306 Missing: 267
+en-au.js   Found: 345 Missing: 228
+en-ca.js   Found: 345 Missing: 228
+en-gb.js   Found: 518 Missing: 55
+eo.js      Found: 270 Missing: 303
+es.js      Found: 570 Missing: 3
+et.js      Found: 320 Missing: 253
+eu.js      Found: 417 Missing: 156
+fa.js      Found: 322 Missing: 251
+fi.js      Found: 552 Missing: 21
+fo.js      Found: 551 Missing: 22
+fr-ca.js   Found: 319 Missing: 254
+fr.js      Found: 551 Missing: 22
+gl.js      Found: 292 Missing: 281
+gu.js      Found: 320 Missing: 253
+he.js      Found: 573 Missing: 0
+hi.js      Found: 322 Missing: 251
+hr.js      Found: 419 Missing: 154
+hu.js      Found: 542 Missing: 31
+is.js      Found: 326 Missing: 247
+it.js      Found: 418 Missing: 155
+ja.js      Found: 494 Missing: 79
+ka.js      Found: 569 Missing: 4
+km.js      Found: 286 Missing: 287
+ko.js      Found: 304 Missing: 269
+lt.js      Found: 326 Missing: 247
+lv.js      Found: 294 Missing: 279
+mn.js      Found: 320 Missing: 253
+ms.js      Found: 276 Missing: 297
+nb.js      Found: 550 Missing: 23
+nl.js      Found: 570 Missing: 3
+no.js      Found: 550 Missing: 23
+pl.js      Found: 573 Missing: 0
+pt-br.js   Found: 535 Missing: 38
+pt.js      Found: 293 Missing: 280
+ro.js      Found: 317 Missing: 256
+ru.js      Found: 484 Missing: 89
+sk.js      Found: 365 Missing: 208
+sl.js      Found: 426 Missing: 147
+sr-latn.js Found: 287 Missing: 286
+sr.js      Found: 286 Missing: 287
+sv.js      Found: 551 Missing: 22
+th.js      Found: 298 Missing: 275
+tr.js      Found: 536 Missing: 37
+uk.js      Found: 544 Missing: 29
+vi.js      Found: 493 Missing: 80
+zh-cn.js   Found: 548 Missing: 25
+zh.js      Found: 419 Missing: 154

+ 812 - 0
web/js/ckeditor/_source/lang/af.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Afrikaans language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['af'] =
+{
+	/**
+	 * 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 : 'Teksverwerker, %1, druk op ALT 0 vir hulp.',
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Teksverwerker',
+
+	// Toolbar buttons without dialogs.
+	source			: 'Bron',
+	newPage			: 'Nuwe bladsy',
+	save			: 'Bewaar',
+	preview			: 'Voorbeeld',
+	cut				: 'Knip',
+	copy			: 'Kopiëer',
+	paste			: 'Plak',
+	print			: 'Druk',
+	underline		: 'Onderstreep',
+	bold			: 'Vet',
+	italic			: 'Skuins',
+	selectAll		: 'Selekteer alles',
+	removeFormat	: 'Verwyder opmaak',
+	strike			: 'Deurstreep',
+	subscript		: 'Onderskrif',
+	superscript		: 'Bo-skrif',
+	horizontalrule	: 'Horisontale lyn invoeg',
+	pagebreak		: 'Bladsy-einde invoeg',
+	pagebreakAlt		: 'Bladsy-einde',
+	unlink			: 'Verwyder skakel',
+	undo			: 'Ontdoen',
+	redo			: 'Oordoen',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Blaai op bediener',
+		url				: 'URL',
+		protocol		: 'Protokol',
+		upload			: 'Oplaai',
+		uploadSubmit	: 'Stuur na bediener',
+		image			: 'Afbeelding',
+		flash			: 'Flash',
+		form			: 'Vorm',
+		checkbox		: 'Merkhokkie',
+		radio			: 'Radioknoppie',
+		textField		: 'Teksveld',
+		textarea		: 'Teks-area',
+		hiddenField		: 'Blinde veld',
+		button			: 'Knop',
+		select			: 'Keuseveld',
+		imageButton		: 'Afbeeldingsknop',
+		notSet			: '<geen instelling>',
+		id				: 'Id',
+		name			: 'Naam',
+		langDir			: 'Skryfrigting',
+		langDirLtr		: 'Links na regs (LTR)',
+		langDirRtl		: 'Regs na links (RTL)',
+		langCode		: 'Taalkode',
+		longDescr		: 'Lang beskrywing URL',
+		cssClass		: 'CSS klasse',
+		advisoryTitle	: 'Aanbevole titel',
+		cssStyle		: 'Styl',
+		ok				: 'OK',
+		cancel			: 'Kanselleer',
+		close			: 'Sluit',
+		preview			: 'Voorbeeld',
+		generalTab		: 'Algemeen',
+		advancedTab		: 'Gevorderd',
+		validateNumberFailed : 'Hierdie waarde is nie \'n getal nie.',
+		confirmNewPage	: 'Alle wysiginge sal verlore gaan. Is u seker dat u \'n nuwe bladsy wil laai?',
+		confirmCancel	: 'Sommige opsies is gewysig. Is u seker dat u hierdie dialoogvenster wil sluit?',
+		options			: 'Opsies',
+		target			: 'Doel',
+		targetNew		: 'Nuwe venster (_blank)',
+		targetTop		: 'Boonste venster (_top)',
+		targetSelf		: 'Selfde venster (_self)',
+		targetParent	: 'Oorspronklike venster (_parent)',
+		langDirLTR		: 'Links na Regs (LTR)',
+		langDirRTL		: 'Regs na Links (RTL)',
+		styles			: 'Styl',
+		cssClasses		: 'CSS klasse',
+		width			: 'Breedte',
+		height			: 'Hoogte',
+		align			: 'Oplyn',
+		alignLeft		: 'Links',
+		alignRight		: 'Regs',
+		alignCenter		: 'Sentreer',
+		alignTop		: 'Bo',
+		alignMiddle		: 'Middel',
+		alignBottom		: 'Onder',
+		invalidHeight	: 'Hoogte moet \'n getal wees',
+		invalidWidth	: 'Breedte moet \'n getal wees.',
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, nie beskikbaar nie</span>'
+	},
+
+	contextmenu :
+	{
+		options : 'Konteks Spyskaart-opsies'
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Voeg spesiaale karakter in',
+		title		: 'Kies spesiale karakter',
+		options : 'Spesiale karakter-opsies'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Skakel invoeg/wysig',
+		other 		: '<ander>',
+		menu		: 'Wysig skakel',
+		title		: 'Skakel',
+		info		: 'Skakel informasie',
+		target		: 'Doel',
+		upload		: 'Oplaai',
+		advanced	: 'Gevorderd',
+		type		: 'Skakelsoort',
+		toUrl		: 'URL',
+		toAnchor	: 'Anker in bladsy',
+		toEmail		: 'E-pos',
+		targetFrame		: '<raam>',
+		targetPopup		: '<opspringvenster>',
+		targetFrameName	: 'Naam van doelraam',
+		targetPopupName	: 'Naam van opspringvenster',
+		popupFeatures	: 'Eienskappe van opspringvenster',
+		popupResizable	: 'Herskaalbaar',
+		popupStatusBar	: 'Statusbalk',
+		popupLocationBar: 'Adresbalk',
+		popupToolbar	: 'Werkbalk',
+		popupMenuBar	: 'Spyskaartbalk',
+		popupFullScreen	: 'Volskerm (IE)',
+		popupScrollBars	: 'Skuifbalke',
+		popupDependent	: 'Afhanklik (Netscape)',
+		popupLeft		: 'Posisie links',
+		popupTop		: 'Posisie bo',
+		id				: 'Id',
+		langDir			: 'Skryfrigting',
+		langDirLTR		: 'Links na regs (LTR)',
+		langDirRTL		: 'Regs na links (RTL)',
+		acccessKey		: 'Toegangsleutel',
+		name			: 'Naam',
+		langCode			: 'Taalkode',
+		tabIndex			: 'Tab indeks',
+		advisoryTitle		: 'Aanbevole titel',
+		advisoryContentType	: 'Aanbevole inhoudstipe',
+		cssClasses		: 'CSS klasse',
+		charset			: 'Karakterstel van geskakelde bron',
+		styles			: 'Styl',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Kies \'n anker',
+		anchorName		: 'Op ankernaam',
+		anchorId			: 'Op element Id',
+		emailAddress		: 'E-posadres',
+		emailSubject		: 'Berig-onderwerp',
+		emailBody		: 'Berig-inhoud',
+		noAnchors		: '(Geen ankers beskikbaar in dokument)',
+		noUrl			: 'Gee die skakel se URL',
+		noEmail			: 'Gee die e-posadres'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Anker byvoeg/verander',
+		menu		: 'Anker-eienskappe',
+		title		: 'Anker-eienskappe',
+		name		: 'Ankernaam',
+		errorName	: 'Voltooi die ankernaam asseblief',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Eienskappe van genommerde lys',
+		bulletedTitle		: 'Eienskappe van ongenommerde lys',
+		type				: 'Tipe',
+		start				: 'Begin',
+		validateStartNumber				:'Beginnommer van lys moet \'n heelgetal wees.',
+		circle				: 'Sirkel',
+		disc				: 'Skyf',
+		square				: 'Vierkant',
+		none				: 'Geen',
+		notset				: '<nie ingestel nie>',
+		armenian			: 'Armeense nommering',
+		georgian			: 'Georgiese nommering (an, ban, gan, ens.)',
+		lowerRoman			: 'Romeinse kleinletters (i, ii, iii, iv, v, ens.)',
+		upperRoman			: 'Romeinse hoofletters (I, II, III, IV, V, ens.)',
+		lowerAlpha			: 'Kleinletters (a, b, c, d, e, ens.)',
+		upperAlpha			: 'Hoofletters (A, B, C, D, E, ens.)',
+		lowerGreek			: 'Griekse kleinletters (alpha, beta, gamma, ens.)',
+		decimal				: 'Desimale syfers (1, 2, 3, ens.)',
+		decimalLeadingZero	: 'Desimale syfers met voorloopnul (01, 02, 03, ens.)'
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Soek en vervang',
+		find				: 'Soek',
+		replace				: 'Vervang',
+		findWhat			: 'Soek na:',
+		replaceWith			: 'Vervang met:',
+		notFoundMsg			: 'Teks nie gevind nie.',
+		matchCase			: 'Hoof/kleinletter sensitief',
+		matchWord			: 'Hele woord moet voorkom',
+		matchCyclic			: 'Soek deurlopend',
+		replaceAll			: 'Vervang alles',
+		replaceSuccessMsg	: '%1 voorkoms(te) vervang.'
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tabel',
+		title		: 'Tabel eienskappe',
+		menu		: 'Tabel eienskappe',
+		deleteTable	: 'Verwyder tabel',
+		rows		: 'Rye',
+		columns		: 'Kolomme',
+		border		: 'Randbreedte',
+		widthPx		: 'piksels',
+		widthPc		: 'persent',
+		widthUnit	: 'breedte-eenheid',
+		cellSpace	: 'Sel-afstand',
+		cellPad		: 'Sel-spasie',
+		caption		: 'Naam',
+		summary		: 'Opsomming',
+		headers		: 'Opskrifte',
+		headersNone		: 'Geen',
+		headersColumn	: 'Eerste kolom',
+		headersRow		: 'Eerste ry',
+		headersBoth		: 'Beide    ',
+		invalidRows		: 'Aantal rye moet \'n getal groter as 0 wees.',
+		invalidCols		: 'Aantal kolomme moet \'n getal groter as 0 wees.',
+		invalidBorder	: 'Randbreedte moet \'n getal wees.',
+		invalidWidth	: 'Tabelbreedte moet \'n getal wees.',
+		invalidHeight	: 'Tabelhoogte moet \'n getal wees.',
+		invalidCellSpacing	: 'Sel-afstand moet \'n getal wees.',
+		invalidCellPadding	: 'Sel-spasie moet \'n getal wees.',
+
+		cell :
+		{
+			menu			: 'Sel',
+			insertBefore	: 'Voeg sel in voor',
+			insertAfter		: 'Voeg sel in na',
+			deleteCell		: 'Verwyder sel',
+			merge			: 'Voeg selle saam',
+			mergeRight		: 'Voeg saam na regs',
+			mergeDown		: 'Voeg saam ondertoe',
+			splitHorizontal	: 'Splits sel horisontaal',
+			splitVertical	: 'Splits sel vertikaal',
+			title			: 'Sel eienskappe',
+			cellType		: 'Sel tipe',
+			rowSpan			: 'Omspan rye',
+			colSpan			: 'Omspan kolomme',
+			wordWrap		: 'Woord terugloop',
+			hAlign			: 'Horisontale oplyning',
+			vAlign			: 'Vertikale oplyning',
+			alignBaseline	: 'Basislyn',
+			bgColor			: 'Agtergrondkleur',
+			borderColor		: 'Randkleur',
+			data			: 'Inhoud',
+			header			: 'Opskrif',
+			yes				: 'Ja',
+			no				: 'Nee',
+			invalidWidth	: 'Selbreedte moet \'n getal wees.',
+			invalidHeight	: 'Selhoogte moet \'n getal wees.',
+			invalidRowSpan	: 'Omspan rye moet \'n heelgetal wees.',
+			invalidColSpan	: 'Omspan kolomme moet \'n heelgetal wees.',
+			chooseColor		: 'Kies'
+		},
+
+		row :
+		{
+			menu			: 'Ry',
+			insertBefore	: 'Voeg ry in voor',
+			insertAfter		: 'Voeg ry in na',
+			deleteRow		: 'Verwyder ry'
+		},
+
+		column :
+		{
+			menu			: 'Kolom',
+			insertBefore	: 'Voeg kolom in voor',
+			insertAfter		: 'Voeg kolom in na',
+			deleteColumn	: 'Verwyder kolom'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Knop eienskappe',
+		text		: 'Teks (Waarde)',
+		type		: 'Soort',
+		typeBtn		: 'Knop',
+		typeSbm		: 'Stuur',
+		typeRst		: 'Maak leeg'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Merkhokkie eienskappe',
+		radioTitle	: 'Radioknoppie eienskappe',
+		value		: 'Waarde',
+		selected	: 'Geselekteer'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Vorm eienskappe',
+		menu		: 'Vorm eienskappe',
+		action		: 'Aksie',
+		method		: 'Metode',
+		encoding	: 'Kodering'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Keuseveld eienskappe',
+		selectInfo	: 'Info',
+		opAvail		: 'Beskikbare opsies',
+		value		: 'Waarde',
+		size		: 'Grootte',
+		lines		: 'Lyne',
+		chkMulti	: 'Laat meer as een keuse toe',
+		opText		: 'Teks',
+		opValue		: 'Waarde',
+		btnAdd		: 'Byvoeg',
+		btnModify	: 'Wysig',
+		btnUp		: 'Op',
+		btnDown		: 'Af',
+		btnSetValue : 'Stel as geselekteerde waarde',
+		btnDelete	: 'Verwyder'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Teks-area eienskappe',
+		cols		: 'Kolomme',
+		rows		: 'Rye'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Teksveld eienskappe',
+		name		: 'Naam',
+		value		: 'Waarde',
+		charWidth	: 'Breedte (karakters)',
+		maxChars	: 'Maksimum karakters',
+		type		: 'Soort',
+		typeText	: 'Teks',
+		typePass	: 'Wagwoord'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Verborge veld eienskappe',
+		name	: 'Naam',
+		value	: 'Waarde'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Afbeelding eienskappe',
+		titleButton	: 'Afbeeldingsknop eienskappe',
+		menu		: 'Afbeelding eienskappe',
+		infoTab		: 'Afbeelding informasie',
+		btnUpload	: 'Stuur na bediener',
+		upload		: 'Oplaai',
+		alt			: 'Alternatiewe teks',
+		lockRatio	: 'Vaste proporsie',
+		resetSize	: 'Herstel grootte',
+		border		: 'Rand',
+		hSpace		: 'HSpasie',
+		vSpace		: 'VSpasie',
+		alertUrl	: 'Gee URL van afbeelding.',
+		linkTab		: 'Skakel',
+		button2Img	: 'Wil u die geselekteerde afbeeldingsknop vervang met \'n eenvoudige afbeelding?',
+		img2Button	: 'Wil u die geselekteerde afbeelding vervang met \'n afbeeldingsknop?',
+		urlMissing	: 'Die URL na die afbeelding ontbreek.',
+		validateBorder	: 'Rand moet \'n heelgetal wees.',
+		validateHSpace	: 'HSpasie moet \'n heelgetal wees.',
+		validateVSpace	: 'VSpasie moet \'n heelgetal wees.'
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Flash eienskappe',
+		propertiesTab	: 'Eienskappe',
+		title			: 'Flash eienskappe',
+		chkPlay			: 'Speel outomaties',
+		chkLoop			: 'Herhaal',
+		chkMenu			: 'Flash spyskaart aan',
+		chkFull			: 'Laat volledige skerm toe',
+ 		scale			: 'Skaal',
+		scaleAll		: 'Wys alles',
+		scaleNoBorder	: 'Geen rand',
+		scaleFit		: 'Presiese pas',
+		access			: 'Skrip toegang',
+		accessAlways	: 'Altyd',
+		accessSameDomain: 'Selfde domeinnaam',
+		accessNever		: 'Nooit',
+		alignAbsBottom	: 'Absoluut-onder',
+		alignAbsMiddle	: 'Absoluut-middel',
+		alignBaseline	: 'Basislyn',
+		alignTextTop	: 'Teks bo',
+		quality			: 'Kwaliteit',
+		qualityBest		: 'Beste',
+		qualityHigh		: 'Hoog',
+		qualityAutoHigh	: 'Outomaties hoog',
+		qualityMedium	: 'Gemiddeld',
+		qualityAutoLow	: 'Outomaties laag',
+		qualityLow		: 'Laag',
+		windowModeWindow: 'Venster',
+		windowModeOpaque: 'Ondeursigtig',
+		windowModeTransparent : 'Deursigtig',
+		windowMode		: 'Venster modus',
+		flashvars		: 'Veranderlikes vir Flash',
+		bgcolor			: 'Agtergrondkleur',
+		hSpace			: 'HSpasie',
+		vSpace			: 'VSpasie',
+		validateSrc		: 'Voeg die URL in',
+		validateHSpace	: 'HSpasie moet \'n heelgetal wees.',
+		validateVSpace	: 'VSpasie moet \'n heelgetal wees.'
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Speltoets',
+		title			: 'Speltoetser',
+		notAvailable	: 'Jammer, hierdie diens is nie nou beskikbaar nie.',
+		errorLoading	: 'Fout by inlaai van diens: %s.',
+		notInDic		: 'Nie in woordeboek nie',
+		changeTo		: 'Verander na',
+		btnIgnore		: 'Ignoreer',
+		btnIgnoreAll	: 'Ignoreer alles',
+		btnReplace		: 'Vervang',
+		btnReplaceAll	: 'vervang alles',
+		btnUndo			: 'Ontdoen',
+		noSuggestions	: '- Geen voorstel -',
+		progress		: 'Spelling word getoets...',
+		noMispell		: 'Klaar met speltoets: Geen foute nie',
+		noChanges		: 'Klaar met speltoets: Geen woorde verander nie',
+		oneChange		: 'Klaar met speltoets: Een woord verander',
+		manyChanges		: 'Klaar met speltoets: %1 woorde verander',
+		ieSpellDownload	: 'Speltoetser is nie geïnstalleer nie. Wil u dit nou aflaai?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Lagbekkie',
+		title	: 'Voeg lagbekkie by',
+		options : 'Lagbekkie opsies'
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elemente-pad',
+		eleTitle : '%1 element'
+	},
+
+	numberedlist	: 'Genommerde lys',
+	bulletedlist	: 'Ongenommerde lys',
+	indent			: 'Vergroot inspring',
+	outdent			: 'Verklein inspring',
+
+	justify :
+	{
+		left	: 'Links oplyn',
+		center	: 'Sentreer',
+		right	: 'Regs oplyn',
+		block	: 'Uitvul'
+	},
+
+	blockquote : 'Sitaatblok',
+
+	clipboard :
+	{
+		title		: 'Byvoeg',
+		cutError	: 'U blaaier se sekuriteitsinstelling belet die outomatiese knip-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).',
+		copyError	: 'U blaaier se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).',
+		pasteMsg	: 'Plak die teks in die volgende teks-area met die sleutelbordkombinasie (<STRONG>Ctrl/Cmd+V</STRONG>) en druk <STRONG>OK</STRONG>.',
+		securityMsg	: 'Weens u blaaier se sekuriteitsinstelling is data op die knipbord nie toeganklik nie. U kan dit eers weer in hierdie venster plak.',
+		pasteArea	: 'Plak-area'
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'Die teks wat u wil plak lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit geplak word?',
+		toolbar			: 'Plak vanuit Word',
+		title			: 'Plak vanuit Word',
+		error			: 'Die geplakte teks kon nie skoongemaak word nie, weens \'n interne fout'
+	},
+
+	pasteText :
+	{
+		button	: 'Plak as eenvoudige teks',
+		title	: 'Plak as eenvoudige teks'
+	},
+
+	templates :
+	{
+		button			: 'Sjablone',
+		title			: 'Inhoud Sjablone',
+		options : 'Sjabloon opsies',
+		insertOption	: 'Vervang huidige inhoud',
+		selectPromptMsg	: 'Kies die sjabloon om te gebruik in die redigeerder (huidige inhoud gaan verlore):',
+		emptyListMsg	: '(Geen sjablone gedefineer nie)'
+	},
+
+	showBlocks : 'Toon blokke',
+
+	stylesCombo :
+	{
+		label		: 'Styl',
+		panelTitle	: 'Opmaak style',
+		panelTitle1	: 'Blok style',
+		panelTitle2	: 'Inlyn style',
+		panelTitle3	: 'Objek style'
+	},
+
+	format :
+	{
+		label		: 'Opmaak',
+		panelTitle	: 'Opmaak',
+
+		tag_p		: 'Normaal',
+		tag_pre		: 'Opgemaak',
+		tag_address	: 'Adres',
+		tag_h1		: 'Opskrif 1',
+		tag_h2		: 'Opskrif 2',
+		tag_h3		: 'Opskrif 3',
+		tag_h4		: 'Opskrif 4',
+		tag_h5		: 'Opskrif 5',
+		tag_h6		: 'Opskrif 6',
+		tag_div		: 'Normaal (DIV)'
+	},
+
+	div :
+	{
+		title				: 'Skep Div houer',
+		toolbar				: 'Skep Div houer',
+		cssClassInputLabel	: 'CSS klasse',
+		styleSelectLabel	: 'Styl',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Taalkode',
+		inlineStyleInputLabel	: 'Inlyn Styl',
+		advisoryTitleInputLabel	: 'Aanbevole Titel',
+		langDirLabel		: 'Skryfrigting',
+		langDirLTRLabel		: 'Links na regs (LTR)',
+		langDirRTLLabel		: 'Regs na links (RTL)',
+		edit				: 'Wysig Div',
+		remove				: 'Verwyder Div'
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Eienskappe',
+		toolbar		: 'IFrame',
+		noUrl		: 'Gee die iframe URL',
+		scrolling	: 'Skuifbalke aan',
+		border		: 'Wys rand van raam'
+	},
+
+	font :
+	{
+		label		: 'Font',
+		voiceLabel	: 'Font',
+		panelTitle	: 'Fontnaam'
+	},
+
+	fontSize :
+	{
+		label		: 'Grootte',
+		voiceLabel	: 'Fontgrootte',
+		panelTitle	: 'Fontgrootte'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Tekskleur',
+		bgColorTitle	: 'Agtergrondkleur',
+		panelTitle		: 'Kleure',
+		auto			: 'Outomaties',
+		more			: 'Meer Kleure...'
+	},
+
+	colors :
+	{
+		'000' : 'Swart',
+		'800000' : 'Meroen',
+		'8B4513' : 'Sjokoladebruin',
+		'2F4F4F' : 'Donkerleisteengrys',
+		'008080' : 'Blougroen',
+		'000080' : 'Vlootblou',
+		'4B0082' : 'Indigo',
+		'696969' : 'Donkergrys',
+		'B22222' : 'Rooibaksteen',
+		'A52A2A' : 'Bruin',
+		'DAA520' : 'Donkergeel',
+		'006400' : 'Donkergroen',
+		'40E0D0' : 'Turkoois',
+		'0000CD' : 'Middelblou',
+		'800080' : 'Pers',
+		'808080' : 'Grys',
+		'F00' : 'Rooi',
+		'FF8C00' : 'Donkeroranje',
+		'FFD700' : 'Goud',
+		'008000' : 'Groen',
+		'0FF' : 'Siaan',
+		'00F' : 'Blou',
+		'EE82EE' : 'Viooltjieblou',
+		'A9A9A9' : 'Donkergrys',
+		'FFA07A' : 'Ligsalm',
+		'FFA500' : 'Oranje',
+		'FFFF00' : 'Geel',
+		'00FF00' : 'Lemmetjie',
+		'AFEEEE' : 'Ligturkoois',
+		'ADD8E6' : 'Ligblou',
+		'DDA0DD' : 'Pruim',
+		'D3D3D3' : 'Liggrys',
+		'FFF0F5' : 'Linne',
+		'FAEBD7' : 'Ivoor',
+		'FFFFE0' : 'Liggeel',
+		'F0FFF0' : 'Heuningdou',
+		'F0FFFF' : 'Asuur',
+		'F0F8FF' : 'Ligte hemelsblou',
+		'E6E6FA' : 'Laventel',
+		'FFF' : 'Wit'
+	},
+
+	scayt :
+	{
+		title			: 'Speltoets terwyl u tik',
+		opera_title		: 'Nie ondersteun deur Opera nie',
+		enable			: 'SCAYT aan',
+		disable			: 'SCAYT af',
+		about			: 'SCAYT info',
+		toggle			: 'SCAYT wissel aan/af',
+		options			: 'Opsies',
+		langs			: 'Tale',
+		moreSuggestions	: 'Meer voorstelle',
+		ignore			: 'Ignoreer',
+		ignoreAll		: 'Ignoreer alles',
+		addWord			: 'Voeg woord by',
+		emptyDic		: 'Woordeboeknaam mag nie leeg wees nie.',
+
+		optionsTab		: 'Opsies',
+		allCaps			: 'Ignoreer woorde in hoofletters',
+		ignoreDomainNames : 'Ignoreer domeinname',
+		mixedCase		: 'Ignoreer woorde met hoof- en kleinletters',
+		mixedWithDigits	: 'Ignoreer woorde met syfers',
+
+		languagesTab	: 'Tale',
+
+		dictionariesTab	: 'Woordeboeke',
+		dic_field_name	: 'Naam van woordeboek',
+		dic_create		: 'Skep',
+		dic_restore		: 'Herstel',
+		dic_delete		: 'Verwijder',
+		dic_rename		: 'Hernoem',
+		dic_info		: 'Aanvanklik word die gebruikerswoordeboek in \'n koekie gestoor. Koekies is egter beperk in grootte. Wanneer die gebruikerswoordeboek te groot vir \'n koekie geword het, kan dit op ons bediener gestoor word. Om u persoonlike woordeboek op ons bediener te stoor, gee asb. \'n naam vir u woordeboek. Indien u alreeds \'n gestoorde woordeboek het, tik die naam en kliek op die Herstel knop.',
+
+		aboutTab		: 'Info'
+	},
+
+	about :
+	{
+		title		: 'Info oor CKEditor',
+		dlgTitle	: 'Info oor CKEditor',
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // MISSING
+		moreInfo	: 'Vir lisensie-informasie, besoek asb. ons webwerf:',
+		copy		: 'Kopiereg &copy; $1. Alle regte voorbehou.'
+	},
+
+	maximize : 'Maksimaliseer',
+	minimize : 'Minimaliseer',
+
+	fakeobjects :
+	{
+		anchor		: 'Anker',
+		flash		: 'Flash animasie',
+		iframe		: 'IFrame',
+		hiddenfield	: 'Verborge veld',
+		unknown		: 'Onbekende objek'
+	},
+
+	resize : 'Sleep om te herskaal',
+
+	colordialog :
+	{
+		title		: 'Kies kleur',
+		options	:	'Kleuropsies',
+		highlight	: 'Aktief',
+		selected	: 'Geselekteer',
+		clear		: 'Herstel'
+	},
+
+	toolbarCollapse	: 'Verklein werkbalk',
+	toolbarExpand	: 'Vergroot werkbalk',
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Skryfrigting van links na regs',
+		rtl : 'Skryfrigting van regs na links'
+	},
+
+	docprops :
+	{
+		label : 'Dokument Eienskappe',
+		title : 'Dokument Eienskappe',
+		design : 'Design', // MISSING
+		meta : 'Meta Data',
+		chooseColor : 'Kies',
+		other : '<ander>',
+		docTitle :	'Bladsy Opskrif',
+		charset : 	'Karakterstel Kodeering',
+		charsetOther : 'Ander Karakterstel Kodeering',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Sentraal Europa',
+		charsetCT : 'Chinees Traditioneel (Big5)',
+		charsetCR : 'Cyrillic', // MISSING
+		charsetGR : 'Grieks',
+		charsetJP : 'Japanees',
+		charsetKR : 'Koreans',
+		charsetTR : 'Turks',
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Western European', // MISSING
+		docType : 'Dokument Opskrif Soort',
+		docTypeOther : 'Ander Dokument Opskrif Soort',
+		xhtmlDec : 'Voeg XHTML verklaring by',
+		bgColor : 'Agtergrond kleur',
+		bgImage : 'Agtergrond Beeld URL',
+		bgFixed : 'Vasgeklemde Agtergrond',
+		txtColor : 'Tekskleur',
+		margin : 'Bladsy Rante',
+		marginTop : 'Bo',
+		marginLeft : 'Links',
+		marginRight : 'Regs',
+		marginBottom : 'Onder',
+		metaKeywords : 'Dokument Index Sleutelwoorde(comma verdeelt)',
+		metaDescription : 'Dokument Beskrywing',
+		metaAuthor : 'Skrywer',
+		metaCopyright : 'Kopiereg',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/ar.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Arabic language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['ar'] =
+{
+	/**
+	 * 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 : 'rtl',
+
+	/*
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'المصدر',
+	newPage			: 'صفحة جديدة',
+	save			: 'حفظ',
+	preview			: 'معاينة الصفحة',
+	cut				: 'قص',
+	copy			: 'نسخ',
+	paste			: 'لصق',
+	print			: 'طباعة',
+	underline		: 'تسطير',
+	bold			: 'غامق',
+	italic			: 'مائل',
+	selectAll		: 'تحديد الكل',
+	removeFormat	: 'إزالة التنسيقات',
+	strike			: 'يتوسطه خط',
+	subscript		: 'منخفض',
+	superscript		: 'مرتفع',
+	horizontalrule	: 'خط فاصل',
+	pagebreak		: 'إدخال صفحة جديدة',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'إزالة رابط',
+	undo			: 'تراجع',
+	redo			: 'إعادة',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'تصفح',
+		url				: 'الرابط',
+		protocol		: 'البروتوكول',
+		upload			: 'رفع',
+		uploadSubmit	: 'أرسل',
+		image			: 'صورة',
+		flash			: 'فلاش',
+		form			: 'نموذج',
+		checkbox		: 'خانة إختيار',
+		radio			: 'زر اختيار',
+		textField		: 'مربع نص',
+		textarea		: 'مساحة نصية',
+		hiddenField		: 'إدراج حقل خفي',
+		button			: 'زر ضغط',
+		select			: 'اختار',
+		imageButton		: 'زر صورة',
+		notSet			: '<بدون تحديد>',
+		id				: 'الرقم',
+		name			: 'الاسم',
+		langDir			: 'إتجاه النص',
+		langDirLtr		: 'اليسار لليمين (LTR)',
+		langDirRtl		: 'اليمين لليسار (RTL)',
+		langCode		: 'رمز اللغة',
+		longDescr		: 'الوصف التفصيلى',
+		cssClass		: 'فئات التنسيق',
+		advisoryTitle	: 'عنوان التقرير',
+		cssStyle		: 'نمط',
+		ok				: 'موافق',
+		cancel			: 'إلغاء الأمر',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'عام',
+		advancedTab		: 'متقدم',
+		validateNumberFailed : 'لايوجد نتيجة',
+		confirmNewPage	: 'ستفقد أي متغييرات اذا لم تقم بحفظها اولا. هل أنت متأكد أنك تريد صفحة جديدة؟',
+		confirmCancel	: 'بعض الخيارات قد تغيرت. هل أنت متأكد من إغلاق مربع النص؟',
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'العرض',
+		height			: 'الإرتفاع',
+		align			: 'محاذاة',
+		alignLeft		: 'يسار',
+		alignRight		: 'يمين',
+		alignCenter		: 'وسط',
+		alignTop		: 'أعلى',
+		alignMiddle		: 'وسط',
+		alignBottom		: 'أسفل',
+		invalidHeight	: 'الارتفاع يجب أن يكون عدداً.',
+		invalidWidth	: 'العرض يجب أن يكون عدداً.',
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, غير متاح</span>'
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'إدراج  خاص.ِ',
+		title		: 'اختر الخواص',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'رابط',
+		other 		: '<أخرى>',
+		menu		: 'تحرير رابط',
+		title		: 'إرتباط تشعبي',
+		info		: 'معلومات الرابط',
+		target		: 'هدف الرابط',
+		upload		: 'رفع',
+		advanced	: 'متقدم',
+		type		: 'نوع الربط',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'مكان في هذا المستند',
+		toEmail		: 'بريد إلكتروني',
+		targetFrame		: '<إطار>',
+		targetPopup		: '<نافذة منبثقة>',
+		targetFrameName	: 'اسم الإطار المستهدف',
+		targetPopupName	: 'اسم النافذة المنبثقة',
+		popupFeatures	: 'خصائص النافذة المنبثقة',
+		popupResizable	: 'قابلة التشكيل',
+		popupStatusBar	: 'شريط الحالة',
+		popupLocationBar: 'شريط العنوان',
+		popupToolbar	: 'شريط الأدوات',
+		popupMenuBar	: 'القوائم الرئيسية',
+		popupFullScreen	: 'ملئ الشاشة (IE)',
+		popupScrollBars	: 'أشرطة التمرير',
+		popupDependent	: 'تابع (Netscape)',
+		popupLeft		: 'التمركز لليسار',
+		popupTop		: 'التمركز للأعلى',
+		id				: 'هوية',
+		langDir			: 'إتجاه النص',
+		langDirLTR		: 'اليسار لليمين (LTR)',
+		langDirRTL		: 'اليمين لليسار (RTL)',
+		acccessKey		: 'مفاتيح الإختصار',
+		name			: 'الاسم',
+		langCode			: 'كود النص',
+		tabIndex			: 'الترتيب',
+		advisoryTitle		: 'عنوان التقرير',
+		advisoryContentType	: 'نوع التقرير',
+		cssClasses		: 'فئات التنسيق',
+		charset			: 'ترميز المادة المطلوبة',
+		styles			: 'نمط',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'اختر علامة مرجعية',
+		anchorName		: 'حسب الاسم',
+		anchorId			: 'حسب رقم العنصر',
+		emailAddress		: 'عنوان البريد إلكتروني',
+		emailSubject		: 'موضوع الرسالة',
+		emailBody		: 'محتوى الرسالة',
+		noAnchors		: '(لا توجد علامات مرجعية في هذا المستند)',
+		noUrl			: 'من فضلك أدخل عنوان الموقع الذي يشير إليه الرابط',
+		noEmail			: 'من فضلك أدخل عنوان البريد الإلكتروني'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'إشارة مرجعية',
+		menu		: 'تحرير الإشارة المرجعية',
+		title		: 'خصائص الإشارة المرجعية',
+		name		: 'اسم الإشارة المرجعية',
+		errorName	: 'الرجاء كتابة اسم الإشارة المرجعية',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'بحث واستبدال',
+		find				: 'بحث',
+		replace				: 'إستبدال',
+		findWhat			: 'البحث بـ:',
+		replaceWith			: 'إستبدال بـ:',
+		notFoundMsg			: 'لم يتم العثور على النص المحدد.',
+		matchCase			: 'مطابقة حالة الأحرف',
+		matchWord			: 'مطابقة بالكامل',
+		matchCyclic			: 'مطابقة دورية',
+		replaceAll			: 'إستبدال الكل',
+		replaceSuccessMsg	: 'تم استبدال 1% من الحالات '
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'جدول',
+		title		: 'خصائص الجدول',
+		menu		: 'خصائص الجدول',
+		deleteTable	: 'حذف الجدول',
+		rows		: 'صفوف',
+		columns		: 'أعمدة',
+		border		: 'الحدود',
+		widthPx		: 'بكسل',
+		widthPc		: 'بالمئة',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'تباعد الخلايا',
+		cellPad		: 'المسافة البادئة',
+		caption		: 'الوصف',
+		summary		: 'الخلاصة',
+		headers		: 'العناوين',
+		headersNone		: 'بدون',
+		headersColumn	: 'العمود الأول',
+		headersRow		: 'الصف الأول',
+		headersBoth		: 'كلاهما',
+		invalidRows		: 'عدد الصفوف يجب أن يكون عدداً أكبر من صفر.',
+		invalidCols		: 'عدد الأعمدة يجب أن يكون عدداً أكبر من صفر.',
+		invalidBorder	: 'حجم الحد يجب أن يكون عدداً.',
+		invalidWidth	: 'عرض الجدول يجب أن يكون عدداً.',
+		invalidHeight	: 'ارتفاع الجدول يجب أن يكون عدداً.',
+		invalidCellSpacing	: 'المسافة بين الخلايا يجب أن تكون عدداً.',
+		invalidCellPadding	: 'المسافة البادئة يجب أن تكون عدداً',
+
+		cell :
+		{
+			menu			: 'خلية',
+			insertBefore	: 'إدراج خلية قبل',
+			insertAfter		: 'إدراج خلية بعد',
+			deleteCell		: 'حذف خلية',
+			merge			: 'دمج خلايا',
+			mergeRight		: 'دمج لليمين',
+			mergeDown		: 'دمج للأسفل',
+			splitHorizontal	: 'تقسيم الخلية أفقياً',
+			splitVertical	: 'تقسيم الخلية عمودياً',
+			title			: 'خصائص الخلية',
+			cellType		: 'نوع الخلية',
+			rowSpan			: 'امتداد الصفوف',
+			colSpan			: 'امتداد الأعمدة',
+			wordWrap		: 'التفاف النص',
+			hAlign			: 'محاذاة أفقية',
+			vAlign			: 'محاذاة رأسية',
+			alignBaseline	: 'خط القاعدة',
+			bgColor			: 'لون الخلفية',
+			borderColor		: 'لون الحدود',
+			data			: 'بيانات',
+			header			: 'عنوان',
+			yes				: 'نعم',
+			no				: 'لا',
+			invalidWidth	: 'عرض الخلية يجب أن يكون عدداً.',
+			invalidHeight	: 'ارتفاع الخلية يجب أن يكون عدداً.',
+			invalidRowSpan	: 'امتداد الصفوف يجب أن يكون عدداً صحيحاً.',
+			invalidColSpan	: 'امتداد الأعمدة يجب أن يكون عدداً صحيحاً.',
+			chooseColor		: 'اختر'
+		},
+
+		row :
+		{
+			menu			: 'صف',
+			insertBefore	: 'إدراج صف قبل',
+			insertAfter		: 'إدراج صف بعد',
+			deleteRow		: 'حذف صفوف'
+		},
+
+		column :
+		{
+			menu			: 'عمود',
+			insertBefore	: 'إدراج عمود قبل',
+			insertAfter		: 'إدراج عمود بعد',
+			deleteColumn	: 'حذف أعمدة'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'خصائص زر الضغط',
+		text		: 'القيمة/التسمية',
+		type		: 'نوع الزر',
+		typeBtn		: 'زر',
+		typeSbm		: 'إرسال',
+		typeRst		: 'إعادة تعيين'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'خصائص خانة الإختيار',
+		radioTitle	: 'خصائص زر الخيار',
+		value		: 'القيمة',
+		selected	: 'محدد'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'خصائص النموذج',
+		menu		: 'خصائص النموذج',
+		action		: 'اسم الملف',
+		method		: 'الأسلوب',
+		encoding	: 'تشفير'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'خصائص اختيار الحقل',
+		selectInfo	: 'اختار معلومات',
+		opAvail		: 'الخيارات المتاحة',
+		value		: 'القيمة',
+		size		: 'الحجم',
+		lines		: 'الأسطر',
+		chkMulti	: 'السماح بتحديدات متعددة',
+		opText		: 'النص',
+		opValue		: 'القيمة',
+		btnAdd		: 'إضافة',
+		btnModify	: 'تعديل',
+		btnUp		: 'أعلى',
+		btnDown		: 'أسفل',
+		btnSetValue : 'إجعلها محددة',
+		btnDelete	: 'إزالة'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'خصائص مساحة النص',
+		cols		: 'الأعمدة',
+		rows		: 'الصفوف'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'خصائص مربع النص',
+		name		: 'الاسم',
+		value		: 'القيمة',
+		charWidth	: 'عرض السمات',
+		maxChars	: 'اقصى عدد للسمات',
+		type		: 'نوع المحتوى',
+		typeText	: 'نص',
+		typePass	: 'كلمة مرور'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'خصائص الحقل المخفي',
+		name	: 'الاسم',
+		value	: 'القيمة'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'خصائص الصورة',
+		titleButton	: 'خصائص زر الصورة',
+		menu		: 'خصائص الصورة',
+		infoTab		: 'معلومات الصورة',
+		btnUpload	: 'أرسلها للخادم',
+		upload		: 'رفع',
+		alt			: 'عنوان الصورة',
+		lockRatio	: 'تناسق الحجم',
+		resetSize	: 'إستعادة الحجم الأصلي',
+		border		: 'سمك الحدود',
+		hSpace		: 'تباعد أفقي',
+		vSpace		: 'تباعد عمودي',
+		alertUrl	: 'فضلاً أكتب الموقع الذي توجد عليه هذه الصورة.',
+		linkTab		: 'الرابط',
+		button2Img	: 'هل تريد تحويل زر الصورة المختار إلى صورة بسيطة؟',
+		img2Button	: 'هل تريد تحويل الصورة المختارة إلى زر صورة؟',
+		urlMissing	: 'عنوان مصدر الصورة مفقود',
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'خصائص الفلاش',
+		propertiesTab	: 'الخصائص',
+		title			: 'خصائص فيلم الفلاش',
+		chkPlay			: 'تشغيل تلقائي',
+		chkLoop			: 'تكرار',
+		chkMenu			: 'تمكين قائمة فيلم الفلاش',
+		chkFull			: 'ملء الشاشة',
+ 		scale			: 'الحجم',
+		scaleAll		: 'إظهار الكل',
+		scaleNoBorder	: 'بلا حدود',
+		scaleFit		: 'ضبط تام',
+		access			: 'دخول النص البرمجي',
+		accessAlways	: 'دائماً',
+		accessSameDomain: 'نفس النطاق',
+		accessNever		: 'مطلقاً',
+		alignAbsBottom	: 'أسفل النص',
+		alignAbsMiddle	: 'وسط السطر',
+		alignBaseline	: 'على السطر',
+		alignTextTop	: 'أعلى النص',
+		quality			: 'جودة',
+		qualityBest		: 'أفضل',
+		qualityHigh		: 'عالية',
+		qualityAutoHigh	: 'عالية تلقائياً',
+		qualityMedium	: 'متوسطة',
+		qualityAutoLow	: 'منخفضة تلقائياً',
+		qualityLow		: 'منخفضة',
+		windowModeWindow: 'نافذة',
+		windowModeOpaque: 'غير شفاف',
+		windowModeTransparent : 'شفاف',
+		windowMode		: 'وضع النافذة',
+		flashvars		: 'متغيرات الفلاش',
+		bgcolor			: 'لون الخلفية',
+		hSpace			: 'تباعد أفقي',
+		vSpace			: 'تباعد عمودي',
+		validateSrc		: 'فضلاً أدخل عنوان الموقع الذي يشير إليه الرابط',
+		validateHSpace	: 'HSpace يجب أن يكون عدداً.',
+		validateVSpace	: 'VSpace يجب أن يكون عدداً.'
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'تدقيق إملائي',
+		title			: 'التدقيق الإملائي',
+		notAvailable	: 'عفواً، ولكن هذه الخدمة غير متاحة الان',
+		errorLoading	: 'خطأ في تحميل تطبيق خدمة الاستضافة: %s.',
+		notInDic		: 'ليست في القاموس',
+		changeTo		: 'التغيير إلى',
+		btnIgnore		: 'تجاهل',
+		btnIgnoreAll	: 'تجاهل الكل',
+		btnReplace		: 'تغيير',
+		btnReplaceAll	: 'تغيير الكل',
+		btnUndo			: 'تراجع',
+		noSuggestions	: '- لا توجد إقتراحات -',
+		progress		: 'جاري التدقيق الاملائى',
+		noMispell		: 'تم التدقيق الإملائي: لم يتم العثور على أي أخطاء إملائية',
+		noChanges		: 'تم التدقيق الإملائي: لم يتم تغيير أي كلمة',
+		oneChange		: 'تم التدقيق الإملائي: تم تغيير كلمة واحدة فقط',
+		manyChanges		: 'تم إكمال التدقيق الإملائي: تم تغيير %1 من كلمات',
+		ieSpellDownload	: 'المدقق الإملائي (الإنجليزي) غير مثبّت. هل تود تحميله الآن؟'
+	},
+
+	smiley :
+	{
+		toolbar	: 'ابتسامات',
+		title	: 'إدراج ابتسامات',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : 'عنصر 1%'
+	},
+
+	numberedlist	: 'ادخال/حذف تعداد رقمي',
+	bulletedlist	: 'ادخال/حذف تعداد نقطي',
+	indent			: 'زيادة المسافة البادئة',
+	outdent			: 'إنقاص المسافة البادئة',
+
+	justify :
+	{
+		left	: 'محاذاة إلى اليسار',
+		center	: 'توسيط',
+		right	: 'محاذاة إلى اليمين',
+		block	: 'ضبط'
+	},
+
+	blockquote : 'اقتباس',
+
+	clipboard :
+	{
+		title		: 'لصق',
+		cutError	: 'الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+X).',
+		copyError	: 'الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+C).',
+		pasteMsg	: 'الصق داخل الصندوق بإستخدام زرائر (<STRONG>Ctrl/Cmd+V</STRONG>) في لوحة المفاتيح، ثم اضغط زر  <STRONG>موافق</STRONG>.',
+		securityMsg	: 'نظراً لإعدادات الأمان الخاصة بمتصفحك، لن يتمكن هذا المحرر من الوصول لمحتوى حافظتك، لذلك يجب عليك لصق المحتوى مرة أخرى في هذه النافذة.',
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟',
+		toolbar			: 'لصق من وورد',
+		title			: 'لصق من وورد',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'لصق كنص بسيط',
+		title	: 'لصق كنص بسيط'
+	},
+
+	templates :
+	{
+		button			: 'القوالب',
+		title			: 'قوالب المحتوى',
+		options : 'Template Options', // MISSING
+		insertOption	: 'استبدال المحتوى',
+		selectPromptMsg	: 'اختر القالب الذي تود وضعه في المحرر',
+		emptyListMsg	: '(لم يتم تعريف أي قالب)'
+	},
+
+	showBlocks : 'مخطط تفصيلي',
+
+	stylesCombo :
+	{
+		label		: 'أنماط',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'أنماط الفقرة',
+		panelTitle2	: 'أنماط مضمنة',
+		panelTitle3	: 'أنماط الكائن'
+	},
+
+	format :
+	{
+		label		: 'تنسيق',
+		panelTitle	: 'تنسيق الفقرة',
+
+		tag_p		: 'عادي',
+		tag_pre		: 'منسّق',
+		tag_address	: 'عنوان',
+		tag_h1		: 'العنوان 1',
+		tag_h2		: 'العنوان  2',
+		tag_h3		: 'العنوان  3',
+		tag_h4		: 'العنوان  4',
+		tag_h5		: 'العنوان  5',
+		tag_h6		: 'العنوان  6',
+		tag_div		: 'عادي (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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'خط',
+		voiceLabel	: 'حجم الخط',
+		panelTitle	: 'حجم الخط'
+	},
+
+	fontSize :
+	{
+		label		: 'حجم الخط',
+		voiceLabel	: 'حجم الخط',
+		panelTitle	: 'حجم الخط'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'لون النص',
+		bgColorTitle	: 'لون الخلفية',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'تلقائي',
+		more			: 'ألوان إضافية...'
+	},
+
+	colors :
+	{
+		'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			: 'تدقيق إملائي أثناء الكتابة',
+		opera_title		: 'Not supported by Opera', // MISSING
+		enable			: 'تفعيل SCAYT',
+		disable			: 'تعطيل SCAYT',
+		about			: 'عن SCAYT',
+		toggle			: 'تثبيت SCAYT',
+		options			: 'خيارات',
+		langs			: 'لغات',
+		moreSuggestions	: 'المزيد من المقترحات',
+		ignore			: 'تجاهل',
+		ignoreAll		: 'تجاهل الكل',
+		addWord			: 'إضافة كلمة',
+		emptyDic		: 'اسم القاموس يجب ألا يكون فارغاً.',
+
+		optionsTab		: 'خيارات',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'لغات',
+
+		dictionariesTab	: 'قواميس',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'عن'
+	},
+
+	about :
+	{
+		title		: 'عن CKEditor',
+		dlgTitle	: 'عن CKEditor',
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // MISSING
+		moreInfo	: 'للحصول على معلومات الترخيص ، يرجى زيارة موقعنا على شبكة الانترنت:',
+		copy		: 'حقوق النشر &copy; $1. جميع الحقوق محفوظة.'
+	},
+
+	maximize : 'تكبير',
+	minimize : 'تصغير',
+
+	fakeobjects :
+	{
+		anchor		: 'إرساء',
+		flash		: 'رسم متحرك بالفلاش',
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'كائن غير معروف'
+	},
+
+	resize : 'اسحب لتغيير الحجم',
+
+	colordialog :
+	{
+		title		: 'اختر لون',
+		options	:	'Color Options', // MISSING
+		highlight	: 'إلقاء الضوء',
+		selected	: 'مُختار',
+		clear		: 'مسح'
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'خصائص الصفحة',
+		title : 'خصائص الصفحة',
+		design : 'Design', // MISSING
+		meta : 'المعرّفات الرأسية',
+		chooseColor : 'اختر',
+		other : '<أخرى>',
+		docTitle :	'عنوان الصفحة',
+		charset : 	'ترميز الحروف',
+		charsetOther : 'ترميز آخر',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'أوروبا الوسطى',
+		charsetCT : 'الصينية التقليدية (Big5)',
+		charsetCR : 'السيريلية',
+		charsetGR : 'اليونانية',
+		charsetJP : 'اليابانية',
+		charsetKR : 'الكورية',
+		charsetTR : 'التركية',
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'أوروبا الغربية',
+		docType : 'ترويسة نوع  الصفحة',
+		docTypeOther : 'ترويسة نوع  صفحة أخرى',
+		xhtmlDec : 'تضمين   إعلانات لغة XHTMLَ',
+		bgColor : 'لون الخلفية',
+		bgImage : 'رابط الصورة الخلفية',
+		bgFixed : 'جعلها علامة مائية',
+		txtColor : 'لون النص',
+		margin : 'هوامش الصفحة',
+		marginTop : 'علوي',
+		marginLeft : 'أيسر',
+		marginRight : 'أيمن',
+		marginBottom : 'سفلي',
+		metaKeywords : 'الكلمات الأساسية (مفصولة بفواصل)َ',
+		metaDescription : 'وصف الصفحة',
+		metaAuthor : 'الكاتب',
+		metaCopyright : 'المالك',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/bg.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Bulgarian language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['bg'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'Код',
+	newPage			: 'Нова страница',
+	save			: 'Запази',
+	preview			: 'Предварителен изглед',
+	cut				: 'Изрежи',
+	copy			: 'Запамети',
+	paste			: 'Вмъкни',
+	print			: 'Печат',
+	underline		: 'Подчертан',
+	bold			: 'Удебелен',
+	italic			: 'Курсив',
+	selectAll		: 'Селектирай всичко',
+	removeFormat	: 'Изтрий форматирането',
+	strike			: 'Зачертан',
+	subscript		: 'Индекс за база',
+	superscript		: 'Индекс за степен',
+	horizontalrule	: 'Вмъкни хоризонтална линия',
+	pagebreak		: 'Вмъкни нов ред',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'Изтрий връзка',
+	undo			: 'Отмени',
+	redo			: 'Повтори',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Разгледай сървъра',
+		url				: 'Пълен път (URL)',
+		protocol		: 'Протокол',
+		upload			: 'Качи',
+		uploadSubmit	: 'Прати към сървъра',
+		image			: 'Изображение',
+		flash			: 'Flash',
+		form			: 'Формуляр',
+		checkbox		: 'Поле за отметка',
+		radio			: 'Поле за опция',
+		textField		: 'Текстово поле',
+		textarea		: 'Текстова област',
+		hiddenField		: 'Скрито поле',
+		button			: 'Бутон',
+		select			: 'Падащо меню с опции',
+		imageButton		: 'Бутон-изображение',
+		notSet			: '<не е настроен>',
+		id				: 'Идентификатор',
+		name			: 'Име',
+		langDir			: 'посока на речта',
+		langDirLtr		: 'От ляво на дясно',
+		langDirRtl		: 'От дясно на ляво',
+		langCode		: 'Код на езика',
+		longDescr		: 'Описание на връзката',
+		cssClass		: 'Клас от стиловите таблици',
+		advisoryTitle	: 'Препоръчително заглавие',
+		cssStyle		: 'Стил',
+		ok				: 'ОК',
+		cancel			: 'Отказ',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'General', // MISSING
+		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
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Ширина',
+		height			: 'Височина',
+		align			: 'Подравняване',
+		alignLeft		: 'Ляво',
+		alignRight		: 'Дясно',
+		alignCenter		: 'Център',
+		alignTop		: 'Отгоре',
+		alignMiddle		: 'По средата',
+		alignBottom		: 'Долу',
+		invalidHeight	: 'Height must be a number.', // MISSING
+		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Вмъкни специален символ',
+		title		: 'Изберете специален символ',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Добави/Редактирай връзка',
+		other 		: '<друг>',
+		menu		: 'Редактирай връзка',
+		title		: 'Връзка',
+		info		: 'Информация за връзката',
+		target		: 'Цел',
+		upload		: 'Качи',
+		advanced	: 'Подробности...',
+		type		: 'Вид на връзката',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'Котва в текущата страница',
+		toEmail		: 'Е-поща',
+		targetFrame		: '<рамка>',
+		targetPopup		: '<дъщерен прозорец>',
+		targetFrameName	: 'Име на целевия прозорец',
+		targetPopupName	: 'Име на дъщерния прозорец',
+		popupFeatures	: 'Параметри на дъщерния прозорец',
+		popupResizable	: 'Resizable', // MISSING
+		popupStatusBar	: 'Поле за статус',
+		popupLocationBar: 'Поле за адрес',
+		popupToolbar	: 'Панел с бутони',
+		popupMenuBar	: 'Меню',
+		popupFullScreen	: 'Голям екран (MS IE)',
+		popupScrollBars	: 'Плъзгач',
+		popupDependent	: 'Зависим (Netscape)',
+		popupLeft		: 'Координати - X',
+		popupTop		: 'Координати - Y',
+		id				: 'Id', // MISSING
+		langDir			: 'посока на речта',
+		langDirLTR		: 'От ляво на дясно',
+		langDirRTL		: 'От дясно на ляво',
+		acccessKey		: 'Бърз клавиш',
+		name			: 'Име',
+		langCode			: 'посока на речта',
+		tabIndex			: 'Ред на достъп',
+		advisoryTitle		: 'Препоръчително заглавие',
+		advisoryContentType	: 'Препоръчителен тип на съдържанието',
+		cssClasses		: 'Клас от стиловите таблици',
+		charset			: 'Тип на свързания ресурс',
+		styles			: 'Стил',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Изберете котва',
+		anchorName		: 'По име на котвата',
+		anchorId			: 'По идентификатор на елемент',
+		emailAddress		: 'Адрес за е-поща',
+		emailSubject		: 'Тема на писмото',
+		emailBody		: 'Текст на писмото',
+		noAnchors		: '(Няма котви в текущия документ)',
+		noUrl			: 'Моля, напишете пълния път (URL)',
+		noEmail			: 'Моля, напишете адреса за е-поща'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Добави/Редактирай котва',
+		menu		: 'Параметри на котвата',
+		title		: 'Параметри на котвата',
+		name		: 'Име на котвата',
+		errorName	: 'Моля, въведете име на котвата',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Find and Replace', // MISSING
+		find				: 'Търси',
+		replace				: 'Замести',
+		findWhat			: 'Търси:',
+		replaceWith			: 'Замести с:',
+		notFoundMsg			: 'Указания текст не беше намерен.',
+		matchCase			: 'Със същия регистър',
+		matchWord			: 'Търси същата дума',
+		matchCyclic			: 'Match cyclic', // MISSING
+		replaceAll			: 'Замести всички',
+		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Таблица',
+		title		: 'Параметри на таблицата',
+		menu		: 'Параметри на таблицата',
+		deleteTable	: 'Изтрий таблицата',
+		rows		: 'Редове',
+		columns		: 'Колони',
+		border		: 'Размер на рамката',
+		widthPx		: 'пиксели',
+		widthPc		: 'проценти',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'Разстояние между клетките',
+		cellPad		: 'Отстъп на съдържанието в клетките',
+		caption		: 'Заглавие',
+		summary		: 'Резюме',
+		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 positive number.', // MISSING
+		invalidCellPadding	: 'Cell padding must be a positive number.', // MISSING
+
+		cell :
+		{
+			menu			: 'Cell', // MISSING
+			insertBefore	: 'Insert Cell Before', // MISSING
+			insertAfter		: 'Insert Cell After', // MISSING
+			deleteCell		: 'Изтрий клетките',
+			merge			: 'Обедини клетките',
+			mergeRight		: 'Merge Right', // MISSING
+			mergeDown		: 'Merge Down', // MISSING
+			splitHorizontal	: 'Split Cell Horizontally', // MISSING
+			splitVertical	: 'Split Cell Vertically', // MISSING
+			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
+			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
+		},
+
+		row :
+		{
+			menu			: 'Row', // MISSING
+			insertBefore	: 'Insert Row Before', // MISSING
+			insertAfter		: 'Insert Row After', // MISSING
+			deleteRow		: 'Изтрий редовете'
+		},
+
+		column :
+		{
+			menu			: 'Column', // MISSING
+			insertBefore	: 'Insert Column Before', // MISSING
+			insertAfter		: 'Insert Column After', // MISSING
+			deleteColumn	: 'Изтрий колоните'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Параметри на бутона',
+		text		: 'Текст (Стойност)',
+		type		: 'Тип',
+		typeBtn		: 'Button', // MISSING
+		typeSbm		: 'Submit', // MISSING
+		typeRst		: 'Reset' // MISSING
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Параметри на полето за отметка',
+		radioTitle	: 'Параметри на полето за опция',
+		value		: 'Стойност',
+		selected	: 'Отметнато'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Параметри на формуляра',
+		menu		: 'Параметри на формуляра',
+		action		: 'Действие',
+		method		: 'Метод',
+		encoding	: 'Encoding' // MISSING
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Параметри на падащото меню с опции',
+		selectInfo	: 'Информация',
+		opAvail		: 'Възможни опции',
+		value		: 'Стойност',
+		size		: 'Размер',
+		lines		: 'линии',
+		chkMulti	: 'Разрешено множествено селектиране',
+		opText		: 'Текст',
+		opValue		: 'Стойност',
+		btnAdd		: 'Добави',
+		btnModify	: 'Промени',
+		btnUp		: 'Нагоре',
+		btnDown		: 'Надолу',
+		btnSetValue : 'Настрой като избрана стойност',
+		btnDelete	: 'Изтрий'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Параметри на текстовата област',
+		cols		: 'Колони',
+		rows		: 'Редове'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Параметри на текстовото-поле',
+		name		: 'Име',
+		value		: 'Стойност',
+		charWidth	: 'Ширина на символите',
+		maxChars	: 'Максимум символи',
+		type		: 'Тип',
+		typeText	: 'Текст',
+		typePass	: 'Парола'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Параметри на скритото поле',
+		name	: 'Име',
+		value	: 'Стойност'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Параметри на изображението',
+		titleButton	: 'Параметри на бутона-изображение',
+		menu		: 'Параметри на изображението',
+		infoTab		: 'Информация за изображението',
+		btnUpload	: 'Прати към сървъра',
+		upload		: 'Качи',
+		alt			: 'Алтернативен текст',
+		lockRatio	: 'Запази пропорцията',
+		resetSize	: 'Възстанови размера',
+		border		: 'Рамка',
+		hSpace		: 'Хоризонтален отстъп',
+		vSpace		: 'Вертикален отстъп',
+		alertUrl	: 'Моля, въведете пълния път до изображението',
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Параметри на Flash обекта',
+		propertiesTab	: 'Properties', // MISSING
+		title			: 'Параметри на Flash обекта',
+		chkPlay			: 'Автоматично стартиране',
+		chkLoop			: 'Ново стартиране след завършването',
+		chkMenu			: 'Разрешено Flash меню',
+		chkFull			: 'Allow Fullscreen', // MISSING
+ 		scale			: 'Оразмеряване',
+		scaleAll		: 'Покажи целия обект',
+		scaleNoBorder	: 'Без рамка',
+		scaleFit		: 'Според мястото',
+		access			: 'Script Access', // MISSING
+		accessAlways	: 'Always', // MISSING
+		accessSameDomain: 'Same domain', // MISSING
+		accessNever		: 'Never', // MISSING
+		alignAbsBottom	: 'Най-долу',
+		alignAbsMiddle	: 'Точно по средата',
+		alignBaseline	: 'По базовата линия',
+		alignTextTop	: 'Върху текста',
+		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
+		bgcolor			: 'Цвят на фона',
+		hSpace			: 'Хоризонтален отстъп',
+		vSpace			: 'Вертикален отстъп',
+		validateSrc		: 'Моля, напишете пълния път (URL)',
+		validateHSpace	: 'HSpace must be a number.', // MISSING
+		validateVSpace	: 'VSpace must be a number.' // MISSING
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Провери правописа',
+		title			: 'Spell Check', // MISSING
+		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
+		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		notInDic		: 'Липсва в речника',
+		changeTo		: 'Промени на',
+		btnIgnore		: 'Игнорирай',
+		btnIgnoreAll	: 'Игнорирай всички',
+		btnReplace		: 'Замести',
+		btnReplaceAll	: 'Замести всички',
+		btnUndo			: 'Отмени',
+		noSuggestions	: '- Няма предложения -',
+		progress		: 'Извършване на проверката за правопис...',
+		noMispell		: 'Проверката за правопис завършена: не са открити правописни грешки',
+		noChanges		: 'Проверката за правопис завършена: няма променени думи',
+		oneChange		: 'Проверката за правопис завършена: една дума е променена',
+		manyChanges		: 'Проверката за правопис завършена: %1 думи са променени',
+		ieSpellDownload	: 'Инструментът за проверка на правопис не е инсталиран. Желаете ли да го инсталирате ?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Усмивка',
+		title	: 'Добави усмивка',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element' // MISSING
+	},
+
+	numberedlist	: 'Нумериран списък',
+	bulletedlist	: 'Ненумериран списък',
+	indent			: 'Увеличи отстъпа',
+	outdent			: 'Намали отстъпа',
+
+	justify :
+	{
+		left	: 'Подравняване в ляво',
+		center	: 'Подравнявне в средата',
+		right	: 'Подравняване в дясно',
+		block	: 'Двустранно подравняване'
+	},
+
+	blockquote : 'Block Quote', // MISSING
+
+	clipboard :
+	{
+		title		: 'Вмъкни',
+		cutError	: 'Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни изрязването. За целта използвайте клавиатурата (Ctrl/Cmd+X).',
+		copyError	: 'Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl/Cmd+C).',
+		pasteMsg	: 'Вмъкнете тук съдъжанието с клавиатуарата (<STRONG>Ctrl/Cmd+V</STRONG>) и натиснете <STRONG>OK</STRONG>.',
+		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.', // MISSING
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar			: 'Вмъкни от MS Word',
+		title			: 'Вмъкни от MS Word',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'Вмъкни като чист текст',
+		title	: 'Вмъкни като чист текст'
+	},
+
+	templates :
+	{
+		button			: 'Шаблони',
+		title			: 'Шаблони',
+		options : 'Template Options', // MISSING
+		insertOption	: 'Replace actual contents', // MISSING
+		selectPromptMsg	: 'Изберете шаблон <br>(текущото съдържание на редактора ще бъде загубено):',
+		emptyListMsg	: '(Няма дефинирани шаблони)'
+	},
+
+	showBlocks : 'Show Blocks', // MISSING
+
+	stylesCombo :
+	{
+		label		: 'Стил',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles', // MISSING
+		panelTitle2	: 'Inline Styles', // MISSING
+		panelTitle3	: 'Object Styles' // MISSING
+	},
+
+	format :
+	{
+		label		: 'Формат',
+		panelTitle	: 'Формат',
+
+		tag_p		: 'Нормален',
+		tag_pre		: 'Форматиран',
+		tag_address	: 'Адрес',
+		tag_h1		: 'Заглавие 1',
+		tag_h2		: 'Заглавие 2',
+		tag_h3		: 'Заглавие 3',
+		tag_h4		: 'Заглавие 4',
+		tag_h5		: 'Заглавие 5',
+		tag_h6		: 'Заглавие 6',
+		tag_div		: 'Параграф (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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Шрифт',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'Шрифт'
+	},
+
+	fontSize :
+	{
+		label		: 'Размер',
+		voiceLabel	: 'Font Size', // MISSING
+		panelTitle	: 'Размер'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Цвят на текста',
+		bgColorTitle	: 'Цвят на фона',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'По подразбиране',
+		more			: 'Други цветове...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor', // MISSING
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // 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
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor', // MISSING
+		flash		: 'Flash Animation', // MISSING
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Параметри на документа',
+		title : 'Параметри на документа',
+		design : 'Design', // MISSING
+		meta : 'Мета данни',
+		chooseColor : 'Choose', // MISSING
+		other : '<друг>',
+		docTitle :	'Заглавие на страницата',
+		charset : 	'Кодиране на символите',
+		charsetOther : 'Друго кодиране на символите',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Central European', // MISSING
+		charsetCT : 'Chinese Traditional (Big5)', // MISSING
+		charsetCR : 'Cyrillic', // MISSING
+		charsetGR : 'Greek', // MISSING
+		charsetJP : 'Japanese', // MISSING
+		charsetKR : 'Korean', // MISSING
+		charsetTR : 'Turkish', // MISSING
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Western European', // MISSING
+		docType : 'Тип на документа',
+		docTypeOther : 'Друг тип на документа',
+		xhtmlDec : 'Включи XHTML декларация',
+		bgColor : 'Цвят на фона',
+		bgImage : 'Пълен път до фоновото изображение',
+		bgFixed : 'Не-повтарящо се фоново изображение',
+		txtColor : 'Цвят на текста',
+		margin : 'Отстъпи на страницата',
+		marginTop : 'Горе',
+		marginLeft : 'Ляво',
+		marginRight : 'Дясно',
+		marginBottom : 'Долу',
+		metaKeywords : 'Ключови думи за документа (разделени със запетаи)',
+		metaDescription : 'Описание на документа',
+		metaAuthor : 'Автор',
+		metaCopyright : 'Авторски права',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/bn.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Bengali/Bangla language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['bn'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'সোর্স',
+	newPage			: 'নতুন পেজ',
+	save			: 'সংরক্ষন কর',
+	preview			: 'প্রিভিউ',
+	cut				: 'কাট',
+	copy			: 'কপি',
+	paste			: 'পেস্ট',
+	print			: 'প্রিন্ট',
+	underline		: 'আন্ডারলাইন',
+	bold			: 'বোল্ড',
+	italic			: 'ইটালিক',
+	selectAll		: 'সব সিলেক্ট কর',
+	removeFormat	: 'ফরমেট সরাও',
+	strike			: 'স্ট্রাইক থ্রু',
+	subscript		: 'অধোলেখ',
+	superscript		: 'অভিলেখ',
+	horizontalrule	: 'রেখা যুক্ত কর',
+	pagebreak		: 'পেজ ব্রেক',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'লিংক সরাও',
+	undo			: 'আনডু',
+	redo			: 'রি-ডু',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'ব্রাউজ সার্ভার',
+		url				: 'URL',
+		protocol		: 'প্রোটোকল',
+		upload			: 'আপলোড',
+		uploadSubmit	: 'ইহাকে সার্ভারে প্রেরন কর',
+		image			: 'ছবির লেবেল যুক্ত কর',
+		flash			: 'ফ্লাশ লেবেল যুক্ত কর',
+		form			: 'ফর্ম',
+		checkbox		: 'চেক বাক্স',
+		radio			: 'রেডিও বাটন',
+		textField		: 'টেক্সট ফীল্ড',
+		textarea		: 'টেক্সট এরিয়া',
+		hiddenField		: 'গুপ্ত ফীল্ড',
+		button			: 'বাটন',
+		select			: 'বাছাই ফীল্ড',
+		imageButton		: 'ছবির বাটন',
+		notSet			: '<সেট নেই>',
+		id				: 'আইডি',
+		name			: 'নাম',
+		langDir			: 'ভাষা লেখার দিক',
+		langDirLtr		: 'বাম থেকে ডান (LTR)',
+		langDirRtl		: 'ডান থেকে বাম (RTL)',
+		langCode		: 'ভাষা কোড',
+		longDescr		: 'URL এর লম্বা বর্ণনা',
+		cssClass		: 'স্টাইল-শীট ক্লাস',
+		advisoryTitle	: 'পরামর্শ শীর্ষক',
+		cssStyle		: 'স্টাইল',
+		ok				: 'ওকে',
+		cancel			: 'বাতিল',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'General', // MISSING
+		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
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'প্রস্থ',
+		height			: 'দৈর্ঘ্য',
+		align			: 'এলাইন',
+		alignLeft		: 'বামে',
+		alignRight		: 'ডানে',
+		alignCenter		: 'মাঝখানে',
+		alignTop		: 'উপর',
+		alignMiddle		: 'মধ্য',
+		alignBottom		: 'নীচে',
+		invalidHeight	: 'Height must be a number.', // MISSING
+		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'বিশেষ অক্ষর যুক্ত কর',
+		title		: 'বিশেষ ক্যারেক্টার বাছাই কর',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'লিংক যুক্ত কর',
+		other 		: '<other>', // MISSING
+		menu		: 'লিংক সম্পাদন',
+		title		: 'লিংক',
+		info		: 'লিংক তথ্য',
+		target		: 'টার্গেট',
+		upload		: 'আপলোড',
+		advanced	: 'এডভান্সড',
+		type		: 'লিংক প্রকার',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'এই পেজে নোঙর কর',
+		toEmail		: 'ইমেইল',
+		targetFrame		: '<ফ্রেম>',
+		targetPopup		: '<পপআপ উইন্ডো>',
+		targetFrameName	: 'টার্গেট ফ্রেমের নাম',
+		targetPopupName	: 'পপআপ উইন্ডোর নাম',
+		popupFeatures	: 'পপআপ উইন্ডো ফীচার সমূহ',
+		popupResizable	: 'Resizable', // MISSING
+		popupStatusBar	: 'স্ট্যাটাস বার',
+		popupLocationBar: 'লোকেশন বার',
+		popupToolbar	: 'টুল বার',
+		popupMenuBar	: 'মেন্যু বার',
+		popupFullScreen	: 'পূর্ণ পর্দা জুড়ে (IE)',
+		popupScrollBars	: 'স্ক্রল বার',
+		popupDependent	: 'ডিপেন্ডেন্ট (Netscape)',
+		popupLeft		: 'বামের পজিশন',
+		popupTop		: 'ডানের পজিশন',
+		id				: 'Id', // MISSING
+		langDir			: 'ভাষা লেখার দিক',
+		langDirLTR		: 'বাম থেকে ডান (LTR)',
+		langDirRTL		: 'ডান থেকে বাম (RTL)',
+		acccessKey		: 'এক্সেস কী',
+		name			: 'নাম',
+		langCode			: 'ভাষা লেখার দিক',
+		tabIndex			: 'ট্যাব ইন্ডেক্স',
+		advisoryTitle		: 'পরামর্শ শীর্ষক',
+		advisoryContentType	: 'পরামর্শ কন্টেন্টের প্রকার',
+		cssClasses		: 'স্টাইল-শীট ক্লাস',
+		charset			: 'লিংক রিসোর্স ক্যারেক্টর সেট',
+		styles			: 'স্টাইল',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'নোঙর বাছাই',
+		anchorName		: 'নোঙরের নাম দিয়ে',
+		anchorId			: 'নোঙরের আইডি দিয়ে',
+		emailAddress		: 'ইমেইল ঠিকানা',
+		emailSubject		: 'মেসেজের বিষয়',
+		emailBody		: 'মেসেজের দেহ',
+		noAnchors		: '(No anchors available in the document)', // MISSING
+		noUrl			: 'অনুগ্রহ করে URL লিংক টাইপ করুন',
+		noEmail			: 'অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'নোঙ্গর',
+		menu		: 'নোঙর প্রোপার্টি',
+		title		: 'নোঙর প্রোপার্টি',
+		name		: 'নোঙরের নাম',
+		errorName	: 'নোঙরের নাম টাইপ করুন',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Find and Replace', // MISSING
+		find				: 'খোজো',
+		replace				: 'রিপ্লেস',
+		findWhat			: 'যা খুঁজতে হবে:',
+		replaceWith			: 'যার সাথে বদলাতে হবে:',
+		notFoundMsg			: 'আপনার উল্লেখিত টেকস্ট পাওয়া যায়নি',
+		matchCase			: 'কেস মিলাও',
+		matchWord			: 'পুরা শব্দ মেলাও',
+		matchCyclic			: 'Match cyclic', // MISSING
+		replaceAll			: 'সব বদলে দাও',
+		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'টেবিলের লেবেল যুক্ত কর',
+		title		: 'টেবিল প্রোপার্টি',
+		menu		: 'টেবিল প্রোপার্টি',
+		deleteTable	: 'টেবিল ডিলীট কর',
+		rows		: 'রো',
+		columns		: 'কলাম',
+		border		: 'বর্ডার সাইজ',
+		widthPx		: 'পিক্সেল',
+		widthPc		: 'শতকরা',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'সেল স্পেস',
+		cellPad		: 'সেল প্যাডিং',
+		caption		: 'শীর্ষক',
+		summary		: 'সারাংশ',
+		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 positive number.', // MISSING
+		invalidCellPadding	: 'Cell padding must be a positive number.', // MISSING
+
+		cell :
+		{
+			menu			: 'সেল',
+			insertBefore	: 'Insert Cell Before', // MISSING
+			insertAfter		: 'Insert Cell After', // MISSING
+			deleteCell		: 'সেল মুছে দাও',
+			merge			: 'সেল জোড়া দাও',
+			mergeRight		: 'Merge Right', // MISSING
+			mergeDown		: 'Merge Down', // MISSING
+			splitHorizontal	: 'Split Cell Horizontally', // MISSING
+			splitVertical	: 'Split Cell Vertically', // MISSING
+			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
+			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
+		},
+
+		row :
+		{
+			menu			: 'রো',
+			insertBefore	: 'Insert Row Before', // MISSING
+			insertAfter		: 'Insert Row After', // MISSING
+			deleteRow		: 'রো মুছে দাও'
+		},
+
+		column :
+		{
+			menu			: 'কলাম',
+			insertBefore	: 'Insert Column Before', // MISSING
+			insertAfter		: 'Insert Column After', // MISSING
+			deleteColumn	: 'কলাম মুছে দাও'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'বাটন প্রোপার্টি',
+		text		: 'টেক্সট (ভ্যালু)',
+		type		: 'প্রকার',
+		typeBtn		: 'Button', // MISSING
+		typeSbm		: 'Submit', // MISSING
+		typeRst		: 'Reset' // MISSING
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'চেক বক্স প্রোপার্টি',
+		radioTitle	: 'রেডিও বাটন প্রোপার্টি',
+		value		: 'ভ্যালু',
+		selected	: 'সিলেক্টেড'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'ফর্ম প্রোপার্টি',
+		menu		: 'ফর্ম প্রোপার্টি',
+		action		: 'একশ্যন',
+		method		: 'পদ্ধতি',
+		encoding	: 'Encoding' // MISSING
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'বাছাই ফীল্ড প্রোপার্টি',
+		selectInfo	: 'তথ্য',
+		opAvail		: 'অন্যান্য বিকল্প',
+		value		: 'ভ্যালু',
+		size		: 'সাইজ',
+		lines		: 'লাইন সমূহ',
+		chkMulti	: 'একাধিক সিলেকশন এলাউ কর',
+		opText		: 'টেক্সট',
+		opValue		: 'ভ্যালু',
+		btnAdd		: 'যুক্ত',
+		btnModify	: 'বদলে দাও',
+		btnUp		: 'উপর',
+		btnDown		: 'নীচে',
+		btnSetValue : 'বাছাই করা ভ্যালু হিসেবে সেট কর',
+		btnDelete	: 'ডিলীট'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'টেক্সট এরিয়া প্রোপার্টি',
+		cols		: 'কলাম',
+		rows		: 'রো'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'টেক্সট ফীল্ড প্রোপার্টি',
+		name		: 'নাম',
+		value		: 'ভ্যালু',
+		charWidth	: 'ক্যারেক্টার প্রশস্ততা',
+		maxChars	: 'সর্বাধিক ক্যারেক্টার',
+		type		: 'টাইপ',
+		typeText	: 'টেক্সট',
+		typePass	: 'পাসওয়ার্ড'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'গুপ্ত ফীল্ড প্রোপার্টি',
+		name	: 'নাম',
+		value	: 'ভ্যালু'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'ছবির প্রোপার্টি',
+		titleButton	: 'ছবি বাটন প্রোপার্টি',
+		menu		: 'ছবির প্রোপার্টি',
+		infoTab		: 'ছবির তথ্য',
+		btnUpload	: 'ইহাকে সার্ভারে প্রেরন কর',
+		upload		: 'আপলোড',
+		alt			: 'বিকল্প টেক্সট',
+		lockRatio	: 'অনুপাত লক কর',
+		resetSize	: 'সাইজ পূর্বাবস্থায় ফিরিয়ে দাও',
+		border		: 'বর্ডার',
+		hSpace		: 'হরাইজন্টাল স্পেস',
+		vSpace		: 'ভার্টিকেল স্পেস',
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'ফ্লাশ প্রোপার্টি',
+		propertiesTab	: 'Properties', // MISSING
+		title			: 'ফ্ল্যাশ প্রোপার্টি',
+		chkPlay			: 'অটো প্লে',
+		chkLoop			: 'লূপ',
+		chkMenu			: 'ফ্ল্যাশ মেনু এনাবল কর',
+		chkFull			: 'Allow Fullscreen', // MISSING
+ 		scale			: 'স্কেল',
+		scaleAll		: 'সব দেখাও',
+		scaleNoBorder	: 'কোনো বর্ডার নেই',
+		scaleFit		: 'নিখুঁত ফিট',
+		access			: 'Script Access', // MISSING
+		accessAlways	: 'Always', // MISSING
+		accessSameDomain: 'Same domain', // MISSING
+		accessNever		: 'Never', // MISSING
+		alignAbsBottom	: 'Abs নীচে',
+		alignAbsMiddle	: 'Abs উপর',
+		alignBaseline	: 'মূল রেখা',
+		alignTextTop	: 'টেক্সট উপর',
+		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
+		bgcolor			: 'বেকগ্রাউন্ড রং',
+		hSpace			: 'হরাইজন্টাল স্পেস',
+		vSpace			: 'ভার্টিকেল স্পেস',
+		validateSrc		: 'অনুগ্রহ করে URL লিংক টাইপ করুন',
+		validateHSpace	: 'HSpace must be a number.', // MISSING
+		validateVSpace	: 'VSpace must be a number.' // MISSING
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'বানান চেক',
+		title			: 'Spell Check', // MISSING
+		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
+		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		notInDic		: 'শব্দকোষে নেই',
+		changeTo		: 'এতে বদলাও',
+		btnIgnore		: 'ইগনোর কর',
+		btnIgnoreAll	: 'সব ইগনোর কর',
+		btnReplace		: 'বদলে দাও',
+		btnReplaceAll	: 'সব বদলে দাও',
+		btnUndo			: 'আন্ডু',
+		noSuggestions	: '- কোন সাজেশন নেই -',
+		progress		: 'বানান পরীক্ষা চলছে...',
+		noMispell		: 'বানান পরীক্ষা শেষ: কোন ভুল বানান পাওয়া যায়নি',
+		noChanges		: 'বানান পরীক্ষা শেষ: কোন শব্দ পরিবর্তন করা হয়নি',
+		oneChange		: 'বানান পরীক্ষা শেষ: একটি মাত্র শব্দ পরিবর্তন করা হয়েছে',
+		manyChanges		: 'বানান পরীক্ষা শেষ: %1 গুলো শব্দ বদলে গ্যাছে',
+		ieSpellDownload	: 'বানান পরীক্ষক ইনস্টল করা নেই। আপনি কি এখনই এটা ডাউনলোড করতে চান?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'স্মাইলী',
+		title	: 'স্মাইলী যুক্ত কর',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element' // MISSING
+	},
+
+	numberedlist	: 'সাংখ্যিক লিস্টের লেবেল',
+	bulletedlist	: 'বুলেট লিস্ট লেবেল',
+	indent			: 'ইনডেন্ট বাড়াও',
+	outdent			: 'ইনডেন্ট কমাও',
+
+	justify :
+	{
+		left	: 'বা দিকে ঘেঁষা',
+		center	: 'মাঝ বরাবর ঘেষা',
+		right	: 'ডান দিকে ঘেঁষা',
+		block	: 'ব্লক জাস্টিফাই'
+	},
+
+	blockquote : 'Block Quote', // MISSING
+
+	clipboard :
+	{
+		title		: 'পেস্ট',
+		cutError	: 'আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+X)।',
+		copyError	: 'আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কপি করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+C)।',
+		pasteMsg	: 'অনুগ্রহ করে নীচের বাক্সে কিবোর্ড ব্যবহার করে (<STRONG>Ctrl/Cmd+V</STRONG>) পেস্ট করুন এবং <STRONG>OK</STRONG> চাপ দিন',
+		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.', // MISSING
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar			: 'পেস্ট (শব্দ)',
+		title			: 'পেস্ট (শব্দ)',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'সাদা টেক্সট হিসেবে পেস্ট কর',
+		title	: 'সাদা টেক্সট হিসেবে পেস্ট কর'
+	},
+
+	templates :
+	{
+		button			: 'টেমপ্লেট',
+		title			: 'কনটেন্ট টেমপ্লেট',
+		options : 'Template Options', // MISSING
+		insertOption	: 'Replace actual contents', // MISSING
+		selectPromptMsg	: 'অনুগ্রহ করে এডিটরে ওপেন করার জন্য টেমপ্লেট বাছাই করুন<br>(আসল কনটেন্ট হারিয়ে যাবে):',
+		emptyListMsg	: '(কোন টেমপ্লেট ডিফাইন করা নেই)'
+	},
+
+	showBlocks : 'Show Blocks', // MISSING
+
+	stylesCombo :
+	{
+		label		: 'স্টাইল',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles', // MISSING
+		panelTitle2	: 'Inline Styles', // MISSING
+		panelTitle3	: 'Object Styles' // MISSING
+	},
+
+	format :
+	{
+		label		: 'ফন্ট ফরমেট',
+		panelTitle	: 'ফন্ট ফরমেট',
+
+		tag_p		: 'সাধারণ',
+		tag_pre		: 'ফর্মেটেড',
+		tag_address	: 'ঠিকানা',
+		tag_h1		: 'শীর্ষক ১',
+		tag_h2		: 'শীর্ষক ২',
+		tag_h3		: 'শীর্ষক ৩',
+		tag_h4		: 'শীর্ষক ৪',
+		tag_h5		: 'শীর্ষক ৫',
+		tag_h6		: 'শীর্ষক ৬',
+		tag_div		: 'শীর্ষক (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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'ফন্ট',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'ফন্ট'
+	},
+
+	fontSize :
+	{
+		label		: 'সাইজ',
+		voiceLabel	: 'Font Size', // MISSING
+		panelTitle	: 'সাইজ'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'টেক্স্ট রং',
+		bgColorTitle	: 'বেকগ্রাউন্ড রং',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'অটোমেটিক',
+		more			: 'আরও রং...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor', // MISSING
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // 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
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor', // MISSING
+		flash		: 'Flash Animation', // MISSING
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'ডক্যুমেন্ট প্রোপার্টি',
+		title : 'ডক্যুমেন্ট প্রোপার্টি',
+		design : 'Design', // MISSING
+		meta : 'মেটাডেটা',
+		chooseColor : 'Choose', // MISSING
+		other : '<other>',
+		docTitle :	'পেজ শীর্ষক',
+		charset : 	'ক্যারেক্টার সেট এনকোডিং',
+		charsetOther : 'অন্য ক্যারেক্টার সেট এনকোডিং',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Central European', // MISSING
+		charsetCT : 'Chinese Traditional (Big5)', // MISSING
+		charsetCR : 'Cyrillic', // MISSING
+		charsetGR : 'Greek', // MISSING
+		charsetJP : 'Japanese', // MISSING
+		charsetKR : 'Korean', // MISSING
+		charsetTR : 'Turkish', // MISSING
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Western European', // MISSING
+		docType : 'ডক্যুমেন্ট টাইপ হেডিং',
+		docTypeOther : 'অন্য ডক্যুমেন্ট টাইপ হেডিং',
+		xhtmlDec : 'XHTML ডেক্লারেশন যুক্ত কর',
+		bgColor : 'ব্যাকগ্রাউন্ড রং',
+		bgImage : 'ব্যাকগ্রাউন্ড ছবির URL',
+		bgFixed : 'স্ক্রলহীন ব্যাকগ্রাউন্ড',
+		txtColor : 'টেক্স্ট রং',
+		margin : 'পেজ মার্জিন',
+		marginTop : 'উপর',
+		marginLeft : 'বামে',
+		marginRight : 'ডানে',
+		marginBottom : 'নীচে',
+		metaKeywords : 'ডক্যুমেন্ট ইন্ডেক্স কিওয়ার্ড (কমা দ্বারা বিচ্ছিন্ন)',
+		metaDescription : 'ডক্যূমেন্ট বর্ণনা',
+		metaAuthor : 'লেখক',
+		metaCopyright : 'কপীরাইট',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/bs.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Bosnian language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['bs'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'HTML kôd',
+	newPage			: 'Novi dokument',
+	save			: 'Snimi',
+	preview			: 'Prikaži',
+	cut				: 'Izreži',
+	copy			: 'Kopiraj',
+	paste			: 'Zalijepi',
+	print			: 'Štampaj',
+	underline		: 'Podvuci',
+	bold			: 'Boldiraj',
+	italic			: 'Ukosi',
+	selectAll		: 'Selektuj sve',
+	removeFormat	: 'Poništi format',
+	strike			: 'Precrtaj',
+	subscript		: 'Subscript',
+	superscript		: 'Superscript',
+	horizontalrule	: 'Ubaci horizontalnu liniju',
+	pagebreak		: 'Insert Page Break for Printing', // MISSING
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'Izbriši link',
+	undo			: 'Vrati',
+	redo			: 'Ponovi',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Browse Server', // MISSING
+		url				: 'URL',
+		protocol		: 'Protokol',
+		upload			: 'Šalji',
+		uploadSubmit	: 'Šalji na server',
+		image			: 'Slika',
+		flash			: 'Flash', // MISSING
+		form			: 'Form', // MISSING
+		checkbox		: 'Checkbox', // MISSING
+		radio			: 'Radio Button', // MISSING
+		textField		: 'Text Field', // MISSING
+		textarea		: 'Textarea', // MISSING
+		hiddenField		: 'Hidden Field', // MISSING
+		button			: 'Button', // MISSING
+		select			: 'Selection Field', // MISSING
+		imageButton		: 'Image Button', // MISSING
+		notSet			: '<nije podešeno>',
+		id				: 'Id',
+		name			: 'Naziv',
+		langDir			: 'Smjer pisanja',
+		langDirLtr		: 'S lijeva na desno (LTR)',
+		langDirRtl		: 'S desna na lijevo (RTL)',
+		langCode		: 'Jezièni kôd',
+		longDescr		: 'Dugaèki opis URL-a',
+		cssClass		: 'Klase CSS stilova',
+		advisoryTitle	: 'Advisory title',
+		cssStyle		: 'Stil',
+		ok				: 'OK',
+		cancel			: 'Odustani',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'General', // MISSING
+		advancedTab		: 'Naprednije',
+		validateNumberFailed : 'This value is not a number.', // MISSING
+		confirmNewPage	: 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING
+		confirmCancel	: 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Širina',
+		height			: 'Visina',
+		align			: 'Poravnanje',
+		alignLeft		: 'Lijevo',
+		alignRight		: 'Desno',
+		alignCenter		: 'Centar',
+		alignTop		: 'Vrh',
+		alignMiddle		: 'Sredina',
+		alignBottom		: 'Dno',
+		invalidHeight	: 'Height must be a number.', // MISSING
+		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Ubaci specijalni karater',
+		title		: 'Izaberi specijalni karakter',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Ubaci/Izmjeni link',
+		other 		: '<other>', // MISSING
+		menu		: 'Izmjeni link',
+		title		: 'Link',
+		info		: 'Link info',
+		target		: 'Prozor',
+		upload		: 'Šalji',
+		advanced	: 'Naprednije',
+		type		: 'Tip linka',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'Sidro na ovoj stranici',
+		toEmail		: 'E-Mail',
+		targetFrame		: '<frejm>',
+		targetPopup		: '<popup prozor>',
+		targetFrameName	: 'Target Frame Name', // MISSING
+		targetPopupName	: 'Naziv popup prozora',
+		popupFeatures	: 'Moguænosti popup prozora',
+		popupResizable	: 'Resizable', // MISSING
+		popupStatusBar	: 'Statusna traka',
+		popupLocationBar: 'Traka za lokaciju',
+		popupToolbar	: 'Traka sa alatima',
+		popupMenuBar	: 'Izborna traka',
+		popupFullScreen	: 'Cijeli ekran (IE)',
+		popupScrollBars	: 'Scroll traka',
+		popupDependent	: 'Ovisno (Netscape)',
+		popupLeft		: 'Lijeva pozicija',
+		popupTop		: 'Gornja pozicija',
+		id				: 'Id', // MISSING
+		langDir			: 'Smjer pisanja',
+		langDirLTR		: 'S lijeva na desno (LTR)',
+		langDirRTL		: 'S desna na lijevo (RTL)',
+		acccessKey		: 'Pristupna tipka',
+		name			: 'Naziv',
+		langCode			: 'Smjer pisanja',
+		tabIndex			: 'Tab indeks',
+		advisoryTitle		: 'Advisory title',
+		advisoryContentType	: 'Advisory vrsta sadržaja',
+		cssClasses		: 'Klase CSS stilova',
+		charset			: 'Linked Resource Charset',
+		styles			: 'Stil',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Izaberi sidro',
+		anchorName		: 'Po nazivu sidra',
+		anchorId			: 'Po Id-u elementa',
+		emailAddress		: 'E-Mail Adresa',
+		emailSubject		: 'Subjekt poruke',
+		emailBody		: 'Poruka',
+		noAnchors		: '(Nema dostupnih sidra na stranici)',
+		noUrl			: 'Molimo ukucajte URL link',
+		noEmail			: 'Molimo ukucajte e-mail adresu'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Anchor', // MISSING
+		menu		: 'Edit Anchor', // MISSING
+		title		: 'Anchor Properties', // MISSING
+		name		: 'Anchor Name', // MISSING
+		errorName	: 'Please type the anchor name', // MISSING
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Find and Replace', // MISSING
+		find				: 'Naði',
+		replace				: 'Zamjeni',
+		findWhat			: 'Naði šta:',
+		replaceWith			: 'Zamjeni sa:',
+		notFoundMsg			: 'Traženi tekst nije pronaðen.',
+		matchCase			: 'Uporeðuj velika/mala slova',
+		matchWord			: 'Uporeðuj samo cijelu rijeè',
+		matchCyclic			: 'Match cyclic', // MISSING
+		replaceAll			: 'Zamjeni sve',
+		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tabela',
+		title		: 'Svojstva tabele',
+		menu		: 'Svojstva tabele',
+		deleteTable	: 'Delete Table', // MISSING
+		rows		: 'Redova',
+		columns		: 'Kolona',
+		border		: 'Okvir',
+		widthPx		: 'piksela',
+		widthPc		: 'posto',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'Razmak æelija',
+		cellPad		: 'Uvod æelija',
+		caption		: 'Naslov',
+		summary		: 'Summary', // MISSING
+		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 positive number.', // MISSING
+		invalidCellPadding	: 'Cell padding must be a positive number.', // MISSING
+
+		cell :
+		{
+			menu			: 'Cell', // MISSING
+			insertBefore	: 'Insert Cell Before', // MISSING
+			insertAfter		: 'Insert Cell After', // MISSING
+			deleteCell		: 'Briši æelije',
+			merge			: 'Spoji æelije',
+			mergeRight		: 'Merge Right', // MISSING
+			mergeDown		: 'Merge Down', // MISSING
+			splitHorizontal	: 'Split Cell Horizontally', // MISSING
+			splitVertical	: 'Split Cell Vertically', // MISSING
+			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
+			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
+		},
+
+		row :
+		{
+			menu			: 'Row', // MISSING
+			insertBefore	: 'Insert Row Before', // MISSING
+			insertAfter		: 'Insert Row After', // MISSING
+			deleteRow		: 'Briši redove'
+		},
+
+		column :
+		{
+			menu			: 'Column', // MISSING
+			insertBefore	: 'Insert Column Before', // MISSING
+			insertAfter		: 'Insert Column After', // MISSING
+			deleteColumn	: 'Briši kolone'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Button Properties', // MISSING
+		text		: 'Text (Value)', // MISSING
+		type		: 'Type', // MISSING
+		typeBtn		: 'Button', // MISSING
+		typeSbm		: 'Submit', // MISSING
+		typeRst		: 'Reset' // MISSING
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Checkbox Properties', // MISSING
+		radioTitle	: 'Radio Button Properties', // MISSING
+		value		: 'Value', // MISSING
+		selected	: 'Selected' // MISSING
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Form Properties', // MISSING
+		menu		: 'Form Properties', // MISSING
+		action		: 'Action', // MISSING
+		method		: 'Method', // MISSING
+		encoding	: 'Encoding' // MISSING
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Selection Field Properties', // MISSING
+		selectInfo	: 'Select Info', // MISSING
+		opAvail		: 'Available Options', // MISSING
+		value		: 'Value', // MISSING
+		size		: 'Size', // MISSING
+		lines		: 'lines', // MISSING
+		chkMulti	: 'Allow multiple selections', // MISSING
+		opText		: 'Text', // MISSING
+		opValue		: 'Value', // MISSING
+		btnAdd		: 'Add', // MISSING
+		btnModify	: 'Modify', // MISSING
+		btnUp		: 'Up', // MISSING
+		btnDown		: 'Down', // MISSING
+		btnSetValue : 'Set as selected value', // MISSING
+		btnDelete	: 'Delete' // MISSING
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Textarea Properties', // MISSING
+		cols		: 'Columns', // MISSING
+		rows		: 'Rows' // MISSING
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Text Field Properties', // MISSING
+		name		: 'Name', // MISSING
+		value		: 'Value', // MISSING
+		charWidth	: 'Character Width', // MISSING
+		maxChars	: 'Maximum Characters', // MISSING
+		type		: 'Type', // MISSING
+		typeText	: 'Text', // MISSING
+		typePass	: 'Password' // MISSING
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Hidden Field Properties', // MISSING
+		name	: 'Name', // MISSING
+		value	: 'Value' // MISSING
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Svojstva slike',
+		titleButton	: 'Image Button Properties', // MISSING
+		menu		: 'Svojstva slike',
+		infoTab		: 'Info slike',
+		btnUpload	: 'Šalji na server',
+		upload		: 'Šalji',
+		alt			: 'Tekst na slici',
+		lockRatio	: 'Zakljuèaj odnos',
+		resetSize	: 'Resetuj dimenzije',
+		border		: 'Okvir',
+		hSpace		: 'HSpace',
+		vSpace		: 'VSpace',
+		alertUrl	: 'Molimo ukucajte URL od slike.',
+		linkTab		: 'Link', // MISSING
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Flash Properties', // MISSING
+		propertiesTab	: 'Properties', // MISSING
+		title			: 'Flash Properties', // MISSING
+		chkPlay			: 'Auto Play', // MISSING
+		chkLoop			: 'Loop', // MISSING
+		chkMenu			: 'Enable Flash Menu', // MISSING
+		chkFull			: 'Allow Fullscreen', // MISSING
+ 		scale			: 'Scale', // MISSING
+		scaleAll		: 'Show all', // MISSING
+		scaleNoBorder	: 'No Border', // MISSING
+		scaleFit		: 'Exact Fit', // MISSING
+		access			: 'Script Access', // MISSING
+		accessAlways	: 'Always', // MISSING
+		accessSameDomain: 'Same domain', // MISSING
+		accessNever		: 'Never', // MISSING
+		alignAbsBottom	: 'Abs dole',
+		alignAbsMiddle	: 'Abs sredina',
+		alignBaseline	: 'Bazno',
+		alignTextTop	: 'Vrh teksta',
+		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
+		bgcolor			: 'Boja pozadine',
+		hSpace			: 'HSpace',
+		vSpace			: 'VSpace',
+		validateSrc		: 'Molimo ukucajte URL link',
+		validateHSpace	: 'HSpace must be a number.', // MISSING
+		validateVSpace	: 'VSpace must be a number.' // MISSING
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Check Spelling', // MISSING
+		title			: 'Spell Check', // MISSING
+		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
+		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		notInDic		: 'Not in dictionary', // MISSING
+		changeTo		: 'Change to', // MISSING
+		btnIgnore		: 'Ignore', // MISSING
+		btnIgnoreAll	: 'Ignore All', // MISSING
+		btnReplace		: 'Replace', // MISSING
+		btnReplaceAll	: 'Replace All', // MISSING
+		btnUndo			: 'Undo', // MISSING
+		noSuggestions	: '- No suggestions -', // MISSING
+		progress		: 'Spell check in progress...', // MISSING
+		noMispell		: 'Spell check complete: No misspellings found', // MISSING
+		noChanges		: 'Spell check complete: No words changed', // MISSING
+		oneChange		: 'Spell check complete: One word changed', // MISSING
+		manyChanges		: 'Spell check complete: %1 words changed', // MISSING
+		ieSpellDownload	: 'Spell checker not installed. Do you want to download it now?' // MISSING
+	},
+
+	smiley :
+	{
+		toolbar	: 'Smješko',
+		title	: 'Ubaci smješka',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element' // MISSING
+	},
+
+	numberedlist	: 'Numerisana lista',
+	bulletedlist	: 'Lista',
+	indent			: 'Poveæaj uvod',
+	outdent			: 'Smanji uvod',
+
+	justify :
+	{
+		left	: 'Lijevo poravnanje',
+		center	: 'Centralno poravnanje',
+		right	: 'Desno poravnanje',
+		block	: 'Puno poravnanje'
+	},
+
+	blockquote : 'Block Quote', // MISSING
+
+	clipboard :
+	{
+		title		: 'Zalijepi',
+		cutError	: 'Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+X).',
+		copyError	: 'Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+C).',
+		pasteMsg	: 'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK', // MISSING
+		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.', // MISSING
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar			: 'Zalijepi iz Word-a',
+		title			: 'Zalijepi iz Word-a',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'Zalijepi kao obièan tekst',
+		title	: 'Zalijepi kao obièan tekst'
+	},
+
+	templates :
+	{
+		button			: 'Templates', // MISSING
+		title			: 'Content Templates', // MISSING
+		options : 'Template Options', // MISSING
+		insertOption	: 'Replace actual contents', // MISSING
+		selectPromptMsg	: 'Please select the template to open in the editor', // MISSING
+		emptyListMsg	: '(No templates defined)' // MISSING
+	},
+
+	showBlocks : 'Show Blocks', // MISSING
+
+	stylesCombo :
+	{
+		label		: 'Stil',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles', // MISSING
+		panelTitle2	: 'Inline Styles', // MISSING
+		panelTitle3	: 'Object Styles' // MISSING
+	},
+
+	format :
+	{
+		label		: 'Format',
+		panelTitle	: 'Format',
+
+		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)' // MISSING
+	},
+
+	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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Font',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'Font'
+	},
+
+	fontSize :
+	{
+		label		: 'Velièina',
+		voiceLabel	: 'Font Size', // MISSING
+		panelTitle	: 'Velièina'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Boja teksta',
+		bgColorTitle	: 'Boja pozadine',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'Automatska',
+		more			: 'Više boja...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor', // MISSING
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // 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
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor', // MISSING
+		flash		: 'Flash Animation', // MISSING
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Document Properties', // MISSING
+		title : 'Document Properties', // MISSING
+		design : 'Design', // MISSING
+		meta : 'Meta Tags', // MISSING
+		chooseColor : 'Choose', // MISSING
+		other : 'Other...', // MISSING
+		docTitle :	'Page Title', // MISSING
+		charset : 	'Character Set Encoding', // MISSING
+		charsetOther : 'Other Character Set Encoding', // MISSING
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Central European', // MISSING
+		charsetCT : 'Chinese Traditional (Big5)', // MISSING
+		charsetCR : 'Cyrillic', // MISSING
+		charsetGR : 'Greek', // MISSING
+		charsetJP : 'Japanese', // MISSING
+		charsetKR : 'Korean', // MISSING
+		charsetTR : 'Turkish', // MISSING
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Western European', // MISSING
+		docType : 'Document Type Heading', // MISSING
+		docTypeOther : 'Other Document Type Heading', // MISSING
+		xhtmlDec : 'Include XHTML Declarations', // MISSING
+		bgColor : 'Background Color', // MISSING
+		bgImage : 'Background Image URL', // MISSING
+		bgFixed : 'Non-scrolling (Fixed) Background', // MISSING
+		txtColor : 'Text Color', // MISSING
+		margin : 'Page Margins', // MISSING
+		marginTop : 'Top', // MISSING
+		marginLeft : 'Left', // MISSING
+		marginRight : 'Right', // MISSING
+		marginBottom : 'Bottom', // MISSING
+		metaKeywords : 'Document Indexing Keywords (comma separated)', // MISSING
+		metaDescription : 'Document Description', // MISSING
+		metaAuthor : 'Author', // MISSING
+		metaCopyright : 'Copyright', // MISSING
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/cs.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Czech language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['cs'] =
+{
+	/**
+	 * 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 : 'Textový editor, %1, nápovědu zobrazíte stiskem ALT 0.',
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Textový editor',
+
+	// Toolbar buttons without dialogs.
+	source			: 'Zdroj',
+	newPage			: 'Nová stránka',
+	save			: 'Uložit',
+	preview			: 'Náhled',
+	cut				: 'Vyjmout',
+	copy			: 'Kopírovat',
+	paste			: 'Vložit',
+	print			: 'Tisk',
+	underline		: 'Podtržené',
+	bold			: 'Tučné',
+	italic			: 'Kurzíva',
+	selectAll		: 'Vybrat vše',
+	removeFormat	: 'Odstranit formátování',
+	strike			: 'Přeškrtnuté',
+	subscript		: 'Dolní index',
+	superscript		: 'Horní index',
+	horizontalrule	: 'Vložit vodorovnou linku',
+	pagebreak		: 'Vložit konec stránky',
+	pagebreakAlt		: 'Konec stránky',
+	unlink			: 'Odstranit odkaz',
+	undo			: 'Zpět',
+	redo			: 'Znovu',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Vybrat na serveru',
+		url				: 'URL',
+		protocol		: 'Protokol',
+		upload			: 'Odeslat',
+		uploadSubmit	: 'Odeslat na server',
+		image			: 'Obrázek',
+		flash			: 'Flash',
+		form			: 'Formulář',
+		checkbox		: 'Zaškrtávací políčko',
+		radio			: 'Přepínač',
+		textField		: 'Textové pole',
+		textarea		: 'Textová oblast',
+		hiddenField		: 'Skryté pole',
+		button			: 'Tlačítko',
+		select			: 'Seznam',
+		imageButton		: 'Obrázkové tlačítko',
+		notSet			: '<nenastaveno>',
+		id				: 'Id',
+		name			: 'Jméno',
+		langDir			: 'Orientace jazyka',
+		langDirLtr		: 'Zleva do prava (LTR)',
+		langDirRtl		: 'Zprava do leva (RTL)',
+		langCode		: 'Kód jazyka',
+		longDescr		: 'Dlouhý popis URL',
+		cssClass		: 'Třída stylu',
+		advisoryTitle	: 'Pomocný titulek',
+		cssStyle		: 'Styl',
+		ok				: 'OK',
+		cancel			: 'Storno',
+		close			: 'Zavřít',
+		preview			: 'Náhled',
+		generalTab		: 'Obecné',
+		advancedTab		: 'Rozšířené',
+		validateNumberFailed : 'Zadaná hodnota není číselná.',
+		confirmNewPage	: 'Jakékoliv neuložené změny obsahu budou ztraceny. Skutečně chete otevrít novou stránku?',
+		confirmCancel	: 'Některá z nastavení byla změněna. Skutečně chete zavřít dialogové okno?',
+		options			: 'Nastavení',
+		target			: 'Cíl',
+		targetNew		: 'Nové okno (_blank)',
+		targetTop		: 'Okno nejvyšší úrovně (_top)',
+		targetSelf		: 'Stejné okno (_self)',
+		targetParent	: 'Rodičovské onko (_parent)',
+		langDirLTR		: 'Zleva doprava (LTR)',
+		langDirRTL		: 'Zprava doleva (RTL)',
+		styles			: 'Styly',
+		cssClasses		: 'Třídy stylů',
+		width			: 'Šířka',
+		height			: 'Výška',
+		align			: 'Zarovnání',
+		alignLeft		: 'Vlevo',
+		alignRight		: 'Vpravo',
+		alignCenter		: 'Na střed',
+		alignTop		: 'Nahoru',
+		alignMiddle		: 'Na střed',
+		alignBottom		: 'Dolů',
+		invalidHeight	: 'Zadaná výška musí být číslo.',
+		invalidWidth	: 'Zadaná šířka musí být číslo.',
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, nedostupné</span>'
+	},
+
+	contextmenu :
+	{
+		options : 'Nastavení kontextové nabídky'
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Vložit speciální znaky',
+		title		: 'Výběr speciálního znaku',
+		options : 'Nastavení speciálních znaků'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Vložit/změnit odkaz',
+		other 		: '<jiný>',
+		menu		: 'Změnit odkaz',
+		title		: 'Odkaz',
+		info		: 'Informace o odkazu',
+		target		: 'Cíl',
+		upload		: 'Odeslat',
+		advanced	: 'Rozšířené',
+		type		: 'Typ odkazu',
+		toUrl		: 'URL',
+		toAnchor	: 'Kotva v této stránce',
+		toEmail		: 'E-Mail',
+		targetFrame		: '<rámec>',
+		targetPopup		: '<vyskakovací okno>',
+		targetFrameName	: 'Název cílového rámu',
+		targetPopupName	: 'Název vyskakovacího okna',
+		popupFeatures	: 'Vlastnosti vyskakovacího okna',
+		popupResizable	: 'Umožňující měnit velikost',
+		popupStatusBar	: 'Stavový řádek',
+		popupLocationBar: 'Panel umístění',
+		popupToolbar	: 'Panel nástrojů',
+		popupMenuBar	: 'Panel nabídky',
+		popupFullScreen	: 'Celá obrazovka (IE)',
+		popupScrollBars	: 'Posuvníky',
+		popupDependent	: 'Závislost (Netscape)',
+		popupLeft		: 'Levý okraj',
+		popupTop		: 'Horní okraj',
+		id				: 'Id',
+		langDir			: 'Orientace jazyka',
+		langDirLTR		: 'Zleva do prava (LTR)',
+		langDirRTL		: 'Zprava do leva (RTL)',
+		acccessKey		: 'Přístupový klíč',
+		name			: 'Jméno',
+		langCode			: 'Orientace jazyka',
+		tabIndex			: 'Pořadí prvku',
+		advisoryTitle		: 'Pomocný titulek',
+		advisoryContentType	: 'Pomocný typ obsahu',
+		cssClasses		: 'Třída stylu',
+		charset			: 'Přiřazená znaková sada',
+		styles			: 'Styl',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Vybrat kotvu',
+		anchorName		: 'Podle jména kotvy',
+		anchorId			: 'Podle Id objektu',
+		emailAddress		: 'E-Mailová adresa',
+		emailSubject		: 'Předmět zprávy',
+		emailBody		: 'Tělo zprávy',
+		noAnchors		: '(Ve stránce není definována žádná kotva!)',
+		noUrl			: 'Zadejte prosím URL odkazu',
+		noEmail			: 'Zadejte prosím e-mailovou adresu'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Vložít/změnit záložku',
+		menu		: 'Vlastnosti záložky',
+		title		: 'Vlastnosti záložky',
+		name		: 'Název záložky',
+		errorName	: 'Zadejte prosím název záložky',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Vlastnosti číslování',
+		bulletedTitle		: 'Vlastnosti odrážek',
+		type				: 'Typ',
+		start				: 'Počátek',
+		validateStartNumber				:'Číslování musí začínat celým číslem.',
+		circle				: 'Kroužky',
+		disc				: 'Kolečka',
+		square				: 'Čtverce',
+		none				: 'Nic',
+		notset				: '<nenastaveno>',
+		armenian			: 'Arménské',
+		georgian			: 'Gruzínské (an, ban, gan, atd.)',
+		lowerRoman			: 'Malé římské (i, ii, iii, iv, v, atd.)',
+		upperRoman			: 'Velké římské (I, II, III, IV, V, atd.)',
+		lowerAlpha			: 'Malá latinka (a, b, c, d, e, atd.)',
+		upperAlpha			: 'Velká latinka (A, B, C, D, E, atd.)',
+		lowerGreek			: 'Malé řecké (alpha, beta, gamma, atd.)',
+		decimal				: 'Arabská čísla (1, 2, 3, atd.)',
+		decimalLeadingZero	: 'Arabská čísla uvozená nulou (01, 02, 03, atd.)'
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Najít a nahradit',
+		find				: 'Hledat',
+		replace				: 'Nahradit',
+		findWhat			: 'Co hledat:',
+		replaceWith			: 'Čím nahradit:',
+		notFoundMsg			: 'Hledaný text nebyl nalezen.',
+		matchCase			: 'Rozlišovat velikost písma',
+		matchWord			: 'Pouze celá slova',
+		matchCyclic			: 'Procházet opakovaně',
+		replaceAll			: 'Nahradit vše',
+		replaceSuccessMsg	: '%1 nahrazení.'
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tabulka',
+		title		: 'Vlastnosti tabulky',
+		menu		: 'Vlastnosti tabulky',
+		deleteTable	: 'Smazat tabulku',
+		rows		: 'Řádky',
+		columns		: 'Sloupce',
+		border		: 'Ohraničení',
+		widthPx		: 'bodů',
+		widthPc		: 'procent',
+		widthUnit	: 'jednotka šířky',
+		cellSpace	: 'Vzdálenost buněk',
+		cellPad		: 'Odsazení obsahu v buňce',
+		caption		: 'Popis',
+		summary		: 'Souhrn',
+		headers		: 'Záhlaví',
+		headersNone		: 'Žádné',
+		headersColumn	: 'První sloupec',
+		headersRow		: 'První řádek',
+		headersBoth		: 'Obojí',
+		invalidRows		: 'Počet řádků musí být číslo větší než 0.',
+		invalidCols		: 'Počet sloupců musí být číslo větší než 0.',
+		invalidBorder	: 'Zdaná velikost okraje musí být číselná.',
+		invalidWidth	: 'Zadaná šířka tabulky musí být číselná.',
+		invalidHeight	: 'zadaná výška tabulky musí být číselná.',
+		invalidCellSpacing	: 'Zadaná vzdálenost buněk musí být číselná.',
+		invalidCellPadding	: 'Zadané odsazení obsahu v buňce musí být číselné.',
+
+		cell :
+		{
+			menu			: 'Buňka',
+			insertBefore	: 'Vložit buňku před',
+			insertAfter		: 'Vložit buňku za',
+			deleteCell		: 'Smazat buňky',
+			merge			: 'Sloučit buňky',
+			mergeRight		: 'Sloučit doprava',
+			mergeDown		: 'Sloučit dolů',
+			splitHorizontal	: 'Rozdělit buňky vodorovně',
+			splitVertical	: 'Rozdělit buňky svisle',
+			title			: 'Vlastnosti buňky',
+			cellType		: 'Typ buňky',
+			rowSpan			: 'Spojit řádky',
+			colSpan			: 'Spojit sloupce',
+			wordWrap		: 'Zalamování',
+			hAlign			: 'Vodorovné zarovnání',
+			vAlign			: 'Svislé zarovnání',
+			alignBaseline	: 'Na účaří',
+			bgColor			: 'Barva pozadí',
+			borderColor		: 'Barva okraje',
+			data			: 'Data',
+			header			: 'Hlavička',
+			yes				: 'Ano',
+			no				: 'Ne',
+			invalidWidth	: 'Zadaná šířka buňky musí být číslená.',
+			invalidHeight	: 'Zadaná výška buňky musí být číslená.',
+			invalidRowSpan	: 'Zadaný počet sloučených řádků musí být celé číslo.',
+			invalidColSpan	: 'Zadaný počet sloučených sloupců musí být celé číslo.',
+			chooseColor		: 'Výběr'
+		},
+
+		row :
+		{
+			menu			: 'Řádek',
+			insertBefore	: 'Vložit řádek před',
+			insertAfter		: 'Vložit řádek za',
+			deleteRow		: 'Smazat řádky'
+		},
+
+		column :
+		{
+			menu			: 'Sloupec',
+			insertBefore	: 'Vložit sloupec před',
+			insertAfter		: 'Vložit sloupec za',
+			deleteColumn	: 'Smazat sloupec'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Vlastnosti tlačítka',
+		text		: 'Popisek',
+		type		: 'Typ',
+		typeBtn		: 'Tlačítko',
+		typeSbm		: 'Odeslat',
+		typeRst		: 'Obnovit'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Vlastnosti zaškrtávacího políčka',
+		radioTitle	: 'Vlastnosti přepínače',
+		value		: 'Hodnota',
+		selected	: 'Zaškrtnuto'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Vlastnosti formuláře',
+		menu		: 'Vlastnosti formuláře',
+		action		: 'Akce',
+		method		: 'Metoda',
+		encoding	: 'Kódování'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Vlastnosti seznamu',
+		selectInfo	: 'Info',
+		opAvail		: 'Dostupná nastavení',
+		value		: 'Hodnota',
+		size		: 'Velikost',
+		lines		: 'Řádků',
+		chkMulti	: 'Povolit mnohonásobné výběry',
+		opText		: 'Text',
+		opValue		: 'Hodnota',
+		btnAdd		: 'Přidat',
+		btnModify	: 'Změnit',
+		btnUp		: 'Nahoru',
+		btnDown		: 'Dolů',
+		btnSetValue : 'Nastavit jako vybranou hodnotu',
+		btnDelete	: 'Smazat'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Vlastnosti textové oblasti',
+		cols		: 'Sloupců',
+		rows		: 'Řádků'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Vlastnosti textového pole',
+		name		: 'Název',
+		value		: 'Hodnota',
+		charWidth	: 'Šířka ve znacích',
+		maxChars	: 'Maximální počet znaků',
+		type		: 'Typ',
+		typeText	: 'Text',
+		typePass	: 'Heslo'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Vlastnosti skrytého pole',
+		name	: 'Název',
+		value	: 'Hodnota'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Vlastnosti obrázku',
+		titleButton	: 'Vlastností obrázkového tlačítka',
+		menu		: 'Vlastnosti obrázku',
+		infoTab		: 'Informace o obrázku',
+		btnUpload	: 'Odeslat na server',
+		upload		: 'Odeslat',
+		alt			: 'Alternativní text',
+		lockRatio	: 'Zámek',
+		resetSize	: 'Původní velikost',
+		border		: 'Okraje',
+		hSpace		: 'H-mezera',
+		vSpace		: 'V-mezera',
+		alertUrl	: 'Zadejte prosím URL obrázku',
+		linkTab		: 'Odkaz',
+		button2Img	: 'Skutečně chcete převést zvolené obrázkové tlačítko na obyčejný obrázek?',
+		img2Button	: 'Skutečně chcete převést zvolený obrázek na obrázkové tlačítko?',
+		urlMissing	: 'Zadané URL zdroje obrázku nebylo nalezeno.',
+		validateBorder	: 'Okraj musí být nastaven v celých číslech.',
+		validateHSpace	: 'H-mezera musí být nastavena v celých číslech.',
+		validateVSpace	: 'V-mezera musí být nastavena v celých číslech.'
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Vlastnosti Flashe',
+		propertiesTab	: 'Vlastnosti',
+		title			: 'Vlastnosti Flashe',
+		chkPlay			: 'Automatické spuštění',
+		chkLoop			: 'Opakování',
+		chkMenu			: 'Nabídka Flash',
+		chkFull			: 'Povolit celoobrazovkový režim',
+ 		scale			: 'Zobrazit',
+		scaleAll		: 'Zobrazit vše',
+		scaleNoBorder	: 'Bez okraje',
+		scaleFit		: 'Přizpůsobit',
+		access			: 'Přístup ke skriptu',
+		accessAlways	: 'Vždy',
+		accessSameDomain: 'Ve stejné doméně',
+		accessNever		: 'Nikdy',
+		alignAbsBottom	: 'Zcela dolů',
+		alignAbsMiddle	: 'Doprostřed',
+		alignBaseline	: 'Na účaří',
+		alignTextTop	: 'Na horní okraj textu',
+		quality			: 'Kvalita',
+		qualityBest		: 'Nejlepší',
+		qualityHigh		: 'Vysoká',
+		qualityAutoHigh	: 'Vysoká - auto',
+		qualityMedium	: 'Střední',
+		qualityAutoLow	: 'Nízká - auto',
+		qualityLow		: 'Nejnižší',
+		windowModeWindow: 'Okno',
+		windowModeOpaque: 'Neprůhledné',
+		windowModeTransparent : 'Průhledné',
+		windowMode		: 'Režim okna',
+		flashvars		: 'Proměnné pro Flash',
+		bgcolor			: 'Barva pozadí',
+		hSpace			: 'H-mezera',
+		vSpace			: 'V-mezera',
+		validateSrc		: 'Zadejte prosím URL odkazu',
+		validateHSpace	: 'Zadaná H-mezera musí být číslo.',
+		validateVSpace	: 'Zadaná V-mezera musí být číslo.'
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Zkontrolovat pravopis',
+		title			: 'Kontrola pravopisu',
+		notAvailable	: 'Omlouváme se, ale služba nyní není dostupná.',
+		errorLoading	: 'Chyba nahrávání služby aplikace z: %s.',
+		notInDic		: 'Není ve slovníku',
+		changeTo		: 'Změnit na',
+		btnIgnore		: 'Přeskočit',
+		btnIgnoreAll	: 'Přeskakovat vše',
+		btnReplace		: 'Zaměnit',
+		btnReplaceAll	: 'Zaměňovat vše',
+		btnUndo			: 'Zpět',
+		noSuggestions	: '- žádné návrhy -',
+		progress		: 'Probíhá kontrola pravopisu...',
+		noMispell		: 'Kontrola pravopisu dokončena: Žádné pravopisné chyby nenalezeny',
+		noChanges		: 'Kontrola pravopisu dokončena: Beze změn',
+		oneChange		: 'Kontrola pravopisu dokončena: Jedno slovo změněno',
+		manyChanges		: 'Kontrola pravopisu dokončena: %1 slov změněno',
+		ieSpellDownload	: 'Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Smajlíky',
+		title	: 'Vkládání smajlíků',
+		options : 'Nastavení smajlíků'
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Cesta objektu',
+		eleTitle : '%1 objekt'
+	},
+
+	numberedlist	: 'Číslování',
+	bulletedlist	: 'Odrážky',
+	indent			: 'Zvětšit odsazení',
+	outdent			: 'Zmenšit odsazení',
+
+	justify :
+	{
+		left	: 'Zarovnat vlevo',
+		center	: 'Zarovnat na střed',
+		right	: 'Zarovnat vpravo',
+		block	: 'Zarovnat do bloku'
+	},
+
+	blockquote : 'Citace',
+
+	clipboard :
+	{
+		title		: 'Vložit',
+		cutError	: 'Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+X).',
+		copyError	: 'Bezpečnostní nastavení Vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+C).',
+		pasteMsg	: 'Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stiskněte <STRONG>OK</STRONG>.',
+		securityMsg	: 'Z důvodů nastavení bezpečnosti Vašeho prohlížeče nemůže editor přistupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.',
+		pasteArea	: 'Oblast vlkádání'
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'Jak je vidět, vkládaný text je kopírován z Wordu. Chcete jej před vložením vyčistit?',
+		toolbar			: 'Vložit z Wordu',
+		title			: 'Vložit z Wordu',
+		error			: 'Z důvodu vnitřní chyby nebylo možné provést vyčištění vkládaného textu.'
+	},
+
+	pasteText :
+	{
+		button	: 'Vložit jako čistý text',
+		title	: 'Vložit jako čistý text'
+	},
+
+	templates :
+	{
+		button			: 'Šablony',
+		title			: 'Šablony obsahu',
+		options : 'Nastavení šablon',
+		insertOption	: 'Nahradit aktuální obsah',
+		selectPromptMsg	: 'Prosím zvolte šablonu pro otevření v editoru<br>(aktuální obsah editoru bude ztracen):',
+		emptyListMsg	: '(Není definována žádná šablona)'
+	},
+
+	showBlocks : 'Ukázat bloky',
+
+	stylesCombo :
+	{
+		label		: 'Styl',
+		panelTitle	: 'Formátovací styly',
+		panelTitle1	: 'Blokové styly',
+		panelTitle2	: 'Řádkové styly',
+		panelTitle3	: 'Objektové styly'
+	},
+
+	format :
+	{
+		label		: 'Formát',
+		panelTitle	: 'Formát',
+
+		tag_p		: 'Normální',
+		tag_pre		: 'Naformátováno',
+		tag_address	: 'Adresa',
+		tag_h1		: 'Nadpis 1',
+		tag_h2		: 'Nadpis 2',
+		tag_h3		: 'Nadpis 3',
+		tag_h4		: 'Nadpis 4',
+		tag_h5		: 'Nadpis 5',
+		tag_h6		: 'Nadpis 6',
+		tag_div		: 'Normální (DIV)'
+	},
+
+	div :
+	{
+		title				: 'Vytvořit Div kontejner',
+		toolbar				: 'Vytvořit Div kontejner',
+		cssClassInputLabel	: 'Třídy stylů',
+		styleSelectLabel	: 'Styly',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Kód jazyka',
+		inlineStyleInputLabel	: 'Vnitřní styly',
+		advisoryTitleInputLabel	: 'Nápovědní titulek',
+		langDirLabel		: 'Orientace textu',
+		langDirLTRLabel		: 'Zleva doprava (LTR)',
+		langDirRTLLabel		: 'Zprava doleva (RTL)',
+		edit				: 'Změnit Div',
+		remove				: 'Odstranit Div'
+  	},
+
+	iframe :
+	{
+		title		: 'Vlastnosti IFrame',
+		toolbar		: 'IFrame',
+		noUrl		: 'Zadejte prosím URL obsahu pro IFrame',
+		scrolling	: 'Zapnout posuvníky',
+		border		: 'Zobrazit okraj'
+	},
+
+	font :
+	{
+		label		: 'Písmo',
+		voiceLabel	: 'Písmo',
+		panelTitle	: 'Písmo'
+	},
+
+	fontSize :
+	{
+		label		: 'Velikost',
+		voiceLabel	: 'Velikost písma',
+		panelTitle	: 'Velikost'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Barva textu',
+		bgColorTitle	: 'Barva pozadí',
+		panelTitle		: 'Barvy',
+		auto			: 'Automaticky',
+		more			: 'Více barev...'
+	},
+
+	colors :
+	{
+		'000' : 'Černá',
+		'800000' : 'Kaštanová',
+		'8B4513' : 'Sedlová hněď',
+		'2F4F4F' : 'Tmavě bledě šedá',
+		'008080' : 'Čírka',
+		'000080' : 'Námořnická modř',
+		'4B0082' : 'Inkoustová',
+		'696969' : 'Tmavě šedá',
+		'B22222' : 'Pálená cihla',
+		'A52A2A' : 'Hnědá',
+		'DAA520' : 'Zlatý prut',
+		'006400' : 'Tmavě zelená',
+		'40E0D0' : 'Tyrkisová',
+		'0000CD' : 'Středně modrá',
+		'800080' : 'Purpurová',
+		'808080' : 'Šedá',
+		'F00' : 'Červená',
+		'FF8C00' : 'Tmavě oranžová',
+		'FFD700' : 'Zlatá',
+		'008000' : 'Zelená',
+		'0FF' : 'Kyanidová',
+		'00F' : 'Modrá',
+		'EE82EE' : 'Fialová',
+		'A9A9A9' : 'Kalně šedá',
+		'FFA07A' : 'Světle lososová',
+		'FFA500' : 'Oranžová',
+		'FFFF00' : 'Žlutá',
+		'00FF00' : 'Limetková',
+		'AFEEEE' : 'Bledě tyrkisová',
+		'ADD8E6' : 'Světle modrá',
+		'DDA0DD' : 'Švestková',
+		'D3D3D3' : 'Světle šedá',
+		'FFF0F5' : 'Levandulově ruměnná',
+		'FAEBD7' : 'Antická bílá',
+		'FFFFE0' : 'Světle žlutá',
+		'F0FFF0' : 'Medová rosa',
+		'F0FFFF' : 'Azurová',
+		'F0F8FF' : 'Alenčina modrá',
+		'E6E6FA' : 'Lavendulová',
+		'FFF' : 'Bílá'
+	},
+
+	scayt :
+	{
+		title			: 'Kontrola pravopisu během psaní (SCAYT)',
+		opera_title		: 'Not supported by Opera', // MISSING
+		enable			: 'Zapnout SCAYT',
+		disable			: 'Vypnout SCAYT',
+		about			: 'O aplikaci SCAYT',
+		toggle			: 'Vypínač SCAYT',
+		options			: 'Nastavení',
+		langs			: 'Jazyky',
+		moreSuggestions	: 'Více návrhů',
+		ignore			: 'Přeskočit',
+		ignoreAll		: 'Přeskočit vše',
+		addWord			: 'Přidat slovo',
+		emptyDic		: 'Název slovníku nesmí být prázdný.',
+
+		optionsTab		: 'Nastavení',
+		allCaps			: 'Ignorovat slova velkými písmeny',
+		ignoreDomainNames : 'Ignorovat doménová jména',
+		mixedCase		: 'Ignorovat slova obsahující různou velikost písma',
+		mixedWithDigits	: 'Ignorovat slova obsahující čísla',
+
+		languagesTab	: 'Jazyky',
+
+		dictionariesTab	: 'Slovníky',
+		dic_field_name	: 'Název slovníku',
+		dic_create		: 'vytvořit',
+		dic_restore		: 'Obnovit',
+		dic_delete		: 'Smazat',
+		dic_rename		: 'Přejmenovat',
+		dic_info		: 'Zpočátku se uživatelský slovník ukládá do cookies ve vašem prohlížeči. Ovšem cookies mají omezenou velikost, takže když slovník dosáhne velikosti, kdy se již do cookies nevejde, může být uložen na našem serveru. Chcete-li uložit Váš osobní slovník na našem serveru, je třeba slovník nejdříve pojmenovat. Máte-li již slovník pojmenován a uložen, zadejte jeho název a klepněte na tlačítko Obnovit.',
+
+		aboutTab		: 'O aplikaci'
+	},
+
+	about :
+	{
+		title		: 'O aplikaci CKEditor',
+		dlgTitle	: 'O aplikaci CKEditor',
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // MISSING
+		moreInfo	: 'Pro informace o lincenci navštivte naši webovou stránku:',
+		copy		: 'Copyright &copy; $1. All rights reserved.'
+	},
+
+	maximize : 'Maximalizovat',
+	minimize : 'Minimalizovat',
+
+	fakeobjects :
+	{
+		anchor		: 'Záložka',
+		flash		: 'Flash animace',
+		iframe		: 'IFrame',
+		hiddenfield	: 'Skryté pole',
+		unknown		: 'Neznámý objekt'
+	},
+
+	resize : 'Uchopit pro změnu velikosti',
+
+	colordialog :
+	{
+		title		: 'Výběr barvy',
+		options	:	'Nastavení barvy',
+		highlight	: 'Zvýraznit',
+		selected	: 'Vybráno',
+		clear		: 'Vyčistit'
+	},
+
+	toolbarCollapse	: 'Skrýt panel nástrojů',
+	toolbarExpand	: 'Zobrazit panel nástrojů',
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Orientace textu zleva doprava',
+		rtl : 'Orientace textu zprava do leva'
+	},
+
+	docprops :
+	{
+		label : 'Vlastnosti dokumentu',
+		title : 'Vlastnosti dokumentu',
+		design : 'Design', // MISSING
+		meta : 'Metadata',
+		chooseColor : 'Výběr',
+		other : '<jiný>',
+		docTitle :	'Titulek stránky',
+		charset : 	'Znaková sada',
+		charsetOther : 'Další znaková sada',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Středoevropské jazyky',
+		charsetCT : 'Tradiční čínština (Big5)',
+		charsetCR : 'Cyrilice',
+		charsetGR : 'Řečtina',
+		charsetJP : 'Japonština',
+		charsetKR : 'Korejština',
+		charsetTR : 'Turečtina',
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Západoevropské jazyky',
+		docType : 'Typ dokumentu',
+		docTypeOther : 'Jiný typ dokumetu',
+		xhtmlDec : 'Zahrnou deklarace XHTML',
+		bgColor : 'Barva pozadí',
+		bgImage : 'URL obrázku na pozadí',
+		bgFixed : 'Nerolovatelné pozadí',
+		txtColor : 'Barva textu',
+		margin : 'Okraje stránky',
+		marginTop : 'Horní',
+		marginLeft : 'Levý',
+		marginRight : 'Pravý',
+		marginBottom : 'Dolní',
+		metaKeywords : 'Klíčová slova (oddělená čárkou)',
+		metaDescription : 'Popis dokumentu',
+		metaAuthor : 'Autor',
+		metaCopyright : 'Autorská práva',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/cy.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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, gwasgwch ALT 0 am gymorth.',
+
+	// ARIA descriptions.
+	toolbars	: 'Bariau offer golygydd',
+	editor		: 'Golygydd Testun Cyfoethog',
+
+	// 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',
+	pagebreakAlt		: 'Toriad Tudalen',
+	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',
+		close			: 'Cau',
+		preview			: 'Rhagolwg',
+		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?',
+		options			: 'Opsiynau',
+		target			: 'Targed',
+		targetNew		: 'Ffenest Newydd (_blank)',
+		targetTop		: 'Ffenest ar y Brig (_top)',
+		targetSelf		: 'Yr un Ffenest (_self)',
+		targetParent	: 'Ffenest y Rhiant (_parent)',
+		langDirLTR		: 'Chwith i\'r Dde (LTR)',
+		langDirRTL		: 'Dde i\'r Chwith (RTL)',
+		styles			: 'Arddull',
+		cssClasses		: 'Dosbarthiadau Ffeil Ddiwyg',
+		width			: 'Lled',
+		height			: 'Uchder',
+		align			: 'Alinio',
+		alignLeft		: 'Chwith',
+		alignRight		: 'Dde',
+		alignCenter		: 'Canol',
+		alignTop		: 'Brig',
+		alignMiddle		: 'Canol',
+		alignBottom		: 'Gwaelod',
+		invalidHeight	: 'Rhaid i\'r Uchder fod yn rhif.',
+		invalidWidth	: 'Rhaid i\'r Lled fod yn rhif.',
+		invalidCssLength	: 'Mae\'n rhaid i\'r gwerth ar gyfer maes "%1" fod yn rhif positif gyda neu heb uned fesuriad CSS dilys (px, %, in, cm, mm, em, ex, pt, neu pc).',
+		invalidHtmlLength	: 'Mae\'n rhaid i\'r gwerth ar gyfer maes "%1" fod yn rhif positif gyda neu heb uned fesuriad HTML dilys (px neu %).',
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, ddim ar gael</span>'
+	},
+
+	contextmenu :
+	{
+		options : 'Opsiynau Dewislen Cyd-destun'
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Mewnosod Nodau Arbennig',
+		title		: 'Dewis Nod Arbennig',
+		options : 'Opsiynau Nodau Arbennig'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Dolen',
+		other 		: '<eraill>',
+		menu		: 'Golygu Dolen',
+		title		: 'Dolen',
+		info		: 'Gwyb ar y Ddolen',
+		target		: 'Targed',
+		upload		: 'Lanlwytho',
+		advanced	: 'Uwch',
+		type		: 'Math y Ddolen',
+		toUrl		: 'URL',
+		toAnchor	: 'Dolen at angor yn y testun',
+		toEmail		: 'E-bost',
+		targetFrame		: '<ffrâm>',
+		targetPopup		: '<ffenestr bop>',
+		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)',
+		popupLeft		: 'Safle Chwith',
+		popupTop		: 'Safle Top',
+		id				: 'Id',
+		langDir			: 'Cyfeiriad Iaith',
+		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',
+		rel			: 'Perthynas',
+		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',
+		remove		: 'Tynnwch yr Angor'
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Priodweddau Rhestr Rifol',
+		bulletedTitle		: 'Priodweddau Rhestr Fwled',
+		type				: 'Math',
+		start				: 'Dechrau',
+		validateStartNumber				:'Rhaid bod y rhif cychwynnol yn gyfanrif.',
+		circle				: 'Cylch',
+		disc				: 'Disg',
+		square				: 'Sgwâr',
+		none				: 'Dim',
+		notset				: '<heb osod>',
+		armenian			: 'Rhifau Armeneg',
+		georgian			: 'Rhifau Sioraidd (an, ban, gan, ayyb.)',
+		lowerRoman			: 'Rhufeinig Is (i, ii, iii, iv, v, ayyb.)',
+		upperRoman			: 'Rhufeinig Uwch (I, II, III, IV, V, ayyb.)',
+		lowerAlpha			: 'Alffa Is (a, b, c, d, e, ayyb.)',
+		upperAlpha			: 'Alffa Uwch (A, B, C, D, E, ayyb.)',
+		lowerGreek			: 'Groeg Is (alpha, beta, gamma, ayyb.)',
+		decimal				: 'Degol (1, 2, 3, ayyb.)',
+		decimalLeadingZero	: 'Degol â sero arweiniol (01, 02, 03, ayyb.)'
+	},
+
+	// 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',
+		widthPx		: 'picsel',
+		widthPc		: 'y cant',
+		widthUnit	: 'uned lled',
+		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 positif.',
+		invalidCellPadding	: 'Mae\'n rhaid i badiad y gell fod yn rhif positif.',
+
+		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',
+			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'
+	},
+
+	// 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',
+		upload		: 'lanlwytho',
+		alt			: 'Testun Amgen',
+		lockRatio	: 'Cloi Cymhareb',
+		resetSize	: 'Ailosod Maint',
+		border		: 'Ymyl',
+		hSpace		: 'BwlchLl',
+		vSpace		: 'BwlchF',
+		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.',
+		validateBorder	: 'Rhaid i\'r ymyl fod yn gyfanrif.',
+		validateHSpace	: 'Rhaid i\'r HSpace fod yn gyfanrif.',
+		validateVSpace	: 'Rhaid i\'r VSpace fod yn gyfanrif.'
+	},
+
+	// 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',
+		alignAbsBottom	: 'Gwaelod Abs',
+		alignAbsMiddle	: 'Canol Abs',
+		alignBaseline	: 'Baslinell',
+		alignTextTop	: 'Testun 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',
+		hSpace			: 'BwlchLl',
+		vSpace			: 'BwlchF',
+		validateSrc		: 'Ni all yr URL fod yn wag.',
+		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',
+		options : 'Opsiynau Gwenogluniau'
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Llwybr elfennau',
+		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/Cmd+X).',
+		copyError	: 'Nid yw gosodiadau diogelwch eich porwr yn caniatàu\'r golygydd i gynnal \'gweithredoedd copïo\' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+C).',
+		pasteMsg	: 'Gludwch i mewn i\'r blwch canlynol gan ddefnyddio\'r bysellfwrdd (<strong>Ctrl/Cmd+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.',
+		pasteArea	: 'Ardal Gludo'
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'Mae\'r testun rydych chi am ludo wedi\'i gopïo o Word. Ydych chi am ei lanhau cyn ei ludo?',
+		toolbar			: 'Gludo o Word',
+		title			: 'Gludo o Word',
+		error			: 'Doedd dim modd glanhau y data a ludwyd oherwydd gwall mewnol'
+	},
+
+	pasteText :
+	{
+		button	: 'Gludo fel testun plaen',
+		title	: 'Gludo fel Testun Plaen'
+	},
+
+	templates :
+	{
+		button			: 'Templedi',
+		title			: 'Templedi Cynnwys',
+		options : 'Opsiynau Templedi',
+		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',
+		panelTitle	: 'Arddulliau Fformatio',
+		panelTitle1	: 'Arddulliau Bloc',
+		panelTitle2	: 'Arddulliau Mewnol',
+		panelTitle3	: 'Arddulliau Gwrthrych'
+	},
+
+	format :
+	{
+		label		: 'Fformat',
+		panelTitle	: 'Fformat 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				: 'Creu Cynhwysydd Div',
+		toolbar				: 'Creu Cynhwysydd Div',
+		cssClassInputLabel	: 'Dosbarthiadau Ffeil Ddiwyg',
+		styleSelectLabel	: 'Arddull',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Cod Iaith',
+		inlineStyleInputLabel	: 'Arddull Mewn Llinell',
+		advisoryTitleInputLabel	: 'Teitl Cynghorol',
+		langDirLabel		: 'Cyfeiriad yr Iaith',
+		langDirLTRLabel		: 'Chwith i\'r Dde (LTR)',
+		langDirRTLLabel		: 'Dde i\'r Chwith (RTL)',
+		edit				: 'Golygu Div',
+		remove				: 'Tynnu Div'
+  	},
+
+	iframe :
+	{
+		title		: 'Priodweddau IFrame',
+		toolbar		: 'IFrame',
+		noUrl		: 'Rhowch fath URL yr iframe',
+		scrolling	: 'Galluogi bariau sgrolio',
+		border		: 'Dangos ymyl y ffrâm'
+	},
+
+	font :
+	{
+		label		: 'Ffont',
+		voiceLabel	: 'Ffont',
+		panelTitle	: 'Enw\'r Ffont'
+	},
+
+	fontSize :
+	{
+		label		: 'Maint',
+		voiceLabel	: 'Maint y Ffont',
+		panelTitle	: 'Maint y Ffont'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Lliw Testun',
+		bgColorTitle	: 'Lliw Cefndir',
+		panelTitle		: 'Lliwiau',
+		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',
+		opera_title		: 'Heb ei gynnal gan Opera',
+		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',
+		allCaps			: 'Anwybyddu Geiriau Nodau Uwch i Gyd',
+		ignoreDomainNames : 'Anwybyddu Enwau Parth',
+		mixedCase		: 'Anwybyddu Geiriau â Chymysgedd Nodau Uwch ac Is',
+		mixedWithDigits	: 'Anwybyddu Geiriau â Rhifau',
+
+		languagesTab	: 'Ieithoedd',
+
+		dictionariesTab	: 'Geiriaduron',
+		dic_field_name	: 'Enw\'r geiriadur',
+		dic_create		: 'Creu',
+		dic_restore		: 'Adfer',
+		dic_delete		: 'Dileu',
+		dic_rename		: 'Ailenwi',
+		dic_info		: 'Ar y cychwyn, caiff y Geiriadur ei storio mewn Cwci. Er, mae terfyn ar faint cwcis. Pan fydd Gweiriadur Defnyddiwr yn tyfu tu hwnt i gyfyngiadau maint Cwci, caiff y geiriadur ei storio ar ein gweinydd ni. er mwyn storio eich geiriadur poersonol chi ar ein gweinydd, bydd angen i chi osod enw ar gyfer y geiriadur. Os oes geiriadur \'da chi ar ein gweinydd yn barod, teipiwch ei enw a chliciwch y botwm Adfer.',
+
+		aboutTab		: 'Ynghylch'
+	},
+
+	about :
+	{
+		title		: 'Ynghylch CKEditor',
+		dlgTitle	: 'Ynghylch CKEditor',
+		help	: 'Gwirio $1 am gymorth.',
+		userGuide : 'Canllawiau Defnyddiwr 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',
+		iframe		: 'IFrame',
+		hiddenfield	: 'Maes Cudd',
+		unknown		: 'Gwrthrych Anhysbys'
+	},
+
+	resize : 'Llusgo i ailfeintio',
+
+	colordialog :
+	{
+		title		: 'Dewis lliw',
+		options	:	'Opsiynau Lliw',
+		highlight	: 'Uwcholeuo',
+		selected	: 'Dewiswyd',
+		clear		: 'Clirio'
+	},
+
+	toolbarCollapse	: 'Cyfangu\'r Bar Offer',
+	toolbarExpand	: 'Ehangu\'r Bar Offer',
+
+	toolbarGroups :
+	{
+		document : 'Dogfen',
+		clipboard : 'Clipfwrdd/Dadwneud',
+		editing : 'Golygu',
+		forms : 'Ffurflenni',
+		basicstyles : 'Arddulliau Sylfaenol',
+		paragraph : 'Paragraff',
+		links : 'Dolenni',
+		insert : 'Mewnosod',
+		styles : 'Arddulliau',
+		colors : 'Lliwiau',
+		tools : 'Offer'
+	},
+
+	bidi :
+	{
+		ltr : 'Cyfeiriad testun o\'r chwith i\'r dde',
+		rtl : 'Cyfeiriad testun o\'r dde i\'r chwith'
+	},
+
+	docprops :
+	{
+		label : 'Priodweddau Dogfen',
+		title : 'Priodweddau Dogfen',
+		design : 'Cynllunio',
+		meta : 'Tagiau Meta',
+		chooseColor : 'Dewis',
+		other : 'Arall...',
+		docTitle :	'Teitl y Dudalen',
+		charset : 	'Amgodio Set Nodau',
+		charsetOther : 'Amgodio Set Nodau Arall',
+		charsetASCII : 'ASCII',
+		charsetCE : 'Ewropeaidd Canol',
+		charsetCT : 'Tsieinëeg Traddodiadol (Big5)',
+		charsetCR : 'Syrilig',
+		charsetGR : 'Groeg',
+		charsetJP : 'Siapanëeg',
+		charsetKR : 'Corëeg',
+		charsetTR : 'Tyrceg',
+		charsetUN : 'Unicode (UTF-8)',
+		charsetWE : 'Ewropeaidd Gorllewinol',
+		docType : 'Pennawd Math y Ddogfen',
+		docTypeOther : 'Pennawd Math y Ddogfen Arall',
+		xhtmlDec : 'Cynnwys Datganiadau XHTML',
+		bgColor : 'Lliw Cefndir',
+		bgImage : 'URL Delwedd Cefndir',
+		bgFixed : 'Cefndir Sefydlog (Ddim yn Sgrolio)',
+		txtColor : 'Lliw y Testun',
+		margin : 'Ffin y Dudalen',
+		marginTop : 'Brig',
+		marginLeft : 'Chwith',
+		marginRight : 'Dde',
+		marginBottom : 'Gwaelod',
+		metaKeywords : 'Allweddeiriau Indecsio Dogfen (gwahanu gyda choma)',
+		metaDescription : 'Disgrifiad y Ddogfen',
+		metaAuthor : 'Awdur',
+		metaCopyright : 'Hawlfraint',
+		previewHtml : '<p>Dyma ychydig o <strong>destun sampl</strong>. Rydych chi\'n defnyddio <a href="javascript:void(0)">CKEditor</a>.</p>'
+	}
+};

File diff suppressed because it is too large
+ 812 - 0
web/js/ckeditor/_source/lang/de.js


+ 812 - 0
web/js/ckeditor/_source/lang/en-au.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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-au'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// 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',
+	pagebreakAlt		: 'Page Break', // MISSING
+	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',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		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?',
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Width', // MISSING
+		height			: 'Height', // MISSING
+		align			: 'Align',
+		alignLeft		: 'Left', // MISSING
+		alignRight		: 'Right', // MISSING
+		alignCenter		: 'Centre',
+		alignTop		: 'Top', // MISSING
+		alignMiddle		: 'Middle', // MISSING
+		alignBottom		: 'Bottom', // MISSING
+		invalidHeight	: 'Height must be a number.', // MISSING
+		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Insert Special Character',
+		title		: 'Select Special Character',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Link',
+		other 		: '<other>',
+		menu		: 'Edit Link',
+		title		: 'Link',
+		info		: 'Link Info',
+		target		: 'Target',
+		upload		: 'Upload',
+		advanced	: 'Advanced',
+		type		: 'Link Type',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'Link to anchor in the text',
+		toEmail		: 'E-mail',
+		targetFrame		: '<frame>',
+		targetPopup		: '<popup window>',
+		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)',
+		popupLeft		: 'Left Position',
+		popupTop		: 'Top Position',
+		id				: 'Id',
+		langDir			: 'Language Direction',
+		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',
+		rel			: 'Relationship', // MISSING
+		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',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		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',
+		widthPx		: 'pixels',
+		widthPc		: 'percent',
+		widthUnit	: 'width unit', // MISSING
+		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',
+			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'
+	},
+
+	// 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',
+		upload		: 'Upload',
+		alt			: 'Alternative Text',
+		lockRatio	: 'Lock Ratio',
+		resetSize	: 'Reset Size',
+		border		: 'Border',
+		hSpace		: 'HSpace',
+		vSpace		: 'VSpace',
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // 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',
+		alignAbsBottom	: 'Abs Bottom',
+		alignAbsMiddle	: 'Abs Middle',
+		alignBaseline	: 'Baseline',
+		alignTextTop	: 'Text 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',
+		hSpace			: 'HSpace',
+		vSpace			: 'VSpace',
+		validateSrc		: 'URL must not be empty.',
+		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',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element'
+	},
+
+	numberedlist	: 'Insert/Remove Numbered List',
+	bulletedlist	: 'Insert/Remove Bulleted List',
+	indent			: 'Increase Indent',
+	outdent			: 'Decrease Indent',
+
+	justify :
+	{
+		left	: 'Align Left',
+		center	: 'Centre',
+		right	: 'Align Right',
+		block	: 'Justify'
+	},
+
+	blockquote : 'Block Quote',
+
+	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/Cmd+X).',
+		copyError	: 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).',
+		pasteMsg	: 'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+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.',
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	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',
+		options : 'Template Options', // MISSING
+		insertOption	: 'Replace actual contents',
+		selectPromptMsg	: 'Please select the template to open in the editor',
+		emptyListMsg	: '(No templates defined)'
+	},
+
+	showBlocks : 'Show Blocks',
+
+	stylesCombo :
+	{
+		label		: 'Styles',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles',
+		panelTitle2	: 'Inline Styles',
+		panelTitle3	: 'Object Styles'
+	},
+
+	format :
+	{
+		label		: 'Format',
+		panelTitle	: 'Paragraph Format',
+
+		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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Font',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'Font Name'
+	},
+
+	fontSize :
+	{
+		label		: 'Size',
+		voiceLabel	: 'Font Size', // MISSING
+		panelTitle	: 'Font Size'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Text Colour',
+		bgColorTitle	: 'Background Colour',
+		panelTitle		: 'Colors', // MISSING
+		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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor',
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // 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
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Document Properties', // MISSING
+		title : 'Document Properties', // MISSING
+		design : 'Design', // MISSING
+		meta : 'Meta Tags', // MISSING
+		chooseColor : 'Choose', // MISSING
+		other : 'Other...', // MISSING
+		docTitle :	'Page Title', // MISSING
+		charset : 	'Character Set Encoding', // MISSING
+		charsetOther : 'Other Character Set Encoding', // MISSING
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Central European', // MISSING
+		charsetCT : 'Chinese Traditional (Big5)', // MISSING
+		charsetCR : 'Cyrillic', // MISSING
+		charsetGR : 'Greek', // MISSING
+		charsetJP : 'Japanese', // MISSING
+		charsetKR : 'Korean', // MISSING
+		charsetTR : 'Turkish', // MISSING
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Western European', // MISSING
+		docType : 'Document Type Heading', // MISSING
+		docTypeOther : 'Other Document Type Heading', // MISSING
+		xhtmlDec : 'Include XHTML Declarations', // MISSING
+		bgColor : 'Background Color', // MISSING
+		bgImage : 'Background Image URL', // MISSING
+		bgFixed : 'Non-scrolling (Fixed) Background', // MISSING
+		txtColor : 'Text Color', // MISSING
+		margin : 'Page Margins', // MISSING
+		marginTop : 'Top', // MISSING
+		marginLeft : 'Left', // MISSING
+		marginRight : 'Right', // MISSING
+		marginBottom : 'Bottom', // MISSING
+		metaKeywords : 'Document Indexing Keywords (comma separated)', // MISSING
+		metaDescription : 'Document Description', // MISSING
+		metaAuthor : 'Author', // MISSING
+		metaCopyright : 'Copyright', // MISSING
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/en-gb.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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, press ALT 0 for help.',
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor',
+
+	// 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',
+	pagebreakAlt		: 'Page Break', // MISSING
+	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',
+		close			: 'Close',
+		preview			: 'Preview',
+		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?',
+		options			: 'Options',
+		target			: 'Target',
+		targetNew		: 'New Window (_blank)',
+		targetTop		: 'Topmost Window (_top)',
+		targetSelf		: 'Same Window (_self)',
+		targetParent	: 'Parent Window (_parent)',
+		langDirLTR		: 'Left to Right (LTR)',
+		langDirRTL		: 'Right to Left (RTL)',
+		styles			: 'Style',
+		cssClasses		: 'Stylesheet Classes',
+		width			: 'Width',
+		height			: 'Height',
+		align			: 'Align',
+		alignLeft		: 'Left',
+		alignRight		: 'Right',
+		alignCenter		: 'Centre',
+		alignTop		: 'Top',
+		alignMiddle		: 'Middle',
+		alignBottom		: 'Bottom',
+		invalidHeight	: 'Height must be a number.',
+		invalidWidth	: 'Width must be a number.',
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>'
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options'
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Insert Special Character',
+		title		: 'Select Special Character',
+		options : 'Special Character Options'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Link',
+		other 		: '<other>',
+		menu		: 'Edit Link',
+		title		: 'Link',
+		info		: 'Link Info',
+		target		: 'Target',
+		upload		: 'Upload',
+		advanced	: 'Advanced',
+		type		: 'Link Type',
+		toUrl		: 'URL',
+		toAnchor	: 'Link to anchor in the text',
+		toEmail		: 'E-mail',
+		targetFrame		: '<frame>',
+		targetPopup		: '<popup window>',
+		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)',
+		popupLeft		: 'Left Position',
+		popupTop		: 'Top Position',
+		id				: 'Id',
+		langDir			: 'Language Direction',
+		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',
+		rel			: 'Relationship', // MISSING
+		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',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties',
+		bulletedTitle		: 'Bulleted List Properties',
+		type				: 'Type',
+		start				: 'Start',
+		validateStartNumber				:'List start number must be a whole number.',
+		circle				: 'Circle',
+		disc				: 'Disc',
+		square				: 'Square',
+		none				: 'None',
+		notset				: '<not set>',
+		armenian			: 'Armenian numbering',
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)',
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)',
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)',
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)',
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)',
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)',
+		decimal				: 'Decimal (1, 2, 3, etc.)',
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)'
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		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',
+		widthPx		: 'pixels',
+		widthPc		: 'percent',
+		widthUnit	: 'width unit',
+		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',
+			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'
+		},
+
+		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'
+	},
+
+	// 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',
+		upload		: 'Upload',
+		alt			: 'Alternative Text',
+		lockRatio	: 'Lock Ratio',
+		resetSize	: 'Reset Size',
+		border		: 'Border',
+		hSpace		: 'HSpace',
+		vSpace		: 'VSpace',
+		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.',
+		validateBorder	: 'Border must be a whole number.',
+		validateHSpace	: 'HSpace must be a whole number.',
+		validateVSpace	: 'VSpace must be a whole number.'
+	},
+
+	// 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',
+		alignAbsBottom	: 'Abs Bottom',
+		alignAbsMiddle	: 'Abs Middle',
+		alignBaseline	: 'Baseline',
+		alignTextTop	: 'Text Top',
+		quality			: 'Quality',
+		qualityBest		: 'Best',
+		qualityHigh		: 'High',
+		qualityAutoHigh	: 'Auto High',
+		qualityMedium	: 'Medium',
+		qualityAutoLow	: 'Auto Low',
+		qualityLow		: 'Low',
+		windowModeWindow: 'Window',
+		windowModeOpaque: 'Opaque',
+		windowModeTransparent : 'Transparent',
+		windowMode		: 'Window mode',
+		flashvars		: 'Variables for Flash',
+		bgcolor			: 'Background colour',
+		hSpace			: 'HSpace',
+		vSpace			: 'VSpace',
+		validateSrc		: 'URL must not be empty.',
+		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',
+		options : 'Smiley Options'
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path',
+		eleTitle : '%1 element'
+	},
+
+	numberedlist	: 'Insert/Remove Numbered List',
+	bulletedlist	: 'Insert/Remove Bulleted List',
+	indent			: 'Increase Indent',
+	outdent			: 'Decrease Indent',
+
+	justify :
+	{
+		left	: 'Align Left',
+		center	: 'Centre',
+		right	: 'Align Right',
+		block	: 'Justify'
+	},
+
+	blockquote : 'Block Quote',
+
+	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/Cmd+X).',
+		copyError	: 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).',
+		pasteMsg	: 'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+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.',
+		pasteArea	: 'Paste Area'
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',
+		toolbar			: 'Paste from Word',
+		title			: 'Paste from Word',
+		error			: 'It was not possible to clean up the pasted data due to an internal error'
+	},
+
+	pasteText :
+	{
+		button	: 'Paste as plain text',
+		title	: 'Paste as Plain Text'
+	},
+
+	templates :
+	{
+		button			: 'Templates',
+		title			: 'Content Templates',
+		options : 'Template Options',
+		insertOption	: 'Replace actual contents',
+		selectPromptMsg	: 'Please select the template to open in the editor',
+		emptyListMsg	: '(No templates defined)'
+	},
+
+	showBlocks : 'Show Blocks',
+
+	stylesCombo :
+	{
+		label		: 'Styles',
+		panelTitle	: 'Formatting Styles',
+		panelTitle1	: 'Block Styles',
+		panelTitle2	: 'Inline Styles',
+		panelTitle3	: 'Object Styles'
+	},
+
+	format :
+	{
+		label		: 'Format',
+		panelTitle	: 'Paragraph Format',
+
+		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',
+		toolbar				: 'Create Div Container',
+		cssClassInputLabel	: 'Stylesheet Classes',
+		styleSelectLabel	: 'Style',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Language Code',
+		inlineStyleInputLabel	: 'Inline Style',
+		advisoryTitleInputLabel	: 'Advisory Title',
+		langDirLabel		: 'Language Direction',
+		langDirLTRLabel		: 'Left to Right (LTR)',
+		langDirRTLLabel		: 'Right to Left (RTL)',
+		edit				: 'Edit Div',
+		remove				: 'Remove Div'
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties',
+		toolbar		: 'IFrame',
+		noUrl		: 'Please type the iframe URL',
+		scrolling	: 'Enable scrollbars',
+		border		: 'Show frame border'
+	},
+
+	font :
+	{
+		label		: 'Font',
+		voiceLabel	: 'Font',
+		panelTitle	: 'Font Name'
+	},
+
+	fontSize :
+	{
+		label		: 'Size',
+		voiceLabel	: 'Font Size',
+		panelTitle	: 'Font Size'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Text Colour',
+		bgColorTitle	: 'Background Colour',
+		panelTitle		: 'Colours',
+		auto			: 'Automatic',
+		more			: 'More Colours...'
+	},
+
+	colors :
+	{
+		'000' : 'Black',
+		'800000' : 'Maroon',
+		'8B4513' : 'Saddle Brown',
+		'2F4F4F' : 'Dark Slate Grey',
+		'008080' : 'Teal',
+		'000080' : 'Navy',
+		'4B0082' : 'Indigo',
+		'696969' : 'Dark Grey',
+		'B22222' : 'Fire Brick',
+		'A52A2A' : 'Brown',
+		'DAA520' : 'Golden Rod',
+		'006400' : 'Dark Green',
+		'40E0D0' : 'Turquoise',
+		'0000CD' : 'Medium Blue',
+		'800080' : 'Purple',
+		'808080' : 'Grey',
+		'F00' : 'Red',
+		'FF8C00' : 'Dark Orange',
+		'FFD700' : 'Gold',
+		'008000' : 'Green',
+		'0FF' : 'Cyan',
+		'00F' : 'Blue',
+		'EE82EE' : 'Violet',
+		'A9A9A9' : 'Dim Grey',
+		'FFA07A' : 'Light Salmon',
+		'FFA500' : 'Orange',
+		'FFFF00' : 'Yellow',
+		'00FF00' : 'Lime',
+		'AFEEEE' : 'Pale Turquoise',
+		'ADD8E6' : 'Light Blue',
+		'DDA0DD' : 'Plum',
+		'D3D3D3' : 'Light Grey',
+		'FFF0F5' : 'Lavender Blush',
+		'FAEBD7' : 'Antique White',
+		'FFFFE0' : 'Light Yellow',
+		'F0FFF0' : 'Honeydew',
+		'F0FFFF' : 'Azure',
+		'F0F8FF' : 'Alice Blue',
+		'E6E6FA' : 'Lavender',
+		'FFF' : 'White'
+	},
+
+	scayt :
+	{
+		title			: 'Spell Check As You Type',
+		opera_title		: 'Not supported by Opera',
+		enable			: 'Enable SCAYT',
+		disable			: 'Disable SCAYT',
+		about			: 'About SCAYT',
+		toggle			: 'Toggle SCAYT',
+		options			: 'Options',
+		langs			: 'Languages',
+		moreSuggestions	: 'More suggestions',
+		ignore			: 'Ignore',
+		ignoreAll		: 'Ignore All',
+		addWord			: 'Add Word',
+		emptyDic		: 'Dictionary name should not be empty.',
+
+		optionsTab		: 'Options',
+		allCaps			: 'Ignore All-Caps Words',
+		ignoreDomainNames : 'Ignore Domain Names',
+		mixedCase		: 'Ignore Words with Mixed Case',
+		mixedWithDigits	: 'Ignore Words with Numbers',
+
+		languagesTab	: 'Languages',
+
+		dictionariesTab	: 'Dictionaries',
+		dic_field_name	: 'Dictionary name',
+		dic_create		: 'Create',
+		dic_restore		: 'Restore',
+		dic_delete		: 'Delete',
+		dic_rename		: 'Rename',
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',
+
+		aboutTab		: 'About'
+	},
+
+	about :
+	{
+		title		: 'About CKEditor',
+		dlgTitle	: 'About CKEditor',
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // MISSING
+		moreInfo	: 'For licensing information please visit our web site:',
+		copy		: 'Copyright &copy; $1. All rights reserved.'
+	},
+
+	maximize : 'Maximise',
+	minimize : 'Minimise',
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor',
+		flash		: 'Flash Animation',
+		iframe		: 'IFrame',
+		hiddenfield	: 'Hidden Field',
+		unknown		: 'Unknown Object'
+	},
+
+	resize : 'Drag to resize',
+
+	colordialog :
+	{
+		title		: 'Select colour',
+		options	:	'Colour Options',
+		highlight	: 'Highlight',
+		selected	: 'Selected Colour',
+		clear		: 'Clear'
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar',
+	toolbarExpand	: 'Expand Toolbar',
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right',
+		rtl : 'Text direction from right to left'
+	},
+
+	docprops :
+	{
+		label : 'Document Properties', // MISSING
+		title : 'Document Properties', // MISSING
+		design : 'Design', // MISSING
+		meta : 'Meta Tags', // MISSING
+		chooseColor : 'Choose', // MISSING
+		other : 'Other...', // MISSING
+		docTitle :	'Page Title', // MISSING
+		charset : 	'Character Set Encoding', // MISSING
+		charsetOther : 'Other Character Set Encoding', // MISSING
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Central European', // MISSING
+		charsetCT : 'Chinese Traditional (Big5)', // MISSING
+		charsetCR : 'Cyrillic', // MISSING
+		charsetGR : 'Greek', // MISSING
+		charsetJP : 'Japanese', // MISSING
+		charsetKR : 'Korean', // MISSING
+		charsetTR : 'Turkish', // MISSING
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Western European', // MISSING
+		docType : 'Document Type Heading', // MISSING
+		docTypeOther : 'Other Document Type Heading', // MISSING
+		xhtmlDec : 'Include XHTML Declarations', // MISSING
+		bgColor : 'Background Color', // MISSING
+		bgImage : 'Background Image URL', // MISSING
+		bgFixed : 'Non-scrolling (Fixed) Background', // MISSING
+		txtColor : 'Text Color', // MISSING
+		margin : 'Page Margins', // MISSING
+		marginTop : 'Top', // MISSING
+		marginLeft : 'Left', // MISSING
+		marginRight : 'Right', // MISSING
+		marginBottom : 'Bottom', // MISSING
+		metaKeywords : 'Document Indexing Keywords (comma separated)', // MISSING
+		metaDescription : 'Document Description', // MISSING
+		metaAuthor : 'Author', // MISSING
+		metaCopyright : 'Copyright', // MISSING
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/en.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ *		language. This is the base file for all translations.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['en'] =
+{
+	/**
+	 * 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, press ALT 0 for help.',
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars',
+	editor		: 'Rich Text Editor',
+
+	// 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',
+	pagebreakAlt		: 'Page Break',
+	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',
+		close			: 'Close',
+		preview			: 'Preview',
+		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?',
+		options			: 'Options',
+		target			: 'Target',
+		targetNew		: 'New Window (_blank)',
+		targetTop		: 'Topmost Window (_top)',
+		targetSelf		: 'Same Window (_self)',
+		targetParent	: 'Parent Window (_parent)',
+		langDirLTR		: 'Left to Right (LTR)',
+		langDirRTL		: 'Right to Left (RTL)',
+		styles			: 'Style',
+		cssClasses		: 'Stylesheet Classes',
+		width			: 'Width',
+		height			: 'Height',
+		align			: 'Alignment',
+		alignLeft		: 'Left',
+		alignRight		: 'Right',
+		alignCenter		: 'Center',
+		alignTop		: 'Top',
+		alignMiddle		: 'Middle',
+		alignBottom		: 'Bottom',
+		invalidHeight	: 'Height must be a number.',
+		invalidWidth	: 'Width must be a number.',
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).',
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).',
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>'
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options'
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Insert Special Character',
+		title		: 'Select Special Character',
+		options : 'Special Character Options'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Link',
+		other 		: '<other>',
+		menu		: 'Edit Link',
+		title		: 'Link',
+		info		: 'Link Info',
+		target		: 'Target',
+		upload		: 'Upload',
+		advanced	: 'Advanced',
+		type		: 'Link Type',
+		toUrl		: 'URL',
+		toAnchor	: 'Link to anchor in the text',
+		toEmail		: 'E-mail',
+		targetFrame		: '<frame>',
+		targetPopup		: '<popup window>',
+		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)',
+		popupLeft		: 'Left Position',
+		popupTop		: 'Top Position',
+		id				: 'Id',
+		langDir			: 'Language Direction',
+		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',
+		rel			: 'Relationship',
+		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',
+		remove		: 'Remove Anchor'
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties',
+		bulletedTitle		: 'Bulleted List Properties',
+		type				: 'Type',
+		start				: 'Start',
+		validateStartNumber				:'List start number must be a whole number.',
+		circle				: 'Circle',
+		disc				: 'Disc',
+		square				: 'Square',
+		none				: 'None',
+		notset				: '<not set>',
+		armenian			: 'Armenian numbering',
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)',
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)',
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)',
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)',
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)',
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)',
+		decimal				: 'Decimal (1, 2, 3, etc.)',
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)'
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		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',
+		widthPx		: 'pixels',
+		widthPc		: 'percent',
+		widthUnit	: 'width unit',
+		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 positive number.',
+		invalidCellPadding	: 'Cell padding must be a positive 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',
+			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'
+		},
+
+		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'
+	},
+
+	// 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',
+		upload		: 'Upload',
+		alt			: 'Alternative Text',
+		lockRatio	: 'Lock Ratio',
+		resetSize	: 'Reset Size',
+		border		: 'Border',
+		hSpace		: 'HSpace',
+		vSpace		: 'VSpace',
+		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.',
+		validateBorder	: 'Border must be a whole number.',
+		validateHSpace	: 'HSpace must be a whole number.',
+		validateVSpace	: 'VSpace must be a whole number.'
+	},
+
+	// 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',
+		alignAbsBottom	: 'Abs Bottom',
+		alignAbsMiddle	: 'Abs Middle',
+		alignBaseline	: 'Baseline',
+		alignTextTop	: 'Text Top',
+		quality			: 'Quality',
+		qualityBest		: 'Best',
+		qualityHigh		: 'High',
+		qualityAutoHigh	: 'Auto High',
+		qualityMedium	: 'Medium',
+		qualityAutoLow	: 'Auto Low',
+		qualityLow		: 'Low',
+		windowModeWindow: 'Window',
+		windowModeOpaque: 'Opaque',
+		windowModeTransparent : 'Transparent',
+		windowMode		: 'Window mode',
+		flashvars		: 'Variables for Flash',
+		bgcolor			: 'Background color',
+		hSpace			: 'HSpace',
+		vSpace			: 'VSpace',
+		validateSrc		: 'URL must not be empty.',
+		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',
+		options : 'Smiley Options'
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path',
+		eleTitle : '%1 element'
+	},
+
+	numberedlist	: 'Insert/Remove Numbered List',
+	bulletedlist	: 'Insert/Remove Bulleted List',
+	indent			: 'Increase Indent',
+	outdent			: 'Decrease Indent',
+
+	justify :
+	{
+		left	: 'Align Left',
+		center	: 'Center',
+		right	: 'Align Right',
+		block	: 'Justify'
+	},
+
+	blockquote : 'Block Quote',
+
+	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/Cmd+X).',
+		copyError	: 'Your browser security settings don\'t permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).',
+		pasteMsg	: 'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+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.',
+		pasteArea	: 'Paste Area'
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?',
+		toolbar			: 'Paste from Word',
+		title			: 'Paste from Word',
+		error			: 'It was not possible to clean up the pasted data due to an internal error'
+	},
+
+	pasteText :
+	{
+		button	: 'Paste as plain text',
+		title	: 'Paste as Plain Text'
+	},
+
+	templates :
+	{
+		button			: 'Templates',
+		title			: 'Content Templates',
+		options : 'Template Options',
+		insertOption	: 'Replace actual contents',
+		selectPromptMsg	: 'Please select the template to open in the editor',
+		emptyListMsg	: '(No templates defined)'
+	},
+
+	showBlocks : 'Show Blocks',
+
+	stylesCombo :
+	{
+		label		: 'Styles',
+		panelTitle	: 'Formatting Styles',
+		panelTitle1	: 'Block Styles',
+		panelTitle2	: 'Inline Styles',
+		panelTitle3	: 'Object Styles'
+	},
+
+	format :
+	{
+		label		: 'Format',
+		panelTitle	: 'Paragraph Format',
+
+		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',
+		toolbar				: 'Create Div Container',
+		cssClassInputLabel	: 'Stylesheet Classes',
+		styleSelectLabel	: 'Style',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Language Code',
+		inlineStyleInputLabel	: 'Inline Style',
+		advisoryTitleInputLabel	: 'Advisory Title',
+		langDirLabel		: 'Language Direction',
+		langDirLTRLabel		: 'Left to Right (LTR)',
+		langDirRTLLabel		: 'Right to Left (RTL)',
+		edit				: 'Edit Div',
+		remove				: 'Remove Div'
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties',
+		toolbar		: 'IFrame',
+		noUrl		: 'Please type the iframe URL',
+		scrolling	: 'Enable scrollbars',
+		border		: 'Show frame border'
+	},
+
+	font :
+	{
+		label		: 'Font',
+		voiceLabel	: 'Font',
+		panelTitle	: 'Font Name'
+	},
+
+	fontSize :
+	{
+		label		: 'Size',
+		voiceLabel	: 'Font Size',
+		panelTitle	: 'Font Size'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Text Color',
+		bgColorTitle	: 'Background Color',
+		panelTitle		: 'Colors',
+		auto			: 'Automatic',
+		more			: 'More Colors...'
+	},
+
+	colors :
+	{
+		'000' : 'Black',
+		'800000' : 'Maroon',
+		'8B4513' : 'Saddle Brown',
+		'2F4F4F' : 'Dark Slate Gray',
+		'008080' : 'Teal',
+		'000080' : 'Navy',
+		'4B0082' : 'Indigo',
+		'696969' : 'Dark Gray',
+		'B22222' : 'Fire Brick',
+		'A52A2A' : 'Brown',
+		'DAA520' : 'Golden Rod',
+		'006400' : 'Dark Green',
+		'40E0D0' : 'Turquoise',
+		'0000CD' : 'Medium Blue',
+		'800080' : 'Purple',
+		'808080' : 'Gray',
+		'F00' : 'Red',
+		'FF8C00' : 'Dark Orange',
+		'FFD700' : 'Gold',
+		'008000' : 'Green',
+		'0FF' : 'Cyan',
+		'00F' : 'Blue',
+		'EE82EE' : 'Violet',
+		'A9A9A9' : 'Dim Gray',
+		'FFA07A' : 'Light Salmon',
+		'FFA500' : 'Orange',
+		'FFFF00' : 'Yellow',
+		'00FF00' : 'Lime',
+		'AFEEEE' : 'Pale Turquoise',
+		'ADD8E6' : 'Light Blue',
+		'DDA0DD' : 'Plum',
+		'D3D3D3' : 'Light Grey',
+		'FFF0F5' : 'Lavender Blush',
+		'FAEBD7' : 'Antique White',
+		'FFFFE0' : 'Light Yellow',
+		'F0FFF0' : 'Honeydew',
+		'F0FFFF' : 'Azure',
+		'F0F8FF' : 'Alice Blue',
+		'E6E6FA' : 'Lavender',
+		'FFF' : 'White'
+	},
+
+	scayt :
+	{
+		title			: 'Spell Check As You Type',
+		opera_title		: 'Not supported by Opera',
+		enable			: 'Enable SCAYT',
+		disable			: 'Disable SCAYT',
+		about			: 'About SCAYT',
+		toggle			: 'Toggle SCAYT',
+		options			: 'Options',
+		langs			: 'Languages',
+		moreSuggestions	: 'More suggestions',
+		ignore			: 'Ignore',
+		ignoreAll		: 'Ignore All',
+		addWord			: 'Add Word',
+		emptyDic		: 'Dictionary name should not be empty.',
+
+		optionsTab		: 'Options',
+		allCaps			: 'Ignore All-Caps Words',
+		ignoreDomainNames : 'Ignore Domain Names',
+		mixedCase		: 'Ignore Words with Mixed Case',
+		mixedWithDigits	: 'Ignore Words with Numbers',
+
+		languagesTab	: 'Languages',
+
+		dictionariesTab	: 'Dictionaries',
+		dic_field_name	: 'Dictionary name',
+		dic_create		: 'Create',
+		dic_restore		: 'Restore',
+		dic_delete		: 'Delete',
+		dic_rename		: 'Rename',
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.',
+
+		aboutTab		: 'About'
+	},
+
+	about :
+	{
+		title		: 'About CKEditor',
+		dlgTitle	: 'About CKEditor',
+		help	: 'Check $1 for help.',
+		userGuide : 'CKEditor User\'s Guide',
+		moreInfo	: 'For licensing information please visit our web site:',
+		copy		: 'Copyright &copy; $1. All rights reserved.'
+	},
+
+	maximize : 'Maximize',
+	minimize : 'Minimize',
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor',
+		flash		: 'Flash Animation',
+		iframe		: 'IFrame',
+		hiddenfield	: 'Hidden Field',
+		unknown		: 'Unknown Object'
+	},
+
+	resize : 'Drag to resize',
+
+	colordialog :
+	{
+		title		: 'Select color',
+		options	:	'Color Options',
+		highlight	: 'Highlight',
+		selected	: 'Selected Color',
+		clear		: 'Clear'
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar',
+	toolbarExpand	: 'Expand Toolbar',
+
+	toolbarGroups :
+	{
+		document : 'Document',
+		clipboard : 'Clipboard/Undo',
+		editing : 'Editing',
+		forms : 'Forms',
+		basicstyles : 'Basic Styles',
+		paragraph : 'Paragraph',
+		links : 'Links',
+		insert : 'Insert',
+		styles : 'Styles',
+		colors : 'Colors',
+		tools : 'Tools'
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right',
+		rtl : 'Text direction from right to left'
+	},
+
+	docprops :
+	{
+		label : 'Document Properties',
+		title : 'Document Properties',
+		design : 'Design',
+		meta : 'Meta Tags',
+		chooseColor : 'Choose',
+		other : 'Other...',
+		docTitle :	'Page Title',
+		charset : 	'Character Set Encoding',
+		charsetOther : 'Other Character Set Encoding',
+		charsetASCII : 'ASCII',
+		charsetCE : 'Central European',
+		charsetCT : 'Chinese Traditional (Big5)',
+		charsetCR : 'Cyrillic',
+		charsetGR : 'Greek',
+		charsetJP : 'Japanese',
+		charsetKR : 'Korean',
+		charsetTR : 'Turkish',
+		charsetUN : 'Unicode (UTF-8)',
+		charsetWE : 'Western European',
+		docType : 'Document Type Heading',
+		docTypeOther : 'Other Document Type Heading',
+		xhtmlDec : 'Include XHTML Declarations',
+		bgColor : 'Background Color',
+		bgImage : 'Background Image URL',
+		bgFixed : 'Non-scrolling (Fixed) Background',
+		txtColor : 'Text Color',
+		margin : 'Page Margins',
+		marginTop : 'Top',
+		marginLeft : 'Left',
+		marginRight : 'Right',
+		marginBottom : 'Bottom',
+		metaKeywords : 'Document Indexing Keywords (comma separated)',
+		metaDescription : 'Document Description',
+		metaAuthor : 'Author',
+		metaCopyright : 'Copyright',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>'
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/eo.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Esperanto language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['eo'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'Fonto',
+	newPage			: 'Nova Paĝo',
+	save			: 'Sekurigi',
+	preview			: 'Vidigi Aspekton',
+	cut				: 'Eltondi',
+	copy			: 'Kopii',
+	paste			: 'Interglui',
+	print			: 'Presi',
+	underline		: 'Substreko',
+	bold			: 'Grasa',
+	italic			: 'Kursiva',
+	selectAll		: 'Elekti ĉion',
+	removeFormat	: 'Forigi Formaton',
+	strike			: 'Trastreko',
+	subscript		: 'Subskribo',
+	superscript		: 'Superskribo',
+	horizontalrule	: 'Enmeti Horizonta Linio',
+	pagebreak		: 'Insert Page Break for Printing', // MISSING
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'Forigi Ligilon',
+	undo			: 'Malfari',
+	redo			: 'Refari',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Foliumi en la Servilo',
+		url				: 'URL',
+		protocol		: 'Protokolo',
+		upload			: 'Alŝuti',
+		uploadSubmit	: 'Sendu al Servilo',
+		image			: 'Bildo',
+		flash			: 'Flash', // MISSING
+		form			: 'Formularo',
+		checkbox		: 'Markobutono',
+		radio			: 'Radiobutono',
+		textField		: 'Teksta kampo',
+		textarea		: 'Teksta Areo',
+		hiddenField		: 'Kaŝita Kampo',
+		button			: 'Butono',
+		select			: 'Elekta Kampo',
+		imageButton		: 'Bildbutono',
+		notSet			: '<Defaŭlta>',
+		id				: 'Id',
+		name			: 'Nomo',
+		langDir			: 'Skribdirekto',
+		langDirLtr		: 'De maldekstro dekstren (LTR)',
+		langDirRtl		: 'De dekstro maldekstren (RTL)',
+		langCode		: 'Lingva Kodo',
+		longDescr		: 'URL de Longa Priskribo',
+		cssClass		: 'Klasoj de Stilfolioj',
+		advisoryTitle	: 'Indika Titolo',
+		cssStyle		: 'Stilo',
+		ok				: 'Akcepti',
+		cancel			: 'Rezigni',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'General', // MISSING
+		advancedTab		: 'Speciala',
+		validateNumberFailed : 'This value is not a number.', // MISSING
+		confirmNewPage	: 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING
+		confirmCancel	: 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Larĝo',
+		height			: 'Alto',
+		align			: 'Ĝisrandigo',
+		alignLeft		: 'Maldekstre',
+		alignRight		: 'Dekstre',
+		alignCenter		: 'Centre',
+		alignTop		: 'Supre',
+		alignMiddle		: 'Centre',
+		alignBottom		: 'Malsupre',
+		invalidHeight	: 'Height must be a number.', // MISSING
+		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Enmeti Specialan Signon',
+		title		: 'Enmeti Specialan Signon',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Enmeti/Ŝanĝi Ligilon',
+		other 		: '<other>', // MISSING
+		menu		: 'Modifier Ligilon',
+		title		: 'Ligilo',
+		info		: 'Informoj pri la Ligilo',
+		target		: 'Celo',
+		upload		: 'Alŝuti',
+		advanced	: 'Speciala',
+		type		: 'Tipo de Ligilo',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'Ankri en tiu ĉi paĝo',
+		toEmail		: 'Retpoŝto',
+		targetFrame		: '<kadro>',
+		targetPopup		: '<ŝprucfenestro>',
+		targetFrameName	: 'Nomo de Kadro',
+		targetPopupName	: 'Nomo de Ŝprucfenestro',
+		popupFeatures	: 'Atributoj de la Ŝprucfenestro',
+		popupResizable	: 'Resizable', // MISSING
+		popupStatusBar	: 'Statobreto',
+		popupLocationBar: 'Adresobreto',
+		popupToolbar	: 'Ilobreto',
+		popupMenuBar	: 'Menubreto',
+		popupFullScreen	: 'Tutekrane (IE)',
+		popupScrollBars	: 'Rulumlisteloj',
+		popupDependent	: 'Dependa (Netscape)',
+		popupLeft		: 'Pozicio de Maldekstro',
+		popupTop		: 'Pozicio de Supro',
+		id				: 'Id', // MISSING
+		langDir			: 'Skribdirekto',
+		langDirLTR		: 'De maldekstro dekstren (LTR)',
+		langDirRTL		: 'De dekstro maldekstren (RTL)',
+		acccessKey		: 'Fulmoklavo',
+		name			: 'Nomo',
+		langCode			: 'Skribdirekto',
+		tabIndex			: 'Taba Ordo',
+		advisoryTitle		: 'Indika Titolo',
+		advisoryContentType	: 'Indika Enhavotipo',
+		cssClasses		: 'Klasoj de Stilfolioj',
+		charset			: 'Signaro de la Ligita Rimedo',
+		styles			: 'Stilo',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Elekti Ankron',
+		anchorName		: 'Per Ankronomo',
+		anchorId			: 'Per Elementidentigilo',
+		emailAddress		: 'Retadreso',
+		emailSubject		: 'Temlinio',
+		emailBody		: 'Mesaĝa korpo',
+		noAnchors		: '<Ne disponeblas ankroj en la dokumento>',
+		noUrl			: 'Bonvolu entajpi la URL-on',
+		noEmail			: 'Bonvolu entajpi la retadreson'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Enmeti/Ŝanĝi Ankron',
+		menu		: 'Ankraj Atributoj',
+		title		: 'Ankraj Atributoj',
+		name		: 'Ankra Nomo',
+		errorName	: 'Bv tajpi la ankran nomon',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Find and Replace', // MISSING
+		find				: 'Serĉi',
+		replace				: 'Anstataŭigi',
+		findWhat			: 'Serĉi:',
+		replaceWith			: 'Anstataŭigi per:',
+		notFoundMsg			: 'La celteksto ne estas trovita.',
+		matchCase			: 'Kongruigi Usklecon',
+		matchWord			: 'Tuta Vorto',
+		matchCyclic			: 'Match cyclic', // MISSING
+		replaceAll			: 'Anstataŭigi Ĉiun',
+		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tabelo',
+		title		: 'Atributoj de Tabelo',
+		menu		: 'Atributoj de Tabelo',
+		deleteTable	: 'Delete Table', // MISSING
+		rows		: 'Linioj',
+		columns		: 'Kolumnoj',
+		border		: 'Bordero',
+		widthPx		: 'Bitbilderoj',
+		widthPc		: 'elcentoj',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'Interspacigo de Ĉeloj',
+		cellPad		: 'Ĉirkaŭenhava Plenigado',
+		caption		: 'Titolo',
+		summary		: 'Summary', // MISSING
+		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 positive number.', // MISSING
+		invalidCellPadding	: 'Cell padding must be a positive number.', // MISSING
+
+		cell :
+		{
+			menu			: 'Cell', // MISSING
+			insertBefore	: 'Insert Cell Before', // MISSING
+			insertAfter		: 'Insert Cell After', // MISSING
+			deleteCell		: 'Forigi Ĉelojn',
+			merge			: 'Kunfandi Ĉelojn',
+			mergeRight		: 'Merge Right', // MISSING
+			mergeDown		: 'Merge Down', // MISSING
+			splitHorizontal	: 'Split Cell Horizontally', // MISSING
+			splitVertical	: 'Split Cell Vertically', // MISSING
+			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
+			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
+		},
+
+		row :
+		{
+			menu			: 'Row', // MISSING
+			insertBefore	: 'Insert Row Before', // MISSING
+			insertAfter		: 'Insert Row After', // MISSING
+			deleteRow		: 'Forigi Liniojn'
+		},
+
+		column :
+		{
+			menu			: 'Column', // MISSING
+			insertBefore	: 'Insert Column Before', // MISSING
+			insertAfter		: 'Insert Column After', // MISSING
+			deleteColumn	: 'Forigi Kolumnojn'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Butonaj Atributoj',
+		text		: 'Teksto (Valoro)',
+		type		: 'Tipo',
+		typeBtn		: 'Button', // MISSING
+		typeSbm		: 'Submit', // MISSING
+		typeRst		: 'Reset' // MISSING
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Markobutonaj Atributoj',
+		radioTitle	: 'Radiobutonaj Atributoj',
+		value		: 'Valoro',
+		selected	: 'Elektita'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Formularaj Atributoj',
+		menu		: 'Formularaj Atributoj',
+		action		: 'Ago',
+		method		: 'Metodo',
+		encoding	: 'Encoding' // MISSING
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Atributoj de Elekta Kampo',
+		selectInfo	: 'Select Info', // MISSING
+		opAvail		: 'Elektoj Disponeblaj',
+		value		: 'Valoro',
+		size		: 'Grando',
+		lines		: 'Linioj',
+		chkMulti	: 'Permesi Plurajn Elektojn',
+		opText		: 'Teksto',
+		opValue		: 'Valoro',
+		btnAdd		: 'Aldoni',
+		btnModify	: 'Modifi',
+		btnUp		: 'Supren',
+		btnDown		: 'Malsupren',
+		btnSetValue : 'Agordi kiel Elektitan Valoron',
+		btnDelete	: 'Forigi'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Atributoj de Teksta Areo',
+		cols		: 'Kolumnoj',
+		rows		: 'Vicoj'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Atributoj de Teksta Kampo',
+		name		: 'Nomo',
+		value		: 'Valoro',
+		charWidth	: 'Signolarĝo',
+		maxChars	: 'Maksimuma Nombro da Signoj',
+		type		: 'Tipo',
+		typeText	: 'Teksto',
+		typePass	: 'Pasvorto'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Atributoj de Kaŝita Kampo',
+		name	: 'Nomo',
+		value	: 'Valoro'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Atributoj de Bildo',
+		titleButton	: 'Bildbutonaj Atributoj',
+		menu		: 'Atributoj de Bildo',
+		infoTab		: 'Informoj pri Bildo',
+		btnUpload	: 'Sendu al Servilo',
+		upload		: 'Alŝuti',
+		alt			: 'Anstataŭiga Teksto',
+		lockRatio	: 'Konservi Proporcion',
+		resetSize	: 'Origina Grando',
+		border		: 'Bordero',
+		hSpace		: 'HSpaco',
+		vSpace		: 'VSpaco',
+		alertUrl	: 'Bonvolu tajpi la URL de la bildo',
+		linkTab		: 'Link', // MISSING
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Flash Properties', // MISSING
+		propertiesTab	: 'Properties', // MISSING
+		title			: 'Flash Properties', // MISSING
+		chkPlay			: 'Auto Play', // MISSING
+		chkLoop			: 'Loop', // MISSING
+		chkMenu			: 'Enable Flash Menu', // MISSING
+		chkFull			: 'Allow Fullscreen', // MISSING
+ 		scale			: 'Scale', // MISSING
+		scaleAll		: 'Show all', // MISSING
+		scaleNoBorder	: 'No Border', // MISSING
+		scaleFit		: 'Exact Fit', // MISSING
+		access			: 'Script Access', // MISSING
+		accessAlways	: 'Always', // MISSING
+		accessSameDomain: 'Same domain', // MISSING
+		accessNever		: 'Never', // MISSING
+		alignAbsBottom	: 'Abs Malsupre',
+		alignAbsMiddle	: 'Abs Centre',
+		alignBaseline	: 'Je Malsupro de Teksto',
+		alignTextTop	: 'Je Supro de Teksto',
+		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
+		bgcolor			: 'Fona Koloro',
+		hSpace			: 'HSpaco',
+		vSpace			: 'VSpaco',
+		validateSrc		: 'Bonvolu entajpi la URL-on',
+		validateHSpace	: 'HSpace must be a number.', // MISSING
+		validateVSpace	: 'VSpace must be a number.' // MISSING
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Literumada Kontrolilo',
+		title			: 'Spell Check', // MISSING
+		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
+		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		notInDic		: 'Ne trovita en la vortaro',
+		changeTo		: 'Ŝanĝi al',
+		btnIgnore		: 'Malatenti',
+		btnIgnoreAll	: 'Malatenti Ĉiun',
+		btnReplace		: 'Anstataŭigi',
+		btnReplaceAll	: 'Anstataŭigi Ĉiun',
+		btnUndo			: 'Malfari',
+		noSuggestions	: '- Neniu propono -',
+		progress		: 'Literumkontrolado daŭras...',
+		noMispell		: 'Literumkontrolado finita: neniu fuŝo trovita',
+		noChanges		: 'Literumkontrolado finita: neniu vorto ŝanĝita',
+		oneChange		: 'Literumkontrolado finita: unu vorto ŝanĝita',
+		manyChanges		: 'Literumkontrolado finita: %1 vortoj ŝanĝitaj',
+		ieSpellDownload	: 'Literumada Kontrolilo ne instalita. Ĉu vi volas elŝuti ĝin nun?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Mienvinjeto',
+		title	: 'Enmeti Mienvinjeton',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element' // MISSING
+	},
+
+	numberedlist	: 'Numera Listo',
+	bulletedlist	: 'Bula Listo',
+	indent			: 'Pligrandigi Krommarĝenon',
+	outdent			: 'Malpligrandigi Krommarĝenon',
+
+	justify :
+	{
+		left	: 'Maldekstrigi',
+		center	: 'Centrigi',
+		right	: 'Dekstrigi',
+		block	: 'Ĝisrandigi Ambaŭflanke'
+	},
+
+	blockquote : 'Block Quote', // MISSING
+
+	clipboard :
+	{
+		title		: 'Interglui',
+		cutError	: 'La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-X).',
+		copyError	: 'La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-C).',
+		pasteMsg	: 'Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK', // MISSING
+		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.', // MISSING
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar			: 'Interglui el Word',
+		title			: 'Interglui el Word',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'Interglui kiel Tekston',
+		title	: 'Interglui kiel Tekston'
+	},
+
+	templates :
+	{
+		button			: 'Templates', // MISSING
+		title			: 'Content Templates', // MISSING
+		options : 'Template Options', // MISSING
+		insertOption	: 'Replace actual contents', // MISSING
+		selectPromptMsg	: 'Please select the template to open in the editor', // MISSING
+		emptyListMsg	: '(No templates defined)' // MISSING
+	},
+
+	showBlocks : 'Show Blocks', // MISSING
+
+	stylesCombo :
+	{
+		label		: 'Stilo',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles', // MISSING
+		panelTitle2	: 'Inline Styles', // MISSING
+		panelTitle3	: 'Object Styles' // MISSING
+	},
+
+	format :
+	{
+		label		: 'Formato',
+		panelTitle	: 'Formato',
+
+		tag_p		: 'Normala',
+		tag_pre		: 'Formatita',
+		tag_address	: 'Adreso',
+		tag_h1		: 'Titolo 1',
+		tag_h2		: 'Titolo 2',
+		tag_h3		: 'Titolo 3',
+		tag_h4		: 'Titolo 4',
+		tag_h5		: 'Titolo 5',
+		tag_h6		: 'Titolo 6',
+		tag_div		: 'Paragrafo (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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Tiparo',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'Tiparo'
+	},
+
+	fontSize :
+	{
+		label		: 'Grando',
+		voiceLabel	: 'Font Size', // MISSING
+		panelTitle	: 'Grando'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Teksta Koloro',
+		bgColorTitle	: 'Fona Koloro',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'Aŭtomata',
+		more			: 'Pli da Koloroj...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor', // MISSING
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // 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
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor', // MISSING
+		flash		: 'Flash Animation', // MISSING
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Dokumentaj Atributoj',
+		title : 'Dokumentaj Atributoj',
+		design : 'Design', // MISSING
+		meta : 'Metadatumoj',
+		chooseColor : 'Choose', // MISSING
+		other : '<other>',
+		docTitle :	'Paĝotitolo',
+		charset : 	'Signara Kodo',
+		charsetOther : 'Alia Signara Kodo',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Central European', // MISSING
+		charsetCT : 'Chinese Traditional (Big5)', // MISSING
+		charsetCR : 'Cyrillic', // MISSING
+		charsetGR : 'Greek', // MISSING
+		charsetJP : 'Japanese', // MISSING
+		charsetKR : 'Korean', // MISSING
+		charsetTR : 'Turkish', // MISSING
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Western European', // MISSING
+		docType : 'Dokumenta Tipo',
+		docTypeOther : 'Alia Dokumenta Tipo',
+		xhtmlDec : 'Inkluzivi XHTML Deklaroj',
+		bgColor : 'Fona Koloro',
+		bgImage : 'URL de Fona Bildo',
+		bgFixed : 'Neruluma Fono',
+		txtColor : 'Teksta Koloro',
+		margin : 'Paĝaj Marĝenoj',
+		marginTop : 'Supra',
+		marginLeft : 'Maldekstra',
+		marginRight : 'Dekstra',
+		marginBottom : 'Malsupra',
+		metaKeywords : 'Ŝlosilvortoj de la Dokumento (apartigita de komoj)',
+		metaDescription : 'Dokumenta Priskribo',
+		metaAuthor : 'Verkinto',
+		metaCopyright : 'Kopirajto',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/et.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Estonian language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['et'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'Lähtekood',
+	newPage			: 'Uus leht',
+	save			: 'Salvesta',
+	preview			: 'Eelvaade',
+	cut				: 'Lõika',
+	copy			: 'Kopeeri',
+	paste			: 'Kleebi',
+	print			: 'Prindi',
+	underline		: 'Allajoonitud',
+	bold			: 'Paks',
+	italic			: 'Kursiiv',
+	selectAll		: 'Vali kõik',
+	removeFormat	: 'Eemalda vorming',
+	strike			: 'Läbijoonitud',
+	subscript		: 'Allindeks',
+	superscript		: 'Ülaindeks',
+	horizontalrule	: 'Sisesta horisontaaljoon',
+	pagebreak		: 'Sisesta lehevahetuskoht',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'Eemalda link',
+	undo			: 'Võta tagasi',
+	redo			: 'Korda toimingut',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Sirvi serverit',
+		url				: 'URL',
+		protocol		: 'Protokoll',
+		upload			: 'Lae üles',
+		uploadSubmit	: 'Saada serverissee',
+		image			: 'Pilt',
+		flash			: 'Flash',
+		form			: 'Vorm',
+		checkbox		: 'Märkeruut',
+		radio			: 'Raadionupp',
+		textField		: 'Tekstilahter',
+		textarea		: 'Tekstiala',
+		hiddenField		: 'Varjatud lahter',
+		button			: 'Nupp',
+		select			: 'Valiklahter',
+		imageButton		: 'Piltnupp',
+		notSet			: '<määramata>',
+		id				: 'Id',
+		name			: 'Nimi',
+		langDir			: 'Keele suund',
+		langDirLtr		: 'Vasakult paremale (LTR)',
+		langDirRtl		: 'Paremalt vasakule (RTL)',
+		langCode		: 'Keele kood',
+		longDescr		: 'Pikk kirjeldus URL',
+		cssClass		: 'Stiilistiku klassid',
+		advisoryTitle	: 'Juhendav tiitel',
+		cssStyle		: 'Laad',
+		ok				: 'OK',
+		cancel			: 'Loobu',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'General', // MISSING
+		advancedTab		: 'Täpsemalt',
+		validateNumberFailed : 'This value is not a number.', // MISSING
+		confirmNewPage	: 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING
+		confirmCancel	: 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Laius',
+		height			: 'Kõrgus',
+		align			: 'Joondus',
+		alignLeft		: 'Vasak',
+		alignRight		: 'Paremale',
+		alignCenter		: 'Kesk',
+		alignTop		: 'Üles',
+		alignMiddle		: 'Keskele',
+		alignBottom		: 'Alla',
+		invalidHeight	: 'Height must be a number.', // MISSING
+		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Sisesta erimärk',
+		title		: 'Vali erimärk',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Sisesta link / Muuda linki',
+		other 		: '<muu>',
+		menu		: 'Muuda linki',
+		title		: 'Link',
+		info		: 'Lingi info',
+		target		: 'Sihtkoht',
+		upload		: 'Lae üles',
+		advanced	: 'Täpsemalt',
+		type		: 'Lingi tüüp',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'Ankur sellel lehel',
+		toEmail		: 'E-post',
+		targetFrame		: '<raam>',
+		targetPopup		: '<hüpikaken>',
+		targetFrameName	: 'Sihtmärk raami nimi',
+		targetPopupName	: 'Hüpikakna nimi',
+		popupFeatures	: 'Hüpikakna omadused',
+		popupResizable	: 'Resizable', // MISSING
+		popupStatusBar	: 'Olekuriba',
+		popupLocationBar: 'Aadressiriba',
+		popupToolbar	: 'Tööriistariba',
+		popupMenuBar	: 'Menüüriba',
+		popupFullScreen	: 'Täisekraan (IE)',
+		popupScrollBars	: 'Kerimisribad',
+		popupDependent	: 'Sõltuv (Netscape)',
+		popupLeft		: 'Vasak asukoht',
+		popupTop		: 'Ülemine asukoht',
+		id				: 'Id', // MISSING
+		langDir			: 'Keele suund',
+		langDirLTR		: 'Vasakult paremale (LTR)',
+		langDirRTL		: 'Paremalt vasakule (RTL)',
+		acccessKey		: 'Juurdepääsu võti',
+		name			: 'Nimi',
+		langCode			: 'Keele suund',
+		tabIndex			: 'Tab indeks',
+		advisoryTitle		: 'Juhendav tiitel',
+		advisoryContentType	: 'Juhendava sisu tüüp',
+		cssClasses		: 'Stiilistiku klassid',
+		charset			: 'Lingitud ressurssi märgistik',
+		styles			: 'Laad',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Vali ankur',
+		anchorName		: 'Ankru nime järgi',
+		anchorId			: 'Elemendi id järgi',
+		emailAddress		: 'E-posti aadress',
+		emailSubject		: 'Sõnumi teema',
+		emailBody		: 'Sõnumi tekst',
+		noAnchors		: '(Selles dokumendis ei ole ankruid)',
+		noUrl			: 'Palun kirjuta lingi URL',
+		noEmail			: 'Palun kirjuta E-Posti aadress'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Sisesta ankur / Muuda ankrut',
+		menu		: 'Ankru omadused',
+		title		: 'Ankru omadused',
+		name		: 'Ankru nimi',
+		errorName	: 'Palun sisest ankru nimi',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Otsi ja asenda',
+		find				: 'Otsi',
+		replace				: 'Asenda',
+		findWhat			: 'Leia mida:',
+		replaceWith			: 'Asenda millega:',
+		notFoundMsg			: 'Valitud teksti ei leitud.',
+		matchCase			: 'Erista suur- ja väiketähti',
+		matchWord			: 'Otsi terviklike sõnu',
+		matchCyclic			: 'Match cyclic', // MISSING
+		replaceAll			: 'Asenda kõik',
+		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tabel',
+		title		: 'Tabeli atribuudid',
+		menu		: 'Tabeli atribuudid',
+		deleteTable	: 'Kustuta tabel',
+		rows		: 'Read',
+		columns		: 'Veerud',
+		border		: 'Joone suurus',
+		widthPx		: 'pikslit',
+		widthPc		: 'protsenti',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'Lahtri vahe',
+		cellPad		: 'Lahtri täidis',
+		caption		: 'Tabeli tiitel',
+		summary		: 'Kokkuvõte',
+		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 positive number.', // MISSING
+		invalidCellPadding	: 'Cell padding must be a positive number.', // MISSING
+
+		cell :
+		{
+			menu			: 'Lahter',
+			insertBefore	: 'Sisesta lahter enne',
+			insertAfter		: 'Sisesta lahter peale',
+			deleteCell		: 'Eemalda lahtrid',
+			merge			: 'Ühenda lahtrid',
+			mergeRight		: 'Ühenda paremale',
+			mergeDown		: 'Ühenda alla',
+			splitHorizontal	: 'Poolita lahter horisontaalselt',
+			splitVertical	: 'Poolita lahter vertikaalselt',
+			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
+			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
+		},
+
+		row :
+		{
+			menu			: 'Rida',
+			insertBefore	: 'Sisesta rida enne',
+			insertAfter		: 'Sisesta rida peale',
+			deleteRow		: 'Eemalda read'
+		},
+
+		column :
+		{
+			menu			: 'Veerg',
+			insertBefore	: 'Sisesta veerg enne',
+			insertAfter		: 'Sisesta veerg peale',
+			deleteColumn	: 'Eemalda veerud'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Nupu omadused',
+		text		: 'Tekst (väärtus)',
+		type		: 'Tüüp',
+		typeBtn		: 'Nupp',
+		typeSbm		: 'Saada',
+		typeRst		: 'Lähtesta'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Märkeruudu omadused',
+		radioTitle	: 'Raadionupu omadused',
+		value		: 'Väärtus',
+		selected	: 'Valitud'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Vormi omadused',
+		menu		: 'Vormi omadused',
+		action		: 'Toiming',
+		method		: 'Meetod',
+		encoding	: 'Encoding' // MISSING
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Valiklahtri omadused',
+		selectInfo	: 'Info',
+		opAvail		: 'Võimalikud valikud',
+		value		: 'Väärtus',
+		size		: 'Suurus',
+		lines		: 'ridu',
+		chkMulti	: 'Võimalda mitu valikut',
+		opText		: 'Tekst',
+		opValue		: 'Väärtus',
+		btnAdd		: 'Lisa',
+		btnModify	: 'Muuda',
+		btnUp		: 'Üles',
+		btnDown		: 'Alla',
+		btnSetValue : 'Sea valitud olekuna',
+		btnDelete	: 'Kustuta'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Tekstiala omadused',
+		cols		: 'Veerge',
+		rows		: 'Ridu'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Tekstilahtri omadused',
+		name		: 'Nimi',
+		value		: 'Väärtus',
+		charWidth	: 'Laius (tähemärkides)',
+		maxChars	: 'Maksimaalselt tähemärke',
+		type		: 'Tüüp',
+		typeText	: 'Tekst',
+		typePass	: 'Parool'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Varjatud lahtri omadused',
+		name	: 'Nimi',
+		value	: 'Väärtus'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Pildi atribuudid',
+		titleButton	: 'Piltnupu omadused',
+		menu		: 'Pildi atribuudid',
+		infoTab		: 'Pildi info',
+		btnUpload	: 'Saada serverissee',
+		upload		: 'Lae üles',
+		alt			: 'Alternatiivne tekst',
+		lockRatio	: 'Lukusta kuvasuhe',
+		resetSize	: 'Lähtesta suurus',
+		border		: 'Joon',
+		hSpace		: 'H. vaheruum',
+		vSpace		: 'V. vaheruum',
+		alertUrl	: 'Palun kirjuta pildi URL',
+		linkTab		: 'Link',
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Flash omadused',
+		propertiesTab	: 'Properties', // MISSING
+		title			: 'Flash omadused',
+		chkPlay			: 'Automaatne start ',
+		chkLoop			: 'Korduv',
+		chkMenu			: 'Võimalda flash menüü',
+		chkFull			: 'Allow Fullscreen', // MISSING
+ 		scale			: 'Mastaap',
+		scaleAll		: 'Näita kõike',
+		scaleNoBorder	: 'Äärist ei ole',
+		scaleFit		: 'Täpne sobivus',
+		access			: 'Script Access', // MISSING
+		accessAlways	: 'Always', // MISSING
+		accessSameDomain: 'Same domain', // MISSING
+		accessNever		: 'Never', // MISSING
+		alignAbsBottom	: 'Abs alla',
+		alignAbsMiddle	: 'Abs keskele',
+		alignBaseline	: 'Baasjoonele',
+		alignTextTop	: 'Tekstit üles',
+		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
+		bgcolor			: 'Tausta värv',
+		hSpace			: 'H. vaheruum',
+		vSpace			: 'V. vaheruum',
+		validateSrc		: 'Palun kirjuta lingi URL',
+		validateHSpace	: 'HSpace must be a number.', // MISSING
+		validateVSpace	: 'VSpace must be a number.' // MISSING
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Kontrolli õigekirja',
+		title			: 'Spell Check', // MISSING
+		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
+		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		notInDic		: 'Puudub sõnastikust',
+		changeTo		: 'Muuda',
+		btnIgnore		: 'Ignoreeri',
+		btnIgnoreAll	: 'Ignoreeri kõiki',
+		btnReplace		: 'Asenda',
+		btnReplaceAll	: 'Asenda kõik',
+		btnUndo			: 'Võta tagasi',
+		noSuggestions	: '- Soovitused puuduvad -',
+		progress		: 'Toimub õigekirja kontroll...',
+		noMispell		: 'Õigekirja kontroll sooritatud: õigekirjuvigu ei leitud',
+		noChanges		: 'Õigekirja kontroll sooritatud: ühtegi sõna ei muudetud',
+		oneChange		: 'Õigekirja kontroll sooritatud: üks sõna muudeti',
+		manyChanges		: 'Õigekirja kontroll sooritatud: %1 sõna muudetud',
+		ieSpellDownload	: 'Õigekirja kontrollija ei ole installeeritud. Soovid sa selle alla laadida?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Emotikon',
+		title	: 'Sisesta emotikon',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element' // MISSING
+	},
+
+	numberedlist	: 'Nummerdatud loetelu',
+	bulletedlist	: 'Punktiseeritud loetelu',
+	indent			: 'Suurenda taanet',
+	outdent			: 'Vähenda taanet',
+
+	justify :
+	{
+		left	: 'Vasakjoondus',
+		center	: 'Keskjoondus',
+		right	: 'Paremjoondus',
+		block	: 'Rööpjoondus'
+	},
+
+	blockquote : 'Blokktsitaat',
+
+	clipboard :
+	{
+		title		: 'Kleebi',
+		cutError	: 'Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+X).',
+		copyError	: 'Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+C).',
+		pasteMsg	: 'Palun kleebi järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl/Cmd+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.',
+		securityMsg	: 'Sinu veebisirvija turvaseadete tõttu, ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead kleepima need uuesti siia aknasse.',
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar			: 'Kleebi Wordist',
+		title			: 'Kleebi Wordist',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'Kleebi tavalise tekstina',
+		title	: 'Kleebi tavalise tekstina'
+	},
+
+	templates :
+	{
+		button			: 'Šabloon',
+		title			: 'Sisu šabloonid',
+		options : 'Template Options', // MISSING
+		insertOption	: 'Asenda tegelik sisu',
+		selectPromptMsg	: 'Palun vali šabloon, et avada see redaktoris<br />(praegune sisu läheb kaotsi):',
+		emptyListMsg	: '(Ühtegi šablooni ei ole defineeritud)'
+	},
+
+	showBlocks : 'Näita blokke',
+
+	stylesCombo :
+	{
+		label		: 'Laad',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles', // MISSING
+		panelTitle2	: 'Inline Styles', // MISSING
+		panelTitle3	: 'Object Styles' // MISSING
+	},
+
+	format :
+	{
+		label		: 'Vorming',
+		panelTitle	: 'Vorming',
+
+		tag_p		: 'Tavaline',
+		tag_pre		: 'Vormindatud',
+		tag_address	: 'Aadress',
+		tag_h1		: 'Pealkiri 1',
+		tag_h2		: 'Pealkiri 2',
+		tag_h3		: 'Pealkiri 3',
+		tag_h4		: 'Pealkiri 4',
+		tag_h5		: 'Pealkiri 5',
+		tag_h6		: 'Pealkiri 6',
+		tag_div		: 'Tavaline (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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Kiri',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'Kiri'
+	},
+
+	fontSize :
+	{
+		label		: 'Suurus',
+		voiceLabel	: 'Font Size', // MISSING
+		panelTitle	: 'Suurus'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Teksti värv',
+		bgColorTitle	: 'Tausta värv',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'Automaatne',
+		more			: 'Rohkem värve...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor', // MISSING
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // 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
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor', // MISSING
+		flash		: 'Flash Animation', // MISSING
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Dokumendi omadused',
+		title : 'Dokumendi omadused',
+		design : 'Design', // MISSING
+		meta : 'Meta andmed',
+		chooseColor : 'Choose', // MISSING
+		other : '<muu>',
+		docTitle :	'Lehekülje tiitel',
+		charset : 	'Märgistiku kodeering',
+		charsetOther : 'Ülejäänud märgistike kodeeringud',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Kesk-Euroopa',
+		charsetCT : 'Hiina traditsiooniline (Big5)',
+		charsetCR : 'Kirillisa',
+		charsetGR : 'Kreeka',
+		charsetJP : 'Jaapani',
+		charsetKR : 'Korea',
+		charsetTR : 'Türgi',
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Lääne-Euroopa',
+		docType : 'Dokumendi tüüppäis',
+		docTypeOther : 'Teised dokumendi tüüppäised',
+		xhtmlDec : 'Arva kaasa XHTML deklaratsioonid',
+		bgColor : 'Taustavärv',
+		bgImage : 'Taustapildi URL',
+		bgFixed : 'Mittekeritav tagataust',
+		txtColor : 'Teksti värv',
+		margin : 'Lehekülje äärised',
+		marginTop : 'Ülaserv',
+		marginLeft : 'Vasakserv',
+		marginRight : 'Paremserv',
+		marginBottom : 'Alaserv',
+		metaKeywords : 'Dokumendi võtmesõnad (eraldatud komadega)',
+		metaDescription : 'Dokumendi kirjeldus',
+		metaAuthor : 'Autor',
+		metaCopyright : 'Autoriõigus',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/fa.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Persian language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['fa'] =
+{
+	/**
+	 * 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 : 'rtl',
+
+	/*
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'منبع',
+	newPage			: 'برگهٴ تازه',
+	save			: 'ذخیره',
+	preview			: 'پیشنمایش',
+	cut				: 'برش',
+	copy			: 'کپی',
+	paste			: 'چسباندن',
+	print			: 'چاپ',
+	underline		: 'خطزیردار',
+	bold			: 'درشت',
+	italic			: 'خمیده',
+	selectAll		: 'گزینش همه',
+	removeFormat	: 'برداشتن فرمت',
+	strike			: 'میانخط',
+	subscript		: 'زیرنویس',
+	superscript		: 'بالانویس',
+	horizontalrule	: 'گنجاندن خط ِافقی',
+	pagebreak		: 'گنجاندن شکستگی ِپایان ِبرگه',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'برداشتن پیوند',
+	undo			: 'واچیدن',
+	redo			: 'بازچیدن',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'فهرستنمایی سرور',
+		url				: 'URL',
+		protocol		: 'پروتکل',
+		upload			: 'انتقال به سرور',
+		uploadSubmit	: 'به سرور بفرست',
+		image			: 'تصویر',
+		flash			: 'Flash',
+		form			: 'فرم',
+		checkbox		: 'خانهٴ گزینهای',
+		radio			: 'دکمهٴ رادیویی',
+		textField		: 'فیلد متنی',
+		textarea		: 'ناحیهٴ متنی',
+		hiddenField		: 'فیلد پنهان',
+		button			: 'دکمه',
+		select			: 'فیلد چندگزینهای',
+		imageButton		: 'دکمهٴ تصویری',
+		notSet			: '<تعیننشده>',
+		id				: 'شناسه',
+		name			: 'نام',
+		langDir			: 'جهتنمای زبان',
+		langDirLtr		: 'چپ به راست (LTR)',
+		langDirRtl		: 'راست به چپ (RTL)',
+		langCode		: 'کد زبان',
+		longDescr		: 'URL توصیف طولانی',
+		cssClass		: 'کلاسهای شیوهنامه(Stylesheet)',
+		advisoryTitle	: 'عنوان کمکی',
+		cssStyle		: 'شیوه(style)',
+		ok				: 'پذیرش',
+		cancel			: 'انصراف',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'General', // MISSING
+		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
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'پهنا',
+		height			: 'درازا',
+		align			: 'چینش',
+		alignLeft		: 'چپ',
+		alignRight		: 'راست',
+		alignCenter		: 'وسط',
+		alignTop		: 'بالا',
+		alignMiddle		: 'وسط',
+		alignBottom		: 'پائین',
+		invalidHeight	: 'Height must be a number.', // MISSING
+		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'گنجاندن نویسهٴ ویژه',
+		title		: 'گزینش نویسهٴویژه',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'گنجاندن/ویرایش ِپیوند',
+		other 		: '<سایر>',
+		menu		: 'ویرایش پیوند',
+		title		: 'پیوند',
+		info		: 'اطلاعات پیوند',
+		target		: 'مقصد',
+		upload		: 'انتقال به سرور',
+		advanced	: 'پیشرفته',
+		type		: 'نوع پیوند',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'لنگر در همین صفحه',
+		toEmail		: 'پست الکترونیکی',
+		targetFrame		: '<فریم>',
+		targetPopup		: '<پنجرهٴ پاپاپ>',
+		targetFrameName	: 'نام فریم مقصد',
+		targetPopupName	: 'نام پنجرهٴ پاپاپ',
+		popupFeatures	: 'ویژگیهای پنجرهٴ پاپاپ',
+		popupResizable	: 'Resizable', // MISSING
+		popupStatusBar	: 'نوار وضعیت',
+		popupLocationBar: 'نوار موقعیت',
+		popupToolbar	: 'نوارابزار',
+		popupMenuBar	: 'نوار منو',
+		popupFullScreen	: 'تمامصفحه (IE)',
+		popupScrollBars	: 'میلههای پیمایش',
+		popupDependent	: 'وابسته (Netscape)',
+		popupLeft		: 'موقعیت ِچپ',
+		popupTop		: 'موقعیت ِبالا',
+		id				: 'Id', // MISSING
+		langDir			: 'جهتنمای زبان',
+		langDirLTR		: 'چپ به راست (LTR)',
+		langDirRTL		: 'راست به چپ (RTL)',
+		acccessKey		: 'کلید دستیابی',
+		name			: 'نام',
+		langCode			: 'جهتنمای زبان',
+		tabIndex			: 'نمایهٴ دسترسی با Tab',
+		advisoryTitle		: 'عنوان کمکی',
+		advisoryContentType	: 'نوع محتوای کمکی',
+		cssClasses		: 'کلاسهای شیوهنامه(Stylesheet)',
+		charset			: 'نویسهگان منبع ِپیوندشده',
+		styles			: 'شیوه(style)',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'یک لنگر برگزینید',
+		anchorName		: 'با نام لنگر',
+		anchorId			: 'با شناسهٴ المان',
+		emailAddress		: 'نشانی پست الکترونیکی',
+		emailSubject		: 'موضوع پیام',
+		emailBody		: 'متن پیام',
+		noAnchors		: '(در این سند لنگری دردسترس نیست)',
+		noUrl			: 'لطفا URL پیوند را بنویسید',
+		noEmail			: 'لطفا نشانی پست الکترونیکی را بنویسید'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'گنجاندن/ویرایش ِلنگر',
+		menu		: 'ویژگیهای لنگر',
+		title		: 'ویژگیهای لنگر',
+		name		: 'نام لنگر',
+		errorName	: 'لطفا نام لنگر را بنویسید',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'جستجو و جایگزینی',
+		find				: 'جستجو',
+		replace				: 'جایگزینی',
+		findWhat			: 'چهچیز را مییابید:',
+		replaceWith			: 'جایگزینی با:',
+		notFoundMsg			: 'متن موردنظر یافت نشد.',
+		matchCase			: 'همسانی در بزرگی و کوچکی نویسهها',
+		matchWord			: 'همسانی با واژهٴ کامل',
+		matchCyclic			: 'Match cyclic', // MISSING
+		replaceAll			: 'جایگزینی همهٴ یافتهها',
+		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'جدول',
+		title		: 'ویژگیهای جدول',
+		menu		: 'ویژگیهای جدول',
+		deleteTable	: 'پاککردن جدول',
+		rows		: 'سطرها',
+		columns		: 'ستونها',
+		border		: 'اندازهٴ لبه',
+		widthPx		: 'پیکسل',
+		widthPc		: 'درصد',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'فاصلهٴ میان سلولها',
+		cellPad		: 'فاصلهٴ پرشده در سلول',
+		caption		: 'عنوان',
+		summary		: 'خلاصه',
+		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 positive number.', // MISSING
+		invalidCellPadding	: 'Cell padding must be a positive number.', // MISSING
+
+		cell :
+		{
+			menu			: 'سلول',
+			insertBefore	: 'افزودن سلول قبل از',
+			insertAfter		: 'افزودن سلول بعد از',
+			deleteCell		: 'حذف سلولها',
+			merge			: 'ادغام سلولها',
+			mergeRight		: 'ادغام به راست',
+			mergeDown		: 'ادغام به پایین',
+			splitHorizontal	: 'جدا کردن افقی سلول',
+			splitVertical	: 'جدا کردن عمودی سلول',
+			title			: 'ویژگیهای سلول',
+			cellType		: 'Cell Type', // MISSING
+			rowSpan			: 'Rows Span', // MISSING
+			colSpan			: 'Columns Span', // MISSING
+			wordWrap		: 'Word Wrap', // MISSING
+			hAlign			: 'Horizontal Alignment', // MISSING
+			vAlign			: 'Vertical Alignment', // 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
+		},
+
+		row :
+		{
+			menu			: 'سطر',
+			insertBefore	: 'افزودن سطر قبل از',
+			insertAfter		: 'افزودن سطر بعد از',
+			deleteRow		: 'حذف سطرها'
+		},
+
+		column :
+		{
+			menu			: 'ستون',
+			insertBefore	: 'افزودن ستون قبل از',
+			insertAfter		: 'افزودن ستون بعد از',
+			deleteColumn	: 'حذف ستونها'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'ویژگیهای دکمه',
+		text		: 'متن (مقدار)',
+		type		: 'نوع',
+		typeBtn		: 'دکمه',
+		typeSbm		: 'Submit',
+		typeRst		: 'بازنشانی (Reset)'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'ویژگیهای خانهٴ گزینهای',
+		radioTitle	: 'ویژگیهای دکمهٴ رادیویی',
+		value		: 'مقدار',
+		selected	: 'برگزیده'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'ویژگیهای فرم',
+		menu		: 'ویژگیهای فرم',
+		action		: 'رویداد',
+		method		: 'متد',
+		encoding	: 'Encoding' // MISSING
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'ویژگیهای فیلد چندگزینهای',
+		selectInfo	: 'اطلاعات',
+		opAvail		: 'گزینههای دردسترس',
+		value		: 'مقدار',
+		size		: 'اندازه',
+		lines		: 'خطوط',
+		chkMulti	: 'گزینش چندگانه فراهم باشد',
+		opText		: 'متن',
+		opValue		: 'مقدار',
+		btnAdd		: 'افزودن',
+		btnModify	: 'ویرایش',
+		btnUp		: 'بالا',
+		btnDown		: 'پائین',
+		btnSetValue : 'تنظیم به عنوان مقدار ِبرگزیده',
+		btnDelete	: 'پاککردن'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'ویژگیهای ناحیهٴ متنی',
+		cols		: 'ستونها',
+		rows		: 'سطرها'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'ویژگیهای فیلد متنی',
+		name		: 'نام',
+		value		: 'مقدار',
+		charWidth	: 'پهنای نویسه',
+		maxChars	: 'بیشینهٴ نویسهها',
+		type		: 'نوع',
+		typeText	: 'متن',
+		typePass	: 'گذرواژه'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'ویژگیهای فیلد پنهان',
+		name	: 'نام',
+		value	: 'مقدار'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'ویژگیهای تصویر',
+		titleButton	: 'ویژگیهای دکمهٴ تصویری',
+		menu		: 'ویژگیهای تصویر',
+		infoTab		: 'اطلاعات تصویر',
+		btnUpload	: 'به سرور بفرست',
+		upload		: 'انتقال به سرور',
+		alt			: 'متن جایگزین',
+		lockRatio	: 'قفلکردن ِنسبت',
+		resetSize	: 'بازنشانی اندازه',
+		border		: 'لبه',
+		hSpace		: 'فاصلهٴ افقی',
+		vSpace		: 'فاصلهٴ عمودی',
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'ویژگیهای Flash',
+		propertiesTab	: 'Properties', // MISSING
+		title			: 'ویژگیهای Flash',
+		chkPlay			: 'آغاز ِخودکار',
+		chkLoop			: 'اجرای پیاپی',
+		chkMenu			: 'دردسترسبودن منوی Flash',
+		chkFull			: 'Allow Fullscreen', // MISSING
+ 		scale			: 'مقیاس',
+		scaleAll		: 'نمایش همه',
+		scaleNoBorder	: 'بدون کران',
+		scaleFit		: 'جایگیری کامل',
+		access			: 'Script Access', // MISSING
+		accessAlways	: 'Always', // MISSING
+		accessSameDomain: 'Same domain', // MISSING
+		accessNever		: 'Never', // MISSING
+		alignAbsBottom	: 'پائین مطلق',
+		alignAbsMiddle	: 'وسط مطلق',
+		alignBaseline	: 'خطپایه',
+		alignTextTop	: 'متن بالا',
+		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
+		bgcolor			: 'رنگ پسزمینه',
+		hSpace			: 'فاصلهٴ افقی',
+		vSpace			: 'فاصلهٴ عمودی',
+		validateSrc		: 'لطفا URL پیوند را بنویسید',
+		validateHSpace	: 'HSpace must be a number.', // MISSING
+		validateVSpace	: 'VSpace must be a number.' // MISSING
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'بررسی املا',
+		title			: 'Spell Check', // MISSING
+		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
+		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		notInDic		: 'در واژهنامه یافت نشد',
+		changeTo		: 'تغییر به',
+		btnIgnore		: 'چشمپوشی',
+		btnIgnoreAll	: 'چشمپوشی همه',
+		btnReplace		: 'جایگزینی',
+		btnReplaceAll	: 'جایگزینی همه',
+		btnUndo			: 'واچینش',
+		noSuggestions	: '- پیشنهادی نیست -',
+		progress		: 'بررسی املا در حال انجام...',
+		noMispell		: 'بررسی املا انجام شد. هیچ غلطاملائی یافت نشد',
+		noChanges		: 'بررسی املا انجام شد. هیچ واژهای تغییر نیافت',
+		oneChange		: 'بررسی املا انجام شد. یک واژه تغییر یافت',
+		manyChanges		: 'بررسی املا انجام شد. %1 واژه تغییر یافت',
+		ieSpellDownload	: 'بررسیکنندهٴ املا نصب نشده است. آیا میخواهید آن را هماکنون دریافت کنید؟'
+	},
+
+	smiley :
+	{
+		toolbar	: 'خندانک',
+		title	: 'گنجاندن خندانک',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element' // MISSING
+	},
+
+	numberedlist	: 'فهرست شمارهدار',
+	bulletedlist	: 'فهرست نقطهای',
+	indent			: 'افزایش تورفتگی',
+	outdent			: 'کاهش تورفتگی',
+
+	justify :
+	{
+		left	: 'چپچین',
+		center	: 'میانچین',
+		right	: 'راستچین',
+		block	: 'بلوکچین'
+	},
+
+	blockquote : 'بلوک نقل قول',
+
+	clipboard :
+	{
+		title		: 'چسباندن',
+		cutError	: 'تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمههای صفحهکلید این کار را انجام دهید (Ctrl/Cmd+X).',
+		copyError	: 'تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای کپیکردن را انجام دهد. لطفا با دکمههای صفحهکلید این کار را انجام دهید (Ctrl/Cmd+C).',
+		pasteMsg	: 'لطفا متن را با کلیدهای (<STRONG>Ctrl/Cmd+V</STRONG>) در این جعبهٴ متنی بچسبانید و <STRONG>پذیرش</STRONG> را بزنید.',
+		securityMsg	: 'به خاطر تنظیمات امنیتی مرورگر شما، ویرایشگر نمیتواند دسترسی مستقیم به دادههای clipboard داشته باشد. شما باید دوباره آنرا در این پنجره بچسبانید.',
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar			: 'چسباندن از Word',
+		title			: 'چسباندن از Word',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'چسباندن به عنوان متن ِساده',
+		title	: 'چسباندن به عنوان متن ِساده'
+	},
+
+	templates :
+	{
+		button			: 'الگوها',
+		title			: 'الگوهای محتویات',
+		options : 'Template Options', // MISSING
+		insertOption	: 'محتویات کنونی جایگزین شوند',
+		selectPromptMsg	: 'لطفا الگوی موردنظر را برای بازکردن در ویرایشگر برگزینید<br>(محتویات کنونی از دست خواهند رفت):',
+		emptyListMsg	: '(الگوئی تعریف نشده است)'
+	},
+
+	showBlocks : 'نمایش بلوکها',
+
+	stylesCombo :
+	{
+		label		: 'سبک',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles', // MISSING
+		panelTitle2	: 'Inline Styles', // MISSING
+		panelTitle3	: 'Object Styles' // MISSING
+	},
+
+	format :
+	{
+		label		: 'فرمت',
+		panelTitle	: 'فرمت',
+
+		tag_p		: 'نرمال',
+		tag_pre		: 'فرمتشده',
+		tag_address	: 'آدرس',
+		tag_h1		: 'سرنویس 1',
+		tag_h2		: 'سرنویس 2',
+		tag_h3		: 'سرنویس 3',
+		tag_h4		: 'سرنویس 4',
+		tag_h5		: 'سرنویس 5',
+		tag_h6		: 'سرنویس 6',
+		tag_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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'قلم',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'قلم'
+	},
+
+	fontSize :
+	{
+		label		: 'اندازه',
+		voiceLabel	: 'Font Size', // MISSING
+		panelTitle	: 'اندازه'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'رنگ متن',
+		bgColorTitle	: 'رنگ پسزمینه',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'خودکار',
+		more			: 'رنگهای بیشتر...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor', // MISSING
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // 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
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor', // MISSING
+		flash		: 'Flash Animation', // MISSING
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'ویژگیهای سند',
+		title : 'ویژگیهای سند',
+		design : 'Design', // MISSING
+		meta : 'فراداده',
+		chooseColor : 'Choose', // MISSING
+		other : '<سایر>',
+		docTitle :	'عنوان صفحه',
+		charset : 	'رمزگذاری نویسهگان',
+		charsetOther : 'رمزگذاری نویسهگان دیگر',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'اروپای مرکزی',
+		charsetCT : 'چینی رسمی (Big5)',
+		charsetCR : 'سیریلیک',
+		charsetGR : 'یونانی',
+		charsetJP : 'ژاپنی',
+		charsetKR : 'کرهای',
+		charsetTR : 'ترکی',
+		charsetUN : 'یونیکُد (UTF-8)',
+		charsetWE : 'اروپای غربی',
+		docType : 'عنوان نوع سند',
+		docTypeOther : 'عنوان نوع سند دیگر',
+		xhtmlDec : 'شامل تعاریف XHTML',
+		bgColor : 'رنگ پسزمینه',
+		bgImage : 'URL تصویر پسزمینه',
+		bgFixed : 'پسزمینهٴ پیمایشناپذیر',
+		txtColor : 'رنگ متن',
+		margin : 'حاشیههای صفحه',
+		marginTop : 'بالا',
+		marginLeft : 'چپ',
+		marginRight : 'راست',
+		marginBottom : 'پایین',
+		metaKeywords : 'کلیدواژگان نمایهگذاری سند (با کاما جدا شوند)',
+		metaDescription : 'توصیف سند',
+		metaAuthor : 'نویسنده',
+		metaCopyright : 'کپیرایت',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/fi.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Finnish language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['fi'] =
+{
+	/**
+	 * 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 : 'Rikastekstieditori, %1, paina ALT 0 nähdäksesi ohjeen.',
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rikastekstieditori',
+
+	// Toolbar buttons without dialogs.
+	source			: 'Koodi',
+	newPage			: 'Tyhjennä',
+	save			: 'Tallenna',
+	preview			: 'Esikatsele',
+	cut				: 'Leikkaa',
+	copy			: 'Kopioi',
+	paste			: 'Liitä',
+	print			: 'Tulosta',
+	underline		: 'Alleviivattu',
+	bold			: 'Lihavoitu',
+	italic			: 'Kursivoitu',
+	selectAll		: 'Valitse kaikki',
+	removeFormat	: 'Poista muotoilu',
+	strike			: 'Yliviivattu',
+	subscript		: 'Alaindeksi',
+	superscript		: 'Yläindeksi',
+	horizontalrule	: 'Lisää murtoviiva',
+	pagebreak		: 'Lisää sivunvaihto',
+	pagebreakAlt		: 'Sivunvaihto',
+	unlink			: 'Poista linkki',
+	undo			: 'Kumoa',
+	redo			: 'Toista',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Selaa palvelinta',
+		url				: 'Osoite',
+		protocol		: 'Protokolla',
+		upload			: 'Lisää tiedosto',
+		uploadSubmit	: 'Lähetä palvelimelle',
+		image			: 'Kuva',
+		flash			: 'Flash',
+		form			: 'Lomake',
+		checkbox		: 'Valintaruutu',
+		radio			: 'Radiopainike',
+		textField		: 'Tekstikenttä',
+		textarea		: 'Tekstilaatikko',
+		hiddenField		: 'Piilokenttä',
+		button			: 'Painike',
+		select			: 'Valintakenttä',
+		imageButton		: 'Kuvapainike',
+		notSet			: '<ei asetettu>',
+		id				: 'Tunniste',
+		name			: 'Nimi',
+		langDir			: 'Kielen suunta',
+		langDirLtr		: 'Vasemmalta oikealle (LTR)',
+		langDirRtl		: 'Oikealta vasemmalle (RTL)',
+		langCode		: 'Kielikoodi',
+		longDescr		: 'Pitkän kuvauksen URL',
+		cssClass		: 'Tyyliluokat',
+		advisoryTitle	: 'Avustava otsikko',
+		cssStyle		: 'Tyyli',
+		ok				: 'OK',
+		cancel			: 'Peruuta',
+		close			: 'Sulje',
+		preview			: 'Esikatselu',
+		generalTab		: 'Yleinen',
+		advancedTab		: 'Lisäominaisuudet',
+		validateNumberFailed : 'Arvon pitää olla numero.',
+		confirmNewPage	: 'Kaikki tallentamattomat muutokset tähän sisältöön menetetään. Oletko varma, että haluat ladata uuden sivun?',
+		confirmCancel	: 'Jotkut asetuksista on muuttuneet. Oletko varma, että haluat sulkea valintaikkunan?',
+		options			: 'Asetukset',
+		target			: 'Kohde',
+		targetNew		: 'Uusi ikkuna (_blank)',
+		targetTop		: 'Päällimmäinen ikkuna (_top)',
+		targetSelf		: 'Sama ikkuna (_self)',
+		targetParent	: 'Ylemmän tason ikkuna (_parent)',
+		langDirLTR		: 'Vasemmalta oikealle (LTR)',
+		langDirRTL		: 'Oikealta vasemmalle (RTL)',
+		styles			: 'Tyyli',
+		cssClasses		: 'Tyylitiedoston luokat',
+		width			: 'Leveys',
+		height			: 'Korkeus',
+		align			: 'Kohdistus',
+		alignLeft		: 'Vasemmalle',
+		alignRight		: 'Oikealle',
+		alignCenter		: 'Keskelle',
+		alignTop		: 'Ylös',
+		alignMiddle		: 'Keskelle',
+		alignBottom		: 'Alas',
+		invalidHeight	: 'Korkeuden täytyy olla numero.',
+		invalidWidth	: 'Leveyden täytyy olla numero.',
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, ei saatavissa</span>'
+	},
+
+	contextmenu :
+	{
+		options : 'Pikavalikon ominaisuudet'
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Lisää erikoismerkki',
+		title		: 'Valitse erikoismerkki',
+		options : 'Erikoismerkin ominaisuudet'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Lisää linkki/muokkaa linkkiä',
+		other 		: '<muu>',
+		menu		: 'Muokkaa linkkiä',
+		title		: 'Linkki',
+		info		: 'Linkin tiedot',
+		target		: 'Kohde',
+		upload		: 'Lisää tiedosto',
+		advanced	: 'Lisäominaisuudet',
+		type		: 'Linkkityyppi',
+		toUrl		: 'Osoite',
+		toAnchor	: 'Ankkuri tässä sivussa',
+		toEmail		: 'Sähköposti',
+		targetFrame		: '<kehys>',
+		targetPopup		: '<popup ikkuna>',
+		targetFrameName	: 'Kohdekehyksen nimi',
+		targetPopupName	: 'Popup ikkunan nimi',
+		popupFeatures	: 'Popup ikkunan ominaisuudet',
+		popupResizable	: 'Venytettävä',
+		popupStatusBar	: 'Tilarivi',
+		popupLocationBar: 'Osoiterivi',
+		popupToolbar	: 'Vakiopainikkeet',
+		popupMenuBar	: 'Valikkorivi',
+		popupFullScreen	: 'Täysi ikkuna (IE)',
+		popupScrollBars	: 'Vierityspalkit',
+		popupDependent	: 'Riippuva (Netscape)',
+		popupLeft		: 'Vasemmalta (px)',
+		popupTop		: 'Ylhäältä (px)',
+		id				: 'Tunniste',
+		langDir			: 'Kielen suunta',
+		langDirLTR		: 'Vasemmalta oikealle (LTR)',
+		langDirRTL		: 'Oikealta vasemmalle (RTL)',
+		acccessKey		: 'Pikanäppäin',
+		name			: 'Nimi',
+		langCode			: 'Kielen suunta',
+		tabIndex			: 'Tabulaattori indeksi',
+		advisoryTitle		: 'Avustava otsikko',
+		advisoryContentType	: 'Avustava sisällön tyyppi',
+		cssClasses		: 'Tyyliluokat',
+		charset			: 'Linkitetty kirjaimisto',
+		styles			: 'Tyyli',
+		rel			: 'Suhde',
+		selectAnchor		: 'Valitse ankkuri',
+		anchorName		: 'Ankkurin nimen mukaan',
+		anchorId			: 'Ankkurin ID:n mukaan',
+		emailAddress		: 'Sähköpostiosoite',
+		emailSubject		: 'Aihe',
+		emailBody		: 'Viesti',
+		noAnchors		: '(Ei ankkureita tässä dokumentissa)',
+		noUrl			: 'Linkille on kirjoitettava URL',
+		noEmail			: 'Kirjoita sähköpostiosoite'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Lisää ankkuri/muokkaa ankkuria',
+		menu		: 'Ankkurin ominaisuudet',
+		title		: 'Ankkurin ominaisuudet',
+		name		: 'Nimi',
+		errorName	: 'Ankkurille on kirjoitettava nimi',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numeroidun listan ominaisuudet',
+		bulletedTitle		: 'Numeroimattoman listan ominaisuudet',
+		type				: 'Tyyppi',
+		start				: 'Alku',
+		validateStartNumber				:'Listan ensimmäisen numeron tulee olla kokonaisluku.',
+		circle				: 'Ympyrä',
+		disc				: 'Levy',
+		square				: 'Neliö',
+		none				: 'Ei mikään',
+		notset				: '<ei asetettu>',
+		armenian			: 'Armeenialainen numerointi',
+		georgian			: 'Georgialainen numerointi (an, ban, gan, etc.)',
+		lowerRoman			: 'Pienet roomalaiset (i, ii, iii, iv, v, jne.)',
+		upperRoman			: 'Isot roomalaiset (I, II, III, IV, V, jne.)',
+		lowerAlpha			: 'Pienet aakkoset (a, b, c, d, e, jne.)',
+		upperAlpha			: 'Isot aakkoset (A, B, C, D, E, jne.)',
+		lowerGreek			: 'Pienet kreikkalaiset (alpha, beta, gamma, jne.)',
+		decimal				: 'Desimaalit (1, 2, 3, jne.)',
+		decimalLeadingZero	: 'Desimaalit, alussa nolla (01, 02, 03, jne.)'
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Etsi ja korvaa',
+		find				: 'Etsi',
+		replace				: 'Korvaa',
+		findWhat			: 'Etsi mitä:',
+		replaceWith			: 'Korvaa tällä:',
+		notFoundMsg			: 'Etsittyä tekstiä ei löytynyt.',
+		matchCase			: 'Sama kirjainkoko',
+		matchWord			: 'Koko sana',
+		matchCyclic			: 'Kierrä ympäri',
+		replaceAll			: 'Korvaa kaikki',
+		replaceSuccessMsg	: '%1 esiintymä(ä) korvattu.'
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Taulu',
+		title		: 'Taulun ominaisuudet',
+		menu		: 'Taulun ominaisuudet',
+		deleteTable	: 'Poista taulu',
+		rows		: 'Rivit',
+		columns		: 'Sarakkeet',
+		border		: 'Rajan paksuus',
+		widthPx		: 'pikseliä',
+		widthPc		: 'prosenttia',
+		widthUnit	: 'leveysyksikkö',
+		cellSpace	: 'Solujen väli',
+		cellPad		: 'Solujen sisennys',
+		caption		: 'Otsikko',
+		summary		: 'Yhteenveto',
+		headers		: 'Ylätunnisteet',
+		headersNone		: 'Ei',
+		headersColumn	: 'Ensimmäinen sarake',
+		headersRow		: 'Ensimmäinen rivi',
+		headersBoth		: 'Molemmat',
+		invalidRows		: 'Rivien määrän täytyy olla suurempi kuin 0.',
+		invalidCols		: 'Sarakkeiden määrän täytyy olla suurempi kuin 0.',
+		invalidBorder	: 'Reunan koon täytyy olla numero.',
+		invalidWidth	: 'Taulun leveyden täytyy olla numero.',
+		invalidHeight	: 'Taulun korkeuden täytyy olla numero.',
+		invalidCellSpacing	: 'Solujen välin täytyy olla numero.',
+		invalidCellPadding	: 'Solujen sisennyksen täytyy olla numero.',
+
+		cell :
+		{
+			menu			: 'Solu',
+			insertBefore	: 'Lisää solu eteen',
+			insertAfter		: 'Lisää solu perään',
+			deleteCell		: 'Poista solut',
+			merge			: 'Yhdistä solut',
+			mergeRight		: 'Yhdistä oikealla olevan kanssa',
+			mergeDown		: 'Yhdistä alla olevan kanssa',
+			splitHorizontal	: 'Jaa solu vaakasuunnassa',
+			splitVertical	: 'Jaa solu pystysuunnassa',
+			title			: 'Solun ominaisuudet',
+			cellType		: 'Solun tyyppi',
+			rowSpan			: 'Rivin jatkuvuus',
+			colSpan			: 'Solun jatkuvuus',
+			wordWrap		: 'Rivitys',
+			hAlign			: 'Horisontaali kohdistus',
+			vAlign			: 'Vertikaali kohdistus',
+			alignBaseline	: 'Alas (teksti)',
+			bgColor			: 'Taustan väri',
+			borderColor		: 'Reunan väri',
+			data			: 'Data',
+			header			: 'Ylätunniste',
+			yes				: 'Kyllä',
+			no				: 'Ei',
+			invalidWidth	: 'Solun leveyden täytyy olla numero.',
+			invalidHeight	: 'Solun korkeuden täytyy olla numero.',
+			invalidRowSpan	: 'Rivin jatkuvuuden täytyy olla kokonaisluku.',
+			invalidColSpan	: 'Solun jatkuvuuden täytyy olla kokonaisluku.',
+			chooseColor		: 'Valitse'
+		},
+
+		row :
+		{
+			menu			: 'Rivi',
+			insertBefore	: 'Lisää rivi yläpuolelle',
+			insertAfter		: 'Lisää rivi alapuolelle',
+			deleteRow		: 'Poista rivit'
+		},
+
+		column :
+		{
+			menu			: 'Sarake',
+			insertBefore	: 'Lisää sarake vasemmalle',
+			insertAfter		: 'Lisää sarake oikealle',
+			deleteColumn	: 'Poista sarakkeet'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Painikkeen ominaisuudet',
+		text		: 'Teksti (arvo)',
+		type		: 'Tyyppi',
+		typeBtn		: 'Painike',
+		typeSbm		: 'Lähetä',
+		typeRst		: 'Tyhjennä'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Valintaruudun ominaisuudet',
+		radioTitle	: 'Radiopainikkeen ominaisuudet',
+		value		: 'Arvo',
+		selected	: 'Valittu'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Lomakkeen ominaisuudet',
+		menu		: 'Lomakkeen ominaisuudet',
+		action		: 'Toiminto',
+		method		: 'Tapa',
+		encoding	: 'Enkoodaus'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Valintakentän ominaisuudet',
+		selectInfo	: 'Info',
+		opAvail		: 'Ominaisuudet',
+		value		: 'Arvo',
+		size		: 'Koko',
+		lines		: 'Rivit',
+		chkMulti	: 'Salli usea valinta',
+		opText		: 'Teksti',
+		opValue		: 'Arvo',
+		btnAdd		: 'Lisää',
+		btnModify	: 'Muuta',
+		btnUp		: 'Ylös',
+		btnDown		: 'Alas',
+		btnSetValue : 'Aseta valituksi',
+		btnDelete	: 'Poista'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Tekstilaatikon ominaisuudet',
+		cols		: 'Sarakkeita',
+		rows		: 'Rivejä'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Tekstikentän ominaisuudet',
+		name		: 'Nimi',
+		value		: 'Arvo',
+		charWidth	: 'Leveys',
+		maxChars	: 'Maksimi merkkimäärä',
+		type		: 'Tyyppi',
+		typeText	: 'Teksti',
+		typePass	: 'Salasana'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Piilokentän ominaisuudet',
+		name	: 'Nimi',
+		value	: 'Arvo'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Kuvan ominaisuudet',
+		titleButton	: 'Kuvapainikkeen ominaisuudet',
+		menu		: 'Kuvan ominaisuudet',
+		infoTab		: 'Kuvan tiedot',
+		btnUpload	: 'Lähetä palvelimelle',
+		upload		: 'Lisää kuva',
+		alt			: 'Vaihtoehtoinen teksti',
+		lockRatio	: 'Lukitse suhteet',
+		resetSize	: 'Alkuperäinen koko',
+		border		: 'Kehys',
+		hSpace		: 'Vaakatila',
+		vSpace		: 'Pystytila',
+		alertUrl	: 'Kirjoita kuvan osoite (URL)',
+		linkTab		: 'Linkki',
+		button2Img	: 'Haluatko muuntaa valitun kuvanäppäimen kuvaksi?',
+		img2Button	: 'Haluatko muuntaa valitun kuvan kuvanäppäimeksi?',
+		urlMissing	: 'Kuvan lähdeosoite puuttuu.',
+		validateBorder	: 'Kehyksen täytyy olla kokonaisluku.',
+		validateHSpace	: 'HSpace-määrityksen täytyy olla kokonaisluku.',
+		validateVSpace	: 'VSpace-määrityksen täytyy olla kokonaisluku.'
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Flash-ominaisuudet',
+		propertiesTab	: 'Ominaisuudet',
+		title			: 'Flash ominaisuudet',
+		chkPlay			: 'Automaattinen käynnistys',
+		chkLoop			: 'Toisto',
+		chkMenu			: 'Näytä Flash-valikko',
+		chkFull			: 'Salli kokoruututila',
+ 		scale			: 'Levitä',
+		scaleAll		: 'Näytä kaikki',
+		scaleNoBorder	: 'Ei rajaa',
+		scaleFit		: 'Tarkka koko',
+		access			: 'Skriptien pääsy',
+		accessAlways	: 'Aina',
+		accessSameDomain: 'Sama verkkotunnus',
+		accessNever		: 'Ei koskaan',
+		alignAbsBottom	: 'Aivan alas',
+		alignAbsMiddle	: 'Aivan keskelle',
+		alignBaseline	: 'Alas (teksti)',
+		alignTextTop	: 'Ylös (teksti)',
+		quality			: 'Laatu',
+		qualityBest		: 'Paras',
+		qualityHigh		: 'Korkea',
+		qualityAutoHigh	: 'Automaattinen korkea',
+		qualityMedium	: 'Keskitaso',
+		qualityAutoLow	: 'Automaattinen matala',
+		qualityLow		: 'Matala',
+		windowModeWindow: 'Ikkuna',
+		windowModeOpaque: 'Läpinäkyvyys',
+		windowModeTransparent : 'Läpinäkyvä',
+		windowMode		: 'Ikkuna tila',
+		flashvars		: 'Muuttujat Flash:lle',
+		bgcolor			: 'Taustaväri',
+		hSpace			: 'Vaakatila',
+		vSpace			: 'Pystytila',
+		validateSrc		: 'Linkille on kirjoitettava URL',
+		validateHSpace	: 'Vaakatilan täytyy olla numero.',
+		validateVSpace	: 'Pystytilan täytyy olla numero.'
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Tarkista oikeinkirjoitus',
+		title			: 'Oikoluku',
+		notAvailable	: 'Valitettavasti oikoluku ei ole käytössä tällä hetkellä.',
+		errorLoading	: 'Virhe ladattaessa oikolukupalvelua isännältä: %s.',
+		notInDic		: 'Ei sanakirjassa',
+		changeTo		: 'Vaihda',
+		btnIgnore		: 'Jätä huomioimatta',
+		btnIgnoreAll	: 'Jätä kaikki huomioimatta',
+		btnReplace		: 'Korvaa',
+		btnReplaceAll	: 'Korvaa kaikki',
+		btnUndo			: 'Kumoa',
+		noSuggestions	: 'Ei ehdotuksia',
+		progress		: 'Tarkistus käynnissä...',
+		noMispell		: 'Tarkistus valmis: Ei virheitä',
+		noChanges		: 'Tarkistus valmis: Yhtään sanaa ei muutettu',
+		oneChange		: 'Tarkistus valmis: Yksi sana muutettiin',
+		manyChanges		: 'Tarkistus valmis: %1 sanaa muutettiin',
+		ieSpellDownload	: 'Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Hymiö',
+		title	: 'Lisää hymiö',
+		options : 'Hymiön ominaisuudet'
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elementin polku',
+		eleTitle : '%1 elementti'
+	},
+
+	numberedlist	: 'Numerointi',
+	bulletedlist	: 'Luottelomerkit',
+	indent			: 'Suurenna sisennystä',
+	outdent			: 'Pienennä sisennystä',
+
+	justify :
+	{
+		left	: 'Tasaa vasemmat reunat',
+		center	: 'Keskitä',
+		right	: 'Tasaa oikeat reunat',
+		block	: 'Tasaa molemmat reunat'
+	},
+
+	blockquote : 'Lainaus',
+
+	clipboard :
+	{
+		title		: 'Liitä',
+		cutError	: 'Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).',
+		copyError	: 'Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).',
+		pasteMsg	: 'Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.',
+		securityMsg	: 'Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.',
+		pasteArea	: 'Leikealue'
+	},
+
+	pastefromword :
+	{
+		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'
+	},
+
+	pasteText :
+	{
+		button	: 'Liitä tekstinä',
+		title	: 'Liitä tekstinä'
+	},
+
+	templates :
+	{
+		button			: 'Pohjat',
+		title			: 'Sisältöpohjat',
+		options : 'Sisältöpohjan ominaisuudet',
+		insertOption	: 'Korvaa editorin koko sisältö',
+		selectPromptMsg	: 'Valitse pohja editoriin<br>(aiempi sisältö menetetään):',
+		emptyListMsg	: '(Ei määriteltyjä pohjia)'
+	},
+
+	showBlocks : 'Näytä elementit',
+
+	stylesCombo :
+	{
+		label		: 'Tyyli',
+		panelTitle	: 'Muotoilujen tyylit',
+		panelTitle1	: 'Lohkojen tyylit',
+		panelTitle2	: 'Rivinsisäiset tyylit',
+		panelTitle3	: 'Objektien tyylit'
+	},
+
+	format :
+	{
+		label		: 'Muotoilu',
+		panelTitle	: 'Muotoilu',
+
+		tag_p		: 'Normaali',
+		tag_pre		: 'Muotoiltu',
+		tag_address	: 'Osoite',
+		tag_h1		: 'Otsikko 1',
+		tag_h2		: 'Otsikko 2',
+		tag_h3		: 'Otsikko 3',
+		tag_h4		: 'Otsikko 4',
+		tag_h5		: 'Otsikko 5',
+		tag_h6		: 'Otsikko 6',
+		tag_div		: 'Normaali (DIV)'
+	},
+
+	div :
+	{
+		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'
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame-kehyksen ominaisuudet',
+		toolbar		: 'IFrame-kehys',
+		noUrl		: 'Anna IFrame-kehykselle lähdeosoite (src)',
+		scrolling	: 'Näytä vierityspalkit',
+		border		: 'Näytä kehyksen reunat'
+	},
+
+	font :
+	{
+		label		: 'Kirjaisinlaji',
+		voiceLabel	: 'Kirjaisinlaji',
+		panelTitle	: 'Kirjaisinlaji'
+	},
+
+	fontSize :
+	{
+		label		: 'Koko',
+		voiceLabel	: 'Kirjaisimen koko',
+		panelTitle	: 'Koko'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Tekstiväri',
+		bgColorTitle	: 'Taustaväri',
+		panelTitle		: 'Värit',
+		auto			: 'Automaattinen',
+		more			: 'Lisää värejä...'
+	},
+
+	colors :
+	{
+		'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'
+	},
+
+	scayt :
+	{
+		title			: 'Oikolue kirjoitettaessa',
+		opera_title		: 'Opera ei tue tätä ominaisuutta',
+		enable			: 'Ota käyttöön oikoluku kirjoitettaessa',
+		disable			: 'Poista käytöstä oikoluku kirjoitetaessa',
+		about			: 'Tietoja oikoluvusta kirjoitetaessa',
+		toggle			: 'Vaihda oikoluku kirjoittaessa tilaa',
+		options			: 'Asetukset',
+		langs			: 'Kielet',
+		moreSuggestions	: 'Lisää ehdotuksia',
+		ignore			: 'Ohita',
+		ignoreAll		: 'Ohita kaikki',
+		addWord			: 'Lisää sana',
+		emptyDic		: 'Sanakirjan nimi on annettava.',
+
+		optionsTab		: 'Asetukset',
+		allCaps			: 'Ohita sanat, jotka on kirjoitettu kokonaan isoilla kirjaimilla',
+		ignoreDomainNames : 'Ohita verkkotunnukset',
+		mixedCase		: 'Ohita sanat, joissa on sekoitettu isoja ja pieniä kirjaimia',
+		mixedWithDigits	: 'Ohita sanat, joissa on numeroita',
+
+		languagesTab	: 'Kielet',
+
+		dictionariesTab	: 'Sanakirjat',
+		dic_field_name	: 'Sanakirjan nimi',
+		dic_create		: 'Luo',
+		dic_restore		: 'Palauta',
+		dic_delete		: 'Poista',
+		dic_rename		: 'Nimeä uudelleen',
+		dic_info		: 'Oletuksena sanakirjat tallennetaan evästeeseen, mutta evästeiden koko on kuitenkin rajallinen. Sanakirjan kasvaessa niin suureksi, ettei se enää mahdu evästeeseen, sanakirja täytyy tallentaa palvelimellemme. Tallentaaksesi sanakirjasi palvelimellemme tulee sinun antaa sille nimi. Jos olet jo tallentanut sanakirjan, anna sen nimi ja klikkaa Palauta-painiketta',
+
+		aboutTab		: 'Tietoa'
+	},
+
+	about :
+	{
+		title		: 'Tietoa CKEditorista',
+		dlgTitle	: 'Tietoa CKEditorista',
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // MISSING
+		moreInfo	: 'Lisenssitiedot löytyvät kotisivuiltamme:',
+		copy		: 'Copyright &copy; $1. Kaikki oikeuden pidätetään.'
+	},
+
+	maximize : 'Suurenna',
+	minimize : 'Pienennä',
+
+	fakeobjects :
+	{
+		anchor		: 'Ankkuri',
+		flash		: 'Flash animaatio',
+		iframe		: 'IFrame-kehys',
+		hiddenfield	: 'Piilokenttä',
+		unknown		: 'Tuntematon objekti'
+	},
+
+	resize : 'Raahaa muuttaaksesi kokoa',
+
+	colordialog :
+	{
+		title		: 'Valitse väri',
+		options	:	'Värin ominaisuudet',
+		highlight	: 'Korostus',
+		selected	: 'Valittu',
+		clear		: 'Poista'
+	},
+
+	toolbarCollapse	: 'Kutista työkalupalkki',
+	toolbarExpand	: 'Laajenna työkalupalkki',
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Tekstin suunta vasemmalta oikealle',
+		rtl : 'Tekstin suunta oikealta vasemmalle'
+	},
+
+	docprops :
+	{
+		label : 'Dokumentin ominaisuudet',
+		title : 'Dokumentin ominaisuudet',
+		design : 'Design', // MISSING
+		meta : 'Meta-tieto',
+		chooseColor : 'Valitse',
+		other : '<muu>',
+		docTitle :	'Sivun nimi',
+		charset : 	'Merkistökoodaus',
+		charsetOther : 'Muu merkistökoodaus',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Keskieurooppalainen',
+		charsetCT : 'Kiina, perinteinen (Big5)',
+		charsetCR : 'Kyrillinen',
+		charsetGR : 'Kreikka',
+		charsetJP : 'Japani',
+		charsetKR : 'Korealainen',
+		charsetTR : 'Turkkilainen',
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Länsieurooppalainen',
+		docType : 'Dokumentin tyyppi',
+		docTypeOther : 'Muu dokumentin tyyppi',
+		xhtmlDec : 'Lisää XHTML julistukset',
+		bgColor : 'Taustaväri',
+		bgImage : 'Taustakuva',
+		bgFixed : 'Paikallaanpysyvä tausta',
+		txtColor : 'Tekstiväri',
+		margin : 'Sivun marginaalit',
+		marginTop : 'Ylä',
+		marginLeft : 'Vasen',
+		marginRight : 'Oikea',
+		marginBottom : 'Ala',
+		metaKeywords : 'Hakusanat (pilkulla erotettuna)',
+		metaDescription : 'Kuvaus',
+		metaAuthor : 'Tekijä',
+		metaCopyright : 'Tekijänoikeudet',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/fo.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Faroese language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['fo'] =
+{
+	/**
+	 * 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, trýst ALT og 0 fyri vegleiðing.',
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor',
+
+	// Toolbar buttons without dialogs.
+	source			: 'Kelda',
+	newPage			: 'Nýggj síða',
+	save			: 'Goym',
+	preview			: 'Frumsýning',
+	cut				: 'Kvett',
+	copy			: 'Avrita',
+	paste			: 'Innrita',
+	print			: 'Prenta',
+	underline		: 'Undirstrikað',
+	bold			: 'Feit skrift',
+	italic			: 'Skráskrift',
+	selectAll		: 'Markera alt',
+	removeFormat	: 'Strika sniðgeving',
+	strike			: 'Yvirstrikað',
+	subscript		: 'Lækkað skrift',
+	superscript		: 'Hækkað skrift',
+	horizontalrule	: 'Ger vatnrætta linju',
+	pagebreak		: 'Ger síðuskift',
+	pagebreakAlt		: 'Síðuskift',
+	unlink			: 'Strika tilknýti',
+	undo			: 'Angra',
+	redo			: 'Vend aftur',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Ambætarakagi',
+		url				: 'URL',
+		protocol		: 'Protokoll',
+		upload			: 'Send til ambætaran',
+		uploadSubmit	: 'Send til ambætaran',
+		image			: 'Myndir',
+		flash			: 'Flash',
+		form			: 'Formur',
+		checkbox		: 'Flugubein',
+		radio			: 'Radioknøttur',
+		textField		: 'Tekstteigur',
+		textarea		: 'Tekstumráði',
+		hiddenField		: 'Fjaldur teigur',
+		button			: 'Knøttur',
+		select			: 'Valskrá',
+		imageButton		: 'Myndaknøttur',
+		notSet			: '<ikki sett>',
+		id				: 'Id',
+		name			: 'Navn',
+		langDir			: 'Tekstkós',
+		langDirLtr		: 'Frá vinstru til høgru (LTR)',
+		langDirRtl		: 'Frá høgru til vinstru (RTL)',
+		langCode		: 'Málkoda',
+		longDescr		: 'Víðkað URL frágreiðing',
+		cssClass		: 'Typografi klassar',
+		advisoryTitle	: 'Vegleiðandi heiti',
+		cssStyle		: 'Typografi',
+		ok				: 'Góðkent',
+		cancel			: 'Avlýst',
+		close			: 'Lat aftur',
+		preview			: 'Frumsýn',
+		generalTab		: 'Generelt',
+		advancedTab		: 'Fjølbroytt',
+		validateNumberFailed : 'Hetta er ikki eitt tal.',
+		confirmNewPage	: 'Allar ikki goymdar broytingar í hesum innihaldið hvørva. Skal nýggj síða lesast kortini?',
+		confirmCancel	: 'Nakrir valmøguleikar eru broyttir. Ert tú vísur í, at dialogurin skal latast aftur?',
+		options			: 'Options',
+		target			: 'Target',
+		targetNew		: 'Nýtt vindeyga (_blank)',
+		targetTop		: 'Vindeyga ovast (_top)',
+		targetSelf		: 'Sama vindeyga (_self)',
+		targetParent	: 'Upphavligt vindeyga (_parent)',
+		langDirLTR		: 'Frá vinstru til høgru (LTR)',
+		langDirRTL		: 'Frá høgru til vinstru (RTL)',
+		styles			: 'Style',
+		cssClasses		: 'Stylesheet Classes',
+		width			: 'Breidd',
+		height			: 'Hædd',
+		align			: 'Justering',
+		alignLeft		: 'Vinstra',
+		alignRight		: 'Høgra',
+		alignCenter		: 'Miðsett',
+		alignTop		: 'Ovast',
+		alignMiddle		: 'Miðja',
+		alignBottom		: 'Botnur',
+		invalidHeight	: 'Hædd má vera eitt tal.',
+		invalidWidth	: 'Breidd má vera eitt tal.',
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, ikki tøkt</span>'
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options'
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Set inn sertekn',
+		title		: 'Vel sertekn',
+		options : 'Møguleikar við serteknum'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Ger/broyt tilknýti',
+		other 		: '<annað>',
+		menu		: 'Broyt tilknýti',
+		title		: 'Tilknýti',
+		info		: 'Tilknýtis upplýsingar',
+		target		: 'Target',
+		upload		: 'Send til ambætaran',
+		advanced	: 'Fjølbroytt',
+		type		: 'Tilknýtisslag',
+		toUrl		: 'URL',
+		toAnchor	: 'Tilknýti til marknastein í tekstinum',
+		toEmail		: 'Teldupostur',
+		targetFrame		: '<ramma>',
+		targetPopup		: '<popup vindeyga>',
+		targetFrameName	: 'Vís navn vindeygans',
+		targetPopupName	: 'Popup vindeygans navn',
+		popupFeatures	: 'Popup vindeygans víðkaðu eginleikar',
+		popupResizable	: 'Stødd kann broytast',
+		popupStatusBar	: 'Støðufrágreiðingarbjálki',
+		popupLocationBar: 'Adressulinja',
+		popupToolbar	: 'Amboðsbjálki',
+		popupMenuBar	: 'Skrábjálki',
+		popupFullScreen	: 'Fullur skermur (IE)',
+		popupScrollBars	: 'Rullibjálki',
+		popupDependent	: 'Bundið (Netscape)',
+		popupLeft		: 'Frástøða frá vinstru',
+		popupTop		: 'Frástøða frá íerva',
+		id				: 'Id',
+		langDir			: 'Tekstkós',
+		langDirLTR		: 'Frá vinstru til høgru (LTR)',
+		langDirRTL		: 'Frá høgru til vinstru (RTL)',
+		acccessKey		: 'Snarvegisknöttur',
+		name			: 'Navn',
+		langCode			: 'Tekstkós',
+		tabIndex			: 'Tabulator indeks',
+		advisoryTitle		: 'Vegleiðandi heiti',
+		advisoryContentType	: 'Vegleiðandi innihaldsslag',
+		cssClasses		: 'Typografi klassar',
+		charset			: 'Atknýtt teknsett',
+		styles			: 'Typografi',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Vel ein marknastein',
+		anchorName		: 'Eftir navni á marknasteini',
+		anchorId			: 'Eftir element Id',
+		emailAddress		: 'Teldupost-adressa',
+		emailSubject		: 'Evni',
+		emailBody		: 'Breyðtekstur',
+		noAnchors		: '(Eingir marknasteinar eru í hesum dokumentið)',
+		noUrl			: 'Vinarliga skriva tilknýti (URL)',
+		noEmail			: 'Vinarliga skriva teldupost-adressu'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Ger/broyt marknastein',
+		menu		: 'Eginleikar fyri marknastein',
+		title		: 'Eginleikar fyri marknastein',
+		name		: 'Heiti marknasteinsins',
+		errorName	: 'Vinarliga rita marknasteinsins heiti',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Eginleikar fyri lista við tølum',
+		bulletedTitle		: 'Eginleikar fyri lista við prikkum',
+		type				: 'Slag',
+		start				: 'Byrjan',
+		validateStartNumber				:'Byrjunartalið fyri lista má vera eitt heiltal.',
+		circle				: 'Sirkul',
+		disc				: 'Disc',
+		square				: 'Fýrkantur',
+		none				: 'Einki',
+		notset				: '<ikki sett>',
+		armenian			: 'Armensk talskipan',
+		georgian			: 'Georgisk talskipan (an, ban, gan, osv.)',
+		lowerRoman			: 'Lítil rómaratøl (i, ii, iii, iv, v, etc.)',
+		upperRoman			: 'Stór rómaratøl (I, II, III, IV, V, etc.)',
+		lowerAlpha			: 'Lítlir bókstavir (a, b, c, d, e, etc.)',
+		upperAlpha			: 'Stórir bókstavir (A, B, C, D, E, etc.)',
+		lowerGreek			: 'Grikskt við lítlum (alpha, beta, gamma, etc.)',
+		decimal				: 'Vanlig tøl (1, 2, 3, etc.)',
+		decimalLeadingZero	: 'Tøl við null frammanfyri (01, 02, 03, etc.)'
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Finn og broyt',
+		find				: 'Leita',
+		replace				: 'Yvirskriva',
+		findWhat			: 'Finn:',
+		replaceWith			: 'Yvirskriva við:',
+		notFoundMsg			: 'Leititeksturin varð ikki funnin',
+		matchCase			: 'Munur á stórum og smáum bókstavum',
+		matchWord			: 'Bert heil orð',
+		matchCyclic			: 'Match cyclic',
+		replaceAll			: 'Yvirskriva alt',
+		replaceSuccessMsg	: '%1 úrslit broytt.'
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tabell',
+		title		: 'Eginleikar fyri tabell',
+		menu		: 'Eginleikar fyri tabell',
+		deleteTable	: 'Strika tabell',
+		rows		: 'Røðir',
+		columns		: 'Kolonnur',
+		border		: 'Bordabreidd',
+		widthPx		: 'pixels',
+		widthPc		: 'prosent',
+		widthUnit	: 'breiddar unit',
+		cellSpace	: 'Fjarstøða millum meskar',
+		cellPad		: 'Meskubreddi',
+		caption		: 'Tabellfrágreiðing',
+		summary		: 'Samandráttur',
+		headers		: 'Yvirskriftir',
+		headersNone		: 'Eingin',
+		headersColumn	: 'Fyrsta kolonna',
+		headersRow		: 'Fyrsta rað',
+		headersBoth		: 'Báðir',
+		invalidRows		: 'Talið av røðum má vera eitt tal størri enn 0.',
+		invalidCols		: 'Talið av kolonnum má vera eitt tal størri enn 0.',
+		invalidBorder	: 'Borda-stødd má vera eitt tal.',
+		invalidWidth	: 'Tabell-breidd má vera eitt tal.',
+		invalidHeight	: 'Tabell-hædd má vera eitt tal.',
+		invalidCellSpacing	: 'Cell spacing má vera eitt tal.',
+		invalidCellPadding	: 'Cell padding má vera eitt tal.',
+
+		cell :
+		{
+			menu			: 'Meski',
+			insertBefore	: 'Set meska inn áðrenn',
+			insertAfter		: 'Set meska inn aftaná',
+			deleteCell		: 'Strika meskar',
+			merge			: 'Flætta meskar',
+			mergeRight		: 'Flætta meskar til høgru',
+			mergeDown		: 'Flætta saman',
+			splitHorizontal	: 'Kloyv meska vatnrætt',
+			splitVertical	: 'Kloyv meska loddrætt',
+			title			: 'Mesku eginleikar',
+			cellType		: 'Mesku slag',
+			rowSpan			: 'Ræð spenni',
+			colSpan			: 'Kolonnu spenni',
+			wordWrap		: 'Orðkloyving',
+			hAlign			: 'Horisontal plasering',
+			vAlign			: 'Loddrøtt plasering',
+			alignBaseline	: 'Basislinja',
+			bgColor			: 'Bakgrundslitur',
+			borderColor		: 'Bordalitur',
+			data			: 'Data',
+			header			: 'Header',
+			yes				: 'Ja',
+			no				: 'Nei',
+			invalidWidth	: 'Meskubreidd má vera eitt tal.',
+			invalidHeight	: 'Meskuhædd má vera eitt tal.',
+			invalidRowSpan	: 'Raðspennið má vera eitt heiltal.',
+			invalidColSpan	: 'Kolonnuspennið má vera eitt heiltal.',
+			chooseColor		: 'Vel'
+		},
+
+		row :
+		{
+			menu			: 'Rað',
+			insertBefore	: 'Set rað inn áðrenn',
+			insertAfter		: 'Set rað inn aftaná',
+			deleteRow		: 'Strika røðir'
+		},
+
+		column :
+		{
+			menu			: 'Kolonna',
+			insertBefore	: 'Set kolonnu inn áðrenn',
+			insertAfter		: 'Set kolonnu inn aftaná',
+			deleteColumn	: 'Strika kolonnur'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Eginleikar fyri knøtt',
+		text		: 'Tekstur',
+		type		: 'Slag',
+		typeBtn		: 'Knøttur',
+		typeSbm		: 'Send',
+		typeRst		: 'Nullstilla'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Eginleikar fyri flugubein',
+		radioTitle	: 'Eginleikar fyri radioknøtt',
+		value		: 'Virði',
+		selected	: 'Valt'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Eginleikar fyri Form',
+		menu		: 'Eginleikar fyri Form',
+		action		: 'Hending',
+		method		: 'Háttur',
+		encoding	: 'Encoding'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Eginleikar fyri valskrá',
+		selectInfo	: 'Upplýsingar',
+		opAvail		: 'Tøkir møguleikar',
+		value		: 'Virði',
+		size		: 'Stødd',
+		lines		: 'Linjur',
+		chkMulti	: 'Loyv fleiri valmøguleikum samstundis',
+		opText		: 'Tekstur',
+		opValue		: 'Virði',
+		btnAdd		: 'Legg afturat',
+		btnModify	: 'Broyt',
+		btnUp		: 'Upp',
+		btnDown		: 'Niður',
+		btnSetValue : 'Set sum valt virði',
+		btnDelete	: 'Strika'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Eginleikar fyri tekstumráði',
+		cols		: 'kolonnur',
+		rows		: 'røðir'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Eginleikar fyri tekstteig',
+		name		: 'Navn',
+		value		: 'Virði',
+		charWidth	: 'Breidd (sjónlig tekn)',
+		maxChars	: 'Mest loyvdu tekn',
+		type		: 'Slag',
+		typeText	: 'Tekstur',
+		typePass	: 'Loyniorð'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Eginleikar fyri fjaldan teig',
+		name	: 'Navn',
+		value	: 'Virði'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Myndaeginleikar',
+		titleButton	: 'Eginleikar fyri myndaknøtt',
+		menu		: 'Myndaeginleikar',
+		infoTab		: 'Myndaupplýsingar',
+		btnUpload	: 'Send til ambætaran',
+		upload		: 'Send',
+		alt			: 'Alternativur tekstur',
+		lockRatio	: 'Læs lutfallið',
+		resetSize	: 'Upprunastødd',
+		border		: 'Bordi',
+		hSpace		: 'Høgri breddi',
+		vSpace		: 'Vinstri breddi',
+		alertUrl	: 'Rita slóðina til myndina',
+		linkTab		: 'Tilknýti',
+		button2Img	: 'Skal valdi myndaknøttur gerast til vanliga mynd?',
+		img2Button	: 'Skal valda mynd gerast til myndaknøtt?',
+		urlMissing	: 'URL til mynd manglar.',
+		validateBorder	: 'Bordi má vera eitt heiltal.',
+		validateHSpace	: 'HSpace má vera eitt heiltal.',
+		validateVSpace	: 'VSpace má vera eitt heiltal.'
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Flash eginleikar',
+		propertiesTab	: 'Eginleikar',
+		title			: 'Flash eginleikar',
+		chkPlay			: 'Avspælingin byrjar sjálv',
+		chkLoop			: 'Endurspæl',
+		chkMenu			: 'Ger Flash skrá virkna',
+		chkFull			: 'Loyv fullan skerm',
+ 		scale			: 'Skalering',
+		scaleAll		: 'Vís alt',
+		scaleNoBorder	: 'Eingin bordi',
+		scaleFit		: 'Neyv skalering',
+		access			: 'Script atgongd',
+		accessAlways	: 'Altíð',
+		accessSameDomain: 'Sama navnaøki',
+		accessNever		: 'Ongantíð',
+		alignAbsBottom	: 'Abs botnur',
+		alignAbsMiddle	: 'Abs miðja',
+		alignBaseline	: 'Basislinja',
+		alignTextTop	: 'Tekst toppur',
+		quality			: 'Góðska',
+		qualityBest		: 'Besta',
+		qualityHigh		: 'Høg',
+		qualityAutoHigh	: 'Auto høg',
+		qualityMedium	: 'Meðal',
+		qualityAutoLow	: 'Auto Lág',
+		qualityLow		: 'Lág',
+		windowModeWindow: 'Rútur',
+		windowModeOpaque: 'Ikki transparent',
+		windowModeTransparent : 'Transparent',
+		windowMode		: 'Slag av rúti',
+		flashvars		: 'Variablar fyri Flash',
+		bgcolor			: 'Bakgrundslitur',
+		hSpace			: 'Høgri breddi',
+		vSpace			: 'Vinstri breddi',
+		validateSrc		: 'Vinarliga skriva tilknýti (URL)',
+		validateHSpace	: 'HSpace má vera eitt tal.',
+		validateVSpace	: 'VSpace má vera eitt tal.'
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Kanna stavseting',
+		title			: 'Kanna stavseting',
+		notAvailable	: 'Tíverri, ikki tøkt í løtuni.',
+		errorLoading	: 'Feilur við innlesing av application service host: %s.',
+		notInDic		: 'Finst ikki í orðabókini',
+		changeTo		: 'Broyt til',
+		btnIgnore		: 'Forfjóna',
+		btnIgnoreAll	: 'Forfjóna alt',
+		btnReplace		: 'Yvirskriva',
+		btnReplaceAll	: 'Yvirskriva alt',
+		btnUndo			: 'Angra',
+		noSuggestions	: '- Einki uppskot -',
+		progress		: 'Rættstavarin arbeiðir...',
+		noMispell		: 'Rættstavarain liðugur: Eingin feilur funnin',
+		noChanges		: 'Rættstavarain liðugur: Einki orð varð broytt',
+		oneChange		: 'Rættstavarain liðugur: Eitt orð er broytt',
+		manyChanges		: 'Rættstavarain liðugur: %1 orð broytt',
+		ieSpellDownload	: 'Rættstavarin er ikki tøkur í tekstviðgeranum. Vilt tú heinta hann nú?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Smiley',
+		title	: 'Vel Smiley',
+		options : 'Møguleikar fyri Smiley'
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Slóð til elementir',
+		eleTitle : '%1 element'
+	},
+
+	numberedlist	: 'Talmerktur listi',
+	bulletedlist	: 'Punktmerktur listi',
+	indent			: 'Økja reglubrotarinntriv',
+	outdent			: 'Minka reglubrotarinntriv',
+
+	justify :
+	{
+		left	: 'Vinstrasett',
+		center	: 'Miðsett',
+		right	: 'Høgrasett',
+		block	: 'Javnir tekstkantar'
+	},
+
+	blockquote : 'Blockquote',
+
+	clipboard :
+	{
+		title		: 'Innrita',
+		cutError	: 'Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. Vinarliga nýt knappaborðið til at kvetta tekstin (Ctrl/Cmd+X).',
+		copyError	: 'Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (Ctrl/Cmd+C).',
+		pasteMsg	: 'Vinarliga koyr tekstin í hendan rútin við knappaborðinum (<strong>Ctrl/Cmd+V</strong>) og klikk á <strong>Góðtak</strong>.',
+		securityMsg	: 'Trygdaruppseting alnótskagans forðar tekstviðgeranum í beinleiðis atgongd til avritingarminnið. Tygum mugu royna aftur í hesum rútinum.',
+		pasteArea	: 'Avritingarumráði'
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'Teksturin, tú roynir at seta inn, sýnist at stava frá Word. Skal teksturin reinsast fyrst?',
+		toolbar			: 'Innrita frá Word',
+		title			: 'Innrita frá Word',
+		error			: 'Tað eydnaðist ikki at reinsa tekstin vegna ein internan feil'
+	},
+
+	pasteText :
+	{
+		button	: 'Innrita som reinan tekst',
+		title	: 'Innrita som reinan tekst'
+	},
+
+	templates :
+	{
+		button			: 'Skabelónir',
+		title			: 'Innihaldsskabelónir',
+		options : 'Møguleikar fyri Template',
+		insertOption	: 'Yvirskriva núverandi innihald',
+		selectPromptMsg	: 'Vinarliga vel ta skabelón, ið skal opnast í tekstviðgeranum<br>(Hetta yvirskrivar núverandi innihald):',
+		emptyListMsg	: '(Ongar skabelónir tøkar)'
+	},
+
+	showBlocks : 'Vís blokkar',
+
+	stylesCombo :
+	{
+		label		: 'Typografi',
+		panelTitle	: 'Formatterings stílir',
+		panelTitle1	: 'Blokk stílir',
+		panelTitle2	: 'Inline stílir',
+		panelTitle3	: 'Object stílir'
+	},
+
+	format :
+	{
+		label		: 'Skriftsnið',
+		panelTitle	: 'Skriftsnið',
+
+		tag_p		: 'Vanligt',
+		tag_pre		: 'Sniðgivið',
+		tag_address	: 'Adressa',
+		tag_h1		: 'Yvirskrift 1',
+		tag_h2		: 'Yvirskrift 2',
+		tag_h3		: 'Yvirskrift 3',
+		tag_h4		: 'Yvirskrift 4',
+		tag_h5		: 'Yvirskrift 5',
+		tag_h6		: 'Yvirskrift 6',
+		tag_div		: 'Vanligt (DIV)'
+	},
+
+	div :
+	{
+		title				: 'Ger Div Container',
+		toolbar				: 'Ger Div Container',
+		cssClassInputLabel	: 'Stylesheet Classes',
+		styleSelectLabel	: 'Style',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Language Code',
+		inlineStyleInputLabel	: 'Inline Style',
+		advisoryTitleInputLabel	: 'Advisory Title',
+		langDirLabel		: 'Language Direction',
+		langDirLTRLabel		: 'Vinstru til høgru (LTR)',
+		langDirRTLLabel		: 'Høgru til vinstru (RTL)',
+		edit				: 'Redigera Div',
+		remove				: 'Strika Div'
+  	},
+
+	iframe :
+	{
+		title		: 'Møguleikar fyri IFrame',
+		toolbar		: 'IFrame',
+		noUrl		: 'Vinarliga skriva URL til iframe',
+		scrolling	: 'Loyv scrollbars',
+		border		: 'Vís frame kant'
+	},
+
+	font :
+	{
+		label		: 'Skrift',
+		voiceLabel	: 'Skrift',
+		panelTitle	: 'Skrift'
+	},
+
+	fontSize :
+	{
+		label		: 'Skriftstødd',
+		voiceLabel	: 'Skriftstødd',
+		panelTitle	: 'Skriftstødd'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Tekstlitur',
+		bgColorTitle	: 'Bakgrundslitur',
+		panelTitle		: 'Litir',
+		auto			: 'Automatiskt',
+		more			: 'Fleiri litir...'
+	},
+
+	colors :
+	{
+		'000' : 'Svart',
+		'800000' : 'Maroon',
+		'8B4513' : 'Saðilsbrúnt',
+		'2F4F4F' : 'Dark Slate Gray',
+		'008080' : 'Teal',
+		'000080' : 'Navy',
+		'4B0082' : 'Indigo',
+		'696969' : 'Myrkagrátt',
+		'B22222' : 'Fire Brick',
+		'A52A2A' : 'Brúnt',
+		'DAA520' : 'Gullstavur',
+		'006400' : 'Myrkagrønt',
+		'40E0D0' : 'Turquoise',
+		'0000CD' : 'Meðal blátt',
+		'800080' : 'Purple',
+		'808080' : 'Grátt',
+		'F00' : 'Reytt',
+		'FF8C00' : 'Myrkt appelsingult',
+		'FFD700' : 'Gull',
+		'008000' : 'Grønt',
+		'0FF' : 'Cyan',
+		'00F' : 'Blátt',
+		'EE82EE' : 'Violet',
+		'A9A9A9' : 'Døkt grátt',
+		'FFA07A' : 'Ljósur laksur',
+		'FFA500' : 'Appelsingult',
+		'FFFF00' : 'Gult',
+		'00FF00' : 'Lime',
+		'AFEEEE' : 'Pale Turquoise',
+		'ADD8E6' : 'Ljósablátt',
+		'DDA0DD' : 'Plum',
+		'D3D3D3' : 'Ljósagrátt',
+		'FFF0F5' : 'Lavender Blush',
+		'FAEBD7' : 'Klassiskt hvítt',
+		'FFFFE0' : 'Ljósagult',
+		'F0FFF0' : 'Hunangsdøggur',
+		'F0FFFF' : 'Azure',
+		'F0F8FF' : 'Alice Blátt',
+		'E6E6FA' : 'Lavender',
+		'FFF' : 'Hvítt'
+	},
+
+	scayt :
+	{
+		title			: 'Kanna stavseting, meðan tú skrivar',
+		opera_title		: 'Ikki stuðlað í Opera',
+		enable			: 'Loyv SCAYT',
+		disable			: 'Nokta SCAYT',
+		about			: 'Um SCAYT',
+		toggle			: 'Toggle SCAYT',
+		options			: 'Uppseting',
+		langs			: 'Tungumál',
+		moreSuggestions	: 'Fleiri tilráðingar',
+		ignore			: 'Ignorera',
+		ignoreAll		: 'Ignorera alt',
+		addWord			: 'Legg orð afturat',
+		emptyDic		: 'Heiti á orðabók eigur ikki at vera tómt.',
+
+		optionsTab		: 'Uppseting',
+		allCaps			: 'Loyp orð við bert stórum stavum um',
+		ignoreDomainNames : 'loyp økisnøvn um',
+		mixedCase		: 'Loyp orð við blandaðum smáum og stórum stavum um',
+		mixedWithDigits	: 'Loyp orð við tølum um',
+
+		languagesTab	: 'Tungumál',
+
+		dictionariesTab	: 'Orðabøkur',
+		dic_field_name	: 'Orðabókanavn',
+		dic_create		: 'Upprætta nýggja',
+		dic_restore		: 'Endurskapa',
+		dic_delete		: 'Strika',
+		dic_rename		: 'Broyt',
+		dic_info		: 'Upprunaliga er brúkara-orðabókin goymd í eini cookie í tínum egna kaga. Men hesar eru avmarkaðar í stødd. Tá brúkara-orðabókin veksur seg ov stóra til eina cookie, so er møguligt at goyma hana á ambætara okkara. Fyri at goyma persónligu orðabókina á ambætaranum eigur tú at velja eitt navn til tína skuffu. Hevur tú longu goymt eina orðabók, so vinarliga skriva navnið og klikk á knøttin Endurskapa.',
+
+		aboutTab		: 'Um'
+	},
+
+	about :
+	{
+		title		: 'Um CKEditor',
+		dlgTitle	: 'Um CKEditor',
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // MISSING
+		moreInfo	: 'Licens upplýsingar finnast á heimasíðu okkara:',
+		copy		: 'Copyright &copy; $1. All rights reserved.'
+	},
+
+	maximize : 'Maksimera',
+	minimize : 'Minimera',
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor',
+		flash		: 'Flash Animation',
+		iframe		: 'IFrame',
+		hiddenfield	: 'Fjaldur teigur',
+		unknown		: 'Ókent Object'
+	},
+
+	resize : 'Drag fyri at broyta stødd',
+
+	colordialog :
+	{
+		title		: 'Vel lit',
+		options	:	'Litmøguleikar',
+		highlight	: 'Framheva',
+		selected	: 'Valdur litur',
+		clear		: 'Strika'
+	},
+
+	toolbarCollapse	: 'Lat Toolbar aftur',
+	toolbarExpand	: 'Vís Toolbar',
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Tekstkós frá vinstru til høgru',
+		rtl : 'Tekstkós frá høgru til vinstru'
+	},
+
+	docprops :
+	{
+		label : 'Eginleikar fyri dokument',
+		title : 'Eginleikar fyri dokument',
+		design : 'Design', // MISSING
+		meta : 'META-upplýsingar',
+		chooseColor : 'Vel',
+		other : '<annað>',
+		docTitle :	'Síðuheiti',
+		charset : 	'Teknsett koda',
+		charsetOther : 'Onnur teknsett koda',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Miðeuropa',
+		charsetCT : 'Kinesiskt traditionelt (Big5)',
+		charsetCR : 'Cyrilliskt',
+		charsetGR : 'Grikst',
+		charsetJP : 'Japanskt',
+		charsetKR : 'Koreanskt',
+		charsetTR : 'Turkiskt',
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Vestureuropa',
+		docType : 'Dokumentslag yvirskrift',
+		docTypeOther : 'Annað dokumentslag yvirskrift',
+		xhtmlDec : 'Viðfest XHTML deklaratiónir',
+		bgColor : 'Bakgrundslitur',
+		bgImage : 'Leið til bakgrundsmynd (URL)',
+		bgFixed : 'Læst bakgrund (rullar ikki)',
+		txtColor : 'Tekstlitur',
+		margin : 'Síðubreddar',
+		marginTop : 'Ovast',
+		marginLeft : 'Vinstra',
+		marginRight : 'Høgra',
+		marginBottom : 'Niðast',
+		metaKeywords : 'Dokument index lyklaorð (sundurbýtt við komma)',
+		metaDescription : 'Dokumentlýsing',
+		metaAuthor : 'Høvundur',
+		metaCopyright : 'Upphavsrættindi',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

File diff suppressed because it is too large
+ 812 - 0
web/js/ckeditor/_source/lang/fr.js


+ 812 - 0
web/js/ckeditor/_source/lang/gl.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Galician language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['gl'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'Código Fonte',
+	newPage			: 'Nova Páxina',
+	save			: 'Gardar',
+	preview			: 'Vista Previa',
+	cut				: 'Cortar',
+	copy			: 'Copiar',
+	paste			: 'Pegar',
+	print			: 'Imprimir',
+	underline		: 'Sub-raiado',
+	bold			: 'Negrita',
+	italic			: 'Cursiva',
+	selectAll		: 'Seleccionar todo',
+	removeFormat	: 'Eliminar Formato',
+	strike			: 'Tachado',
+	subscript		: 'Subíndice',
+	superscript		: 'Superíndice',
+	horizontalrule	: 'Inserir Liña Horizontal',
+	pagebreak		: 'Inserir Salto de Páxina',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'Eliminar Ligazón',
+	undo			: 'Desfacer',
+	redo			: 'Refacer',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Navegar no Servidor',
+		url				: 'URL',
+		protocol		: 'Protocolo',
+		upload			: 'Carregar',
+		uploadSubmit	: 'Enviar ó Servidor',
+		image			: 'Imaxe',
+		flash			: 'Flash',
+		form			: 'Formulario',
+		checkbox		: 'Cadro de Verificación',
+		radio			: 'Botón de Radio',
+		textField		: 'Campo de Texto',
+		textarea		: 'Área de Texto',
+		hiddenField		: 'Campo Oculto',
+		button			: 'Botón',
+		select			: 'Campo de Selección',
+		imageButton		: 'Botón de Imaxe',
+		notSet			: '<non definido>',
+		id				: 'Id',
+		name			: 'Nome',
+		langDir			: 'Orientación do Idioma',
+		langDirLtr		: 'Esquerda a Dereita (LTR)',
+		langDirRtl		: 'Dereita a Esquerda (RTL)',
+		langCode		: 'Código do Idioma',
+		longDescr		: 'Descrición Completa da URL',
+		cssClass		: 'Clases da Folla de Estilos',
+		advisoryTitle	: 'Título',
+		cssStyle		: 'Estilo',
+		ok				: 'OK',
+		cancel			: 'Cancelar',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'General', // MISSING
+		advancedTab		: 'Advanzado',
+		validateNumberFailed : 'This value is not a number.', // MISSING
+		confirmNewPage	: 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING
+		confirmCancel	: 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Largura',
+		height			: 'Altura',
+		align			: 'Aliñamento',
+		alignLeft		: 'Esquerda',
+		alignRight		: 'Dereita',
+		alignCenter		: 'Centro',
+		alignTop		: 'Tope',
+		alignMiddle		: 'Centro',
+		alignBottom		: 'Pé',
+		invalidHeight	: 'Height must be a number.', // MISSING
+		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Inserir Carácter Especial',
+		title		: 'Seleccione Caracter Especial',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Inserir/Editar Ligazón',
+		other 		: '<outro>',
+		menu		: 'Editar Ligazón',
+		title		: 'Ligazón',
+		info		: 'Información da Ligazón',
+		target		: 'Destino',
+		upload		: 'Carregar',
+		advanced	: 'Advanzado',
+		type		: 'Tipo de Ligazón',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'Referencia nesta páxina',
+		toEmail		: 'E-Mail',
+		targetFrame		: '<frame>',
+		targetPopup		: '<Xanela Emerxente>',
+		targetFrameName	: 'Nome do Marco Destino',
+		targetPopupName	: 'Nome da Xanela Emerxente',
+		popupFeatures	: 'Características da Xanela Emerxente',
+		popupResizable	: 'Resizable', // MISSING
+		popupStatusBar	: 'Barra de Estado',
+		popupLocationBar: 'Barra de Localización',
+		popupToolbar	: 'Barra de Ferramentas',
+		popupMenuBar	: 'Barra de Menú',
+		popupFullScreen	: 'A Toda Pantalla (IE)',
+		popupScrollBars	: 'Barras de Desplazamento',
+		popupDependent	: 'Dependente (Netscape)',
+		popupLeft		: 'Posición Esquerda',
+		popupTop		: 'Posición dende Arriba',
+		id				: 'Id', // MISSING
+		langDir			: 'Orientación do Idioma',
+		langDirLTR		: 'Esquerda a Dereita (LTR)',
+		langDirRTL		: 'Dereita a Esquerda (RTL)',
+		acccessKey		: 'Chave de Acceso',
+		name			: 'Nome',
+		langCode			: 'Orientación do Idioma',
+		tabIndex			: 'Índice de Tabulación',
+		advisoryTitle		: 'Título',
+		advisoryContentType	: 'Tipo de Contido',
+		cssClasses		: 'Clases da Folla de Estilos',
+		charset			: 'Fonte de Caracteres Vinculado',
+		styles			: 'Estilo',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Seleccionar unha Referencia',
+		anchorName		: 'Por Nome de Referencia',
+		anchorId			: 'Por Element Id',
+		emailAddress		: 'Enderezo de E-Mail',
+		emailSubject		: 'Asunto do Mensaxe',
+		emailBody		: 'Corpo do Mensaxe',
+		noAnchors		: '(Non hai referencias disponibles no documento)',
+		noUrl			: 'Por favor, escriba a ligazón URL',
+		noEmail			: 'Por favor, escriba o enderezo de e-mail'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Inserir/Editar Referencia',
+		menu		: 'Propriedades da Referencia',
+		title		: 'Propriedades da Referencia',
+		name		: 'Nome da Referencia',
+		errorName	: 'Por favor, escriba o nome da referencia',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Find and Replace', // MISSING
+		find				: 'Procurar',
+		replace				: 'Substituir',
+		findWhat			: 'Texto a procurar:',
+		replaceWith			: 'Substituir con:',
+		notFoundMsg			: 'Non te atopou o texto indicado.',
+		matchCase			: 'Coincidir Mai./min.',
+		matchWord			: 'Coincidir con toda a palabra',
+		matchCyclic			: 'Match cyclic', // MISSING
+		replaceAll			: 'Substitiur Todo',
+		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tabla',
+		title		: 'Propiedades da Táboa',
+		menu		: 'Propiedades da Táboa',
+		deleteTable	: 'Borrar Táboa',
+		rows		: 'Filas',
+		columns		: 'Columnas',
+		border		: 'Tamaño do Borde',
+		widthPx		: 'pixels',
+		widthPc		: 'percent',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'Marxe entre Celas',
+		cellPad		: 'Marxe interior',
+		caption		: 'Título',
+		summary		: 'Sumario',
+		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 positive number.', // MISSING
+		invalidCellPadding	: 'Cell padding must be a positive number.', // MISSING
+
+		cell :
+		{
+			menu			: 'Cela',
+			insertBefore	: 'Insert Cell Before', // MISSING
+			insertAfter		: 'Insert Cell After', // MISSING
+			deleteCell		: 'Borrar Cela',
+			merge			: 'Unir Celas',
+			mergeRight		: 'Merge Right', // MISSING
+			mergeDown		: 'Merge Down', // MISSING
+			splitHorizontal	: 'Split Cell Horizontally', // MISSING
+			splitVertical	: 'Split Cell Vertically', // MISSING
+			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
+			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
+		},
+
+		row :
+		{
+			menu			: 'Fila',
+			insertBefore	: 'Insert Row Before', // MISSING
+			insertAfter		: 'Insert Row After', // MISSING
+			deleteRow		: 'Borrar Filas'
+		},
+
+		column :
+		{
+			menu			: 'Columna',
+			insertBefore	: 'Insert Column Before', // MISSING
+			insertAfter		: 'Insert Column After', // MISSING
+			deleteColumn	: 'Borrar Columnas'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Propriedades do Botón',
+		text		: 'Texto (Valor)',
+		type		: 'Tipo',
+		typeBtn		: 'Button', // MISSING
+		typeSbm		: 'Submit', // MISSING
+		typeRst		: 'Reset' // MISSING
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Propriedades do Cadro de Verificación',
+		radioTitle	: 'Propriedades do Botón de Radio',
+		value		: 'Valor',
+		selected	: 'Seleccionado'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Propriedades do Formulario',
+		menu		: 'Propriedades do Formulario',
+		action		: 'Acción',
+		method		: 'Método',
+		encoding	: 'Encoding' // MISSING
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Propriedades do Campo de Selección',
+		selectInfo	: 'Info',
+		opAvail		: 'Opcións Disponibles',
+		value		: 'Valor',
+		size		: 'Tamaño',
+		lines		: 'liñas',
+		chkMulti	: 'Permitir múltiples seleccións',
+		opText		: 'Texto',
+		opValue		: 'Valor',
+		btnAdd		: 'Engadir',
+		btnModify	: 'Modificar',
+		btnUp		: 'Subir',
+		btnDown		: 'Baixar',
+		btnSetValue : 'Definir como valor por defecto',
+		btnDelete	: 'Borrar'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Propriedades da Área de Texto',
+		cols		: 'Columnas',
+		rows		: 'Filas'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Propriedades do Campo de Texto',
+		name		: 'Nome',
+		value		: 'Valor',
+		charWidth	: 'Tamaño do Caracter',
+		maxChars	: 'Máximo de Caracteres',
+		type		: 'Tipo',
+		typeText	: 'Texto',
+		typePass	: 'Chave'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Propriedades do Campo Oculto',
+		name	: 'Nome',
+		value	: 'Valor'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Propriedades da Imaxe',
+		titleButton	: 'Propriedades do Botón de Imaxe',
+		menu		: 'Propriedades da Imaxe',
+		infoTab		: 'Información da Imaxe',
+		btnUpload	: 'Enviar ó Servidor',
+		upload		: 'Carregar',
+		alt			: 'Texto Alternativo',
+		lockRatio	: 'Proporcional',
+		resetSize	: 'Tamaño Orixinal',
+		border		: 'Límite',
+		hSpace		: 'Esp. Horiz.',
+		vSpace		: 'Esp. Vert.',
+		alertUrl	: 'Por favor, escriba a URL da imaxe',
+		linkTab		: 'Ligazón',
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Propriedades Flash',
+		propertiesTab	: 'Properties', // MISSING
+		title			: 'Propriedades Flash',
+		chkPlay			: 'Auto Execución',
+		chkLoop			: 'Bucle',
+		chkMenu			: 'Activar Menú Flash',
+		chkFull			: 'Allow Fullscreen', // MISSING
+ 		scale			: 'Escalar',
+		scaleAll		: 'Amosar Todo',
+		scaleNoBorder	: 'Sen Borde',
+		scaleFit		: 'Encaixar axustando',
+		access			: 'Script Access', // MISSING
+		accessAlways	: 'Always', // MISSING
+		accessSameDomain: 'Same domain', // MISSING
+		accessNever		: 'Never', // MISSING
+		alignAbsBottom	: 'Abs Inferior',
+		alignAbsMiddle	: 'Abs Centro',
+		alignBaseline	: 'Liña Base',
+		alignTextTop	: 'Tope do Texto',
+		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
+		bgcolor			: 'Cor do Fondo',
+		hSpace			: 'Esp. Horiz.',
+		vSpace			: 'Esp. Vert.',
+		validateSrc		: 'Por favor, escriba a ligazón URL',
+		validateHSpace	: 'HSpace must be a number.', // MISSING
+		validateVSpace	: 'VSpace must be a number.' // MISSING
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Corrección Ortográfica',
+		title			: 'Spell Check', // MISSING
+		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
+		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		notInDic		: 'Non está no diccionario',
+		changeTo		: 'Cambiar a',
+		btnIgnore		: 'Ignorar',
+		btnIgnoreAll	: 'Ignorar Todas',
+		btnReplace		: 'Substituir',
+		btnReplaceAll	: 'Substituir Todas',
+		btnUndo			: 'Desfacer',
+		noSuggestions	: '- Sen candidatos -',
+		progress		: 'Corrección ortográfica en progreso...',
+		noMispell		: 'Corrección ortográfica rematada: Non se atoparon erros',
+		noChanges		: 'Corrección ortográfica rematada: Non se substituiu nengunha verba',
+		oneChange		: 'Corrección ortográfica rematada: Unha verba substituida',
+		manyChanges		: 'Corrección ortográfica rematada: %1 verbas substituidas',
+		ieSpellDownload	: 'O corrector ortográfico non está instalado. ¿Quere descargalo agora?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Smiley',
+		title	: 'Inserte un Smiley',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element' // MISSING
+	},
+
+	numberedlist	: 'Lista Numerada',
+	bulletedlist	: 'Marcas',
+	indent			: 'Aumentar Sangría',
+	outdent			: 'Disminuir Sangría',
+
+	justify :
+	{
+		left	: 'Aliñar á Esquerda',
+		center	: 'Centrado',
+		right	: 'Aliñar á Dereita',
+		block	: 'Xustificado'
+	},
+
+	blockquote : 'Block Quote', // MISSING
+
+	clipboard :
+	{
+		title		: 'Pegar',
+		cutError	: 'Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de corte. Por favor, use o teclado para iso (Ctrl/Cmd+X).',
+		copyError	: 'Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de copia. Por favor, use o teclado para iso (Ctrl/Cmd+C).',
+		pasteMsg	: 'Por favor, pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e pulse <STRONG>OK</STRONG>.',
+		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.', // MISSING
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar			: 'Pegar dende Word',
+		title			: 'Pegar dende Word',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'Pegar como texto plano',
+		title	: 'Pegar como texto plano'
+	},
+
+	templates :
+	{
+		button			: 'Plantillas',
+		title			: 'Plantillas de Contido',
+		options : 'Template Options', // MISSING
+		insertOption	: 'Replace actual contents', // MISSING
+		selectPromptMsg	: 'Por favor, seleccione a plantilla a abrir no editor<br>(o contido actual perderase):',
+		emptyListMsg	: '(Non hai plantillas definidas)'
+	},
+
+	showBlocks : 'Show Blocks', // MISSING
+
+	stylesCombo :
+	{
+		label		: 'Estilo',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles', // MISSING
+		panelTitle2	: 'Inline Styles', // MISSING
+		panelTitle3	: 'Object Styles' // MISSING
+	},
+
+	format :
+	{
+		label		: 'Formato',
+		panelTitle	: 'Formato',
+
+		tag_p		: 'Normal',
+		tag_pre		: 'Formateado',
+		tag_address	: 'Enderezo',
+		tag_h1		: 'Enacabezado 1',
+		tag_h2		: 'Encabezado 2',
+		tag_h3		: 'Encabezado 3',
+		tag_h4		: 'Encabezado 4',
+		tag_h5		: 'Encabezado 5',
+		tag_h6		: 'Encabezado 6',
+		tag_div		: 'Paragraph (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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Tipo',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'Tipo'
+	},
+
+	fontSize :
+	{
+		label		: 'Tamaño',
+		voiceLabel	: 'Font Size', // MISSING
+		panelTitle	: 'Tamaño'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Cor do Texto',
+		bgColorTitle	: 'Cor do Fondo',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'Automático',
+		more			: 'Máis Cores...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor', // MISSING
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // 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
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor', // MISSING
+		flash		: 'Flash Animation', // MISSING
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Propriedades do Documento',
+		title : 'Propriedades do Documento',
+		design : 'Design', // MISSING
+		meta : 'Meta Tags', // MISSING
+		chooseColor : 'Choose', // MISSING
+		other : '<outro>',
+		docTitle :	'Título da Páxina',
+		charset : 	'Codificación do Xogo de Caracteres',
+		charsetOther : 'Outra Codificación do Xogo de Caracteres',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Central European', // MISSING
+		charsetCT : 'Chinese Traditional (Big5)', // MISSING
+		charsetCR : 'Cyrillic', // MISSING
+		charsetGR : 'Greek', // MISSING
+		charsetJP : 'Japanese', // MISSING
+		charsetKR : 'Korean', // MISSING
+		charsetTR : 'Turkish', // MISSING
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Western European', // MISSING
+		docType : 'Encabezado do Tipo de Documento',
+		docTypeOther : 'Outro Encabezado do Tipo de Documento',
+		xhtmlDec : 'Incluir Declaracións XHTML',
+		bgColor : 'Cor de Fondo',
+		bgImage : 'URL da Imaxe de Fondo',
+		bgFixed : 'Fondo Fixo',
+		txtColor : 'Cor do Texto',
+		margin : 'Marxes da Páxina',
+		marginTop : 'Arriba',
+		marginLeft : 'Esquerda',
+		marginRight : 'Dereita',
+		marginBottom : 'Abaixo',
+		metaKeywords : 'Palabras Chave de Indexación do Documento (separadas por comas)',
+		metaDescription : 'Descripción do Documento',
+		metaAuthor : 'Autor',
+		metaCopyright : 'Copyright', // MISSING
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/gu.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Gujarati language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['gu'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'મૂળ કે પ્રાથમિક દસ્તાવેજ',
+	newPage			: 'નવુ પાનું',
+	save			: 'સેવ',
+	preview			: 'પૂર્વદર્શન',
+	cut				: 'કાપવું',
+	copy			: 'નકલ',
+	paste			: 'પેસ્ટ',
+	print			: 'પ્રિન્ટ',
+	underline		: 'અન્ડર્લાઇન, નીચે લીટી',
+	bold			: 'બોલ્ડ/સ્પષ્ટ',
+	italic			: 'ઇટેલિક, ત્રાંસા',
+	selectAll		: 'બઘું પસંદ કરવું',
+	removeFormat	: 'ફૉર્મટ કાઢવું',
+	strike			: 'છેકી નાખવું',
+	subscript		: 'એક ચિહ્નની નીચે કરેલું બીજું ચિહ્ન',
+	superscript		: 'એક ચિહ્ન ઉપર કરેલું બીજું ચિહ્ન.',
+	horizontalrule	: 'સમસ્તરીય રેખા ઇન્સર્ટ/દાખલ કરવી',
+	pagebreak		: 'ઇન્સર્ટ પેજબ્રેક/પાનાને અલગ કરવું/દાખલ કરવું',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'લિંક કાઢવી',
+	undo			: 'રદ કરવું; પહેલાં હતી એવી સ્થિતિ પાછી લાવવી',
+	redo			: 'રિડૂ; પછી હતી એવી સ્થિતિ પાછી લાવવી',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'સર્વર બ્રાઉઝ કરો',
+		url				: 'URL',
+		protocol		: 'પ્રોટોકૉલ',
+		upload			: 'અપલોડ',
+		uploadSubmit	: 'આ સર્વરને મોકલવું',
+		image			: 'ચિત્ર',
+		flash			: 'ફ્લૅશ',
+		form			: 'ફૉર્મ/પત્રક',
+		checkbox		: 'ચેક બોક્સ',
+		radio			: 'રેડિઓ બટન',
+		textField		: 'ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્ર',
+		textarea		: 'ટેક્સ્ટ એરિઆ, શબ્દ વિસ્તાર',
+		hiddenField		: 'ગુપ્ત ક્ષેત્ર',
+		button			: 'બટન',
+		select			: 'પસંદગી ક્ષેત્ર',
+		imageButton		: 'ચિત્ર બટન',
+		notSet			: '<સેટ નથી>',
+		id				: 'Id',
+		name			: 'નામ',
+		langDir			: 'ભાષા લેખવાની પદ્ધતિ',
+		langDirLtr		: 'ડાબે થી જમણે (LTR)',
+		langDirRtl		: 'જમણે થી ડાબે (RTL)',
+		langCode		: 'ભાષા કોડ',
+		longDescr		: 'વધારે માહિતી માટે URL',
+		cssClass		: 'સ્ટાઇલ-શીટ ક્લાસ',
+		advisoryTitle	: 'મુખ્ય મથાળું',
+		cssStyle		: 'સ્ટાઇલ',
+		ok				: 'ઠીક છે',
+		cancel			: 'રદ કરવું',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'General', // MISSING
+		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
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'પહોળાઈ',
+		height			: 'ઊંચાઈ',
+		align			: 'લાઇનદોરીમાં ગોઠવવું',
+		alignLeft		: 'ડાબી બાજુ ગોઠવવું',
+		alignRight		: 'જમણી',
+		alignCenter		: 'મધ્ય સેન્ટર',
+		alignTop		: 'ઉપર',
+		alignMiddle		: 'વચ્ચે',
+		alignBottom		: 'નીચે',
+		invalidHeight	: 'Height must be a number.', // MISSING
+		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'વિશિષ્ટ અક્ષર ઇન્સર્ટ/દાખલ કરવું',
+		title		: 'સ્પેશિઅલ વિશિષ્ટ અક્ષર પસંદ કરો',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'લિંક ઇન્સર્ટ/દાખલ કરવી',
+		other 		: '<other>', // MISSING
+		menu		: ' લિંક એડિટ/માં ફેરફાર કરવો',
+		title		: 'લિંક',
+		info		: 'લિંક ઇન્ફૉ ટૅબ',
+		target		: 'ટાર્ગેટ/લક્ષ્ય',
+		upload		: 'અપલોડ',
+		advanced	: 'અડ્વાન્સડ',
+		type		: 'લિંક પ્રકાર',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'આ પેજનો ઍંકર',
+		toEmail		: 'ઈ-મેલ',
+		targetFrame		: '<ફ્રેમ>',
+		targetPopup		: '<પૉપ-અપ વિન્ડો>',
+		targetFrameName	: 'ટાર્ગેટ ફ્રેમ નું નામ',
+		targetPopupName	: 'પૉપ-અપ વિન્ડો નું નામ',
+		popupFeatures	: 'પૉપ-અપ વિન્ડો ફીચરસૅ',
+		popupResizable	: 'Resizable', // MISSING
+		popupStatusBar	: 'સ્ટૅટસ બાર',
+		popupLocationBar: 'લોકેશન બાર',
+		popupToolbar	: 'ટૂલ બાર',
+		popupMenuBar	: 'મેન્યૂ બાર',
+		popupFullScreen	: 'ફુલ સ્ક્રીન (IE)',
+		popupScrollBars	: 'સ્ક્રોલ બાર',
+		popupDependent	: 'ડિપેન્ડન્ટ (Netscape)',
+		popupLeft		: 'ડાબી બાજુ',
+		popupTop		: 'જમણી બાજુ',
+		id				: 'Id', // MISSING
+		langDir			: 'ભાષા લેખવાની પદ્ધતિ',
+		langDirLTR		: 'ડાબે થી જમણે (LTR)',
+		langDirRTL		: 'જમણે થી ડાબે (RTL)',
+		acccessKey		: 'ઍક્સેસ કી',
+		name			: 'નામ',
+		langCode			: 'ભાષા લેખવાની પદ્ધતિ',
+		tabIndex			: 'ટૅબ ઇન્ડેક્સ',
+		advisoryTitle		: 'મુખ્ય મથાળું',
+		advisoryContentType	: 'મુખ્ય કન્ટેન્ટ પ્રકાર',
+		cssClasses		: 'સ્ટાઇલ-શીટ ક્લાસ',
+		charset			: 'લિંક રિસૉર્સ કૅરિક્ટર સેટ',
+		styles			: 'સ્ટાઇલ',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'ઍંકર પસંદ કરો',
+		anchorName		: 'ઍંકર નામથી પસંદ કરો',
+		anchorId			: 'ઍંકર એલિમન્ટ Id થી પસંદ કરો',
+		emailAddress		: 'ઈ-મેલ સરનામું',
+		emailSubject		: 'ઈ-મેલ વિષય',
+		emailBody		: 'સંદેશ',
+		noAnchors		: '(ડૉક્યુમન્ટમાં ઍંકરની સંખ્યા)',
+		noUrl			: 'લિંક  URL ટાઇપ કરો',
+		noEmail			: 'ઈ-મેલ સરનામું ટાઇપ કરો'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'ઍંકર ઇન્સર્ટ/દાખલ કરવી',
+		menu		: 'ઍંકરના ગુણ',
+		title		: 'ઍંકરના ગુણ',
+		name		: 'ઍંકરનું નામ',
+		errorName	: 'ઍંકરનું નામ ટાઈપ કરો',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'શોધવું અને બદલવું',
+		find				: 'શોધવું',
+		replace				: 'રિપ્લેસ/બદલવું',
+		findWhat			: 'આ શોધો',
+		replaceWith			: 'આનાથી બદલો',
+		notFoundMsg			: 'તમે શોધેલી ટેક્સ્ટ નથી મળી',
+		matchCase			: 'કેસ સરખા રાખો',
+		matchWord			: 'બઘા શબ્દ સરખા રાખો',
+		matchCyclic			: 'Match cyclic', // MISSING
+		replaceAll			: 'બઘા બદલી ',
+		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'ટેબલ, કોઠો',
+		title		: 'ટેબલ, કોઠાનું મથાળું',
+		menu		: 'ટેબલ, કોઠાનું મથાળું',
+		deleteTable	: 'કોઠો ડિલીટ/કાઢી નાખવું',
+		rows		: 'પંક્તિના ખાના',
+		columns		: 'કૉલમ/ઊભી કટાર',
+		border		: 'કોઠાની બાજુ(બોર્ડર) સાઇઝ',
+		widthPx		: 'પિકસલ',
+		widthPc		: 'પ્રતિશત',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'સેલ અંતર',
+		cellPad		: 'સેલ પૅડિંગ',
+		caption		: 'મથાળું/કૅપ્શન ',
+		summary		: 'ટૂંકો એહેવાલ',
+		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 positive number.', // MISSING
+		invalidCellPadding	: 'Cell padding must be a positive number.', // MISSING
+
+		cell :
+		{
+			menu			: 'કોષના ખાના',
+			insertBefore	: 'પહેલાં કોષ ઉમેરવો',
+			insertAfter		: 'પછી કોષ ઉમેરવો',
+			deleteCell		: 'કોષ ડિલીટ/કાઢી નાખવો',
+			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
+			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
+		},
+
+		row :
+		{
+			menu			: 'પંક્તિના ખાના',
+			insertBefore	: 'પહેલાં પંક્તિ ઉમેરવી',
+			insertAfter		: 'પછી પંક્તિ ઉમેરવી',
+			deleteRow		: 'પંક્તિઓ ડિલીટ/કાઢી નાખવી'
+		},
+
+		column :
+		{
+			menu			: 'કૉલમ/ઊભી કટાર',
+			insertBefore	: 'પહેલાં કૉલમ/ઊભી કટાર ઉમેરવી',
+			insertAfter		: 'પછી કૉલમ/ઊભી કટાર ઉમેરવી',
+			deleteColumn	: 'કૉલમ/ઊભી કટાર ડિલીટ/કાઢી નાખવી'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'બટનના ગુણ',
+		text		: 'ટેક્સ્ટ (વૅલ્યૂ)',
+		type		: 'પ્રકાર',
+		typeBtn		: 'બટન',
+		typeSbm		: 'સબ્મિટ',
+		typeRst		: 'રિસેટ'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'ચેક બોક્સ ગુણ',
+		radioTitle	: 'રેડિઓ બટનના ગુણ',
+		value		: 'વૅલ્યૂ',
+		selected	: 'સિલેક્ટેડ'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'ફૉર્મ/પત્રકના ગુણ',
+		menu		: 'ફૉર્મ/પત્રકના ગુણ',
+		action		: 'ક્રિયા',
+		method		: 'પદ્ધતિ',
+		encoding	: 'Encoding' // MISSING
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'પસંદગી ક્ષેત્રના ગુણ',
+		selectInfo	: 'સૂચના',
+		opAvail		: 'ઉપલબ્ધ વિકલ્પ',
+		value		: 'વૅલ્યૂ',
+		size		: 'સાઇઝ',
+		lines		: 'લીટીઓ',
+		chkMulti	: 'એકથી વધારે પસંદ કરી શકો',
+		opText		: 'ટેક્સ્ટ',
+		opValue		: 'વૅલ્યૂ',
+		btnAdd		: 'ઉમેરવું',
+		btnModify	: 'બદલવું',
+		btnUp		: 'ઉપર',
+		btnDown		: 'નીચે',
+		btnSetValue : 'પસંદ કરલી વૅલ્યૂ સેટ કરો',
+		btnDelete	: 'રદ કરવું'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'ટેક્સ્ટ એઅરિઆ, શબ્દ વિસ્તારના ગુણ',
+		cols		: 'કૉલમ/ઊભી કટાર',
+		rows		: 'પંક્તિઓ'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્રના ગુણ',
+		name		: 'નામ',
+		value		: 'વૅલ્યૂ',
+		charWidth	: 'કેરેક્ટરની પહોળાઈ',
+		maxChars	: 'અધિકતમ કેરેક્ટર',
+		type		: 'ટાઇપ',
+		typeText	: 'ટેક્સ્ટ',
+		typePass	: 'પાસવર્ડ'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'ગુપ્ત ક્ષેત્રના ગુણ',
+		name	: 'નામ',
+		value	: 'વૅલ્યૂ'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'ચિત્રના ગુણ',
+		titleButton	: 'ચિત્ર બટનના ગુણ',
+		menu		: 'ચિત્રના ગુણ',
+		infoTab		: 'ચિત્ર ની જાણકારી',
+		btnUpload	: 'આ સર્વરને મોકલવું',
+		upload		: 'અપલોડ',
+		alt			: 'ઑલ્ટર્નટ ટેક્સ્ટ',
+		lockRatio	: 'લૉક ગુણોત્તર',
+		resetSize	: 'રીસેટ સાઇઝ',
+		border		: 'બોર્ડર',
+		hSpace		: 'સમસ્તરીય જગ્યા',
+		vSpace		: 'લંબરૂપ જગ્યા',
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'ફ્લૅશના ગુણ',
+		propertiesTab	: 'Properties', // MISSING
+		title			: 'ફ્લૅશ ગુણ',
+		chkPlay			: 'ઑટો/સ્વયં પ્લે',
+		chkLoop			: 'લૂપ',
+		chkMenu			: 'ફ્લૅશ મેન્યૂ નો પ્રયોગ કરો',
+		chkFull			: 'Allow Fullscreen', // MISSING
+ 		scale			: 'સ્કેલ',
+		scaleAll		: 'સ્કેલ ઓલ/બધુ બતાવો',
+		scaleNoBorder	: 'સ્કેલ બોર્ડર વગર',
+		scaleFit		: 'સ્કેલ એકદમ ફીટ',
+		access			: 'Script Access', // MISSING
+		accessAlways	: 'Always', // MISSING
+		accessSameDomain: 'Same domain', // MISSING
+		accessNever		: 'Never', // MISSING
+		alignAbsBottom	: 'Abs નીચે',
+		alignAbsMiddle	: 'Abs ઉપર',
+		alignBaseline	: 'આધાર લીટી',
+		alignTextTop	: 'ટેક્સ્ટ ઉપર',
+		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
+		bgcolor			: 'બૅકગ્રાઉન્ડ રંગ,',
+		hSpace			: 'સમસ્તરીય જગ્યા',
+		vSpace			: 'લંબરૂપ જગ્યા',
+		validateSrc		: 'લિંક  URL ટાઇપ કરો',
+		validateHSpace	: 'HSpace must be a number.', // MISSING
+		validateVSpace	: 'VSpace must be a number.' // MISSING
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'જોડણી (સ્પેલિંગ) તપાસવી',
+		title			: 'Spell Check', // MISSING
+		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
+		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		notInDic		: 'શબ્દકોશમાં નથી',
+		changeTo		: 'આનાથી બદલવું',
+		btnIgnore		: 'ઇગ્નોર/અવગણના કરવી',
+		btnIgnoreAll	: 'બધાની ઇગ્નોર/અવગણના કરવી',
+		btnReplace		: 'બદલવું',
+		btnReplaceAll	: 'બધા બદલી કરો',
+		btnUndo			: 'અન્ડૂ',
+		noSuggestions	: '- કઇ સજેશન નથી -',
+		progress		: 'શબ્દની જોડણી/સ્પેલ ચેક ચાલુ છે...',
+		noMispell		: 'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: ખોટી જોડણી મળી નથી',
+		noChanges		: 'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એકપણ શબ્દ બદલયો નથી',
+		oneChange		: 'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: એક શબ્દ બદલયો છે',
+		manyChanges		: 'શબ્દની જોડણી/સ્પેલ ચેક પૂર્ણ: %1 શબ્દ બદલયા છે',
+		ieSpellDownload	: 'સ્પેલ-ચેકર ઇન્સ્ટોલ નથી. શું તમે ડાઉનલોડ કરવા માંગો છો?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'સ્માઇલી',
+		title	: 'સ્માઇલી  પસંદ કરો',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element' // MISSING
+	},
+
+	numberedlist	: 'સંખ્યાંકન સૂચિ',
+	bulletedlist	: 'બુલેટ સૂચિ',
+	indent			: 'ઇન્ડેન્ટ, લીટીના આરંભમાં જગ્યા વધારવી',
+	outdent			: 'ઇન્ડેન્ટ લીટીના આરંભમાં જગ્યા ઘટાડવી',
+
+	justify :
+	{
+		left	: 'ડાબી બાજુએ/બાજુ તરફ',
+		center	: 'સંકેંદ્રણ/સેંટરિંગ',
+		right	: 'જમણી બાજુએ/બાજુ તરફ',
+		block	: 'બ્લૉક, અંતરાય જસ્ટિફાઇ'
+	},
+
+	blockquote : 'બ્લૉક-કોટ, અવતરણચિહ્નો',
+
+	clipboard :
+	{
+		title		: 'પેસ્ટ',
+		cutError	: 'તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+X) નો ઉપયોગ કરો.',
+		copyError	: 'તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી.  (Ctrl/Cmd+C) का प्रयोग करें।',
+		pasteMsg	: 'Ctrl/Cmd+V નો પ્રયોગ કરી પેસ્ટ કરો',
+		securityMsg	: 'તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસના કારણે,એડિટર તમારા કિલ્પબોર્ડ ડેટા ને કોપી નથી કરી શકતો. તમારે આ વિન્ડોમાં ફરીથી પેસ્ટ કરવું પડશે.',
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar			: 'પેસ્ટ (વડૅ ટેક્સ્ટ)',
+		title			: 'પેસ્ટ (વડૅ ટેક્સ્ટ)',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'પેસ્ટ (ટેક્સ્ટ)',
+		title	: 'પેસ્ટ (ટેક્સ્ટ)'
+	},
+
+	templates :
+	{
+		button			: 'ટેમ્પ્લેટ',
+		title			: 'કન્ટેન્ટ ટેમ્પ્લેટ',
+		options : 'Template Options', // MISSING
+		insertOption	: 'મૂળ શબ્દને બદલો',
+		selectPromptMsg	: 'એડિટરમાં ઓપન કરવા ટેમ્પ્લેટ પસંદ કરો (વર્તમાન કન્ટેન્ટ સેવ નહીં થાય):',
+		emptyListMsg	: '(કોઈ ટેમ્પ્લેટ ડિફાઇન નથી)'
+	},
+
+	showBlocks : 'બ્લૉક બતાવવું',
+
+	stylesCombo :
+	{
+		label		: 'શૈલી/રીત',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles', // MISSING
+		panelTitle2	: 'Inline Styles', // MISSING
+		panelTitle3	: 'Object Styles' // MISSING
+	},
+
+	format :
+	{
+		label		: 'ફૉન્ટ ફૉર્મટ, રચનાની શૈલી',
+		panelTitle	: 'ફૉન્ટ ફૉર્મટ, રચનાની શૈલી',
+
+		tag_p		: 'સામાન્ય',
+		tag_pre		: 'ફૉર્મટેડ',
+		tag_address	: 'સરનામું',
+		tag_h1		: 'શીર્ષક 1',
+		tag_h2		: 'શીર્ષક 2',
+		tag_h3		: 'શીર્ષક 3',
+		tag_h4		: 'શીર્ષક 4',
+		tag_h5		: 'શીર્ષક 5',
+		tag_h6		: 'શીર્ષક 6',
+		tag_div		: 'શીર્ષક (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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'ફૉન્ટ',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'ફૉન્ટ'
+	},
+
+	fontSize :
+	{
+		label		: 'ફૉન્ટ સાઇઝ/કદ',
+		voiceLabel	: 'Font Size', // MISSING
+		panelTitle	: 'ફૉન્ટ સાઇઝ/કદ'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'શબ્દનો રંગ',
+		bgColorTitle	: 'બૅકગ્રાઉન્ડ રંગ,',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'સ્વચાલિત',
+		more			: 'ઔર રંગ...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor', // MISSING
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // 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
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor', // MISSING
+		flash		: 'Flash Animation', // MISSING
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'ડૉક્યુમન્ટ ગુણ/પ્રૉપર્ટિઝ',
+		title : 'ડૉક્યુમન્ટ ગુણ/પ્રૉપર્ટિઝ',
+		design : 'Design', // MISSING
+		meta : 'મેટાડૅટા',
+		chooseColor : 'Choose', // MISSING
+		other : '<other>',
+		docTitle :	'પેજ મથાળું/ટાઇટલ',
+		charset : 	'કેરેક્ટર સેટ એન્કોડિંગ',
+		charsetOther : 'અન્ય કેરેક્ટર સેટ એન્કોડિંગ',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'મધ્ય યુરોપિઅન (Central European)',
+		charsetCT : 'ચાઇનીઝ (Chinese Traditional Big5)',
+		charsetCR : 'સિરીલિક (Cyrillic)',
+		charsetGR : 'ગ્રીક (Greek)',
+		charsetJP : 'જાપાનિઝ (Japanese)',
+		charsetKR : 'કોરીયન (Korean)',
+		charsetTR : 'ટર્કિ (Turkish)',
+		charsetUN : 'યૂનિકોડ (UTF-8)',
+		charsetWE : 'પશ્ચિમ યુરોપિઅન (Western European)',
+		docType : 'ડૉક્યુમન્ટ પ્રકાર શીર્ષક',
+		docTypeOther : 'અન્ય ડૉક્યુમન્ટ પ્રકાર શીર્ષક',
+		xhtmlDec : 'XHTML સૂચના સમાવિષ્ટ કરવી',
+		bgColor : 'બૅકગ્રાઉન્ડ રંગ',
+		bgImage : 'બૅકગ્રાઉન્ડ ચિત્ર URL',
+		bgFixed : 'સ્ક્રોલ ન થાય તેવું બૅકગ્રાઉન્ડ',
+		txtColor : 'શબ્દનો રંગ',
+		margin : 'પેજ માર્જિન',
+		marginTop : 'ઉપર',
+		marginLeft : 'ડાબી',
+		marginRight : 'જમણી',
+		marginBottom : 'નીચે',
+		metaKeywords : 'ડૉક્યુમન્ટ ઇન્ડેક્સ સંકેતશબ્દ (અલ્પવિરામ (,) થી અલગ કરો)',
+		metaDescription : 'ડૉક્યુમન્ટ વર્ણન',
+		metaAuthor : 'લેખક',
+		metaCopyright : 'કૉપિરાઇટ',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/he.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Hebrew language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['he'] =
+{
+	/**
+	 * 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 : 'rtl',
+
+	/*
+	 * Screenreader titles. Please note that screenreaders are not always capable
+	 * of reading non-English words. So be careful while translating it.
+	 */
+	editorTitle : 'עורך טקסט עשיר, %1, לחץ אלט (ALT) + 0 לעזרה.',
+
+	// ARIA descriptions.
+	toolbars	: 'סרגלי כלים של העורך',
+	editor		: 'עורך טקסט עשיר',
+
+	// Toolbar buttons without dialogs.
+	source			: 'מקור',
+	newPage			: 'דף חדש',
+	save			: 'שמירה',
+	preview			: 'תצוגה מקדימה',
+	cut				: 'גזירה',
+	copy			: 'העתקה',
+	paste			: 'הדבקה',
+	print			: 'הדפסה',
+	underline		: 'קו תחתון',
+	bold			: 'מודגש',
+	italic			: 'נטוי',
+	selectAll		: 'בחירת הכל',
+	removeFormat	: 'הסרת העיצוב',
+	strike			: 'כתיב מחוק',
+	subscript		: 'כתיב תחתון',
+	superscript		: 'כתיב עליון',
+	horizontalrule	: 'הוספת קו אופקי',
+	pagebreak		: 'הוספת שבירת דף',
+	pagebreakAlt		: 'שבירת דף',
+	unlink			: 'הסרת הקישור',
+	undo			: 'ביטול צעד אחרון',
+	redo			: 'חזרה על צעד אחרון',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'סייר השרת',
+		url				: 'כתובת (URL)',
+		protocol		: 'פרוטוקול',
+		upload			: 'העלאה',
+		uploadSubmit	: 'שליחה לשרת',
+		image			: 'תמונה',
+		flash			: 'פלאש',
+		form			: 'טופס',
+		checkbox		: 'תיבת סימון',
+		radio			: 'לחצן אפשרויות',
+		textField		: 'שדה טקסט',
+		textarea		: 'איזור טקסט',
+		hiddenField		: 'שדה חבוי',
+		button			: 'כפתור',
+		select			: 'שדה בחירה',
+		imageButton		: 'כפתור תמונה',
+		notSet			: '<לא נקבע>',
+		id				: 'זיהוי (ID)',
+		name			: 'שם',
+		langDir			: 'כיוון שפה',
+		langDirLtr		: 'שמאל לימין (LTR)',
+		langDirRtl		: 'ימין לשמאל (RTL)',
+		langCode		: 'קוד שפה',
+		longDescr		: 'קישור לתיאור מפורט',
+		cssClass		: 'מחלקת עיצוב (CSS Class)',
+		advisoryTitle	: 'כותרת מוצעת',
+		cssStyle		: 'סגנון',
+		ok				: 'אישור',
+		cancel			: 'ביטול',
+		close			: 'סגירה',
+		preview			: 'תצוגה מקדימה',
+		generalTab		: 'כללי',
+		advancedTab		: 'אפשרויות מתקדמות',
+		validateNumberFailed : 'הערך חייב להיות מספרי.',
+		confirmNewPage	: 'כל השינויים שלא נשמרו יאבדו. האם להעלות דף חדש?',
+		confirmCancel	: 'חלק מהאפשרויות שונו, האם לסגור את הדיאלוג?',
+		options			: 'אפשרויות',
+		target			: 'מטרה',
+		targetNew		: 'חלון חדש (_blank)',
+		targetTop		: 'החלון העליון ביותר (_top)',
+		targetSelf		: 'אותו חלון (_self)',
+		targetParent	: 'חלון האב (_parent)',
+		langDirLTR		: 'שמאל לימין (LTR)',
+		langDirRTL		: 'ימין לשמאל (RTL)',
+		styles			: 'סגנון',
+		cssClasses		: 'מחלקות גליונות סגנון',
+		width			: 'רוחב',
+		height			: 'גובה',
+		align			: 'יישור',
+		alignLeft		: 'לשמאל',
+		alignRight		: 'לימין',
+		alignCenter		: 'מרכז',
+		alignTop		: 'למעלה',
+		alignMiddle		: 'לאמצע',
+		alignBottom		: 'לתחתית',
+		invalidHeight	: 'הגובה חייב להיות מספר.',
+		invalidWidth	: 'הרוחב חייב להיות מספר.',
+		invalidCssLength	: 'הערך שצוין לשדה "%1" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של CSS (px, %, in, cm, mm, em, ex, pt, או pc).',
+		invalidHtmlLength	: 'הערך שצוין לשדה "%1" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של HTML (px או %).',
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, לא זמין</span>'
+	},
+
+	contextmenu :
+	{
+		options : 'אפשרויות תפריט ההקשר'
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'הוספת תו מיוחד',
+		title		: 'בחירת תו מיוחד',
+		options : 'אפשרויות תווים מיוחדים'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'הוספת/עריכת קישור',
+		other 		: '<אחר>',
+		menu		: 'מאפייני קישור',
+		title		: 'קישור',
+		info		: 'מידע על הקישור',
+		target		: 'מטרה',
+		upload		: 'העלאה',
+		advanced	: 'אפשרויות מתקדמות',
+		type		: 'סוג קישור',
+		toUrl		: 'כתובת (URL)',
+		toAnchor	: 'עוגן בעמוד זה',
+		toEmail		: 'דוא"ל',
+		targetFrame		: '<מסגרת>',
+		targetPopup		: '<חלון קופץ>',
+		targetFrameName	: 'שם מסגרת היעד',
+		targetPopupName	: 'שם החלון הקופץ',
+		popupFeatures	: 'תכונות החלון הקופץ',
+		popupResizable	: 'שינוי גודל',
+		popupStatusBar	: 'סרגל חיווי',
+		popupLocationBar: 'סרגל כתובת',
+		popupToolbar	: 'סרגל הכלים',
+		popupMenuBar	: 'סרגל תפריט',
+		popupFullScreen	: 'מסך מלא (IE)',
+		popupScrollBars	: 'ניתן לגלילה',
+		popupDependent	: 'תלוי (Netscape)',
+		popupLeft		: 'מיקום צד שמאל',
+		popupTop		: 'מיקום צד עליון',
+		id				: 'זיהוי (ID)',
+		langDir			: 'כיוון שפה',
+		langDirLTR		: 'שמאל לימין (LTR)',
+		langDirRTL		: 'ימין לשמאל (RTL)',
+		acccessKey		: 'מקש גישה',
+		name			: 'שם',
+		langCode			: 'קוד שפה',
+		tabIndex			: 'מספר טאב',
+		advisoryTitle		: 'כותרת מוצעת',
+		advisoryContentType	: 'Content Type מוצע',
+		cssClasses		: 'גיליונות עיצוב קבוצות',
+		charset			: 'קידוד המשאב המקושר',
+		styles			: 'סגנון',
+		rel			: 'קשר גומלין',
+		selectAnchor		: 'בחירת עוגן',
+		anchorName		: 'עפ"י שם העוגן',
+		anchorId			: 'עפ"י זיהוי (ID) האלמנט',
+		emailAddress		: 'כתובת הדוא"ל',
+		emailSubject		: 'נושא ההודעה',
+		emailBody		: 'גוף ההודעה',
+		noAnchors		: '(אין עוגנים זמינים בדף)',
+		noUrl			: 'יש להקליד את כתובת הקישור (URL)',
+		noEmail			: 'יש להקליד את כתובת הדוא"ל'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'הוספת/עריכת נקודת עיגון',
+		menu		: 'מאפייני נקודת עיגון',
+		title		: 'מאפייני נקודת עיגון',
+		name		: 'שם לנקודת עיגון',
+		errorName	: 'יש להקליד שם לנקודת עיגון',
+		remove		: 'מחיקת נקודת עיגון'
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'תכונות רשימה ממוספרת',
+		bulletedTitle		: 'תכונות רשימת תבליטים',
+		type				: 'סוג',
+		start				: 'תחילת מספור',
+		validateStartNumber				:'שדה תחילת המספור חייב להכיל מספר שלם.',
+		circle				: 'עיגול ריק',
+		disc				: 'עיגול מלא',
+		square				: 'ריבוע',
+		none				: 'ללא',
+		notset				: '<לא נקבע>',
+		armenian			: 'ספרות ארמניות',
+		georgian			: 'ספרות גיאורגיות (an, ban, gan וכו\')',
+		lowerRoman			: 'ספירה רומית באותיות קטנות (i, ii, iii, iv, v וכו\')',
+		upperRoman			: 'ספירה רומיות באותיות גדולות (I, II, III, IV, V וכו\')',
+		lowerAlpha			: 'אותיות אנגליות קטנות (a, b, c, d, e וכו\')',
+		upperAlpha			: 'אותיות אנגליות גדולות (A, B, C, D, E וכו\')',
+		lowerGreek			: 'אותיות יווניות קטנות (alpha, beta, gamma וכו\')',
+		decimal				: 'ספרות (1, 2, 3 וכו\')',
+		decimalLeadingZero	: 'ספרות עם 0 בהתחלה (01, 02, 03 וכו\')'
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'חיפוש והחלפה',
+		find				: 'חיפוש',
+		replace				: 'החלפה',
+		findWhat			: 'חיפוש מחרוזת:',
+		replaceWith			: 'החלפה במחרוזת:',
+		notFoundMsg			: 'הטקסט המבוקש לא נמצא.',
+		matchCase			: 'הבחנה בין אותיות רשיות לקטנות (Case)',
+		matchWord			: 'התאמה למילה המלאה',
+		matchCyclic			: 'התאמה מחזורית',
+		replaceAll			: 'החלפה בכל העמוד',
+		replaceSuccessMsg	: '%1 טקסטים הוחלפו.'
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'טבלה',
+		title		: 'מאפייני טבלה',
+		menu		: 'מאפייני טבלה',
+		deleteTable	: 'מחק טבלה',
+		rows		: 'שורות',
+		columns		: 'עמודות',
+		border		: 'גודל מסגרת',
+		widthPx		: 'פיקסלים',
+		widthPc		: 'אחוז',
+		widthUnit	: 'יחידת רוחב',
+		cellSpace	: 'מרווח תא',
+		cellPad		: 'ריפוד תא',
+		caption		: 'כיתוב',
+		summary		: 'תקציר',
+		headers		: 'כותרות',
+		headersNone		: 'אין',
+		headersColumn	: 'עמודה ראשונה',
+		headersRow		: 'שורה ראשונה',
+		headersBoth		: 'שניהם',
+		invalidRows		: 'שדה מספר השורות חייב להיות מספר גדול מ 0.',
+		invalidCols		: 'שדה מספר העמודות חייב להיות מספר גדול מ 0.',
+		invalidBorder	: 'שדה גודל המסגרת חייב להיות מספר.',
+		invalidWidth	: 'שדה רוחב הטבלה חייב להיות מספר.',
+		invalidHeight	: 'שדה גובה הטבלה חייב להיות מספר.',
+		invalidCellSpacing	: 'שדה ריווח התאים חייב להיות מספר חיובי.',
+		invalidCellPadding	: 'שדה ריפוד התאים חייב להיות מספר חיובי.',
+
+		cell :
+		{
+			menu			: 'מאפייני תא',
+			insertBefore	: 'הוספת תא לפני',
+			insertAfter		: 'הוספת תא אחרי',
+			deleteCell		: 'מחיקת תאים',
+			merge			: 'מיזוג תאים',
+			mergeRight		: 'מזג ימינה',
+			mergeDown		: 'מזג למטה',
+			splitHorizontal	: 'פיצול תא אופקית',
+			splitVertical	: 'פיצול תא אנכית',
+			title			: 'תכונות התא',
+			cellType		: 'סוג התא',
+			rowSpan			: 'מתיחת השורות',
+			colSpan			: 'מתיחת התאים',
+			wordWrap		: 'מניעת גלישת שורות',
+			hAlign			: 'יישור אופקי',
+			vAlign			: 'יישור אנכי',
+			alignBaseline	: 'שורת בסיס',
+			bgColor			: 'צבע רקע',
+			borderColor		: 'צבע מסגרת',
+			data			: 'מידע',
+			header			: 'כותרת',
+			yes				: 'כן',
+			no				: 'לא',
+			invalidWidth	: 'שדה רוחב התא חייב להיות מספר.',
+			invalidHeight	: 'שדה גובה התא חייב להיות מספר.',
+			invalidRowSpan	: 'שדה מתיחת השורות חייב להיות מספר שלם.',
+			invalidColSpan	: 'שדה מתיחת העמודות חייב להיות מספר שלם.',
+			chooseColor		: 'בחר'
+		},
+
+		row :
+		{
+			menu			: 'שורה',
+			insertBefore	: 'הוספת שורה לפני',
+			insertAfter		: 'הוספת שורה אחרי',
+			deleteRow		: 'מחיקת שורות'
+		},
+
+		column :
+		{
+			menu			: 'עמודה',
+			insertBefore	: 'הוספת עמודה לפני',
+			insertAfter		: 'הוספת עמודה אחרי',
+			deleteColumn	: 'מחיקת עמודות'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'מאפייני כפתור',
+		text		: 'טקסט (ערך)',
+		type		: 'סוג',
+		typeBtn		: 'כפתור',
+		typeSbm		: 'שליחה',
+		typeRst		: 'איפוס'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'מאפייני תיבת סימון',
+		radioTitle	: 'מאפייני לחצן אפשרויות',
+		value		: 'ערך',
+		selected	: 'מסומן'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'מאפיני טופס',
+		menu		: 'מאפיני טופס',
+		action		: 'שלח אל',
+		method		: 'סוג שליחה',
+		encoding	: 'קידוד'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'מאפייני שדה בחירה',
+		selectInfo	: 'מידע',
+		opAvail		: 'אפשרויות זמינות',
+		value		: 'ערך',
+		size		: 'גודל',
+		lines		: 'שורות',
+		chkMulti	: 'איפשור בחירות מרובות',
+		opText		: 'טקסט',
+		opValue		: 'ערך',
+		btnAdd		: 'הוספה',
+		btnModify	: 'שינוי',
+		btnUp		: 'למעלה',
+		btnDown		: 'למטה',
+		btnSetValue : 'קביעה כברירת מחדל',
+		btnDelete	: 'מחיקה'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'מאפייני איזור טקסט',
+		cols		: 'עמודות',
+		rows		: 'שורות'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'מאפייני שדה טקסט',
+		name		: 'שם',
+		value		: 'ערך',
+		charWidth	: 'רוחב לפי תווים',
+		maxChars	: 'מקסימום תווים',
+		type		: 'סוג',
+		typeText	: 'טקסט',
+		typePass	: 'סיסמה'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'מאפיני שדה חבוי',
+		name	: 'שם',
+		value	: 'ערך'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'מאפייני התמונה',
+		titleButton	: 'מאפיני כפתור תמונה',
+		menu		: 'תכונות התמונה',
+		infoTab		: 'מידע על התמונה',
+		btnUpload	: 'שליחה לשרת',
+		upload		: 'העלאה',
+		alt			: 'טקסט חלופי',
+		lockRatio	: 'נעילת היחס',
+		resetSize	: 'איפוס הגודל',
+		border		: 'מסגרת',
+		hSpace		: 'מרווח אופקי',
+		vSpace		: 'מרווח אנכי',
+		alertUrl	: 'יש להקליד את כתובת התמונה',
+		linkTab		: 'קישור',
+		button2Img	: 'האם להפוך את תמונת הכפתור לתמונה פשוטה?',
+		img2Button	: 'האם להפוך את התמונה לכפתור תמונה?',
+		urlMissing	: 'כתובת התמונה חסרה.',
+		validateBorder	: 'שדה המסגרת חייב להיות מספר שלם.',
+		validateHSpace	: 'שדה המרווח האופקי חייב להיות מספר שלם.',
+		validateVSpace	: 'שדה המרווח האנכי חייב להיות מספר שלם.'
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'מאפייני פלאש',
+		propertiesTab	: 'מאפיינים',
+		title			: 'מאפיני פלאש',
+		chkPlay			: 'ניגון אוטומטי',
+		chkLoop			: 'לולאה',
+		chkMenu			: 'אפשר תפריט פלאש',
+		chkFull			: 'אפשר חלון מלא',
+ 		scale			: 'גודל',
+		scaleAll		: 'הצג הכל',
+		scaleNoBorder	: 'ללא גבולות',
+		scaleFit		: 'התאמה מושלמת',
+		access			: 'גישת סקריפט',
+		accessAlways	: 'תמיד',
+		accessSameDomain: 'דומיין זהה',
+		accessNever		: 'אף פעם',
+		alignAbsBottom	: 'לתחתית האבסולוטית',
+		alignAbsMiddle	: 'מרכוז אבסולוטי',
+		alignBaseline	: 'לקו התחתית',
+		alignTextTop	: 'לראש הטקסט',
+		quality			: 'איכות',
+		qualityBest		: 'מעולה',
+		qualityHigh		: 'גבוהה',
+		qualityAutoHigh	: 'גבוהה אוטומטית',
+		qualityMedium	: 'ממוצעת',
+		qualityAutoLow	: 'נמוכה אוטומטית',
+		qualityLow		: 'נמוכה',
+		windowModeWindow: 'חלון',
+		windowModeOpaque: 'אטום',
+		windowModeTransparent : 'שקוף',
+		windowMode		: 'מצב חלון',
+		flashvars		: 'משתנים לפלאש',
+		bgcolor			: 'צבע רקע',
+		hSpace			: 'מרווח אופקי',
+		vSpace			: 'מרווח אנכי',
+		validateSrc		: 'יש להקליד את כתובת סרטון הפלאש (URL)',
+		validateHSpace	: 'המרווח האופקי חייב להיות מספר.',
+		validateVSpace	: 'המרווח האנכי חייב להיות מספר.'
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'בדיקת איות',
+		title			: 'בדיקת איות',
+		notAvailable	: 'לא נמצא שירות זמין.',
+		errorLoading	: 'שגיאה בהעלאת השירות: %s.',
+		notInDic		: 'לא נמצא במילון',
+		changeTo		: 'שינוי ל',
+		btnIgnore		: 'התעלמות',
+		btnIgnoreAll	: 'התעלמות מהכל',
+		btnReplace		: 'החלפה',
+		btnReplaceAll	: 'החלפת הכל',
+		btnUndo			: 'החזרה',
+		noSuggestions	: '- אין הצעות -',
+		progress		: 'בודק האיות בתהליך בדיקה....',
+		noMispell		: 'בדיקות איות הסתיימה: לא נמצאו שגיאות כתיב',
+		noChanges		: 'בדיקות איות הסתיימה: לא שונתה אף מילה',
+		oneChange		: 'בדיקות איות הסתיימה: שונתה מילה אחת',
+		manyChanges		: 'בדיקות איות הסתיימה: %1 מילים שונו',
+		ieSpellDownload	: 'בודק האיות לא מותקן, האם להורידו?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'סמיילי',
+		title	: 'הוספת סמיילי',
+		options : 'אפשרויות סמיילים'
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'עץ האלמנטים',
+		eleTitle : '%1 אלמנט'
+	},
+
+	numberedlist	: 'רשימה ממוספרת',
+	bulletedlist	: 'רשימת נקודות',
+	indent			: 'הגדלת הזחה',
+	outdent			: 'הקטנת הזחה',
+
+	justify :
+	{
+		left	: 'יישור לשמאל',
+		center	: 'מרכוז',
+		right	: 'יישור לימין',
+		block	: 'יישור לשוליים'
+	},
+
+	blockquote : 'בלוק ציטוט',
+
+	clipboard :
+	{
+		title		: 'הדבקה',
+		cutError	: 'הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+X).',
+		copyError	: 'הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+C).',
+		pasteMsg	: 'נא להדביק בתוך הקופסה באמצעות (<b>Ctrl/Cmd+V</b>) וללחוץ על <b>אישור</b>.',
+		securityMsg	: 'עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (Clipboard) בצורה ישירה. נא להדביק שוב בחלון זה.',
+		pasteArea	: 'איזור הדבקה'
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?',
+		toolbar			: 'הדבקה מ-Word',
+		title			: 'הדבקה מ-Word',
+		error			: 'לא ניתן היה לנקות את המידע בשל תקלה פנימית.'
+	},
+
+	pasteText :
+	{
+		button	: 'הדבקה כטקסט פשוט',
+		title	: 'הדבקה כטקסט פשוט'
+	},
+
+	templates :
+	{
+		button			: 'תבניות',
+		title			: 'תביות תוכן',
+		options : 'אפשרויות התבניות',
+		insertOption	: 'החלפת תוכן ממשי',
+		selectPromptMsg	: 'יש לבחור תבנית לפתיחה בעורך.<br />התוכן המקורי ימחק:',
+		emptyListMsg	: '(לא הוגדרו תבניות)'
+	},
+
+	showBlocks : 'הצגת בלוקים',
+
+	stylesCombo :
+	{
+		label		: 'סגנון',
+		panelTitle	: 'סגנונות פורמט',
+		panelTitle1	: 'סגנונות בלוק',
+		panelTitle2	: 'סגנונות רצף',
+		panelTitle3	: 'סגנונות אובייקט'
+	},
+
+	format :
+	{
+		label		: 'עיצוב',
+		panelTitle	: 'עיצוב',
+
+		tag_p		: 'נורמלי',
+		tag_pre		: 'קוד',
+		tag_address	: 'כתובת',
+		tag_h1		: 'כותרת',
+		tag_h2		: 'כותרת 2',
+		tag_h3		: 'כותרת 3',
+		tag_h4		: 'כותרת 4',
+		tag_h5		: 'כותרת 5',
+		tag_h6		: 'כותרת 6',
+		tag_div		: 'נורמלי (DIV)'
+	},
+
+	div :
+	{
+		title				: 'יצירת מיכל (Div)',
+		toolbar				: 'יצירת מיכל (Div)',
+		cssClassInputLabel	: 'מחלקת עיצוב',
+		styleSelectLabel	: 'סגנון',
+		IdInputLabel		: 'מזהה (ID)',
+		languageCodeInputLabel	: 'קוד שפה',
+		inlineStyleInputLabel	: 'סגנון פנימי',
+		advisoryTitleInputLabel	: 'כותרת מוצעת',
+		langDirLabel		: 'כיוון שפה',
+		langDirLTRLabel		: 'שמאל לימין (LTR)',
+		langDirRTLLabel		: 'ימין לשמאל (RTL)',
+		edit				: 'עריכת מיכל (Div)',
+		remove				: 'הסרת מיכל (Div)'
+  	},
+
+	iframe :
+	{
+		title		: 'מאפייני חלון פנימי (iframe)',
+		toolbar		: 'חלון פנימי (iframe)',
+		noUrl		: 'יש להכניס כתובת לחלון.',
+		scrolling	: 'אפשר פסי גלילה',
+		border		: 'הראה מסגרת לחלון'
+	},
+
+	font :
+	{
+		label		: 'גופן',
+		voiceLabel	: 'גופן',
+		panelTitle	: 'גופן'
+	},
+
+	fontSize :
+	{
+		label		: 'גודל',
+		voiceLabel	: 'גודל',
+		panelTitle	: 'גודל'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'צבע טקסט',
+		bgColorTitle	: 'צבע רקע',
+		panelTitle		: 'צבעים',
+		auto			: 'אוטומטי',
+		more			: 'צבעים נוספים...'
+	},
+
+	colors :
+	{
+		'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			: 'בדיקת איות בזמן כתיבה (SCAYT)',
+		opera_title		: 'לא זמין בדפדפן אופרה',
+		enable			: 'אפשר SCAYT',
+		disable			: 'בטל SCAYT',
+		about			: 'אודות SCAYT',
+		toggle			: 'שינוי SCAYT',
+		options			: 'אפשרויות',
+		langs			: 'שפות',
+		moreSuggestions	: 'הצעות נוספות',
+		ignore			: 'התעלמות',
+		ignoreAll		: 'התעלמות מהכל',
+		addWord			: 'הוספת מילה',
+		emptyDic		: 'יש לבחור מילון.',
+
+		optionsTab		: 'אפשרויות',
+		allCaps			: 'התעלם ממילים שכל אותיותיהן גדולות',
+		ignoreDomainNames : 'התעלם משמות מתחם',
+		mixedCase		: 'התעלם ממילים עם אותיות גדולות וקטנות ביחד',
+		mixedWithDigits	: 'התעלם ממילים עם מספרים',
+
+		languagesTab	: 'שפות',
+
+		dictionariesTab	: 'מילון',
+		dic_field_name	: 'שם המילון',
+		dic_create		: 'יצירה',
+		dic_restore		: 'שחזור',
+		dic_delete		: 'מחיקה',
+		dic_rename		: 'שינוי שם',
+		dic_info		: 'בהתחלה מילון המשתמש מאוחסן בעוגיה, אך עוגיות מוגבלות במקום. כאשר המילון מגיע לגודל בו הוא אינו יכול להתאכסן בעוגיה, המילון צריך להתאכסן בשרתנו. לשם כך עליך לתת שם למילון. אם כבר יש לך מילון מאוחסן, יש להכניס את שמו וללחוץ על כפתור השחזור.',
+
+		aboutTab		: 'אודות'
+	},
+
+	about :
+	{
+		title		: 'אודות CKEditor',
+		dlgTitle	: 'אודות CKEditor',
+		help	: 'היכנסו ל$1 לעזרה.',
+		userGuide : 'מדריך המשתמש של CKEditor',
+		moreInfo	: 'למידע נוסף בקרו באתרנו:',
+		copy		: 'Copyright &copy; $1. כל הזכויות שמורות.'
+	},
+
+	maximize : 'הגדלה למקסימום',
+	minimize : 'הקטנה למינימום',
+
+	fakeobjects :
+	{
+		anchor		: 'עוגן',
+		flash		: 'סרטון פלאש',
+		iframe		: 'חלון פנימי (iframe)',
+		hiddenfield	: 'שדה חבוי',
+		unknown		: 'אובייקט לא ידוע'
+	},
+
+	resize : 'יש לגרור בכדי לשנות את הגודל',
+
+	colordialog :
+	{
+		title		: 'בחירת צבע',
+		options	:	'אפשרויות צבע',
+		highlight	: 'סימון',
+		selected	: 'בחירה',
+		clear		: 'ניקוי'
+	},
+
+	toolbarCollapse	: 'מזעור סרגל כלים',
+	toolbarExpand	: 'הרחבת סרגל כלים',
+
+	toolbarGroups :
+	{
+		document : 'מסמך',
+		clipboard : 'לוח הגזירים (Clipboard)/צעד אחרון',
+		editing : 'עריכה',
+		forms : 'טפסים',
+		basicstyles : 'עיצוב בסיסי',
+		paragraph : 'פסקה',
+		links : 'קישורים',
+		insert : 'הכנסה',
+		styles : 'עיצוב',
+		colors : 'צבעים',
+		tools : 'כלים'
+	},
+
+	bidi :
+	{
+		ltr : 'כיוון טקסט משמאל לימין (LTR)',
+		rtl : 'כיוון טקסט מימין לשמאל (RTL)'
+	},
+
+	docprops :
+	{
+		label : 'מאפייני מסמך',
+		title : 'מאפייני מסמך',
+		design : 'עיצוב',
+		meta : 'תגי Meta',
+		chooseColor : 'בחירה',
+		other : 'אחר...',
+		docTitle :	'כותרת עמוד',
+		charset : 	'קידוד תווים',
+		charsetOther : 'קידוד תווים אחר',
+		charsetASCII : 'ASCII',
+		charsetCE : 'מרכז אירופאי',
+		charsetCT : 'סיני מסורתי (Big5)',
+		charsetCR : 'קירילי',
+		charsetGR : 'יווני',
+		charsetJP : 'יפני',
+		charsetKR : 'קוריאני',
+		charsetTR : 'טורקי',
+		charsetUN : 'יוניקוד (UTF-8)',
+		charsetWE : 'מערב אירופאי',
+		docType : 'כותר סוג מסמך',
+		docTypeOther : 'כותר סוג מסמך אחר',
+		xhtmlDec : 'כלול הכרזות XHTML',
+		bgColor : 'צבע רקע',
+		bgImage : 'כתובת של תמונת רקע',
+		bgFixed : 'רקע לא נגלל (צמוד)',
+		txtColor : 'צבע טקסט',
+		margin : 'מרווחי עמוד',
+		marginTop : 'עליון',
+		marginLeft : 'שמאלי',
+		marginRight : 'ימני',
+		marginBottom : 'תחתון',
+		metaKeywords : 'מילות מפתח של המסמך (מופרדות בפסיק)',
+		metaDescription : 'תיאור המסמך',
+		metaAuthor : 'מחבר/ת',
+		metaCopyright : 'זכויות יוצרים',
+		previewHtml : '<p>זהו <strong>טקסט הדגמה</strong>. את/ה משתמש/ת ב<a href="javascript:void(0)">CKEditor</a>.</p>'
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/hi.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Hindi language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['hi'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'सोर्स',
+	newPage			: 'नया पेज',
+	save			: 'सेव',
+	preview			: 'प्रीव्यू',
+	cut				: 'कट',
+	copy			: 'कॉपी',
+	paste			: 'पेस्ट',
+	print			: 'प्रिन्ट',
+	underline		: 'रेखांकण',
+	bold			: 'बोल्ड',
+	italic			: 'इटैलिक',
+	selectAll		: 'सब सॅलॅक्ट करें',
+	removeFormat	: 'फ़ॉर्मैट हटायें',
+	strike			: 'स्ट्राइक थ्रू',
+	subscript		: 'अधोलेख',
+	superscript		: 'अभिलेख',
+	horizontalrule	: 'हॉरिज़ॉन्टल रेखा इन्सर्ट करें',
+	pagebreak		: 'पेज ब्रेक इन्सर्ट् करें',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'लिंक हटायें',
+	undo			: 'अन्डू',
+	redo			: 'रीडू',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'सर्वर ब्राउज़ करें',
+		url				: 'URL',
+		protocol		: 'प्रोटोकॉल',
+		upload			: 'अपलोड',
+		uploadSubmit	: 'इसे सर्वर को भेजें',
+		image			: 'तस्वीर',
+		flash			: 'फ़्लैश',
+		form			: 'फ़ॉर्म',
+		checkbox		: 'चॅक बॉक्स',
+		radio			: 'रेडिओ बटन',
+		textField		: 'टेक्स्ट फ़ील्ड',
+		textarea		: 'टेक्स्ट एरिया',
+		hiddenField		: 'गुप्त फ़ील्ड',
+		button			: 'बटन',
+		select			: 'चुनाव फ़ील्ड',
+		imageButton		: 'तस्वीर बटन',
+		notSet			: '<सॅट नहीं>',
+		id				: 'Id',
+		name			: 'नाम',
+		langDir			: 'भाषा लिखने की दिशा',
+		langDirLtr		: 'बायें से दायें (LTR)',
+		langDirRtl		: 'दायें से बायें (RTL)',
+		langCode		: 'भाषा कोड',
+		longDescr		: 'अधिक विवरण के लिए URL',
+		cssClass		: 'स्टाइल-शीट क्लास',
+		advisoryTitle	: 'परामर्श शीर्शक',
+		cssStyle		: 'स्टाइल',
+		ok				: 'ठीक है',
+		cancel			: 'रद्द करें',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		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
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'चौड़ाई',
+		height			: 'ऊँचाई',
+		align			: 'ऍलाइन',
+		alignLeft		: 'दायें',
+		alignRight		: 'दायें',
+		alignCenter		: 'बीच में',
+		alignTop		: 'ऊपर',
+		alignMiddle		: 'मध्य',
+		alignBottom		: 'नीचे',
+		invalidHeight	: 'Height must be a number.', // MISSING
+		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'विशेष करॅक्टर इन्सर्ट करें',
+		title		: 'विशेष करॅक्टर चुनें',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'लिंक इन्सर्ट/संपादन',
+		other 		: '<अन्य>',
+		menu		: 'लिंक संपादन',
+		title		: 'लिंक',
+		info		: 'लिंक  ',
+		target		: 'टार्गेट',
+		upload		: 'अपलोड',
+		advanced	: 'ऍड्वान्स्ड',
+		type		: 'लिंक प्रकार',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'इस पेज का ऐंकर',
+		toEmail		: 'ई-मेल',
+		targetFrame		: '<फ़्रेम>',
+		targetPopup		: '<पॉप-अप विन्डो>',
+		targetFrameName	: 'टार्गेट फ़्रेम का नाम',
+		targetPopupName	: 'पॉप-अप विन्डो का नाम',
+		popupFeatures	: 'पॉप-अप विन्डो फ़ीचर्स',
+		popupResizable	: 'Resizable', // MISSING
+		popupStatusBar	: 'स्टेटस बार',
+		popupLocationBar: 'लोकेशन बार',
+		popupToolbar	: 'टूल बार',
+		popupMenuBar	: 'मॅन्यू बार',
+		popupFullScreen	: 'फ़ुल स्क्रीन (IE)',
+		popupScrollBars	: 'स्क्रॉल बार',
+		popupDependent	: 'डिपेन्डॅन्ट (Netscape)',
+		popupLeft		: 'बायीं तरफ',
+		popupTop		: 'दायीं तरफ',
+		id				: 'Id', // MISSING
+		langDir			: 'भाषा लिखने की दिशा',
+		langDirLTR		: 'बायें से दायें (LTR)',
+		langDirRTL		: 'दायें से बायें (RTL)',
+		acccessKey		: 'ऍक्सॅस की',
+		name			: 'नाम',
+		langCode			: 'भाषा लिखने की दिशा',
+		tabIndex			: 'टैब इन्डॅक्स',
+		advisoryTitle		: 'परामर्श शीर्शक',
+		advisoryContentType	: 'परामर्श कन्टॅन्ट प्रकार',
+		cssClasses		: 'स्टाइल-शीट क्लास',
+		charset			: 'लिंक रिसोर्स करॅक्टर सॅट',
+		styles			: 'स्टाइल',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'ऐंकर चुनें',
+		anchorName		: 'ऐंकर नाम से',
+		anchorId			: 'ऍलीमॅन्ट Id से',
+		emailAddress		: 'ई-मेल पता',
+		emailSubject		: 'संदेश विषय',
+		emailBody		: 'संदेश',
+		noAnchors		: '(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)',
+		noUrl			: 'लिंक URL टाइप करें',
+		noEmail			: 'ई-मेल पता टाइप करें'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'ऐंकर इन्सर्ट/संपादन',
+		menu		: 'ऐंकर प्रॉपर्टीज़',
+		title		: 'ऐंकर प्रॉपर्टीज़',
+		name		: 'ऐंकर का नाम',
+		errorName	: 'ऐंकर का नाम टाइप करें',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'खोजें और बदलें',
+		find				: 'खोजें',
+		replace				: 'रीप्लेस',
+		findWhat			: 'यह खोजें:',
+		replaceWith			: 'इससे रिप्लेस करें:',
+		notFoundMsg			: 'आपके द्वारा दिया गया टेक्स्ट नहीं मिला',
+		matchCase			: 'केस मिलायें',
+		matchWord			: 'पूरा शब्द मिलायें',
+		matchCyclic			: 'Match cyclic', // MISSING
+		replaceAll			: 'सभी रिप्लेस करें',
+		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'टेबल',
+		title		: 'टेबल प्रॉपर्टीज़',
+		menu		: 'टेबल प्रॉपर्टीज़',
+		deleteTable	: 'टेबल डिलीट करें',
+		rows		: 'पंक्तियाँ',
+		columns		: 'कालम',
+		border		: 'बॉर्डर साइज़',
+		widthPx		: 'पिक्सैल',
+		widthPc		: 'प्रतिशत',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'सैल अंतर',
+		cellPad		: 'सैल पैडिंग',
+		caption		: 'शीर्षक',
+		summary		: 'सारांश',
+		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 positive number.', // MISSING
+		invalidCellPadding	: 'Cell padding must be a positive number.', // MISSING
+
+		cell :
+		{
+			menu			: 'खाना',
+			insertBefore	: 'पहले सैल डालें',
+			insertAfter		: 'बाद में सैल डालें',
+			deleteCell		: 'सैल डिलीट करें',
+			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
+			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
+		},
+
+		row :
+		{
+			menu			: 'पंक्ति',
+			insertBefore	: 'पहले पंक्ति डालें',
+			insertAfter		: 'बाद में पंक्ति डालें',
+			deleteRow		: 'पंक्तियाँ डिलीट करें'
+		},
+
+		column :
+		{
+			menu			: 'कालम',
+			insertBefore	: 'पहले कालम डालें',
+			insertAfter		: 'बाद में कालम डालें',
+			deleteColumn	: 'कालम डिलीट करें'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'बटन प्रॉपर्टीज़',
+		text		: 'टेक्स्ट (वैल्यू)',
+		type		: 'प्रकार',
+		typeBtn		: 'बटन',
+		typeSbm		: 'सब्मिट',
+		typeRst		: 'रिसेट'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'चॅक बॉक्स प्रॉपर्टीज़',
+		radioTitle	: 'रेडिओ बटन प्रॉपर्टीज़',
+		value		: 'वैल्यू',
+		selected	: 'सॅलॅक्टॅड'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'फ़ॉर्म प्रॉपर्टीज़',
+		menu		: 'फ़ॉर्म प्रॉपर्टीज़',
+		action		: 'क्रिया',
+		method		: 'तरीका',
+		encoding	: 'Encoding' // MISSING
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'चुनाव फ़ील्ड प्रॉपर्टीज़',
+		selectInfo	: 'सूचना',
+		opAvail		: 'उपलब्ध विकल्प',
+		value		: 'वैल्यू',
+		size		: 'साइज़',
+		lines		: 'पंक्तियाँ',
+		chkMulti	: 'एक से ज्यादा विकल्प चुनने दें',
+		opText		: 'टेक्स्ट',
+		opValue		: 'वैल्यू',
+		btnAdd		: 'जोड़ें',
+		btnModify	: 'बदलें',
+		btnUp		: 'ऊपर',
+		btnDown		: 'नीचे',
+		btnSetValue : 'चुनी गई वैल्यू सॅट करें',
+		btnDelete	: 'डिलीट'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'टेक्स्त एरिया प्रॉपर्टीज़',
+		cols		: 'कालम',
+		rows		: 'पंक्तियां'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'टेक्स्ट फ़ील्ड प्रॉपर्टीज़',
+		name		: 'नाम',
+		value		: 'वैल्यू',
+		charWidth	: 'करॅक्टर की चौढ़ाई',
+		maxChars	: 'अधिकतम करॅक्टर',
+		type		: 'टाइप',
+		typeText	: 'टेक्स्ट',
+		typePass	: 'पास्वर्ड'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'गुप्त फ़ील्ड प्रॉपर्टीज़',
+		name	: 'नाम',
+		value	: 'वैल्यू'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'तस्वीर प्रॉपर्टीज़',
+		titleButton	: 'तस्वीर बटन प्रॉपर्टीज़',
+		menu		: 'तस्वीर प्रॉपर्टीज़',
+		infoTab		: 'तस्वीर की जानकारी',
+		btnUpload	: 'इसे सर्वर को भेजें',
+		upload		: 'अपलोड',
+		alt			: 'वैकल्पिक टेक्स्ट',
+		lockRatio	: 'लॉक अनुपात',
+		resetSize	: 'रीसॅट साइज़',
+		border		: 'बॉर्डर',
+		hSpace		: 'हॉरिज़ॉन्टल स्पेस',
+		vSpace		: 'वर्टिकल स्पेस',
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'फ़्लैश प्रॉपर्टीज़',
+		propertiesTab	: 'Properties', // MISSING
+		title			: 'फ़्लैश प्रॉपर्टीज़',
+		chkPlay			: 'ऑटो प्ले',
+		chkLoop			: 'लूप',
+		chkMenu			: 'फ़्लैश मॅन्यू का प्रयोग करें',
+		chkFull			: 'Allow Fullscreen', // MISSING
+ 		scale			: 'स्केल',
+		scaleAll		: 'सभी दिखायें',
+		scaleNoBorder	: 'कोई बॉर्डर नहीं',
+		scaleFit		: 'बिल्कुल फ़िट',
+		access			: 'Script Access', // MISSING
+		accessAlways	: 'Always', // MISSING
+		accessSameDomain: 'Same domain', // MISSING
+		accessNever		: 'Never', // MISSING
+		alignAbsBottom	: 'Abs नीचे',
+		alignAbsMiddle	: 'Abs ऊपर',
+		alignBaseline	: 'मूल रेखा',
+		alignTextTop	: 'टेक्स्ट ऊपर',
+		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
+		bgcolor			: 'बैक्ग्राउन्ड रंग',
+		hSpace			: 'हॉरिज़ॉन्टल स्पेस',
+		vSpace			: 'वर्टिकल स्पेस',
+		validateSrc		: 'लिंक URL टाइप करें',
+		validateHSpace	: 'HSpace must be a number.', // MISSING
+		validateVSpace	: 'VSpace must be a number.' // MISSING
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'वर्तनी (स्पेलिंग) जाँच',
+		title			: 'Spell Check', // MISSING
+		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
+		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		notInDic		: 'शब्दकोश में नहीं',
+		changeTo		: 'इसमें बदलें',
+		btnIgnore		: 'इग्नोर',
+		btnIgnoreAll	: 'सभी इग्नोर करें',
+		btnReplace		: 'रिप्लेस',
+		btnReplaceAll	: 'सभी रिप्लेस करें',
+		btnUndo			: 'अन्डू',
+		noSuggestions	: '- कोई सुझाव नहीं -',
+		progress		: 'वर्तनी की जाँच (स्पॅल-चॅक) जारी है...',
+		noMispell		: 'वर्तनी की जाँच : कोई गलत वर्तनी (स्पॅलिंग) नहीं पाई गई',
+		noChanges		: 'वर्तनी की जाँच :कोई शब्द नहीं बदला गया',
+		oneChange		: 'वर्तनी की जाँच : एक शब्द बदला गया',
+		manyChanges		: 'वर्तनी की जाँच : %1 शब्द बदले गये',
+		ieSpellDownload	: 'स्पॅल-चॅकर इन्स्टाल नहीं किया गया है। क्या आप इसे डाउनलोड करना चाहेंगे?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'स्माइली',
+		title	: 'स्माइली इन्सर्ट करें',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element' // MISSING
+	},
+
+	numberedlist	: 'अंकीय सूची',
+	bulletedlist	: 'बुलॅट सूची',
+	indent			: 'इन्डॅन्ट बढ़ायें',
+	outdent			: 'इन्डॅन्ट कम करें',
+
+	justify :
+	{
+		left	: 'बायीं तरफ',
+		center	: 'बीच में',
+		right	: 'दायीं तरफ',
+		block	: 'ब्लॉक जस्टीफ़ाई'
+	},
+
+	blockquote : 'ब्लॉक-कोट',
+
+	clipboard :
+	{
+		title		: 'पेस्ट',
+		cutError	: 'आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+X) का प्रयोग करें।',
+		copyError	: 'आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+C) का प्रयोग करें।',
+		pasteMsg	: 'Ctrl/Cmd+V का प्रयोग करके पेस्ट करें और ठीक है करें.',
+		securityMsg	: 'आपके ब्राउज़र की सुरक्षा आपके ब्राउज़र की सुरKश सैटिंग के कारण, एडिटर आपके क्लिपबोर्ड डेटा को नहीं पा सकता है. आपको उसे इस विन्डो में दोबारा पेस्ट करना होगा.',
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar			: 'पेस्ट (वर्ड से)',
+		title			: 'पेस्ट (वर्ड से)',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'पेस्ट (सादा टॅक्स्ट)',
+		title	: 'पेस्ट (सादा टॅक्स्ट)'
+	},
+
+	templates :
+	{
+		button			: 'टॅम्प्लेट',
+		title			: 'कन्टेन्ट टॅम्प्लेट',
+		options : 'Template Options', // MISSING
+		insertOption	: 'मूल शब्दों को बदलें',
+		selectPromptMsg	: 'ऍडिटर में ओपन करने हेतु टॅम्प्लेट चुनें(वर्तमान कन्टॅन्ट सेव नहीं होंगे):',
+		emptyListMsg	: '(कोई टॅम्प्लेट डिफ़ाइन नहीं किया गया है)'
+	},
+
+	showBlocks : 'ब्लॉक दिखायें',
+
+	stylesCombo :
+	{
+		label		: 'स्टाइल',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles', // MISSING
+		panelTitle2	: 'Inline Styles', // MISSING
+		panelTitle3	: 'Object Styles' // MISSING
+	},
+
+	format :
+	{
+		label		: 'फ़ॉर्मैट',
+		panelTitle	: 'फ़ॉर्मैट',
+
+		tag_p		: 'साधारण',
+		tag_pre		: 'फ़ॉर्मैटॅड',
+		tag_address	: 'पता',
+		tag_h1		: 'शीर्षक 1',
+		tag_h2		: 'शीर्षक 2',
+		tag_h3		: 'शीर्षक 3',
+		tag_h4		: 'शीर्षक 4',
+		tag_h5		: 'शीर्षक 5',
+		tag_h6		: 'शीर्षक 6',
+		tag_div		: 'शीर्षक (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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'फ़ॉन्ट',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'फ़ॉन्ट'
+	},
+
+	fontSize :
+	{
+		label		: 'साइज़',
+		voiceLabel	: 'Font Size', // MISSING
+		panelTitle	: 'साइज़'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'टेक्स्ट रंग',
+		bgColorTitle	: 'बैक्ग्राउन्ड रंग',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'स्वचालित',
+		more			: 'और रंग...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor', // MISSING
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // 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
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor', // MISSING
+		flash		: 'Flash Animation', // MISSING
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'डॉक्यूमॅन्ट प्रॉपर्टीज़',
+		title : 'डॉक्यूमॅन्ट प्रॉपर्टीज़',
+		design : 'Design', // MISSING
+		meta : 'मॅटाडेटा',
+		chooseColor : 'Choose', // MISSING
+		other : '<अन्य>',
+		docTitle :	'पेज शीर्षक',
+		charset : 	'करेक्टर सॅट ऍन्कोडिंग',
+		charsetOther : 'अन्य करेक्टर सॅट ऍन्कोडिंग',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'मध्य यूरोपीय (Central European)',
+		charsetCT : 'चीनी (Chinese Traditional Big5)',
+		charsetCR : 'सिरीलिक (Cyrillic)',
+		charsetGR : 'यवन (Greek)',
+		charsetJP : 'जापानी (Japanese)',
+		charsetKR : 'कोरीयन (Korean)',
+		charsetTR : 'तुर्की (Turkish)',
+		charsetUN : 'यूनीकोड (UTF-8)',
+		charsetWE : 'पश्चिम यूरोपीय (Western European)',
+		docType : 'डॉक्यूमॅन्ट प्रकार शीर्षक',
+		docTypeOther : 'अन्य डॉक्यूमॅन्ट प्रकार शीर्षक',
+		xhtmlDec : 'XHTML सूचना सम्मिलित करें',
+		bgColor : 'बैक्ग्राउन्ड रंग',
+		bgImage : 'बैक्ग्राउन्ड तस्वीर URL',
+		bgFixed : 'स्क्रॉल न करने वाला बैक्ग्राउन्ड',
+		txtColor : 'टेक्स्ट रंग',
+		margin : 'पेज मार्जिन',
+		marginTop : 'ऊपर',
+		marginLeft : 'बायें',
+		marginRight : 'दायें',
+		marginBottom : 'नीचे',
+		metaKeywords : 'डॉक्युमॅन्ट इन्डेक्स संकेतशब्द (अल्पविराम से अलग करें)',
+		metaDescription : 'डॉक्यूमॅन्ट करॅक्टरन',
+		metaAuthor : 'लेखक',
+		metaCopyright : 'कॉपीराइट',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/hr.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Croatian language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['hr'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'Kôd',
+	newPage			: 'Nova stranica',
+	save			: 'Snimi',
+	preview			: 'Pregledaj',
+	cut				: 'Izreži',
+	copy			: 'Kopiraj',
+	paste			: 'Zalijepi',
+	print			: 'Ispiši',
+	underline		: 'Potcrtano',
+	bold			: 'Podebljaj',
+	italic			: 'Ukosi',
+	selectAll		: 'Odaberi sve',
+	removeFormat	: 'Ukloni formatiranje',
+	strike			: 'Precrtano',
+	subscript		: 'Subscript',
+	superscript		: 'Superscript',
+	horizontalrule	: 'Ubaci vodoravnu liniju',
+	pagebreak		: 'Ubaci prijelom stranice',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'Ukloni link',
+	undo			: 'Poništi',
+	redo			: 'Ponovi',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Pretraži server',
+		url				: 'URL',
+		protocol		: 'Protokol',
+		upload			: 'Pošalji',
+		uploadSubmit	: 'Pošalji na server',
+		image			: 'Slika',
+		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			: '<nije postavljeno>',
+		id				: 'Id',
+		name			: 'Naziv',
+		langDir			: 'Smjer jezika',
+		langDirLtr		: 'S lijeva na desno (LTR)',
+		langDirRtl		: 'S desna na lijevo (RTL)',
+		langCode		: 'Kôd jezika',
+		longDescr		: 'Dugački opis URL',
+		cssClass		: 'Stylesheet klase',
+		advisoryTitle	: 'Advisory naslov',
+		cssStyle		: 'Stil',
+		ok				: 'OK',
+		cancel			: 'Poništi',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'Općenito',
+		advancedTab		: 'Napredno',
+		validateNumberFailed : 'Ova vrijednost nije broj.',
+		confirmNewPage	: 'Sve napravljene promjene će biti izgubljene ukoliko ih niste snimili. Sigurno želite učitati novu stranicu?',
+		confirmCancel	: 'Neke od opcija su promjenjene. Sigurno želite zatvoriti ovaj prozor?',
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Širina',
+		height			: 'Visina',
+		align			: 'Poravnaj',
+		alignLeft		: 'Lijevo',
+		alignRight		: 'Desno',
+		alignCenter		: 'Središnje',
+		alignTop		: 'Vrh',
+		alignMiddle		: 'Sredina',
+		alignBottom		: 'Dolje',
+		invalidHeight	: 'Visina mora biti broj.',
+		invalidWidth	: 'Širina mora biti broj.',
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, nedostupno</span>'
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Ubaci posebne znakove',
+		title		: 'Odaberite posebni karakter',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Ubaci/promijeni link',
+		other 		: '<drugi>',
+		menu		: 'Promijeni link',
+		title		: 'Link',
+		info		: 'Link Info',
+		target		: 'Meta',
+		upload		: 'Pošalji',
+		advanced	: 'Napredno',
+		type		: 'Link vrsta',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'Sidro na ovoj stranici',
+		toEmail		: 'E-Mail',
+		targetFrame		: '<okvir>',
+		targetPopup		: '<popup prozor>',
+		targetFrameName	: 'Ime ciljnog okvira',
+		targetPopupName	: 'Naziv popup prozora',
+		popupFeatures	: 'Mogućnosti popup prozora',
+		popupResizable	: 'Promjenjiva veličina',
+		popupStatusBar	: 'Statusna traka',
+		popupLocationBar: 'Traka za lokaciju',
+		popupToolbar	: 'Traka s alatima',
+		popupMenuBar	: 'Izborna traka',
+		popupFullScreen	: 'Cijeli ekran (IE)',
+		popupScrollBars	: 'Scroll traka',
+		popupDependent	: 'Ovisno (Netscape)',
+		popupLeft		: 'Lijeva pozicija',
+		popupTop		: 'Gornja pozicija',
+		id				: 'Id',
+		langDir			: 'Smjer jezika',
+		langDirLTR		: 'S lijeva na desno (LTR)',
+		langDirRTL		: 'S desna na lijevo (RTL)',
+		acccessKey		: 'Pristupna tipka',
+		name			: 'Naziv',
+		langCode			: 'Smjer jezika',
+		tabIndex			: 'Tab Indeks',
+		advisoryTitle		: 'Advisory naslov',
+		advisoryContentType	: 'Advisory vrsta sadržaja',
+		cssClasses		: 'Stylesheet klase',
+		charset			: 'Kodna stranica povezanih resursa',
+		styles			: 'Stil',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Odaberi sidro',
+		anchorName		: 'Po nazivu sidra',
+		anchorId			: 'Po Id elementa',
+		emailAddress		: 'E-Mail adresa',
+		emailSubject		: 'Naslov',
+		emailBody		: 'Sadržaj poruke',
+		noAnchors		: '(Nema dostupnih sidra)',
+		noUrl			: 'Molimo upišite URL link',
+		noEmail			: 'Molimo upišite e-mail adresu'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Ubaci/promijeni sidro',
+		menu		: 'Svojstva sidra',
+		title		: 'Svojstva sidra',
+		name		: 'Ime sidra',
+		errorName	: 'Molimo unesite ime sidra',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Pronađi i zamijeni',
+		find				: 'Pronađi',
+		replace				: 'Zamijeni',
+		findWhat			: 'Pronađi:',
+		replaceWith			: 'Zamijeni s:',
+		notFoundMsg			: 'Traženi tekst nije pronađen.',
+		matchCase			: 'Usporedi mala/velika slova',
+		matchWord			: 'Usporedi cijele riječi',
+		matchCyclic			: 'Usporedi kružno',
+		replaceAll			: 'Zamijeni sve',
+		replaceSuccessMsg	: 'Zamijenjeno %1 pojmova.'
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tablica',
+		title		: 'Svojstva tablice',
+		menu		: 'Svojstva tablice',
+		deleteTable	: 'Izbriši tablicu',
+		rows		: 'Redova',
+		columns		: 'Kolona',
+		border		: 'Veličina okvira',
+		widthPx		: 'piksela',
+		widthPc		: 'postotaka',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'Prostornost ćelija',
+		cellPad		: 'Razmak ćelija',
+		caption		: 'Naslov',
+		summary		: 'Sažetak',
+		headers		: 'Zaglavlje',
+		headersNone		: 'Ništa',
+		headersColumn	: 'Prva kolona',
+		headersRow		: 'Prvi red',
+		headersBoth		: 'Oba',
+		invalidRows		: 'Broj redova mora biti broj veći od 0.',
+		invalidCols		: 'Broj kolona mora biti broj veći od 0.',
+		invalidBorder	: 'Debljina ruba mora biti broj.',
+		invalidWidth	: 'Širina tablice mora biti broj.',
+		invalidHeight	: 'Visina tablice mora biti broj.',
+		invalidCellSpacing	: 'Prostornost ćelija mora biti broj.',
+		invalidCellPadding	: 'Razmak ćelija mora biti broj.',
+
+		cell :
+		{
+			menu			: 'Ćelija',
+			insertBefore	: 'Ubaci ćeliju prije',
+			insertAfter		: 'Ubaci ćeliju poslije',
+			deleteCell		: 'Izbriši ćelije',
+			merge			: 'Spoji ćelije',
+			mergeRight		: 'Spoji desno',
+			mergeDown		: 'Spoji dolje',
+			splitHorizontal	: 'Podijeli ćeliju vodoravno',
+			splitVertical	: 'Podijeli ćeliju okomito',
+			title			: 'Svojstva ćelije',
+			cellType		: 'Vrsta ćelije',
+			rowSpan			: 'Rows Span',
+			colSpan			: 'Columns Span',
+			wordWrap		: 'Prelazak u novi red',
+			hAlign			: 'Vodoravno poravnanje',
+			vAlign			: 'Okomito poravnanje',
+			alignBaseline	: 'Osnovna linija',
+			bgColor			: 'Boja pozadine',
+			borderColor		: 'Boja ruba',
+			data			: 'Podatak',
+			header			: 'Zaglavlje',
+			yes				: 'Da',
+			no				: 'ne',
+			invalidWidth	: 'Širina ćelije mora biti broj.',
+			invalidHeight	: 'Visina ćelije mora biti broj.',
+			invalidRowSpan	: 'Rows span mora biti cijeli broj.',
+			invalidColSpan	: 'Columns span mora biti cijeli broj.',
+			chooseColor		: 'Choose' // MISSING
+		},
+
+		row :
+		{
+			menu			: 'Red',
+			insertBefore	: 'Ubaci red prije',
+			insertAfter		: 'Ubaci red poslije',
+			deleteRow		: 'Izbriši redove'
+		},
+
+		column :
+		{
+			menu			: 'Kolona',
+			insertBefore	: 'Ubaci kolonu prije',
+			insertAfter		: 'Ubaci kolonu poslije',
+			deleteColumn	: 'Izbriši kolone'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Image Button svojstva',
+		text		: 'Tekst (vrijednost)',
+		type		: 'Vrsta',
+		typeBtn		: 'Gumb',
+		typeSbm		: 'Pošalji',
+		typeRst		: 'Poništi'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Checkbox svojstva',
+		radioTitle	: 'Radio Button svojstva',
+		value		: 'Vrijednost',
+		selected	: 'Odabrano'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Form svojstva',
+		menu		: 'Form svojstva',
+		action		: 'Akcija',
+		method		: 'Metoda',
+		encoding	: 'Encoding'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Selection svojstva',
+		selectInfo	: 'Info',
+		opAvail		: 'Dostupne opcije',
+		value		: 'Vrijednost',
+		size		: 'Veličina',
+		lines		: 'linija',
+		chkMulti	: 'Dozvoli višestruki odabir',
+		opText		: 'Tekst',
+		opValue		: 'Vrijednost',
+		btnAdd		: 'Dodaj',
+		btnModify	: 'Promijeni',
+		btnUp		: 'Gore',
+		btnDown		: 'Dolje',
+		btnSetValue : 'Postavi kao odabranu vrijednost',
+		btnDelete	: 'Obriši'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Textarea svojstva',
+		cols		: 'Kolona',
+		rows		: 'Redova'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Text Field svojstva',
+		name		: 'Ime',
+		value		: 'Vrijednost',
+		charWidth	: 'Širina',
+		maxChars	: 'Najviše karaktera',
+		type		: 'Vrsta',
+		typeText	: 'Tekst',
+		typePass	: 'Šifra'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Hidden Field svojstva',
+		name	: 'Ime',
+		value	: 'Vrijednost'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Svojstva slika',
+		titleButton	: 'Image Button svojstva',
+		menu		: 'Svojstva slika',
+		infoTab		: 'Info slike',
+		btnUpload	: 'Pošalji na server',
+		upload		: 'Pošalji',
+		alt			: 'Alternativni tekst',
+		lockRatio	: 'Zaključaj odnos',
+		resetSize	: 'Obriši veličinu',
+		border		: 'Okvir',
+		hSpace		: 'HSpace',
+		vSpace		: 'VSpace',
+		alertUrl	: 'Unesite URL slike',
+		linkTab		: 'Link',
+		button2Img	: 'Želite li promijeniti odabrani gumb u jednostavnu sliku?',
+		img2Button	: 'Želite li promijeniti odabranu sliku u gumb?',
+		urlMissing	: 'Image source URL is missing.', // MISSING
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Flash svojstva',
+		propertiesTab	: 'Svojstva',
+		title			: 'Flash svojstva',
+		chkPlay			: 'Auto Play',
+		chkLoop			: 'Ponavljaj',
+		chkMenu			: 'Omogući Flash izbornik',
+		chkFull			: 'Omogući Fullscreen',
+ 		scale			: 'Omjer',
+		scaleAll		: 'Prikaži sve',
+		scaleNoBorder	: 'Bez okvira',
+		scaleFit		: 'Točna veličina',
+		access			: 'Script Access',
+		accessAlways	: 'Uvijek',
+		accessSameDomain: 'Ista domena',
+		accessNever		: 'Nikad',
+		alignAbsBottom	: 'Abs dolje',
+		alignAbsMiddle	: 'Abs sredina',
+		alignBaseline	: 'Bazno',
+		alignTextTop	: 'Vrh teksta',
+		quality			: 'Kvaliteta',
+		qualityBest		: 'Best',
+		qualityHigh		: 'High',
+		qualityAutoHigh	: 'Auto High',
+		qualityMedium	: 'Medium',
+		qualityAutoLow	: 'Auto Low',
+		qualityLow		: 'Low',
+		windowModeWindow: 'Window',
+		windowModeOpaque: 'Opaque',
+		windowModeTransparent : 'Transparent',
+		windowMode		: 'Vrsta prozora',
+		flashvars		: 'Varijable za Flash',
+		bgcolor			: 'Boja pozadine',
+		hSpace			: 'HSpace',
+		vSpace			: 'VSpace',
+		validateSrc		: 'Molimo upišite URL link',
+		validateHSpace	: 'HSpace mora biti broj.',
+		validateVSpace	: 'VSpace mora biti broj.'
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Provjeri pravopis',
+		title			: 'Provjera pravopisa',
+		notAvailable	: 'Žao nam je, ali usluga trenutno nije dostupna.',
+		errorLoading	: 'Greška učitavanja aplikacije: %s.',
+		notInDic		: 'Nije u rječniku',
+		changeTo		: 'Promijeni u',
+		btnIgnore		: 'Zanemari',
+		btnIgnoreAll	: 'Zanemari sve',
+		btnReplace		: 'Zamijeni',
+		btnReplaceAll	: 'Zamijeni sve',
+		btnUndo			: 'Vrati',
+		noSuggestions	: '-Nema preporuke-',
+		progress		: 'Provjera u tijeku...',
+		noMispell		: 'Provjera završena: Nema grešaka',
+		noChanges		: 'Provjera završena: Nije napravljena promjena',
+		oneChange		: 'Provjera završena: Jedna riječ promjenjena',
+		manyChanges		: 'Provjera završena: Promijenjeno %1 riječi',
+		ieSpellDownload	: 'Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Smješko',
+		title	: 'Ubaci smješka',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element'
+	},
+
+	numberedlist	: 'Brojčana lista',
+	bulletedlist	: 'Obična lista',
+	indent			: 'Pomakni udesno',
+	outdent			: 'Pomakni ulijevo',
+
+	justify :
+	{
+		left	: 'Lijevo poravnanje',
+		center	: 'Središnje poravnanje',
+		right	: 'Desno poravnanje',
+		block	: 'Blok poravnanje'
+	},
+
+	blockquote : 'Blockquote',
+
+	clipboard :
+	{
+		title		: 'Zalijepi',
+		cutError	: 'Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+X).',
+		copyError	: 'Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+C).',
+		pasteMsg	: 'Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl/Cmd+V</STRONG>) i kliknite <STRONG>OK</STRONG>.',
+		securityMsg	: 'Zbog sigurnosnih postavki Vašeg pretraživača, editor nema direktan pristup Vašem međuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.',
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'Tekst koji želite zalijepiti čini se da je kopiran iz Worda. Želite li prije očistiti tekst?',
+		toolbar			: 'Zalijepi iz Worda',
+		title			: 'Zalijepi iz Worda',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'Zalijepi kao čisti tekst',
+		title	: 'Zalijepi kao čisti tekst'
+	},
+
+	templates :
+	{
+		button			: 'Predlošci',
+		title			: 'Predlošci sadržaja',
+		options : 'Template Options', // MISSING
+		insertOption	: 'Zamijeni trenutne sadržaje',
+		selectPromptMsg	: 'Molimo odaberite predložak koji želite otvoriti<br>(stvarni sadržaj će biti izgubljen):',
+		emptyListMsg	: '(Nema definiranih predložaka)'
+	},
+
+	showBlocks : 'Prikaži blokove',
+
+	stylesCombo :
+	{
+		label		: 'Stil',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block stilovi',
+		panelTitle2	: 'Inline stilovi',
+		panelTitle3	: 'Object stilovi'
+	},
+
+	format :
+	{
+		label		: 'Format',
+		panelTitle	: 'Format',
+
+		tag_p		: 'Normal',
+		tag_pre		: 'Formatirano',
+		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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Font',
+		voiceLabel	: 'Font',
+		panelTitle	: 'Font'
+	},
+
+	fontSize :
+	{
+		label		: 'Veličina',
+		voiceLabel	: 'Veličina slova',
+		panelTitle	: 'Veličina'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Boja teksta',
+		bgColorTitle	: 'Boja pozadine',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'Automatski',
+		more			: 'Više boja...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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			: 'Provjeri pravopis tijekom tipkanja (SCAYT)',
+		opera_title		: 'Not supported by Opera', // MISSING
+		enable			: 'Omogući SCAYT',
+		disable			: 'Onemogući SCAYT',
+		about			: 'O SCAYT',
+		toggle			: 'Omoguću/Onemogući SCAYT',
+		options			: 'Opcije',
+		langs			: 'Jezici',
+		moreSuggestions	: 'Više prijedloga',
+		ignore			: 'Zanemari',
+		ignoreAll		: 'Zanemari sve',
+		addWord			: 'Dodaj riječ',
+		emptyDic		: 'Naziv rječnika ne smije biti prazno.',
+
+		optionsTab		: 'Opcije',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Jezici',
+
+		dictionariesTab	: 'Rječnici',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'O SCAYT'
+	},
+
+	about :
+	{
+		title		: 'O CKEditoru',
+		dlgTitle	: 'O CKEditoru',
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // MISSING
+		moreInfo	: 'Za informacije o licencama posjetite našu web stranicu:',
+		copy		: 'Copyright &copy; $1. All rights reserved.'
+	},
+
+	maximize : 'Povećaj',
+	minimize : 'Minimize', // MISSING
+
+	fakeobjects :
+	{
+		anchor		: 'Sidro',
+		flash		: 'Flash animacija',
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Nepoznati objekt'
+	},
+
+	resize : 'Povuci za promjenu veličine',
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Svojstva dokumenta',
+		title : 'Svojstva dokumenta',
+		design : 'Design', // MISSING
+		meta : 'Meta Data',
+		chooseColor : 'Choose', // MISSING
+		other : '<drugi>',
+		docTitle :	'Naslov stranice',
+		charset : 	'Enkodiranje znakova',
+		charsetOther : 'Ostalo enkodiranje znakova',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Središnja Europa',
+		charsetCT : 'Tradicionalna kineska (Big5)',
+		charsetCR : 'Ćirilica',
+		charsetGR : 'Grčka',
+		charsetJP : 'Japanska',
+		charsetKR : 'Koreanska',
+		charsetTR : 'Turska',
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Zapadna Europa',
+		docType : 'Zaglavlje vrste dokumenta',
+		docTypeOther : 'Ostalo zaglavlje vrste dokumenta',
+		xhtmlDec : 'Ubaci XHTML deklaracije',
+		bgColor : 'Boja pozadine',
+		bgImage : 'URL slike pozadine',
+		bgFixed : 'Pozadine se ne pomiče',
+		txtColor : 'Boja teksta',
+		margin : 'Margine stranice',
+		marginTop : 'Vrh',
+		marginLeft : 'Lijevo',
+		marginRight : 'Desno',
+		marginBottom : 'Dolje',
+		metaKeywords : 'Ključne riječi dokumenta (odvojene zarezom)',
+		metaDescription : 'Opis dokumenta',
+		metaAuthor : 'Autor',
+		metaCopyright : 'Autorska prava',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/hu.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Hungarian language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['hu'] =
+{
+	/**
+	 * 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 : 'HTML szerkesztő',
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'HTML szerkesztő',
+
+	// Toolbar buttons without dialogs.
+	source			: 'Forráskód',
+	newPage			: 'Új oldal',
+	save			: 'Mentés',
+	preview			: 'Előnézet',
+	cut				: 'Kivágás',
+	copy			: 'Másolás',
+	paste			: 'Beillesztés',
+	print			: 'Nyomtatás',
+	underline		: 'Aláhúzott',
+	bold			: 'Félkövér',
+	italic			: 'Dőlt',
+	selectAll		: 'Mindent kijelöl',
+	removeFormat	: 'Formázás eltávolítása',
+	strike			: 'Áthúzott',
+	subscript		: 'Alsó index',
+	superscript		: 'Felső index',
+	horizontalrule	: 'Elválasztóvonal beillesztése',
+	pagebreak		: 'Oldaltörés beillesztése',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'Hivatkozás törlése',
+	undo			: 'Visszavonás',
+	redo			: 'Ismétlés',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Böngészés a szerveren',
+		url				: 'Hivatkozás',
+		protocol		: 'Protokoll',
+		upload			: 'Feltöltés',
+		uploadSubmit	: 'Küldés a szerverre',
+		image			: 'Kép',
+		flash			: 'Flash',
+		form			: 'Űrlap',
+		checkbox		: 'Jelölőnégyzet',
+		radio			: 'Választógomb',
+		textField		: 'Szövegmező',
+		textarea		: 'Szövegterület',
+		hiddenField		: 'Rejtettmező',
+		button			: 'Gomb',
+		select			: 'Legördülő lista',
+		imageButton		: 'Képgomb',
+		notSet			: '<nincs beállítva>',
+		id				: 'Azonosító',
+		name			: 'Név',
+		langDir			: 'Írás iránya',
+		langDirLtr		: 'Balról jobbra',
+		langDirRtl		: 'Jobbról balra',
+		langCode		: 'Nyelv kódja',
+		longDescr		: 'Részletes leírás webcíme',
+		cssClass		: 'Stíluskészlet',
+		advisoryTitle	: 'Súgócimke',
+		cssStyle		: 'Stílus',
+		ok				: 'Rendben',
+		cancel			: 'Mégsem',
+		close			: 'Bezárás',
+		preview			: 'Előnézet',
+		generalTab		: 'Általános',
+		advancedTab		: 'További opciók',
+		validateNumberFailed : 'A mezőbe csak számokat írhat.',
+		confirmNewPage	: 'Minden nem mentett változás el fog veszni! Biztosan be szeretné tölteni az oldalt?',
+		confirmCancel	: 'Az űrlap tartalma megváltozott, ám a változásokat nem rögzítette. Biztosan be szeretné zárni az űrlapot?',
+		options			: 'Beállítások',
+		target			: 'Cél',
+		targetNew		: 'Új ablak (_blank)',
+		targetTop		: 'Legfelső ablak (_top)',
+		targetSelf		: 'Aktuális ablakban (_self)',
+		targetParent	: 'Szülő ablak (_parent)',
+		langDirLTR		: 'Balról jobbra (LTR)',
+		langDirRTL		: 'Jobbról balra (RTL)',
+		styles			: 'Stílus',
+		cssClasses		: 'Stíluslap osztály',
+		width			: 'Szélesség',
+		height			: 'Magasság',
+		align			: 'Igazítás',
+		alignLeft		: 'Bal',
+		alignRight		: 'Jobbra',
+		alignCenter		: 'Középre',
+		alignTop		: 'Tetejére',
+		alignMiddle		: 'Középre',
+		alignBottom		: 'Aljára',
+		invalidHeight	: 'A magasság mezőbe csak számokat írhat.',
+		invalidWidth	: 'A szélesség mezőbe csak számokat írhat.',
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Helyi menü opciók'
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Speciális karakter beillesztése',
+		title		: 'Speciális karakter választása',
+		options : 'Speciális karakter opciók'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Hivatkozás beillesztése/módosítása',
+		other 		: '<más>',
+		menu		: 'Hivatkozás módosítása',
+		title		: 'Hivatkozás tulajdonságai',
+		info		: 'Alaptulajdonságok',
+		target		: 'Tartalom megjelenítése',
+		upload		: 'Feltöltés',
+		advanced	: 'További opciók',
+		type		: 'Hivatkozás típusa',
+		toUrl		: 'URL',
+		toAnchor	: 'Horgony az oldalon',
+		toEmail		: 'E-Mail',
+		targetFrame		: '<keretben>',
+		targetPopup		: '<felugró ablakban>',
+		targetFrameName	: 'Keret neve',
+		targetPopupName	: 'Felugró ablak neve',
+		popupFeatures	: 'Felugró ablak jellemzői',
+		popupResizable	: 'Átméretezés',
+		popupStatusBar	: 'Állapotsor',
+		popupLocationBar: 'Címsor',
+		popupToolbar	: 'Eszköztár',
+		popupMenuBar	: 'Menü sor',
+		popupFullScreen	: 'Teljes képernyő (csak IE)',
+		popupScrollBars	: 'Gördítősáv',
+		popupDependent	: 'Szülőhöz kapcsolt (csak Netscape)',
+		popupLeft		: 'Bal pozíció',
+		popupTop		: 'Felső pozíció',
+		id				: 'Id',
+		langDir			: 'Írás iránya',
+		langDirLTR		: 'Balról jobbra',
+		langDirRTL		: 'Jobbról balra',
+		acccessKey		: 'Billentyűkombináció',
+		name			: 'Név',
+		langCode			: 'Írás iránya',
+		tabIndex			: 'Tabulátor index',
+		advisoryTitle		: 'Súgócimke',
+		advisoryContentType	: 'Súgó tartalomtípusa',
+		cssClasses		: 'Stíluskészlet',
+		charset			: 'Hivatkozott tartalom kódlapja',
+		styles			: 'Stílus',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Horgony választása',
+		anchorName		: 'Horgony név szerint',
+		anchorId			: 'Azonosító szerint',
+		emailAddress		: 'E-Mail cím',
+		emailSubject		: 'Üzenet tárgya',
+		emailBody		: 'Üzenet',
+		noAnchors		: '(Nincs horgony a dokumentumban)',
+		noUrl			: 'Adja meg a hivatkozás webcímét',
+		noEmail			: 'Adja meg az E-Mail címet'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Horgony beillesztése/szerkesztése',
+		menu		: 'Horgony tulajdonságai',
+		title		: 'Horgony tulajdonságai',
+		name		: 'Horgony neve',
+		errorName	: 'Kérem adja meg a horgony nevét',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Sorszámozott lista tulajdonságai',
+		bulletedTitle		: 'Pontozott lista tulajdonságai',
+		type				: 'Típus',
+		start				: 'Kezdőszám',
+		validateStartNumber				:'A kezdőszám nem lehet tört érték.',
+		circle				: 'Kör',
+		disc				: 'Korong',
+		square				: 'Négyzet',
+		none				: 'Nincs',
+		notset				: '<Nincs beállítva>',
+		armenian			: 'Örmény számozás',
+		georgian			: 'Grúz számozás (an, ban, gan, stb.)',
+		lowerRoman			: 'Római kisbetűs (i, ii, iii, iv, v, stb.)',
+		upperRoman			: 'Római nagybetűs (I, II, III, IV, V, stb.)',
+		lowerAlpha			: 'Kisbetűs (a, b, c, d, e, stb.)',
+		upperAlpha			: 'Nagybetűs (A, B, C, D, E, stb.)',
+		lowerGreek			: 'Görög (alpha, beta, gamma, stb.)',
+		decimal				: 'Arab számozás (1, 2, 3, stb.)',
+		decimalLeadingZero	: 'Számozás bevezető nullákkal (01, 02, 03, stb.)'
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Keresés és csere',
+		find				: 'Keresés',
+		replace				: 'Csere',
+		findWhat			: 'Keresett szöveg:',
+		replaceWith			: 'Csere erre:',
+		notFoundMsg			: 'A keresett szöveg nem található.',
+		matchCase			: 'kis- és nagybetű megkülönböztetése',
+		matchWord			: 'csak ha ez a teljes szó',
+		matchCyclic			: 'Ciklikus keresés',
+		replaceAll			: 'Az összes cseréje',
+		replaceSuccessMsg	: '%1 egyezőség cserélve.'
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Táblázat',
+		title		: 'Táblázat tulajdonságai',
+		menu		: 'Táblázat tulajdonságai',
+		deleteTable	: 'Táblázat törlése',
+		rows		: 'Sorok',
+		columns		: 'Oszlopok',
+		border		: 'Szegélyméret',
+		widthPx		: 'képpont',
+		widthPc		: 'százalék',
+		widthUnit	: 'Szélesség egység',
+		cellSpace	: 'Cella térköz',
+		cellPad		: 'Cella belső margó',
+		caption		: 'Felirat',
+		summary		: 'Leírás',
+		headers		: 'Fejlécek',
+		headersNone		: 'Nincsenek',
+		headersColumn	: 'Első oszlop',
+		headersRow		: 'Első sor',
+		headersBoth		: 'Mindkettő',
+		invalidRows		: 'A sorok számának nagyobbnak kell lenni mint 0.',
+		invalidCols		: 'Az oszlopok számának nagyobbnak kell lenni mint 0.',
+		invalidBorder	: 'A szegélyméret mezőbe csak számokat írhat.',
+		invalidWidth	: 'A szélesség mezőbe csak számokat írhat.',
+		invalidHeight	: 'A magasság mezőbe csak számokat írhat.',
+		invalidCellSpacing	: 'A cella térköz mezőbe csak számokat írhat.',
+		invalidCellPadding	: 'A cella belső margó mezőbe csak számokat írhat.',
+
+		cell :
+		{
+			menu			: 'Cella',
+			insertBefore	: 'Beszúrás balra',
+			insertAfter		: 'Beszúrás jobbra',
+			deleteCell		: 'Cellák törlése',
+			merge			: 'Cellák egyesítése',
+			mergeRight		: 'Cellák egyesítése jobbra',
+			mergeDown		: 'Cellák egyesítése lefelé',
+			splitHorizontal	: 'Cellák szétválasztása vízszintesen',
+			splitVertical	: 'Cellák szétválasztása függőlegesen',
+			title			: 'Cella tulajdonságai',
+			cellType		: 'Cella típusa',
+			rowSpan			: 'Függőleges egyesítés',
+			colSpan			: 'Vízszintes egyesítés',
+			wordWrap		: 'Hosszú sorok törése',
+			hAlign			: 'Vízszintes igazítás',
+			vAlign			: 'Függőleges igazítás',
+			alignBaseline	: 'Alapvonalra',
+			bgColor			: 'Háttér színe',
+			borderColor		: 'Keret színe',
+			data			: 'Adat',
+			header			: 'Fejléc',
+			yes				: 'Igen',
+			no				: 'Nem',
+			invalidWidth	: 'A szélesség mezőbe csak számokat írhat.',
+			invalidHeight	: 'A magasság mezőbe csak számokat írhat.',
+			invalidRowSpan	: 'A függőleges egyesítés mezőbe csak számokat írhat.',
+			invalidColSpan	: 'A vízszintes egyesítés mezőbe csak számokat írhat.',
+			chooseColor		: 'Válasszon'
+		},
+
+		row :
+		{
+			menu			: 'Sor',
+			insertBefore	: 'Beszúrás fölé',
+			insertAfter		: 'Beszúrás alá',
+			deleteRow		: 'Sorok törlése'
+		},
+
+		column :
+		{
+			menu			: 'Oszlop',
+			insertBefore	: 'Beszúrás balra',
+			insertAfter		: 'Beszúrás jobbra',
+			deleteColumn	: 'Oszlopok törlése'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Gomb tulajdonságai',
+		text		: 'Szöveg (Érték)',
+		type		: 'Típus',
+		typeBtn		: 'Gomb',
+		typeSbm		: 'Küldés',
+		typeRst		: 'Alaphelyzet'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Jelölőnégyzet tulajdonságai',
+		radioTitle	: 'Választógomb tulajdonságai',
+		value		: 'Érték',
+		selected	: 'Kiválasztott'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Űrlap tulajdonságai',
+		menu		: 'Űrlap tulajdonságai',
+		action		: 'Adatfeldolgozást végző hivatkozás',
+		method		: 'Adatküldés módja',
+		encoding	: 'Kódolás'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Legördülő lista tulajdonságai',
+		selectInfo	: 'Alaptulajdonságok',
+		opAvail		: 'Elérhető opciók',
+		value		: 'Érték',
+		size		: 'Méret',
+		lines		: 'sor',
+		chkMulti	: 'több sor is kiválasztható',
+		opText		: 'Szöveg',
+		opValue		: 'Érték',
+		btnAdd		: 'Hozzáad',
+		btnModify	: 'Módosít',
+		btnUp		: 'Fel',
+		btnDown		: 'Le',
+		btnSetValue : 'Legyen az alapértelmezett érték',
+		btnDelete	: 'Töröl'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Szövegterület tulajdonságai',
+		cols		: 'Karakterek száma egy sorban',
+		rows		: 'Sorok száma'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Szövegmező tulajdonságai',
+		name		: 'Név',
+		value		: 'Érték',
+		charWidth	: 'Megjelenített karakterek száma',
+		maxChars	: 'Maximális karakterszám',
+		type		: 'Típus',
+		typeText	: 'Szöveg',
+		typePass	: 'Jelszó'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Rejtett mező tulajdonságai',
+		name	: 'Név',
+		value	: 'Érték'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Kép tulajdonságai',
+		titleButton	: 'Képgomb tulajdonságai',
+		menu		: 'Kép tulajdonságai',
+		infoTab		: 'Alaptulajdonságok',
+		btnUpload	: 'Küldés a szerverre',
+		upload		: 'Feltöltés',
+		alt			: 'Buborék szöveg',
+		lockRatio	: 'Arány megtartása',
+		resetSize	: 'Eredeti méret',
+		border		: 'Keret',
+		hSpace		: 'Vízsz. táv',
+		vSpace		: 'Függ. táv',
+		alertUrl	: 'Töltse ki a kép webcímét',
+		linkTab		: 'Hivatkozás',
+		button2Img	: 'A kiválasztott képgombból sima képet szeretne csinálni?',
+		img2Button	: 'A kiválasztott képből képgombot szeretne csinálni?',
+		urlMissing	: 'Hiányzik a kép URL-je',
+		validateBorder	: 'A keret méretének egész számot kell beírni!',
+		validateHSpace	: 'Vízszintes távolságnak egész számot kell beírni!',
+		validateVSpace	: 'Függőleges távolságnak egész számot kell beírni!'
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Flash tulajdonságai',
+		propertiesTab	: 'Tulajdonságok',
+		title			: 'Flash tulajdonságai',
+		chkPlay			: 'Automata lejátszás',
+		chkLoop			: 'Folyamatosan',
+		chkMenu			: 'Flash menü engedélyezése',
+		chkFull			: 'Teljes képernyő engedélyezése',
+ 		scale			: 'Méretezés',
+		scaleAll		: 'Mindent mutat',
+		scaleNoBorder	: 'Keret nélkül',
+		scaleFit		: 'Teljes kitöltés',
+		access			: 'Szkript hozzáférés',
+		accessAlways	: 'Mindig',
+		accessSameDomain: 'Azonos domainről',
+		accessNever		: 'Soha',
+		alignAbsBottom	: 'Legaljára',
+		alignAbsMiddle	: 'Közepére',
+		alignBaseline	: 'Alapvonalhoz',
+		alignTextTop	: 'Szöveg tetejére',
+		quality			: 'Minőség',
+		qualityBest		: 'Legjobb',
+		qualityHigh		: 'Jó',
+		qualityAutoHigh	: 'Automata jó',
+		qualityMedium	: 'Közepes',
+		qualityAutoLow	: 'Automata gyenge',
+		qualityLow		: 'Gyenge',
+		windowModeWindow: 'Window',
+		windowModeOpaque: 'Opaque',
+		windowModeTransparent : 'Transparent',
+		windowMode		: 'Ablak mód',
+		flashvars		: 'Flash változók',
+		bgcolor			: 'Háttérszín',
+		hSpace			: 'Vízsz. táv',
+		vSpace			: 'Függ. táv',
+		validateSrc		: 'Adja meg a hivatkozás webcímét',
+		validateHSpace	: 'A vízszintes távolsűág mezőbe csak számokat írhat.',
+		validateVSpace	: 'A függőleges távolsűág mezőbe csak számokat írhat.'
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Helyesírás-ellenőrzés',
+		title			: 'Helyesírás ellenörző',
+		notAvailable	: 'Sajnálom, de a szolgáltatás jelenleg nem elérhető.',
+		errorLoading	: 'Hiba a szolgáltatás host betöltése közben: %s.',
+		notInDic		: 'Nincs a szótárban',
+		changeTo		: 'Módosítás',
+		btnIgnore		: 'Kihagyja',
+		btnIgnoreAll	: 'Mindet kihagyja',
+		btnReplace		: 'Csere',
+		btnReplaceAll	: 'Összes cseréje',
+		btnUndo			: 'Visszavonás',
+		noSuggestions	: 'Nincs javaslat',
+		progress		: 'Helyesírás-ellenőrzés folyamatban...',
+		noMispell		: 'Helyesírás-ellenőrzés kész: Nem találtam hibát',
+		noChanges		: 'Helyesírás-ellenőrzés kész: Nincs változtatott szó',
+		oneChange		: 'Helyesírás-ellenőrzés kész: Egy szó cserélve',
+		manyChanges		: 'Helyesírás-ellenőrzés kész: %1 szó cserélve',
+		ieSpellDownload	: 'A helyesírás-ellenőrző nincs telepítve. Szeretné letölteni most?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Hangulatjelek',
+		title	: 'Hangulatjel beszúrása',
+		options : 'Hangulatjel opciók'
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elem utak',
+		eleTitle : '%1 elem'
+	},
+
+	numberedlist	: 'Számozás',
+	bulletedlist	: 'Felsorolás',
+	indent			: 'Behúzás növelése',
+	outdent			: 'Behúzás csökkentése',
+
+	justify :
+	{
+		left	: 'Balra',
+		center	: 'Középre',
+		right	: 'Jobbra',
+		block	: 'Sorkizárt'
+	},
+
+	blockquote : 'Idézet blokk',
+
+	clipboard :
+	{
+		title		: 'Beillesztés',
+		cutError	: 'A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).',
+		copyError	: 'A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).',
+		pasteMsg	: 'Másolja be az alábbi mezőbe a <STRONG>Ctrl/Cmd+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.',
+		securityMsg	: 'A böngésző biztonsági beállításai miatt a szerkesztő nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.',
+		pasteArea	: 'Beszúrás mező'
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'Úgy tűnik a beillesztett szöveget Word-ből másolt át. Meg szeretné tisztítani a szöveget? (ajánlott)',
+		toolbar			: 'Beillesztés Word-ből',
+		title			: 'Beillesztés Word-ből',
+		error			: 'Egy belső hiba miatt nem sikerült megtisztítani a szöveget'
+	},
+
+	pasteText :
+	{
+		button	: 'Beillesztés formázatlan szövegként',
+		title	: 'Beillesztés formázatlan szövegként'
+	},
+
+	templates :
+	{
+		button			: 'Sablonok',
+		title			: 'Elérhető sablonok',
+		options : 'Sablon opciók',
+		insertOption	: 'Kicseréli a jelenlegi tartalmat',
+		selectPromptMsg	: 'Válassza ki melyik sablon nyíljon meg a szerkesztőben<br>(a jelenlegi tartalom elveszik):',
+		emptyListMsg	: '(Nincs sablon megadva)'
+	},
+
+	showBlocks : 'Blokkok megjelenítése',
+
+	stylesCombo :
+	{
+		label		: 'Stílus',
+		panelTitle	: 'Formázási stílusok',
+		panelTitle1	: 'Blokk stílusok',
+		panelTitle2	: 'Inline stílusok',
+		panelTitle3	: 'Objektum stílusok'
+	},
+
+	format :
+	{
+		label		: 'Formátum',
+		panelTitle	: 'Formátum',
+
+		tag_p		: 'Normál',
+		tag_pre		: 'Formázott',
+		tag_address	: 'Címsor',
+		tag_h1		: 'Fejléc 1',
+		tag_h2		: 'Fejléc 2',
+		tag_h3		: 'Fejléc 3',
+		tag_h4		: 'Fejléc 4',
+		tag_h5		: 'Fejléc 5',
+		tag_h6		: 'Fejléc 6',
+		tag_div		: 'Bekezdés (DIV)'
+	},
+
+	div :
+	{
+		title				: 'DIV tároló létrehozása',
+		toolbar				: 'DIV tároló létrehozása',
+		cssClassInputLabel	: 'Stíluslap osztály',
+		styleSelectLabel	: 'Stílus',
+		IdInputLabel		: 'Azonosító',
+		languageCodeInputLabel	: ' Nyelv kódja',
+		inlineStyleInputLabel	: 'Inline stílus',
+		advisoryTitleInputLabel	: 'Tipp szöveg',
+		langDirLabel		: 'Nyelvi irány',
+		langDirLTRLabel		: 'Balról jobbra (LTR)',
+		langDirRTLLabel		: 'Jobbról balra (RTL)',
+		edit				: 'DIV szerkesztése',
+		remove				: 'DIV eltávolítása'
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Betűtípus',
+		voiceLabel	: 'Betűtípus',
+		panelTitle	: 'Betűtípus'
+	},
+
+	fontSize :
+	{
+		label		: 'Méret',
+		voiceLabel	: 'Betűméret',
+		panelTitle	: 'Méret'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Betűszín',
+		bgColorTitle	: 'Háttérszín',
+		panelTitle		: 'Színek',
+		auto			: 'Automatikus',
+		more			: 'További színek...'
+	},
+
+	colors :
+	{
+		'000' : 'Fekete',
+		'800000' : 'Bordó',
+		'8B4513' : 'Barna',
+		'2F4F4F' : 'Sötét türkiz',
+		'008080' : 'Türkiz',
+		'000080' : 'Király kék',
+		'4B0082' : 'Indigó kék',
+		'696969' : 'Szürke',
+		'B22222' : 'Tégla vörös',
+		'A52A2A' : 'Vörös',
+		'DAA520' : 'Arany sárga',
+		'006400' : 'Sötét zöld',
+		'40E0D0' : 'Türkiz',
+		'0000CD' : 'Kék',
+		'800080' : 'Lila',
+		'808080' : 'Szürke',
+		'F00' : 'Piros',
+		'FF8C00' : 'Sötét narancs',
+		'FFD700' : 'Arany',
+		'008000' : 'Zöld',
+		'0FF' : 'Türkiz',
+		'00F' : 'Kék',
+		'EE82EE' : 'Rózsaszín',
+		'A9A9A9' : 'Sötét szürke',
+		'FFA07A' : 'Lazac',
+		'FFA500' : 'Narancs',
+		'FFFF00' : 'Citromsárga',
+		'00FF00' : 'Neon zöld',
+		'AFEEEE' : 'Világos türkiz',
+		'ADD8E6' : 'Világos kék',
+		'DDA0DD' : 'Világos lila',
+		'D3D3D3' : 'Világos szürke',
+		'FFF0F5' : 'Lavender Blush',
+		'FAEBD7' : 'Törtfehér',
+		'FFFFE0' : 'Világos sárga',
+		'F0FFF0' : 'Menta',
+		'F0FFFF' : 'Azúr kék',
+		'F0F8FF' : 'Halvány kék',
+		'E6E6FA' : 'Lavender',
+		'FFF' : 'Fehér'
+	},
+
+	scayt :
+	{
+		title			: 'Helyesírás ellenőrzés gépelés közben',
+		opera_title		: 'Az Opera nem támogatja',
+		enable			: 'SCAYT engedélyezése',
+		disable			: 'SCAYT letiltása',
+		about			: 'SCAYT névjegy',
+		toggle			: 'SCAYT kapcsolása',
+		options			: 'Beállítások',
+		langs			: 'Nyelvek',
+		moreSuggestions	: 'További javaslatok',
+		ignore			: 'Kihagy',
+		ignoreAll		: 'Összes kihagyása',
+		addWord			: 'Szó hozzáadása',
+		emptyDic		: 'A szótár nevét meg kell adni.',
+
+		optionsTab		: 'Beállítások',
+		allCaps			: 'Nagybetűs szavak kihagyása',
+		ignoreDomainNames : 'Domain nevek kihagyása',
+		mixedCase		: 'Kis és nagybetűt is tartalmazó szavak kihagyása',
+		mixedWithDigits	: 'Számokat tartalmazó szavak kihagyása',
+
+		languagesTab	: 'Nyelvek',
+
+		dictionariesTab	: 'Szótár',
+		dic_field_name	: 'Szótár neve',
+		dic_create		: 'Létrehozás',
+		dic_restore		: 'Visszaállítás',
+		dic_delete		: 'Törlés',
+		dic_rename		: 'Átnevezés',
+		dic_info		: 'Kezdetben a felhasználói szótár böngésző sütiben tárolódik. Azonban a sütik maximális mérete korlátozott. Amikora a szótár akkora lesz, hogy már sütiben nem lehet tárolni, akkor a szótárat tárolhatja a szerveren is. Ehhez egy nevet kell megadni a szótárhoz. Amennyiben már van szerveren tárolt szótára, adja meg a nevét és kattintson a visszaállítás gombra.',
+
+		aboutTab		: 'Névjegy'
+	},
+
+	about :
+	{
+		title		: 'CKEditor névjegy',
+		dlgTitle	: 'CKEditor névjegy',
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // MISSING
+		moreInfo	: 'Licenszelési információkért kérjük látogassa meg weboldalunkat:',
+		copy		: 'Copyright &copy; $1. Minden jog fenntartva.'
+	},
+
+	maximize : 'Teljes méret',
+	minimize : 'Kis méret',
+
+	fakeobjects :
+	{
+		anchor		: 'Horgony',
+		flash		: 'Flash animáció',
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Ismeretlen objektum'
+	},
+
+	resize : 'Húzza az átméretezéshez',
+
+	colordialog :
+	{
+		title		: 'Válasszon színt',
+		options	:	'Szín opciók',
+		highlight	: 'Nagyítás',
+		selected	: 'Kiválasztott',
+		clear		: 'Ürítés'
+	},
+
+	toolbarCollapse	: 'Eszköztár összecsukása',
+	toolbarExpand	: 'Eszköztár szétnyitása',
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Szöveg iránya balról jobbra',
+		rtl : 'Szöveg iránya jobbról balra'
+	},
+
+	docprops :
+	{
+		label : 'Dokumentum tulajdonságai',
+		title : 'Dokumentum tulajdonságai',
+		design : 'Design', // MISSING
+		meta : 'Meta adatok',
+		chooseColor : 'Válasszon',
+		other : '<más>',
+		docTitle :	'Oldalcím',
+		charset : 	'Karakterkódolás',
+		charsetOther : 'Más karakterkódolás',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Közép-Európai',
+		charsetCT : 'Kínai Tradicionális (Big5)',
+		charsetCR : 'Cyrill',
+		charsetGR : 'Görög',
+		charsetJP : 'Japán',
+		charsetKR : 'Koreai',
+		charsetTR : 'Török',
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Nyugat-Európai',
+		docType : 'Dokumentum típus fejléc',
+		docTypeOther : 'Más dokumentum típus fejléc',
+		xhtmlDec : 'XHTML deklarációk beillesztése',
+		bgColor : 'Háttérszín',
+		bgImage : 'Háttérkép cím',
+		bgFixed : 'Nem gördíthető háttér',
+		txtColor : 'Betűszín',
+		margin : 'Oldal margók',
+		marginTop : 'Felső',
+		marginLeft : 'Bal',
+		marginRight : 'Jobb',
+		marginBottom : 'Alsó',
+		metaKeywords : 'Dokumentum keresőszavak (vesszővel elválasztva)',
+		metaDescription : 'Dokumentum leírás',
+		metaAuthor : 'Szerző',
+		metaCopyright : 'Szerzői jog',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/is.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Icelandic language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['is'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'Kóði',
+	newPage			: 'Ný síða',
+	save			: 'Vista',
+	preview			: 'Forskoða',
+	cut				: 'Klippa',
+	copy			: 'Afrita',
+	paste			: 'Líma',
+	print			: 'Prenta',
+	underline		: 'Undirstrikað',
+	bold			: 'Feitletrað',
+	italic			: 'Skáletrað',
+	selectAll		: 'Velja allt',
+	removeFormat	: 'Fjarlægja snið',
+	strike			: 'Yfirstrikað',
+	subscript		: 'Niðurskrifað',
+	superscript		: 'Uppskrifað',
+	horizontalrule	: 'Lóðrétt lína',
+	pagebreak		: 'Setja inn síðuskil',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'Fjarlægja stiklu',
+	undo			: 'Afturkalla',
+	redo			: 'Hætta við afturköllun',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Fletta í skjalasafni',
+		url				: 'Vefslóð',
+		protocol		: 'Samskiptastaðall',
+		upload			: 'Senda upp',
+		uploadSubmit	: 'Hlaða upp',
+		image			: 'Setja inn mynd',
+		flash			: 'Flash',
+		form			: 'Setja inn innsláttarform',
+		checkbox		: 'Setja inn hökunarreit',
+		radio			: 'Setja inn valhnapp',
+		textField		: 'Setja inn textareit',
+		textarea		: 'Setja inn textasvæði',
+		hiddenField		: 'Setja inn falið svæði',
+		button			: 'Setja inn hnapp',
+		select			: 'Setja inn lista',
+		imageButton		: 'Setja inn myndahnapp',
+		notSet			: '<ekkert valið>',
+		id				: 'Auðkenni',
+		name			: 'Nafn',
+		langDir			: 'Lesstefna',
+		langDirLtr		: 'Frá vinstri til hægri (LTR)',
+		langDirRtl		: 'Frá hægri til vinstri (RTL)',
+		langCode		: 'Tungumálakóði',
+		longDescr		: 'Nánari lýsing',
+		cssClass		: 'Stílsniðsflokkur',
+		advisoryTitle	: 'Titill',
+		cssStyle		: 'Stíll',
+		ok				: 'Í lagi',
+		cancel			: 'Hætta við',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'Almennt',
+		advancedTab		: 'Tæknilegt',
+		validateNumberFailed : 'This value is not a number.', // MISSING
+		confirmNewPage	: 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING
+		confirmCancel	: 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Breidd',
+		height			: 'Hæð',
+		align			: 'Jöfnun',
+		alignLeft		: 'Vinstri',
+		alignRight		: 'Hægri',
+		alignCenter		: 'Miðjað',
+		alignTop		: 'Efst',
+		alignMiddle		: 'Miðjuð',
+		alignBottom		: 'Neðst',
+		invalidHeight	: 'Height must be a number.', // MISSING
+		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Setja inn merki',
+		title		: 'Velja tákn',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Stofna/breyta stiklu',
+		other 		: '<annar>',
+		menu		: 'Breyta stiklu',
+		title		: 'Stikla',
+		info		: 'Almennt',
+		target		: 'Mark',
+		upload		: 'Senda upp',
+		advanced	: 'Tæknilegt',
+		type		: 'Stikluflokkur',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'Bókamerki á þessari síðu',
+		toEmail		: 'Netfang',
+		targetFrame		: '<rammi>',
+		targetPopup		: '<sprettigluggi>',
+		targetFrameName	: 'Nafn markglugga',
+		targetPopupName	: 'Nafn sprettiglugga',
+		popupFeatures	: 'Eigindi sprettiglugga',
+		popupResizable	: 'Resizable', // MISSING
+		popupStatusBar	: 'Stöðustika',
+		popupLocationBar: 'Fanglína',
+		popupToolbar	: 'Verkfærastika',
+		popupMenuBar	: 'Vallína',
+		popupFullScreen	: 'Heilskjár (IE)',
+		popupScrollBars	: 'Skrunstikur',
+		popupDependent	: 'Háð venslum (Netscape)',
+		popupLeft		: 'Fjarlægð frá vinstri',
+		popupTop		: 'Fjarlægð frá efri brún',
+		id				: 'Id', // MISSING
+		langDir			: 'Lesstefna',
+		langDirLTR		: 'Frá vinstri til hægri (LTR)',
+		langDirRTL		: 'Frá hægri til vinstri (RTL)',
+		acccessKey		: 'Skammvalshnappur',
+		name			: 'Nafn',
+		langCode			: 'Lesstefna',
+		tabIndex			: 'Raðnúmer innsláttarreits',
+		advisoryTitle		: 'Titill',
+		advisoryContentType	: 'Tegund innihalds',
+		cssClasses		: 'Stílsniðsflokkur',
+		charset			: 'Táknróf',
+		styles			: 'Stíll',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Veldu akkeri',
+		anchorName		: 'Eftir akkerisnafni',
+		anchorId			: 'Eftir auðkenni einingar',
+		emailAddress		: 'Netfang',
+		emailSubject		: 'Efni',
+		emailBody		: 'Meginmál',
+		noAnchors		: '<Engin bókamerki á skrá>',
+		noUrl			: 'Sláðu inn veffang stiklunnar!',
+		noEmail			: 'Sláðu inn netfang!'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Stofna/breyta kaflamerki',
+		menu		: 'Eigindi kaflamerkis',
+		title		: 'Eigindi kaflamerkis',
+		name		: 'Nafn bókamerkis',
+		errorName	: 'Sláðu inn nafn bókamerkis!',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Finna og skipta',
+		find				: 'Leita',
+		replace				: 'Skipta út',
+		findWhat			: 'Leita að:',
+		replaceWith			: 'Skipta út fyrir:',
+		notFoundMsg			: 'Leitartexti fannst ekki!',
+		matchCase			: 'Gera greinarmun á¡ há¡- og lágstöfum',
+		matchWord			: 'Aðeins heil orð',
+		matchCyclic			: 'Match cyclic', // MISSING
+		replaceAll			: 'Skipta út allsstaðar',
+		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tafla',
+		title		: 'Eigindi töflu',
+		menu		: 'Eigindi töflu',
+		deleteTable	: 'Fella töflu',
+		rows		: 'Raðir',
+		columns		: 'Dálkar',
+		border		: 'Breidd ramma',
+		widthPx		: 'myndeindir',
+		widthPc		: 'prósent',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'Bil milli reita',
+		cellPad		: 'Reitaspássía',
+		caption		: 'Titill',
+		summary		: 'Áfram',
+		headers		: 'Fyrirsagnir',
+		headersNone		: 'Engar',
+		headersColumn	: 'Fyrsti dálkur',
+		headersRow		: 'Fyrsta röð',
+		headersBoth		: 'Hvort tveggja',
+		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 positive number.', // MISSING
+		invalidCellPadding	: 'Cell padding must be a positive number.', // MISSING
+
+		cell :
+		{
+			menu			: 'Reitur',
+			insertBefore	: 'Skjóta inn reiti fyrir aftan',
+			insertAfter		: 'Skjóta inn reiti fyrir framan',
+			deleteCell		: 'Fella reit',
+			merge			: 'Sameina reiti',
+			mergeRight		: 'Sameina til hægri',
+			mergeDown		: 'Sameina niður á við',
+			splitHorizontal	: 'Kljúfa reit lárétt',
+			splitVertical	: 'Kljúfa reit lóðrétt',
+			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
+			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
+		},
+
+		row :
+		{
+			menu			: 'Röð',
+			insertBefore	: 'Skjóta inn röð fyrir ofan',
+			insertAfter		: 'Skjóta inn röð fyrir neðan',
+			deleteRow		: 'Eyða röð'
+		},
+
+		column :
+		{
+			menu			: 'Dálkur',
+			insertBefore	: 'Skjóta inn dálki vinstra megin',
+			insertAfter		: 'Skjóta inn dálki hægra megin',
+			deleteColumn	: 'Fella dálk'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Eigindi hnapps',
+		text		: 'Texti',
+		type		: 'Gerð',
+		typeBtn		: 'Hnappur',
+		typeSbm		: 'Staðfesta',
+		typeRst		: 'Hreinsa'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Eigindi markreits',
+		radioTitle	: 'Eigindi valhnapps',
+		value		: 'Gildi',
+		selected	: 'Valið'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Eigindi innsláttarforms',
+		menu		: 'Eigindi innsláttarforms',
+		action		: 'Aðgerð',
+		method		: 'Aðferð',
+		encoding	: 'Encoding' // MISSING
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Eigindi lista',
+		selectInfo	: 'Upplýsingar',
+		opAvail		: 'Kostir',
+		value		: 'Gildi',
+		size		: 'Stærð',
+		lines		: 'línur',
+		chkMulti	: 'Leyfa fleiri kosti',
+		opText		: 'Texti',
+		opValue		: 'Gildi',
+		btnAdd		: 'Bæta við',
+		btnModify	: 'Breyta',
+		btnUp		: 'Upp',
+		btnDown		: 'Niður',
+		btnSetValue : 'Merkja sem valið',
+		btnDelete	: 'Eyða'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Eigindi textasvæðis',
+		cols		: 'Dálkar',
+		rows		: 'Línur'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Eigindi textareits',
+		name		: 'Nafn',
+		value		: 'Gildi',
+		charWidth	: 'Breidd (leturtákn)',
+		maxChars	: 'Hámarksfjöldi leturtákna',
+		type		: 'Gerð',
+		typeText	: 'Texti',
+		typePass	: 'Lykilorð'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Eigindi falins svæðis',
+		name	: 'Nafn',
+		value	: 'Gildi'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Eigindi myndar',
+		titleButton	: 'Eigindi myndahnapps',
+		menu		: 'Eigindi myndar',
+		infoTab		: 'Almennt',
+		btnUpload	: 'Hlaða upp',
+		upload		: 'Hlaða upp',
+		alt			: 'Baklægur texti',
+		lockRatio	: 'Festa stærðarhlutfall',
+		resetSize	: 'Reikna stærð',
+		border		: 'Rammi',
+		hSpace		: 'Vinstri bil',
+		vSpace		: 'Hægri bil',
+		alertUrl	: 'Sláðu inn slóðina að myndinni',
+		linkTab		: 'Stikla',
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Eigindi Flash',
+		propertiesTab	: 'Properties', // MISSING
+		title			: 'Eigindi Flash',
+		chkPlay			: 'Sjálfvirk spilun',
+		chkLoop			: 'Endurtekning',
+		chkMenu			: 'Sýna Flash-valmynd',
+		chkFull			: 'Allow Fullscreen', // MISSING
+ 		scale			: 'Skali',
+		scaleAll		: 'Sýna allt',
+		scaleNoBorder	: 'Án ramma',
+		scaleFit		: 'Fella skala að stærð',
+		access			: 'Script Access', // MISSING
+		accessAlways	: 'Always', // MISSING
+		accessSameDomain: 'Same domain', // MISSING
+		accessNever		: 'Never', // MISSING
+		alignAbsBottom	: 'Abs neðst',
+		alignAbsMiddle	: 'Abs miðjuð',
+		alignBaseline	: 'Grunnlína',
+		alignTextTop	: 'Efri brún texta',
+		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
+		bgcolor			: 'Bakgrunnslitur',
+		hSpace			: 'Vinstri bil',
+		vSpace			: 'Hægri bil',
+		validateSrc		: 'Sláðu inn veffang stiklunnar!',
+		validateHSpace	: 'HSpace must be a number.', // MISSING
+		validateVSpace	: 'VSpace must be a number.' // MISSING
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Villuleit',
+		title			: 'Spell Check', // MISSING
+		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
+		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		notInDic		: 'Ekki í orðabókinni',
+		changeTo		: 'Tillaga',
+		btnIgnore		: 'Hunsa',
+		btnIgnoreAll	: 'Hunsa allt',
+		btnReplace		: 'Skipta',
+		btnReplaceAll	: 'Skipta öllu',
+		btnUndo			: 'Til baka',
+		noSuggestions	: '- engar tillögur -',
+		progress		: 'Villuleit í gangi...',
+		noMispell		: 'Villuleit lokið: Engin villa fannst',
+		noChanges		: 'Villuleit lokið: Engu orði breytt',
+		oneChange		: 'Villuleit lokið: Einu orði breytt',
+		manyChanges		: 'Villuleit lokið: %1 orðum breytt',
+		ieSpellDownload	: 'Villuleit ekki sett upp.<br>Viltu setja hana upp?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Svipur',
+		title	: 'Velja svip',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element' // MISSING
+	},
+
+	numberedlist	: 'Númeraður listi',
+	bulletedlist	: 'Punktalisti',
+	indent			: 'Minnka inndrátt',
+	outdent			: 'Auka inndrátt',
+
+	justify :
+	{
+		left	: 'Vinstrijöfnun',
+		center	: 'Miðja texta',
+		right	: 'Hægrijöfnun',
+		block	: 'Jafna báðum megin'
+	},
+
+	blockquote : 'Inndráttur',
+
+	clipboard :
+	{
+		title		: 'Líma',
+		cutError	: 'Öryggisstillingar vafrans þíns leyfa ekki klippingu texta með músaraðgerð. Notaðu lyklaborðið í klippa (Ctrl/Cmd+X).',
+		copyError	: 'Öryggisstillingar vafrans þíns leyfa ekki afritun texta með músaraðgerð. Notaðu lyklaborðið í afrita (Ctrl/Cmd+C).',
+		pasteMsg	: 'Límdu í svæðið hér að neðan og (<STRONG>Ctrl/Cmd+V</STRONG>) og smelltu á <STRONG>OK</STRONG>.',
+		securityMsg	: 'Vegna öryggisstillinga í vafranum þínum fær ritillinn ekki beinan aðgang að klippuborðinu. Þú verður að líma innihaldið aftur inn í þennan glugga.',
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar			: 'Líma úr Word',
+		title			: 'Líma úr Word',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'Líma sem ósniðinn texta',
+		title	: 'Líma sem ósniðinn texta'
+	},
+
+	templates :
+	{
+		button			: 'Sniðmát',
+		title			: 'Innihaldssniðmát',
+		options : 'Template Options', // MISSING
+		insertOption	: 'Skipta út raunverulegu innihaldi',
+		selectPromptMsg	: 'Veldu sniðmát til að opna í ritlinum.<br>(Núverandi innihald víkur fyrir því!):',
+		emptyListMsg	: '(Ekkert sniðmát er skilgreint!)'
+	},
+
+	showBlocks : 'Sýna blokkir',
+
+	stylesCombo :
+	{
+		label		: 'Stílflokkur',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles', // MISSING
+		panelTitle2	: 'Inline Styles', // MISSING
+		panelTitle3	: 'Object Styles' // MISSING
+	},
+
+	format :
+	{
+		label		: 'Stílsnið',
+		panelTitle	: 'Stílsnið',
+
+		tag_p		: 'Venjulegt letur',
+		tag_pre		: 'Forsniðið',
+		tag_address	: 'Vistfang',
+		tag_h1		: 'Fyrirsögn 1',
+		tag_h2		: 'Fyrirsögn 2',
+		tag_h3		: 'Fyrirsögn 3',
+		tag_h4		: 'Fyrirsögn 4',
+		tag_h5		: 'Fyrirsögn 5',
+		tag_h6		: 'Fyrirsögn 6',
+		tag_div		: 'Venjulegt (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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Leturgerð ',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'Leturgerð '
+	},
+
+	fontSize :
+	{
+		label		: 'Leturstærð ',
+		voiceLabel	: 'Font Size', // MISSING
+		panelTitle	: 'Leturstærð '
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Litur texta',
+		bgColorTitle	: 'Bakgrunnslitur',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'Sjálfval',
+		more			: 'Fleiri liti...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor', // MISSING
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // 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
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor', // MISSING
+		flash		: 'Flash Animation', // MISSING
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Eigindi skjals',
+		title : 'Eigindi skjals',
+		design : 'Design', // MISSING
+		meta : 'Lýsigögn',
+		chooseColor : 'Choose', // MISSING
+		other : '<annar>',
+		docTitle :	'Titill síðu',
+		charset : 	'Letursett',
+		charsetOther : 'Annað letursett',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Mið-evrópskt',
+		charsetCT : 'Kínverskt, hefðbundið (Big5)',
+		charsetCR : 'Kýrilskt',
+		charsetGR : 'Grískt',
+		charsetJP : 'Japanskt',
+		charsetKR : 'Kóreskt',
+		charsetTR : 'Tyrkneskt',
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Vestur-evrópst',
+		docType : 'Flokkur skjalategunda',
+		docTypeOther : 'Annar flokkur skjalategunda',
+		xhtmlDec : 'Fella inn XHTML lýsingu',
+		bgColor : 'Bakgrunnslitur',
+		bgImage : 'Slóð bakgrunnsmyndar',
+		bgFixed : 'Læstur bakgrunnur',
+		txtColor : 'Litur texta',
+		margin : 'Hliðarspássía',
+		marginTop : 'Efst',
+		marginLeft : 'Vinstri',
+		marginRight : 'Hægri',
+		marginBottom : 'Neðst',
+		metaKeywords : 'Lykilorð efnisorðaskrár (aðgreind með kommum)',
+		metaDescription : 'Lýsing skjals',
+		metaAuthor : 'Höfundur',
+		metaCopyright : 'Höfundarréttur',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

File diff suppressed because it is too large
+ 812 - 0
web/js/ckeditor/_source/lang/ja.js


+ 812 - 0
web/js/ckeditor/_source/lang/lt.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Lithuanian language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['lt'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'Šaltinis',
+	newPage			: 'Naujas puslapis',
+	save			: 'Išsaugoti',
+	preview			: 'Peržiūra',
+	cut				: 'Iškirpti',
+	copy			: 'Kopijuoti',
+	paste			: 'Įdėti',
+	print			: 'Spausdinti',
+	underline		: 'Pabrauktas',
+	bold			: 'Pusjuodis',
+	italic			: 'Kursyvas',
+	selectAll		: 'Pažymėti viską',
+	removeFormat	: 'Panaikinti formatą',
+	strike			: 'Perbrauktas',
+	subscript		: 'Apatinis indeksas',
+	superscript		: 'Viršutinis indeksas',
+	horizontalrule	: 'Įterpti horizontalią liniją',
+	pagebreak		: 'Įterpti puslapių skirtuką',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'Panaikinti nuorodą',
+	undo			: 'Atšaukti',
+	redo			: 'Atstatyti',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Naršyti po serverį',
+		url				: 'URL',
+		protocol		: 'Protokolas',
+		upload			: 'Siųsti',
+		uploadSubmit	: 'Siųsti į serverį',
+		image			: 'Vaizdas',
+		flash			: 'Flash',
+		form			: 'Forma',
+		checkbox		: 'Žymimasis langelis',
+		radio			: 'Žymimoji akutė',
+		textField		: 'Teksto laukas',
+		textarea		: 'Teksto sritis',
+		hiddenField		: 'Nerodomas laukas',
+		button			: 'Mygtukas',
+		select			: 'Atrankos laukas',
+		imageButton		: 'Vaizdinis mygtukas',
+		notSet			: '<nėra nustatyta>',
+		id				: 'Id',
+		name			: 'Vardas',
+		langDir			: 'Teksto kryptis',
+		langDirLtr		: 'Iš kairės į dešinę (LTR)',
+		langDirRtl		: 'Iš dešinės į kairę (RTL)',
+		langCode		: 'Kalbos kodas',
+		longDescr		: 'Ilgas aprašymas URL',
+		cssClass		: 'Stilių lentelės klasės',
+		advisoryTitle	: 'Konsultacinė antraštė',
+		cssStyle		: 'Stilius',
+		ok				: 'OK',
+		cancel			: 'Nutraukti',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'Bendros savybės',
+		advancedTab		: 'Papildomas',
+		validateNumberFailed : 'This value is not a number.', // MISSING
+		confirmNewPage	: 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING
+		confirmCancel	: 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Plotis',
+		height			: 'Aukštis',
+		align			: 'Lygiuoti',
+		alignLeft		: 'Kairę',
+		alignRight		: 'Dešinę',
+		alignCenter		: 'Centrą',
+		alignTop		: 'Viršūnę',
+		alignMiddle		: 'Vidurį',
+		alignBottom		: 'Apačią',
+		invalidHeight	: 'Height must be a number.', // MISSING
+		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Įterpti specialų simbolį',
+		title		: 'Pasirinkite specialų simbolį',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Įterpti/taisyti nuorodą',
+		other 		: '<kitas>',
+		menu		: 'Taisyti nuorodą',
+		title		: 'Nuoroda',
+		info		: 'Nuorodos informacija',
+		target		: 'Paskirties vieta',
+		upload		: 'Siųsti',
+		advanced	: 'Papildomas',
+		type		: 'Nuorodos tipas',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'Žymė šiame puslapyje',
+		toEmail		: 'El.paštas',
+		targetFrame		: '<kadras>',
+		targetPopup		: '<išskleidžiamas langas>',
+		targetFrameName	: 'Paskirties kadro vardas',
+		targetPopupName	: 'Paskirties lango vardas',
+		popupFeatures	: 'Išskleidžiamo lango savybės',
+		popupResizable	: 'Resizable', // MISSING
+		popupStatusBar	: 'Būsenos juosta',
+		popupLocationBar: 'Adreso juosta',
+		popupToolbar	: 'Mygtukų juosta',
+		popupMenuBar	: 'Meniu juosta',
+		popupFullScreen	: 'Visas ekranas (IE)',
+		popupScrollBars	: 'Slinkties juostos',
+		popupDependent	: 'Priklausomas (Netscape)',
+		popupLeft		: 'Kairė pozicija',
+		popupTop		: 'Viršutinė pozicija',
+		id				: 'Id', // MISSING
+		langDir			: 'Teksto kryptis',
+		langDirLTR		: 'Iš kairės į dešinę (LTR)',
+		langDirRTL		: 'Iš dešinės į kairę (RTL)',
+		acccessKey		: 'Prieigos raktas',
+		name			: 'Vardas',
+		langCode			: 'Teksto kryptis',
+		tabIndex			: 'Tabuliavimo indeksas',
+		advisoryTitle		: 'Konsultacinė antraštė',
+		advisoryContentType	: 'Konsultacinio turinio tipas',
+		cssClasses		: 'Stilių lentelės klasės',
+		charset			: 'Susietų išteklių simbolių lentelė',
+		styles			: 'Stilius',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Pasirinkite žymę',
+		anchorName		: 'Pagal žymės vardą',
+		anchorId			: 'Pagal žymės Id',
+		emailAddress		: 'El.pašto adresas',
+		emailSubject		: 'Žinutės tema',
+		emailBody		: 'Žinutės turinys',
+		noAnchors		: '(Šiame dokumente žymių nėra)',
+		noUrl			: 'Prašome įvesti nuorodos URL',
+		noEmail			: 'Prašome įvesti el.pašto adresą'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Įterpti/modifikuoti žymę',
+		menu		: 'Žymės savybės',
+		title		: 'Žymės savybės',
+		name		: 'Žymės vardas',
+		errorName	: 'Prašome įvesti žymės vardą',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Surasti ir pakeisti',
+		find				: 'Rasti',
+		replace				: 'Pakeisti',
+		findWhat			: 'Surasti tekstą:',
+		replaceWith			: 'Pakeisti tekstu:',
+		notFoundMsg			: 'Nurodytas tekstas nerastas.',
+		matchCase			: 'Skirti didžiąsias ir mažąsias raides',
+		matchWord			: 'Atitikti pilną žodį',
+		matchCyclic			: 'Match cyclic', // MISSING
+		replaceAll			: 'Pakeisti viską',
+		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Lentelė',
+		title		: 'Lentelės savybės',
+		menu		: 'Lentelės savybės',
+		deleteTable	: 'Šalinti lentelę',
+		rows		: 'Eilutės',
+		columns		: 'Stulpeliai',
+		border		: 'Rėmelio dydis',
+		widthPx		: 'taškais',
+		widthPc		: 'procentais',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'Tarpas tarp langelių',
+		cellPad		: 'Trapas nuo langelio rėmo iki teksto',
+		caption		: 'Antraštė',
+		summary		: 'Santrauka',
+		headers		: 'Antraštės',
+		headersNone		: 'Nėra',
+		headersColumn	: 'Pirmas stulpelis',
+		headersRow		: 'Pirma eilutė',
+		headersBoth		: 'Abu',
+		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 positive number.', // MISSING
+		invalidCellPadding	: 'Cell padding must be a positive number.', // MISSING
+
+		cell :
+		{
+			menu			: 'Langelis',
+			insertBefore	: 'Įterpti langelį prieš',
+			insertAfter		: 'Įterpti langelį po',
+			deleteCell		: 'Šalinti langelius',
+			merge			: 'Sujungti langelius',
+			mergeRight		: 'Sujungti su dešine',
+			mergeDown		: 'Sujungti su apačia',
+			splitHorizontal	: 'Skaidyti langelį horizontaliai',
+			splitVertical	: 'Skaidyti langelį vertikaliai',
+			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
+			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
+		},
+
+		row :
+		{
+			menu			: 'Eilutė',
+			insertBefore	: 'Įterpti eilutę prieš',
+			insertAfter		: 'Įterpti eilutę po',
+			deleteRow		: 'Šalinti eilutes'
+		},
+
+		column :
+		{
+			menu			: 'Stulpelis',
+			insertBefore	: 'Įterpti stulpelį prieš',
+			insertAfter		: 'Įterpti stulpelį po',
+			deleteColumn	: 'Šalinti stulpelius'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Mygtuko savybės',
+		text		: 'Tekstas (Reikšmė)',
+		type		: 'Tipas',
+		typeBtn		: 'Mygtukas',
+		typeSbm		: 'Siųsti',
+		typeRst		: 'Išvalyti'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Žymimojo langelio savybės',
+		radioTitle	: 'Žymimosios akutės savybės',
+		value		: 'Reikšmė',
+		selected	: 'Pažymėtas'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Formos savybės',
+		menu		: 'Formos savybės',
+		action		: 'Veiksmas',
+		method		: 'Metodas',
+		encoding	: 'Encoding' // MISSING
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Atrankos lauko savybės',
+		selectInfo	: 'Informacija',
+		opAvail		: 'Galimos parinktys',
+		value		: 'Reikšmė',
+		size		: 'Dydis',
+		lines		: 'eilučių',
+		chkMulti	: 'Leisti daugeriopą atranką',
+		opText		: 'Tekstas',
+		opValue		: 'Reikšmė',
+		btnAdd		: 'Įtraukti',
+		btnModify	: 'Modifikuoti',
+		btnUp		: 'Aukštyn',
+		btnDown		: 'Žemyn',
+		btnSetValue : 'Laikyti pažymėta reikšme',
+		btnDelete	: 'Trinti'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Teksto srities savybės',
+		cols		: 'Ilgis',
+		rows		: 'Plotis'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Teksto lauko savybės',
+		name		: 'Vardas',
+		value		: 'Reikšmė',
+		charWidth	: 'Ilgis simboliais',
+		maxChars	: 'Maksimalus simbolių skaičius',
+		type		: 'Tipas',
+		typeText	: 'Tekstas',
+		typePass	: 'Slaptažodis'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Nerodomo lauko savybės',
+		name	: 'Vardas',
+		value	: 'Reikšmė'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Vaizdo savybės',
+		titleButton	: 'Vaizdinio mygtuko savybės',
+		menu		: 'Vaizdo savybės',
+		infoTab		: 'Vaizdo informacija',
+		btnUpload	: 'Siųsti į serverį',
+		upload		: 'Nusiųsti',
+		alt			: 'Alternatyvus Tekstas',
+		lockRatio	: 'Išlaikyti proporciją',
+		resetSize	: 'Atstatyti dydį',
+		border		: 'Rėmelis',
+		hSpace		: 'Hor.Erdvė',
+		vSpace		: 'Vert.Erdvė',
+		alertUrl	: 'Prašome įvesti vaizdo URL',
+		linkTab		: 'Nuoroda',
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Flash savybės',
+		propertiesTab	: 'Properties', // MISSING
+		title			: 'Flash savybės',
+		chkPlay			: 'Automatinis paleidimas',
+		chkLoop			: 'Ciklas',
+		chkMenu			: 'Leisti Flash meniu',
+		chkFull			: 'Allow Fullscreen', // MISSING
+ 		scale			: 'Mastelis',
+		scaleAll		: 'Rodyti visą',
+		scaleNoBorder	: 'Be rėmelio',
+		scaleFit		: 'Tikslus atitikimas',
+		access			: 'Script Access', // MISSING
+		accessAlways	: 'Always', // MISSING
+		accessSameDomain: 'Same domain', // MISSING
+		accessNever		: 'Never', // MISSING
+		alignAbsBottom	: 'Absoliučią apačią',
+		alignAbsMiddle	: 'Absoliutų vidurį',
+		alignBaseline	: 'Apatinę liniją',
+		alignTextTop	: 'Teksto viršūnę',
+		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
+		bgcolor			: 'Fono spalva',
+		hSpace			: 'Hor.Erdvė',
+		vSpace			: 'Vert.Erdvė',
+		validateSrc		: 'Prašome įvesti nuorodos URL',
+		validateHSpace	: 'HSpace must be a number.', // MISSING
+		validateVSpace	: 'VSpace must be a number.' // MISSING
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Rašybos tikrinimas',
+		title			: 'Spell Check', // MISSING
+		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
+		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		notInDic		: 'Žodyne nerastas',
+		changeTo		: 'Pakeisti į',
+		btnIgnore		: 'Ignoruoti',
+		btnIgnoreAll	: 'Ignoruoti visus',
+		btnReplace		: 'Pakeisti',
+		btnReplaceAll	: 'Pakeisti visus',
+		btnUndo			: 'Atšaukti',
+		noSuggestions	: '- Nėra pasiūlymų -',
+		progress		: 'Vyksta rašybos tikrinimas...',
+		noMispell		: 'Rašybos tikrinimas baigtas: Nerasta rašybos klaidų',
+		noChanges		: 'Rašybos tikrinimas baigtas: Nėra pakeistų žodžių',
+		oneChange		: 'Rašybos tikrinimas baigtas: Vienas žodis pakeistas',
+		manyChanges		: 'Rašybos tikrinimas baigtas: Pakeista %1 žodžių',
+		ieSpellDownload	: 'Rašybos tikrinimas neinstaliuotas. Ar Jūs norite jį dabar atsisiųsti?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Veideliai',
+		title	: 'Įterpti veidelį',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element' // MISSING
+	},
+
+	numberedlist	: 'Numeruotas sąrašas',
+	bulletedlist	: 'Suženklintas sąrašas',
+	indent			: 'Padidinti įtrauką',
+	outdent			: 'Sumažinti įtrauką',
+
+	justify :
+	{
+		left	: 'Lygiuoti kairę',
+		center	: 'Centruoti',
+		right	: 'Lygiuoti dešinę',
+		block	: 'Lygiuoti abi puses'
+	},
+
+	blockquote : 'Citata',
+
+	clipboard :
+	{
+		title		: 'Įdėti',
+		cutError	: 'Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+X).',
+		copyError	: 'Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+C).',
+		pasteMsg	: 'Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (<STRONG>Ctrl/Cmd+V</STRONG>) ir paspauskite mygtuką <STRONG>OK</STRONG>.',
+		securityMsg	: 'Dėl jūsų naršyklės saugumo nustatymų, redaktorius negali tiesiogiai pasiekti laikinosios atminties. Jums reikia nukopijuoti dar kartą į šį langą.',
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar			: 'Įdėti iš Word',
+		title			: 'Įdėti iš Word',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'Įdėti kaip gryną tekstą',
+		title	: 'Įdėti kaip gryną tekstą'
+	},
+
+	templates :
+	{
+		button			: 'Šablonai',
+		title			: 'Turinio šablonai',
+		options : 'Template Options', // MISSING
+		insertOption	: 'Pakeisti dabartinį turinį pasirinktu šablonu',
+		selectPromptMsg	: 'Pasirinkite norimą šabloną<br>(<b>Dėmesio!</b> esamas turinys bus prarastas):',
+		emptyListMsg	: '(Šablonų sąrašas tuščias)'
+	},
+
+	showBlocks : 'Rodyti blokus',
+
+	stylesCombo :
+	{
+		label		: 'Stilius',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles', // MISSING
+		panelTitle2	: 'Inline Styles', // MISSING
+		panelTitle3	: 'Object Styles' // MISSING
+	},
+
+	format :
+	{
+		label		: 'Šrifto formatas',
+		panelTitle	: 'Šrifto formatas',
+
+		tag_p		: 'Normalus',
+		tag_pre		: 'Formuotas',
+		tag_address	: 'Kreipinio',
+		tag_h1		: 'Antraštinis 1',
+		tag_h2		: 'Antraštinis 2',
+		tag_h3		: 'Antraštinis 3',
+		tag_h4		: 'Antraštinis 4',
+		tag_h5		: 'Antraštinis 5',
+		tag_h6		: 'Antraštinis 6',
+		tag_div		: 'Normal (DIV)' // MISSING
+	},
+
+	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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Šriftas',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'Šriftas'
+	},
+
+	fontSize :
+	{
+		label		: 'Šrifto dydis',
+		voiceLabel	: 'Font Size', // MISSING
+		panelTitle	: 'Šrifto dydis'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Teksto spalva',
+		bgColorTitle	: 'Fono spalva',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'Automatinis',
+		more			: 'Daugiau spalvų...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor', // MISSING
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // 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
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor', // MISSING
+		flash		: 'Flash Animation', // MISSING
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Dokumento savybės',
+		title : 'Dokumento savybės',
+		design : 'Design', // MISSING
+		meta : 'Meta duomenys',
+		chooseColor : 'Choose', // MISSING
+		other : '<kitas>',
+		docTitle :	'Puslapio antraštė',
+		charset : 	'Simbolių kodavimo lentelė',
+		charsetOther : 'Kita simbolių kodavimo lentelė',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Centrinės Europos',
+		charsetCT : 'Tradicinės kinų (Big5)',
+		charsetCR : 'Kirilica',
+		charsetGR : 'Graikų',
+		charsetJP : 'Japonų',
+		charsetKR : 'Korėjiečių',
+		charsetTR : 'Turkų',
+		charsetUN : 'Unikodas (UTF-8)',
+		charsetWE : 'Vakarų Europos',
+		docType : 'Dokumento tipo antraštė',
+		docTypeOther : 'Kita dokumento tipo antraštė',
+		xhtmlDec : 'Įtraukti XHTML deklaracijas',
+		bgColor : 'Fono spalva',
+		bgImage : 'Fono paveikslėlio nuoroda (URL)',
+		bgFixed : 'Neslenkantis fonas',
+		txtColor : 'Teksto spalva',
+		margin : 'Puslapio kraštinės',
+		marginTop : 'Viršuje',
+		marginLeft : 'Kairėje',
+		marginRight : 'Dešinėje',
+		marginBottom : 'Apačioje',
+		metaKeywords : 'Dokumento indeksavimo raktiniai žodžiai (atskirti kableliais)',
+		metaDescription : 'Dokumento apibūdinimas',
+		metaAuthor : 'Autorius',
+		metaCopyright : 'Autorinės teisės',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/mn.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Mongolian language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['mn'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'Код',
+	newPage			: 'Шинэ хуудас',
+	save			: 'Хадгалах',
+	preview			: 'Уридчлан харах',
+	cut				: 'Хайчлах',
+	copy			: 'Хуулах',
+	paste			: 'Буулгах',
+	print			: 'Хэвлэх',
+	underline		: 'Доогуур нь зураастай болгох',
+	bold			: 'Тод бүдүүн',
+	italic			: 'Налуу',
+	selectAll		: 'Бүгдийг нь сонгох',
+	removeFormat	: 'Формат авч хаях',
+	strike			: 'Дундуур нь зураастай болгох',
+	subscript		: 'Суурь болгох',
+	superscript		: 'Зэрэг болгох',
+	horizontalrule	: 'Хөндлөн зураас оруулах',
+	pagebreak		: 'Хуудас тусгаарлагч оруулах',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'Линк авч хаях',
+	undo			: 'Хүчингүй болгох',
+	redo			: 'Өмнөх үйлдлээ сэргээх',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Сервер харуулах',
+		url				: 'URL',
+		protocol		: 'Протокол',
+		upload			: 'Хуулах',
+		uploadSubmit	: 'Үүнийг сервэррүү илгээ',
+		image			: 'Зураг',
+		flash			: 'Флаш',
+		form			: 'Форм',
+		checkbox		: 'Чекбокс',
+		radio			: 'Радио товч',
+		textField		: 'Техт талбар',
+		textarea		: 'Техт орчин',
+		hiddenField		: 'Нууц талбар',
+		button			: 'Товч',
+		select			: 'Сонгогч талбар',
+		imageButton		: 'Зурагтай товч',
+		notSet			: '<Оноохгүй>',
+		id				: 'Id',
+		name			: 'Нэр',
+		langDir			: 'Хэлний чиглэл',
+		langDirLtr		: 'Зүүнээс баруун (LTR)',
+		langDirRtl		: 'Баруунаас зүүн (RTL)',
+		langCode		: 'Хэлний код',
+		longDescr		: 'URL-ын тайлбар',
+		cssClass		: 'Stylesheet классууд',
+		advisoryTitle	: 'Зөвлөлдөх гарчиг',
+		cssStyle		: 'Загвар',
+		ok				: 'OK',
+		cancel			: 'Болих',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'General', // MISSING
+		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
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Өргөн',
+		height			: 'Өндөр',
+		align			: 'Эгнээ',
+		alignLeft		: 'Зүүн',
+		alignRight		: 'Баруун',
+		alignCenter		: 'Төвд',
+		alignTop		: 'Дээд талд',
+		alignMiddle		: 'Дунд талд',
+		alignBottom		: 'Доод талд',
+		invalidHeight	: 'Height must be a number.', // MISSING
+		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Онцгой тэмдэгт оруулах',
+		title		: 'Онцгой тэмдэгт сонгох',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Линк Оруулах/Засварлах',
+		other 		: '<other>', // MISSING
+		menu		: 'Холбоос засварлах',
+		title		: 'Линк',
+		info		: 'Линкийн мэдээлэл',
+		target		: 'Байрлал',
+		upload		: 'Хуулах',
+		advanced	: 'Нэмэлт',
+		type		: 'Линкийн төрөл',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'Энэ хуудасандах холбоос',
+		toEmail		: 'E-Mail',
+		targetFrame		: '<Агуулах хүрээ>',
+		targetPopup		: '<popup цонх>',
+		targetFrameName	: 'Очих фремын нэр',
+		targetPopupName	: 'Popup цонхны нэр',
+		popupFeatures	: 'Popup цонхны онцлог',
+		popupResizable	: 'Resizable', // MISSING
+		popupStatusBar	: 'Статус хэсэг',
+		popupLocationBar: 'Location хэсэг',
+		popupToolbar	: 'Багажны хэсэг',
+		popupMenuBar	: 'Meню хэсэг',
+		popupFullScreen	: 'Цонх дүүргэх (IE)',
+		popupScrollBars	: 'Скрол хэсэгүүд',
+		popupDependent	: 'Хамаатай (Netscape)',
+		popupLeft		: 'Зүүн байрлал',
+		popupTop		: 'Дээд байрлал',
+		id				: 'Id', // MISSING
+		langDir			: 'Хэлний чиглэл',
+		langDirLTR		: 'Зүүнээс баруун (LTR)',
+		langDirRTL		: 'Баруунаас зүүн (RTL)',
+		acccessKey		: 'Холбох түлхүүр',
+		name			: 'Нэр',
+		langCode			: 'Хэлний чиглэл',
+		tabIndex			: 'Tab индекс',
+		advisoryTitle		: 'Зөвлөлдөх гарчиг',
+		advisoryContentType	: 'Зөвлөлдөх төрлийн агуулга',
+		cssClasses		: 'Stylesheet классууд',
+		charset			: 'Тэмдэгт оноох нөөцөд холбогдсон',
+		styles			: 'Загвар',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Холбоос сонгох',
+		anchorName		: 'Холбоосын нэрээр',
+		anchorId			: 'Элемэнт Id-гаар',
+		emailAddress		: 'E-Mail Хаяг',
+		emailSubject		: 'Message гарчиг',
+		emailBody		: 'Message-ийн агуулга',
+		noAnchors		: '(Баримт бичиг холбоосгүй байна)',
+		noUrl			: 'Линк URL-ээ төрөлжүүлнэ үү',
+		noEmail			: 'Е-mail хаягаа төрөлжүүлнэ үү'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Холбоос Оруулах/Засварлах',
+		menu		: 'Холбоос шинж чанар',
+		title		: 'Холбоос шинж чанар',
+		name		: 'Холбоос нэр',
+		errorName	: 'Холбоос төрөл оруулна уу',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Хай мөн Дарж бич',
+		find				: 'Хайх',
+		replace				: 'Солих',
+		findWhat			: 'Хайх үг/үсэг:',
+		replaceWith			: 'Солих үг:',
+		notFoundMsg			: 'Хайсан текст олсонгүй.',
+		matchCase			: 'Тэнцэх төлөв',
+		matchWord			: 'Тэнцэх бүтэн үг',
+		matchCyclic			: 'Match cyclic', // MISSING
+		replaceAll			: 'Бүгдийг нь Солих',
+		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Хүснэгт',
+		title		: 'Хүснэгт',
+		menu		: 'Хүснэгт',
+		deleteTable	: 'Хүснэгт устгах',
+		rows		: 'Мөр',
+		columns		: 'Багана',
+		border		: 'Хүрээний хэмжээ',
+		widthPx		: 'цэг',
+		widthPc		: 'хувь',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'Нүх хоорондын зай (spacing)',
+		cellPad		: 'Нүх доторлох(padding)',
+		caption		: 'Тайлбар',
+		summary		: 'Тайлбар',
+		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 positive number.', // MISSING
+		invalidCellPadding	: 'Cell padding must be a positive number.', // MISSING
+
+		cell :
+		{
+			menu			: 'Нүх/зай',
+			insertBefore	: 'Нүх/зай өмнө нь оруулах',
+			insertAfter		: 'Нүх/зай дараа нь оруулах',
+			deleteCell		: 'Нүх устгах',
+			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
+			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
+		},
+
+		row :
+		{
+			menu			: 'Мөр',
+			insertBefore	: 'Мөр өмнө нь оруулах',
+			insertAfter		: 'Мөр дараа нь оруулах',
+			deleteRow		: 'Мөр устгах'
+		},
+
+		column :
+		{
+			menu			: 'Багана',
+			insertBefore	: 'Багана өмнө нь оруулах',
+			insertAfter		: 'Багана дараа нь оруулах',
+			deleteColumn	: 'Багана устгах'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Товчны шинж чанар',
+		text		: 'Тэкст (Утга)',
+		type		: 'Төрөл',
+		typeBtn		: 'Товч',
+		typeSbm		: 'Submit',
+		typeRst		: 'Болих'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Чекбоксны шинж чанар',
+		radioTitle	: 'Радио товчны шинж чанар',
+		value		: 'Утга',
+		selected	: 'Сонгогдсон'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Форм шинж чанар',
+		menu		: 'Форм шинж чанар',
+		action		: 'Үйлдэл',
+		method		: 'Арга',
+		encoding	: 'Encoding' // MISSING
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Согогч талбарын шинж чанар',
+		selectInfo	: 'Мэдээлэл',
+		opAvail		: 'Идвэхтэй сонголт',
+		value		: 'Утга',
+		size		: 'Хэмжээ',
+		lines		: 'Мөр',
+		chkMulti	: 'Олон сонголт зөвшөөрөх',
+		opText		: 'Тэкст',
+		opValue		: 'Утга',
+		btnAdd		: 'Нэмэх',
+		btnModify	: 'Өөрчлөх',
+		btnUp		: 'Дээш',
+		btnDown		: 'Доош',
+		btnSetValue : 'Сонгогдсан утга оноох',
+		btnDelete	: 'Устгах'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Текст орчны шинж чанар',
+		cols		: 'Багана',
+		rows		: 'Мөр'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Текст талбарын шинж чанар',
+		name		: 'Нэр',
+		value		: 'Утга',
+		charWidth	: 'Тэмдэгтын өргөн',
+		maxChars	: 'Хамгийн их тэмдэгт',
+		type		: 'Төрөл',
+		typeText	: 'Текст',
+		typePass	: 'Нууц үг'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Нууц талбарын шинж чанар',
+		name	: 'Нэр',
+		value	: 'Утга'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Зураг',
+		titleButton	: 'Зурган товчны шинж чанар',
+		menu		: 'Зураг',
+		infoTab		: 'Зурагны мэдээлэл',
+		btnUpload	: 'Үүнийг сервэррүү илгээ',
+		upload		: 'Хуулах',
+		alt			: 'Тайлбар текст',
+		lockRatio	: 'Радио түгжих',
+		resetSize	: 'хэмжээ дахин оноох',
+		border		: 'Хүрээ',
+		hSpace		: 'Хөндлөн зай',
+		vSpace		: 'Босоо зай',
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Флаш шинж чанар',
+		propertiesTab	: 'Properties', // MISSING
+		title			: 'Флаш  шинж чанар',
+		chkPlay			: 'Автоматаар тоглох',
+		chkLoop			: 'Давтах',
+		chkMenu			: 'Флаш цэс идвэхжүүлэх',
+		chkFull			: 'Allow Fullscreen', // MISSING
+ 		scale			: 'Өргөгтгөх',
+		scaleAll		: 'Бүгдийг харуулах',
+		scaleNoBorder	: 'Хүрээгүй',
+		scaleFit		: 'Яг тааруулах',
+		access			: 'Script Access', // MISSING
+		accessAlways	: 'Always', // MISSING
+		accessSameDomain: 'Same domain', // MISSING
+		accessNever		: 'Never', // MISSING
+		alignAbsBottom	: 'Abs доод талд',
+		alignAbsMiddle	: 'Abs Дунд талд',
+		alignBaseline	: 'Baseline',
+		alignTextTop	: 'Текст дээр',
+		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
+		bgcolor			: 'Фонны өнгө',
+		hSpace			: 'Хөндлөн зай',
+		vSpace			: 'Босоо зай',
+		validateSrc		: 'Линк URL-ээ төрөлжүүлнэ үү',
+		validateHSpace	: 'HSpace must be a number.', // MISSING
+		validateVSpace	: 'VSpace must be a number.' // MISSING
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Үгийн дүрэх шалгах',
+		title			: 'Spell Check', // MISSING
+		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
+		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		notInDic		: 'Толь бичиггүй',
+		changeTo		: 'Өөрчлөх',
+		btnIgnore		: 'Зөвшөөрөх',
+		btnIgnoreAll	: 'Бүгдийг зөвшөөрөх',
+		btnReplace		: 'Дарж бичих',
+		btnReplaceAll	: 'Бүгдийг Дарж бичих',
+		btnUndo			: 'Буцаах',
+		noSuggestions	: '- Тайлбаргүй -',
+		progress		: 'Дүрэм шалгаж байгаа үйл явц...',
+		noMispell		: 'Дүрэм шалгаад дууссан: Алдаа олдсонгүй',
+		noChanges		: 'Дүрэм шалгаад дууссан: үг өөрчлөгдөөгүй',
+		oneChange		: 'Дүрэм шалгаад дууссан: 1 үг өөрчлөгдсөн',
+		manyChanges		: 'Дүрэм шалгаад дууссан: %1 үг өөрчлөгдсөн',
+		ieSpellDownload	: 'Дүрэм шалгагч суугаагүй байна. Татаж авахыг хүсч байна уу?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Тодорхойлолт',
+		title	: 'Тодорхойлолт оруулах',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element' // MISSING
+	},
+
+	numberedlist	: 'Дугаарлагдсан жагсаалт',
+	bulletedlist	: 'Цэгтэй жагсаалт',
+	indent			: 'Догол мөр хасах',
+	outdent			: 'Догол мөр нэмэх',
+
+	justify :
+	{
+		left	: 'Зүүн талд байрлуулах',
+		center	: 'Төвд байрлуулах',
+		right	: 'Баруун талд байрлуулах',
+		block	: 'Блок хэлбэрээр байрлуулах'
+	},
+
+	blockquote : 'Хайрцаглах',
+
+	clipboard :
+	{
+		title		: 'Буулгах',
+		cutError	: 'Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+X) товчны хослолыг ашиглана уу.',
+		copyError	: 'Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+C) товчны хослолыг ашиглана уу.',
+		pasteMsg	: '(<strong>Ctrl/Cmd+V</strong>) товчийг ашиглан paste хийнэ үү. Мөн <strong>OK</strong> дар.',
+		securityMsg	: 'Таны үзүүлэгч/browser/-н хамгаалалтын тохиргооноос болоод editor clipboard өгөгдөлрүү шууд хандах боломжгүй. Энэ цонход дахин paste хийхийг оролд.',
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar			: 'Word-оос буулгах',
+		title			: 'Word-оос буулгах',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'Plain Text-ээс буулгах',
+		title	: 'Plain Text-ээс буулгах'
+	},
+
+	templates :
+	{
+		button			: 'Загварууд',
+		title			: 'Загварын агуулга',
+		options : 'Template Options', // MISSING
+		insertOption	: 'Одоогийн агууллагыг дарж бичих',
+		selectPromptMsg	: 'Загварыг нээж editor-рүү сонгож оруулна уу<br />(Одоогийн агууллагыг устаж магадгүй):',
+		emptyListMsg	: '(Загвар тодорхойлогдоогүй байна)'
+	},
+
+	showBlocks : 'Block-уудыг үзүүлэх',
+
+	stylesCombo :
+	{
+		label		: 'Загвар',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles', // MISSING
+		panelTitle2	: 'Inline Styles', // MISSING
+		panelTitle3	: 'Object Styles' // MISSING
+	},
+
+	format :
+	{
+		label		: 'Формат',
+		panelTitle	: 'Формат',
+
+		tag_p		: 'Хэвийн',
+		tag_pre		: 'Formatted',
+		tag_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		: 'Paragraph (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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Фонт',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'Фонт'
+	},
+
+	fontSize :
+	{
+		label		: 'Хэмжээ',
+		voiceLabel	: 'Font Size', // MISSING
+		panelTitle	: 'Хэмжээ'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Фонтны өнгө',
+		bgColorTitle	: 'Фонны өнгө',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'Автоматаар',
+		more			: 'Нэмэлт өнгөнүүд...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor', // MISSING
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // 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
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor', // MISSING
+		flash		: 'Flash Animation', // MISSING
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Баримт бичиг шинж чанар',
+		title : 'Баримт бичиг шинж чанар',
+		design : 'Design', // MISSING
+		meta : 'Meta өгөгдөл',
+		chooseColor : 'Choose', // MISSING
+		other : '<other>',
+		docTitle :	'Хуудасны гарчиг',
+		charset : 	'Encoding тэмдэгт',
+		charsetOther : 'Encoding-д өөр тэмдэгт оноох',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Төв европ',
+		charsetCT : 'Хятадын уламжлалт (Big5)',
+		charsetCR : 'Крил',
+		charsetGR : 'Гред',
+		charsetJP : 'Япон',
+		charsetKR : 'Солонгос',
+		charsetTR : 'Tурк',
+		charsetUN : 'Юникод (UTF-8)',
+		charsetWE : 'Баруун европ',
+		docType : 'Баримт бичгийн төрөл Heading',
+		docTypeOther : 'Бусад баримт бичгийн төрөл Heading',
+		xhtmlDec : 'XHTML агуулж зарлах',
+		bgColor : 'Фоно өнгө',
+		bgImage : 'Фоно зурагны URL',
+		bgFixed : 'Гүйдэггүй фоно',
+		txtColor : 'Фонтны өнгө',
+		margin : 'Хуудасны захын зай',
+		marginTop : 'Дээд тал',
+		marginLeft : 'Зүүн тал',
+		marginRight : 'Баруун тал',
+		marginBottom : 'Доод тал',
+		metaKeywords : 'Баримт бичгийн индекс түлхүүр үг (таслалаар тусгаарлагдана)',
+		metaDescription : 'Баримт бичгийн тайлбар',
+		metaAuthor : 'Зохиогч',
+		metaCopyright : 'Зохиогчийн эрх',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/nl.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Dutch language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['nl'] =
+{
+	/**
+	 * 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 : 'Tekstverwerker, %1, druk op ALT 0 voor hulp.',
+
+	// ARIA descriptions.
+	toolbars	: 'Werkbalken',
+	editor		: 'Tekstverwerker',
+
+	// Toolbar buttons without dialogs.
+	source			: 'Code',
+	newPage			: 'Nieuwe pagina',
+	save			: 'Opslaan',
+	preview			: 'Voorbeeld',
+	cut				: 'Knippen',
+	copy			: 'Kopiëren',
+	paste			: 'Plakken',
+	print			: 'Printen',
+	underline		: 'Onderstreept',
+	bold			: 'Vet',
+	italic			: 'Schuingedrukt',
+	selectAll		: 'Alles selecteren',
+	removeFormat	: 'Opmaak verwijderen',
+	strike			: 'Doorhalen',
+	subscript		: 'Subscript',
+	superscript		: 'Superscript',
+	horizontalrule	: 'Horizontale lijn invoegen',
+	pagebreak		: 'Pagina-einde invoegen',
+	pagebreakAlt		: 'Pagina-einde',
+	unlink			: 'Link verwijderen',
+	undo			: 'Ongedaan maken',
+	redo			: 'Opnieuw uitvoeren',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Bladeren op server',
+		url				: 'URL',
+		protocol		: 'Protocol',
+		upload			: 'Upload',
+		uploadSubmit	: 'Naar server verzenden',
+		image			: 'Afbeelding',
+		flash			: 'Flash',
+		form			: 'Formulier',
+		checkbox		: 'Aanvinkvakje',
+		radio			: 'Selectievakje',
+		textField		: 'Tekstveld',
+		textarea		: 'Tekstvak',
+		hiddenField		: 'Verborgen veld',
+		button			: 'Knop',
+		select			: 'Selectieveld',
+		imageButton		: 'Afbeeldingsknop',
+		notSet			: '<niet ingevuld>',
+		id				: 'Kenmerk',
+		name			: 'Naam',
+		langDir			: 'Schrijfrichting',
+		langDirLtr		: 'Links naar rechts (LTR)',
+		langDirRtl		: 'Rechts naar links (RTL)',
+		langCode		: 'Taalcode',
+		longDescr		: 'Lange URL-omschrijving',
+		cssClass		: 'Stylesheet-klassen',
+		advisoryTitle	: 'Aanbevolen titel',
+		cssStyle		: 'Stijl',
+		ok				: 'OK',
+		cancel			: 'Annuleren',
+		close			: 'Sluiten',
+		preview			: 'Voorbeeld',
+		generalTab		: 'Algemeen',
+		advancedTab		: 'Geavanceerd',
+		validateNumberFailed : 'Deze waarde is geen geldig getal.',
+		confirmNewPage	: 'Alle aangebrachte wijzigingen gaan verloren. Weet u zeker dat u een nieuwe pagina wilt openen?',
+		confirmCancel	: 'Enkele opties zijn gewijzigd. Weet u zeker dat u dit dialoogvenster wilt sluiten?',
+		options			: 'Opties',
+		target			: 'Doel',
+		targetNew		: 'Nieuw venster (_blank)',
+		targetTop		: 'Hele venster (_top)',
+		targetSelf		: 'Zelfde venster (_self)',
+		targetParent	: 'Origineel venster (_parent)',
+		langDirLTR		: 'Links naar rechts (LTR)',
+		langDirRTL		: 'Rechts naar links (RTL)',
+		styles			: 'Stijlen',
+		cssClasses		: 'Stylesheet klassen',
+		width			: 'Breedte',
+		height			: 'Hoogte',
+		align			: 'Uitlijning',
+		alignLeft		: 'Links',
+		alignRight		: 'Rechts',
+		alignCenter		: 'Centreren',
+		alignTop		: 'Boven',
+		alignMiddle		: 'Midden',
+		alignBottom		: 'Beneden',
+		invalidHeight	: 'De hoogte moet een getal zijn.',
+		invalidWidth	: 'De breedte moet een getal zijn.',
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, niet beschikbaar</span>'
+	},
+
+	contextmenu :
+	{
+		options : 'Context menu opties'
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Speciaal teken invoegen',
+		title		: 'Selecteer speciaal teken',
+		options : 'Speciale tekens opties'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Link invoegen/wijzigen',
+		other 		: '<ander>',
+		menu		: 'Link wijzigen',
+		title		: 'Link',
+		info		: 'Linkomschrijving',
+		target		: 'Doel',
+		upload		: 'Upload',
+		advanced	: 'Geavanceerd',
+		type		: 'Linktype',
+		toUrl		: 'URL',
+		toAnchor	: 'Interne link in pagina',
+		toEmail		: 'E-mail',
+		targetFrame		: '<frame>',
+		targetPopup		: '<popup window>',
+		targetFrameName	: 'Naam doelframe',
+		targetPopupName	: 'Naam popupvenster',
+		popupFeatures	: 'Instellingen popupvenster',
+		popupResizable	: 'Herschaalbaar',
+		popupStatusBar	: 'Statusbalk',
+		popupLocationBar: 'Locatiemenu',
+		popupToolbar	: 'Menubalk',
+		popupMenuBar	: 'Menubalk',
+		popupFullScreen	: 'Volledig scherm (IE)',
+		popupScrollBars	: 'Schuifbalken',
+		popupDependent	: 'Afhankelijk (Netscape)',
+		popupLeft		: 'Positie links',
+		popupTop		: 'Positie boven',
+		id				: 'Id',
+		langDir			: 'Schrijfrichting',
+		langDirLTR		: 'Links naar rechts (LTR)',
+		langDirRTL		: 'Rechts naar links (RTL)',
+		acccessKey		: 'Toegangstoets',
+		name			: 'Naam',
+		langCode			: 'Schrijfrichting',
+		tabIndex			: 'Tabvolgorde',
+		advisoryTitle		: 'Aanbevolen titel',
+		advisoryContentType	: 'Aanbevolen content-type',
+		cssClasses		: 'Stylesheet-klassen',
+		charset			: 'Karakterset van gelinkte bron',
+		styles			: 'Stijl',
+		rel			: 'Relatie',
+		selectAnchor		: 'Kies een interne link',
+		anchorName		: 'Op naam interne link',
+		anchorId			: 'Op kenmerk interne link',
+		emailAddress		: 'E-mailadres',
+		emailSubject		: 'Onderwerp bericht',
+		emailBody		: 'Inhoud bericht',
+		noAnchors		: '(Geen interne links in document gevonden)',
+		noUrl			: 'Geef de link van de URL',
+		noEmail			: 'Geef een e-mailadres'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Interne link',
+		menu		: 'Eigenschappen interne link',
+		title		: 'Eigenschappen interne link',
+		name		: 'Naam interne link',
+		errorName	: 'Geef de naam van de interne link op',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Eigenschappen genummerde lijst',
+		bulletedTitle		: 'Eigenschappen lijst met opsommingstekens',
+		type				: 'Type',
+		start				: 'Start',
+		validateStartNumber				:'Starnummer van de lijst moet een heel nummer zijn.',
+		circle				: 'Cirkel',
+		disc				: 'Schijf',
+		square				: 'Vierkant',
+		none				: 'Geen',
+		notset				: '<niet gezet>',
+		armenian			: 'Armeense numering',
+		georgian			: 'Greorgische numering (an, ban, gan, etc.)',
+		lowerRoman			: 'Romeins kleine letters (i, ii, iii, iv, v, etc.)',
+		upperRoman			: 'Romeins hoofdletters (I, II, III, IV, V, etc.)',
+		lowerAlpha			: 'Kleine letters (a, b, c, d, e, etc.)',
+		upperAlpha			: 'Hoofdletters (A, B, C, D, E, etc.)',
+		lowerGreek			: 'Grieks kleine letters (alpha, beta, gamma, etc.)',
+		decimal				: 'Cijfers (1, 2, 3, etc.)',
+		decimalLeadingZero	: 'Cijfers beginnen met nul (01, 02, 03, etc.)'
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Zoeken en vervangen',
+		find				: 'Zoeken',
+		replace				: 'Vervangen',
+		findWhat			: 'Zoeken naar:',
+		replaceWith			: 'Vervangen met:',
+		notFoundMsg			: 'De opgegeven tekst is niet gevonden.',
+		matchCase			: 'Hoofdlettergevoelig',
+		matchWord			: 'Hele woord moet voorkomen',
+		matchCyclic			: 'Doorlopend zoeken',
+		replaceAll			: 'Alles vervangen',
+		replaceSuccessMsg	: '%1 resulaten vervangen.'
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tabel',
+		title		: 'Eigenschappen tabel',
+		menu		: 'Eigenschappen tabel',
+		deleteTable	: 'Tabel verwijderen',
+		rows		: 'Rijen',
+		columns		: 'Kolommen',
+		border		: 'Breedte rand',
+		widthPx		: 'pixels',
+		widthPc		: 'procent',
+		widthUnit	: 'eenheid breedte',
+		cellSpace	: 'Afstand tussen cellen',
+		cellPad		: 'Ruimte in de cel',
+		caption		: 'Naam',
+		summary		: 'Samenvatting',
+		headers		: 'Koppen',
+		headersNone		: 'Geen',
+		headersColumn	: 'Eerste kolom',
+		headersRow		: 'Eerste rij',
+		headersBoth		: 'Beide',
+		invalidRows		: 'Het aantal rijen moet een getal zijn groter dan 0.',
+		invalidCols		: 'Het aantal kolommen moet een getal zijn groter dan 0.',
+		invalidBorder	: 'De rand breedte moet een getal zijn.',
+		invalidWidth	: 'De tabel breedte moet een getal zijn.',
+		invalidHeight	: 'De tabel hoogte moet een getal zijn.',
+		invalidCellSpacing	: 'Afstand tussen cellen moet een getal zijn.',
+		invalidCellPadding	: 'Ruimte in de cel moet een getal zijn.',
+
+		cell :
+		{
+			menu			: 'Cel',
+			insertBefore	: 'Voeg cel in voor',
+			insertAfter		: 'Voeg cel in achter',
+			deleteCell		: 'Cellen verwijderen',
+			merge			: 'Cellen samenvoegen',
+			mergeRight		: 'Voeg samen naar rechts',
+			mergeDown		: 'Voeg samen naar beneden',
+			splitHorizontal	: 'Splits cellen horizontaal',
+			splitVertical	: 'Splits cellen verticaal',
+			title			: 'Cel eigenschappen',
+			cellType		: 'Cel type',
+			rowSpan			: 'Rijen samenvoegen',
+			colSpan			: 'Kolommen samenvoegen',
+			wordWrap		: 'Automatische terugloop',
+			hAlign			: 'Horizontale uitlijning',
+			vAlign			: 'Verticale uitlijning',
+			alignBaseline	: 'Basislijn',
+			bgColor			: 'Achtergrondkleur',
+			borderColor		: 'Kleur rand',
+			data			: 'Inhoud',
+			header			: 'Kop',
+			yes				: 'Ja',
+			no				: 'Nee',
+			invalidWidth	: 'De celbreedte moet een getal zijn.',
+			invalidHeight	: 'De celhoogte moet een getal zijn.',
+			invalidRowSpan	: 'Rijen samenvoegen moet een heel getal zijn.',
+			invalidColSpan	: 'Kolommen samenvoegen moet een heel getal zijn.',
+			chooseColor		: 'Kies'
+		},
+
+		row :
+		{
+			menu			: 'Rij',
+			insertBefore	: 'Voeg rij in voor',
+			insertAfter		: 'Voeg rij in achter',
+			deleteRow		: 'Rijen verwijderen'
+		},
+
+		column :
+		{
+			menu			: 'Kolom',
+			insertBefore	: 'Voeg kolom in voor',
+			insertAfter		: 'Voeg kolom in achter',
+			deleteColumn	: 'Kolommen verwijderen'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Eigenschappen knop',
+		text		: 'Tekst (waarde)',
+		type		: 'Soort',
+		typeBtn		: 'Knop',
+		typeSbm		: 'Versturen',
+		typeRst		: 'Leegmaken'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Eigenschappen aanvinkvakje',
+		radioTitle	: 'Eigenschappen selectievakje',
+		value		: 'Waarde',
+		selected	: 'Geselecteerd'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Eigenschappen formulier',
+		menu		: 'Eigenschappen formulier',
+		action		: 'Actie',
+		method		: 'Methode',
+		encoding	: 'Codering'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Eigenschappen selectieveld',
+		selectInfo	: 'Informatie',
+		opAvail		: 'Beschikbare opties',
+		value		: 'Waarde',
+		size		: 'Grootte',
+		lines		: 'Regels',
+		chkMulti	: 'Gecombineerde selecties toestaan',
+		opText		: 'Tekst',
+		opValue		: 'Waarde',
+		btnAdd		: 'Toevoegen',
+		btnModify	: 'Wijzigen',
+		btnUp		: 'Omhoog',
+		btnDown		: 'Omlaag',
+		btnSetValue : 'Als geselecteerde waarde instellen',
+		btnDelete	: 'Verwijderen'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Eigenschappen tekstvak',
+		cols		: 'Kolommen',
+		rows		: 'Rijen'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Eigenschappen tekstveld',
+		name		: 'Naam',
+		value		: 'Waarde',
+		charWidth	: 'Breedte (tekens)',
+		maxChars	: 'Maximum aantal tekens',
+		type		: 'Soort',
+		typeText	: 'Tekst',
+		typePass	: 'Wachtwoord'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Eigenschappen verborgen veld',
+		name	: 'Naam',
+		value	: 'Waarde'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Eigenschappen afbeelding',
+		titleButton	: 'Eigenschappen afbeeldingsknop',
+		menu		: 'Eigenschappen afbeelding',
+		infoTab		: 'Informatie afbeelding',
+		btnUpload	: 'Naar server verzenden',
+		upload		: 'Upload',
+		alt			: 'Alternatieve tekst',
+		lockRatio	: 'Afmetingen vergrendelen',
+		resetSize	: 'Afmetingen resetten',
+		border		: 'Rand',
+		hSpace		: 'HSpace',
+		vSpace		: 'VSpace',
+		alertUrl	: 'Geef de URL van de afbeelding',
+		linkTab		: 'Link',
+		button2Img	: 'Wilt u de geselecteerde afbeeldingsknop vervangen door een eenvoudige afbeelding?',
+		img2Button	: 'Wilt u de geselecteerde afbeelding vervangen door een afbeeldingsknop?',
+		urlMissing	: 'De URL naar de afbeelding ontbreekt.',
+		validateBorder	: 'Rand moet een heel nummer zijn.',
+		validateHSpace	: 'HSpace moet een heel nummer zijn.',
+		validateVSpace	: 'VSpace moet een heel nummer zijn.'
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Eigenschappen Flash',
+		propertiesTab	: 'Eigenschappen',
+		title			: 'Eigenschappen Flash',
+		chkPlay			: 'Automatisch afspelen',
+		chkLoop			: 'Herhalen',
+		chkMenu			: 'Flashmenu\'s inschakelen',
+		chkFull			: 'Schermvullend toestaan',
+ 		scale			: 'Schaal',
+		scaleAll		: 'Alles tonen',
+		scaleNoBorder	: 'Geen rand',
+		scaleFit		: 'Precies passend',
+		access			: 'Script toegang',
+		accessAlways	: 'Altijd',
+		accessSameDomain: 'Zelfde domeinnaam',
+		accessNever		: 'Nooit',
+		alignAbsBottom	: 'Absoluut-onder',
+		alignAbsMiddle	: 'Absoluut-midden',
+		alignBaseline	: 'Basislijn',
+		alignTextTop	: 'Boven tekst',
+		quality			: 'Kwaliteit',
+		qualityBest		: 'Beste',
+		qualityHigh		: 'Hoog',
+		qualityAutoHigh	: 'Automatisch hoog',
+		qualityMedium	: 'Gemiddeld',
+		qualityAutoLow	: 'Automatisch laag',
+		qualityLow		: 'Laag',
+		windowModeWindow: 'Venster',
+		windowModeOpaque: 'Ondoorzichtig',
+		windowModeTransparent : 'Doorzichtig',
+		windowMode		: 'Venster modus',
+		flashvars		: 'Variabelen voor Flash',
+		bgcolor			: 'Achtergrondkleur',
+		hSpace			: 'HSpace',
+		vSpace			: 'VSpace',
+		validateSrc		: 'Geef de link van de URL',
+		validateHSpace	: 'De HSpace moet een getal zijn.',
+		validateVSpace	: 'De VSpace moet een getal zijn.'
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Spellingscontrole',
+		title			: 'Spellingscontrole',
+		notAvailable	: 'Excuses, deze dienst is momenteel niet beschikbaar.',
+		errorLoading	: 'Er is een fout opgetreden bij het laden van de diesnt: %s.',
+		notInDic		: 'Niet in het woordenboek',
+		changeTo		: 'Wijzig in',
+		btnIgnore		: 'Negeren',
+		btnIgnoreAll	: 'Alles negeren',
+		btnReplace		: 'Vervangen',
+		btnReplaceAll	: 'Alles vervangen',
+		btnUndo			: 'Ongedaan maken',
+		noSuggestions	: '-Geen suggesties-',
+		progress		: 'Bezig met spellingscontrole...',
+		noMispell		: 'Klaar met spellingscontrole: geen fouten gevonden',
+		noChanges		: 'Klaar met spellingscontrole: geen woorden aangepast',
+		oneChange		: 'Klaar met spellingscontrole: één woord aangepast',
+		manyChanges		: 'Klaar met spellingscontrole: %1 woorden aangepast',
+		ieSpellDownload	: 'De spellingscontrole niet geïnstalleerd. Wilt u deze nu downloaden?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Smiley',
+		title	: 'Smiley invoegen',
+		options : 'Smiley opties'
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elementenpad',
+		eleTitle : '%1 element'
+	},
+
+	numberedlist	: 'Genummerde lijst',
+	bulletedlist	: 'Opsomming',
+	indent			: 'Inspringen vergroten',
+	outdent			: 'Inspringen verkleinen',
+
+	justify :
+	{
+		left	: 'Links uitlijnen',
+		center	: 'Centreren',
+		right	: 'Rechts uitlijnen',
+		block	: 'Uitvullen'
+	},
+
+	blockquote : 'Citaatblok',
+
+	clipboard :
+	{
+		title		: 'Plakken',
+		cutError	: 'De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl/Cmd+X van het toetsenbord.',
+		copyError	: 'De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl/Cmd+C van het toetsenbord.',
+		pasteMsg	: 'Plak de tekst in het volgende vak gebruik makend van uw toetsenbord (<strong>Ctrl/Cmd+V</strong>) en klik op <strong>OK</strong>.',
+		securityMsg	: 'Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.',
+		pasteArea	: 'Plakgebied'
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'De tekst die u plakte lijkt gekopieerd te zijn vanuit Word. Wilt u de tekst opschonen voordat deze geplakt wordt?',
+		toolbar			: 'Plakken als Word-gegevens',
+		title			: 'Plakken als Word-gegevens',
+		error			: 'Het was niet mogelijk om de geplakte tekst op te schonen door een interne fout'
+	},
+
+	pasteText :
+	{
+		button	: 'Plakken als platte tekst',
+		title	: 'Plakken als platte tekst'
+	},
+
+	templates :
+	{
+		button			: 'Sjablonen',
+		title			: 'Inhoud sjabonen',
+		options : 'Template opties',
+		insertOption	: 'Vervang de huidige inhoud',
+		selectPromptMsg	: 'Selecteer het sjabloon dat in de editor geopend moet worden (de actuele inhoud gaat verloren):',
+		emptyListMsg	: '(Geen sjablonen gedefinieerd)'
+	},
+
+	showBlocks : 'Toon blokken',
+
+	stylesCombo :
+	{
+		label		: 'Stijl',
+		panelTitle	: 'Opmaakstijlen',
+		panelTitle1	: 'Blok stijlen',
+		panelTitle2	: 'In-line stijlen',
+		panelTitle3	: 'Object stijlen'
+	},
+
+	format :
+	{
+		label		: 'Opmaak',
+		panelTitle	: 'Opmaak',
+
+		tag_p		: 'Normaal',
+		tag_pre		: 'Met opmaak',
+		tag_address	: 'Adres',
+		tag_h1		: 'Kop 1',
+		tag_h2		: 'Kop 2',
+		tag_h3		: 'Kop 3',
+		tag_h4		: 'Kop 4',
+		tag_h5		: 'Kop 5',
+		tag_h6		: 'Kop 6',
+		tag_div		: 'Normaal (DIV)'
+	},
+
+	div :
+	{
+		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'
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame eigenschappen',
+		toolbar		: 'IFrame',
+		noUrl		: 'Geef de IFrame URL in',
+		scrolling	: 'Scrollbalken inschakelen',
+		border		: 'Framerand tonen'
+	},
+
+	font :
+	{
+		label		: 'Lettertype',
+		voiceLabel	: 'Lettertype',
+		panelTitle	: 'Lettertype'
+	},
+
+	fontSize :
+	{
+		label		: 'Lettergrootte',
+		voiceLabel	: 'Lettergrootte',
+		panelTitle	: 'Lettergrootte'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Tekstkleur',
+		bgColorTitle	: 'Achtergrondkleur',
+		panelTitle		: 'Kleuren',
+		auto			: 'Automatisch',
+		more			: 'Meer kleuren...'
+	},
+
+	colors :
+	{
+		'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'
+	},
+
+	scayt :
+	{
+		title			: 'Controleer de spelling tijdens het typen',
+		opera_title		: 'Niet ondersteund door Opera',
+		enable			: 'SCAYT inschakelen',
+		disable			: 'SCAYT uitschakelen',
+		about			: 'Over SCAYT',
+		toggle			: 'SCAYT in/uitschakelen',
+		options			: 'Opties',
+		langs			: 'Talen',
+		moreSuggestions	: 'Meer suggesties',
+		ignore			: 'Negeren',
+		ignoreAll		: 'Alles negeren',
+		addWord			: 'Woord toevoegen',
+		emptyDic		: 'De naam van het woordenboek mag niet leeg zijn.',
+
+		optionsTab		: 'Opties',
+		allCaps			: 'Negeer woorden helemaal in hoofdletters',
+		ignoreDomainNames : 'Negeer domeinnamen',
+		mixedCase		: 'Negeer woorden met hoofd- en kleine letters',
+		mixedWithDigits	: 'Negeer woorden met cijfers',
+
+		languagesTab	: 'Talen',
+
+		dictionariesTab	: 'Woordenboeken',
+		dic_field_name	: 'Naam woordenboek',
+		dic_create		: 'Aanmaken',
+		dic_restore		: 'Terugzetten',
+		dic_delete		: 'Verwijderen',
+		dic_rename		: 'Hernoemen',
+		dic_info		: 'Initieel wordt het gebruikerswoordenboek opgeslagen in een cookie. Cookies zijn echter beperkt in grootte. Zodra het gebruikerswoordenboek het punt bereikt waarop het niet meer in een cookie opgeslagen kan worden, dan wordt het woordenboek op de server opgeslagen. Om je persoonlijke woordenboek op je eigen server op te slaan, moet je een mapnaam opgeven. Indien je al een woordenboek hebt opgeslagen, typ dan de naam en klik op de Terugzetten knop.',
+
+		aboutTab		: 'Over'
+	},
+
+	about :
+	{
+		title		: 'Over CKEditor',
+		dlgTitle	: 'Over CKEditor',
+		help	: 'Bekijk $1 voor hulp.',
+		userGuide : 'CKEditor gebruiksaanwijzing',
+		moreInfo	: 'Voor licentie informatie, bezoek onze website:',
+		copy		: 'Copyright &copy; $1. Alle rechten voorbehouden.'
+	},
+
+	maximize : 'Maximaliseren',
+	minimize : 'Minimaliseren',
+
+	fakeobjects :
+	{
+		anchor		: 'Anker',
+		flash		: 'Flash animatie',
+		iframe		: 'IFrame',
+		hiddenfield	: 'Verborgen veld',
+		unknown		: 'Onbekend object'
+	},
+
+	resize : 'Sleep om te herschalen',
+
+	colordialog :
+	{
+		title		: 'Selecteer kleur',
+		options	:	'Kleuropties',
+		highlight	: 'Actief',
+		selected	: 'Geselecteerd',
+		clear		: 'Wissen'
+	},
+
+	toolbarCollapse	: 'Werkbalk inklappen',
+	toolbarExpand	: 'Werkbalk uitklappen',
+
+	toolbarGroups :
+	{
+		document : 'Document',
+		clipboard : 'Klembord/Ongedaan maken',
+		editing : 'Bewerken',
+		forms : 'Formulieren',
+		basicstyles : 'Basisstijlen',
+		paragraph : 'Paragraaf',
+		links : 'Links',
+		insert : 'Invoegen',
+		styles : 'Stijlen',
+		colors : 'Kleuren',
+		tools : 'Toepassingen'
+	},
+
+	bidi :
+	{
+		ltr : 'Schrijfrichting van links naar rechts',
+		rtl : 'Schrijfrichting van rechts naar links'
+	},
+
+	docprops :
+	{
+		label : 'Documenteigenschappen',
+		title : 'Documenteigenschappen',
+		design : 'Ontwerp',
+		meta : 'Meta tags',
+		chooseColor : 'Kiezen',
+		other : 'Anders...',
+		docTitle :	'Paginatitel',
+		charset : 	'Tekencodering',
+		charsetOther : 'Andere tekencodering',
+		charsetASCII : 'ASCII',
+		charsetCE : 'Centraal Europees',
+		charsetCT : 'Tranditioneel Chinees (Big5)',
+		charsetCR : 'Cyrillisch',
+		charsetGR : 'Grieks',
+		charsetJP : 'Japans',
+		charsetKR : 'Koreaans',
+		charsetTR : 'Turks',
+		charsetUN : 'Unicode (UTF-8)',
+		charsetWE : 'West Europees',
+		docType : 'Documenttype-definitie',
+		docTypeOther : 'Andere documenttype-definitie',
+		xhtmlDec : 'XHTML declaratie invoegen',
+		bgColor : 'Achtergrondkleur',
+		bgImage : 'Achtergrondafbeelding URL',
+		bgFixed : 'Niet-scrollend (gefixeerde) achtergrond',
+		txtColor : 'Tekstkleur',
+		margin : 'Pagina marges',
+		marginTop : 'Boven',
+		marginLeft : 'Links',
+		marginRight : 'Rechts',
+		marginBottom : 'Onder',
+		metaKeywords : 'Trefwoorden voor indexering (komma-gescheiden)',
+		metaDescription : 'Documentbeschrijving',
+		metaAuthor : 'Auteur',
+		metaCopyright : 'Auteursrechten',
+		previewHtml : '<p>Dit is <strong>voorbeeld tekst</strong>. Je gebruikt <a href="javascript:void(0)">CKEditor</a>.</p>'
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/no.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Norwegian language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['no'] =
+{
+	/**
+	 * 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 : 'Rikteksteditor, %1, trykk ALT 0 for hjelp.',
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rikteksteditor',
+
+	// Toolbar buttons without dialogs.
+	source			: 'Kilde',
+	newPage			: 'Ny side',
+	save			: 'Lagre',
+	preview			: 'Forhåndsvis',
+	cut				: 'Klipp ut',
+	copy			: 'Kopier',
+	paste			: 'Lim inn',
+	print			: 'Skriv ut',
+	underline		: 'Understreking',
+	bold			: 'Fet',
+	italic			: 'Kursiv',
+	selectAll		: 'Merk alt',
+	removeFormat	: 'Fjern formatering',
+	strike			: 'Gjennomstreking',
+	subscript		: 'Senket skrift',
+	superscript		: 'Hevet skrift',
+	horizontalrule	: 'Sett inn horisontal linje',
+	pagebreak		: 'Sett inn sideskift for utskrift',
+	pagebreakAlt		: 'Sideskift',
+	unlink			: 'Fjern lenke',
+	undo			: 'Angre',
+	redo			: 'Gjør om',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Bla igjennom server',
+		url				: 'URL',
+		protocol		: 'Protokoll',
+		upload			: 'Last opp',
+		uploadSubmit	: 'Send det til serveren',
+		image			: 'Bilde',
+		flash			: 'Flash',
+		form			: 'Skjema',
+		checkbox		: 'Avmerkingsboks',
+		radio			: 'Alternativknapp',
+		textField		: 'Tekstboks',
+		textarea		: 'Tekstområde',
+		hiddenField		: 'Skjult felt',
+		button			: 'Knapp',
+		select			: 'Rullegardinliste',
+		imageButton		: 'Bildeknapp',
+		notSet			: '<ikke satt>',
+		id				: 'Id',
+		name			: 'Navn',
+		langDir			: 'Språkretning',
+		langDirLtr		: 'Venstre til høyre (VTH)',
+		langDirRtl		: 'Høyre til venstre (HTV)',
+		langCode		: 'Språkkode',
+		longDescr		: 'Utvidet beskrivelse',
+		cssClass		: 'Stilarkklasser',
+		advisoryTitle	: 'Tittel',
+		cssStyle		: 'Stil',
+		ok				: 'OK',
+		cancel			: 'Avbryt',
+		close			: 'Lukk',
+		preview			: 'Forhåndsvis',
+		generalTab		: 'Generelt',
+		advancedTab		: 'Avansert',
+		validateNumberFailed : 'Denne verdien er ikke et tall.',
+		confirmNewPage	: 'Alle ulagrede endringer som er gjort i dette innholdet vil bli tapt. Er du sikker på at du vil laste en ny side?',
+		confirmCancel	: 'Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?',
+		options			: 'Valg',
+		target			: 'Mål',
+		targetNew		: 'Nytt vindu (_blank)',
+		targetTop		: 'Hele vindu (_top)',
+		targetSelf		: 'Samme vindu (_self)',
+		targetParent	: 'Foreldrevindu (_parent)',
+		langDirLTR		: 'Venstre til høyre (VTH)',
+		langDirRTL		: 'Høyre til venstre (HTV)',
+		styles			: 'Stil',
+		cssClasses		: 'Stilarkklasser',
+		width			: 'Bredde',
+		height			: 'Høyde',
+		align			: 'Juster',
+		alignLeft		: 'Venstre',
+		alignRight		: 'Høyre',
+		alignCenter		: 'Midtjuster',
+		alignTop		: 'Topp',
+		alignMiddle		: 'Midten',
+		alignBottom		: 'Bunn',
+		invalidHeight	: 'Høyde må være et tall.',
+		invalidWidth	: 'Bredde må være et tall.',
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, utilgjenglig</span>'
+	},
+
+	contextmenu :
+	{
+		options : 'Alternativer for høyreklikkmeny'
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Sett inn spesialtegn',
+		title		: 'Velg spesialtegn',
+		options : 'Alternativer for spesialtegn'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Sett inn/Rediger lenke',
+		other 		: '<annen>',
+		menu		: 'Rediger lenke',
+		title		: 'Lenke',
+		info		: 'Lenkeinfo',
+		target		: 'Mål',
+		upload		: 'Last opp',
+		advanced	: 'Avansert',
+		type		: 'Lenketype',
+		toUrl		: 'URL',
+		toAnchor	: 'Lenke til anker i teksten',
+		toEmail		: 'E-post',
+		targetFrame		: '<ramme>',
+		targetPopup		: '<popup-vindu>',
+		targetFrameName	: 'Målramme',
+		targetPopupName	: 'Navn på popup-vindu',
+		popupFeatures	: 'Egenskaper for popup-vindu',
+		popupResizable	: 'Skalerbar',
+		popupStatusBar	: 'Statuslinje',
+		popupLocationBar: 'Adresselinje',
+		popupToolbar	: 'Verktøylinje',
+		popupMenuBar	: 'Menylinje',
+		popupFullScreen	: 'Fullskjerm (IE)',
+		popupScrollBars	: 'Scrollbar',
+		popupDependent	: 'Avhenging (Netscape)',
+		popupLeft		: 'Venstre posisjon',
+		popupTop		: 'Topp-posisjon',
+		id				: 'Id',
+		langDir			: 'Språkretning',
+		langDirLTR		: 'Venstre til høyre (VTH)',
+		langDirRTL		: 'Høyre til venstre (HTV)',
+		acccessKey		: 'Aksessknapp',
+		name			: 'Navn',
+		langCode			: 'Språkkode',
+		tabIndex			: 'Tabindeks',
+		advisoryTitle		: 'Tittel',
+		advisoryContentType	: 'Type',
+		cssClasses		: 'Stilarkklasser',
+		charset			: 'Lenket tegnsett',
+		styles			: 'Stil',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Velg et anker',
+		anchorName		: 'Anker etter navn',
+		anchorId			: 'Element etter ID',
+		emailAddress		: 'E-postadresse',
+		emailSubject		: 'Meldingsemne',
+		emailBody		: 'Melding',
+		noAnchors		: '(Ingen anker i dokumentet)',
+		noUrl			: 'Vennligst skriv inn lenkens URL',
+		noEmail			: 'Vennligst skriv inn e-postadressen'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Sett inn/Rediger anker',
+		menu		: 'Egenskaper for anker',
+		title		: 'Egenskaper for anker',
+		name		: 'Ankernavn',
+		errorName	: 'Vennligst skriv inn ankernavnet',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Egenskaper for nummerert liste',
+		bulletedTitle		: 'Egenskaper for punktmerket liste',
+		type				: 'Type',
+		start				: 'Start',
+		validateStartNumber				:'Starten på listen må være et heltall.',
+		circle				: 'Sirkel',
+		disc				: 'Disk',
+		square				: 'Firkant',
+		none				: 'Ingen',
+		notset				: '<ikke satt>',
+		armenian			: 'Armensk nummerering',
+		georgian			: 'Georgisk nummerering (an, ban, gan, osv.)',
+		lowerRoman			: 'Romertall, små (i, ii, iii, iv, v, osv.)',
+		upperRoman			: 'Romertall, store (I, II, III, IV, V, osv.)',
+		lowerAlpha			: 'Alfabetisk, små (a, b, c, d, e, osv.)',
+		upperAlpha			: 'Alfabetisk, store (A, B, C, D, E, osv.)',
+		lowerGreek			: 'Gresk, små (alpha, beta, gamma, osv.)',
+		decimal				: 'Tall (1, 2, 3, osv.)',
+		decimalLeadingZero	: 'Tall, med førstesiffer null (01, 02, 03, osv.)'
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Søk og erstatt',
+		find				: 'Søk',
+		replace				: 'Erstatt',
+		findWhat			: 'Søk etter:',
+		replaceWith			: 'Erstatt med:',
+		notFoundMsg			: 'Fant ikke søketeksten.',
+		matchCase			: 'Skill mellom store og små bokstaver',
+		matchWord			: 'Bare hele ord',
+		matchCyclic			: 'Søk i hele dokumentet',
+		replaceAll			: 'Erstatt alle',
+		replaceSuccessMsg	: '%1 tilfelle(r) erstattet.'
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tabell',
+		title		: 'Egenskaper for tabell',
+		menu		: 'Egenskaper for tabell',
+		deleteTable	: 'Slett tabell',
+		rows		: 'Rader',
+		columns		: 'Kolonner',
+		border		: 'Rammestørrelse',
+		widthPx		: 'piksler',
+		widthPc		: 'prosent',
+		widthUnit	: 'Bredde-enhet',
+		cellSpace	: 'Cellemarg',
+		cellPad		: 'Cellepolstring',
+		caption		: 'Tittel',
+		summary		: 'Sammendrag',
+		headers		: 'Overskrifter',
+		headersNone		: 'Ingen',
+		headersColumn	: 'Første kolonne',
+		headersRow		: 'Første rad',
+		headersBoth		: 'Begge',
+		invalidRows		: 'Antall rader må være et tall større enn 0.',
+		invalidCols		: 'Antall kolonner må være et tall større enn 0.',
+		invalidBorder	: 'Rammestørrelse må være et tall.',
+		invalidWidth	: 'Tabellbredde må være et tall.',
+		invalidHeight	: 'Tabellhøyde må være et tall.',
+		invalidCellSpacing	: 'Cellemarg må være et tall.',
+		invalidCellPadding	: 'Cellepolstring må være et tall.',
+
+		cell :
+		{
+			menu			: 'Celle',
+			insertBefore	: 'Sett inn celle før',
+			insertAfter		: 'Sett inn celle etter',
+			deleteCell		: 'Slett celler',
+			merge			: 'Slå sammen celler',
+			mergeRight		: 'Slå sammen høyre',
+			mergeDown		: 'Slå sammen ned',
+			splitHorizontal	: 'Del celle horisontalt',
+			splitVertical	: 'Del celle vertikalt',
+			title			: 'Celleegenskaper',
+			cellType		: 'Celletype',
+			rowSpan			: 'Radspenn',
+			colSpan			: 'Kolonnespenn',
+			wordWrap		: 'Tekstbrytning',
+			hAlign			: 'Horisontal justering',
+			vAlign			: 'Vertikal justering',
+			alignBaseline	: 'Grunnlinje',
+			bgColor			: 'Bakgrunnsfarge',
+			borderColor		: 'Rammefarge',
+			data			: 'Data',
+			header			: 'Overskrift',
+			yes				: 'Ja',
+			no				: 'Nei',
+			invalidWidth	: 'Cellebredde må være et tall.',
+			invalidHeight	: 'Cellehøyde må være et tall.',
+			invalidRowSpan	: 'Radspenn må være et heltall.',
+			invalidColSpan	: 'Kolonnespenn må være et heltall.',
+			chooseColor		: 'Velg'
+		},
+
+		row :
+		{
+			menu			: 'Rader',
+			insertBefore	: 'Sett inn rad før',
+			insertAfter		: 'Sett inn rad etter',
+			deleteRow		: 'Slett rader'
+		},
+
+		column :
+		{
+			menu			: 'Kolonne',
+			insertBefore	: 'Sett inn kolonne før',
+			insertAfter		: 'Sett inn kolonne etter',
+			deleteColumn	: 'Slett kolonner'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Egenskaper for knapp',
+		text		: 'Tekst (verdi)',
+		type		: 'Type',
+		typeBtn		: 'Knapp',
+		typeSbm		: 'Send',
+		typeRst		: 'Nullstill'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Egenskaper for avmerkingsboks',
+		radioTitle	: 'Egenskaper for alternativknapp',
+		value		: 'Verdi',
+		selected	: 'Valgt'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Egenskaper for skjema',
+		menu		: 'Egenskaper for skjema',
+		action		: 'Handling',
+		method		: 'Metode',
+		encoding	: 'Encoding'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Egenskaper for rullegardinliste',
+		selectInfo	: 'Info',
+		opAvail		: 'Tilgjenglige alternativer',
+		value		: 'Verdi',
+		size		: 'Størrelse',
+		lines		: 'Linjer',
+		chkMulti	: 'Tillat flervalg',
+		opText		: 'Tekst',
+		opValue		: 'Verdi',
+		btnAdd		: 'Legg til',
+		btnModify	: 'Endre',
+		btnUp		: 'Opp',
+		btnDown		: 'Ned',
+		btnSetValue : 'Sett som valgt',
+		btnDelete	: 'Slett'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Egenskaper for tekstområde',
+		cols		: 'Kolonner',
+		rows		: 'Rader'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Egenskaper for tekstfelt',
+		name		: 'Navn',
+		value		: 'Verdi',
+		charWidth	: 'Tegnbredde',
+		maxChars	: 'Maks antall tegn',
+		type		: 'Type',
+		typeText	: 'Tekst',
+		typePass	: 'Passord'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Egenskaper for skjult felt',
+		name	: 'Navn',
+		value	: 'Verdi'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Bildeegenskaper',
+		titleButton	: 'Egenskaper for bildeknapp',
+		menu		: 'Bildeegenskaper',
+		infoTab		: 'Bildeinformasjon',
+		btnUpload	: 'Send det til serveren',
+		upload		: 'Last opp',
+		alt			: 'Alternativ tekst',
+		lockRatio	: 'Lås forhold',
+		resetSize	: 'Tilbakestill størrelse',
+		border		: 'Ramme',
+		hSpace		: 'HMarg',
+		vSpace		: 'VMarg',
+		alertUrl	: 'Vennligst skriv bilde-urlen',
+		linkTab		: 'Lenke',
+		button2Img	: 'Vil du endre den valgte bildeknappen til et vanlig bilde?',
+		img2Button	: 'Vil du endre det valgte bildet til en bildeknapp?',
+		urlMissing	: 'Bildets adresse mangler.',
+		validateBorder	: 'Ramme må være et heltall.',
+		validateHSpace	: 'HMarg må være et heltall.',
+		validateVSpace	: 'VMarg må være et heltall.'
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Egenskaper for Flash-objekt',
+		propertiesTab	: 'Egenskaper',
+		title			: 'Flash-egenskaper',
+		chkPlay			: 'Autospill',
+		chkLoop			: 'Loop',
+		chkMenu			: 'Slå på Flash-meny',
+		chkFull			: 'Tillat fullskjerm',
+ 		scale			: 'Skaler',
+		scaleAll		: 'Vis alt',
+		scaleNoBorder	: 'Ingen ramme',
+		scaleFit		: 'Skaler til å passe',
+		access			: 'Scripttilgang',
+		accessAlways	: 'Alltid',
+		accessSameDomain: 'Samme domene',
+		accessNever		: 'Aldri',
+		alignAbsBottom	: 'Abs bunn',
+		alignAbsMiddle	: 'Abs midten',
+		alignBaseline	: 'Bunnlinje',
+		alignTextTop	: 'Tekst topp',
+		quality			: 'Kvalitet',
+		qualityBest		: 'Best',
+		qualityHigh		: 'Høy',
+		qualityAutoHigh	: 'Auto høy',
+		qualityMedium	: 'Medium',
+		qualityAutoLow	: 'Auto lav',
+		qualityLow		: 'Lav',
+		windowModeWindow: 'Vindu',
+		windowModeOpaque: 'Opaque',
+		windowModeTransparent : 'Gjennomsiktig',
+		windowMode		: 'Vindumodus',
+		flashvars		: 'Variabler for flash',
+		bgcolor			: 'Bakgrunnsfarge',
+		hSpace			: 'HMarg',
+		vSpace			: 'VMarg',
+		validateSrc		: 'Vennligst skriv inn lenkens url.',
+		validateHSpace	: 'HMarg må være et tall.',
+		validateVSpace	: 'VMarg må være et tall.'
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Stavekontroll',
+		title			: 'Stavekontroll',
+		notAvailable	: 'Beklager, tjenesten er utilgjenglig nå.',
+		errorLoading	: 'Feil under lasting av applikasjonstjenestetjener: %s.',
+		notInDic		: 'Ikke i ordboken',
+		changeTo		: 'Endre til',
+		btnIgnore		: 'Ignorer',
+		btnIgnoreAll	: 'Ignorer alle',
+		btnReplace		: 'Erstatt',
+		btnReplaceAll	: 'Erstatt alle',
+		btnUndo			: 'Angre',
+		noSuggestions	: '- Ingen forslag -',
+		progress		: 'Stavekontroll pågår...',
+		noMispell		: 'Stavekontroll fullført: ingen feilstavinger funnet',
+		noChanges		: 'Stavekontroll fullført: ingen ord endret',
+		oneChange		: 'Stavekontroll fullført: Ett ord endret',
+		manyChanges		: 'Stavekontroll fullført: %1 ord endret',
+		ieSpellDownload	: 'Stavekontroll er ikke installert. Vil du laste den ned nå?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Smil',
+		title	: 'Sett inn smil',
+		options : 'Alternativer for smil'
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Element-sti',
+		eleTitle : '%1 element'
+	},
+
+	numberedlist	: 'Legg til/Fjern nummerert liste',
+	bulletedlist	: 'Legg til/Fjern punktmerket liste',
+	indent			: 'Øk innrykk',
+	outdent			: 'Reduser innrykk',
+
+	justify :
+	{
+		left	: 'Venstrejuster',
+		center	: 'Midtstill',
+		right	: 'Høyrejuster',
+		block	: 'Blokkjuster'
+	},
+
+	blockquote : 'Sitatblokk',
+
+	clipboard :
+	{
+		title		: 'Lim inn',
+		cutError	: 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst bruk snareveien (Ctrl/Cmd+X).',
+		copyError	: 'Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snareveien (Ctrl/Cmd+C).',
+		pasteMsg	: 'Vennligst lim inn i følgende boks med tastaturet (<STRONG>Ctrl/Cmd+V</STRONG>) og trykk <STRONG>OK</STRONG>.',
+		securityMsg	: 'Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.',
+		pasteArea	: 'Innlimingsområde'
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?',
+		toolbar			: 'Lim inn fra Word',
+		title			: 'Lim inn fra Word',
+		error			: 'Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil'
+	},
+
+	pasteText :
+	{
+		button	: 'Lim inn som ren tekst',
+		title	: 'Lim inn som ren tekst'
+	},
+
+	templates :
+	{
+		button			: 'Maler',
+		title			: 'Innholdsmaler',
+		options : 'Alternativer for mal',
+		insertOption	: 'Erstatt gjeldende innhold',
+		selectPromptMsg	: 'Velg malen du vil åpne i redigeringsverktøyet:',
+		emptyListMsg	: '(Ingen maler definert)'
+	},
+
+	showBlocks : 'Vis blokker',
+
+	stylesCombo :
+	{
+		label		: 'Stil',
+		panelTitle	: 'Stilformater',
+		panelTitle1	: 'Blokkstiler',
+		panelTitle2	: 'Inlinestiler',
+		panelTitle3	: 'Objektstiler'
+	},
+
+	format :
+	{
+		label		: 'Format',
+		panelTitle	: 'Avsnittsformat',
+
+		tag_p		: 'Normal',
+		tag_pre		: 'Formatert',
+		tag_address	: 'Adresse',
+		tag_h1		: 'Overskrift 1',
+		tag_h2		: 'Overskrift 2',
+		tag_h3		: 'Overskrift 3',
+		tag_h4		: 'Overskrift 4',
+		tag_h5		: 'Overskrift 5',
+		tag_h6		: 'Overskrift 6',
+		tag_div		: 'Normal (DIV)'
+	},
+
+	div :
+	{
+		title				: 'Sett inn Div Container',
+		toolbar				: 'Sett inn Div Container',
+		cssClassInputLabel	: 'Stilark-klasser',
+		styleSelectLabel	: 'Stil',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Språkkode',
+		inlineStyleInputLabel	: 'Inlinestiler',
+		advisoryTitleInputLabel	: 'Tittel',
+		langDirLabel		: 'Språkretning',
+		langDirLTRLabel		: 'Venstre til høyre (VTH)',
+		langDirRTLLabel		: 'Høyre til venstre (HTV)',
+		edit				: 'Rediger Div',
+		remove				: 'Fjern Div'
+  	},
+
+	iframe :
+	{
+		title		: 'Egenskaper for IFrame',
+		toolbar		: 'IFrame',
+		noUrl		: 'Vennligst skriv inn URL for iframe',
+		scrolling	: 'Aktiver scrollefelt',
+		border		: 'Viss ramme rundt iframe'
+	},
+
+	font :
+	{
+		label		: 'Skrift',
+		voiceLabel	: 'Font',
+		panelTitle	: 'Skrift'
+	},
+
+	fontSize :
+	{
+		label		: 'Størrelse',
+		voiceLabel	: 'Font Størrelse',
+		panelTitle	: 'Størrelse'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Tekstfarge',
+		bgColorTitle	: 'Bakgrunnsfarge',
+		panelTitle		: 'Farger',
+		auto			: 'Automatisk',
+		more			: 'Flere farger...'
+	},
+
+	colors :
+	{
+		'000' : 'Svart',
+		'800000' : 'Rødbrun',
+		'8B4513' : 'Salbrun',
+		'2F4F4F' : 'Grønnsvart',
+		'008080' : 'Blågrønn',
+		'000080' : 'Marineblått',
+		'4B0082' : 'Indigo',
+		'696969' : 'Mørk grå',
+		'B22222' : 'Mørkerød',
+		'A52A2A' : 'Brun',
+		'DAA520' : 'Lys brun',
+		'006400' : 'Mørk grønn',
+		'40E0D0' : 'Turkis',
+		'0000CD' : 'Medium blå',
+		'800080' : 'Purpur',
+		'808080' : 'Grå',
+		'F00' : 'Rød',
+		'FF8C00' : 'Mørk oransje',
+		'FFD700' : 'Gull',
+		'008000' : 'Grønn',
+		'0FF' : 'Cyan',
+		'00F' : 'Blå',
+		'EE82EE' : 'Fiolett',
+		'A9A9A9' : 'Svak grå',
+		'FFA07A' : 'Rosa-oransje',
+		'FFA500' : 'Oransje',
+		'FFFF00' : 'Gul',
+		'00FF00' : 'Lime',
+		'AFEEEE' : 'Svak turkis',
+		'ADD8E6' : 'Lys Blå',
+		'DDA0DD' : 'Plomme',
+		'D3D3D3' : 'Lys grå',
+		'FFF0F5' : 'Svak lavendelrosa',
+		'FAEBD7' : 'Antikk-hvit',
+		'FFFFE0' : 'Lys gul',
+		'F0FFF0' : 'Honningmelon',
+		'F0FFFF' : 'Svakt asurblått',
+		'F0F8FF' : 'Svak cyan',
+		'E6E6FA' : 'Lavendel',
+		'FFF' : 'Hvit'
+	},
+
+	scayt :
+	{
+		title			: 'Stavekontroll mens du skriver',
+		opera_title		: 'Ikke støttet av Opera',
+		enable			: 'Slå på SCAYT',
+		disable			: 'Slå av SCAYT',
+		about			: 'Om SCAYT',
+		toggle			: 'Veksle SCAYT',
+		options			: 'Valg',
+		langs			: 'Språk',
+		moreSuggestions	: 'Flere forslag',
+		ignore			: 'Ignorer',
+		ignoreAll		: 'Ignorer Alle',
+		addWord			: 'Legg til ord',
+		emptyDic		: 'Ordboknavn bør ikke være tom.',
+
+		optionsTab		: 'Valg',
+		allCaps			: 'Ikke kontroller ord med kun store bokstaver',
+		ignoreDomainNames : 'Ikke kontroller domenenavn',
+		mixedCase		: 'Ikke kontroller ord med blandet små og store bokstaver',
+		mixedWithDigits	: 'Ikke kontroller ord som inneholder tall',
+
+		languagesTab	: 'Språk',
+
+		dictionariesTab	: 'Ordbøker',
+		dic_field_name	: 'Ordboknavn',
+		dic_create		: 'Opprett',
+		dic_restore		: 'Gjenopprett',
+		dic_delete		: 'Slett',
+		dic_rename		: 'Gi nytt navn',
+		dic_info		: 'Brukerordboken lagres først i en informasjonskapsel på din maskin, men det er en begrensning på hvor mye som kan lagres her. Når ordboken blir for stor til å lagres i en informasjonskapsel, vil vi i stedet lagre ordboken på vår server. For å lagre din personlige ordbok på vår server, burde du velge et navn for ordboken din. Hvis du allerede har lagret en ordbok, vennligst skriv inn ordbokens navn og klikk på Gjenopprett-knappen.',
+
+		aboutTab		: 'Om'
+	},
+
+	about :
+	{
+		title		: 'Om CKEditor',
+		dlgTitle	: 'Om CKEditor',
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // MISSING
+		moreInfo	: 'For lisensieringsinformasjon, vennligst besøk vårt nettsted:',
+		copy		: 'Copyright &copy; $1. Alle rettigheter reservert.'
+	},
+
+	maximize : 'Maksimer',
+	minimize : 'Minimer',
+
+	fakeobjects :
+	{
+		anchor		: 'Anker',
+		flash		: 'Flash-animasjon',
+		iframe		: 'IFrame',
+		hiddenfield	: 'Skjult felt',
+		unknown		: 'Ukjent objekt'
+	},
+
+	resize : 'Dra for å skalere',
+
+	colordialog :
+	{
+		title		: 'Velg farge',
+		options	:	'Alternativer for farge',
+		highlight	: 'Merk',
+		selected	: 'Valgt',
+		clear		: 'Tøm'
+	},
+
+	toolbarCollapse	: 'Skjul verktøylinje',
+	toolbarExpand	: 'Vis verktøylinje',
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Tekstretning fra venstre til høyre',
+		rtl : 'Tekstretning fra høyre til venstre'
+	},
+
+	docprops :
+	{
+		label : 'Dokumentegenskaper',
+		title : 'Dokumentegenskaper',
+		design : 'Design', // MISSING
+		meta : 'Meta-data',
+		chooseColor : 'Velg',
+		other : '<annen>',
+		docTitle :	'Sidetittel',
+		charset : 	'Tegnsett',
+		charsetOther : 'Annet tegnsett',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Sentraleuropeisk',
+		charsetCT : 'Tradisonell kinesisk(Big5)',
+		charsetCR : 'Cyrillic', // MISSING
+		charsetGR : 'Gresk',
+		charsetJP : 'Japansk',
+		charsetKR : 'Koreansk',
+		charsetTR : 'Tyrkisk',
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Vesteuropeisk',
+		docType : 'Dokumenttype header',
+		docTypeOther : 'Annet dokumenttype header',
+		xhtmlDec : 'Inkluder XHTML-deklarasjon',
+		bgColor : 'Bakgrunnsfarge',
+		bgImage : 'URL for bakgrunnsbilde',
+		bgFixed : 'Lås bakgrunnsbilde',
+		txtColor : 'Tekstfarge',
+		margin : 'Sidemargin',
+		marginTop : 'Topp',
+		marginLeft : 'Venstre',
+		marginRight : 'Høyre',
+		marginBottom : 'Bunn',
+		metaKeywords : 'Dokument nøkkelord (kommaseparert)',
+		metaDescription : 'Dokumentbeskrivelse',
+		metaAuthor : 'Forfatter',
+		metaCopyright : 'Kopirett',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/ro.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Romanian language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['ro'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'Sursa',
+	newPage			: 'Pagină nouă',
+	save			: 'Salvează',
+	preview			: 'Previzualizare',
+	cut				: 'Taie',
+	copy			: 'Copiază',
+	paste			: 'Adaugă',
+	print			: 'Printează',
+	underline		: 'Subliniat (underline)',
+	bold			: 'Îngroşat (bold)',
+	italic			: 'Înclinat (italic)',
+	selectAll		: 'Selectează tot',
+	removeFormat	: 'Înlătură formatarea',
+	strike			: 'Tăiat (strike through)',
+	subscript		: 'Indice (subscript)',
+	superscript		: 'Putere (superscript)',
+	horizontalrule	: 'Inserează linie orizontă',
+	pagebreak		: 'Inserează separator de pagină (Page Break)',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'Înlătură link (legătură web)',
+	undo			: 'Starea anterioară (undo)',
+	redo			: 'Starea ulterioară (redo)',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Răsfoieşte server',
+		url				: 'URL',
+		protocol		: 'Protocol',
+		upload			: 'Încarcă',
+		uploadSubmit	: 'Trimite la server',
+		image			: 'Imagine',
+		flash			: 'Flash',
+		form			: 'Formular (Form)',
+		checkbox		: 'Bifă (Checkbox)',
+		radio			: 'Buton radio (RadioButton)',
+		textField		: 'Câmp text (TextField)',
+		textarea		: 'Suprafaţă text (Textarea)',
+		hiddenField		: 'Câmp ascuns (HiddenField)',
+		button			: 'Buton',
+		select			: 'Câmp selecţie (SelectionField)',
+		imageButton		: 'Buton imagine (ImageButton)',
+		notSet			: '<nesetat>',
+		id				: 'Id',
+		name			: 'Nume',
+		langDir			: 'Direcţia cuvintelor',
+		langDirLtr		: 'stânga-dreapta (LTR)',
+		langDirRtl		: 'dreapta-stânga (RTL)',
+		langCode		: 'Codul limbii',
+		longDescr		: 'Descrierea lungă URL',
+		cssClass		: 'Clasele cu stilul paginii (CSS)',
+		advisoryTitle	: 'Titlul consultativ',
+		cssStyle		: 'Stil',
+		ok				: 'Bine',
+		cancel			: 'Anulare',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'General', // MISSING
+		advancedTab		: 'Avansat',
+		validateNumberFailed : 'This value is not a number.', // MISSING
+		confirmNewPage	: 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING
+		confirmCancel	: 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Lăţime',
+		height			: 'Înălţime',
+		align			: 'Aliniere',
+		alignLeft		: 'Stânga',
+		alignRight		: 'Dreapta',
+		alignCenter		: 'Centru',
+		alignTop		: 'Sus',
+		alignMiddle		: 'Mijloc',
+		alignBottom		: 'Jos',
+		invalidHeight	: 'Height must be a number.', // MISSING
+		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Inserează caracter special',
+		title		: 'Selectează caracter special',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Inserează/Editează link (legătură web)',
+		other 		: '<alt>',
+		menu		: 'Editează Link',
+		title		: 'Link (Legătură web)',
+		info		: 'Informaţii despre link (Legătură web)',
+		target		: 'Ţintă (Target)',
+		upload		: 'Încarcă',
+		advanced	: 'Avansat',
+		type		: 'Tipul link-ului (al legăturii web)',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'Ancoră în această pagină',
+		toEmail		: 'E-Mail',
+		targetFrame		: '<frame>',
+		targetPopup		: '<fereastra popup>',
+		targetFrameName	: 'Numele frame-ului ţintă',
+		targetPopupName	: 'Numele ferestrei popup',
+		popupFeatures	: 'Proprietăţile ferestrei popup',
+		popupResizable	: 'Resizable', // MISSING
+		popupStatusBar	: 'Bara de status',
+		popupLocationBar: 'Bara de locaţie',
+		popupToolbar	: 'Bara de opţiuni',
+		popupMenuBar	: 'Bara de meniu',
+		popupFullScreen	: 'Tot ecranul (Full Screen)(IE)',
+		popupScrollBars	: 'Scroll Bars',
+		popupDependent	: 'Dependent (Netscape)',
+		popupLeft		: 'Poziţia la stânga',
+		popupTop		: 'Poziţia la dreapta',
+		id				: 'Id', // MISSING
+		langDir			: 'Direcţia cuvintelor',
+		langDirLTR		: 'stânga-dreapta (LTR)',
+		langDirRTL		: 'dreapta-stânga (RTL)',
+		acccessKey		: 'Tasta de acces',
+		name			: 'Nume',
+		langCode			: 'Direcţia cuvintelor',
+		tabIndex			: 'Indexul tabului',
+		advisoryTitle		: 'Titlul consultativ',
+		advisoryContentType	: 'Tipul consultativ al titlului',
+		cssClasses		: 'Clasele cu stilul paginii (CSS)',
+		charset			: 'Setul de caractere al resursei legate',
+		styles			: 'Stil',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Selectaţi o ancoră',
+		anchorName		: 'după numele ancorei',
+		anchorId			: 'după Id-ul elementului',
+		emailAddress		: 'Adresă de e-mail',
+		emailSubject		: 'Subiectul mesajului',
+		emailBody		: 'Conţinutul mesajului',
+		noAnchors		: '(Nicio ancoră disponibilă în document)',
+		noUrl			: 'Vă rugăm să scrieţi URL-ul',
+		noEmail			: 'Vă rugăm să scrieţi adresa de e-mail'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Inserează/Editează ancoră',
+		menu		: 'Proprietăţi ancoră',
+		title		: 'Proprietăţi ancoră',
+		name		: 'Numele ancorei',
+		errorName	: 'Vă rugăm scrieţi numele ancorei',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Găseşte şi înlocuieşte',
+		find				: 'Găseşte',
+		replace				: 'Înlocuieşte',
+		findWhat			: 'Găseşte:',
+		replaceWith			: 'Înlocuieşte cu:',
+		notFoundMsg			: 'Textul specificat nu a fost găsit.',
+		matchCase			: 'Deosebeşte majuscule de minuscule (Match case)',
+		matchWord			: 'Doar cuvintele întregi',
+		matchCyclic			: 'Match cyclic', // MISSING
+		replaceAll			: 'Înlocuieşte tot',
+		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tabel',
+		title		: 'Proprietăţile tabelului',
+		menu		: 'Proprietăţile tabelului',
+		deleteTable	: 'Şterge tabel',
+		rows		: 'Linii',
+		columns		: 'Coloane',
+		border		: 'Mărimea marginii',
+		widthPx		: 'pixeli',
+		widthPc		: 'procente',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'Spaţiu între celule',
+		cellPad		: 'Spaţiu în cadrul celulei',
+		caption		: 'Titlu (Caption)',
+		summary		: 'Rezumat',
+		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 positive number.', // MISSING
+		invalidCellPadding	: 'Cell padding must be a positive number.', // MISSING
+
+		cell :
+		{
+			menu			: 'Celulă',
+			insertBefore	: 'Inserează celulă înainte',
+			insertAfter		: 'Inserează celulă după',
+			deleteCell		: 'Şterge celule',
+			merge			: 'Uneşte celule',
+			mergeRight		: 'Uneşte la dreapta',
+			mergeDown		: 'Uneşte jos',
+			splitHorizontal	: 'Împarte celula pe orizontală',
+			splitVertical	: 'Împarte celula pe verticală',
+			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
+			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
+		},
+
+		row :
+		{
+			menu			: 'Linie',
+			insertBefore	: 'Inserează linie înainte',
+			insertAfter		: 'Inserează linie după',
+			deleteRow		: 'Şterge linii'
+		},
+
+		column :
+		{
+			menu			: 'Coloană',
+			insertBefore	: 'Inserează coloană înainte',
+			insertAfter		: 'Inserează coloană după',
+			deleteColumn	: 'Şterge celule'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Proprietăţi buton',
+		text		: 'Text (Valoare)',
+		type		: 'Tip',
+		typeBtn		: 'Button',
+		typeSbm		: 'Submit',
+		typeRst		: 'Reset'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Proprietăţi bifă (Checkbox)',
+		radioTitle	: 'Proprietăţi buton radio (Radio Button)',
+		value		: 'Valoare',
+		selected	: 'Selectat'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Proprietăţi formular (Form)',
+		menu		: 'Proprietăţi formular (Form)',
+		action		: 'Acţiune',
+		method		: 'Metodă',
+		encoding	: 'Encoding' // MISSING
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Proprietăţi câmp selecţie (Selection Field)',
+		selectInfo	: 'Informaţii',
+		opAvail		: 'Opţiuni disponibile',
+		value		: 'Valoare',
+		size		: 'Mărime',
+		lines		: 'linii',
+		chkMulti	: 'Permite selecţii multiple',
+		opText		: 'Text',
+		opValue		: 'Valoare',
+		btnAdd		: 'Adaugă',
+		btnModify	: 'Modifică',
+		btnUp		: 'Sus',
+		btnDown		: 'Jos',
+		btnSetValue : 'Setează ca valoare selectată',
+		btnDelete	: 'Şterge'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Proprietăţi suprafaţă text (Textarea)',
+		cols		: 'Coloane',
+		rows		: 'Linii'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Proprietăţi câmp text (Text Field)',
+		name		: 'Nume',
+		value		: 'Valoare',
+		charWidth	: 'Lărgimea caracterului',
+		maxChars	: 'Caractere maxime',
+		type		: 'Tip',
+		typeText	: 'Text',
+		typePass	: 'Parolă'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Proprietăţi câmp ascuns (Hidden Field)',
+		name	: 'Nume',
+		value	: 'Valoare'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Proprietăţile imaginii',
+		titleButton	: 'Proprietăţi buton imagine (Image Button)',
+		menu		: 'Proprietăţile imaginii',
+		infoTab		: 'Informaţii despre imagine',
+		btnUpload	: 'Trimite la server',
+		upload		: 'Încarcă',
+		alt			: 'Text alternativ',
+		lockRatio	: 'Păstrează proporţiile',
+		resetSize	: 'Resetează mărimea',
+		border		: 'Margine',
+		hSpace		: 'HSpace',
+		vSpace		: 'VSpace',
+		alertUrl	: 'Vă rugăm să scrieţi URL-ul imaginii',
+		linkTab		: 'Link (Legătură web)',
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Proprietăţile flash-ului',
+		propertiesTab	: 'Properties', // MISSING
+		title			: 'Proprietăţile flash-ului',
+		chkPlay			: 'Rulează automat',
+		chkLoop			: 'Repetă (Loop)',
+		chkMenu			: 'Activează meniul flash',
+		chkFull			: 'Allow Fullscreen', // MISSING
+ 		scale			: 'Scală',
+		scaleAll		: 'Arată tot',
+		scaleNoBorder	: 'Fără margini (No border)',
+		scaleFit		: 'Potriveşte',
+		access			: 'Script Access', // MISSING
+		accessAlways	: 'Always', // MISSING
+		accessSameDomain: 'Same domain', // MISSING
+		accessNever		: 'Never', // MISSING
+		alignAbsBottom	: 'Jos absolut (Abs Bottom)',
+		alignAbsMiddle	: 'Mijloc absolut (Abs Middle)',
+		alignBaseline	: 'Linia de jos (Baseline)',
+		alignTextTop	: 'Text sus',
+		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
+		bgcolor			: 'Coloarea fundalului',
+		hSpace			: 'HSpace',
+		vSpace			: 'VSpace',
+		validateSrc		: 'Vă rugăm să scrieţi URL-ul',
+		validateHSpace	: 'HSpace must be a number.', // MISSING
+		validateVSpace	: 'VSpace must be a number.' // MISSING
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Verifică text',
+		title			: 'Spell Check', // MISSING
+		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
+		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		notInDic		: 'Nu e în dicţionar',
+		changeTo		: 'Schimbă în',
+		btnIgnore		: 'Ignoră',
+		btnIgnoreAll	: 'Ignoră toate',
+		btnReplace		: 'Înlocuieşte',
+		btnReplaceAll	: 'Înlocuieşte tot',
+		btnUndo			: 'Starea anterioară (undo)',
+		noSuggestions	: '- Fără sugestii -',
+		progress		: 'Verificarea textului în desfăşurare...',
+		noMispell		: 'Verificarea textului terminată: Nicio greşeală găsită',
+		noChanges		: 'Verificarea textului terminată: Niciun cuvânt modificat',
+		oneChange		: 'Verificarea textului terminată: Un cuvânt modificat',
+		manyChanges		: 'Verificarea textului terminată: 1% cuvinte modificate',
+		ieSpellDownload	: 'Unealta pentru verificat textul (Spell checker) neinstalată. Doriţi să o descărcaţi acum?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Figură expresivă (Emoticon)',
+		title	: 'Inserează o figură expresivă (Emoticon)',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element' // MISSING
+	},
+
+	numberedlist	: 'Listă numerotată',
+	bulletedlist	: 'Listă cu puncte',
+	indent			: 'Creşte indentarea',
+	outdent			: 'Scade indentarea',
+
+	justify :
+	{
+		left	: 'Aliniere la stânga',
+		center	: 'Aliniere centrală',
+		right	: 'Aliniere la dreapta',
+		block	: 'Aliniere în bloc (Block Justify)'
+	},
+
+	blockquote : 'Citat',
+
+	clipboard :
+	{
+		title		: 'Adaugă',
+		cutError	: 'Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de tăiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+X).',
+		copyError	: 'Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de copiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+C).',
+		pasteMsg	: 'Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (<STRONG>Ctrl/Cmd+V</STRONG>) şi apăsaţi <STRONG>OK</STRONG>.',
+		securityMsg	: 'Din cauza setărilor de securitate ale programului dvs. cu care navigaţi pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui să adăugaţi din nou datele în această fereastră.',
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar			: 'Adaugă din Word',
+		title			: 'Adaugă din Word',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'Adaugă ca text simplu (Plain Text)',
+		title	: 'Adaugă ca text simplu (Plain Text)'
+	},
+
+	templates :
+	{
+		button			: 'Template-uri (şabloane)',
+		title			: 'Template-uri (şabloane) de conţinut',
+		options : 'Template Options', // MISSING
+		insertOption	: 'Înlocuieşte cuprinsul actual',
+		selectPromptMsg	: 'Vă rugăm selectaţi template-ul (şablonul) ce se va deschide în editor<br>(conţinutul actual va fi pierdut):',
+		emptyListMsg	: '(Niciun template (şablon) definit)'
+	},
+
+	showBlocks : 'Arată blocurile',
+
+	stylesCombo :
+	{
+		label		: 'Stil',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles', // MISSING
+		panelTitle2	: 'Inline Styles', // MISSING
+		panelTitle3	: 'Object Styles' // MISSING
+	},
+
+	format :
+	{
+		label		: 'Formatare',
+		panelTitle	: 'Formatare',
+
+		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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Font',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'Font'
+	},
+
+	fontSize :
+	{
+		label		: 'Mărime',
+		voiceLabel	: 'Font Size', // MISSING
+		panelTitle	: 'Mărime'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Culoarea textului',
+		bgColorTitle	: 'Coloarea fundalului',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'Automatic',
+		more			: 'Mai multe culori...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor', // MISSING
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // 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
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor', // MISSING
+		flash		: 'Flash Animation', // MISSING
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Proprietăţile documentului',
+		title : 'Proprietăţile documentului',
+		design : 'Design', // MISSING
+		meta : 'Meta Tags', // MISSING
+		chooseColor : 'Choose', // MISSING
+		other : '<alt>',
+		docTitle :	'Titlul paginii',
+		charset : 	'Encoding setului de caractere',
+		charsetOther : 'Alt encoding al setului de caractere',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Central European', // MISSING
+		charsetCT : 'Chinezesc tradiţional (Big5)',
+		charsetCR : 'Chirilic',
+		charsetGR : 'Grecesc',
+		charsetJP : 'Japonez',
+		charsetKR : 'Corean',
+		charsetTR : 'Turcesc',
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Vest european',
+		docType : 'Document Type Heading', // MISSING
+		docTypeOther : 'Alt Document Type Heading',
+		xhtmlDec : 'Include declaraţii XHTML',
+		bgColor : 'Culoarea fundalului (Background Color)',
+		bgImage : 'URL-ul imaginii din fundal (Background Image URL)',
+		bgFixed : 'Fundal neflotant, fix (Non-scrolling Background)',
+		txtColor : 'Culoarea textului',
+		margin : 'Marginile paginii',
+		marginTop : 'Sus',
+		marginLeft : 'Stânga',
+		marginRight : 'Dreapta',
+		marginBottom : 'Jos',
+		metaKeywords : 'Cuvinte cheie după care se va indexa documentul (separate prin virgulă)',
+		metaDescription : 'Descrierea documentului',
+		metaAuthor : 'Autor',
+		metaCopyright : 'Drepturi de autor',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/sk.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Slovak language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['sk'] =
+{
+	/**
+	 * 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, stlačte ALT 0 pre nápovedu.',
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'Zdroj',
+	newPage			: 'Nová stránka',
+	save			: 'Uložiť',
+	preview			: 'Náhľad',
+	cut				: 'Vystrihnúť',
+	copy			: 'Kopírovať',
+	paste			: 'Vložiť',
+	print			: 'Tlač',
+	underline		: 'Podčiarknuté',
+	bold			: 'Tučné',
+	italic			: 'Kurzíva',
+	selectAll		: 'Vybrať všetko',
+	removeFormat	: 'Odstrániť formátovanie',
+	strike			: 'Prečiarknuté',
+	subscript		: 'Dolný index',
+	superscript		: 'Horný index',
+	horizontalrule	: 'Vložiť vodorovnú čiaru',
+	pagebreak		: 'Vložiť oddeľovač stránky',
+	pagebreakAlt		: 'Zalomenie strany',
+	unlink			: 'Odstrániť odkaz',
+	undo			: 'Späť',
+	redo			: 'Znovu',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Prechádzať server',
+		url				: 'URL',
+		protocol		: 'Protokol',
+		upload			: 'Odoslať',
+		uploadSubmit	: 'Odoslať na server',
+		image			: 'Obrázok',
+		flash			: 'Flash',
+		form			: 'Formulár',
+		checkbox		: 'Zaškrtávacie políčko',
+		radio			: 'Prepínač',
+		textField		: 'Textové pole',
+		textarea		: 'Textová oblasť',
+		hiddenField		: 'Skryté pole',
+		button			: 'Tlačidlo',
+		select			: 'Rozbaľovací zoznam',
+		imageButton		: 'Obrázkové tlačidlo',
+		notSet			: '<nenastavené>',
+		id				: 'Id',
+		name			: 'Meno',
+		langDir			: 'Orientácia jazyka',
+		langDirLtr		: 'Zľava doprava (LTR)',
+		langDirRtl		: 'Sprava doľava (RTL)',
+		langCode		: 'Kód jazyka',
+		longDescr		: 'Dlhý popis URL',
+		cssClass		: 'Trieda štýlu',
+		advisoryTitle	: 'Pomocný titulok',
+		cssStyle		: 'Štýl',
+		ok				: 'OK',
+		cancel			: 'Zrušiť',
+		close			: 'Zatvorit',
+		preview			: 'Náhľad',
+		generalTab		: 'Hlavné',
+		advancedTab		: 'Rozšírené',
+		validateNumberFailed : 'Hodnota nieje číslo.',
+		confirmNewPage	: 'Prajete si načítat novú stránku? Všetky neuložené zmeny budú stratené. ',
+		confirmCancel	: 'Niektore možnosti boli zmenené. Naozaj chcete zavrieť okno?',
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Šírka',
+		height			: 'Výška',
+		align			: 'Zarovnanie',
+		alignLeft		: 'Vľavo',
+		alignRight		: 'Vpravo',
+		alignCenter		: 'Na stred',
+		alignTop		: 'Nahor',
+		alignMiddle		: 'Na stred',
+		alignBottom		: 'Dole',
+		invalidHeight	: 'Výška musí byť číslo.',
+		invalidWidth	: 'Šírka musí byť číslo.',
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Vložiť špeciálne znaky',
+		title		: 'Výber špeciálneho znaku',
+		options : 'Možnosti špecíalneho znaku'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Vložiť/zmeniť odkaz',
+		other 		: '<iný>',
+		menu		: 'Zmeniť odkaz',
+		title		: 'Odkaz',
+		info		: 'Informácie o odkaze',
+		target		: 'Cieľ',
+		upload		: 'Odoslať',
+		advanced	: 'Rozšírené',
+		type		: 'Typ odkazu',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'Kotva v tejto stránke',
+		toEmail		: 'E-Mail',
+		targetFrame		: '<rámec>',
+		targetPopup		: '<vyskakovacie okno>',
+		targetFrameName	: 'Meno rámu cieľa',
+		targetPopupName	: 'Názov vyskakovacieho okna',
+		popupFeatures	: 'Vlastnosti vyskakovacieho okna',
+		popupResizable	: 'Meniteľná veľkosť',
+		popupStatusBar	: 'Stavový riadok',
+		popupLocationBar: 'Panel umiestnenia',
+		popupToolbar	: 'Panel nástrojov',
+		popupMenuBar	: 'Panel ponuky',
+		popupFullScreen	: 'Celá obrazovka (IE)',
+		popupScrollBars	: 'Posuvníky',
+		popupDependent	: 'Závislosť (Netscape)',
+		popupLeft		: 'Ľavý okraj',
+		popupTop		: 'Horný okraj',
+		id				: 'Id', // MISSING
+		langDir			: 'Orientácia jazyka',
+		langDirLTR		: 'Zľava doprava (LTR)',
+		langDirRTL		: 'Sprava doľava (RTL)',
+		acccessKey		: 'Prístupový kľúč',
+		name			: 'Meno',
+		langCode			: 'Orientácia jazyka',
+		tabIndex			: 'Poradie prvku',
+		advisoryTitle		: 'Pomocný titulok',
+		advisoryContentType	: 'Pomocný typ obsahu',
+		cssClasses		: 'Trieda štýlu',
+		charset			: 'Priradená znaková sada',
+		styles			: 'Štýl',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Vybrať kotvu',
+		anchorName		: 'Podľa mena kotvy',
+		anchorId			: 'Podľa Id objektu',
+		emailAddress		: 'E-Mailová adresa',
+		emailSubject		: 'Predmet správy',
+		emailBody		: 'Telo správy',
+		noAnchors		: '(V stránke nie je definovaná žiadna kotva)',
+		noUrl			: 'Zadajte prosím URL odkazu',
+		noEmail			: 'Zadajte prosím e-mailovú adresu'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Vložiť/zmeniť kotvu',
+		menu		: 'Vlastnosti kotvy',
+		title		: 'Vlastnosti kotvy',
+		name		: 'Meno kotvy',
+		errorName	: 'Zadajte prosím meno kotvy',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Vlastnosti číselného zoznamu',
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Druh',
+		start				: 'Začiatok',
+		validateStartNumber				:'Začiatočné číslo číselného zoznamu musí byť celé číslo.',
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Nájsť a nahradiť',
+		find				: 'Hľadať',
+		replace				: 'Nahradiť',
+		findWhat			: 'Čo hľadať:',
+		replaceWith			: 'Čím nahradiť:',
+		notFoundMsg			: 'Hľadaný text nebol nájdený.',
+		matchCase			: 'Rozlišovať malé/veľké písmená',
+		matchWord			: 'Len celé slová',
+		matchCyclic			: 'Match cyclic', // MISSING
+		replaceAll			: 'Nahradiť všetko',
+		replaceSuccessMsg	: '%1 výskyt(ov) nahradených.'
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tabuľka',
+		title		: 'Vlastnosti tabuľky',
+		menu		: 'Vlastnosti tabuľky',
+		deleteTable	: 'Vymazať tabuľku',
+		rows		: 'Riadky',
+		columns		: 'Stĺpce',
+		border		: 'Ohraničenie',
+		widthPx		: 'pixelov',
+		widthPc		: 'percent',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'Vzdialenosť buniek',
+		cellPad		: 'Odsadenie obsahu',
+		caption		: 'Popis',
+		summary		: 'Prehľad',
+		headers		: 'Hlavička',
+		headersNone		: 'Žiadne',
+		headersColumn	: 'Prvý stĺpec',
+		headersRow		: 'Prvý riadok',
+		headersBoth		: 'Obe',
+		invalidRows		: 'Počet riadkov musí byť číslo väčšie ako 0.',
+		invalidCols		: 'Počet stĺpcov musí byť číslo väčšie ako 0.',
+		invalidBorder	: 'Širka rámu musí byť celé číslo.',
+		invalidWidth	: 'Širka tabuľky musí byť číslo.',
+		invalidHeight	: 'Výška tabuľky musí byť číslo.',
+		invalidCellSpacing	: 'Medzera mädzi bunkami (spacing) musí byť číslo.',
+		invalidCellPadding	: 'Odsadenie v bunkách (padding) musí byť číslo.',
+
+		cell :
+		{
+			menu			: 'Bunka',
+			insertBefore	: 'Vložiť bunku pred',
+			insertAfter		: 'Vložiť bunku za',
+			deleteCell		: 'Vymazať bunky',
+			merge			: 'Zlúčiť bunky',
+			mergeRight		: 'Zlúčiť doprava',
+			mergeDown		: 'Zlúčiť dole',
+			splitHorizontal	: 'Rozdeliť bunky horizontálne',
+			splitVertical	: 'Rozdeliť bunky vertikálne',
+			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
+			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
+		},
+
+		row :
+		{
+			menu			: 'Riadok',
+			insertBefore	: 'Vložiť riadok za',
+			insertAfter		: 'Vložiť riadok pred',
+			deleteRow		: 'Vymazať riadok'
+		},
+
+		column :
+		{
+			menu			: 'Stĺpec',
+			insertBefore	: 'Vložiť stĺpec za',
+			insertAfter		: 'Vložiť stĺpec pred',
+			deleteColumn	: 'Zmazať stĺpec'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Vlastnosti tlačidla',
+		text		: 'Text',
+		type		: 'Typ',
+		typeBtn		: 'Tlačidlo',
+		typeSbm		: 'Odoslať',
+		typeRst		: 'Vymazať'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Vlastnosti zaškrtávacieho políčka',
+		radioTitle	: 'Vlastnosti prepínača',
+		value		: 'Hodnota',
+		selected	: 'Vybrané'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Vlastnosti formulára',
+		menu		: 'Vlastnosti formulára',
+		action		: 'Akcie',
+		method		: 'Metóda',
+		encoding	: 'Kódovanie'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Vlastnosti rozbaľovacieho zoznamu',
+		selectInfo	: 'Info',
+		opAvail		: 'Dostupné možnosti',
+		value		: 'Hodnota',
+		size		: 'Veľkosť',
+		lines		: 'riadkov',
+		chkMulti	: 'Povoliť viacnásobný výber',
+		opText		: 'Text',
+		opValue		: 'Hodnota',
+		btnAdd		: 'Pridať',
+		btnModify	: 'Zmeniť',
+		btnUp		: 'Hore',
+		btnDown		: 'Dole',
+		btnSetValue : 'Nastaviť ako vybranú hodnotu',
+		btnDelete	: 'Zmazať'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Vlastnosti textovej oblasti',
+		cols		: 'Stĺpce',
+		rows		: 'Riadky'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Vlastnosti textového poľa',
+		name		: 'Názov',
+		value		: 'Hodnota',
+		charWidth	: 'Šírka pola (znakov)',
+		maxChars	: 'Maximálny počet znakov',
+		type		: 'Typ',
+		typeText	: 'Text',
+		typePass	: 'Heslo'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Vlastnosti skrytého poľa',
+		name	: 'Názov',
+		value	: 'Hodnota'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Vlastnosti obrázku',
+		titleButton	: 'Vlastnosti obrázkového tlačidla',
+		menu		: 'Vlastnosti obrázku',
+		infoTab		: 'Informácie o obrázku',
+		btnUpload	: 'Odoslať na server',
+		upload		: 'Odoslať',
+		alt			: 'Alternatívny text',
+		lockRatio	: 'Zámok',
+		resetSize	: 'Pôvodná veľkosť',
+		border		: 'Okraje',
+		hSpace		: 'H-medzera',
+		vSpace		: 'V-medzera',
+		alertUrl	: 'Zadajte prosím URL obrázku',
+		linkTab		: 'Odkaz',
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Vlastnosti Flashu',
+		propertiesTab	: 'Properties', // MISSING
+		title			: 'Vlastnosti Flashu',
+		chkPlay			: 'Automatické prehrávanie',
+		chkLoop			: 'Opakovanie',
+		chkMenu			: 'Povoliť Flash Menu',
+		chkFull			: 'Allow Fullscreen', // MISSING
+ 		scale			: 'Mierka',
+		scaleAll		: 'Zobraziť mierku',
+		scaleNoBorder	: 'Bez okrajov',
+		scaleFit		: 'Roztiahnuť na celé',
+		access			: 'Script Access', // MISSING
+		accessAlways	: 'Always', // MISSING
+		accessSameDomain: 'Same domain', // MISSING
+		accessNever		: 'Never', // MISSING
+		alignAbsBottom	: 'Úplne dole',
+		alignAbsMiddle	: 'Do stredu',
+		alignBaseline	: 'Na základňu',
+		alignTextTop	: 'Na horný okraj textu',
+		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
+		bgcolor			: 'Farba pozadia',
+		hSpace			: 'H-medzera',
+		vSpace			: 'V-medzera',
+		validateSrc		: 'Zadajte prosím URL odkazu',
+		validateHSpace	: 'HSpace must be a number.', // MISSING
+		validateVSpace	: 'VSpace must be a number.' // MISSING
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Kontrola pravopisu',
+		title			: 'Spell Check', // MISSING
+		notAvailable	: 'Služba práve nieje dostupná.',
+		errorLoading	: 'Chyba pri načítaní slovníka z adresy: %s.',
+		notInDic		: 'Nie je v slovníku',
+		changeTo		: 'Zmeniť na',
+		btnIgnore		: 'Ignorovať',
+		btnIgnoreAll	: 'Ignorovať všetko',
+		btnReplace		: 'Prepísat',
+		btnReplaceAll	: 'Prepísat všetko',
+		btnUndo			: 'Späť',
+		noSuggestions	: '- Žiadny návrh -',
+		progress		: 'Prebieha kontrola pravopisu...',
+		noMispell		: 'Kontrola pravopisu dokončená: bez chýb',
+		noChanges		: 'Kontrola pravopisu dokončená: žiadne slová nezmenené',
+		oneChange		: 'Kontrola pravopisu dokončená: zmenené jedno slovo',
+		manyChanges		: 'Kontrola pravopisu dokončená: zmenených %1 slov',
+		ieSpellDownload	: 'Kontrola pravopisu nie je naištalovaná. Chcete ju hneď stiahnuť?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Smajlíky',
+		title	: 'Vkladanie smajlíkov',
+		options : 'Možnosti smajlíkov'
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element' // MISSING
+	},
+
+	numberedlist	: 'Číslovanie',
+	bulletedlist	: 'Odrážky',
+	indent			: 'Zväčšiť odsadenie',
+	outdent			: 'Zmenšiť odsadenie',
+
+	justify :
+	{
+		left	: 'Zarovnať vľavo',
+		center	: 'Zarovnať na stred',
+		right	: 'Zarovnať vpravo',
+		block	: 'Zarovnať do bloku'
+	},
+
+	blockquote : 'Citácia',
+
+	clipboard :
+	{
+		title		: 'Vložiť',
+		cutError	: 'Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru spustiť funkciu pre vystrihnutie zvoleného textu do schránky. Prosím vystrihnite zvolený text do schránky pomocou klávesnice (Ctrl/Cmd+X).',
+		copyError	: 'Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru spustiť funkciu pre kopírovanie zvoleného textu do schránky. Prosím skopírujte zvolený text do schránky pomocou klávesnice (Ctrl/Cmd+C).',
+		pasteMsg	: 'Prosím vložte nasledovný rámček použitím klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stlačte <STRONG>OK</STRONG>.',
+		securityMsg	: 'Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru pristupovať priamo k datám v schránke. Musíte ich vložiť znovu do tohto okna.',
+		pasteArea	: 'Vložiť pole'
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'Vkladaný text vyzerá byť skopírovaný z Wordu. Chcete ho automaticky vyčistiť pred vkladaním?',
+		toolbar			: 'Vložiť z Wordu',
+		title			: 'Vložiť z Wordu',
+		error			: 'Nastala chyba pri čistení údajov. Nie je možné vyčistiť vložené údaje.'
+	},
+
+	pasteText :
+	{
+		button	: 'Vložiť ako čistý text',
+		title	: 'Vložiť ako čistý text'
+	},
+
+	templates :
+	{
+		button			: 'Šablóny',
+		title			: 'Šablóny obsahu',
+		options : 'Vlastnosti šablóny',
+		insertOption	: 'Nahradiť aktuálny obsah',
+		selectPromptMsg	: 'Prosím vyberte šablóny na otvorenie v editore<br>(súšasný obsah bude stratený):',
+		emptyListMsg	: '(žiadne šablóny nenájdené)'
+	},
+
+	showBlocks : 'Ukázať bloky',
+
+	stylesCombo :
+	{
+		label		: 'Štýl',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles', // MISSING
+		panelTitle2	: 'Inline Styles', // MISSING
+		panelTitle3	: 'Object Styles' // MISSING
+	},
+
+	format :
+	{
+		label		: 'Formát',
+		panelTitle	: 'Formát',
+
+		tag_p		: 'Normálny',
+		tag_pre		: 'Formátovaný',
+		tag_address	: 'Adresa',
+		tag_h1		: 'Nadpis 1',
+		tag_h2		: 'Nadpis 2',
+		tag_h3		: 'Nadpis 3',
+		tag_h4		: 'Nadpis 4',
+		tag_h5		: 'Nadpis 5',
+		tag_h6		: 'Nadpis 6',
+		tag_div		: 'Odsek (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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame - vlastnosti',
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Vložte URL pre iframe',
+		scrolling	: 'Povoliť skrolovanie',
+		border		: 'Zobraziť orámovanie'
+	},
+
+	font :
+	{
+		label		: 'Písmo',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'Písmo'
+	},
+
+	fontSize :
+	{
+		label		: 'Veľkosť',
+		voiceLabel	: 'Veľkosť písma',
+		panelTitle	: 'Veľkosť'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Farba textu',
+		bgColorTitle	: 'Farba pozadia',
+		panelTitle		: 'Farby',
+		auto			: 'Automaticky',
+		more			: 'Viac farieb...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor', // MISSING
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // MISSING
+		moreInfo	: 'For licensing information please visit our web site:', // MISSING
+		copy		: 'Copyright &copy; $1. All rights reserved.' // MISSING
+	},
+
+	maximize : 'Maximalizovať',
+	minimize : 'Minimalizovať',
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor', // MISSING
+		flash		: 'Flash Animation', // MISSING
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Vlastnosti dokumentu',
+		title : 'Vlastnosti dokumentu',
+		design : 'Design', // MISSING
+		meta : 'Meta Data',
+		chooseColor : 'Choose', // MISSING
+		other : '<iný>',
+		docTitle :	'Titulok',
+		charset : 	'Kódová stránka',
+		charsetOther : 'Iná kódová stránka',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Stredoeurópske',
+		charsetCT : 'Čínština tradičná (Big5)',
+		charsetCR : 'Cyrillika',
+		charsetGR : 'Gréčtina',
+		charsetJP : 'Japončina',
+		charsetKR : 'Korejčina',
+		charsetTR : 'Turečtina',
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Západná európa',
+		docType : 'Typ záhlavia dokumentu',
+		docTypeOther : 'Iný typ záhlavia dokumentu',
+		xhtmlDec : 'Obsahuje deklarácie XHTML',
+		bgColor : 'Farba pozadia',
+		bgImage : 'URL adresa obrázku na pozadí',
+		bgFixed : 'Fixné pozadie',
+		txtColor : 'Farba textu',
+		margin : 'Okraje stránky',
+		marginTop : 'Horný',
+		marginLeft : 'Ľavý',
+		marginRight : 'Pravý',
+		marginBottom : 'Dolný',
+		metaKeywords : 'Kľúčové slová pre indexovanie (oddelené čiarkou)',
+		metaDescription : 'Popis stránky',
+		metaAuthor : 'Autor',
+		metaCopyright : 'Autorské práva',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/sl.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Slovenian language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['sl'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'Izvorna koda',
+	newPage			: 'Nova stran',
+	save			: 'Shrani',
+	preview			: 'Predogled',
+	cut				: 'Izreži',
+	copy			: 'Kopiraj',
+	paste			: 'Prilepi',
+	print			: 'Natisni',
+	underline		: 'Podčrtano',
+	bold			: 'Krepko',
+	italic			: 'Ležeče',
+	selectAll		: 'Izberi vse',
+	removeFormat	: 'Odstrani oblikovanje',
+	strike			: 'Prečrtano',
+	subscript		: 'Podpisano',
+	superscript		: 'Nadpisano',
+	horizontalrule	: 'Vstavi vodoravno črto',
+	pagebreak		: 'Vstavi prelom strani',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'Odstrani povezavo',
+	undo			: 'Razveljavi',
+	redo			: 'Ponovi',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Prebrskaj na strežniku',
+		url				: 'URL',
+		protocol		: 'Protokol',
+		upload			: 'Prenesi',
+		uploadSubmit	: 'Pošlji na strežnik',
+		image			: 'Slika',
+		flash			: 'Flash',
+		form			: 'Obrazec',
+		checkbox		: 'Potrditveno polje',
+		radio			: 'Izbirno polje',
+		textField		: 'Vnosno polje',
+		textarea		: 'Vnosno območje',
+		hiddenField		: 'Skrito polje',
+		button			: 'Gumb',
+		select			: 'Spustni seznam',
+		imageButton		: 'Gumb s sliko',
+		notSet			: '<ni postavljen>',
+		id				: 'Id',
+		name			: 'Ime',
+		langDir			: 'Smer jezika',
+		langDirLtr		: 'Od leve proti desni (LTR)',
+		langDirRtl		: 'Od desne proti levi (RTL)',
+		langCode		: 'Oznaka jezika',
+		longDescr		: 'Dolg opis URL-ja',
+		cssClass		: 'Razred stilne predloge',
+		advisoryTitle	: 'Predlagani naslov',
+		cssStyle		: 'Slog',
+		ok				: 'V redu',
+		cancel			: 'Prekliči',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'Splošno',
+		advancedTab		: 'Napredno',
+		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?',
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Širina',
+		height			: 'Višina',
+		align			: 'Poravnava',
+		alignLeft		: 'Levo',
+		alignRight		: 'Desno',
+		alignCenter		: 'Sredinsko',
+		alignTop		: 'Na vrh',
+		alignMiddle		: 'V sredino',
+		alignBottom		: 'Na dno',
+		invalidHeight	: 'Višina mora biti število.',
+		invalidWidth	: 'Širina mora biti število.',
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, nedosegljiv</span>'
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Vstavi posebni znak',
+		title		: 'Izberi posebni znak',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Vstavi/uredi povezavo',
+		other 		: '<drug>',
+		menu		: 'Uredi povezavo',
+		title		: 'Povezava',
+		info		: 'Podatki o povezavi',
+		target		: 'Cilj',
+		upload		: 'Prenesi',
+		advanced	: 'Napredno',
+		type		: 'Vrsta povezave',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'Zaznamek na tej strani',
+		toEmail		: 'Elektronski naslov',
+		targetFrame		: '<okvir>',
+		targetPopup		: '<pojavno okno>',
+		targetFrameName	: 'Ime ciljnega okvirja',
+		targetPopupName	: 'Ime pojavnega okna',
+		popupFeatures	: 'Značilnosti pojavnega okna',
+		popupResizable	: 'Spremenljive velikosti',
+		popupStatusBar	: 'Vrstica stanja',
+		popupLocationBar: 'Naslovna vrstica',
+		popupToolbar	: 'Orodna vrstica',
+		popupMenuBar	: 'Menijska vrstica',
+		popupFullScreen	: 'Celozaslonska slika (IE)',
+		popupScrollBars	: 'Drsniki',
+		popupDependent	: 'Podokno (Netscape)',
+		popupLeft		: 'Lega levo',
+		popupTop		: 'Lega na vrhu',
+		id				: 'Id',
+		langDir			: 'Smer jezika',
+		langDirLTR		: 'Od leve proti desni (LTR)',
+		langDirRTL		: 'Od desne proti levi (RTL)',
+		acccessKey		: 'Vstopno geslo',
+		name			: 'Ime',
+		langCode			: 'Smer jezika',
+		tabIndex			: 'Številka tabulatorja',
+		advisoryTitle		: 'Predlagani naslov',
+		advisoryContentType	: 'Predlagani tip vsebine (content-type)',
+		cssClasses		: 'Razred stilne predloge',
+		charset			: 'Kodna tabela povezanega vira',
+		styles			: 'Slog',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Izberi zaznamek',
+		anchorName		: 'Po imenu zaznamka',
+		anchorId			: 'Po ID-ju elementa',
+		emailAddress		: 'Elektronski naslov',
+		emailSubject		: 'Predmet sporočila',
+		emailBody		: 'Vsebina sporočila',
+		noAnchors		: '(V tem dokumentu ni zaznamkov)',
+		noUrl			: 'Vnesite URL povezave',
+		noEmail			: 'Vnesite elektronski naslov'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Vstavi/uredi zaznamek',
+		menu		: 'Lastnosti zaznamka',
+		title		: 'Lastnosti zaznamka',
+		name		: 'Ime zaznamka',
+		errorName	: 'Prosim vnesite ime zaznamka',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Najdi in zamenjaj',
+		find				: 'Najdi',
+		replace				: 'Zamenjaj',
+		findWhat			: 'Najdi:',
+		replaceWith			: 'Zamenjaj z:',
+		notFoundMsg			: 'Navedeno besedilo ni bilo najdeno.',
+		matchCase			: 'Razlikuj velike in male črke',
+		matchWord			: 'Samo cele besede',
+		matchCyclic			: 'Primerjaj znake v cirilici',
+		replaceAll			: 'Zamenjaj vse',
+		replaceSuccessMsg	: '%1 pojavitev je bilo zamenjano.'
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tabela',
+		title		: 'Lastnosti tabele',
+		menu		: 'Lastnosti tabele',
+		deleteTable	: 'Izbriši tabelo',
+		rows		: 'Vrstice',
+		columns		: 'Stolpci',
+		border		: 'Velikost obrobe',
+		widthPx		: 'pik',
+		widthPc		: 'procentov',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'Razmik med celicami',
+		cellPad		: 'Polnilo med celicami',
+		caption		: 'Naslov',
+		summary		: 'Povzetek',
+		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 :
+		{
+			menu			: 'Celica',
+			insertBefore	: 'Vstavi celico pred',
+			insertAfter		: 'Vstavi celico za',
+			deleteCell		: 'Izbriši celice',
+			merge			: 'Združi celice',
+			mergeRight		: 'Združi desno',
+			mergeDown		: 'Druži navzdol',
+			splitHorizontal	: 'Razdeli celico vodoravno',
+			splitVertical	: 'Razdeli celico navpično',
+			title			: 'Lastnosti celice',
+			cellType		: 'Vrsta celice',
+			rowSpan			: 'Razpon vrstic',
+			colSpan			: 'Razpon stolpcev',
+			wordWrap		: 'Prelom besedila',
+			hAlign			: 'Vodoravna poravnava',
+			vAlign			: 'Navpična poravnava',
+			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'
+		},
+
+		row :
+		{
+			menu			: 'Vrstica',
+			insertBefore	: 'Vstavi vrstico pred',
+			insertAfter		: 'Vstavi vrstico za',
+			deleteRow		: 'Izbriši vrstice'
+		},
+
+		column :
+		{
+			menu			: 'Stolpec',
+			insertBefore	: 'Vstavi stolpec pred',
+			insertAfter		: 'Vstavi stolpec za',
+			deleteColumn	: 'Izbriši stolpce'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Lastnosti gumba',
+		text		: 'Besedilo (Vrednost)',
+		type		: 'Tip',
+		typeBtn		: 'Gumb',
+		typeSbm		: 'Potrdi',
+		typeRst		: 'Ponastavi'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Lastnosti potrditvenega polja',
+		radioTitle	: 'Lastnosti izbirnega polja',
+		value		: 'Vrednost',
+		selected	: 'Izbrano'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Lastnosti obrazca',
+		menu		: 'Lastnosti obrazca',
+		action		: 'Akcija',
+		method		: 'Metoda',
+		encoding	: 'Kodiranje znakov'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Lastnosti spustnega seznama',
+		selectInfo	: 'Podatki',
+		opAvail		: 'Razpoložljive izbire',
+		value		: 'Vrednost',
+		size		: 'Velikost',
+		lines		: 'vrstic',
+		chkMulti	: 'Dovoli izbor večih vrstic',
+		opText		: 'Besedilo',
+		opValue		: 'Vrednost',
+		btnAdd		: 'Dodaj',
+		btnModify	: 'Spremeni',
+		btnUp		: 'Gor',
+		btnDown		: 'Dol',
+		btnSetValue : 'Postavi kot privzeto izbiro',
+		btnDelete	: 'Izbriši'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Lastnosti vnosnega območja',
+		cols		: 'Stolpcev',
+		rows		: 'Vrstic'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Lastnosti vnosnega polja',
+		name		: 'Ime',
+		value		: 'Vrednost',
+		charWidth	: 'Dolžina',
+		maxChars	: 'Največje število znakov',
+		type		: 'Tip',
+		typeText	: 'Besedilo',
+		typePass	: 'Geslo'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Lastnosti skritega polja',
+		name	: 'Ime',
+		value	: 'Vrednost'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Lastnosti slike',
+		titleButton	: 'Lastnosti gumba s sliko',
+		menu		: 'Lastnosti slike',
+		infoTab		: 'Podatki o sliki',
+		btnUpload	: 'Pošlji na strežnik',
+		upload		: 'Pošlji',
+		alt			: 'Nadomestno besedilo',
+		lockRatio	: 'Zakleni razmerje',
+		resetSize	: 'Ponastavi velikost',
+		border		: 'Obroba',
+		hSpace		: 'Vodoravni razmik',
+		vSpace		: 'Navpični razmik',
+		alertUrl	: 'Vnesite URL slike',
+		linkTab		: 'Povezava',
+		button2Img	: 'Želiš pretvoriti izbrani gumb s sliko v preprosto sliko?',
+		img2Button	: 'Želiš pretvoriti izbrano sliko v gumb s sliko?',
+		urlMissing	: 'Manjka vir (URL) slike.',
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Lastnosti Flash',
+		propertiesTab	: 'Lastnosti',
+		title			: 'Lastnosti Flash',
+		chkPlay			: 'Samodejno predvajaj',
+		chkLoop			: 'Ponavljanje',
+		chkMenu			: 'Omogoči Flash Meni',
+		chkFull			: 'Dovoli celozaslonski način',
+ 		scale			: 'Povečava',
+		scaleAll		: 'Pokaži vse',
+		scaleNoBorder	: 'Brez obrobe',
+		scaleFit		: 'Natančno prileganje',
+		access			: 'Dostop skript',
+		accessAlways	: 'Vedno',
+		accessSameDomain: 'Samo ista domena',
+		accessNever		: 'Nikoli',
+		alignAbsBottom	: 'Popolnoma na dno',
+		alignAbsMiddle	: 'Popolnoma v sredino',
+		alignBaseline	: 'Na osnovno črto',
+		alignTextTop	: 'Besedilo na vrh',
+		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',
+		hSpace			: 'Vodoravni razmik',
+		vSpace			: 'Navpični razmik',
+		validateSrc		: 'Vnesite URL povezave',
+		validateHSpace	: 'Vodoravni razmik mora biti število.',
+		validateVSpace	: 'Navpični razmik mora biti število.'
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Preveri črkovanje',
+		title			: 'Črkovalnik',
+		notAvailable	: 'Oprostite, storitev trenutno ni dosegljiva.',
+		errorLoading	: 'Napaka pri nalaganju storitve programa na naslovu %s.',
+		notInDic		: 'Ni v slovarju',
+		changeTo		: 'Spremeni v',
+		btnIgnore		: 'Prezri',
+		btnIgnoreAll	: 'Prezri vse',
+		btnReplace		: 'Zamenjaj',
+		btnReplaceAll	: 'Zamenjaj vse',
+		btnUndo			: 'Razveljavi',
+		noSuggestions	: '- Ni predlogov -',
+		progress		: 'Preverjanje črkovanja se izvaja...',
+		noMispell		: 'Črkovanje je končano: Brez napak',
+		noChanges		: 'Črkovanje je končano: Nobena beseda ni bila spremenjena',
+		oneChange		: 'Črkovanje je končano: Spremenjena je bila ena beseda',
+		manyChanges		: 'Črkovanje je končano: Spremenjenih je bilo %1 besed',
+		ieSpellDownload	: 'Črkovalnik ni nameščen. Ali ga želite prenesti sedaj?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Smeško',
+		title	: 'Vstavi smeška',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element'
+	},
+
+	numberedlist	: 'Oštevilčen seznam',
+	bulletedlist	: 'Označen seznam',
+	indent			: 'Povečaj zamik',
+	outdent			: 'Zmanjšaj zamik',
+
+	justify :
+	{
+		left	: 'Leva poravnava',
+		center	: 'Sredinska poravnava',
+		right	: 'Desna poravnava',
+		block	: 'Obojestranska poravnava'
+	},
+
+	blockquote : 'Citat',
+
+	clipboard :
+	{
+		title		: 'Prilepi',
+		cutError	: 'Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+X).',
+		copyError	: 'Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+C).',
+		pasteMsg	: 'Prosim prilepite v sleči okvir s pomočjo tipkovnice (<STRONG>Ctrl/Cmd+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.',
+		securityMsg	: 'Zaradi varnostnih nastavitev vašega brskalnika urejevalnik ne more neposredno dostopati do odložišča. Vsebino odložišča ponovno prilepite v to okno.',
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar			: 'Prilepi iz Worda',
+		title			: 'Prilepi iz Worda',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'Prilepi kot golo besedilo',
+		title	: 'Prilepi kot golo besedilo'
+	},
+
+	templates :
+	{
+		button			: 'Predloge',
+		title			: 'Vsebinske predloge',
+		options : 'Template Options', // MISSING
+		insertOption	: 'Zamenjaj trenutno vsebino',
+		selectPromptMsg	: 'Izberite predlogo, ki jo želite odpreti v urejevalniku<br>(trenutna vsebina bo izgubljena):',
+		emptyListMsg	: '(Ni pripravljenih predlog)'
+	},
+
+	showBlocks : 'Prikaži ograde',
+
+	stylesCombo :
+	{
+		label		: 'Slog',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Slogi odstavkov',
+		panelTitle2	: 'Slogi besedila',
+		panelTitle3	: 'Slogi objektov'
+	},
+
+	format :
+	{
+		label		: 'Oblika',
+		panelTitle	: 'Oblika',
+
+		tag_p		: 'Navaden',
+		tag_pre		: 'Oblikovan',
+		tag_address	: 'Napis',
+		tag_h1		: 'Naslov 1',
+		tag_h2		: 'Naslov 2',
+		tag_h3		: 'Naslov 3',
+		tag_h4		: 'Naslov 4',
+		tag_h5		: 'Naslov 5',
+		tag_h6		: 'Naslov 6',
+		tag_div		: 'Navaden (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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Pisava',
+		voiceLabel	: 'Pisava',
+		panelTitle	: 'Pisava'
+	},
+
+	fontSize :
+	{
+		label		: 'Velikost',
+		voiceLabel	: 'Velikost',
+		panelTitle	: 'Velikost'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Barva besedila',
+		bgColorTitle	: 'Barva ozadja',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'Samodejno',
+		more			: 'Več barv...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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			: 'Črkovanje med tipkanjem',
+		opera_title		: 'Not supported by Opera', // MISSING
+		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',
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Jeziki',
+
+		dictionariesTab	: 'Slovarji',
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'O storitvi'
+	},
+
+	about :
+	{
+		title		: 'O programu CKEditor',
+		dlgTitle	: 'O programu CKEditor',
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // MISSING
+		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		: 'Sidro',
+		flash		: 'Flash animacija',
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Neznan objekt'
+	},
+
+	resize : 'Potegni za spremembo velikosti',
+
+	colordialog :
+	{
+		title		: 'Izberi barvo',
+		options	:	'Color Options', // MISSING
+		highlight	: 'Poudarjeno',
+		selected	: 'Izbrano',
+		clear		: 'Počisti'
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Lastnosti dokumenta',
+		title : 'Lastnosti dokumenta',
+		design : 'Design', // MISSING
+		meta : 'Meta podatki',
+		chooseColor : 'Izberi',
+		other : '<drug>',
+		docTitle :	'Naslov strani',
+		charset : 	'Kodna tabela',
+		charsetOther : 'Druga kodna tabela',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Srednjeevropsko',
+		charsetCT : 'Tradicionalno Kitajsko (Big5)',
+		charsetCR : 'Cirilica',
+		charsetGR : 'Grško',
+		charsetJP : 'Japonsko',
+		charsetKR : 'Korejsko',
+		charsetTR : 'Turško',
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Zahodnoevropsko',
+		docType : 'Glava tipa dokumenta',
+		docTypeOther : 'Druga glava tipa dokumenta',
+		xhtmlDec : 'Vstavi XHTML deklaracije',
+		bgColor : 'Barva ozadja',
+		bgImage : 'URL slike za ozadje',
+		bgFixed : 'Nepremično ozadje',
+		txtColor : 'Barva besedila',
+		margin : 'Zamiki strani',
+		marginTop : 'Na vrhu',
+		marginLeft : 'Levo',
+		marginRight : 'Desno',
+		marginBottom : 'Spodaj',
+		metaKeywords : 'Ključne besede (ločene z vejicami)',
+		metaDescription : 'Opis strani',
+		metaAuthor : 'Avtor',
+		metaCopyright : 'Avtorske pravice',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/sr-latn.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Serbian (Latin) language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['sr-latn'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'Kôd',
+	newPage			: 'Nova stranica',
+	save			: 'Sačuvaj',
+	preview			: 'Izgled stranice',
+	cut				: 'Iseci',
+	copy			: 'Kopiraj',
+	paste			: 'Zalepi',
+	print			: 'Štampa',
+	underline		: 'Podvučeno',
+	bold			: 'Podebljano',
+	italic			: 'Kurziv',
+	selectAll		: 'Označi sve',
+	removeFormat	: 'Ukloni formatiranje',
+	strike			: 'Precrtano',
+	subscript		: 'Indeks',
+	superscript		: 'Stepen',
+	horizontalrule	: 'Unesi horizontalnu liniju',
+	pagebreak		: 'Insert Page Break for Printing', // MISSING
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'Ukloni link',
+	undo			: 'Poni�ti akciju',
+	redo			: 'Ponovi akciju',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Pretraži server',
+		url				: 'URL',
+		protocol		: 'Protokol',
+		upload			: 'Pošalji',
+		uploadSubmit	: 'Pošalji na server',
+		image			: 'Slika',
+		flash			: 'Fleš',
+		form			: 'Forma',
+		checkbox		: 'Polje za potvrdu',
+		radio			: 'Radio-dugme',
+		textField		: 'Tekstualno polje',
+		textarea		: 'Zona teksta',
+		hiddenField		: 'Skriveno polje',
+		button			: 'Dugme',
+		select			: 'Izborno polje',
+		imageButton		: 'Dugme sa slikom',
+		notSet			: '<nije postavljeno>',
+		id				: 'Id',
+		name			: 'Naziv',
+		langDir			: 'Smer jezika',
+		langDirLtr		: 'S leva na desno (LTR)',
+		langDirRtl		: 'S desna na levo (RTL)',
+		langCode		: 'Kôd jezika',
+		longDescr		: 'Pun opis URL',
+		cssClass		: 'Stylesheet klase',
+		advisoryTitle	: 'Advisory naslov',
+		cssStyle		: 'Stil',
+		ok				: 'OK',
+		cancel			: 'Otkaži',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'General', // MISSING
+		advancedTab		: 'Napredni tagovi',
+		validateNumberFailed : 'This value is not a number.', // MISSING
+		confirmNewPage	: 'Any unsaved changes to this content will be lost. Are you sure you want to load new page?', // MISSING
+		confirmCancel	: 'Some of the options have been changed. Are you sure to close the dialog?', // MISSING
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Širina',
+		height			: 'Visina',
+		align			: 'Ravnanje',
+		alignLeft		: 'Levo',
+		alignRight		: 'Desno',
+		alignCenter		: 'Sredina',
+		alignTop		: 'Vrh',
+		alignMiddle		: 'Sredina',
+		alignBottom		: 'Dole',
+		invalidHeight	: 'Height must be a number.', // MISSING
+		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Unesi specijalni karakter',
+		title		: 'Odaberite specijalni karakter',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Unesi/izmeni link',
+		other 		: '<остало>',
+		menu		: 'Izmeni link',
+		title		: 'Link',
+		info		: 'Link Info',
+		target		: 'Meta',
+		upload		: 'Pošalji',
+		advanced	: 'Napredni tagovi',
+		type		: 'Vrsta linka',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'Sidro na ovoj stranici',
+		toEmail		: 'E-Mail',
+		targetFrame		: '<okvir>',
+		targetPopup		: '<popup prozor>',
+		targetFrameName	: 'Naziv odredišnog frejma',
+		targetPopupName	: 'Naziv popup prozora',
+		popupFeatures	: 'Mogućnosti popup prozora',
+		popupResizable	: 'Resizable', // MISSING
+		popupStatusBar	: 'Statusna linija',
+		popupLocationBar: 'Lokacija',
+		popupToolbar	: 'Toolbar',
+		popupMenuBar	: 'Kontekstni meni',
+		popupFullScreen	: 'Prikaz preko celog ekrana (IE)',
+		popupScrollBars	: 'Scroll bar',
+		popupDependent	: 'Zavisno (Netscape)',
+		popupLeft		: 'Od leve ivice ekrana (px)',
+		popupTop		: 'Od vrha ekrana (px)',
+		id				: 'Id', // MISSING
+		langDir			: 'Smer jezika',
+		langDirLTR		: 'S leva na desno (LTR)',
+		langDirRTL		: 'S desna na levo (RTL)',
+		acccessKey		: 'Pristupni taster',
+		name			: 'Naziv',
+		langCode			: 'Smer jezika',
+		tabIndex			: 'Tab indeks',
+		advisoryTitle		: 'Advisory naslov',
+		advisoryContentType	: 'Advisory vrsta sadržaja',
+		cssClasses		: 'Stylesheet klase',
+		charset			: 'Linked Resource Charset',
+		styles			: 'Stil',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Odaberi sidro',
+		anchorName		: 'Po nazivu sidra',
+		anchorId			: 'Po Id-ju elementa',
+		emailAddress		: 'E-Mail adresa',
+		emailSubject		: 'Naslov',
+		emailBody		: 'Sadržaj poruke',
+		noAnchors		: '(Nema dostupnih sidra)',
+		noUrl			: 'Unesite URL linka',
+		noEmail			: 'Otkucajte adresu elektronske pote'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Unesi/izmeni sidro',
+		menu		: 'Osobine sidra',
+		title		: 'Osobine sidra',
+		name		: 'Ime sidra',
+		errorName	: 'Unesite ime sidra',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Find and Replace', // MISSING
+		find				: 'Pretraga',
+		replace				: 'Zamena',
+		findWhat			: 'Pronadi:',
+		replaceWith			: 'Zameni sa:',
+		notFoundMsg			: 'Traženi tekst nije pronađen.',
+		matchCase			: 'Razlikuj mala i velika slova',
+		matchWord			: 'Uporedi cele reci',
+		matchCyclic			: 'Match cyclic', // MISSING
+		replaceAll			: 'Zameni sve',
+		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tabela',
+		title		: 'Osobine tabele',
+		menu		: 'Osobine tabele',
+		deleteTable	: 'Delete Table', // MISSING
+		rows		: 'Redova',
+		columns		: 'Kolona',
+		border		: 'Veličina okvira',
+		widthPx		: 'piksela',
+		widthPc		: 'procenata',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'Ćelijski prostor',
+		cellPad		: 'Razmak ćelija',
+		caption		: 'Naslov tabele',
+		summary		: 'Summary', // MISSING
+		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 positive number.', // MISSING
+		invalidCellPadding	: 'Cell padding must be a positive number.', // MISSING
+
+		cell :
+		{
+			menu			: 'Cell', // MISSING
+			insertBefore	: 'Insert Cell Before', // MISSING
+			insertAfter		: 'Insert Cell After', // MISSING
+			deleteCell		: 'Obriši ćelije',
+			merge			: 'Spoj celije',
+			mergeRight		: 'Merge Right', // MISSING
+			mergeDown		: 'Merge Down', // MISSING
+			splitHorizontal	: 'Split Cell Horizontally', // MISSING
+			splitVertical	: 'Split Cell Vertically', // MISSING
+			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
+			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
+		},
+
+		row :
+		{
+			menu			: 'Row', // MISSING
+			insertBefore	: 'Insert Row Before', // MISSING
+			insertAfter		: 'Insert Row After', // MISSING
+			deleteRow		: 'Obriši redove'
+		},
+
+		column :
+		{
+			menu			: 'Column', // MISSING
+			insertBefore	: 'Insert Column Before', // MISSING
+			insertAfter		: 'Insert Column After', // MISSING
+			deleteColumn	: 'Obriši kolone'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Osobine dugmeta',
+		text		: 'Tekst (vrednost)',
+		type		: 'Tip',
+		typeBtn		: 'Button', // MISSING
+		typeSbm		: 'Submit', // MISSING
+		typeRst		: 'Reset' // MISSING
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Osobine polja za potvrdu',
+		radioTitle	: 'Osobine radio-dugmeta',
+		value		: 'Vrednost',
+		selected	: 'Označeno'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Osobine forme',
+		menu		: 'Osobine forme',
+		action		: 'Akcija',
+		method		: 'Metoda',
+		encoding	: 'Encoding' // MISSING
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Osobine izbornog polja',
+		selectInfo	: 'Info',
+		opAvail		: 'Dostupne opcije',
+		value		: 'Vrednost',
+		size		: 'Veličina',
+		lines		: 'linija',
+		chkMulti	: 'Dozvoli višestruku selekciju',
+		opText		: 'Tekst',
+		opValue		: 'Vrednost',
+		btnAdd		: 'Dodaj',
+		btnModify	: 'Izmeni',
+		btnUp		: 'Gore',
+		btnDown		: 'Dole',
+		btnSetValue : 'Podesi kao označenu vrednost',
+		btnDelete	: 'Obriši'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Osobine zone teksta',
+		cols		: 'Broj kolona',
+		rows		: 'Broj redova'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Osobine tekstualnog polja',
+		name		: 'Naziv',
+		value		: 'Vrednost',
+		charWidth	: 'Širina (karaktera)',
+		maxChars	: 'Maksimalno karaktera',
+		type		: 'Tip',
+		typeText	: 'Tekst',
+		typePass	: 'Lozinka'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Osobine skrivenog polja',
+		name	: 'Naziv',
+		value	: 'Vrednost'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Osobine slika',
+		titleButton	: 'Osobine dugmeta sa slikom',
+		menu		: 'Osobine slika',
+		infoTab		: 'Info slike',
+		btnUpload	: 'Pošalji na server',
+		upload		: 'Pošalji',
+		alt			: 'Alternativni tekst',
+		lockRatio	: 'Zaključaj odnos',
+		resetSize	: 'Resetuj veličinu',
+		border		: 'Okvir',
+		hSpace		: 'HSpace',
+		vSpace		: 'VSpace',
+		alertUrl	: 'Unesite URL slike',
+		linkTab		: 'Link',
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Osobine fleša',
+		propertiesTab	: 'Properties', // MISSING
+		title			: 'Osobine fleša',
+		chkPlay			: 'Automatski start',
+		chkLoop			: 'Ponavljaj',
+		chkMenu			: 'Uključi fleš meni',
+		chkFull			: 'Allow Fullscreen', // MISSING
+ 		scale			: 'Skaliraj',
+		scaleAll		: 'Prikaži sve',
+		scaleNoBorder	: 'Bez ivice',
+		scaleFit		: 'Popuni površinu',
+		access			: 'Script Access', // MISSING
+		accessAlways	: 'Always', // MISSING
+		accessSameDomain: 'Same domain', // MISSING
+		accessNever		: 'Never', // MISSING
+		alignAbsBottom	: 'Abs dole',
+		alignAbsMiddle	: 'Abs sredina',
+		alignBaseline	: 'Bazno',
+		alignTextTop	: 'Vrh teksta',
+		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
+		bgcolor			: 'Boja pozadine',
+		hSpace			: 'HSpace',
+		vSpace			: 'VSpace',
+		validateSrc		: 'Unesite URL linka',
+		validateHSpace	: 'HSpace must be a number.', // MISSING
+		validateVSpace	: 'VSpace must be a number.' // MISSING
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Proveri spelovanje',
+		title			: 'Spell Check', // MISSING
+		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
+		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		notInDic		: 'Nije u rečniku',
+		changeTo		: 'Izmeni',
+		btnIgnore		: 'Ignoriši',
+		btnIgnoreAll	: 'Ignoriši sve',
+		btnReplace		: 'Zameni',
+		btnReplaceAll	: 'Zameni sve',
+		btnUndo			: 'Vrati akciju',
+		noSuggestions	: '- Bez sugestija -',
+		progress		: 'Provera spelovanja u toku...',
+		noMispell		: 'Provera spelovanja završena: greške nisu pronadene',
+		noChanges		: 'Provera spelovanja završena: Nije izmenjena nijedna rec',
+		oneChange		: 'Provera spelovanja završena: Izmenjena je jedna reč',
+		manyChanges		: 'Provera spelovanja završena: %1 reč(i) je izmenjeno',
+		ieSpellDownload	: 'Provera spelovanja nije instalirana. Da li želite da je skinete sa Interneta?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Smajli',
+		title	: 'Unesi smajlija',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element' // MISSING
+	},
+
+	numberedlist	: 'Nabrojiva lista',
+	bulletedlist	: 'Nenabrojiva lista',
+	indent			: 'Uvećaj levu marginu',
+	outdent			: 'Smanji levu marginu',
+
+	justify :
+	{
+		left	: 'Levo ravnanje',
+		center	: 'Centriran tekst',
+		right	: 'Desno ravnanje',
+		block	: 'Obostrano ravnanje'
+	},
+
+	blockquote : 'Block Quote', // MISSING
+
+	clipboard :
+	{
+		title		: 'Zalepi',
+		cutError	: 'Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+X).',
+		copyError	: 'Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+C).',
+		pasteMsg	: 'Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu prečicu (<STRONG>Ctrl/Cmd+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.',
+		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.', // MISSING
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar			: 'Zalepi iz Worda',
+		title			: 'Zalepi iz Worda',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'Zalepi kao čist tekst',
+		title	: 'Zalepi kao čist tekst'
+	},
+
+	templates :
+	{
+		button			: 'Obrasci',
+		title			: 'Obrasci za sadržaj',
+		options : 'Template Options', // MISSING
+		insertOption	: 'Replace actual contents', // MISSING
+		selectPromptMsg	: 'Molimo Vas da odaberete obrazac koji ce biti primenjen na stranicu (trenutni sadržaj ce biti obrisan):',
+		emptyListMsg	: '(Nema definisanih obrazaca)'
+	},
+
+	showBlocks : 'Show Blocks', // MISSING
+
+	stylesCombo :
+	{
+		label		: 'Stil',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles', // MISSING
+		panelTitle2	: 'Inline Styles', // MISSING
+		panelTitle3	: 'Object Styles' // MISSING
+	},
+
+	format :
+	{
+		label		: 'Format',
+		panelTitle	: 'Format',
+
+		tag_p		: 'Normal',
+		tag_pre		: 'Formatirano',
+		tag_address	: 'Adresa',
+		tag_h1		: 'Naslov 1',
+		tag_h2		: 'Naslov 2',
+		tag_h3		: 'Naslov 3',
+		tag_h4		: 'Naslov 4',
+		tag_h5		: 'Naslov 5',
+		tag_h6		: 'Naslov 6',
+		tag_div		: 'Normal (DIV)' // MISSING
+	},
+
+	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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Font',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'Font'
+	},
+
+	fontSize :
+	{
+		label		: 'Veličina fonta',
+		voiceLabel	: 'Font Size', // MISSING
+		panelTitle	: 'Veličina fonta'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Boja teksta',
+		bgColorTitle	: 'Boja pozadine',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'Automatski',
+		more			: 'Više boja...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor', // MISSING
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // 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
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor', // MISSING
+		flash		: 'Flash Animation', // MISSING
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Osobine dokumenta',
+		title : 'Osobine dokumenta',
+		design : 'Design', // MISSING
+		meta : 'Metapodaci',
+		chooseColor : 'Choose', // MISSING
+		other : '<остало>',
+		docTitle :	'Naslov stranice',
+		charset : 	'Kodiranje skupa karaktera',
+		charsetOther : 'Ostala kodiranja skupa karaktera',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Central European', // MISSING
+		charsetCT : 'Chinese Traditional (Big5)', // MISSING
+		charsetCR : 'Cyrillic', // MISSING
+		charsetGR : 'Greek', // MISSING
+		charsetJP : 'Japanese', // MISSING
+		charsetKR : 'Korean', // MISSING
+		charsetTR : 'Turkish', // MISSING
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Western European', // MISSING
+		docType : 'Zaglavlje tipa dokumenta',
+		docTypeOther : 'Ostala zaglavlja tipa dokumenta',
+		xhtmlDec : 'Ukljuci XHTML deklaracije',
+		bgColor : 'Boja pozadine',
+		bgImage : 'URL pozadinske slike',
+		bgFixed : 'Fiksirana pozadina',
+		txtColor : 'Boja teksta',
+		margin : 'Margine stranice',
+		marginTop : 'Gornja',
+		marginLeft : 'Leva',
+		marginRight : 'Desna',
+		marginBottom : 'Donja',
+		metaKeywords : 'Ključne reci za indeksiranje dokumenta (razdvojene zarezima)',
+		metaDescription : 'Opis dokumenta',
+		metaAuthor : 'Autor',
+		metaCopyright : 'Autorska prava',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/sr.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Serbian (Cyrillic) language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['sr'] =
+{
+	/**
+	 * 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, press ALT 0 for help.', // MISSING
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor', // MISSING
+
+	// Toolbar buttons without dialogs.
+	source			: 'Kôд',
+	newPage			: 'Нова страница',
+	save			: 'Сачувај',
+	preview			: 'Изглед странице',
+	cut				: 'Исеци',
+	copy			: 'Копирај',
+	paste			: 'Залепи',
+	print			: 'Штампа',
+	underline		: 'Подвучено',
+	bold			: 'Подебљано',
+	italic			: 'Курзив',
+	selectAll		: 'Означи све',
+	removeFormat	: 'Уклони форматирање',
+	strike			: 'Прецртано',
+	subscript		: 'Индекс',
+	superscript		: 'Степен',
+	horizontalrule	: 'Унеси хоризонталну линију',
+	pagebreak		: 'Insert Page Break for Printing', // MISSING
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'Уклони линк',
+	undo			: 'Поништи акцију',
+	redo			: 'Понови акцију',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Претражи сервер',
+		url				: 'УРЛ',
+		protocol		: 'Протокол',
+		upload			: 'Пошаљи',
+		uploadSubmit	: 'Пошаљи на сервер',
+		image			: 'Слика',
+		flash			: 'Флеш елемент',
+		form			: 'Форма',
+		checkbox		: 'Поље за потврду',
+		radio			: 'Радио-дугме',
+		textField		: 'Текстуално поље',
+		textarea		: 'Зона текста',
+		hiddenField		: 'Скривено поље',
+		button			: 'Дугме',
+		select			: 'Изборно поље',
+		imageButton		: 'Дугме са сликом',
+		notSet			: '<није постављено>',
+		id				: 'Ид',
+		name			: 'Назив',
+		langDir			: 'Смер језика',
+		langDirLtr		: 'С лева на десно (LTR)',
+		langDirRtl		: 'С десна на лево (RTL)',
+		langCode		: 'Kôд језика',
+		longDescr		: 'Пун опис УРЛ',
+		cssClass		: 'Stylesheet класе',
+		advisoryTitle	: 'Advisory наслов',
+		cssStyle		: 'Стил',
+		ok				: 'OK',
+		cancel			: 'Oткажи',
+		close			: 'Close', // MISSING
+		preview			: 'Preview', // MISSING
+		generalTab		: 'General', // MISSING
+		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
+		options			: 'Options', // MISSING
+		target			: 'Target', // MISSING
+		targetNew		: 'New Window (_blank)', // MISSING
+		targetTop		: 'Topmost Window (_top)', // MISSING
+		targetSelf		: 'Same Window (_self)', // MISSING
+		targetParent	: 'Parent Window (_parent)', // MISSING
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Ширина',
+		height			: 'Висина',
+		align			: 'Равнање',
+		alignLeft		: 'Лево',
+		alignRight		: 'Десно',
+		alignCenter		: 'Средина',
+		alignTop		: 'Врх',
+		alignMiddle		: 'Средина',
+		alignBottom		: 'Доле',
+		invalidHeight	: 'Height must be a number.', // MISSING
+		invalidWidth	: 'Width must be a number.', // MISSING
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, unavailable</span>' // MISSING
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options' // MISSING
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Унеси специјални карактер',
+		title		: 'Одаберите специјални карактер',
+		options : 'Special Character Options' // MISSING
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Унеси/измени линк',
+		other 		: '<other>', // MISSING
+		menu		: 'Промени линк',
+		title		: 'Линк',
+		info		: 'Линк инфо',
+		target		: 'Meтa',
+		upload		: 'Пошаљи',
+		advanced	: 'Напредни тагови',
+		type		: 'Врста линка',
+		toUrl		: 'URL', // MISSING
+		toAnchor	: 'Сидро на овој страници',
+		toEmail		: 'Eлектронска пошта',
+		targetFrame		: '<оквир>',
+		targetPopup		: '<искачући прозор>',
+		targetFrameName	: 'Назив одредишног фрејма',
+		targetPopupName	: 'Назив искачућег прозора',
+		popupFeatures	: 'Могућности искачућег прозора',
+		popupResizable	: 'Resizable', // MISSING
+		popupStatusBar	: 'Статусна линија',
+		popupLocationBar: 'Локација',
+		popupToolbar	: 'Toolbar',
+		popupMenuBar	: 'Контекстни мени',
+		popupFullScreen	: 'Приказ преко целог екрана (ИE)',
+		popupScrollBars	: 'Скрол бар',
+		popupDependent	: 'Зависно (Netscape)',
+		popupLeft		: 'Од леве ивице екрана (пиксела)',
+		popupTop		: 'Од врха екрана (пиксела)',
+		id				: 'Id', // MISSING
+		langDir			: 'Смер језика',
+		langDirLTR		: 'С лева на десно (LTR)',
+		langDirRTL		: 'С десна на лево (RTL)',
+		acccessKey		: 'Приступни тастер',
+		name			: 'Назив',
+		langCode			: 'Смер језика',
+		tabIndex			: 'Таб индекс',
+		advisoryTitle		: 'Advisory наслов',
+		advisoryContentType	: 'Advisory врста садржаја',
+		cssClasses		: 'Stylesheet класе',
+		charset			: 'Linked Resource Charset',
+		styles			: 'Стил',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Одабери сидро',
+		anchorName		: 'По називу сидра',
+		anchorId			: 'Пo Ид-jу елемента',
+		emailAddress		: 'Адреса електронске поште',
+		emailSubject		: 'Наслов',
+		emailBody		: 'Садржај поруке',
+		noAnchors		: '(Нема доступних сидра)',
+		noUrl			: 'Унесите УРЛ линка',
+		noEmail			: 'Откуцајте адресу електронске поште'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Унеси/измени сидро',
+		menu		: 'Особине сидра',
+		title		: 'Особине сидра',
+		name		: 'Име сидра',
+		errorName	: 'Молимо Вас да унесете име сидра',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Numbered List Properties', // MISSING
+		bulletedTitle		: 'Bulleted List Properties', // MISSING
+		type				: 'Type', // MISSING
+		start				: 'Start', // MISSING
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Circle', // MISSING
+		disc				: 'Disc', // MISSING
+		square				: 'Square', // MISSING
+		none				: 'None', // MISSING
+		notset				: '<not set>', // MISSING
+		armenian			: 'Armenian numbering', // MISSING
+		georgian			: 'Georgian numbering (an, ban, gan, etc.)', // MISSING
+		lowerRoman			: 'Lower Roman (i, ii, iii, iv, v, etc.)', // MISSING
+		upperRoman			: 'Upper Roman (I, II, III, IV, V, etc.)', // MISSING
+		lowerAlpha			: 'Lower Alpha (a, b, c, d, e, etc.)', // MISSING
+		upperAlpha			: 'Upper Alpha (A, B, C, D, E, etc.)', // MISSING
+		lowerGreek			: 'Lower Greek (alpha, beta, gamma, etc.)', // MISSING
+		decimal				: 'Decimal (1, 2, 3, etc.)', // MISSING
+		decimalLeadingZero	: 'Decimal leading zero (01, 02, 03, etc.)' // MISSING
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Find and Replace', // MISSING
+		find				: 'Претрага',
+		replace				: 'Замена',
+		findWhat			: 'Пронађи:',
+		replaceWith			: 'Замени са:',
+		notFoundMsg			: 'Тражени текст није пронађен.',
+		matchCase			: 'Разликуј велика и мала слова',
+		matchWord			: 'Упореди целе речи',
+		matchCyclic			: 'Match cyclic', // MISSING
+		replaceAll			: 'Замени све',
+		replaceSuccessMsg	: '%1 occurrence(s) replaced.' // MISSING
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Табела',
+		title		: 'Особине табеле',
+		menu		: 'Особине табеле',
+		deleteTable	: 'Delete Table', // MISSING
+		rows		: 'Редова',
+		columns		: 'Kолона',
+		border		: 'Величина оквира',
+		widthPx		: 'пиксела',
+		widthPc		: 'процената',
+		widthUnit	: 'width unit', // MISSING
+		cellSpace	: 'Ћелијски простор',
+		cellPad		: 'Размак ћелија',
+		caption		: 'Наслов табеле',
+		summary		: 'Summary', // MISSING
+		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 positive number.', // MISSING
+		invalidCellPadding	: 'Cell padding must be a positive number.', // MISSING
+
+		cell :
+		{
+			menu			: 'Cell', // MISSING
+			insertBefore	: 'Insert Cell Before', // MISSING
+			insertAfter		: 'Insert Cell After', // MISSING
+			deleteCell		: 'Обриши ћелије',
+			merge			: 'Спој ћелије',
+			mergeRight		: 'Merge Right', // MISSING
+			mergeDown		: 'Merge Down', // MISSING
+			splitHorizontal	: 'Split Cell Horizontally', // MISSING
+			splitVertical	: 'Split Cell Vertically', // MISSING
+			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
+			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
+		},
+
+		row :
+		{
+			menu			: 'Row', // MISSING
+			insertBefore	: 'Insert Row Before', // MISSING
+			insertAfter		: 'Insert Row After', // MISSING
+			deleteRow		: 'Обриши редове'
+		},
+
+		column :
+		{
+			menu			: 'Column', // MISSING
+			insertBefore	: 'Insert Column Before', // MISSING
+			insertAfter		: 'Insert Column After', // MISSING
+			deleteColumn	: 'Обриши колоне'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Особине дугмета',
+		text		: 'Текст (вредност)',
+		type		: 'Tип',
+		typeBtn		: 'Button', // MISSING
+		typeSbm		: 'Submit', // MISSING
+		typeRst		: 'Reset' // MISSING
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Особине поља за потврду',
+		radioTitle	: 'Особине радио-дугмета',
+		value		: 'Вредност',
+		selected	: 'Означено'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Особине форме',
+		menu		: 'Особине форме',
+		action		: 'Aкција',
+		method		: 'Mетода',
+		encoding	: 'Encoding' // MISSING
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Особине изборног поља',
+		selectInfo	: 'Инфо',
+		opAvail		: 'Доступне опције',
+		value		: 'Вредност',
+		size		: 'Величина',
+		lines		: 'линија',
+		chkMulti	: 'Дозволи вишеструку селекцију',
+		opText		: 'Текст',
+		opValue		: 'Вредност',
+		btnAdd		: 'Додај',
+		btnModify	: 'Измени',
+		btnUp		: 'Горе',
+		btnDown		: 'Доле',
+		btnSetValue : 'Подеси као означену вредност',
+		btnDelete	: 'Обриши'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Особине зоне текста',
+		cols		: 'Број колона',
+		rows		: 'Број редова'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Особине текстуалног поља',
+		name		: 'Назив',
+		value		: 'Вредност',
+		charWidth	: 'Ширина (карактера)',
+		maxChars	: 'Максимално карактера',
+		type		: 'Тип',
+		typeText	: 'Текст',
+		typePass	: 'Лозинка'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Особине скривеног поља',
+		name	: 'Назив',
+		value	: 'Вредност'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Особине слика',
+		titleButton	: 'Особине дугмета са сликом',
+		menu		: 'Особине слика',
+		infoTab		: 'Инфо слике',
+		btnUpload	: 'Пошаљи на сервер',
+		upload		: 'Пошаљи',
+		alt			: 'Алтернативни текст',
+		lockRatio	: 'Закључај однос',
+		resetSize	: 'Ресетуј величину',
+		border		: 'Оквир',
+		hSpace		: 'HSpace',
+		vSpace		: 'VSpace',
+		alertUrl	: 'Унесите УРЛ слике',
+		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
+		validateBorder	: 'Border must be a whole number.', // MISSING
+		validateHSpace	: 'HSpace must be a whole number.', // MISSING
+		validateVSpace	: 'VSpace must be a whole number.' // MISSING
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Особине Флеша',
+		propertiesTab	: 'Properties', // MISSING
+		title			: 'Особине флеша',
+		chkPlay			: 'Аутоматски старт',
+		chkLoop			: 'Понављај',
+		chkMenu			: 'Укључи флеш мени',
+		chkFull			: 'Allow Fullscreen', // MISSING
+ 		scale			: 'Скалирај',
+		scaleAll		: 'Прикажи све',
+		scaleNoBorder	: 'Без ивице',
+		scaleFit		: 'Попуни површину',
+		access			: 'Script Access', // MISSING
+		accessAlways	: 'Always', // MISSING
+		accessSameDomain: 'Same domain', // MISSING
+		accessNever		: 'Never', // MISSING
+		alignAbsBottom	: 'Abs доле',
+		alignAbsMiddle	: 'Abs средина',
+		alignBaseline	: 'Базно',
+		alignTextTop	: 'Врх текста',
+		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
+		bgcolor			: 'Боја позадине',
+		hSpace			: 'HSpace',
+		vSpace			: 'VSpace',
+		validateSrc		: 'Унесите УРЛ линка',
+		validateHSpace	: 'HSpace must be a number.', // MISSING
+		validateVSpace	: 'VSpace must be a number.' // MISSING
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Провери спеловање',
+		title			: 'Spell Check', // MISSING
+		notAvailable	: 'Sorry, but service is unavailable now.', // MISSING
+		errorLoading	: 'Error loading application service host: %s.', // MISSING
+		notInDic		: 'Није у речнику',
+		changeTo		: 'Измени',
+		btnIgnore		: 'Игнориши',
+		btnIgnoreAll	: 'Игнориши све',
+		btnReplace		: 'Замени',
+		btnReplaceAll	: 'Замени све',
+		btnUndo			: 'Врати акцију',
+		noSuggestions	: '- Без сугестија -',
+		progress		: 'Провера спеловања у току...',
+		noMispell		: 'Провера спеловања завршена: грешке нису пронађене',
+		noChanges		: 'Провера спеловања завршена: Није измењена ниједна реч',
+		oneChange		: 'Провера спеловања завршена: Измењена је једна реч',
+		manyChanges		: 'Провера спеловања завршена:  %1 реч(и) је измењено',
+		ieSpellDownload	: 'Провера спеловања није инсталирана. Да ли желите да је скинете са Интернета?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Смајли',
+		title	: 'Унеси смајлија',
+		options : 'Smiley Options' // MISSING
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elements path', // MISSING
+		eleTitle : '%1 element' // MISSING
+	},
+
+	numberedlist	: 'Набројиву листу',
+	bulletedlist	: 'Ненабројива листа',
+	indent			: 'Увећај леву маргину',
+	outdent			: 'Смањи леву маргину',
+
+	justify :
+	{
+		left	: 'Лево равнање',
+		center	: 'Центриран текст',
+		right	: 'Десно равнање',
+		block	: 'Обострано равнање'
+	},
+
+	blockquote : 'Block Quote', // MISSING
+
+	clipboard :
+	{
+		title		: 'Залепи',
+		cutError	: 'Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+X).',
+		copyError	: 'Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+C).',
+		pasteMsg	: 'Молимо Вас да залепите унутар доње површине користећи тастатурну пречицу (<STRONG>Ctrl/Cmd+V</STRONG>) и да притиснете <STRONG>OK</STRONG>.',
+		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.', // MISSING
+		pasteArea	: 'Paste Area' // MISSING
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?', // MISSING
+		toolbar			: 'Залепи из Worda',
+		title			: 'Залепи из Worda',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'Залепи као чист текст',
+		title	: 'Залепи као чист текст'
+	},
+
+	templates :
+	{
+		button			: 'Обрасци',
+		title			: 'Обрасци за садржај',
+		options : 'Template Options', // MISSING
+		insertOption	: 'Replace actual contents', // MISSING
+		selectPromptMsg	: 'Молимо Вас да одаберете образац који ће бити примењен на страницу (тренутни садржај ће бити обрисан):',
+		emptyListMsg	: '(Нема дефинисаних образаца)'
+	},
+
+	showBlocks : 'Show Blocks', // MISSING
+
+	stylesCombo :
+	{
+		label		: 'Стил',
+		panelTitle	: 'Formatting Styles', // MISSING
+		panelTitle1	: 'Block Styles', // MISSING
+		panelTitle2	: 'Inline Styles', // MISSING
+		panelTitle3	: 'Object Styles' // MISSING
+	},
+
+	format :
+	{
+		label		: 'Формат',
+		panelTitle	: 'Формат',
+
+		tag_p		: 'Normal',
+		tag_pre		: 'Formatirano',
+		tag_address	: 'Adresa',
+		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)' // MISSING
+	},
+
+	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
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Фонт',
+		voiceLabel	: 'Font', // MISSING
+		panelTitle	: 'Фонт'
+	},
+
+	fontSize :
+	{
+		label		: 'Величина фонта',
+		voiceLabel	: 'Font Size', // MISSING
+		panelTitle	: 'Величина фонта'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Боја текста',
+		bgColorTitle	: 'Боја позадине',
+		panelTitle		: 'Colors', // MISSING
+		auto			: 'Аутоматски',
+		more			: 'Више боја...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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
+		opera_title		: 'Not supported by Opera', // 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
+		allCaps			: 'Ignore All-Caps Words', // MISSING
+		ignoreDomainNames : 'Ignore Domain Names', // MISSING
+		mixedCase		: 'Ignore Words with Mixed Case', // MISSING
+		mixedWithDigits	: 'Ignore Words with Numbers', // MISSING
+
+		languagesTab	: 'Languages', // MISSING
+
+		dictionariesTab	: 'Dictionaries', // MISSING
+		dic_field_name	: 'Dictionary name', // MISSING
+		dic_create		: 'Create', // MISSING
+		dic_restore		: 'Restore', // MISSING
+		dic_delete		: 'Delete', // MISSING
+		dic_rename		: 'Rename', // MISSING
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'About' // MISSING
+	},
+
+	about :
+	{
+		title		: 'About CKEditor', // MISSING
+		dlgTitle	: 'About CKEditor', // MISSING
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // 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
+
+	fakeobjects :
+	{
+		anchor		: 'Anchor', // MISSING
+		flash		: 'Flash Animation', // MISSING
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Unknown Object' // MISSING
+	},
+
+	resize : 'Drag to resize', // MISSING
+
+	colordialog :
+	{
+		title		: 'Select color', // MISSING
+		options	:	'Color Options', // MISSING
+		highlight	: 'Highlight', // MISSING
+		selected	: 'Selected Color', // MISSING
+		clear		: 'Clear' // MISSING
+	},
+
+	toolbarCollapse	: 'Collapse Toolbar', // MISSING
+	toolbarExpand	: 'Expand Toolbar', // MISSING
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Особине документа',
+		title : 'Особине документа',
+		design : 'Design', // MISSING
+		meta : 'Метаподаци',
+		chooseColor : 'Choose', // MISSING
+		other : '<other>',
+		docTitle :	'Наслов странице',
+		charset : 	'Кодирање скупа карактера',
+		charsetOther : 'Остала кодирања скупа карактера',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Central European', // MISSING
+		charsetCT : 'Chinese Traditional (Big5)', // MISSING
+		charsetCR : 'Cyrillic', // MISSING
+		charsetGR : 'Greek', // MISSING
+		charsetJP : 'Japanese', // MISSING
+		charsetKR : 'Korean', // MISSING
+		charsetTR : 'Turkish', // MISSING
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Western European', // MISSING
+		docType : 'Заглавље типа документа',
+		docTypeOther : 'Остала заглавља типа документа',
+		xhtmlDec : 'Улључи XHTML декларације',
+		bgColor : 'Боја позадине',
+		bgImage : 'УРЛ позадинске слике',
+		bgFixed : 'Фиксирана позадина',
+		txtColor : 'Боја текста',
+		margin : 'Маргине странице',
+		marginTop : 'Горња',
+		marginLeft : 'Лева',
+		marginRight : 'Десна',
+		marginBottom : 'Доња',
+		metaKeywords : 'Кључне речи за индексирање документа (раздвојене зарезом)',
+		metaDescription : 'Опис документа',
+		metaAuthor : 'Аутор',
+		metaCopyright : 'Ауторска права',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 811 - 0
web/js/ckeditor/_source/lang/sv.js

@@ -0,0 +1,811 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+* @fileOverview
+*/
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['sv'] =
+{
+	/**
+	 * 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, tryck ALT 0 för hjälp.',
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Rich Text Editor',
+
+	// Toolbar buttons without dialogs.
+	source			: 'Källa',
+	newPage			: 'Ny sida',
+	save			: 'Spara',
+	preview			: 'Förhandsgranska',
+	cut				: 'Klipp ut',
+	copy			: 'Kopiera',
+	paste			: 'Klistra in',
+	print			: 'Skriv ut',
+	underline		: 'Understruken',
+	bold			: 'Fet',
+	italic			: 'Kursiv',
+	selectAll		: 'Markera allt',
+	removeFormat	: 'Radera formatering',
+	strike			: 'Genomstruken',
+	subscript		: 'Nedsänkta tecken',
+	superscript		: 'Upphöjda tecken',
+	horizontalrule	: 'Infoga horisontal linje',
+	pagebreak		: 'Infoga sidbrytning',
+	pagebreakAlt		: 'Sidbrytning',
+	unlink			: 'Radera länk',
+	undo			: 'Ångra',
+	redo			: 'Gör om',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Bläddra på server',
+		url				: 'URL',
+		protocol		: 'Protokoll',
+		upload			: 'Ladda upp',
+		uploadSubmit	: 'Skicka till server',
+		image			: 'Bild',
+		flash			: 'Flash',
+		form			: 'Formulär',
+		checkbox		: 'Kryssruta',
+		radio			: 'Alternativknapp',
+		textField		: 'Textfält',
+		textarea		: 'Textruta',
+		hiddenField		: 'Dolt fält',
+		button			: 'Knapp',
+		select			: 'Flervalslista',
+		imageButton		: 'Bildknapp',
+		notSet			: '<ej angivet>',
+		id				: 'Id',
+		name			: 'Namn',
+		langDir			: 'Språkriktning',
+		langDirLtr		: 'Vänster till Höger (VTH)',
+		langDirRtl		: 'Höger till Vänster (HTV)',
+		langCode		: 'Språkkod',
+		longDescr		: 'URL-beskrivning',
+		cssClass		: 'Stilmall',
+		advisoryTitle	: 'Titel',
+		cssStyle		: 'Stilmall',
+		ok				: 'OK',
+		cancel			: 'Avbryt',
+		close			: 'Stäng',
+		preview			: 'Förhandsgranska',
+		generalTab		: 'Allmänt',
+		advancedTab		: 'Avancerad',
+		validateNumberFailed : 'Värdet är inte ett nummer.',
+		confirmNewPage	: 'Alla ändringar i innehållet kommer att förloras. Är du säker på att du vill ladda en ny sida?',
+		confirmCancel	: 'Några av de alternativ har ändrats. Är du säker på att stänga dialogrutan?',
+		options			: 'Alternativ',
+		target			: 'Mål',
+		targetNew		: 'Nytt fönster (_blank)',
+		targetTop		: 'Översta fönstret (_top)',
+		targetSelf		: 'Samma fönster (_self)',
+		targetParent	: 'Föregående fönster (_parent)',
+		langDirLTR		: 'Vänster till höger (LTR)',
+		langDirRTL		: 'Höger till vänster (RTL)',
+		styles			: 'Stil',
+		cssClasses		: 'Stilmallar',
+		width			: 'Bredd',
+		height			: 'Höjd',
+		align			: 'Justering',
+		alignLeft		: 'Vänster',
+		alignRight		: 'Höger',
+		alignCenter		: 'Centrerad',
+		alignTop		: 'Överkant',
+		alignMiddle		: 'Mitten',
+		alignBottom		: 'Nederkant',
+		invalidHeight	: 'Höjd måste vara ett nummer.',
+		invalidWidth	: 'Bredd måste vara ett nummer.',
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, Ej tillgänglig</span>'
+	},
+
+	contextmenu :
+	{
+		options : 'Context Menu Options'
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Klistra in utökat tecken',
+		title		: 'Välj utökat tecken',
+		options : 'Special Character Options'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Infoga/Redigera länk',
+		other 		: '<annan>',
+		menu		: 'Redigera länk',
+		title		: 'Länk',
+		info		: 'Länkinformation',
+		target		: 'Mål',
+		upload		: 'Ladda upp',
+		advanced	: 'Avancerad',
+		type		: 'Länktyp',
+		toUrl		: 'URL',
+		toAnchor	: 'Ankare i sidan',
+		toEmail		: 'E-post',
+		targetFrame		: '<ram>',
+		targetPopup		: '<popup-fönster>',
+		targetFrameName	: 'Målets ramnamn',
+		targetPopupName	: 'Popup-fönstrets namn',
+		popupFeatures	: 'Popup-fönstrets egenskaper',
+		popupResizable	: 'Resizable',
+		popupStatusBar	: 'Statusfält',
+		popupLocationBar: 'Adressfält',
+		popupToolbar	: 'Verktygsfält',
+		popupMenuBar	: 'Menyfält',
+		popupFullScreen	: 'Helskärm (endast IE)',
+		popupScrollBars	: 'Scrolllista',
+		popupDependent	: 'Beroende (endast Netscape)',
+		popupLeft		: 'Position från vänster',
+		popupTop		: 'Position från sidans topp',
+		id				: 'Id',
+		langDir			: 'Språkriktning',
+		langDirLTR		: 'Vänster till höger (VTH)',
+		langDirRTL		: 'Höger till vänster (HTV)',
+		acccessKey		: 'Behörighetsnyckel',
+		name			: 'Namn',
+		langCode			: 'Språkriktning',
+		tabIndex			: 'Tabindex',
+		advisoryTitle		: 'Titel',
+		advisoryContentType	: 'Innehållstyp',
+		cssClasses		: 'Stylesheet class',
+		charset			: 'Teckenuppställning',
+		styles			: 'Stilmall',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Välj ett ankare',
+		anchorName		: 'efter ankarnamn',
+		anchorId			: 'efter objektid',
+		emailAddress		: 'E-postadress',
+		emailSubject		: 'Ämne',
+		emailBody		: 'Innehåll',
+		noAnchors		: '(Inga ankare kunde hittas)',
+		noUrl			: 'Var god ange länkens URL',
+		noEmail			: 'Var god ange E-postadress'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Infoga/Redigera ankarlänk',
+		menu		: 'Egenskaper för ankarlänk',
+		title		: 'Egenskaper för ankarlänk',
+		name		: 'Ankarnamn',
+		errorName	: 'Var god ange ett ankarnamn',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Egenskaper för punktlista',
+		bulletedTitle		: 'Egenskaper för punktlista',
+		type				: 'Typ',
+		start				: 'Start',
+		validateStartNumber				:'List start number must be a whole number.',
+		circle				: 'Cirkel',
+		disc				: 'Disk',
+		square				: 'Fyrkant',
+		none				: 'Ingen',
+		notset				: '<ej angiven>',
+		armenian			: 'Armenisk numrering',
+		georgian			: 'Georgisk numrering (an, ban, gan, etc.)',
+		lowerRoman			: 'Romerska gemener (i, ii, iii, iv, v, etc.)',
+		upperRoman			: 'Romerska versaler (I, II, III, IV, V, etc.)',
+		lowerAlpha			: 'Alpha gemener (a, b, c, d, e, etc.)',
+		upperAlpha			: 'Alpha versaler (A, B, C, D, E, etc.)',
+		lowerGreek			: 'Grekiska gemener (alpha, beta, gamma, etc.)',
+		decimal				: 'Decimal (1, 2, 3, etc.)',
+		decimalLeadingZero	: 'Decimal nolla (01, 02, 03, etc.)'
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Sök och ersätt',
+		find				: 'Sök',
+		replace				: 'Ersätt',
+		findWhat			: 'Sök efter:',
+		replaceWith			: 'Ersätt med:',
+		notFoundMsg			: 'Angiven text kunde ej hittas.',
+		matchCase			: 'Skiftläge',
+		matchWord			: 'Inkludera hela ord',
+		matchCyclic			: 'Matcha cykliska',
+		replaceAll			: 'Ersätt alla',
+		replaceSuccessMsg	: '%1 förekomst(er) ersatta.'
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tabell',
+		title		: 'Tabellegenskaper',
+		menu		: 'Tabellegenskaper',
+		deleteTable	: 'Radera tabell',
+		rows		: 'Rader',
+		columns		: 'Kolumner',
+		border		: 'Kantstorlek',
+		widthPx		: 'pixlar',
+		widthPc		: 'procent',
+		widthUnit	: 'enhet bredd',
+		cellSpace	: 'Cellavstånd',
+		cellPad		: 'Cellutfyllnad',
+		caption		: 'Rubrik',
+		summary		: 'Sammanfattning',
+		headers		: 'Ruberiker',
+		headersNone		: 'Ingen',
+		headersColumn	: 'Första kolumnen',
+		headersRow		: 'Första raden',
+		headersBoth		: 'Båda',
+		invalidRows		: 'Antal rader måste vara större än 0.',
+		invalidCols		: 'Antal kolumner måste vara ett nummer större än 0.',
+		invalidBorder	: 'Ram måste vara ett nummer.',
+		invalidWidth	: 'Tabell måste vara ett nummer.',
+		invalidHeight	: 'Tabellens höjd måste vara ett nummer.',
+		invalidCellSpacing	: 'Luft i cell måste vara ett nummer.',
+		invalidCellPadding	: 'Luft i cell måste vara ett nummer.',
+
+		cell :
+		{
+			menu			: 'Cell',
+			insertBefore	: 'Lägg till cell före',
+			insertAfter		: 'Lägg till cell efter',
+			deleteCell		: 'Radera celler',
+			merge			: 'Sammanfoga celler',
+			mergeRight		: 'Sammanfoga höger',
+			mergeDown		: 'Sammanfoga ner',
+			splitHorizontal	: 'Dela cell horisontellt',
+			splitVertical	: 'Dela cell vertikalt',
+			title			: 'Egenskaper för cell',
+			cellType		: 'Celltyp',
+			rowSpan			: 'Rad spann',
+			colSpan			: 'Kolumnen spann',
+			wordWrap		: 'Radbrytning',
+			hAlign			: 'Horisontell justering',
+			vAlign			: 'Vertikal justering',
+			alignBaseline	: 'Baslinje',
+			bgColor			: 'Bakgrundsfärg',
+			borderColor		: 'Ramfärg',
+			data			: 'Data',
+			header			: 'Rubrik',
+			yes				: 'Ja',
+			no				: 'Nej',
+			invalidWidth	: 'Cellens bredd måste vara ett nummer.',
+			invalidHeight	: 'Cellens höjd måste vara ett nummer.',
+			invalidRowSpan	: 'Radutvidgning måste vara ett heltal.',
+			invalidColSpan	: 'Kolumn måste vara ett heltal.',
+			chooseColor		: 'Välj'
+		},
+
+		row :
+		{
+			menu			: 'Rad',
+			insertBefore	: 'Lägg till Rad Före',
+			insertAfter		: 'Lägg till rad efter',
+			deleteRow		: 'Radera rad'
+		},
+
+		column :
+		{
+			menu			: 'Kolumn',
+			insertBefore	: 'Lägg till kolumn före',
+			insertAfter		: 'Lägg till kolumn efter',
+			deleteColumn	: 'Radera kolumn'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Egenskaper för knapp',
+		text		: 'Text (värde)',
+		type		: 'Typ',
+		typeBtn		: 'Knapp',
+		typeSbm		: 'Skicka',
+		typeRst		: 'Återställ'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Egenskaper för kryssruta',
+		radioTitle	: 'Egenskaper för alternativknapp',
+		value		: 'Värde',
+		selected	: 'Vald'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Egenskaper för formulär',
+		menu		: 'Egenskaper för formulär',
+		action		: 'Funktion',
+		method		: 'Metod',
+		encoding	: 'Kodning'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Egenskaper för flervalslista',
+		selectInfo	: 'Information',
+		opAvail		: 'Befintliga val',
+		value		: 'Värde',
+		size		: 'Storlek',
+		lines		: 'Linjer',
+		chkMulti	: 'Tillåt flerval',
+		opText		: 'Text',
+		opValue		: 'Värde',
+		btnAdd		: 'Lägg till',
+		btnModify	: 'Redigera',
+		btnUp		: 'Upp',
+		btnDown		: 'Ner',
+		btnSetValue : 'Markera som valt värde',
+		btnDelete	: 'Radera'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Egenskaper för textruta',
+		cols		: 'Kolumner',
+		rows		: 'Rader'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Egenskaper för textfält',
+		name		: 'Namn',
+		value		: 'Värde',
+		charWidth	: 'Teckenbredd',
+		maxChars	: 'Max antal tecken',
+		type		: 'Typ',
+		typeText	: 'Text',
+		typePass	: 'Lösenord'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Egenskaper för dolt fält',
+		name	: 'Namn',
+		value	: 'Värde'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Bildegenskaper',
+		titleButton	: 'Egenskaper för bildknapp',
+		menu		: 'Bildegenskaper',
+		infoTab		: 'Bildinformation',
+		btnUpload	: 'Skicka till server',
+		upload		: 'Ladda upp',
+		alt			: 'Alternativ text',
+		lockRatio	: 'Lås höjd/bredd förhållanden',
+		resetSize	: 'Återställ storlek',
+		border		: 'Kant',
+		hSpace		: 'Horis. marginal',
+		vSpace		: 'Vert. marginal',
+		alertUrl	: 'Var god och ange bildens URL',
+		linkTab		: 'Länk',
+		button2Img	: 'Vill du omvandla den valda bildknappen på en enkel bild?',
+		img2Button	: 'Vill du omvandla den valda bildknappen på en enkel bild?',
+		urlMissing	: 'Bildkällans URL saknas.',
+		validateBorder	: 'Kantlinje måste vara ett heltal.',
+		validateHSpace	: 'HSpace måste vara ett heltal.',
+		validateVSpace	: 'VSpace måste vara ett heltal.'
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Flashegenskaper',
+		propertiesTab	: 'Egenskaper',
+		title			: 'Flashegenskaper',
+		chkPlay			: 'Automatisk uppspelning',
+		chkLoop			: 'Upprepa/Loopa',
+		chkMenu			: 'Aktivera Flashmeny',
+		chkFull			: 'Tillåt helskärm',
+ 		scale			: 'Skala',
+		scaleAll		: 'Visa allt',
+		scaleNoBorder	: 'Ingen ram',
+		scaleFit		: 'Exakt passning',
+		access			: 'Script-tillgång',
+		accessAlways	: 'Alltid',
+		accessSameDomain: 'Samma domän',
+		accessNever		: 'Aldrig',
+		alignAbsBottom	: 'Absolut nederkant',
+		alignAbsMiddle	: 'Absolut centrering',
+		alignBaseline	: 'Baslinje',
+		alignTextTop	: 'Text överkant',
+		quality			: 'Kvalitet',
+		qualityBest		: 'Bäst',
+		qualityHigh		: 'Hög',
+		qualityAutoHigh	: 'Auto Hög',
+		qualityMedium	: 'Medium',
+		qualityAutoLow	: 'Auto Låg',
+		qualityLow		: 'Låg',
+		windowModeWindow: 'Fönster',
+		windowModeOpaque: 'Opaque',
+		windowModeTransparent : 'Transparent',
+		windowMode		: 'Fönsterläge',
+		flashvars		: 'Variabler för Flash',
+		bgcolor			: 'Bakgrundsfärg',
+		hSpace			: 'Horis. marginal',
+		vSpace			: 'Vert. marginal',
+		validateSrc		: 'Var god ange länkens URL',
+		validateHSpace	: 'HSpace måste vara ett nummer.',
+		validateVSpace	: 'VSpace måste vara ett nummer.'
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Stavningskontroll',
+		title			: 'Kontrollera stavning',
+		notAvailable	: 'Tyvärr är tjänsten ej tillgänglig nu',
+		errorLoading	: 'Tjänsten är ej tillgänglig: %s.',
+		notInDic		: 'Saknas i ordlistan',
+		changeTo		: 'Ändra till',
+		btnIgnore		: 'Ignorera',
+		btnIgnoreAll	: 'Ignorera alla',
+		btnReplace		: 'Ersätt',
+		btnReplaceAll	: 'Ersätt alla',
+		btnUndo			: 'Ångra',
+		noSuggestions	: '- Förslag saknas -',
+		progress		: 'Stavningskontroll pågår...',
+		noMispell		: 'Stavningskontroll slutförd: Inga stavfel påträffades.',
+		noChanges		: 'Stavningskontroll slutförd: Inga ord rättades.',
+		oneChange		: 'Stavningskontroll slutförd: Ett ord rättades.',
+		manyChanges		: 'Stavningskontroll slutförd: %1 ord rättades.',
+		ieSpellDownload	: 'Stavningskontrollen är ej installerad. Vill du göra det nu?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Smiley',
+		title	: 'Infoga smiley',
+		options : 'Smileyinställningar'
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elementets sökväg',
+		eleTitle : '%1 element'
+	},
+
+	numberedlist	: 'Numrerad lista',
+	bulletedlist	: 'Punktlista',
+	indent			: 'Öka indrag',
+	outdent			: 'Minska indrag',
+
+	justify :
+	{
+		left	: 'Vänsterjustera',
+		center	: 'Centrera',
+		right	: 'Högerjustera',
+		block	: 'Justera till marginaler'
+	},
+
+	blockquote : 'Blockcitat',
+
+	clipboard :
+	{
+		title		: 'Klistra in',
+		cutError	: 'Säkerhetsinställningar i Er webläsare tillåter inte åtgården Klipp ut. Använd (Ctrl/Cmd+X) istället.',
+		copyError	: 'Säkerhetsinställningar i Er webläsare tillåter inte åtgården Kopiera. Använd (Ctrl/Cmd+C) istället',
+		pasteMsg	: 'Var god och klistra in Er text i rutan nedan genom att använda (<STRONG>Ctrl/Cmd+V</STRONG>) klicka sen på <STRONG>OK</STRONG>.',
+		securityMsg	: 'På grund av din webbläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.',
+		pasteArea	: 'Paste Area'
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa innan du klistrar?',
+		toolbar			: 'Klistra in från Word',
+		title			: 'Klistra in från Word',
+		error			: 'Det var inte möjligt att städa upp den inklistrade data på grund av ett internt fel'
+	},
+
+	pasteText :
+	{
+		button	: 'Klistra in som vanlig text',
+		title	: 'Klistra in som vanlig text'
+	},
+
+	templates :
+	{
+		button			: 'Sidmallar',
+		title			: 'Sidmallar',
+		options : 'Inställningar för mall',
+		insertOption	: 'Ersätt aktuellt innehåll',
+		selectPromptMsg	: 'Var god välj en mall att använda med editorn<br>(allt nuvarande innehåll raderas):',
+		emptyListMsg	: '(Ingen mall är vald)'
+	},
+
+	showBlocks : 'Visa block',
+
+	stylesCombo :
+	{
+		label		: 'Anpassad stil',
+		panelTitle	: 'Formatmallar',
+		panelTitle1	: 'Blockstil',
+		panelTitle2	: 'Inbäddad stil',
+		panelTitle3	: 'Objektets stil'
+	},
+
+	format :
+	{
+		label		: 'Teckenformat',
+		panelTitle	: 'Teckenformat',
+
+		tag_p		: 'Normal',
+		tag_pre		: 'Formaterad',
+		tag_address	: 'Adress',
+		tag_h1		: 'Rubrik 1',
+		tag_h2		: 'Rubrik 2',
+		tag_h3		: 'Rubrik 3',
+		tag_h4		: 'Rubrik 4',
+		tag_h5		: 'Rubrik 5',
+		tag_h6		: 'Rubrik 6',
+		tag_div		: 'Normal (DIV)'
+	},
+
+	div :
+	{
+		title				: 'Skapa Div container',
+		toolbar				: 'Skapa Div container',
+		cssClassInputLabel	: 'Stilmallar',
+		styleSelectLabel	: 'Stil',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Språkkod',
+		inlineStyleInputLabel	: 'Inline Style',
+		advisoryTitleInputLabel	: 'Rådgivande titel',
+		langDirLabel		: 'Språkriktning',
+		langDirLTRLabel		: 'Vänster till Höger (LTR)',
+		langDirRTLLabel		: 'Höger till vänster (RTL)',
+		edit				: 'Redigera Div',
+		remove				: 'Ta bort Div'
+  	},
+
+	iframe :
+	{
+		title		: 'iFrame Egenskaper',
+		toolbar		: 'iFrame',
+		noUrl		: 'Skriv in URL för iFrame',
+		scrolling	: 'Aktivera rullningslister',
+		border		: 'Visa ramkant'
+	},
+
+	font :
+	{
+		label		: 'Typsnitt',
+		voiceLabel	: 'Typsnitt',
+		panelTitle	: 'Typsnitt'
+	},
+
+	fontSize :
+	{
+		label		: 'Storlek',
+		voiceLabel	: 'Teckenstorlek',
+		panelTitle	: 'Storlek'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Textfärg',
+		bgColorTitle	: 'Bakgrundsfärg',
+		panelTitle		: 'Färger',
+		auto			: 'Automatisk',
+		more			: 'Fler färger...'
+	},
+
+	colors :
+	{
+		'000' : 'Svart',
+		'800000' : 'Rödbrun',
+		'8B4513' : 'Mörkbrun',
+		'2F4F4F' : 'Skiffergrå',
+		'008080' : 'Kricka',
+		'000080' : 'Marinblå',
+		'4B0082' : 'Indigo',
+		'696969' : 'Mörkgrå',
+		'B22222' : 'Tegelsten',
+		'A52A2A' : 'Brun',
+		'DAA520' : 'Mörk guld',
+		'006400' : 'Mörkgrön',
+		'40E0D0' : 'Turkos',
+		'0000CD' : 'Medium blå',
+		'800080' : 'Lila',
+		'808080' : 'Grå',
+		'F00' : 'Röd',
+		'FF8C00' : 'Mörkorange',
+		'FFD700' : 'Guld',
+		'008000' : 'Grön',
+		'0FF' : 'Turkos',
+		'00F' : 'Blå',
+		'EE82EE' : 'Violett',
+		'A9A9A9' : 'Matt grå',
+		'FFA07A' : 'Laxrosa',
+		'FFA500' : 'Orange',
+		'FFFF00' : 'Gul',
+		'00FF00' : 'Lime',
+		'AFEEEE' : 'Ljusturkos',
+		'ADD8E6' : 'Ljusblå',
+		'DDA0DD' : 'Plommon',
+		'D3D3D3' : 'Ljusgrå',
+		'FFF0F5' : 'Ljus lavender',
+		'FAEBD7' : 'Antikvit',
+		'FFFFE0' : 'Ljusgul',
+		'F0FFF0' : 'Honung',
+		'F0FFFF' : 'Azurblå',
+		'F0F8FF' : 'Aliceblå',
+		'E6E6FA' : 'Lavender',
+		'FFF' : 'Vit'
+	},
+
+	scayt :
+	{
+		title			: 'Stavningskontroll medan du skriver',
+		opera_title		: 'Stöds ej av Opera',
+		enable			: 'Aktivera SCAYT',
+		disable			: 'Inaktivera SCAYT',
+		about			: 'Om SCAYT',
+		toggle			: 'Växla SCAYT',
+		options			: 'Inställningar',
+		langs			: 'Språk',
+		moreSuggestions	: 'Fler förslag',
+		ignore			: 'Ignorera',
+		ignoreAll		: 'Ignorera alla',
+		addWord			: 'Lägg till ord',
+		emptyDic		: 'Ordlistans namn får ej vara tomt.',
+
+		optionsTab		: 'Inställningar',
+		allCaps			: 'Ignorera alla ord med enbart versaler',
+		ignoreDomainNames : 'Ignorera domännamn',
+		mixedCase		: 'Ignorera ord med blandat shiftläge',
+		mixedWithDigits	: 'Ignorera ord med nummer',
+
+		languagesTab	: 'Språk',
+
+		dictionariesTab	: 'Ordlistor',
+		dic_field_name	: 'Ordlistans namn',
+		dic_create		: 'Skapa',
+		dic_restore		: 'Återställ',
+		dic_delete		: 'Ta bort',
+		dic_rename		: 'Byt namn',
+		dic_info		: 'Inledningsvis lagras ordlistan i en cookie. När ordlista växer till en punkt där det inte kan lagras i en cookie, lagras den på vår server. För att lagra din personliga ordlista på vår server du ska ange ett namn för din ordbok. Om du redan har en lagrad ordbok, skriv namnet och klicka på knappen Återställ.',
+
+		aboutTab		: 'Om'
+	},
+
+	about :
+	{
+		title		: 'Om CKEditor',
+		dlgTitle	: 'Om CKEditor',
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // MISSING
+		moreInfo	: 'För information av licenciering besök vår hemsida:',
+		copy		: 'Copyright &copy; $1. Alla rättigheter reserverade.'
+	},
+
+	maximize : 'Maximera',
+	minimize : 'Minimera',
+
+	fakeobjects :
+	{
+		anchor		: 'Ankare',
+		flash		: 'Flashanimation',
+		iframe		: 'iFrame',
+		hiddenfield	: 'Gömt fält',
+		unknown		: 'Okänt objekt'
+	},
+
+	resize : 'Dra för att ändra storlek',
+
+	colordialog :
+	{
+		title		: 'Välj färg',
+		options	:	'Färgalternativ',
+		highlight	: 'Markera',
+		selected	: 'Vald färg',
+		clear		: 'Rensa'
+	},
+
+	toolbarCollapse	: 'Dölj verktygsfält',
+	toolbarExpand	: 'Visa verktygsfält',
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text riktning från vänster till höger',
+		rtl : 'Text riktning från höger till vänster'
+	},
+
+	docprops :
+	{
+		label : 'Dokumentegenskaper',
+		title : 'Dokumentegenskaper',
+		design : 'Design', // MISSING
+		meta : 'Metadata',
+		chooseColor : 'Välj',
+		other : '<annan>',
+		docTitle :	'Sidtitel',
+		charset : 	'Teckenuppsättningar',
+		charsetOther : 'Övriga teckenuppsättningar',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Central Europa',
+		charsetCT : 'Traditionell Kinesisk (Big5)',
+		charsetCR : 'Kyrillisk',
+		charsetGR : 'Grekiska',
+		charsetJP : 'Japanska',
+		charsetKR : 'Koreanska',
+		charsetTR : 'Turkiska',
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Väst Europa',
+		docType : 'Sidhuvud',
+		docTypeOther : 'Övriga sidhuvuden',
+		xhtmlDec : 'Inkludera XHTML deklaration',
+		bgColor : 'Bakgrundsfärg',
+		bgImage : 'Bakgrundsbildens URL',
+		bgFixed : 'Fast bakgrund',
+		txtColor : 'Textfärg',
+		margin : 'Sidmarginal',
+		marginTop : 'Topp',
+		marginLeft : 'Vänster',
+		marginRight : 'Höger',
+		marginBottom : 'Botten',
+		metaKeywords : 'Sidans nyckelord',
+		metaDescription : 'Sidans beskrivning',
+		metaAuthor : 'Författare',
+		metaCopyright : 'Upphovsrätt',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 811 - 0
web/js/ckeditor/_source/lang/tr.js

@@ -0,0 +1,811 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+* @fileOverview
+*/
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['tr'] =
+{
+	/**
+	 * 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 : 'Zengin metin editörü, %1, yardım için ALT 0 tuşuna basın.',
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Zengin Metin Editörü',
+
+	// Toolbar buttons without dialogs.
+	source			: 'Kaynak',
+	newPage			: 'Yeni Sayfa',
+	save			: 'Kaydet',
+	preview			: 'Ön İzleme',
+	cut				: 'Kes',
+	copy			: 'Kopyala',
+	paste			: 'Yapıştır',
+	print			: 'Yazdır',
+	underline		: 'Altı Çizgili',
+	bold			: 'Kalın',
+	italic			: 'İtalik',
+	selectAll		: 'Tümünü Seç',
+	removeFormat	: 'Biçimi Kaldır',
+	strike			: 'Üstü Çizgili',
+	subscript		: 'Alt Simge',
+	superscript		: 'Üst Simge',
+	horizontalrule	: 'Yatay Satır Ekle',
+	pagebreak		: 'Sayfa Sonu Ekle',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'Köprü Kaldır',
+	undo			: 'Geri Al',
+	redo			: 'Tekrarla',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Sunucuyu Gez',
+		url				: 'URL',
+		protocol		: 'Protokol',
+		upload			: 'Karşıya Yükle',
+		uploadSubmit	: 'Sunucuya Yolla',
+		image			: 'Resim',
+		flash			: 'Flash',
+		form			: 'Form',
+		checkbox		: 'Onay Kutusu',
+		radio			: 'Seçenek Düğmesi',
+		textField		: 'Metin Girişi',
+		textarea		: 'Çok Satırlı Metin',
+		hiddenField		: 'Gizli Veri',
+		button			: 'Düğme',
+		select			: 'Seçim Menüsü',
+		imageButton		: 'Resimli Düğme',
+		notSet			: '<tanımlanmamış>',
+		id				: 'Kimlik',
+		name			: 'Ad',
+		langDir			: 'Dil Yönü',
+		langDirLtr		: 'Soldan Sağa (LTR)',
+		langDirRtl		: 'Sağdan Sola (RTL)',
+		langCode		: 'Dil Kodlaması',
+		longDescr		: 'Uzun Tanımlı URL',
+		cssClass		: 'Biçem Sayfası Sınıfları',
+		advisoryTitle	: 'Danışma Başlığı',
+		cssStyle		: 'Biçem',
+		ok				: 'Tamam',
+		cancel			: 'İptal',
+		close			: 'Kapat',
+		preview			: 'Ön gösterim',
+		generalTab		: 'Genel',
+		advancedTab		: 'Gelişmiş',
+		validateNumberFailed : 'Bu değer sayı değildir.',
+		confirmNewPage	: 'İceriğiniz kayıt edilmediğinden dolayı kaybolacaktır. Yeni bir sayfa yüklemek istediğinize eminsiniz?',
+		confirmCancel	: 'Bazı seçenekler değişmiştir. Dialog penceresini kapatmak istediğinize eminmisiniz?',
+		options			: 'Seçenekler',
+		target			: 'Hedef',
+		targetNew		: 'Yeni Pencere (_blank)',
+		targetTop		: 'Enüst Pencere (_top)',
+		targetSelf		: 'Aynı Pencere (_self)',
+		targetParent	: 'Ana Pencere (_parent)',
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Genişlik',
+		height			: 'Yükseklik',
+		align			: 'Hizalama',
+		alignLeft		: 'Sol',
+		alignRight		: 'Sağ',
+		alignCenter		: 'Merkez',
+		alignTop		: 'Tepe',
+		alignMiddle		: 'Orta',
+		alignBottom		: 'Alt',
+		invalidHeight	: 'Yükseklik sayı olmalıdır.',
+		invalidWidth	: 'Genişlik bir sayı olmalıdır.',
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, hazır değildir</span>'
+	},
+
+	contextmenu :
+	{
+		options : 'İçerik Menüsü Seçenekleri'
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Özel Karakter Ekle',
+		title		: 'Özel Karakter Seç',
+		options : 'Özel Karakter Seçenekleri'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Link Ekle/Düzenle',
+		other 		: '<diğer>',
+		menu		: 'Link Düzenle',
+		title		: 'Link',
+		info		: 'Link Bilgisi',
+		target		: 'Hedef',
+		upload		: 'Karşıya Yükle',
+		advanced	: 'Gelişmiş',
+		type		: 'Link Türü',
+		toUrl		: 'URL',
+		toAnchor	: 'Bu sayfada çapa',
+		toEmail		: 'E-Posta',
+		targetFrame		: '<çerçeve>',
+		targetPopup		: '<yeni açılan pencere>',
+		targetFrameName	: 'Hedef Çerçeve Adı',
+		targetPopupName	: 'Yeni Açılan Pencere Adı',
+		popupFeatures	: 'Yeni Açılan Pencere Özellikleri',
+		popupResizable	: 'Resizable',
+		popupStatusBar	: 'Durum Çubuğu',
+		popupLocationBar: 'Yer Çubuğu',
+		popupToolbar	: 'Araç Çubuğu',
+		popupMenuBar	: 'Menü Çubuğu',
+		popupFullScreen	: 'Tam Ekran (IE)',
+		popupScrollBars	: 'Kaydırma Çubukları',
+		popupDependent	: 'Bağımlı (Netscape)',
+		popupLeft		: 'Sola Göre Konum',
+		popupTop		: 'Yukarıya Göre Konum',
+		id				: 'Id',
+		langDir			: 'Dil Yönü',
+		langDirLTR		: 'Soldan Sağa (LTR)',
+		langDirRTL		: 'Sağdan Sola (RTL)',
+		acccessKey		: 'Erişim Tuşu',
+		name			: 'Ad',
+		langCode			: 'Dil Yönü',
+		tabIndex			: 'Sekme İndeksi',
+		advisoryTitle		: 'Danışma Başlığı',
+		advisoryContentType	: 'Danışma İçerik Türü',
+		cssClasses		: 'Biçem Sayfası Sınıfları',
+		charset			: 'Bağlı Kaynak Karakter Gurubu',
+		styles			: 'Biçem',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Bağlantı Seç',
+		anchorName		: 'Bağlantı Adı ile',
+		anchorId			: 'Eleman Kimlik Numarası ile',
+		emailAddress		: 'E-Posta Adresi',
+		emailSubject		: 'İleti Konusu',
+		emailBody		: 'İleti Gövdesi',
+		noAnchors		: '(Bu belgede hiç çapa yok)',
+		noUrl			: 'Lütfen Link URL\'sini yazın',
+		noEmail			: 'Lütfen E-posta adresini yazın'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Bağlantı Ekle/Düzenle',
+		menu		: 'Bağlantı Özellikleri',
+		title		: 'Bağlantı Özellikleri',
+		name		: 'Bağlantı Adı',
+		errorName	: 'Lütfen bağlantı için ad giriniz',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Sayılandırılmış Liste Özellikleri',
+		bulletedTitle		: 'Simgeli Liste Özellikleri',
+		type				: 'Tipi',
+		start				: 'Başla',
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Daire',
+		disc				: 'Disk',
+		square				: 'Kare',
+		none				: 'Yok',
+		notset				: '<ayarlanmamış>',
+		armenian			: 'Ermenice sayılandırma',
+		georgian			: 'Gürcüce numaralandırma (an, ban, gan, vs.)',
+		lowerRoman			: 'Küçük Roman (i, ii, iii, iv, v, vs.)',
+		upperRoman			: 'Büyük Roman (I, II, III, IV, V, vs.)',
+		lowerAlpha			: 'Küçük Alpha (a, b, c, d, e, vs.)',
+		upperAlpha			: 'Büyük Alpha (A, B, C, D, E, vs.)',
+		lowerGreek			: 'Küçük Greek (alpha, beta, gamma, vs.)',
+		decimal				: 'Ondalık (1, 2, 3, vs.)',
+		decimalLeadingZero	: 'Başı sıfırlı ondalık (01, 02, 03, vs.)'
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Bul ve Değiştir',
+		find				: 'Bul',
+		replace				: 'Değiştir',
+		findWhat			: 'Aranan:',
+		replaceWith			: 'Bununla değiştir:',
+		notFoundMsg			: 'Belirtilen yazı bulunamadı.',
+		matchCase			: 'Büyük/küçük harf duyarlı',
+		matchWord			: 'Kelimenin tamamı uysun',
+		matchCyclic			: 'Eşleşen döngü',
+		replaceAll			: 'Tümünü Değiştir',
+		replaceSuccessMsg	: '%1 bulunanlardan değiştirildi.'
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Tablo',
+		title		: 'Tablo Özellikleri',
+		menu		: 'Tablo Özellikleri',
+		deleteTable	: 'Tabloyu Sil',
+		rows		: 'Satırlar',
+		columns		: 'Sütunlar',
+		border		: 'Kenar Kalınlığı',
+		widthPx		: 'piksel',
+		widthPc		: 'yüzde',
+		widthUnit	: 'genişlik birimi',
+		cellSpace	: 'Izgara kalınlığı',
+		cellPad		: 'Izgara yazı arası',
+		caption		: 'Başlık',
+		summary		: 'Özet',
+		headers		: 'Başlıklar',
+		headersNone		: 'Yok',
+		headersColumn	: 'İlk Sütun',
+		headersRow		: 'İlk Satır',
+		headersBoth		: 'Her İkisi',
+		invalidRows		: 'Satır sayısı 0 sayısından büyük olmalıdır.',
+		invalidCols		: 'Sütün sayısı 0 sayısından büyük olmalıdır.',
+		invalidBorder	: 'Çerceve büyüklüklüğü sayı olmalıdır.',
+		invalidWidth	: 'Tablo genişliği sayı olmalıdır.',
+		invalidHeight	: 'Tablo yüksekliği sayı olmalıdır.',
+		invalidCellSpacing	: 'Hücre boşluğu (spacing) sayı olmalıdır.',
+		invalidCellPadding	: 'Hücre aralığı (padding) sayı olmalıdır.',
+
+		cell :
+		{
+			menu			: 'Hücre',
+			insertBefore	: 'Hücre Ekle - Önce',
+			insertAfter		: 'Hücre Ekle - Sonra',
+			deleteCell		: 'Hücre Sil',
+			merge			: 'Hücreleri Birleştir',
+			mergeRight		: 'Birleştir - Sağdaki İle ',
+			mergeDown		: 'Birleştir - Aşağıdaki İle ',
+			splitHorizontal	: 'Hücreyi Yatay Böl',
+			splitVertical	: 'Hücreyi Dikey Böl',
+			title			: 'Hücre Özellikleri',
+			cellType		: 'Hücre Tipi',
+			rowSpan			: 'Satırlar Mesafesi (Span)',
+			colSpan			: 'Sütünlar Mesafesi (Span)',
+			wordWrap		: 'Kelime Kaydırma',
+			hAlign			: 'Düşey Hizalama',
+			vAlign			: 'Yataş Hizalama',
+			alignBaseline	: 'Tabana',
+			bgColor			: 'Arkaplan Rengi',
+			borderColor		: 'Çerçeve Rengi',
+			data			: 'Veri',
+			header			: 'Başlık',
+			yes				: 'Evet',
+			no				: 'Hayır',
+			invalidWidth	: 'Hücre genişliği sayı olmalıdır.',
+			invalidHeight	: 'Hücre yüksekliği sayı olmalıdır.',
+			invalidRowSpan	: 'Satırların mesafesi tam sayı olmalıdır.',
+			invalidColSpan	: 'Sütünların mesafesi tam sayı olmalıdır.',
+			chooseColor		: 'Seçiniz'
+		},
+
+		row :
+		{
+			menu			: 'Satır',
+			insertBefore	: 'Satır Ekle - Önce',
+			insertAfter		: 'Satır Ekle - Sonra',
+			deleteRow		: 'Satır Sil'
+		},
+
+		column :
+		{
+			menu			: 'Sütun',
+			insertBefore	: 'Kolon Ekle - Önce',
+			insertAfter		: 'Kolon Ekle - Sonra',
+			deleteColumn	: 'Sütun Sil'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Düğme Özellikleri',
+		text		: 'Metin (Değer)',
+		type		: 'Tip',
+		typeBtn		: 'Düğme',
+		typeSbm		: 'Gönder',
+		typeRst		: 'Sıfırla'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Onay Kutusu Özellikleri',
+		radioTitle	: 'Seçenek Düğmesi Özellikleri',
+		value		: 'Değer',
+		selected	: 'Seçili'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Form Özellikleri',
+		menu		: 'Form Özellikleri',
+		action		: 'İşlem',
+		method		: 'Yöntem',
+		encoding	: 'Kodlama'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Seçim Menüsü Özellikleri',
+		selectInfo	: 'Bilgi',
+		opAvail		: 'Mevcut Seçenekler',
+		value		: 'Değer',
+		size		: 'Boyut',
+		lines		: 'satır',
+		chkMulti	: 'Çoklu seçime izin ver',
+		opText		: 'Metin',
+		opValue		: 'Değer',
+		btnAdd		: 'Ekle',
+		btnModify	: 'Düzenle',
+		btnUp		: 'Yukarı',
+		btnDown		: 'Aşağı',
+		btnSetValue : 'Seçili değer olarak ata',
+		btnDelete	: 'Sil'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Çok Satırlı Metin Özellikleri',
+		cols		: 'Sütunlar',
+		rows		: 'Satırlar'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Metin Girişi Özellikleri',
+		name		: 'Ad',
+		value		: 'Değer',
+		charWidth	: 'Karakter Genişliği',
+		maxChars	: 'En Fazla Karakter',
+		type		: 'Tür',
+		typeText	: 'Metin',
+		typePass	: 'Şifre'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Gizli Veri Özellikleri',
+		name	: 'Ad',
+		value	: 'Değer'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Resim Özellikleri',
+		titleButton	: 'Resimli Düğme Özellikleri',
+		menu		: 'Resim Özellikleri',
+		infoTab		: 'Resim Bilgisi',
+		btnUpload	: 'Sunucuya Yolla',
+		upload		: 'Karşıya Yükle',
+		alt			: 'Alternatif Yazı',
+		lockRatio	: 'Oranı Kilitle',
+		resetSize	: 'Boyutu Başa Döndür',
+		border		: 'Kenar',
+		hSpace		: 'Yatay Boşluk',
+		vSpace		: 'Dikey Boşluk',
+		alertUrl	: 'Lütfen resmin URL\'sini yazınız',
+		linkTab		: 'Köprü',
+		button2Img	: 'Seçili resim butonunu basit resime çevirmek istermisiniz?',
+		img2Button	: 'Seçili olan resimi, resimli butona çevirmek istermisiniz?',
+		urlMissing	: 'Resmin URL kaynağı eksiktir.',
+		validateBorder	: 'Çerçeve tam sayı olmalıdır.',
+		validateHSpace	: 'HSpace tam sayı olmalıdır.',
+		validateVSpace	: 'VSpace tam sayı olmalıdır.'
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Flash Özellikleri',
+		propertiesTab	: 'Özellikler',
+		title			: 'Flash Özellikleri',
+		chkPlay			: 'Otomatik Oynat',
+		chkLoop			: 'Döngü',
+		chkMenu			: 'Flash Menüsünü Kullan',
+		chkFull			: 'Tam ekrana İzinver',
+ 		scale			: 'Boyutlandır',
+		scaleAll		: 'Hepsini Göster',
+		scaleNoBorder	: 'Kenar Yok',
+		scaleFit		: 'Tam Sığdır',
+		access			: 'Kod İzni',
+		accessAlways	: 'Herzaman',
+		accessSameDomain: 'Aynı domain',
+		accessNever		: 'Asla',
+		alignAbsBottom	: 'Tam Altı',
+		alignAbsMiddle	: 'Tam Ortası',
+		alignBaseline	: 'Taban Çizgisi',
+		alignTextTop	: 'Yazı Tepeye',
+		quality			: 'Kalite',
+		qualityBest		: 'En iyi',
+		qualityHigh		: 'Yüksek',
+		qualityAutoHigh	: 'Otomatik Yükseklik',
+		qualityMedium	: 'Orta',
+		qualityAutoLow	: 'Otomatik Düşüklük',
+		qualityLow		: 'Düşük',
+		windowModeWindow: 'Pencere',
+		windowModeOpaque: 'Opak',
+		windowModeTransparent : 'Şeffaf',
+		windowMode		: 'Pencere modu',
+		flashvars		: 'Flash Değerleri',
+		bgcolor			: 'Arka Renk',
+		hSpace			: 'Yatay Boşluk',
+		vSpace			: 'Dikey Boşluk',
+		validateSrc		: 'Lütfen köprü URL\'sini yazın',
+		validateHSpace	: 'HSpace sayı olmalıdır.',
+		validateVSpace	: 'VSpace sayı olmalıdır.'
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Yazım Denetimi',
+		title			: 'Yazımı Denetle',
+		notAvailable	: 'Üzügünüz, bu servis şuanda hizmet dışıdır.',
+		errorLoading	: 'Uygulamada yüklerken hata oluştu: %s.',
+		notInDic		: 'Sözlükte Yok',
+		changeTo		: 'Şuna değiştir:',
+		btnIgnore		: 'Yoksay',
+		btnIgnoreAll	: 'Tümünü Yoksay',
+		btnReplace		: 'Değiştir',
+		btnReplaceAll	: 'Tümünü Değiştir',
+		btnUndo			: 'Geri Al',
+		noSuggestions	: '- Öneri Yok -',
+		progress		: 'Yazım denetimi işlemde...',
+		noMispell		: 'Yazım denetimi tamamlandı: Yanlış yazıma rastlanmadı',
+		noChanges		: 'Yazım denetimi tamamlandı: Hiçbir kelime değiştirilmedi',
+		oneChange		: 'Yazım denetimi tamamlandı: Bir kelime değiştirildi',
+		manyChanges		: 'Yazım denetimi tamamlandı: %1 kelime değiştirildi',
+		ieSpellDownload	: 'Yazım denetimi yüklenmemiş. Şimdi yüklemek ister misiniz?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'İfade',
+		title	: 'İfade Ekle',
+		options : 'İfade Seçenekleri'
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Elementlerin yolu',
+		eleTitle : '%1 element'
+	},
+
+	numberedlist	: 'Numaralı Liste',
+	bulletedlist	: 'Simgeli Liste',
+	indent			: 'Sekme Arttır',
+	outdent			: 'Sekme Azalt',
+
+	justify :
+	{
+		left	: 'Sola Dayalı',
+		center	: 'Ortalanmış',
+		right	: 'Sağa Dayalı',
+		block	: 'İki Kenara Yaslanmış'
+	},
+
+	blockquote : 'Blok Oluştur',
+
+	clipboard :
+	{
+		title		: 'Yapıştır',
+		cutError	: 'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme işlemine izin vermiyor. İşlem için (Ctrl/Cmd+X) tuşlarını kullanın.',
+		copyError	: 'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama işlemine izin vermiyor. İşlem için (Ctrl/Cmd+C) tuşlarını kullanın.',
+		pasteMsg	: 'Lütfen aşağıdaki kutunun içine yapıştırın. (<STRONG>Ctrl/Cmd+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.',
+		securityMsg	: 'Gezgin yazılımınızın güvenlik ayarları düzenleyicinin direkt olarak panoya erişimine izin vermiyor. Bu pencere içine tekrar yapıştırmalısınız..',
+		pasteArea	: 'Paste Area'
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'Yapıştırmaya çalıştığınız metin Word\'den kopyalanmıştır. Yapıştırmadan önce silmek istermisiniz?',
+		toolbar			: 'Word\'den Yapıştır',
+		title			: 'Word\'den Yapıştır',
+		error			: 'Yapıştırmadaki veri bilgisi hata düzelene kadar silinmeyecektir'
+	},
+
+	pasteText :
+	{
+		button	: 'Düz Metin Olarak Yapıştır',
+		title	: 'Düz Metin Olarak Yapıştır'
+	},
+
+	templates :
+	{
+		button			: 'Şablonlar',
+		title			: 'İçerik Şablonları',
+		options : 'Şablon Seçenekleri',
+		insertOption	: 'Mevcut içerik ile değiştir',
+		selectPromptMsg	: 'Düzenleyicide açmak için lütfen bir şablon seçin.<br>(hali hazırdaki içerik kaybolacaktır.):',
+		emptyListMsg	: '(Belirli bir şablon seçilmedi)'
+	},
+
+	showBlocks : 'Blokları Göster',
+
+	stylesCombo :
+	{
+		label		: 'Biçem',
+		panelTitle	: 'Stilleri Düzenliyor',
+		panelTitle1	: 'Blok Stilleri',
+		panelTitle2	: 'Inline Stilleri',
+		panelTitle3	: 'Nesne Stilleri'
+	},
+
+	format :
+	{
+		label		: 'Biçim',
+		panelTitle	: 'Biçim',
+
+		tag_p		: 'Normal',
+		tag_pre		: 'Biçimli',
+		tag_address	: 'Adres',
+		tag_h1		: 'Başlık 1',
+		tag_h2		: 'Başlık 2',
+		tag_h3		: 'Başlık 3',
+		tag_h4		: 'Başlık 4',
+		tag_h5		: 'Başlık 5',
+		tag_h6		: 'Başlık 6',
+		tag_div		: 'Paragraf (DIV)'
+	},
+
+	div :
+	{
+		title				: 'Div İçeriği Oluştur',
+		toolbar				: 'Div İçeriği Oluştur',
+		cssClassInputLabel	: 'Stilltipi Sınıfı',
+		styleSelectLabel	: 'Stil',
+		IdInputLabel		: 'Id',
+		languageCodeInputLabel	: ' Dil Kodu',
+		inlineStyleInputLabel	: 'Inline Stili',
+		advisoryTitleInputLabel	: 'Tavsiye Başlığı',
+		langDirLabel		: 'Dil Yönü',
+		langDirLTRLabel		: 'Soldan sağa (LTR)',
+		langDirRTLLabel		: 'Sağdan sola (RTL)',
+		edit				: 'Div Düzenle',
+		remove				: 'Div Kaldır'
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Yazı Türü',
+		voiceLabel	: 'Font',
+		panelTitle	: 'Yazı Türü'
+	},
+
+	fontSize :
+	{
+		label		: 'Boyut',
+		voiceLabel	: 'Font Size',
+		panelTitle	: 'Boyut'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Yazı Rengi',
+		bgColorTitle	: 'Arka Renk',
+		panelTitle		: 'Renkler',
+		auto			: 'Otomatik',
+		more			: 'Diğer renkler...'
+	},
+
+	colors :
+	{
+		'000' : 'Siyah',
+		'800000' : 'Kestane',
+		'8B4513' : 'Koyu Kahverengi',
+		'2F4F4F' : 'Koyu Kurşuni Gri',
+		'008080' : 'Teal',
+		'000080' : 'Mavi',
+		'4B0082' : 'Çivit Mavisi',
+		'696969' : 'Silik Gri',
+		'B22222' : 'Ateş Tuğlası',
+		'A52A2A' : 'Kahverengi',
+		'DAA520' : 'Altun Sırık',
+		'006400' : 'Koyu Yeşil',
+		'40E0D0' : 'Turkuaz',
+		'0000CD' : 'Orta Mavi',
+		'800080' : 'Pembe',
+		'808080' : 'Gri',
+		'F00' : 'Kırmızı',
+		'FF8C00' : 'Koyu Portakal',
+		'FFD700' : 'Altın',
+		'008000' : 'Yeşil',
+		'0FF' : 'Ciyan',
+		'00F' : 'Mavi',
+		'EE82EE' : 'Menekşe',
+		'A9A9A9' : 'Koyu Gri',
+		'FFA07A' : 'Açık Sarımsı',
+		'FFA500' : 'Portakal',
+		'FFFF00' : 'Sarı',
+		'00FF00' : 'Açık Yeşil',
+		'AFEEEE' : 'Sönük Turkuaz',
+		'ADD8E6' : 'Açık Mavi',
+		'DDA0DD' : 'Mor',
+		'D3D3D3' : 'Açık Gri',
+		'FFF0F5' : 'Eflatun Pembe',
+		'FAEBD7' : 'Antik Beyaz',
+		'FFFFE0' : 'Açık Sarı',
+		'F0FFF0' : 'Balsarısı',
+		'F0FFFF' : 'Gök Mavisi',
+		'F0F8FF' : 'Reha Mavi',
+		'E6E6FA' : 'Eflatun',
+		'FFF' : 'Beyaz'
+	},
+
+	scayt :
+	{
+		title			: 'Girmiş olduğunuz kelime denetimi',
+		opera_title		: 'Opera tarafından desteklenmemektedir',
+		enable			: 'SCAYT etkinleştir',
+		disable			: 'SCAYT pasifleştir',
+		about			: 'SCAYT hakkında',
+		toggle			: 'SCAYT değiştir',
+		options			: 'Seçenekler',
+		langs			: 'Diller',
+		moreSuggestions	: 'Daha fazla öneri',
+		ignore			: 'Yoksay',
+		ignoreAll		: 'Tümünü Yoksay',
+		addWord			: 'Kelime Ekle',
+		emptyDic		: 'Sözlük adı boş olamaz.',
+
+		optionsTab		: 'Seçenekler',
+		allCaps			: 'Tüm büyük küçük kelimeleri yoksay',
+		ignoreDomainNames : 'Domain adlarını yoksay',
+		mixedCase		: 'Karışık büyüklük ile Sözcükler yoksay',
+		mixedWithDigits	: 'Sayılarla Kelimeler yoksay',
+
+		languagesTab	: 'Diller',
+
+		dictionariesTab	: 'Sözlükler',
+		dic_field_name	: 'Sözlük adı',
+		dic_create		: 'Oluştur',
+		dic_restore		: 'Geri al',
+		dic_delete		: 'Sil',
+		dic_rename		: 'Yeniden adlandır',
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type it\'s name and click the Restore button.',
+
+		aboutTab		: 'Hakkında'
+	},
+
+	about :
+	{
+		title		: 'CKEditor Hakkında',
+		dlgTitle	: 'CKEditor Hakkında',
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // MISSING
+		moreInfo	: 'Lisanslama hakkında daha fazla bilgi almak için lütfen sitemizi ziyaret edin:',
+		copy		: 'Copyright &copy; $1. Tüm hakları saklıdır.'
+	},
+
+	maximize : 'Büyült',
+	minimize : 'Küçült',
+
+	fakeobjects :
+	{
+		anchor		: 'Bağlantı',
+		flash		: 'Flash Animasyonu',
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Bilinmeyen Nesne'
+	},
+
+	resize : 'Boyutlandırmak için sürükle',
+
+	colordialog :
+	{
+		title		: 'Renk seç',
+		options	:	'Renk Seçenekleri',
+		highlight	: 'İşaretle',
+		selected	: 'Seçilmiş',
+		clear		: 'Temizle'
+	},
+
+	toolbarCollapse	: 'Toolbar\'ı topla',
+	toolbarExpand	: 'Toolbar\'ı aç',
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Belge Özellikleri',
+		title : 'Belge Özellikleri',
+		design : 'Design', // MISSING
+		meta : 'Tanım Bilgisi (Meta)',
+		chooseColor : 'Seçiniz',
+		other : '<diğer>',
+		docTitle :	'Sayfa Başlığı',
+		charset : 	'Karakter Kümesi Kodlaması',
+		charsetOther : 'Diğer Karakter Kümesi Kodlaması',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Orta Avrupa',
+		charsetCT : 'Geleneksel Çince (Big5)',
+		charsetCR : 'Kiril',
+		charsetGR : 'Yunanca',
+		charsetJP : 'Japonca',
+		charsetKR : 'Korece',
+		charsetTR : 'Türkçe',
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Batı Avrupa',
+		docType : 'Belge Türü Başlığı',
+		docTypeOther : 'Diğer Belge Türü Başlığı',
+		xhtmlDec : 'XHTML Bildirimlerini Dahil Et',
+		bgColor : 'Arka Plan Rengi',
+		bgImage : 'Arka Plan Resim URLsi',
+		bgFixed : 'Sabit Arka Plan',
+		txtColor : 'Yazı Rengi',
+		margin : 'Kenar Boşlukları',
+		marginTop : 'Tepe',
+		marginLeft : 'Sol',
+		marginRight : 'Sağ',
+		marginBottom : 'Alt',
+		metaKeywords : 'Belge Dizinleme Anahtar Kelimeleri (virgülle ayrılmış)',
+		metaDescription : 'Belge Tanımı',
+		metaAuthor : 'Yazar',
+		metaCopyright : 'Telif',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 812 - 0
web/js/ckeditor/_source/lang/vi.js

@@ -0,0 +1,812 @@
+/*
+Copyright (c) 2003-2011, 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
+ * Vietnamese language.
+ */
+
+/**#@+
+   @type String
+   @example
+*/
+
+/**
+ * Constains the dictionary of language entries.
+ * @namespace
+ */
+CKEDITOR.lang['vi'] =
+{
+	/**
+	 * 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 : 'Bộ soạn thảo, %1, nhấn ALT + 0 để xem hướng dẫn.',
+
+	// ARIA descriptions.
+	toolbars	: 'Editor toolbars', // MISSING
+	editor		: 'Bộ soạn thảo',
+
+	// Toolbar buttons without dialogs.
+	source			: 'Mã HTML',
+	newPage			: 'Trang mới',
+	save			: 'Lưu',
+	preview			: 'Xem trước',
+	cut				: 'Cắt',
+	copy			: 'Sao chép',
+	paste			: 'Dán',
+	print			: 'In',
+	underline		: 'Gạch chân',
+	bold			: 'Đậm',
+	italic			: 'Nghiêng',
+	selectAll		: 'Chọn tất cả',
+	removeFormat	: 'Xoá định dạng',
+	strike			: 'Gạch xuyên ngang',
+	subscript		: 'Chỉ số dưới',
+	superscript		: 'Chỉ số trên',
+	horizontalrule	: 'Chèn đường phân cách ngang',
+	pagebreak		: 'Chèn ngắt trang',
+	pagebreakAlt		: 'Page Break', // MISSING
+	unlink			: 'Xoá liên kết',
+	undo			: 'Khôi phục thao tác',
+	redo			: 'Làm lại thao tác',
+
+	// Common messages and labels.
+	common :
+	{
+		browseServer	: 'Duyệt trên máy chủ',
+		url				: 'URL',
+		protocol		: 'Giao thức',
+		upload			: 'Tải lên',
+		uploadSubmit	: 'Tải lên máy chủ',
+		image			: 'Hình ảnh',
+		flash			: 'Flash',
+		form			: 'Biểu mẫu',
+		checkbox		: 'Nút kiểm',
+		radio			: 'Nút chọn',
+		textField		: 'Trường văn bản',
+		textarea		: 'Vùng văn bản',
+		hiddenField		: 'Trường ẩn',
+		button			: 'Nút',
+		select			: 'Ô chọn',
+		imageButton		: 'Nút hình ảnh',
+		notSet			: '<không thiết lập>',
+		id				: 'Định danh',
+		name			: 'Tên',
+		langDir			: 'Hướng ngôn ngữ',
+		langDirLtr		: 'Trái sang phải (LTR)',
+		langDirRtl		: 'Phải sang trái (RTL)',
+		langCode		: 'Mã ngôn ngữ',
+		longDescr		: 'Mô tả URL',
+		cssClass		: 'Lớp Stylesheet',
+		advisoryTitle	: 'Nhan đề hướng dẫn',
+		cssStyle		: 'Kiểu (style)',
+		ok				: 'Đồng ý',
+		cancel			: 'Bỏ qua',
+		close			: 'Đóng',
+		preview			: 'Xem trước',
+		generalTab		: 'Tab chung',
+		advancedTab		: 'Tab mở rộng',
+		validateNumberFailed : 'Giá trị này không phải là số.',
+		confirmNewPage	: 'Mọi thay đổi không được lưu lại, nội dung này sẽ bị mất. Bạn có chắc chắn muốn tải một trang mới?',
+		confirmCancel	: 'Một vài tùy chọn đã bị thay đổi. Bạn có chắc chắn muốn đóng hộp thoại?',
+		options			: 'Tùy chọn',
+		target			: 'Đích đến',
+		targetNew		: 'Cửa sổ mới (_blank)',
+		targetTop		: 'Cửa sổ trên cùng (_top)',
+		targetSelf		: 'Tại trang (_self)',
+		targetParent	: 'Cửa sổ cha (_parent)',
+		langDirLTR		: 'Left to Right (LTR)', // MISSING
+		langDirRTL		: 'Right to Left (RTL)', // MISSING
+		styles			: 'Style', // MISSING
+		cssClasses		: 'Stylesheet Classes', // MISSING
+		width			: 'Chiều rộng',
+		height			: 'chiều cao',
+		align			: 'Vị trí',
+		alignLeft		: 'Trái',
+		alignRight		: 'Phải',
+		alignCenter		: 'Giữa',
+		alignTop		: 'Trên',
+		alignMiddle		: 'Giữa',
+		alignBottom		: 'Dưới',
+		invalidHeight	: 'Chiều cao phải là số nguyên.',
+		invalidWidth	: 'Chiều rộng phải là số nguyên.',
+		invalidCssLength	: 'Value specified for the "%1" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).', // MISSING
+		invalidHtmlLength	: 'Value specified for the "%1" field must be a positive number with or without a valid HTML measurement unit (px or %).', // MISSING
+
+		// Put the voice-only part of the label in the span.
+		unavailable		: '%1<span class="cke_accessibility">, không có</span>'
+	},
+
+	contextmenu :
+	{
+		options : 'Tùy chọn menu bổ xung'
+	},
+
+	// Special char dialog.
+	specialChar		:
+	{
+		toolbar		: 'Chèn ký tự đặc biệt',
+		title		: 'Hãy chọn ký tự đặc biệt',
+		options : 'Tùy chọn các ký tự đặc biệt'
+	},
+
+	// Link dialog.
+	link :
+	{
+		toolbar		: 'Chèn/Sửa liên kết',
+		other 		: '<khác>',
+		menu		: 'Sửa liên kết',
+		title		: 'Liên kết',
+		info		: 'Thông tin liên kết',
+		target		: 'Đích',
+		upload		: 'Tải lên',
+		advanced	: 'Mở rộng',
+		type		: 'Kiểu liên kết',
+		toUrl		: 'URL',
+		toAnchor	: 'Neo trong trang này',
+		toEmail		: 'Thư điện tử',
+		targetFrame		: '<khung>',
+		targetPopup		: '<cửa sổ popup>',
+		targetFrameName	: 'Tên khung đích',
+		targetPopupName	: 'Tên cửa sổ Popup',
+		popupFeatures	: 'Đặc điểm của cửa sổ Popup',
+		popupResizable	: 'Có thể thay đổi kích cỡ',
+		popupStatusBar	: 'Thanh trạng thái',
+		popupLocationBar: 'Thanh vị trí',
+		popupToolbar	: 'Thanh công cụ',
+		popupMenuBar	: 'Thanh Menu',
+		popupFullScreen	: 'Toàn màn hình (IE)',
+		popupScrollBars	: 'Thanh cuộn',
+		popupDependent	: 'Phụ thuộc (Netscape)',
+		popupLeft		: 'Vị trí bên trái',
+		popupTop		: 'Vị trí phía trên',
+		id				: 'Định danh',
+		langDir			: 'Hướng ngôn ngữ',
+		langDirLTR		: 'Trái sang phải (LTR)',
+		langDirRTL		: 'Phải sang trái (RTL)',
+		acccessKey		: 'Phím hỗ trợ truy cập',
+		name			: 'Tên',
+		langCode			: 'Mã ngôn ngữ',
+		tabIndex			: 'Chỉ số của Tab',
+		advisoryTitle		: 'Nhan đề hướng dẫn',
+		advisoryContentType	: 'Nội dung hướng dẫn',
+		cssClasses		: 'Lớp Stylesheet',
+		charset			: 'Bảng mã của tài nguyên được liên kết đến',
+		styles			: 'Kiểu (style)',
+		rel			: 'Relationship', // MISSING
+		selectAnchor		: 'Chọn một điểm neo',
+		anchorName		: 'Theo tên điểm neo',
+		anchorId			: 'Theo định danh thành phần',
+		emailAddress		: 'Thư điện tử',
+		emailSubject		: 'Tiêu đề thông điệp',
+		emailBody		: 'Nội dung thông điệp',
+		noAnchors		: '(Không có điểm neo nào trong tài liệu)',
+		noUrl			: 'Hãy đưa vào đường dẫn liên kết (URL)',
+		noEmail			: 'Hãy đưa vào địa chỉ thư điện tử'
+	},
+
+	// Anchor dialog
+	anchor :
+	{
+		toolbar		: 'Chèn/Sửa điểm neo',
+		menu		: 'Thuộc tính điểm neo',
+		title		: 'Thuộc tính điểm neo',
+		name		: 'Tên của điểm neo',
+		errorName	: 'Hãy nhập vào tên của điểm neo',
+		remove		: 'Remove Anchor' // MISSING
+	},
+
+	// List style dialog
+	list:
+	{
+		numberedTitle		: 'Thuộc tính danh sách có thứ tự',
+		bulletedTitle		: 'Thuộc tính danh sách không thứ tự',
+		type				: 'Kiểu loại',
+		start				: 'Bắt đầu',
+		validateStartNumber				:'List start number must be a whole number.', // MISSING
+		circle				: 'Khuyên tròn',
+		disc				: 'Hình đĩa',
+		square				: 'Hình vuông',
+		none				: 'Không gì cả',
+		notset				: '<không thiết lập>',
+		armenian			: 'Số theo kiểu Armenian',
+		georgian			: 'Số theo kiểu Georgian (an, ban, gan...)',
+		lowerRoman			: 'Số La Mã kiểu thường (i, ii, iii, iv, v...)',
+		upperRoman			: 'Số La Mã kiểu HOA (I, II, III, IV, V...)',
+		lowerAlpha			: 'Kiểu abc thường (a, b, c, d, e...)',
+		upperAlpha			: 'Kiểu ABC HOA (A, B, C, D, E...)',
+		lowerGreek			: 'Kiểu Hy Lạp (alpha, beta, gamma...)',
+		decimal				: 'Kiểu số (1, 2, 3 ...)',
+		decimalLeadingZero	: 'Kiểu số (01, 02, 03...)'
+	},
+
+	// Find And Replace Dialog
+	findAndReplace :
+	{
+		title				: 'Tìm kiếm và thay thế',
+		find				: 'Tìm kiếm',
+		replace				: 'Thay thế',
+		findWhat			: 'Tìm chuỗi:',
+		replaceWith			: 'Thay bằng:',
+		notFoundMsg			: 'Không tìm thấy chuỗi cần tìm.',
+		matchCase			: 'Phân biệt chữ hoa/thường',
+		matchWord			: 'Giống toàn bộ từ',
+		matchCyclic			: 'Giống một phần',
+		replaceAll			: 'Thay thế tất cả',
+		replaceSuccessMsg	: '%1 vị trí đã được thay thế.'
+	},
+
+	// Table Dialog
+	table :
+	{
+		toolbar		: 'Bảng',
+		title		: 'Thuộc tính bảng',
+		menu		: 'Thuộc tính bảng',
+		deleteTable	: 'Xóa bảng',
+		rows		: 'Số hàng',
+		columns		: 'Số cột',
+		border		: 'Kích thước đường viền',
+		widthPx		: 'Điểm ảnh (px)',
+		widthPc		: 'Phần trăm (%)',
+		widthUnit	: 'Đơn vị',
+		cellSpace	: 'Khoảng cách giữa các ô',
+		cellPad		: 'Khoảng đệm giữ ô và nội dung',
+		caption		: 'Đầu đề',
+		summary		: 'Tóm lược',
+		headers		: 'Đầu đề',
+		headersNone		: 'Không có',
+		headersColumn	: 'Cột đầu tiên',
+		headersRow		: 'Hàng đầu tiên',
+		headersBoth		: 'Cả hai',
+		invalidRows		: 'Số lượng hàng phải là một số lớn hơn 0.',
+		invalidCols		: 'Số lượng cột phải là một số lớn hơn 0.',
+		invalidBorder	: 'Kích cỡ của đường biên phải là một số nguyên.',
+		invalidWidth	: 'Chiều rộng của bảng phải là một số nguyên.',
+		invalidHeight	: 'Chiều cao của bảng phải là một số nguyên.',
+		invalidCellSpacing	: 'Khoảng cách giữa các ô phải là một số nguyên.',
+		invalidCellPadding	: 'Khoảng đệm giữa ô và nội dung phải là một số nguyên.',
+
+		cell :
+		{
+			menu			: 'Ô',
+			insertBefore	: 'Chèn ô Phía trước',
+			insertAfter		: 'Chèn ô Phía sau',
+			deleteCell		: 'Xoá ô',
+			merge			: 'Kết hợp ô',
+			mergeRight		: 'Kết hợp sang phải',
+			mergeDown		: 'Kết hợp xuống dưới',
+			splitHorizontal	: 'Phân tách ô theo chiều ngang',
+			splitVertical	: 'Phân tách ô theo chiều dọc',
+			title			: 'Thuộc tính của ô',
+			cellType		: 'Kiểu của ô',
+			rowSpan			: 'Kết hợp hàng',
+			colSpan			: 'Kết hợp cột',
+			wordWrap		: 'Chữ liền hàng',
+			hAlign			: 'Canh lề ngang',
+			vAlign			: 'Canh lề dọc',
+			alignBaseline	: 'Đường cơ sở',
+			bgColor			: 'Màu nền',
+			borderColor		: 'Màu viền',
+			data			: 'Dữ liệu',
+			header			: 'Đầu đề',
+			yes				: 'Có',
+			no				: 'Không',
+			invalidWidth	: 'Chiều rộng của ô phải là một số nguyên.',
+			invalidHeight	: 'Chiều cao của ô phải là một số nguyên.',
+			invalidRowSpan	: 'Số hàng kết hợp phải là một số nguyên.',
+			invalidColSpan	: 'Số cột kết hợp phải là một số nguyên.',
+			chooseColor		: 'Chọn màu'
+		},
+
+		row :
+		{
+			menu			: 'Hàng',
+			insertBefore	: 'Chèn hàng phía trước',
+			insertAfter		: 'Chèn hàng phía sau',
+			deleteRow		: 'Xoá hàng'
+		},
+
+		column :
+		{
+			menu			: 'Cột',
+			insertBefore	: 'Chèn cột phía trước',
+			insertAfter		: 'Chèn cột phía sau',
+			deleteColumn	: 'Xoá cột'
+		}
+	},
+
+	// Button Dialog.
+	button :
+	{
+		title		: 'Thuộc tính của nút',
+		text		: 'Chuỗi hiển thị (giá trị)',
+		type		: 'Kiểu',
+		typeBtn		: 'Nút bấm',
+		typeSbm		: 'Nút gửi',
+		typeRst		: 'Nút nhập lại'
+	},
+
+	// Checkbox and Radio Button Dialogs.
+	checkboxAndRadio :
+	{
+		checkboxTitle : 'Thuộc tính nút kiểm',
+		radioTitle	: 'Thuộc tính nút chọn',
+		value		: 'Giá trị',
+		selected	: 'Được chọn'
+	},
+
+	// Form Dialog.
+	form :
+	{
+		title		: 'Thuộc tính biểu mẫu',
+		menu		: 'Thuộc tính biểu mẫu',
+		action		: 'Hành động',
+		method		: 'Phương thức',
+		encoding	: 'Bảng mã'
+	},
+
+	// Select Field Dialog.
+	select :
+	{
+		title		: 'Thuộc tính ô chọn',
+		selectInfo	: 'Thông tin',
+		opAvail		: 'Các tùy chọn có thể sử dụng',
+		value		: 'Giá trị',
+		size		: 'Kích cỡ',
+		lines		: 'dòng',
+		chkMulti	: 'Cho phép chọn nhiều',
+		opText		: 'Văn bản',
+		opValue		: 'Giá trị',
+		btnAdd		: 'Thêm',
+		btnModify	: 'Thay đổi',
+		btnUp		: 'Lên',
+		btnDown		: 'Xuống',
+		btnSetValue : 'Giá trị được chọn',
+		btnDelete	: 'Nút xoá'
+	},
+
+	// Textarea Dialog.
+	textarea :
+	{
+		title		: 'Thuộc tính vùng văn bản',
+		cols		: 'Số cột',
+		rows		: 'Số hàng'
+	},
+
+	// Text Field Dialog.
+	textfield :
+	{
+		title		: 'Thuộc tính trường văn bản',
+		name		: 'Tên',
+		value		: 'Giá trị',
+		charWidth	: 'Độ rộng của ký tự',
+		maxChars	: 'Số ký tự tối đa',
+		type		: 'Kiểu',
+		typeText	: 'Ký tự',
+		typePass	: 'Mật khẩu'
+	},
+
+	// Hidden Field Dialog.
+	hidden :
+	{
+		title	: 'Thuộc tính trường ẩn',
+		name	: 'Tên',
+		value	: 'Giá trị'
+	},
+
+	// Image Dialog.
+	image :
+	{
+		title		: 'Thuộc tính của ảnh',
+		titleButton	: 'Thuộc tính nút của ảnh',
+		menu		: 'Thuộc tính của ảnh',
+		infoTab		: 'Thông tin của ảnh',
+		btnUpload	: 'Tải lên máy chủ',
+		upload		: 'Tải lên',
+		alt			: 'Chú thích ảnh',
+		lockRatio	: 'Giữ nguyên tỷ lệ',
+		resetSize	: 'Kích thước gốc',
+		border		: 'Đường viền',
+		hSpace		: 'Khoảng đệm ngang',
+		vSpace		: 'Khoảng đệm dọc',
+		alertUrl	: 'Hãy đưa vào đường dẫn của ảnh',
+		linkTab		: 'Tab liên kết',
+		button2Img	: 'Bạn có muốn chuyển nút bấm bằng ảnh được chọn thành ảnh?',
+		img2Button	: 'Bạn có muốn chuyển đổi ảnh được chọn thành nút bấm bằng ảnh?',
+		urlMissing	: 'Thiếu đường dẫn hình ảnh',
+		validateBorder	: 'Chiều rộng của đường viền phải là một số nguyên dương',
+		validateHSpace	: 'Khoảng đệm ngang phải là một số nguyên dương',
+		validateVSpace	: 'Khoảng đệm dọc phải là một số nguyên dương'
+	},
+
+	// Flash Dialog
+	flash :
+	{
+		properties		: 'Thuộc tính Flash',
+		propertiesTab	: 'Thuộc tính',
+		title			: 'Thuộc tính Flash',
+		chkPlay			: 'Tự động chạy',
+		chkLoop			: 'Lặp',
+		chkMenu			: 'Cho phép bật menu của Flash',
+		chkFull			: 'Cho phép toàn màn hình',
+ 		scale			: 'Tỷ lệ',
+		scaleAll		: 'Hiển thị tất cả',
+		scaleNoBorder	: 'Không đường viền',
+		scaleFit		: 'Vừa vặn',
+		access			: 'Truy cập mã',
+		accessAlways	: 'Luôn luôn',
+		accessSameDomain: 'Cùng tên miền',
+		accessNever		: 'Không bao giờ',
+		alignAbsBottom	: 'Dưới tuyệt đối',
+		alignAbsMiddle	: 'Giữa tuyệt đối',
+		alignBaseline	: 'Đường cơ sở',
+		alignTextTop	: 'Phía trên chữ',
+		quality			: 'Chất lượng',
+		qualityBest		: 'Tốt nhất',
+		qualityHigh		: 'Cao',
+		qualityAutoHigh	: 'Cao tự động',
+		qualityMedium	: 'Trung bình',
+		qualityAutoLow	: 'Thấp tự động',
+		qualityLow		: 'Thấp',
+		windowModeWindow: 'Cửa sổ',
+		windowModeOpaque: 'Mờ đục',
+		windowModeTransparent : 'Trong suốt',
+		windowMode		: 'Chế độ cửa sổ',
+		flashvars		: 'Các biến số dành cho Flash',
+		bgcolor			: 'Màu nền',
+		hSpace			: 'Khoảng đệm ngang',
+		vSpace			: 'Khoảng đệm dọc',
+		validateSrc		: 'Hãy đưa vào đường dẫn liên kết',
+		validateHSpace	: 'Khoảng đệm ngang phải là số nguyên.',
+		validateVSpace	: 'Khoảng đệm dọc phải là số nguyên.'
+	},
+
+	// Speller Pages Dialog
+	spellCheck :
+	{
+		toolbar			: 'Kiểm tra chính tả',
+		title			: 'Kiểm tra chính tả',
+		notAvailable	: 'Xin lỗi, dịch vụ này hiện tại không có.',
+		errorLoading	: 'Lỗi khi đang nạp dịch vụ ứng dụng: %s.',
+		notInDic		: 'Không có trong từ điển',
+		changeTo		: 'Chuyển thành',
+		btnIgnore		: 'Bỏ qua',
+		btnIgnoreAll	: 'Bỏ qua tất cả',
+		btnReplace		: 'Thay thế',
+		btnReplaceAll	: 'Thay thế tất cả',
+		btnUndo			: 'Phục hồi lại',
+		noSuggestions	: '- Không đưa ra gợi ý về từ -',
+		progress		: 'Đang tiến hành kiểm tra chính tả...',
+		noMispell		: 'Hoàn tất kiểm tra chính tả: Không có lỗi chính tả',
+		noChanges		: 'Hoàn tất kiểm tra chính tả: Không có từ nào được thay đổi',
+		oneChange		: 'Hoàn tất kiểm tra chính tả: Một từ đã được thay đổi',
+		manyChanges		: 'Hoàn tất kiểm tra chính tả: %1 từ đã được thay đổi',
+		ieSpellDownload	: 'Chức năng kiểm tra chính tả chưa được cài đặt. Bạn có muốn tải về ngay bây giờ?'
+	},
+
+	smiley :
+	{
+		toolbar	: 'Hình biểu lộ cảm xúc (mặt cười)',
+		title	: 'Chèn hình biểu lộ cảm xúc (mặt cười)',
+		options : 'Tùy chọn hình  biểu lộ cảm xúc'
+	},
+
+	elementsPath :
+	{
+		eleLabel : 'Nhãn thành phần',
+		eleTitle : '%1 thành phần'
+	},
+
+	numberedlist	: 'Danh sách có thứ tự',
+	bulletedlist	: 'Danh sách không thứ tự',
+	indent			: 'Dịch vào trong',
+	outdent			: 'Dịch ra ngoài',
+
+	justify :
+	{
+		left	: 'Canh trái',
+		center	: 'Canh giữa',
+		right	: 'Canh phải',
+		block	: 'Canh đều'
+	},
+
+	blockquote : 'Khối trích dẫn',
+
+	clipboard :
+	{
+		title		: 'Dán',
+		cutError	: 'Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+X).',
+		copyError	: 'Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+C).',
+		pasteMsg	: 'Hãy dán nội dung vào trong khung bên dưới, sử dụng tổ hợp phím (<STRONG>Ctrl/Cmd+V</STRONG>) và nhấn vào nút <STRONG>Đồng ý</STRONG>.',
+		securityMsg	: 'Do thiết lập bảo mật của trình duyệt nên trình biên tập không thể truy cập trực tiếp vào nội dung đã sao chép. Bạn cần phải dán lại nội dung vào cửa sổ này.',
+		pasteArea	: 'Khu vực dán'
+	},
+
+	pastefromword :
+	{
+		confirmCleanup	: 'Văn bản bạn muốn dán có kèm định dạng của Word. Bạn có muốn loại bỏ định dạng Word trước khi dán?',
+		toolbar			: 'Dán với định dạng Word',
+		title			: 'Dán với định dạng Word',
+		error			: 'It was not possible to clean up the pasted data due to an internal error' // MISSING
+	},
+
+	pasteText :
+	{
+		button	: 'Dán theo định dạng văn bản thuần',
+		title	: 'Dán theo định dạng văn bản thuần'
+	},
+
+	templates :
+	{
+		button			: 'Mẫu dựng sẵn',
+		title			: 'Nội dung Mẫu dựng sẵn',
+		options : 'Tùy chọn mẫu dựng sẵn',
+		insertOption	: 'Thay thế nội dung hiện tại',
+		selectPromptMsg	: 'Hãy chọn mẫu dựng sẵn để mở trong trình biên tập<br>(nội dung hiện tại sẽ bị mất):',
+		emptyListMsg	: '(Không có mẫu dựng sẵn nào được định nghĩa)'
+	},
+
+	showBlocks : 'Hiển thị các khối',
+
+	stylesCombo :
+	{
+		label		: 'Kiểu',
+		panelTitle	: 'Phong cách định dạng',
+		panelTitle1	: 'Kiểu khối',
+		panelTitle2	: 'Kiểu trực tiếp',
+		panelTitle3	: 'Kiểu đối tượng'
+	},
+
+	format :
+	{
+		label		: 'Định dạng',
+		panelTitle	: 'Định dạng',
+
+		tag_p		: 'Bình thường (P)',
+		tag_pre		: 'Đã thiết lập',
+		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		: 'Bình thường (DIV)'
+	},
+
+	div :
+	{
+		title				: 'Tạo khối các thành phần',
+		toolbar				: 'Tạo khối các thành phần',
+		cssClassInputLabel	: 'Các lớp CSS',
+		styleSelectLabel	: 'Kiểu (style)',
+		IdInputLabel		: 'Định danh (id)',
+		languageCodeInputLabel	: 'Mã ngôn ngữ',
+		inlineStyleInputLabel	: 'Kiểu nội dòng',
+		advisoryTitleInputLabel	: 'Nhan đề hướng dẫn',
+		langDirLabel		: 'Hướng ngôn ngữ',
+		langDirLTRLabel		: 'Trái sang phải (LTR)',
+		langDirRTLLabel		: 'Phải qua trái (RTL)',
+		edit				: 'Chỉnh sửa',
+		remove				: 'Xóa bỏ'
+  	},
+
+	iframe :
+	{
+		title		: 'IFrame Properties', // MISSING
+		toolbar		: 'IFrame', // MISSING
+		noUrl		: 'Please type the iframe URL', // MISSING
+		scrolling	: 'Enable scrollbars', // MISSING
+		border		: 'Show frame border' // MISSING
+	},
+
+	font :
+	{
+		label		: 'Phông',
+		voiceLabel	: 'Phông',
+		panelTitle	: 'Phông'
+	},
+
+	fontSize :
+	{
+		label		: 'Cỡ chữ',
+		voiceLabel	: 'Kích cỡ phông',
+		panelTitle	: 'Cỡ chữ'
+	},
+
+	colorButton :
+	{
+		textColorTitle	: 'Màu chữ',
+		bgColorTitle	: 'Màu nền',
+		panelTitle		: 'Màu sắc',
+		auto			: 'Tự động',
+		more			: 'Màu khác...'
+	},
+
+	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' : 'Dark 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' : 'Dim 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			: 'Kiểm tra chính tả ngay khi gõ chữ (SCAYT)',
+		opera_title		: 'Không hỗ trợ trên trình duyệt Opera',
+		enable			: 'Bật SCAYT',
+		disable			: 'Tắt SCAYT',
+		about			: 'Thông tin về SCAYT',
+		toggle			: 'Bật tắt SCAYT',
+		options			: 'Tùy chọn',
+		langs			: 'Ngôn ngữ',
+		moreSuggestions	: 'Đề xuất thêm',
+		ignore			: 'Bỏ qua',
+		ignoreAll		: 'Bỏ qua tất cả',
+		addWord			: 'Thêm từ',
+		emptyDic		: 'Tên của từ điển không được để trống.',
+
+		optionsTab		: 'Tùy chọn',
+		allCaps			: 'Không phân biệt chữ HOA chữ thường',
+		ignoreDomainNames : 'Bỏ qua tên miền',
+		mixedCase		: 'Không phân biệt loại chữ',
+		mixedWithDigits	: 'Không phân biệt chữ và số',
+
+		languagesTab	: 'Tab ngôn ngữ',
+
+		dictionariesTab	: 'Từ điển',
+		dic_field_name	: 'Tên từ điển',
+		dic_create		: 'Tạo',
+		dic_restore		: 'Phục hồi',
+		dic_delete		: 'Xóa',
+		dic_rename		: 'Thay tên',
+		dic_info		: 'Initially the User Dictionary is stored in a Cookie. However, Cookies are limited in size. When the User Dictionary grows to a point where it cannot be stored in a Cookie, then the dictionary may be stored on our server. To store your personal dictionary on our server you should specify a name for your dictionary. If you already have a stored dictionary, please type its name and click the Restore button.', // MISSING
+
+		aboutTab		: 'Thông tin'
+	},
+
+	about :
+	{
+		title		: 'Thông tin về CKEditor',
+		dlgTitle	: 'Thông tin về CKEditor',
+		help	: 'Check $1 for help.', // MISSING
+		userGuide : 'CKEditor User\'s Guide', // MISSING
+		moreInfo	: 'Vui lòng ghé thăm trang web của chúng tôi để có thông tin về giấy phép:',
+		copy		: 'Bản quyền &copy; $1. Giữ toàn quyền.'
+	},
+
+	maximize : 'Phóng to tối đa',
+	minimize : 'Thu nhỏ',
+
+	fakeobjects :
+	{
+		anchor		: 'Điểm neo',
+		flash		: 'Flash',
+		iframe		: 'IFrame', // MISSING
+		hiddenfield	: 'Hidden Field', // MISSING
+		unknown		: 'Đối tượng không rõ ràng'
+	},
+
+	resize : 'Kéo rê để thay đổi kích cỡ',
+
+	colordialog :
+	{
+		title		: 'Chọn màu',
+		options	:	'Color Options', // MISSING
+		highlight	: 'Màu chọn',
+		selected	: 'Màu đã chọn',
+		clear		: 'Xóa bỏ'
+	},
+
+	toolbarCollapse	: 'Thu gọn thanh công cụ',
+	toolbarExpand	: 'Mở rộng thnah công cụ',
+
+	toolbarGroups :
+	{
+		document : 'Document', // MISSING
+		clipboard : 'Clipboard/Undo', // MISSING
+		editing : 'Editing', // MISSING
+		forms : 'Forms', // MISSING
+		basicstyles : 'Basic Styles', // MISSING
+		paragraph : 'Paragraph', // MISSING
+		links : 'Links', // MISSING
+		insert : 'Insert', // MISSING
+		styles : 'Styles', // MISSING
+		colors : 'Colors', // MISSING
+		tools : 'Tools' // MISSING
+	},
+
+	bidi :
+	{
+		ltr : 'Text direction from left to right', // MISSING
+		rtl : 'Text direction from right to left' // MISSING
+	},
+
+	docprops :
+	{
+		label : 'Thuộc tính Tài liệu',
+		title : 'Thuộc tính Tài liệu',
+		design : 'Design', // MISSING
+		meta : 'Siêu dữ liệu',
+		chooseColor : 'Chọn màu',
+		other : '<khác>',
+		docTitle :	'Tiêu đề Trang',
+		charset : 	'Bảng mã ký tự',
+		charsetOther : 'Bảng mã ký tự khác',
+		charsetASCII : 'ASCII', // MISSING
+		charsetCE : 'Trung Âu',
+		charsetCT : 'Tiếng Trung Quốc (Big5)',
+		charsetCR : 'Tiếng Kirin',
+		charsetGR : 'Tiếng Hy Lạp',
+		charsetJP : 'Tiếng Nhật',
+		charsetKR : 'Tiếng Hàn',
+		charsetTR : 'Tiếng Thổ Nhĩ Kỳ',
+		charsetUN : 'Unicode (UTF-8)', // MISSING
+		charsetWE : 'Tây Âu',
+		docType : 'Kiểu Đề mục Tài liệu',
+		docTypeOther : 'Kiểu Đề mục Tài liệu khác',
+		xhtmlDec : 'Bao gồm cả định nghĩa XHTML',
+		bgColor : 'Màu nền',
+		bgImage : 'URL của Hình ảnh nền',
+		bgFixed : 'Không cuộn nền',
+		txtColor : 'Màu chữ',
+		margin : 'Đường biên của Trang',
+		marginTop : 'Trên',
+		marginLeft : 'Trái',
+		marginRight : 'Phải',
+		marginBottom : 'Dưới',
+		metaKeywords : 'Các từ khóa chỉ mục tài liệu (phân cách bởi dấu phẩy)',
+		metaDescription : 'Mô tả tài liệu',
+		metaAuthor : 'Tác giả',
+		metaCopyright : 'Bản quyền',
+		previewHtml : '<p>This is some <strong>sample text</strong>. You are using <a href="javascript:void(0)">CKEditor</a>.</p>' // MISSING
+	}
+};

+ 108 - 0
web/js/ckeditor/_source/plugins/a11yhelp/lang/en.js

@@ -0,0 +1,108 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.setLang( 'a11yhelp', 'en',
+{
+	accessibilityHelp :
+	{
+		title : 'Accessibility Instructions',
+		contents : 'Help Contents. To close this dialog press ESC.',
+		legend :
+		[
+			{
+				name : 'General',
+				items :
+						[
+							{
+								name : 'Editor Toolbar',
+								legend:
+									'Press ${toolbarFocus} to navigate to the toolbar. ' +
+									'Move to the next and previous toolbar group with TAB and SHIFT-TAB. ' +
+									'Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. ' +
+									'Press SPACE or ENTER to activate the toolbar button.'
+							},
+
+							{
+								name : 'Editor Dialog',
+								legend :
+									'Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. ' +
+									'For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. ' +
+									'Then move to next tab with TAB OR RIGTH ARROW. ' +
+									'Move to previous tab with SHIFT + TAB or LEFT ARROW. ' +
+									'Press SPACE or ENTER to select the tab page.'
+							},
+
+							{
+								name : 'Editor Context Menu',
+								legend :
+									'Press ${contextMenu} or APPLICATION KEY to open context-menu. ' +
+									'Then move to next menu option with TAB or DOWN ARROW. ' +
+									'Move to previous option with  SHIFT+TAB or UP ARROW. ' +
+									'Press SPACE or ENTER to select the menu option. ' +
+									'Open sub-menu of current option wtih SPACE or ENTER or RIGHT ARROW. ' +
+									'Go back to parent menu item with ESC or LEFT ARROW. ' +
+									'Close context menu with ESC.'
+							},
+
+							{
+								name : 'Editor List Box',
+								legend :
+									'Inside a list-box, move to next list item with TAB OR DOWN ARROW. ' +
+									'Move to previous list item with SHIFT + TAB or UP ARROW. ' +
+									'Press SPACE or ENTER to select the list option. ' +
+									'Press ESC to close the list-box.'
+							},
+
+							{
+								name : 'Editor Element Path Bar',
+								legend :
+									'Press ${elementsPathFocus} to navigate to the elements path bar. ' +
+									'Move to next element button with TAB or RIGHT ARROW. ' +
+									'Move to previous button with  SHIFT+TAB or LEFT ARROW. ' +
+									'Press SPACE or ENTER to select the element in editor.'
+							}
+						]
+			},
+			{
+				name : 'Commands',
+				items :
+						[
+							{
+								name : ' Undo command',
+								legend : 'Press ${undo}'
+							},
+							{
+								name : ' Redo command',
+								legend : 'Press ${redo}'
+							},
+							{
+								name : ' Bold command',
+								legend : 'Press ${bold}'
+							},
+							{
+								name : ' Italic command',
+								legend : 'Press ${italic}'
+							},
+							{
+								name : ' Underline command',
+								legend : 'Press ${underline}'
+							},
+							{
+								name : ' Link command',
+								legend : 'Press ${link}'
+							},
+							{
+								name : ' Toolbar Collapse command',
+								legend : 'Press ${toolbarCollapse}'
+							},
+							{
+								name : ' Accessibility Help',
+								legend : 'Press ${a11yHelp}'
+							}
+						]
+			}
+		]
+	}
+});

+ 216 - 0
web/js/ckeditor/_source/plugins/a11yhelp/lang/he.js

@@ -0,0 +1,216 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.setLang( 'a11yhelp', 'he',
+{
+	accessibilityHelp :
+	{
+		title : 'הוראות נגישות',
+		contents : 'הוראות נגישות. לסגירה לחץ אסקייפ (ESC).',
+		legend :
+		[
+			{
+				name : 'כללי',
+				items :
+						[
+							{
+								name : 'סרגל הכלים',
+								legend:
+									'לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. ' +
+									'עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. ' +
+									'עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. ' +
+									'לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר.'
+							},
+
+							{
+								name : 'דיאלוגים (חלונות תשאול)',
+								legend :
+									'בתוך דיאלוג, לחץ טאב (TAB) כדי לנווט לשדה הבא, לחץ שיפט (SHIFT) + טאב (TAB) כדי לנווט לשדה הקודם, לחץ אנטר (ENTER) כדי לשלוח את הדיאלוג, לחץ אסקייפ (ESC) כדי לבטל. ' +
+									'בתוך דיאלוגים בעלי מספר טאבים (לשוניות), לחץ אלט (ALT) + F10 כדי לנווט לשורת הטאבים. ' +
+									'נווט לטאב הבא עם טאב (TAB) או חץ שמאלי. ' +
+									'עבור לטאב הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. ' +
+									'לחץ רווח או אנטר (ENTER) כדי להיכנס לטאב.'
+							},
+
+							{
+								name : 'תפריט ההקשר (Context Menu)',
+								legend :
+									'לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. ' +
+									'עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. ' +
+									'עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. ' +
+									'לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. ' +
+									'פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. ' +
+									'חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. ' +
+									'סגור את תפריט ההקשר עם אסקייפ (ESC).'
+							},
+
+							{
+								name : 'תפריטים צפים (List boxes)',
+								legend :
+									'בתוך תפריט צף, עבור לפריט הבא עם טאב (TAB) או חץ למטה. ' +
+									'עבור לתפריט הקודם עם שיפט (SHIFT) + טאב (TAB) or חץ עליון. ' +
+									'Press SPACE or ENTER to select the list option. ' +
+									'Press ESC to close the list-box.'
+							},
+
+							{
+								name : 'עץ אלמנטים (Elements Path)',
+								legend :
+									'לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. ' +
+									'עבור לפריט הבא עם טאב (TAB) או חץ ימני. ' +
+									'עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. ' +
+									'לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך.'
+							}
+						]
+			},
+			{
+				name : 'פקודות',
+				items :
+						[
+							{
+								name : ' ביטול צעד אחרון',
+								legend : 'לחץ ${undo}'
+							},
+							{
+								name : ' חזרה על צעד אחרון',
+								legend : 'לחץ ${redo}'
+							},
+							{
+								name : ' הדגשה',
+								legend : 'לחץ ${bold}'
+							},
+							{
+								name : ' הטייה',
+								legend : 'לחץ ${italic}'
+							},
+							{
+								name : ' הוספת קו תחתון',
+								legend : 'לחץ ${underline}'
+							},
+							{
+								name : ' הוספת לינק',
+								legend : 'לחץ ${link}'
+							},
+							{
+								name : ' כיווץ סרגל הכלים',
+								legend : 'לחץ ${toolbarCollapse}'
+							},
+							{
+								name : ' הוראות נגישות',
+								legend : 'לחץ ${a11yHelp}'
+							}
+						]
+			}
+		]
+	}
+});
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.setLang( 'a11yhelp', 'he',
+{
+	accessibilityHelp :
+	{
+		title : 'הוראות נגישות',
+		contents : 'הוראות נגישות. לסגירה לחץ אסקייפ (ESC).',
+		legend :
+		[
+			{
+				name : 'כללי',
+				items :
+						[
+							{
+								name : 'סרגל הכלים',
+								legend:
+									'לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. ' +
+									'עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. ' +
+									'עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. ' +
+									'לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר.'
+							},
+
+							{
+								name : 'דיאלוגים (חלונות תשאול)',
+								legend :
+									'בתוך דיאלוג, לחץ טאב (TAB) כדי לנווט לשדה הבא, לחץ שיפט (SHIFT) + טאב (TAB) כדי לנווט לשדה הקודם, לחץ אנטר (ENTER) כדי לשלוח את הדיאלוג, לחץ אסקייפ (ESC) כדי לבטל. ' +
+									'בתוך דיאלוגים בעלי מספר טאבים (לשוניות), לחץ אלט (ALT) + F10 כדי לנווט לשורת הטאבים. ' +
+									'נווט לטאב הבא עם טאב (TAB) או חץ שמאלי. ' +
+									'עבור לטאב הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. ' +
+									'לחץ רווח או אנטר (ENTER) כדי להיכנס לטאב.'
+							},
+
+							{
+								name : 'תפריט ההקשר (Context Menu)',
+								legend :
+									'לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. ' +
+									'עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. ' +
+									'עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. ' +
+									'לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. ' +
+									'פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. ' +
+									'חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. ' +
+									'סגור את תפריט ההקשר עם אסקייפ (ESC).'
+							},
+
+							{
+								name : 'תפריטים צפים (List boxes)',
+								legend :
+									'בתוך תפריט צף, עבור לפריט הבא עם טאב (TAB) או חץ למטה. ' +
+									'עבור לתפריט הקודם עם שיפט (SHIFT) + טאב (TAB) or חץ עליון. ' +
+									'Press SPACE or ENTER to select the list option. ' +
+									'Press ESC to close the list-box.'
+							},
+
+							{
+								name : 'עץ אלמנטים (Elements Path)',
+								legend :
+									'לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. ' +
+									'עבור לפריט הבא עם טאב (TAB) או חץ ימני. ' +
+									'עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. ' +
+									'לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך.'
+							}
+						]
+			},
+			{
+				name : 'פקודות',
+				items :
+						[
+							{
+								name : ' ביטול צעד אחרון',
+								legend : 'לחץ ${undo}'
+							},
+							{
+								name : ' חזרה על צעד אחרון',
+								legend : 'לחץ ${redo}'
+							},
+							{
+								name : ' הדגשה',
+								legend : 'לחץ ${bold}'
+							},
+							{
+								name : ' הטייה',
+								legend : 'לחץ ${italic}'
+							},
+							{
+								name : ' הוספת קו תחתון',
+								legend : 'לחץ ${underline}'
+							},
+							{
+								name : ' הוספת לינק',
+								legend : 'לחץ ${link}'
+							},
+							{
+								name : ' כיווץ סרגל הכלים',
+								legend : 'לחץ ${toolbarCollapse}'
+							},
+							{
+								name : ' הוראות נגישות',
+								legend : 'לחץ ${a11yHelp}'
+							}
+						]
+			}
+		]
+	}
+});

+ 24 - 0
web/js/ckeditor/_source/plugins/about/plugin.js

@@ -0,0 +1,24 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.add( 'about',
+{
+	requires : [ 'dialog' ],
+	init : function( editor )
+	{
+		var command = editor.addCommand( 'about', new CKEDITOR.dialogCommand( 'about' ) );
+		command.modes = { wysiwyg:1, source:1 };
+		command.canUndo = false;
+		command.readOnly = 1;
+
+		editor.ui.addButton( 'About',
+			{
+				label : editor.lang.about.title,
+				command : 'about'
+			});
+
+		CKEDITOR.dialog.add( 'about', this.path + 'dialogs/about.js' );
+	}
+});

+ 228 - 0
web/js/ckeditor/_source/plugins/adobeair/plugin.js

@@ -0,0 +1,228 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function()
+{
+	var eventNameList = [ 'click', 'keydown', 'mousedown', 'keypress', 'mouseover', 'mouseout' ];
+
+	// Inline event callbacks assigned via innerHTML/outerHTML, such as
+	// onclick/onmouseover, are ignored in AIR.
+	// Use DOM2 event listeners to substitue inline handlers instead.
+	function convertInlineHandlers( container )
+	{
+		// TODO: document.querySelectorAll is not supported in AIR.
+		var children = container.getElementsByTag( '*' ),
+			count = children.count(),
+			child;
+
+		for ( var i = 0; i < count; i++ )
+		{
+			child = children.getItem( i );
+
+			(function( node )
+			{
+				for ( var j = 0; j < eventNameList.length; j++ )
+				{
+					(function( eventName )
+					{
+						var inlineEventHandler = node.getAttribute( 'on' + eventName );
+						if ( node.hasAttribute( 'on' + eventName ) )
+						{
+							node.removeAttribute( 'on' + eventName );
+							node.on( eventName, function( evt )
+							{
+								var callFunc = /(return\s*)?CKEDITOR\.tools\.callFunction\(([^)]+)\)/.exec( inlineEventHandler ),
+									hasReturn = callFunc && callFunc[ 1 ],
+									callFuncArgs = callFunc &&  callFunc[ 2 ].split( ',' ),
+									preventDefault = /return false;/.test( inlineEventHandler );
+
+								if ( callFuncArgs )
+								{
+									var nums = callFuncArgs.length,
+										argName;
+
+									for ( var i = 0; i < nums; i++ )
+									{
+										// Trim spaces around param.
+										callFuncArgs[ i ] = argName = CKEDITOR.tools.trim( callFuncArgs[ i ] );
+
+										// String form param.
+										var strPattern = argName.match( /^(["'])([^"']*?)\1$/ );
+										if ( strPattern )
+										{
+											callFuncArgs[ i ] = strPattern[ 2 ];
+											continue;
+										}
+
+										// Integer form param.
+										if ( argName.match( /\d+/ ) )
+										{
+											callFuncArgs[ i ] = parseInt( argName, 10 );
+											continue;
+										}
+
+										// Speical variables.
+										switch( argName )
+										{
+											case 'this' :
+												callFuncArgs[ i ] = node.$;
+												break;
+											case 'event' :
+												callFuncArgs[ i ] = evt.data.$;
+												break;
+											case 'null' :
+												callFuncArgs [ i ] = null;
+												break;
+										}
+									}
+
+									var retval = CKEDITOR.tools.callFunction.apply( window, callFuncArgs );
+									if ( hasReturn && retval === false )
+										 preventDefault = 1;
+								}
+
+								if ( preventDefault )
+									evt.data.preventDefault();
+							});
+						}
+					})( eventNameList[ j ] );
+				}
+			})( child );
+		}
+	}
+
+	CKEDITOR.plugins.add( 'adobeair',
+	{
+		init : function( editor )
+		{
+			if ( !CKEDITOR.env.air )
+				return;
+
+			// Body doesn't get default margin on AIR.
+			editor.addCss( 'body { padding: 8px }' );
+
+			editor.on( 'uiReady', function()
+				{
+					convertInlineHandlers( editor.container );
+
+					if ( editor.sharedSpaces )
+					{
+						for ( var space in editor.sharedSpaces )
+							convertInlineHandlers( editor.sharedSpaces[ space ] );
+					}
+
+					editor.on( 'elementsPathUpdate', function( evt ) { convertInlineHandlers( evt.data.space ); } );
+				});
+
+			editor.on( 'contentDom', function()
+				{
+					// Hyperlinks are enabled in editable documents in Adobe
+					// AIR. Prevent their click behavior.
+					editor.document.on( 'click', function( ev )
+						{
+							ev.data.preventDefault( true );
+						});
+				});
+		}
+	});
+
+	CKEDITOR.ui.on( 'ready', function( evt )
+		{
+			var ui = evt.data;
+			// richcombo, panelbutton and menu
+			if ( ui._.panel )
+			{
+				var panel = ui._.panel._.panel,
+						holder;
+
+				( function()
+				{
+					// Adding dom event listeners off-line are not supported in AIR,
+					// waiting for panel iframe loaded.
+					if ( !panel.isLoaded )
+					{
+						setTimeout( arguments.callee, 30 );
+						return;
+					}
+					holder = panel._.holder;
+					convertInlineHandlers( holder );
+				})();
+			}
+			else if ( ui instanceof CKEDITOR.dialog )
+				convertInlineHandlers( ui._.element );
+		});
+})();
+
+CKEDITOR.dom.document.prototype.write = CKEDITOR.tools.override( CKEDITOR.dom.document.prototype.write,
+	function( original_write )
+	{
+		function appendElement( parent, tagName, fullTag, text )
+		{
+			var node = parent.append( tagName ),
+				attrs = CKEDITOR.htmlParser.fragment.fromHtml( fullTag ).children[ 0 ].attributes;
+			attrs && node.setAttributes( attrs );
+			text && node.append( parent.getDocument().createText( text ) );
+		}
+
+		return function( html, mode )
+			{
+				// document.write() or document.writeln() fail silently after
+				// the page load event in Adobe AIR.
+				// DOM manipulation could be used instead.
+				if ( this.getBody() )
+				{
+					// We're taking the below extra work only because innerHTML
+					// on <html> element doesn't work as expected.
+					var doc = this,
+						head = this.getHead();
+
+					// Create style nodes for inline css. ( <style> content doesn't applied when setting via innerHTML )
+					html = html.replace( /(<style[^>]*>)([\s\S]*?)<\/style>/gi,
+						function ( match, startTag, styleText )
+						{
+							appendElement( head, 'style', startTag, styleText );
+							return '';
+						});
+
+					html = html.replace( /<base\b[^>]*\/>/i,
+						function( match )
+						{
+							appendElement( head, 'base', match );
+							return '';
+						});
+
+					html = html.replace( /<title>([\s\S]*)<\/title>/i,
+						function( match, title )
+						{
+							doc.$.title = title;
+							return '';
+						});
+
+					// Move the rest of head stuff.
+					html = html.replace( /<head>([\s\S]*)<\/head>/i,
+						function( headHtml )
+						{
+							// Inject the <head> HTML inside a <div>.
+							// Do that before getDocumentHead because WebKit moves
+							// <link css> elements to the <head> at this point.
+							var div = new CKEDITOR.dom.element( 'div', doc );
+							div.setHtml( headHtml );
+							// Move the <div> nodes to <head>.
+							div.moveChildren( head );
+							return '';
+						});
+
+					html.replace( /(<body[^>]*>)([\s\S]*)(?=$|<\/body>)/i,
+						function( match, startTag, innerHTML )
+						{
+							doc.getBody().setHtml( innerHTML );
+							var attrs = CKEDITOR.htmlParser.fragment.fromHtml( startTag ).children[ 0 ].attributes;
+							attrs && doc.getBody().setAttributes( attrs );
+						});
+				}
+				else
+					original_write.apply( this, arguments );
+			};
+	});

+ 152 - 0
web/js/ckeditor/_source/plugins/ajax/plugin.js

@@ -0,0 +1,152 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview Defines the {@link CKEDITOR.ajax} object, which holds ajax methods for
+ *		data loading.
+ */
+
+(function()
+{
+	CKEDITOR.plugins.add( 'ajax',
+		{
+			requires : [ 'xml' ]
+		});
+
+	/**
+	 * Ajax methods for data loading.
+	 * @namespace
+	 * @example
+	 */
+	CKEDITOR.ajax = (function()
+	{
+		var createXMLHttpRequest = function()
+		{
+			// In IE, using the native XMLHttpRequest for local files may throw
+			// "Access is Denied" errors.
+			if ( !CKEDITOR.env.ie || location.protocol != 'file:' )
+				try { return new XMLHttpRequest(); } catch(e) {}
+
+			try { return new ActiveXObject( 'Msxml2.XMLHTTP' ); } catch (e) {}
+			try { return new ActiveXObject( 'Microsoft.XMLHTTP' ); } catch (e) {}
+
+			return null;
+		};
+
+		var checkStatus = function( xhr )
+		{
+			// HTTP Status Codes:
+			//	 2xx : Success
+			//	 304 : Not Modified
+			//	   0 : Returned when running locally (file://)
+			//	1223 : IE may change 204 to 1223 (see http://dev.jquery.com/ticket/1450)
+
+			return ( xhr.readyState == 4 &&
+					(	( xhr.status >= 200 && xhr.status < 300 ) ||
+						xhr.status == 304 ||
+						xhr.status === 0 ||
+						xhr.status == 1223 ) );
+		};
+
+		var getResponseText = function( xhr )
+		{
+			if ( checkStatus( xhr ) )
+				return xhr.responseText;
+			return null;
+		};
+
+		var getResponseXml = function( xhr )
+		{
+			if ( checkStatus( xhr ) )
+			{
+				var xml = xhr.responseXML;
+				return new CKEDITOR.xml( xml && xml.firstChild ? xml : xhr.responseText );
+			}
+			return null;
+		};
+
+		var load = function( url, callback, getResponseFn )
+		{
+			var async = !!callback;
+
+			var xhr = createXMLHttpRequest();
+
+			if ( !xhr )
+				return null;
+
+			xhr.open( 'GET', url, async );
+
+			if ( async )
+			{
+				// TODO: perform leak checks on this closure.
+				/** @ignore */
+				xhr.onreadystatechange = function()
+				{
+					if ( xhr.readyState == 4 )
+					{
+						callback( getResponseFn( xhr ) );
+						xhr = null;
+					}
+				};
+			}
+
+			xhr.send(null);
+
+			return async ? '' : getResponseFn( xhr );
+		};
+
+		return 	/** @lends CKEDITOR.ajax */ {
+
+			/**
+			 * Loads data from an URL as plain text.
+			 * @param {String} url The URL from which load data.
+			 * @param {Function} [callback] A callback function to be called on
+			 *		data load. If not provided, the data will be loaded
+			 *		synchronously.
+			 * @returns {String} The loaded data. For asynchronous requests, an
+			 *		empty string. For invalid requests, null.
+			 * @example
+			 * // Load data synchronously.
+			 * var data = CKEDITOR.ajax.load( 'somedata.txt' );
+			 * alert( data );
+			 * @example
+			 * // Load data asynchronously.
+			 * var data = CKEDITOR.ajax.load( 'somedata.txt', function( data )
+			 *     {
+			 *         alert( data );
+			 *     } );
+			 */
+			load : function( url, callback )
+			{
+				return load( url, callback, getResponseText );
+			},
+
+			/**
+			 * Loads data from an URL as XML.
+			 * @param {String} url The URL from which load data.
+			 * @param {Function} [callback] A callback function to be called on
+			 *		data load. If not provided, the data will be loaded
+			 *		synchronously.
+			 * @returns {CKEDITOR.xml} An XML object holding the loaded data. For asynchronous requests, an
+			 *		empty string. For invalid requests, null.
+			 * @example
+			 * // Load XML synchronously.
+			 * var xml = CKEDITOR.ajax.loadXml( 'somedata.xml' );
+			 * alert( xml.getInnerXml( '//' ) );
+			 * @example
+			 * // Load XML asynchronously.
+			 * var data = CKEDITOR.ajax.loadXml( 'somedata.xml', function( xml )
+			 *     {
+			 *         alert( xml.getInnerXml( '//' ) );
+			 *     } );
+			 */
+			loadXml : function( url, callback )
+			{
+				return load( url, callback, getResponseXml );
+			}
+		};
+	})();
+
+})();

+ 88 - 0
web/js/ckeditor/_source/plugins/autogrow/plugin.js

@@ -0,0 +1,88 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @file AutoGrow plugin
+ */
+(function(){
+	var resizeEditor = function( editor )
+	{
+		if ( !editor.window )
+			return;
+		var doc = editor.document,
+			currentHeight = editor.window.getViewPaneSize().height,
+			newHeight;
+
+		// We can not use documentElement to calculate the height for IE (#6061).
+		// It is not good for IE Quirks, yet using offsetHeight would also not work as expected (#6408).
+		// We do the same for FF because of the html height workaround (#6341).
+		if ( CKEDITOR.env.ie || CKEDITOR.env.gecko )
+			newHeight = doc.getBody().$.scrollHeight + ( CKEDITOR.env.ie && CKEDITOR.env.quirks ? 0 : 24 );
+		else
+			newHeight = doc.getDocumentElement().$.offsetHeight;
+
+		var min = editor.config.autoGrow_minHeight,
+			max = editor.config.autoGrow_maxHeight;
+		( min == undefined ) && ( editor.config.autoGrow_minHeight = min = 200 );
+		if ( min )
+			newHeight = Math.max( newHeight, min );
+		if ( max )
+			newHeight = Math.min( newHeight, max );
+
+		if ( newHeight != currentHeight )
+		{
+			newHeight = editor.fire( 'autoGrow', { currentHeight : currentHeight, newHeight : newHeight } ).newHeight;
+			editor.resize( editor.container.getStyle( 'width' ), newHeight, true );
+		}
+	};
+	CKEDITOR.plugins.add( 'autogrow',
+	{
+		init : function( editor )
+		{
+			for ( var eventName in { contentDom:1, key:1, selectionChange:1, insertElement:1 } )
+			{
+				editor.on( eventName, function( evt )
+				{
+					var maximize = editor.getCommand( 'maximize' );
+					// Some time is required for insertHtml, and it gives other events better performance as well.
+					if ( evt.editor.mode == 'wysiwyg' &&
+						// Disable autogrow when the editor is maximized .(#6339)
+						( !maximize || maximize.state != CKEDITOR.TRISTATE_ON ) )
+					{
+						setTimeout( function(){ resizeEditor( evt.editor ); }, 100 );
+					}
+				});
+			}
+		}
+	});
+})();
+/**
+ * The minimum height to which the editor can reach using AutoGrow.
+ * @name CKEDITOR.config.autoGrow_minHeight
+ * @type Number
+ * @default 200
+ * @since 3.4
+ * @example
+ * config.autoGrow_minHeight = 300;
+ */
+
+/**
+ * The maximum height to which the editor can reach using AutoGrow. Zero means unlimited.
+ * @name CKEDITOR.config.autoGrow_maxHeight
+ * @type Number
+ * @default 0
+ * @since 3.4
+ * @example
+ * config.autoGrow_maxHeight = 400;
+ */
+
+/**
+ * Fired when the AutoGrow plugin is about to change the size of the editor.
+ * @name CKEDITOR.editor#autogrow
+ * @event
+ * @param {Number} data.currentHeight The current height of the editor (before the resizing).
+ * @param {Number} data.newHeight The new height of the editor (after the resizing). It can be changed
+ *				to determine another height to be used instead.
+ */

+ 101 - 0
web/js/ckeditor/_source/plugins/basicstyles/plugin.js

@@ -0,0 +1,101 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.add( 'basicstyles',
+{
+	requires : [ 'styles', 'button' ],
+
+	init : function( editor )
+	{
+		// All buttons use the same code to register. So, to avoid
+		// duplications, let's use this tool function.
+		var addButtonCommand = function( buttonName, buttonLabel, commandName, styleDefiniton )
+		{
+			var style = new CKEDITOR.style( styleDefiniton );
+
+			editor.attachStyleStateChange( style, function( state )
+				{
+					!editor.readOnly && editor.getCommand( commandName ).setState( state );
+				});
+
+			editor.addCommand( commandName, new CKEDITOR.styleCommand( style ) );
+
+			editor.ui.addButton( buttonName,
+				{
+					label : buttonLabel,
+					command : commandName
+				});
+		};
+
+		var config = editor.config,
+			lang = editor.lang;
+
+		addButtonCommand( 'Bold'		, lang.bold		, 'bold'		, config.coreStyles_bold );
+		addButtonCommand( 'Italic'		, lang.italic		, 'italic'		, config.coreStyles_italic );
+		addButtonCommand( 'Underline'	, lang.underline		, 'underline'	, config.coreStyles_underline );
+		addButtonCommand( 'Strike'		, lang.strike		, 'strike'		, config.coreStyles_strike );
+		addButtonCommand( 'Subscript'	, lang.subscript		, 'subscript'	, config.coreStyles_subscript );
+		addButtonCommand( 'Superscript'	, lang.superscript		, 'superscript'	, config.coreStyles_superscript );
+	}
+});
+
+// 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
+ * config.coreStyles_italic = { element : 'i', overrides : 'em' };
+ * @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' };

+ 223 - 0
web/js/ckeditor/_source/plugins/clipboard/dialogs/paste.js

@@ -0,0 +1,223 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add( 'paste', function( editor )
+{
+	var lang = editor.lang.clipboard;
+	var isCustomDomain = CKEDITOR.env.isCustomDomain();
+
+	function onPasteFrameLoad( win )
+	{
+		var doc = new CKEDITOR.dom.document( win.document ),
+			docElement = doc.$;
+
+		var script = doc.getById( 'cke_actscrpt' );
+		script && script.remove();
+
+		CKEDITOR.env.ie ?
+			docElement.body.contentEditable = "true" :
+			docElement.designMode = "on";
+
+		// IE before version 8 will leave cursor blinking inside the document after
+		// editor blurred unless we clean up the selection. (#4716)
+		if ( CKEDITOR.env.ie && CKEDITOR.env.version < 8 )
+		{
+			doc.getWindow().on( 'blur', function()
+			{
+				docElement.selection.empty();
+			} );
+		}
+
+		doc.on( "keydown", function( e )
+		{
+			var domEvent = e.data,
+				key = domEvent.getKeystroke(),
+				processed;
+
+			switch( key )
+			{
+				case 27 :
+					this.hide();
+					processed = 1;
+					break;
+
+				case 9 :
+				case CKEDITOR.SHIFT + 9 :
+					this.changeFocus( true );
+					processed = 1;
+			}
+
+			processed && domEvent.preventDefault();
+		}, this );
+
+		editor.fire( 'ariaWidget', new CKEDITOR.dom.element( win.frameElement ) );
+	}
+
+	return {
+		title : lang.title,
+
+		minWidth : CKEDITOR.env.ie && CKEDITOR.env.quirks ? 370 : 350,
+		minHeight : CKEDITOR.env.quirks ? 250 : 245,
+		onShow : function()
+		{
+			// FIREFOX BUG: Force the browser to render the dialog to make the to-be-
+			// inserted iframe editable. (#3366)
+			this.parts.dialog.$.offsetHeight;
+
+			this.setupContent();
+		},
+
+		onHide : function()
+		{
+			if ( CKEDITOR.env.ie )
+				this.getParentEditor().document.getBody().$.contentEditable = 'true';
+		},
+
+		onLoad : function()
+		{
+			if ( ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) && editor.lang.dir == 'rtl' )
+				this.parts.contents.setStyle( 'overflow', 'hidden' );
+		},
+
+		onOk : function()
+		{
+			this.commitContent();
+		},
+
+		contents : [
+			{
+				id : 'general',
+				label : editor.lang.common.generalTab,
+				elements : [
+					{
+						type : 'html',
+						id : 'securityMsg',
+						html : '<div style="white-space:normal;width:340px;">' + lang.securityMsg + '</div>'
+					},
+					{
+						type : 'html',
+						id : 'pasteMsg',
+						html : '<div style="white-space:normal;width:340px;">'+lang.pasteMsg +'</div>'
+					},
+					{
+						type : 'html',
+						id : 'editing_area',
+						style : 'width: 100%; height: 100%;',
+						html : '',
+						focus : function()
+						{
+							var win = this.getInputElement().$.contentWindow;
+
+							// #3291 : JAWS needs the 500ms delay to detect that the editor iframe
+							// iframe is no longer editable. So that it will put the focus into the
+							// Paste from Word dialog's editable area instead.
+							setTimeout( function()
+							{
+								win.focus();
+							}, 500 );
+						},
+						setup : function()
+						{
+							var dialog = this.getDialog();
+							var htmlToLoad =
+								'<html dir="' + editor.config.contentsLangDirection + '"' +
+								' lang="' + ( editor.config.contentsLanguage || editor.langCode ) + '">' +
+								'<head><style>body { margin: 3px; height: 95%; } </style></head><body>' +
+								'<script id="cke_actscrpt" type="text/javascript">' +
+								'window.parent.CKEDITOR.tools.callFunction( ' + CKEDITOR.tools.addFunction( onPasteFrameLoad, dialog ) + ', this );' +
+								'</script></body>' +
+								'</html>';
+
+							var src =
+								CKEDITOR.env.air ?
+									'javascript:void(0)' :
+								isCustomDomain ?
+									'javascript:void((function(){' +
+										'document.open();' +
+										'document.domain=\'' + document.domain + '\';' +
+										'document.close();' +
+									'})())"'
+								:
+									'';
+
+							var iframe = CKEDITOR.dom.element.createFromHtml(
+								'<iframe' +
+									' class="cke_pasteframe"' +
+									' frameborder="0" ' +
+									' allowTransparency="true"' +
+									' src="' + src + '"' +
+									' role="region"' +
+									' aria-label="' + lang.pasteArea + '"' +
+									' aria-describedby="' + dialog.getContentElement( 'general', 'pasteMsg' ).domId + '"' +
+									' aria-multiple="true"' +
+									'></iframe>' );
+
+							iframe.on( 'load', function( e )
+							{
+								e.removeListener();
+
+								var doc = iframe.getFrameDocument();
+								doc.write( htmlToLoad );
+
+								if ( CKEDITOR.env.air )
+									onPasteFrameLoad.call( this, doc.getWindow().$ );
+							}, dialog );
+
+							iframe.setCustomData( 'dialog', dialog );
+
+							var container = this.getElement();
+							container.setHtml( '' );
+							container.append( iframe );
+
+							// IE need a redirect on focus to make
+							// the cursor blinking inside iframe. (#5461)
+							if ( CKEDITOR.env.ie )
+							{
+								var focusGrabber = CKEDITOR.dom.element.createFromHtml( '<span tabindex="-1" style="position:absolute;" role="presentation"></span>' );
+								focusGrabber.on( 'focus', function()
+								{
+									iframe.$.contentWindow.focus();
+								});
+								container.append( focusGrabber );
+
+								// Override focus handler on field.
+								this.focus = function()
+								{
+									focusGrabber.focus();
+									this.fire( 'focus' );
+								};
+							}
+
+							this.getInputElement = function(){ return iframe; };
+
+							// Force container to scale in IE.
+							if ( CKEDITOR.env.ie )
+							{
+								container.setStyle( 'display', 'block' );
+								container.setStyle( 'height', ( iframe.$.offsetHeight + 2 ) + 'px' );
+							}
+						},
+						commit : function( data )
+						{
+							var container = this.getElement(),
+								editor = this.getDialog().getParentEditor(),
+								body = this.getInputElement().getFrameDocument().getBody(),
+								bogus = body.getBogus(),
+								html;
+							bogus && bogus.remove();
+
+							// Saving the contents so changes until paste is complete will not take place (#7500)
+							html = body.getHtml();
+
+							setTimeout( function(){
+								editor.fire( 'paste', { 'html' : html } );
+							}, 0 );
+						}
+					}
+				]
+			}
+		]
+	};
+});

+ 294 - 0
web/js/ckeditor/_source/plugins/colorbutton/plugin.js

@@ -0,0 +1,294 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.add( 'colorbutton',
+{
+	requires : [ 'panelbutton', 'floatpanel', 'styles' ],
+
+	init : function( editor )
+	{
+		var config = editor.config,
+			lang = editor.lang.colorButton;
+
+		var clickFn;
+
+		if ( !CKEDITOR.env.hc )
+		{
+			addButton( 'TextColor', 'fore', lang.textColorTitle );
+			addButton( 'BGColor', 'back', lang.bgColorTitle );
+		}
+
+		function addButton( name, type, title )
+		{
+			var colorBoxId = CKEDITOR.tools.getNextId() + '_colorBox';
+			editor.ui.add( name, CKEDITOR.UI_PANELBUTTON,
+				{
+					label : title,
+					title : title,
+					className : 'cke_button_' + name.toLowerCase(),
+					modes : { wysiwyg : 1 },
+
+					panel :
+					{
+						css : editor.skin.editor.css,
+						attributes : { role : 'listbox', 'aria-label' : lang.panelTitle }
+					},
+
+					onBlock : function( panel, block )
+					{
+						block.autoSize = true;
+						block.element.addClass( 'cke_colorblock' );
+						block.element.setHtml( renderColors( panel, type, colorBoxId ) );
+						// The block should not have scrollbars (#5933, #6056)
+						block.element.getDocument().getBody().setStyle( 'overflow', 'hidden' );
+
+						CKEDITOR.ui.fire( 'ready', this );
+
+						var keys = block.keys;
+						var rtl = editor.lang.dir == 'rtl';
+						keys[ rtl ? 37 : 39 ]	= 'next';					// ARROW-RIGHT
+						keys[ 40 ]	= 'next';					// ARROW-DOWN
+						keys[ 9 ]	= 'next';					// TAB
+						keys[ rtl ? 39 : 37 ]	= 'prev';					// ARROW-LEFT
+						keys[ 38 ]	= 'prev';					// ARROW-UP
+						keys[ CKEDITOR.SHIFT + 9 ]	= 'prev';	// SHIFT + TAB
+						keys[ 32 ]	= 'click';					// SPACE
+					},
+
+					// The automatic colorbox should represent the real color (#6010)
+					onOpen : function()
+					{
+						var selection = editor.getSelection(),
+							block = selection && selection.getStartElement(),
+							path = new CKEDITOR.dom.elementPath( block ),
+							color;
+
+						// Find the closest block element.
+						block = path.block || path.blockLimit || editor.document.getBody();
+
+						// The background color might be transparent. In that case, look up the color in the DOM tree.
+						do
+						{
+							color = block && block.getComputedStyle( type == 'back' ? 'background-color' : 'color' ) || 'transparent';
+						}
+						while ( type == 'back' && color == 'transparent' && block && ( block = block.getParent() ) );
+
+						// The box should never be transparent.
+						if ( !color || color == 'transparent' )
+							color = '#ffffff';
+
+						this._.panel._.iframe.getFrameDocument().getById( colorBoxId ).setStyle( 'background-color', color );
+					}
+				});
+		}
+
+
+		function renderColors( panel, type, colorBoxId )
+		{
+			var output = [],
+				colors = config.colorButton_colors.split( ',' ),
+				total = colors.length + ( config.colorButton_enableMore ? 2 : 1 );
+
+			var clickFn = CKEDITOR.tools.addFunction( function( color, type )
+				{
+					if ( color == '?' )
+					{
+						var applyColorStyle = arguments.callee;
+						function onColorDialogClose( evt )
+						{
+							this.removeListener( 'ok', onColorDialogClose );
+							this.removeListener( 'cancel', onColorDialogClose );
+
+							evt.name == 'ok' && applyColorStyle( this.getContentElement( 'picker', 'selectedColor' ).getValue(), type );
+						}
+
+						editor.openDialog( 'colordialog', function()
+						{
+							this.on( 'ok', onColorDialogClose );
+							this.on( 'cancel', onColorDialogClose );
+						} );
+
+						return;
+					}
+
+					editor.focus();
+
+					panel.hide( false );
+
+					editor.fire( 'saveSnapshot' );
+
+					// Clean up any conflicting style within the range.
+					new CKEDITOR.style( config['colorButton_' + type + 'Style'], { color : 'inherit' } ).remove( editor.document );
+
+					if ( color )
+					{
+						var colorStyle = config['colorButton_' + type + 'Style'];
+
+						colorStyle.childRule = type == 'back' ?
+							function( element )
+							{
+								// It's better to apply background color as the innermost style. (#3599)
+								// Except for "unstylable elements". (#6103)
+								return isUnstylable( element );
+							}
+							:
+							function( element )
+							{
+								// Fore color style must be applied inside links instead of around it.
+								return element.getName() != 'a' || isUnstylable( element );
+							};
+
+						new CKEDITOR.style( colorStyle, { color : color } ).apply( editor.document );
+					}
+
+					editor.fire( 'saveSnapshot' );
+				});
+
+			// Render the "Automatic" button.
+			output.push(
+				'<a class="cke_colorauto" _cke_focus=1 hidefocus=true' +
+					' title="', lang.auto, '"' +
+					' onclick="CKEDITOR.tools.callFunction(', clickFn, ',null,\'', type, '\');return false;"' +
+					' href="javascript:void(\'', lang.auto, '\')"' +
+					' role="option" aria-posinset="1" aria-setsize="', total, '">' +
+					'<table role="presentation" cellspacing=0 cellpadding=0 width="100%">' +
+						'<tr>' +
+							'<td>' +
+								'<span class="cke_colorbox" id="', colorBoxId, '"></span>' +
+							'</td>' +
+							'<td colspan=7 align=center>',
+								lang.auto,
+							'</td>' +
+						'</tr>' +
+					'</table>' +
+				'</a>' +
+				'<table role="presentation" cellspacing=0 cellpadding=0 width="100%">' );
+
+			// Render the color boxes.
+			for ( var i = 0 ; i < colors.length ; i++ )
+			{
+				if ( ( i % 8 ) === 0 )
+					output.push( '</tr><tr>' );
+
+				var parts = colors[ i ].split( '/' ),
+					colorName = parts[ 0 ],
+					colorCode = parts[ 1 ] || colorName;
+
+				// The data can be only a color code (without #) or colorName + color code
+				// If only a color code is provided, then the colorName is the color with the hash
+				// Convert the color from RGB to RRGGBB for better compatibility with IE and <font>. See #5676
+				if (!parts[1])
+					colorName = '#' + colorName.replace( /^(.)(.)(.)$/, '$1$1$2$2$3$3' );
+
+				var colorLabel = editor.lang.colors[ colorCode ] || colorCode;
+				output.push(
+					'<td>' +
+						'<a class="cke_colorbox" _cke_focus=1 hidefocus=true' +
+							' title="', colorLabel, '"' +
+							' onclick="CKEDITOR.tools.callFunction(', clickFn, ',\'', colorName, '\',\'', type, '\'); return false;"' +
+							' href="javascript:void(\'', colorLabel, '\')"' +
+							' role="option" aria-posinset="', ( i + 2 ), '" aria-setsize="', total, '">' +
+							'<span class="cke_colorbox" style="background-color:#', colorCode, '"></span>' +
+						'</a>' +
+					'</td>' );
+			}
+
+			// Render the "More Colors" button.
+			if ( config.colorButton_enableMore === undefined || config.colorButton_enableMore )
+			{
+				output.push(
+					'</tr>' +
+					'<tr>' +
+						'<td colspan=8 align=center>' +
+							'<a class="cke_colormore" _cke_focus=1 hidefocus=true' +
+								' title="', lang.more, '"' +
+								' onclick="CKEDITOR.tools.callFunction(', clickFn, ',\'?\',\'', type, '\');return false;"' +
+								' href="javascript:void(\'', lang.more, '\')"',
+								' role="option" aria-posinset="', total, '" aria-setsize="', total, '">',
+								lang.more,
+							'</a>' +
+						'</td>' );	// tr is later in the code.
+			}
+
+			output.push( '</tr></table>' );
+
+			return output.join( '' );
+		}
+
+		function isUnstylable( ele )
+		{
+			return ( ele.getAttribute( 'contentEditable' ) == 'false' ) || ele.getAttribute( 'data-nostyle' );
+		}
+	}
+});
+
+/**
+ * Whether to enable the "More Colors..." button in the color selectors.
+ * @name CKEDITOR.config.colorButton_enableMore
+ * @default true
+ * @type Boolean
+ * @example
+ * config.colorButton_enableMore = false;
+ */
+
+/**
+ * Defines the colors to be displayed in the color selectors. It's a string
+ * containing the hexadecimal notation for HTML colors, without the "#" prefix.
+ *
+ * Since 3.3: A name may be optionally defined by prefixing the entries with the
+ * name and the slash character. For example, "FontColor1/FF9900" will be
+ * displayed as the color #FF9900 in the selector, but will be outputted as "FontColor1".
+ * @name CKEDITOR.config.colorButton_colors
+ * @type String
+ * @default '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'
+ * @example
+ * // Brazil colors only.
+ * config.colorButton_colors = '00923E,F8C100,28166F';
+ * @example
+ * config.colorButton_colors = 'FontColor1/FF9900,FontColor2/0066CC,FontColor3/F00'
+ */
+CKEDITOR.config.colorButton_colors =
+	'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';
+
+/**
+ * Holds the style definition to be used to apply the text foreground color.
+ * @name CKEDITOR.config.colorButton_foreStyle
+ * @type Object
+ * @example
+ * // This is basically the default setting value.
+ * config.colorButton_foreStyle =
+ *     {
+ *         element : 'span',
+ *         styles : { 'color' : '#(color)' }
+ *     };
+ */
+CKEDITOR.config.colorButton_foreStyle =
+	{
+		element		: 'span',
+		styles		: { 'color' : '#(color)' },
+		overrides	: [ { element : 'font', attributes : { 'color' : null } } ]
+	};
+
+/**
+ * Holds the style definition to be used to apply the text background color.
+ * @name CKEDITOR.config.colorButton_backStyle
+ * @type Object
+ * @example
+ * // This is basically the default setting value.
+ * config.colorButton_backStyle =
+ *     {
+ *         element : 'span',
+ *         styles : { 'background-color' : '#(color)' }
+ *     };
+ */
+CKEDITOR.config.colorButton_backStyle =
+	{
+		element		: 'span',
+		styles		: { 'background-color' : '#(color)' }
+	};

+ 340 - 0
web/js/ckeditor/_source/plugins/colordialog/dialogs/colordialog.js

@@ -0,0 +1,340 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add( 'colordialog', function( editor )
+	{
+		// Define some shorthands.
+		var $el = CKEDITOR.dom.element,
+			$doc = CKEDITOR.document,
+			$tools = CKEDITOR.tools,
+			lang = editor.lang.colordialog;
+
+		// Reference the dialog.
+		var dialog;
+
+		var spacer =
+		{
+			type : 'html',
+			html : '&nbsp;'
+		};
+
+		function clearSelected()
+		{
+			$doc.getById( selHiColorId ).removeStyle( 'background-color' );
+			dialog.getContentElement( 'picker', 'selectedColor' ).setValue( '' );
+		}
+
+		function updateSelected( evt )
+		{
+			if ( ! ( evt instanceof CKEDITOR.dom.event ) )
+				evt = new CKEDITOR.dom.event( evt );
+
+			var target = evt.getTarget(),
+				color;
+
+			if ( target.getName() == 'a' && ( color = target.getChild( 0 ).getHtml() ) )
+				dialog.getContentElement( 'picker', 'selectedColor' ).setValue( color );
+		}
+
+		function updateHighlight( event )
+		{
+			if ( ! ( event instanceof CKEDITOR.dom.event ) )
+				event = event.data;
+
+			var target = event.getTarget(),
+					color;
+
+			if ( target.getName() == 'a' && ( color = target.getChild( 0 ).getHtml() ) )
+			{
+				$doc.getById( hicolorId ).setStyle( 'background-color', color );
+				$doc.getById( hicolorTextId ).setHtml( color );
+			}
+		}
+
+		function clearHighlight()
+		{
+			$doc.getById( hicolorId ).removeStyle( 'background-color' );
+			$doc.getById( hicolorTextId ).setHtml( '&nbsp;' );
+		}
+
+		var onMouseout = $tools.addFunction( clearHighlight ),
+			onClick = updateSelected,
+			onClickHandler = CKEDITOR.tools.addFunction( onClick ),
+			onFocus = updateHighlight,
+			onBlur = clearHighlight;
+
+		var onKeydownHandler = CKEDITOR.tools.addFunction( function( ev )
+		{
+			ev = new CKEDITOR.dom.event( ev );
+			var element = ev.getTarget();
+			var relative, nodeToMove;
+			var keystroke = ev.getKeystroke(),
+				rtl = editor.lang.dir == 'rtl';
+
+			switch ( keystroke )
+			{
+				// UP-ARROW
+				case 38 :
+					// relative is TR
+					if ( ( relative = element.getParent().getParent().getPrevious() ) )
+					{
+						nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] );
+						nodeToMove.focus();
+						onBlur( ev, element );
+						onFocus( ev, nodeToMove );
+					}
+					ev.preventDefault();
+					break;
+				// DOWN-ARROW
+				case 40 :
+					// relative is TR
+					if ( ( relative = element.getParent().getParent().getNext() ) )
+					{
+						nodeToMove = relative.getChild( [ element.getParent().getIndex(), 0 ] );
+						if ( nodeToMove && nodeToMove.type == 1 )
+						{
+							nodeToMove.focus();
+							onBlur( ev, element );
+							onFocus( ev, nodeToMove );
+						}
+					}
+					ev.preventDefault();
+					break;
+				// SPACE
+				// ENTER is already handled as onClick
+				case 32 :
+					onClick( ev );
+					ev.preventDefault();
+					break;
+
+				// RIGHT-ARROW
+				case rtl ? 37 : 39 :
+					// relative is TD
+					if ( ( relative = element.getParent().getNext() ) )
+					{
+						nodeToMove = relative.getChild( 0 );
+						if ( nodeToMove.type == 1 )
+						{
+							nodeToMove.focus();
+							onBlur( ev, element );
+							onFocus( ev, nodeToMove );
+							ev.preventDefault( true );
+						}
+						else
+							onBlur( null, element );
+					}
+					// relative is TR
+					else if ( ( relative = element.getParent().getParent().getNext() ) )
+					{
+						nodeToMove = relative.getChild( [ 0, 0 ] );
+						if ( nodeToMove && nodeToMove.type == 1 )
+						{
+							nodeToMove.focus();
+							onBlur( ev, element );
+							onFocus( ev, nodeToMove );
+							ev.preventDefault( true );
+						}
+						else
+							onBlur( null, element );
+					}
+					break;
+
+				// LEFT-ARROW
+				case rtl ? 39 : 37 :
+					// relative is TD
+					if ( ( relative = element.getParent().getPrevious() ) )
+					{
+						nodeToMove = relative.getChild( 0 );
+						nodeToMove.focus();
+						onBlur( ev, element );
+						onFocus( ev, nodeToMove );
+						ev.preventDefault( true );
+					}
+					// relative is TR
+					else if ( ( relative = element.getParent().getParent().getPrevious() ) )
+					{
+						nodeToMove = relative.getLast().getChild( 0 );
+						nodeToMove.focus();
+						onBlur( ev, element );
+						onFocus( ev, nodeToMove );
+						ev.preventDefault( true );
+					}
+					else
+						onBlur( null, element );
+					break;
+				default :
+					// Do not stop not handled events.
+					return;
+			}
+		});
+
+		function createColorTable()
+		{
+			// Create the base colors array.
+			var aColors = [ '00', '33', '66', '99', 'cc', 'ff' ];
+
+			// This function combines two ranges of three values from the color array into a row.
+			function appendColorRow( rangeA, rangeB )
+			{
+				for ( var i = rangeA ; i < rangeA + 3 ; i++ )
+				{
+					var row = table.$.insertRow( -1 );
+
+					for ( var j = rangeB ; j < rangeB + 3 ; j++ )
+					{
+						for ( var n = 0 ; n < 6 ; n++ )
+						{
+							appendColorCell( row, '#' + aColors[j] + aColors[n] + aColors[i] );
+						}
+					}
+				}
+			}
+
+			// This function create a single color cell in the color table.
+			function appendColorCell( targetRow, color )
+			{
+				var cell = new $el( targetRow.insertCell( -1 ) );
+				cell.setAttribute( 'class', 'ColorCell' );
+				cell.setStyle( 'background-color', color );
+
+				cell.setStyle( 'width', '15px' );
+				cell.setStyle( 'height', '15px' );
+
+				var index = cell.$.cellIndex + 1 + 18 * targetRow.rowIndex;
+				cell.append( CKEDITOR.dom.element.createFromHtml(
+						'<a href="javascript: void(0);" role="option"' +
+						' aria-posinset="' + index + '"' +
+						' aria-setsize="' + 13 * 18 + '"' +
+						' style="cursor: pointer;display:block;width:100%;height:100% " title="'+ CKEDITOR.tools.htmlEncode( color )+ '"' +
+						' onkeydown="CKEDITOR.tools.callFunction( ' + onKeydownHandler + ', event, this )"' +
+						' onclick="CKEDITOR.tools.callFunction(' + onClickHandler + ', event, this ); return false;"' +
+						' tabindex="-1"><span class="cke_voice_label">' + color + '</span>&nbsp;</a>', CKEDITOR.document ) );
+			}
+
+			appendColorRow( 0, 0 );
+			appendColorRow( 3, 0 );
+			appendColorRow( 0, 3 );
+			appendColorRow( 3, 3 );
+
+			// Create the last row.
+			var oRow = table.$.insertRow(-1) ;
+
+			// Create the gray scale colors cells.
+			for ( var n = 0 ; n < 6 ; n++ )
+			{
+				appendColorCell( oRow, '#' + aColors[n] + aColors[n] + aColors[n] ) ;
+			}
+
+			// Fill the row with black cells.
+			for ( var i = 0 ; i < 12 ; i++ )
+			{
+				appendColorCell( oRow, '#000000' ) ;
+			}
+		}
+
+		var table = new $el( 'table' );
+		createColorTable();
+		var html = table.getHtml();
+
+		var numbering = function( id )
+			{
+				return CKEDITOR.tools.getNextId() + '_' + id;
+			},
+			hicolorId = numbering( 'hicolor' ),
+			hicolorTextId = numbering( 'hicolortext' ),
+			selHiColorId = numbering( 'selhicolor' ),
+			tableLabelId = numbering( 'color_table_label' );
+
+		return {
+			title : lang.title,
+			minWidth : 360,
+			minHeight : 220,
+			onLoad : function()
+			{
+				// Update reference.
+				dialog = this;
+			},
+			contents : [
+				{
+					id : 'picker',
+					label : lang.title,
+					accessKey : 'I',
+					elements :
+					[
+						{
+							type : 'hbox',
+							padding : 0,
+							widths : [ '70%', '10%', '30%' ],
+							children :
+							[
+								{
+									type : 'html',
+									html :	'<table role="listbox" aria-labelledby="' + tableLabelId + '" onmouseout="CKEDITOR.tools.callFunction( ' + onMouseout + ' );">' +
+											( !CKEDITOR.env.webkit ? html : '' ) +
+										'</table><span id="' + tableLabelId + '" class="cke_voice_label">' + lang.options +'</span>',
+									onLoad : function()
+									{
+										var table = CKEDITOR.document.getById( this.domId );
+										table.on( 'mouseover', updateHighlight );
+										// In WebKit, the table content must be inserted after this event call (#6150)
+										CKEDITOR.env.webkit && table.setHtml( html );
+									},
+									focus: function()
+									{
+										var firstColor = this.getElement().getElementsByTag( 'a' ).getItem( 0 );
+										firstColor.focus();
+									}
+								},
+								spacer,
+								{
+									type : 'vbox',
+									padding : 0,
+									widths : [ '70%', '5%', '25%' ],
+									children :
+									[
+										{
+											type : 'html',
+											html : '<span>' + lang.highlight +'</span>\
+												<div id="' + hicolorId + '" style="border: 1px solid; height: 74px; width: 74px;"></div>\
+												<div id="' + hicolorTextId + '">&nbsp;</div><span>' + lang.selected + '</span>\
+												<div id="' + selHiColorId + '" style="border: 1px solid; height: 20px; width: 74px;"></div>'
+										},
+										{
+											type : 'text',
+											label : lang.selected,
+											labelStyle: 'display:none',
+											id : 'selectedColor',
+											style : 'width: 74px',
+											onChange : function()
+											{
+												// Try to update color preview with new value. If fails, then set it no none.
+												try
+												{
+													$doc.getById( selHiColorId ).setStyle( 'background-color', this.getValue() );
+												}
+												catch ( e )
+												{
+													clearSelected();
+												}
+											}
+										},
+										spacer,
+										{
+											type : 'button',
+											id : 'clear',
+											style : 'margin-top: 5px',
+											label : lang.clear,
+											onClick : clearSelected
+										}
+									]
+								}
+							]
+						}
+					]
+				}
+			]
+		};
+	}
+	);

+ 15 - 0
web/js/ckeditor/_source/plugins/colordialog/plugin.js

@@ -0,0 +1,15 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.colordialog =
+{
+	init : function( editor )
+	{
+		editor.addCommand( 'colordialog', new CKEDITOR.dialogCommand( 'colordialog' ) );
+		CKEDITOR.dialog.add( 'colordialog', this.path + 'dialogs/colordialog.js' );
+	}
+};
+
+CKEDITOR.plugins.add( 'colordialog', CKEDITOR.plugins.colordialog );

+ 177 - 0
web/js/ckeditor/_source/plugins/contextmenu/plugin.js

@@ -0,0 +1,177 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.add( 'contextmenu',
+{
+	requires : [ 'menu' ],
+
+	// Make sure the base class (CKEDITOR.menu) is loaded before it (#3318).
+	onLoad : function()
+	{
+		CKEDITOR.plugins.contextMenu = CKEDITOR.tools.createClass(
+		{
+			base : CKEDITOR.menu,
+
+			$ : function( editor )
+			{
+				this.base.call( this, editor,
+				{
+					panel:
+					{
+						className : editor.skinClass + ' cke_contextmenu',
+						attributes :
+						{
+							'aria-label' : editor.lang.contextmenu.options
+						}
+					}
+				});
+			},
+
+			proto :
+			{
+				addTarget : function( element, nativeContextMenuOnCtrl )
+				{
+					// Opera doesn't support 'contextmenu' event, we have duo approaches employed here:
+					// 1. Inherit the 'button override' hack we introduced in v2 (#4530), while this require the Opera browser
+					//  option 'Allow script to detect context menu/right click events' to be always turned on.
+					// 2. Considering the fact that ctrl/meta key is not been occupied
+					//  for multiple range selecting (like Gecko), we use this key
+					//  combination as a fallback for triggering context-menu. (#4530)
+					if ( CKEDITOR.env.opera && !( 'oncontextmenu' in document.body ))
+					{
+						var contextMenuOverrideButton;
+						element.on( 'mousedown', function( evt )
+						{
+							evt = evt.data;
+							if ( evt.$.button != 2 )
+							{
+								if ( evt.getKeystroke() == CKEDITOR.CTRL + 1 )
+									element.fire( 'contextmenu', evt );
+								return;
+							}
+
+							if ( nativeContextMenuOnCtrl
+								 && ( CKEDITOR.env.mac ? evt.$.metaKey : evt.$.ctrlKey ) )
+								return;
+
+							var target = evt.getTarget();
+
+							if ( !contextMenuOverrideButton )
+							{
+								var ownerDoc =  target.getDocument();
+								contextMenuOverrideButton = ownerDoc.createElement( 'input' ) ;
+								contextMenuOverrideButton.$.type = 'button' ;
+								ownerDoc.getBody().append( contextMenuOverrideButton ) ;
+							}
+
+							contextMenuOverrideButton.setAttribute( 'style', 'position:absolute;top:' + ( evt.$.clientY - 2 ) +
+								'px;left:' + ( evt.$.clientX - 2 ) +
+								'px;width:5px;height:5px;opacity:0.01' );
+
+						} );
+
+						element.on( 'mouseup', function ( evt )
+						{
+							if ( contextMenuOverrideButton )
+							{
+								contextMenuOverrideButton.remove();
+								contextMenuOverrideButton = undefined;
+								// Simulate 'contextmenu' event.
+								element.fire( 'contextmenu', evt.data );
+							}
+						} );
+					}
+
+					element.on( 'contextmenu', function( event )
+						{
+							var domEvent = event.data;
+
+							if ( nativeContextMenuOnCtrl &&
+								 // Safari on Windows always show 'ctrlKey' as true in 'contextmenu' event,
+								// which make this property unreliable. (#4826)
+								 ( CKEDITOR.env.webkit ? holdCtrlKey : ( CKEDITOR.env.mac ? domEvent.$.metaKey : domEvent.$.ctrlKey ) ) )
+								return;
+
+
+							// Cancel the browser context menu.
+							domEvent.preventDefault();
+
+							var offsetParent = domEvent.getTarget().getDocument().getDocumentElement(),
+								offsetX = domEvent.$.clientX,
+								offsetY = domEvent.$.clientY;
+
+							CKEDITOR.tools.setTimeout( function()
+								{
+									this.open( offsetParent, null, offsetX, offsetY );
+								},
+								0, this );
+						},
+						this );
+
+					if ( CKEDITOR.env.opera )
+					{
+						// 'contextmenu' event triggered by Windows menu key is unpreventable,
+						// cancel the key event itself. (#6534)
+						element.on( 'keypress' , function ( evt )
+						{
+							var domEvent = evt.data;
+
+							if ( domEvent.$.keyCode === 0 )
+								domEvent.preventDefault();
+						});
+					}
+
+					if ( CKEDITOR.env.webkit )
+					{
+						var holdCtrlKey,
+							onKeyDown = function( event )
+							{
+								holdCtrlKey = CKEDITOR.env.mac ? event.data.$.metaKey : event.data.$.ctrlKey ;
+							},
+							resetOnKeyUp = function()
+							{
+								holdCtrlKey = 0;
+							};
+
+						element.on( 'keydown', onKeyDown );
+						element.on( 'keyup', resetOnKeyUp );
+						element.on( 'contextmenu', resetOnKeyUp );
+					}
+				},
+
+				open : function( offsetParent, corner, offsetX, offsetY )
+				{
+					this.editor.focus();
+					offsetParent = offsetParent || CKEDITOR.document.getDocumentElement();
+					this.show( offsetParent, corner, offsetX, offsetY );
+				}
+			}
+		});
+	},
+
+	beforeInit : function( editor )
+	{
+		editor.contextMenu = new CKEDITOR.plugins.contextMenu( editor );
+
+		editor.addCommand( 'contextMenu',
+			{
+				exec : function()
+					{
+						editor.contextMenu.open( editor.document.getBody() );
+					}
+			});
+	}
+});
+
+/**
+ * Whether to show the browser native context menu when the CTRL or the
+ * META (Mac) key is pressed while opening the context menu.
+ * @name CKEDITOR.config.browserContextMenuOnCtrl
+ * @since 3.0.2
+ * @type Boolean
+ * @default true
+ * @example
+ * config.browserContextMenuOnCtrl = false;
+ */

+ 16 - 0
web/js/ckeditor/_source/plugins/devtools/lang/en.js

@@ -0,0 +1,16 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.setLang( 'devtools', 'en',
+{
+	devTools :
+	{
+		title		: 'Element Information',
+		dialogName	: 'Dialog window name',
+		tabName		: 'Tab name',
+		elementId	: 'Element ID',
+		elementType	: 'Element type'
+	}
+});

+ 173 - 0
web/js/ckeditor/_source/plugins/devtools/plugin.js

@@ -0,0 +1,173 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.plugins.add( 'devtools',
+{
+	lang : [ 'en' ],
+
+	init : function( editor )
+	{
+		editor._.showDialogDefinitionTooltips = 1;
+	},
+	onLoad : function()
+	{
+		CKEDITOR.document.appendStyleText( CKEDITOR.config.devtools_styles ||
+							'#cke_tooltip { padding: 5px; border: 2px solid #333; background: #ffffff }' +
+							'#cke_tooltip h2 { font-size: 1.1em; border-bottom: 1px solid; margin: 0; padding: 1px; }' +
+							'#cke_tooltip ul { padding: 0pt; list-style-type: none; }' );
+	}
+});
+
+(function()
+{
+	function defaultCallback( editor, dialog, element, tabName )
+	{
+		var lang = editor.lang.devTools,
+			link = '<a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.definition.' +
+					( element ? ( element.type == 'text' ? 'textInput' : element.type ) : 'content' ) +
+					'.html" target="_blank">' + ( element ? element.type : 'content' ) + '</a>',
+			str =
+				'<h2>' + lang.title + '</h2>' +
+				'<ul>' +
+					'<li><strong>' + lang.dialogName + '</strong> : ' + dialog.getName() + '</li>' +
+					'<li><strong>' + lang.tabName + '</strong> : ' + tabName + '</li>';
+
+		if ( element )
+			str += '<li><strong>' + lang.elementId + '</strong> : ' + element.id + '</li>';
+
+		str += '<li><strong>' + lang.elementType + '</strong> : ' + link + '</li>';
+
+		return str + '</ul>';
+	}
+
+	function showTooltip( callback, el, editor, dialog, obj, tabName )
+	{
+		var pos = el.getDocumentPosition(),
+			styles = { 'z-index' : CKEDITOR.dialog._.currentZIndex + 10, top : ( pos.y + el.getSize( 'height' ) ) + 'px' };
+
+		tooltip.setHtml( callback( editor, dialog, obj, tabName ) );
+		tooltip.show();
+
+		// Translate coordinate for RTL.
+		if ( editor.lang.dir == 'rtl' )
+		{
+			var viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize();
+			styles.right = ( viewPaneSize.width - pos.x - el.getSize( 'width' ) ) + 'px';
+		}
+		else
+			styles.left = pos.x + 'px';
+
+		tooltip.setStyles( styles );
+	}
+
+	var tooltip;
+	CKEDITOR.on( 'reset', function()
+	{
+		tooltip && tooltip.remove();
+		tooltip = null;
+	});
+
+	CKEDITOR.on( 'dialogDefinition', function( evt )
+	{
+		var editor = evt.editor;
+		if ( editor._.showDialogDefinitionTooltips )
+		{
+			if ( !tooltip )
+			{
+				tooltip = CKEDITOR.dom.element.createFromHtml( '<div id="cke_tooltip" tabindex="-1" style="position: absolute"></div>', CKEDITOR.document );
+				tooltip.hide();
+				tooltip.on( 'mouseover', function(){ this.show(); } );
+				tooltip.on( 'mouseout', function(){ this.hide(); } );
+				tooltip.appendTo( CKEDITOR.document.getBody() );
+			}
+
+			var dialog = evt.data.definition.dialog,
+				callback = editor.config.devtools_textCallback || defaultCallback;
+
+			dialog.on( 'load', function()
+			{
+				var tabs = dialog.parts.tabs.getChildren(), tab;
+				for ( var i = 0, len = tabs.count(); i < len; i++ )
+				{
+					tab = tabs.getItem( i );
+					tab.on( 'mouseover', function()
+					{
+						var id = this.$.id;
+						showTooltip( callback, this, editor, dialog, null, id.substring( 4, id.lastIndexOf( '_' ) ) );
+					});
+					tab.on( 'mouseout', function()
+					{
+						tooltip.hide();
+					});
+				}
+
+				dialog.foreach( function( obj )
+				{
+					if ( obj.type in { hbox : 1, vbox : 1 } )
+						return;
+
+					var el = obj.getElement();
+					if ( el )
+					{
+						el.on( 'mouseover', function()
+						{
+							showTooltip( callback, this, editor, dialog, obj, dialog._.currentTabId );
+						});
+						el.on( 'mouseout', function()
+						{
+							tooltip.hide();
+						});
+					}
+				});
+			});
+		}
+	});
+})();
+
+/**
+ * A function that returns the text to be displayed inside the developer tooltip when hovering over a dialog UI element.
+ * There are 4 parameters that are being passed into the function: editor, dialog, element, tab name.
+ * @name editor.config.devtools_textCallback
+ * @since 3.6
+ * @type Function
+ * @default (see example)
+ * @example
+ * // This is actually the default value.
+ * // Show dialog name, tab id and element id.
+ * config.devtools_textCallback = function( editor, dialog, element, tabName )
+ * {
+ * 	var lang = editor.lang.devTools,
+ * 		link = '<a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.definition.' +
+ * 				( element ? ( element.type == 'text' ? 'textInput' : element.type ) : 'content' ) +
+ * 				'.html" target="_blank">' + ( element ? element.type : 'content' ) + '</a>',
+ * 		str =
+ * 			'<h2>' + lang.title + '</h2>' +
+ * 			'<ul>' +
+ * 				'<li><strong>' + lang.dialogName + '</strong> : ' + dialog.getName() + '</li>' +
+ * 				'<li><strong>' + lang.tabName + '</strong> : ' + tabName + '</li>';
+ *
+ * 	if ( element )
+ * 		str += '<li><strong>' + lang.elementId + '</strong> : ' + element.id + '</li>';
+ *
+ * 	str += '<li><strong>' + lang.elementType + '</strong> : ' + link + '</li>';
+ *
+ * 	return str + '</ul>';
+ * }
+ */
+
+/**
+ * A setting that holds CSS rules to be injected do page and contain styles to be applied to the tooltip element.
+ * @name CKEDITOR.config.devtools_styles
+ * @since 3.6
+ * @type String
+ * @default (see example)
+ * @example
+ * // This is actually the default value.
+ * CKEDITOR.config.devtools_styles = &quot;
+ *  #cke_tooltip { padding: 5px; border: 2px solid #333; background: #ffffff }
+ *  #cke_tooltip h2 { font-size: 1.1em; border-bottom: 1px solid; margin: 0; padding: 1px; }
+ *  #cke_tooltip ul { padding: 0pt; list-style-type: none; }
+ * &quot;;
+ */

File diff suppressed because it is too large
+ 1166 - 0
web/js/ckeditor/_source/plugins/dialog/dialogDefinition.js


File diff suppressed because it is too large
+ 3289 - 0
web/js/ckeditor/_source/plugins/dialog/plugin.js


+ 207 - 0
web/js/ckeditor/_source/plugins/dialogadvtab/plugin.js

@@ -0,0 +1,207 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function()
+{
+
+function setupAdvParams( element )
+{
+	var attrName = this.att;
+
+	var value = element && element.hasAttribute( attrName ) && element.getAttribute( attrName ) || '';
+
+	if ( value !== undefined )
+		this.setValue( value );
+}
+
+function commitAdvParams()
+{
+	// Dialogs may use different parameters in the commit list, so, by
+	// definition, we take the first CKEDITOR.dom.element available.
+	var element;
+
+	for ( var i = 0 ; i < arguments.length ; i++ )
+	{
+		if ( arguments[ i ] instanceof CKEDITOR.dom.element )
+		{
+			element = arguments[ i ];
+			break;
+		}
+	}
+
+	if ( element )
+	{
+		var attrName = this.att,
+			value = this.getValue();
+
+		if ( value )
+			element.setAttribute( attrName, value );
+		else
+			element.removeAttribute( attrName, value );
+	}
+}
+
+CKEDITOR.plugins.add( 'dialogadvtab',
+{
+	/**
+	 *
+	 * @param tabConfig
+	 * id, dir, classes, styles
+	 */
+	createAdvancedTab : function( editor, tabConfig )
+	{
+		if ( !tabConfig )
+			tabConfig = { id:1, dir:1, classes:1, styles:1 };
+
+		var lang = editor.lang.common;
+
+		var result =
+		{
+			id : 'advanced',
+			label : lang.advancedTab,
+			title : lang.advancedTab,
+			elements :
+				[
+					{
+						type : 'vbox',
+						padding : 1,
+						children : []
+					}
+				]
+		};
+
+		var contents = [];
+
+		if ( tabConfig.id || tabConfig.dir )
+		{
+			if ( tabConfig.id )
+			{
+				contents.push(
+					{
+						id : 'advId',
+						att : 'id',
+						type : 'text',
+						label : lang.id,
+						setup : setupAdvParams,
+						commit : commitAdvParams
+					});
+			}
+
+			if ( tabConfig.dir )
+			{
+				contents.push(
+					{
+						id : 'advLangDir',
+						att : 'dir',
+						type : 'select',
+						label : lang.langDir,
+						'default' : '',
+						style : 'width:100%',
+						items :
+						[
+							[ lang.notSet, '' ],
+							[ lang.langDirLTR, 'ltr' ],
+							[ lang.langDirRTL, 'rtl' ]
+						],
+						setup : setupAdvParams,
+						commit : commitAdvParams
+					});
+			}
+
+			result.elements[ 0 ].children.push(
+				{
+					type : 'hbox',
+					widths : [ '50%', '50%' ],
+					children : [].concat( contents )
+				});
+		}
+
+		if ( tabConfig.styles || tabConfig.classes )
+		{
+			contents = [];
+
+			if ( tabConfig.styles )
+			{
+				contents.push(
+					{
+						id : 'advStyles',
+						att : 'style',
+						type : 'text',
+						label : lang.styles,
+						'default' : '',
+
+						onChange : function(){},
+
+						getStyle : function( name, defaultValue )
+						{
+							var match = this.getValue().match( new RegExp( name + '\\s*:\\s*([^;]*)', 'i') );
+							return match ? match[ 1 ] : defaultValue;
+						},
+
+						updateStyle : function( name, value )
+						{
+							var styles = this.getValue();
+
+							// Remove the current value.
+							if ( styles )
+							{
+								styles = styles
+									.replace( new RegExp( '\\s*' + name + '\s*:[^;]*(?:$|;\s*)', 'i' ), '' )
+									.replace( /^[;\s]+/, '' )
+									.replace( /\s+$/, '' );
+							}
+
+							if ( value )
+							{
+								styles && !(/;\s*$/).test( styles ) && ( styles += '; ' );
+								styles += name + ': ' + value;
+							}
+
+							this.setValue( styles, 1 );
+
+						},
+
+						setup : setupAdvParams,
+
+						commit : commitAdvParams
+
+					});
+			}
+
+			if ( tabConfig.classes )
+			{
+				contents.push(
+					{
+						type : 'hbox',
+						widths : [ '45%', '55%' ],
+						children :
+						[
+							{
+								id : 'advCSSClasses',
+								att : 'class',
+								type : 'text',
+								label : lang.cssClasses,
+								'default' : '',
+								setup : setupAdvParams,
+								commit : commitAdvParams
+
+							}
+						]
+					});
+			}
+
+			result.elements[ 0 ].children.push(
+				{
+					type : 'hbox',
+					widths : [ '50%', '50%' ],
+					children : [].concat( contents )
+				});
+		}
+
+		return result;
+	}
+});
+
+})();

+ 121 - 0
web/js/ckeditor/_source/plugins/div/plugin.js

@@ -0,0 +1,121 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview The "div" plugin. It wraps the selected block level elements with a 'div' element with specified styles and attributes.
+ *
+ */
+
+(function()
+{
+	CKEDITOR.plugins.add( 'div',
+	{
+		requires : [ 'editingblock', 'domiterator', 'styles' ],
+
+		init : function( editor )
+		{
+			var lang = editor.lang.div;
+
+			editor.addCommand( 'creatediv', new CKEDITOR.dialogCommand( 'creatediv' ) );
+			editor.addCommand( 'editdiv', new CKEDITOR.dialogCommand( 'editdiv' ) );
+			editor.addCommand( 'removediv',
+				{
+					exec : function( editor )
+					{
+						var selection = editor.getSelection(),
+							ranges = selection && selection.getRanges(),
+							range,
+							bookmarks = selection.createBookmarks(),
+							walker,
+							toRemove = [];
+
+						function findDiv( node )
+						{
+							var path = new CKEDITOR.dom.elementPath( node ),
+								blockLimit = path.blockLimit,
+								div = blockLimit.is( 'div' ) && blockLimit;
+
+							if ( div && !div.data( 'cke-div-added' ) )
+							{
+								toRemove.push( div );
+								div.data( 'cke-div-added' );
+							}
+						}
+
+						for ( var i = 0 ; i < ranges.length ; i++ )
+						{
+							range = ranges[ i ];
+							if ( range.collapsed )
+								findDiv( selection.getStartElement() );
+							else
+							{
+								walker = new CKEDITOR.dom.walker( range );
+								walker.evaluator = findDiv;
+								walker.lastForward();
+							}
+						}
+
+						for ( i = 0 ; i < toRemove.length ; i++ )
+							toRemove[ i ].remove( true );
+
+						selection.selectBookmarks( bookmarks );
+					}
+				} );
+
+			editor.ui.addButton( 'CreateDiv',
+			{
+				label : lang.toolbar,
+				command :'creatediv'
+			} );
+
+			if ( editor.addMenuItems )
+			{
+				editor.addMenuItems(
+					{
+						editdiv :
+						{
+							label : lang.edit,
+							command : 'editdiv',
+							group : 'div',
+							order : 1
+						},
+
+						removediv:
+						{
+							label : lang.remove,
+							command : 'removediv',
+							group : 'div',
+							order : 5
+						}
+					} );
+
+				if ( editor.contextMenu )
+				{
+					editor.contextMenu.addListener( function( element, selection )
+						{
+							if ( !element || element.isReadOnly() )
+								return null;
+
+							var elementPath = new CKEDITOR.dom.elementPath( element ),
+								blockLimit = elementPath.blockLimit;
+
+							if ( blockLimit && blockLimit.getAscendant( 'div', true ) )
+							{
+								return {
+									editdiv : CKEDITOR.TRISTATE_OFF,
+									removediv : CKEDITOR.TRISTATE_OFF
+								};
+							}
+
+							return null;
+						} );
+				}
+			}
+
+			CKEDITOR.dialog.add( 'creatediv', this.path + 'dialogs/div.js' );
+			CKEDITOR.dialog.add( 'editdiv', this.path + 'dialogs/div.js' );
+		}
+	} );
+})();

+ 361 - 0
web/js/ckeditor/_source/plugins/domiterator/plugin.js

@@ -0,0 +1,361 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @file DOM iterator, which iterates over list items, lines and paragraphs.
+ */
+
+CKEDITOR.plugins.add( 'domiterator' );
+
+(function()
+{
+	/**
+	 * @name CKEDITOR.dom.iterator
+	 */
+	function iterator( range )
+	{
+		if ( arguments.length < 1 )
+			return;
+
+		this.range = range;
+		this.forceBrBreak = 0;
+
+		// Whether include <br>s into the enlarged range.(#3730).
+		this.enlargeBr = 1;
+		this.enforceRealBlocks = 0;
+
+		this._ || ( this._ = {} );
+	}
+
+	var beginWhitespaceRegex = /^[\r\n\t ]+$/,
+		// Ignore bookmark nodes.(#3783)
+		bookmarkGuard = CKEDITOR.dom.walker.bookmark( false, true ),
+		whitespacesGuard = CKEDITOR.dom.walker.whitespaces( true ),
+		skipGuard = function( node ) { return bookmarkGuard( node ) && whitespacesGuard( node ); };
+
+	// Get a reference for the next element, bookmark nodes are skipped.
+	function getNextSourceNode( node, startFromSibling, lastNode )
+	{
+		var next = node.getNextSourceNode( startFromSibling, null, lastNode );
+		while ( !bookmarkGuard( next ) )
+			next = next.getNextSourceNode( startFromSibling, null, lastNode );
+		return next;
+	}
+
+	iterator.prototype = {
+		getNextParagraph : function( blockTag )
+		{
+			// The block element to be returned.
+			var block;
+
+			// The range object used to identify the paragraph contents.
+			var range;
+
+			// Indicats that the current element in the loop is the last one.
+			var isLast;
+
+			// Indicate at least one of the range boundaries is inside a preformat block.
+			var touchPre;
+
+			// Instructs to cleanup remaining BRs.
+			var removePreviousBr, removeLastBr;
+
+			// This is the first iteration. Let's initialize it.
+			if ( !this._.lastNode )
+			{
+				range = this.range.clone();
+
+				// Shrink the range to exclude harmful "noises" (#4087, #4450, #5435).
+				range.shrink( CKEDITOR.NODE_ELEMENT, true );
+
+				touchPre = range.endContainer.hasAscendant( 'pre', true )
+					|| range.startContainer.hasAscendant( 'pre', true );
+
+				range.enlarge( this.forceBrBreak && !touchPre || !this.enlargeBr ?
+							   CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS : CKEDITOR.ENLARGE_BLOCK_CONTENTS );
+
+				var walker = new CKEDITOR.dom.walker( range ),
+					ignoreBookmarkTextEvaluator = CKEDITOR.dom.walker.bookmark( true, true );
+				// Avoid anchor inside bookmark inner text.
+				walker.evaluator = ignoreBookmarkTextEvaluator;
+				this._.nextNode = walker.next();
+				// TODO: It's better to have walker.reset() used here.
+				walker = new CKEDITOR.dom.walker( range );
+				walker.evaluator = ignoreBookmarkTextEvaluator;
+				var lastNode = walker.previous();
+				this._.lastNode = lastNode.getNextSourceNode( true );
+
+				// We may have an empty text node at the end of block due to [3770].
+				// If that node is the lastNode, it would cause our logic to leak to the
+				// next block.(#3887)
+				if ( this._.lastNode &&
+						this._.lastNode.type == CKEDITOR.NODE_TEXT &&
+						!CKEDITOR.tools.trim( this._.lastNode.getText() ) &&
+						this._.lastNode.getParent().isBlockBoundary() )
+				{
+					var testRange = new CKEDITOR.dom.range( range.document );
+					testRange.moveToPosition( this._.lastNode, CKEDITOR.POSITION_AFTER_END );
+					if ( testRange.checkEndOfBlock() )
+					{
+						var path = new CKEDITOR.dom.elementPath( testRange.endContainer );
+						var lastBlock = path.block || path.blockLimit;
+						this._.lastNode = lastBlock.getNextSourceNode( true );
+					}
+				}
+
+				// Probably the document end is reached, we need a marker node.
+				if ( !this._.lastNode )
+				{
+					this._.lastNode = this._.docEndMarker = range.document.createText( '' );
+					this._.lastNode.insertAfter( lastNode );
+				}
+
+				// Let's reuse this variable.
+				range = null;
+			}
+
+			var currentNode = this._.nextNode;
+			lastNode = this._.lastNode;
+
+			this._.nextNode = null;
+			while ( currentNode )
+			{
+				// closeRange indicates that a paragraph boundary has been found,
+				// so the range can be closed.
+				var closeRange = 0,
+					parentPre = currentNode.hasAscendant( 'pre' );
+
+				// includeNode indicates that the current node is good to be part
+				// of the range. By default, any non-element node is ok for it.
+				var includeNode = ( currentNode.type != CKEDITOR.NODE_ELEMENT ),
+					continueFromSibling = 0;
+
+				// If it is an element node, let's check if it can be part of the
+				// range.
+				if ( !includeNode )
+				{
+					var nodeName = currentNode.getName();
+
+					if ( currentNode.isBlockBoundary( this.forceBrBreak &&
+							!parentPre && { br : 1 } ) )
+					{
+						// <br> boundaries must be part of the range. It will
+						// happen only if ForceBrBreak.
+						if ( nodeName == 'br' )
+							includeNode = 1;
+						else if ( !range && !currentNode.getChildCount() && nodeName != 'hr' )
+						{
+							// If we have found an empty block, and haven't started
+							// the range yet, it means we must return this block.
+							block = currentNode;
+							isLast = currentNode.equals( lastNode );
+							break;
+						}
+
+						// The range must finish right before the boundary,
+						// including possibly skipped empty spaces. (#1603)
+						if ( range )
+						{
+							range.setEndAt( currentNode, CKEDITOR.POSITION_BEFORE_START );
+
+							// The found boundary must be set as the next one at this
+							// point. (#1717)
+							if ( nodeName != 'br' )
+								this._.nextNode = currentNode;
+						}
+
+						closeRange = 1;
+					}
+					else
+					{
+						// If we have child nodes, let's check them.
+						if ( currentNode.getFirst() )
+						{
+							// If we don't have a range yet, let's start it.
+							if ( !range )
+							{
+								range = new CKEDITOR.dom.range( this.range.document );
+								range.setStartAt( currentNode, CKEDITOR.POSITION_BEFORE_START );
+							}
+
+							currentNode = currentNode.getFirst();
+							continue;
+						}
+						includeNode = 1;
+					}
+				}
+				else if ( currentNode.type == CKEDITOR.NODE_TEXT )
+				{
+					// Ignore normal whitespaces (i.e. not including &nbsp; or
+					// other unicode whitespaces) before/after a block node.
+					if ( beginWhitespaceRegex.test( currentNode.getText() ) )
+						includeNode = 0;
+				}
+
+				// The current node is good to be part of the range and we are
+				// starting a new range, initialize it first.
+				if ( includeNode && !range )
+				{
+					range = new CKEDITOR.dom.range( this.range.document );
+					range.setStartAt( currentNode, CKEDITOR.POSITION_BEFORE_START );
+				}
+
+				// The last node has been found.
+				isLast = ( ( !closeRange || includeNode ) && currentNode.equals( lastNode ) );
+
+				// If we are in an element boundary, let's check if it is time
+				// to close the range, otherwise we include the parent within it.
+				if ( range && !closeRange )
+				{
+					while ( !currentNode.getNext( skipGuard ) && !isLast )
+					{
+						var parentNode = currentNode.getParent();
+
+						if ( parentNode.isBlockBoundary( this.forceBrBreak
+								&& !parentPre && { br : 1 } ) )
+						{
+							closeRange = 1;
+							includeNode = 0;
+							isLast = isLast || ( parentNode.equals( lastNode) );
+							// Make sure range includes bookmarks at the end of the block. (#7359)
+							range.setEndAt( parentNode, CKEDITOR.POSITION_BEFORE_END );
+							break;
+						}
+
+						currentNode = parentNode;
+						includeNode = 1;
+						isLast = ( currentNode.equals( lastNode ) );
+						continueFromSibling = 1;
+					}
+				}
+
+				// Now finally include the node.
+				if ( includeNode )
+					range.setEndAt( currentNode, CKEDITOR.POSITION_AFTER_END );
+
+				currentNode = getNextSourceNode ( currentNode, continueFromSibling, lastNode );
+				isLast = !currentNode;
+
+				// We have found a block boundary. Let's close the range and move out of the
+				// loop.
+				if ( isLast || ( closeRange && range ) )
+						break;
+			}
+
+			// Now, based on the processed range, look for (or create) the block to be returned.
+			if ( !block )
+			{
+				// If no range has been found, this is the end.
+				if ( !range )
+				{
+					this._.docEndMarker && this._.docEndMarker.remove();
+					this._.nextNode = null;
+					return null;
+				}
+
+				var startPath = new CKEDITOR.dom.elementPath( range.startContainer );
+				var startBlockLimit = startPath.blockLimit,
+					checkLimits = { div : 1, th : 1, td : 1 };
+				block = startPath.block;
+
+				if ( !block
+						&& !this.enforceRealBlocks
+						&& checkLimits[ startBlockLimit.getName() ]
+						&& range.checkStartOfBlock()
+						&& range.checkEndOfBlock() )
+					block = startBlockLimit;
+				else if ( !block || ( this.enforceRealBlocks && block.getName() == 'li' ) )
+				{
+					// Create the fixed block.
+					block = this.range.document.createElement( blockTag || 'p' );
+
+						// Move the contents of the temporary range to the fixed block.
+						range.extractContents().appendTo( block );
+						block.trim();
+
+						// Insert the fixed block into the DOM.
+						range.insertNode( block );
+
+						removePreviousBr = removeLastBr = true;
+					}
+				else if ( block.getName() != 'li' )
+				{
+					// If the range doesn't includes the entire contents of the
+					// block, we must split it, isolating the range in a dedicated
+					// block.
+					if ( !range.checkStartOfBlock() || !range.checkEndOfBlock() )
+					{
+						// The resulting block will be a clone of the current one.
+						block = block.clone( false );
+
+						// Extract the range contents, moving it to the new block.
+						range.extractContents().appendTo( block );
+						block.trim();
+
+						// Split the block. At this point, the range will be in the
+						// right position for our intents.
+						var splitInfo = range.splitBlock();
+
+						removePreviousBr = !splitInfo.wasStartOfBlock;
+						removeLastBr = !splitInfo.wasEndOfBlock;
+
+						// Insert the new block into the DOM.
+						range.insertNode( block );
+					}
+				}
+				else if ( !isLast )
+				{
+					// LIs are returned as is, with all their children (due to the
+					// nested lists). But, the next node is the node right after
+					// the current range, which could be an <li> child (nested
+					// lists) or the next sibling <li>.
+
+					this._.nextNode = ( block.equals( lastNode ) ? null : getNextSourceNode( range.getBoundaryNodes().endNode, 1, lastNode ) );
+				}
+			}
+
+			if ( removePreviousBr )
+			{
+				var previousSibling = block.getPrevious();
+				if ( previousSibling && previousSibling.type == CKEDITOR.NODE_ELEMENT )
+				{
+					if ( previousSibling.getName() == 'br' )
+						previousSibling.remove();
+					else if ( previousSibling.getLast() && previousSibling.getLast().$.nodeName.toLowerCase() == 'br' )
+						previousSibling.getLast().remove();
+				}
+			}
+
+			if ( removeLastBr )
+			{
+				var lastChild = block.getLast();
+				if ( lastChild && lastChild.type == CKEDITOR.NODE_ELEMENT && lastChild.getName() == 'br' )
+				{
+					// Take care not to remove the block expanding <br> in non-IE browsers.
+					if ( CKEDITOR.env.ie
+						 || lastChild.getPrevious( bookmarkGuard )
+						 || lastChild.getNext( bookmarkGuard ) )
+						lastChild.remove();
+				}
+			}
+
+			// Get a reference for the next element. This is important because the
+			// above block can be removed or changed, so we can rely on it for the
+			// next interation.
+			if ( !this._.nextNode )
+			{
+				this._.nextNode = ( isLast || block.equals( lastNode ) ) ? null :
+					getNextSourceNode( block, 1, lastNode );
+			}
+
+			return block;
+		}
+	};
+
+	CKEDITOR.dom.range.prototype.createIterator = function()
+	{
+		return new iterator( this );
+	};
+})();

+ 275 - 0
web/js/ckeditor/_source/plugins/editingblock/plugin.js

@@ -0,0 +1,275 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview The default editing block plugin, which holds the editing area
+ *		and source view.
+ */
+
+(function()
+{
+	// This is a semaphore used to avoid recursive calls between
+	// the following data handling functions.
+	var isHandlingData;
+
+	CKEDITOR.plugins.add( 'editingblock',
+	{
+		init : function( editor )
+		{
+			if ( !editor.config.editingBlock )
+				return;
+
+			editor.on( 'themeSpace', function( event )
+				{
+					if ( event.data.space == 'contents' )
+						event.data.html += '<br>';
+				});
+
+			editor.on( 'themeLoaded', function()
+				{
+					editor.fireOnce( 'editingBlockReady' );
+				});
+
+			editor.on( 'uiReady', function()
+				{
+					editor.setMode( editor.config.startupMode );
+				});
+
+			editor.on( 'afterSetData', function()
+				{
+					if ( !isHandlingData )
+					{
+						function setData()
+						{
+							isHandlingData = true;
+							editor.getMode().loadData( editor.getData() );
+							isHandlingData = false;
+						}
+
+						if ( editor.mode )
+							setData();
+						else
+						{
+							editor.on( 'mode', function()
+								{
+									if ( editor.mode )
+									{
+										setData();
+										editor.removeListener( 'mode', arguments.callee );
+									}
+								});
+						}
+					}
+				});
+
+			editor.on( 'beforeGetData', function()
+				{
+					if ( !isHandlingData && editor.mode )
+					{
+						isHandlingData = true;
+						editor.setData( editor.getMode().getData(), null, 1 );
+						isHandlingData = false;
+					}
+				});
+
+			editor.on( 'getSnapshot', function( event )
+				{
+					if ( editor.mode )
+						event.data = editor.getMode().getSnapshotData();
+				});
+
+			editor.on( 'loadSnapshot', function( event )
+				{
+					if ( editor.mode )
+						editor.getMode().loadSnapshotData( event.data );
+				});
+
+			// For the first "mode" call, we'll also fire the "instanceReady"
+			// event.
+			editor.on( 'mode', function( event )
+				{
+					// Do that once only.
+					event.removeListener();
+
+					// Redirect the focus into editor for webkit. (#5713)
+					CKEDITOR.env.webkit && editor.container.on( 'focus', function()
+						{
+							editor.focus();
+						});
+
+					if ( editor.config.startupFocus )
+						editor.focus();
+
+					// Fire instanceReady for both the editor and CKEDITOR, but
+					// defer this until the whole execution has completed
+					// to guarantee the editor is fully responsible.
+					setTimeout( function(){
+						editor.fireOnce( 'instanceReady' );
+						CKEDITOR.fire( 'instanceReady', null, editor );
+					}, 0 );
+				});
+
+			editor.on( 'destroy', function ()
+			{
+				// ->		currentMode.unload( holderElement );
+				if ( this.mode )
+					this._.modes[ this.mode ].unload( this.getThemeSpace( 'contents' ) );
+			});
+		}
+	});
+
+	/**
+	 * The current editing mode. An editing mode is basically a viewport for
+	 * editing or content viewing. By default the possible values for this
+	 * property are "wysiwyg" and "source".
+	 * @type String
+	 * @example
+	 * alert( CKEDITOR.instances.editor1.mode );  // "wysiwyg" (e.g.)
+	 */
+	CKEDITOR.editor.prototype.mode = '';
+
+	/**
+	 * Registers an editing mode. This function is to be used mainly by plugins.
+	 * @param {String} mode The mode name.
+	 * @param {Object} modeEditor The mode editor definition.
+	 * @example
+	 */
+	CKEDITOR.editor.prototype.addMode = function( mode, modeEditor )
+	{
+		modeEditor.name = mode;
+		( this._.modes || ( this._.modes = {} ) )[ mode ] = modeEditor;
+	};
+
+	/**
+	 * Sets the current editing mode in this editor instance.
+	 * @param {String} mode A registered mode name.
+	 * @example
+	 * // Switch to "source" view.
+	 * CKEDITOR.instances.editor1.setMode( 'source' );
+	 */
+	CKEDITOR.editor.prototype.setMode = function( mode )
+	{
+		this.fire( 'beforeSetMode', { newMode : mode } );
+
+		var data,
+			holderElement = this.getThemeSpace( 'contents' ),
+			isDirty = this.checkDirty();
+
+		// Unload the previous mode.
+		if ( this.mode )
+		{
+			if ( mode == this.mode )
+				return;
+
+			this.fire( 'beforeModeUnload' );
+
+			var currentMode = this.getMode();
+			data = currentMode.getData();
+			currentMode.unload( holderElement );
+			this.mode = '';
+		}
+
+		holderElement.setHtml( '' );
+
+		// Load required mode.
+		var modeEditor = this.getMode( mode );
+		if ( !modeEditor )
+			throw '[CKEDITOR.editor.setMode] Unknown mode "' + mode + '".';
+
+		if ( !isDirty )
+		{
+			this.on( 'mode', function()
+				{
+					this.resetDirty();
+					this.removeListener( 'mode', arguments.callee );
+				});
+		}
+
+		modeEditor.load( holderElement, ( typeof data ) != 'string'  ? this.getData() : data);
+	};
+
+	/**
+	 * Gets the current or any of the objects that represent the editing
+	 * area modes. The two most common editing modes are "wysiwyg" and "source".
+	 * @param {String} [mode] The mode to be retrieved. If not specified, the
+	 *		current one is returned.
+	 */
+	CKEDITOR.editor.prototype.getMode = function( mode )
+	{
+		return this._.modes && this._.modes[ mode || this.mode ];
+	};
+
+	/**
+	 * Moves the selection focus to the editing are space in the editor.
+	 */
+	CKEDITOR.editor.prototype.focus = function()
+	{
+		this.forceNextSelectionCheck();
+		var mode = this.getMode();
+		if ( mode )
+			mode.focus();
+	};
+})();
+
+/**
+ * The mode to load at the editor startup. It depends on the plugins
+ * loaded. By default, the "wysiwyg" and "source" modes are available.
+ * @type String
+ * @default 'wysiwyg'
+ * @example
+ * config.startupMode = 'source';
+ */
+CKEDITOR.config.startupMode = 'wysiwyg';
+
+/**
+ * Sets whether the editor should have the focus when the page loads.
+ * @name CKEDITOR.config.startupFocus
+ * @type Boolean
+ * @default false
+ * @example
+ * config.startupFocus = true;
+ */
+
+/**
+ * Whether to render or not the editing block area in the editor interface.
+ * @type Boolean
+ * @default true
+ * @example
+ * config.editingBlock = false;
+ */
+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.
+ */
+
+/**
+ * Fired when the CKEDITOR instance is created, fully initialized and ready for interaction.
+ * @name CKEDITOR.editor#instanceReady
+ * @event
+ */
+
+/**
+ * Fired before changing the editing mode. See also CKEDITOR.editor#beforeSetMode and CKEDITOR.editor#mode
+ * @name CKEDITOR.editor#beforeModeUnload
+ * @event
+ */
+
+ /**
+ * Fired before the editor mode is set. See also CKEDITOR.editor#mode and CKEDITOR.editor#beforeModeUnload
+ * @name CKEDITOR.editor#beforeSetMode
+ * @event
+ * @since 3.5.3
+ * @param {String} newMode The name of the mode which is about to be set.
+ */
+
+/**
+ * Fired after setting the editing mode. See also CKEDITOR.editor#beforeSetMode and CKEDITOR.editor#beforeModeUnload
+ * @name CKEDITOR.editor#mode
+ * @event
+ */

+ 218 - 0
web/js/ckeditor/_source/plugins/elementspath/plugin.js

@@ -0,0 +1,218 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+/**
+ * @fileOverview The "elementspath" plugin. It shows all elements in the DOM
+ *		parent tree relative to the current selection in the editing area.
+ */
+
+(function()
+{
+	var commands =
+	{
+		toolbarFocus :
+		{
+			editorFocus : false,
+			readOnly : 1,
+			exec : function( editor )
+			{
+				var idBase = editor._.elementsPath.idBase;
+				var element = CKEDITOR.document.getById( idBase + '0' );
+
+				// Make the first button focus accessible for IE. (#3417)
+				// Adobe AIR instead need while of delay.
+				element && element.focus( CKEDITOR.env.ie || CKEDITOR.env.air );
+			}
+		}
+	};
+
+	var emptyHtml = '<span class="cke_empty">&nbsp;</span>';
+
+	CKEDITOR.plugins.add( 'elementspath',
+	{
+		requires : [ 'selection' ],
+
+		init : function( editor )
+		{
+			var spaceId = 'cke_path_' + editor.name;
+			var spaceElement;
+			var getSpaceElement = function()
+			{
+				if ( !spaceElement )
+					spaceElement = CKEDITOR.document.getById( spaceId );
+				return spaceElement;
+			};
+
+			var idBase = 'cke_elementspath_' + CKEDITOR.tools.getNextNumber() + '_';
+
+			editor._.elementsPath = { idBase : idBase, filters : [] };
+
+			editor.on( 'themeSpace', function( event )
+				{
+					if ( event.data.space == 'bottom' )
+					{
+						event.data.html +=
+							'<span id="' + spaceId + '_label" class="cke_voice_label">' + editor.lang.elementsPath.eleLabel + '</span>' +
+							'<div id="' + spaceId + '" class="cke_path" role="group" aria-labelledby="' + spaceId + '_label">' + emptyHtml + '</div>';
+					}
+				});
+
+			function onClick( elementIndex )
+			{
+				editor.focus();
+				var element = editor._.elementsPath.list[ elementIndex ];
+				if ( element.is( 'body' ) )
+				{
+					var range = new CKEDITOR.dom.range( editor.document );
+					range.selectNodeContents( element );
+					range.select();
+				}
+				else
+					editor.getSelection().selectElement( element );
+			}
+
+			var onClickHanlder = CKEDITOR.tools.addFunction( onClick );
+
+			var onKeyDownHandler = CKEDITOR.tools.addFunction( function( elementIndex, ev )
+				{
+					var idBase = editor._.elementsPath.idBase,
+						element;
+
+					ev = new CKEDITOR.dom.event( ev );
+
+					var rtl = editor.lang.dir == 'rtl';
+					switch ( ev.getKeystroke() )
+					{
+						case rtl ? 39 : 37 :		// LEFT-ARROW
+						case 9 :					// TAB
+							element = CKEDITOR.document.getById( idBase + ( elementIndex + 1 ) );
+							if ( !element )
+								element = CKEDITOR.document.getById( idBase + '0' );
+							element.focus();
+							return false;
+
+						case rtl ? 37 : 39 :		// RIGHT-ARROW
+						case CKEDITOR.SHIFT + 9 :	// SHIFT + TAB
+							element = CKEDITOR.document.getById( idBase + ( elementIndex - 1 ) );
+							if ( !element )
+								element = CKEDITOR.document.getById( idBase + ( editor._.elementsPath.list.length - 1 ) );
+							element.focus();
+							return false;
+
+						case 27 :					// ESC
+							editor.focus();
+							return false;
+
+						case 13 :					// ENTER	// Opera
+						case 32 :					// SPACE
+							onClick( elementIndex );
+							return false;
+					}
+					return true;
+				});
+
+			editor.on( 'selectionChange', function( ev )
+				{
+					var env = CKEDITOR.env,
+						selection = ev.data.selection,
+						element = selection.getStartElement(),
+						html = [],
+						editor = ev.editor,
+						elementsList = editor._.elementsPath.list = [],
+						filters = editor._.elementsPath.filters;
+
+					while ( element )
+					{
+						var ignore = 0,
+							name;
+
+						if ( element.data( 'cke-display-name' ) )
+							name = element.data( 'cke-display-name' );
+						else if ( element.data( 'cke-real-element-type' ) )
+							name = element.data( 'cke-real-element-type' );
+						else
+							name = element.getName();
+
+						for ( var i = 0; i < filters.length; i++ )
+						{
+							var ret = filters[ i ]( element, name );
+							if ( ret === false )
+							{
+								ignore = 1;
+								break;
+							}
+							name = ret || name;
+						}
+
+						if ( !ignore )
+						{
+							var index = elementsList.push( element ) - 1;
+
+							// Use this variable to add conditional stuff to the
+							// HTML (because we are doing it in reverse order... unshift).
+							var extra = '';
+
+							// Some browsers don't cancel key events in the keydown but in the
+							// keypress.
+							// TODO: Check if really needed for Gecko+Mac.
+							if ( env.opera || ( env.gecko && env.mac ) )
+								extra += ' onkeypress="return false;"';
+
+							// With Firefox, we need to force the button to redraw, otherwise it
+							// will remain in the focus state.
+							if ( env.gecko )
+								extra += ' onblur="this.style.cssText = this.style.cssText;"';
+
+							var label = editor.lang.elementsPath.eleTitle.replace( /%1/, name );
+							html.unshift(
+								'<a' +
+									' id="', idBase, index, '"' +
+									' href="javascript:void(\'', name, '\')"' +
+									' tabindex="-1"' +
+									' title="', label, '"' +
+									( ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) ?
+									' onfocus="event.preventBubble();"' : '' ) +
+									' hidefocus="true" ' +
+									' onkeydown="return CKEDITOR.tools.callFunction(', onKeyDownHandler, ',', index, ', event );"' +
+									extra ,
+									' onclick="CKEDITOR.tools.callFunction('+ onClickHanlder, ',', index, '); return false;"',
+									' role="button" aria-labelledby="' + idBase + index + '_label">',
+										name,
+										'<span id="', idBase, index, '_label" class="cke_label">' + label + '</span>',
+								'</a>' );
+
+						}
+
+						if ( name == 'body' )
+							break;
+
+						element = element.getParent();
+					}
+
+					var space = getSpaceElement();
+					space.setHtml( html.join('') + emptyHtml );
+					editor.fire( 'elementsPathUpdate', { space : space } );
+				});
+
+			function empty()
+			{
+				spaceElement && spaceElement.setHtml( emptyHtml );
+				delete editor._.elementsPath.list;
+			}
+
+			editor.on( 'readOnly', empty );
+			editor.on( 'contentDomUnload', empty );
+
+			editor.addCommand( 'elementsPathFocus', commands.toolbarFocus );
+		}
+	});
+})();
+
+/**
+ * Fired when the contents of the elementsPath are changed
+ * @name CKEDITOR.editor#elementsPathUpdate
+ * @event
+ * @param {Object} eventData.space The elementsPath container
+ */

+ 250 - 0
web/js/ckeditor/_source/plugins/entities/plugin.js

@@ -0,0 +1,250 @@
+/*
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+(function()
+{
+	// Base HTML entities.
+	var htmlbase = 'nbsp,gt,lt,amp';
+
+	var entities =
+		// Latin-1 Entities
+		'quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,' +
+		'not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,' +
+		'cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,' +
+
+		// Symbols
+		'fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,' +
+		'alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,' +
+		'forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,' +
+		'radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,' +
+		'equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,' +
+		'rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,' +
+
+		// Other Special Characters
+		'circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,' +
+		'rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,' +
+		'euro';
+
+	// Latin Letters Entities
+	var latin =
+		'Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,' +
+		'Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,' +
+		'Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,' +
+		'agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,' +
+		'ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,' +
+		'otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,' +
+		'OElig,oelig,Scaron,scaron,Yuml';
+
+	// Greek Letters Entities.
+	var greek =
+		'Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,' +
+		'Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,' +
+		'beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,' +
+		'omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,' +
+		'upsih,piv';
+
+	/**
+	 * Create a mapping table between one character and it's entity form from a list of entity names.
+	 * @param reverse {Boolean} Whether create a reverse map from the entity string form to actual character.
+	 */
+	function buildTable( entities, reverse )
+	{
+		var table = {},
+			regex = [];
+
+		// Entities that the browsers DOM don't transform to the final char
+		// automatically.
+		var specialTable =
+			{
+				nbsp	: '\u00A0',		// IE | FF
+				shy		: '\u00AD',		// IE
+				gt		: '\u003E',		// IE | FF |   --   | Opera
+				lt		: '\u003C',		// IE | FF | Safari | Opera
+				amp : '\u0026'		// ALL
+			};
+
+		entities = entities.replace( /\b(nbsp|shy|gt|lt|amp)(?:,|$)/g, function( match, entity )
+			{
+				var org = reverse ? '&' + entity + ';' : specialTable[ entity ],
+					result = reverse ? specialTable[ entity ] : '&' + entity + ';';
+
+				table[ org ] = result;
+				regex.push( org );
+				return '';
+			});
+
+		if ( !reverse && entities )
+		{
+			// Transforms the entities string into an array.
+			entities = entities.split( ',' );
+
+			// Put all entities inside a DOM element, transforming them to their
+			// final chars.
+			var div = document.createElement( 'div' ),
+				chars;
+			div.innerHTML = '&' + entities.join( ';&' ) + ';';
+			chars = div.innerHTML;
+			div = null;
+
+			// Add all chars to the table.
+			for ( var i = 0 ; i < chars.length ; i++ )
+			{
+				var charAt = chars.charAt( i );
+				table[ charAt ] = '&' + entities[ i ] + ';';
+				regex.push( charAt );
+			}
+		}
+
+		table.regex = regex.join( reverse ? '|' : '' );
+
+		return table;
+	}
+
+	CKEDITOR.plugins.add( 'entities',
+	{
+		afterInit : function( editor )
+		{
+			var config = editor.config;
+
+			var dataProcessor = editor.dataProcessor,
+				htmlFilter = dataProcessor && dataProcessor.htmlFilter;
+
+			if ( htmlFilter )
+			{
+				// Mandatory HTML base entities.
+				var selectedEntities = '';
+
+				if ( config.basicEntities !== false )
+					selectedEntities += htmlbase;
+
+				if ( config.entities )
+				{
+					selectedEntities += ',' + entities;
+					if ( config.entities_latin )
+						selectedEntities += ',' + latin;
+
+					if ( config.entities_greek )
+						selectedEntities += ',' + greek;
+
+					if ( config.entities_additional )
+						selectedEntities += ',' + config.entities_additional;
+				}
+
+				var entitiesTable = buildTable( selectedEntities );
+
+				// Create the Regex used to find entities in the text, leave it matches nothing if entities are empty.
+				var entitiesRegex = entitiesTable.regex ? '[' + entitiesTable.regex + ']' : 'a^';
+				delete entitiesTable.regex;
+
+				if ( config.entities && config.entities_processNumerical )
+					entitiesRegex = '[^ -~]|' + entitiesRegex ;
+
+				entitiesRegex = new RegExp( entitiesRegex, 'g' );
+
+				function getEntity( character )
+				{
+					return config.entities_processNumerical == 'force' || !entitiesTable[ character ] ?
+						   '&#' + character.charCodeAt(0) + ';'
+							: entitiesTable[ character ];
+				}
+
+				// Decode entities that the browsers has transformed
+				// at first place.
+				var baseEntitiesTable = buildTable( [ htmlbase, 'shy' ].join( ',' ) , true ),
+					baseEntitiesRegex = new RegExp( baseEntitiesTable.regex, 'g' );
+
+				function getChar( character )
+				{
+					return baseEntitiesTable[ character ];
+				}
+
+				htmlFilter.addRules(
+					{
+						text : function( text )
+						{
+							return text.replace( baseEntitiesRegex, getChar )
+									.replace( entitiesRegex, getEntity );
+						}
+					});
+			}
+		}
+	});
+})();
+
+/**
+ * Whether to escape HTML preserved entities in text, including:
+ * <ul>
+ * <li>nbsp</li>
+ * <li>gt</li>
+ * <li>lt</li>
+ * <li>amp</li>
+ * </ul>
+ * <strong>Note:</strong> It should not be subjected to change unless you're outputting non-HTML data format like BBCode.
+ * @type Boolean
+ * @default true
+ * @example
+ * config.basicEntities = false;
+ */
+CKEDITOR.config.basicEntities = true;
+
+/**
+ * Whether to use HTML entities in the output.
+ * @name CKEDITOR.config.entities
+ * @type Boolean
+ * @default true
+ * @example
+ * config.entities = false;
+ */
+CKEDITOR.config.entities = true;
+
+/**
+ * Whether to convert some Latin characters (Latin alphabet No&#46; 1, ISO 8859-1)
+ * to HTML entities. The list of entities can be found at the
+ * <a href="http://www.w3.org/TR/html4/sgml/entities.html#h-24.2.1">W3C HTML 4.01 Specification, section 24.2.1</a>.
+ * @name CKEDITOR.config.entities_latin
+ * @type Boolean
+ * @default true
+ * @example
+ * config.entities_latin = false;
+ */
+CKEDITOR.config.entities_latin = true;
+
+/**
+ * Whether to convert some symbols, mathematical symbols, and Greek letters to
+ * HTML entities. This may be more relevant for users typing text written in Greek.
+ * The list of entities can be found at the
+ * <a href="http://www.w3.org/TR/html4/sgml/entities.html#h-24.3.1">W3C HTML 4.01 Specification, section 24.3.1</a>.
+ * @name CKEDITOR.config.entities_greek
+ * @type Boolean
+ * @default true
+ * @example
+ * config.entities_greek = false;
+ */
+CKEDITOR.config.entities_greek = true;
+
+/**
+ * Whether to convert all remaining characters, not comprised in the ASCII
+ * character table, to their relative decimal numeric representation of HTML entity.
+ * When specified as the value 'force', it will simply convert all entities into the above form.
+ * For example, the phrase "This is Chinese: &#27721;&#35821;." is outputted
+ * as "This is Chinese: &amp;#27721;&amp;#35821;."
+ * @name CKEDITOR.config.entities_processNumerical
+ * @type Boolean|String
+ * @default false
+ * @example
+ * config.entities_processNumerical = true;
+ * config.entities_processNumerical = 'force';		//Convert from "&nbsp;" into "&#160;";
+ */
+
+/**
+ * An additional list of entities to be used. It's a string containing each
+ * entry separated by a comma. Entities names or number must be used, exclusing
+ * the "&amp;" preffix and the ";" termination.
+ * @name CKEDITOR.config.entities_additional
+ * @default '#39'  // The single quote (') character.
+ * @type String
+ * @example
+ */
+CKEDITOR.config.entities_additional = '#39';

+ 0 - 0
web/js/ckeditor/_source/plugins/find/dialogs/find.js


Some files were not shown because too many files changed in this diff