Index: plugins/dcCKEditor/js/ckeditor/ckeditor.js
===================================================================
--- plugins/dcCKEditor/js/ckeditor/ckeditor.js	(revision 3175)
+++ plugins/dcCKEditor/js/ckeditor/ckeditor.js	(revision 3181)
@@ -43,5 +43,5 @@
 			// for each release and generated by the releaser.
 			// (Base 36 value of each component of YYMMDDHH - 4 chars total - e.g. 87bm == 08071122)
-			timestamp: 'G1JE',
+			timestamp: 'G1MC',
 
 			/**
@@ -43299,4 +43299,364 @@
  */
 
+CKEDITOR.plugins.add( 'htmlwriter', {
+	init: function( editor ) {
+		var writer = new CKEDITOR.htmlWriter();
+
+		writer.forceSimpleAmpersand = editor.config.forceSimpleAmpersand;
+		writer.indentationChars = editor.config.dataIndentationChars || '\t';
+
+		// Overwrite default basicWriter initialized in hmtlDataProcessor constructor.
+		editor.dataProcessor.writer = writer;
+	}
+} );
+
+/**
+ * The class used to write HTML data.
+ *
+ *		var writer = new CKEDITOR.htmlWriter();
+ *		writer.openTag( 'p' );
+ *		writer.attribute( 'class', 'MyClass' );
+ *		writer.openTagClose( 'p' );
+ *		writer.text( 'Hello' );
+ *		writer.closeTag( 'p' );
+ *		alert( writer.getHtml() ); // '<p class="MyClass">Hello</p>'
+ *
+ * @class
+ * @extends CKEDITOR.htmlParser.basicWriter
+ */
+CKEDITOR.htmlWriter = CKEDITOR.tools.createClass( {
+	base: CKEDITOR.htmlParser.basicWriter,
+
+	/**
+	 * Creates an `htmlWriter` class instance.
+	 *
+	 * @constructor
+	 */
+	$: function() {
+		// Call the base contructor.
+		this.base();
+
+		/**
+		 * The characters to be used for each indentation step.
+		 *
+		 *		// Use tab for indentation.
+		 *		editorInstance.dataProcessor.writer.indentationChars = '\t';
+		 */
+		this.indentationChars = '\t';
+
+		/**
+		 * The characters to be used to close "self-closing" elements, like `<br>` or `<img>`.
+		 *
+		 *		// Use HTML4 notation for self-closing elements.
+		 *		editorInstance.dataProcessor.writer.selfClosingEnd = '>';
+		 */
+		this.selfClosingEnd = ' />';
+
+		/**
+		 * The characters to be used for line breaks.
+		 *
+		 *		// Use CRLF for line breaks.
+		 *		editorInstance.dataProcessor.writer.lineBreakChars = '\r\n';
+		 */
+		this.lineBreakChars = '\n';
+
+		this.sortAttributes = 1;
+
+		this._.indent = 0;
+		this._.indentation = '';
+		// Indicate preformatted block context status. (#5789)
+		this._.inPre = 0;
+		this._.rules = {};
+
+		var dtd = CKEDITOR.dtd;
+
+		for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) {
+			this.setRules( e, {
+				indent: !dtd[ e ][ '#' ],
+				breakBeforeOpen: 1,
+				breakBeforeClose: !dtd[ e ][ '#' ],
+				breakAfterClose: 1,
+				needsSpace: ( e in dtd.$block ) && !( e in { li: 1, dt: 1, dd: 1 } )
+			} );
+		}
+
+		this.setRules( 'br', { breakAfterOpen: 1 } );
+
+		this.setRules( 'title', {
+			indent: 0,
+			breakAfterOpen: 0
+		} );
+
+		this.setRules( 'style', {
+			indent: 0,
+			breakBeforeClose: 1
+		} );
+
+		this.setRules( 'pre', {
+			breakAfterOpen: 1, // Keep line break after the opening tag
+			indent: 0 // Disable indentation on <pre>.
+		} );
+	},
+
+	proto: {
+		/**
+		 * Writes the tag opening part for an opener tag.
+		 *
+		 *		// Writes '<p'.
+		 *		writer.openTag( 'p', { class : 'MyClass', id : 'MyId' } );
+		 *
+		 * @param {String} tagName The element name for this tag.
+		 * @param {Object} attributes The attributes defined for this tag. The
+		 * attributes could be used to inspect the tag.
+		 */
+		openTag: function( tagName ) {
+			var rules = this._.rules[ tagName ];
+
+			if ( this._.afterCloser && rules && rules.needsSpace && this._.needsSpace )
+				this._.output.push( '\n' );
+
+			if ( this._.indent )
+				this.indentation();
+			// Do not break if indenting.
+			else if ( rules && rules.breakBeforeOpen ) {
+				this.lineBreak();
+				this.indentation();
+			}
+
+			this._.output.push( '<', tagName );
+
+			this._.afterCloser = 0;
+		},
+
+		/**
+		 * Writes the tag closing part for an opener tag.
+		 *
+		 *		// Writes '>'.
+		 *		writer.openTagClose( 'p', false );
+		 *
+		 *		// Writes ' />'.
+		 *		writer.openTagClose( 'br', true );
+		 *
+		 * @param {String} tagName The element name for this tag.
+		 * @param {Boolean} isSelfClose Indicates that this is a self-closing tag,
+		 * like `<br>` or `<img>`.
+		 */
+		openTagClose: function( tagName, isSelfClose ) {
+			var rules = this._.rules[ tagName ];
+
+			if ( isSelfClose ) {
+				this._.output.push( this.selfClosingEnd );
+
+				if ( rules && rules.breakAfterClose )
+					this._.needsSpace = rules.needsSpace;
+			} else {
+				this._.output.push( '>' );
+
+				if ( rules && rules.indent )
+					this._.indentation += this.indentationChars;
+			}
+
+			if ( rules && rules.breakAfterOpen )
+				this.lineBreak();
+			tagName == 'pre' && ( this._.inPre = 1 );
+		},
+
+		/**
+		 * Writes an attribute. This function should be called after opening the
+		 * tag with {@link #openTagClose}.
+		 *
+		 *		// Writes ' class="MyClass"'.
+		 *		writer.attribute( 'class', 'MyClass' );
+		 *
+		 * @param {String} attName The attribute name.
+		 * @param {String} attValue The attribute value.
+		 */
+		attribute: function( attName, attValue ) {
+
+			if ( typeof attValue == 'string' ) {
+				this.forceSimpleAmpersand && ( attValue = attValue.replace( /&amp;/g, '&' ) );
+				// Browsers don't always escape special character in attribute values. (#4683, #4719).
+				attValue = CKEDITOR.tools.htmlEncodeAttr( attValue );
+			}
+
+			this._.output.push( ' ', attName, '="', attValue, '"' );
+		},
+
+		/**
+		 * Writes a closer tag.
+		 *
+		 *		// Writes '</p>'.
+		 *		writer.closeTag( 'p' );
+		 *
+		 * @param {String} tagName The element name for this tag.
+		 */
+		closeTag: function( tagName ) {
+			var rules = this._.rules[ tagName ];
+
+			if ( rules && rules.indent )
+				this._.indentation = this._.indentation.substr( this.indentationChars.length );
+
+			if ( this._.indent )
+				this.indentation();
+			// Do not break if indenting.
+			else if ( rules && rules.breakBeforeClose ) {
+				this.lineBreak();
+				this.indentation();
+			}
+
+			this._.output.push( '</', tagName, '>' );
+			tagName == 'pre' && ( this._.inPre = 0 );
+
+			if ( rules && rules.breakAfterClose ) {
+				this.lineBreak();
+				this._.needsSpace = rules.needsSpace;
+			}
+
+			this._.afterCloser = 1;
+		},
+
+		/**
+		 * Writes text.
+		 *
+		 *		// Writes 'Hello Word'.
+		 *		writer.text( 'Hello Word' );
+		 *
+		 * @param {String} text The text value
+		 */
+		text: function( text ) {
+			if ( this._.indent ) {
+				this.indentation();
+				!this._.inPre && ( text = CKEDITOR.tools.ltrim( text ) );
+			}
+
+			this._.output.push( text );
+		},
+
+		/**
+		 * Writes a comment.
+		 *
+		 *		// Writes "<!-- My comment -->".
+		 *		writer.comment( ' My comment ' );
+		 *
+		 * @param {String} comment The comment text.
+		 */
+		comment: function( comment ) {
+			if ( this._.indent )
+				this.indentation();
+
+			this._.output.push( '<!--', comment, '-->' );
+		},
+
+		/**
+		 * Writes a line break. It uses the {@link #lineBreakChars} property for it.
+		 *
+		 *		// Writes '\n' (e.g.).
+		 *		writer.lineBreak();
+		 */
+		lineBreak: function() {
+			if ( !this._.inPre && this._.output.length > 0 )
+				this._.output.push( this.lineBreakChars );
+			this._.indent = 1;
+		},
+
+		/**
+		 * Writes the current indentation character. It uses the {@link #indentationChars}
+		 * property, repeating it for the current indentation steps.
+		 *
+		 *		// Writes '\t' (e.g.).
+		 *		writer.indentation();
+		 */
+		indentation: function() {
+			if ( !this._.inPre && this._.indentation )
+				this._.output.push( this._.indentation );
+			this._.indent = 0;
+		},
+
+		/**
+		 * Empties the current output buffer. It also brings back the default
+		 * values of the writer flags.
+		 *
+		 *		writer.reset();
+		 */
+		reset: function() {
+			this._.output = [];
+			this._.indent = 0;
+			this._.indentation = '';
+			this._.afterCloser = 0;
+			this._.inPre = 0;
+		},
+
+		/**
+		 * Sets formatting rules for a given element. Possible rules are:
+		 *
+		 * * `indent` &ndash; indent the element content.
+		 * * `breakBeforeOpen` &ndash; break line before the opener tag for this element.
+		 * * `breakAfterOpen` &ndash; break line after the opener tag for this element.
+		 * * `breakBeforeClose` &ndash; break line before the closer tag for this element.
+		 * * `breakAfterClose` &ndash; break line after the closer tag for this element.
+		 *
+		 * All rules default to `false`. Each function call overrides rules that are
+		 * already present, leaving the undefined ones untouched.
+		 *
+		 * By default, all elements available in the {@link CKEDITOR.dtd#$block},
+		 * {@link CKEDITOR.dtd#$listItem}, and {@link CKEDITOR.dtd#$tableContent}
+		 * lists have all the above rules set to `true`. Additionaly, the `<br>`
+		 * element has the `breakAfterOpen` rule set to `true`.
+		 *
+		 *		// Break line before and after "img" tags.
+		 *		writer.setRules( 'img', {
+		 *			breakBeforeOpen: true
+		 *			breakAfterOpen: true
+		 *		} );
+		 *
+		 *		// Reset the rules for the "h1" tag.
+		 *		writer.setRules( 'h1', {} );
+		 *
+		 * @param {String} tagName The name of the element for which the rules are set.
+		 * @param {Object} rules An object containing the element rules.
+		 */
+		setRules: function( tagName, rules ) {
+			var currentRules = this._.rules[ tagName ];
+
+			if ( currentRules )
+				CKEDITOR.tools.extend( currentRules, rules, true );
+			else
+				this._.rules[ tagName ] = rules;
+		}
+	}
+} );
+
+/**
+ * Whether to force using `'&'` instead of `'&amp;'` in element attributes
+ * values. It is not recommended to change this setting for compliance with the
+ * W3C XHTML 1.0 standards ([C.12, XHTML 1.0](http://www.w3.org/TR/xhtml1/#C_12)).
+ *
+ *		// Use `'&'` instead of `'&amp;'`
+ *		CKEDITOR.config.forceSimpleAmpersand = true;
+ *
+ * @cfg {Boolean} [forceSimpleAmpersand=false]
+ * @member CKEDITOR.config
+ */
+
+/**
+ * The characters to be used for indenting HTML output produced by the editor.
+ * Using characters different from `' '` (space) and `'\t'` (tab) is not recommended
+ * as it will mess the code.
+ *
+ *		// No indentation.
+ *		CKEDITOR.config.dataIndentationChars = '';
+ *
+ *		// Use two spaces for indentation.
+ *		CKEDITOR.config.dataIndentationChars = '  ';
+ *
+ * @cfg {String} [dataIndentationChars='\t']
+ * @member CKEDITOR.config
+ */
+
+/**
+ * Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
 /**
  * @fileOverview The Image plugin.
@@ -55181,4 +55541,4 @@
  */
 
-CKEDITOR.config.plugins='dialogui,dialog,a11yhelp,about,basicstyles,blockquote,clipboard,button,panelbutton,panel,floatpanel,colorbutton,dialogadvtab,div,elementspath,enterkey,floatingspace,listblock,richcombo,format,horizontalrule,image,indent,indentlist,indentblock,justify,fakeobjects,link,list,menu,contextmenu,liststyle,magicline,maximize,pastefromword,pastetext,print,removeformat,resize,sourcearea,specialchar,stylescombo,tab,table,tabletools,templates,toolbar,undo,wysiwygarea';CKEDITOR.config.skin='moono';(function() {var setIcons = function(icons, strip) {var path = CKEDITOR.getUrl( 'plugins/' + strip );icons = icons.split( ',' );for ( var i = 0; i < icons.length; i++ )CKEDITOR.skin.icons[ icons[ i ] ] = { path: path, offset: -icons[ ++i ], bgsize : icons[ ++i ] };};if (CKEDITOR.env.hidpi) setIcons('about,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,blockquote,168,,copy-rtl,192,,copy,216,,cut-rtl,240,,cut,264,,paste-rtl,288,,paste,312,,bgcolor,336,,textcolor,360,,creatediv,384,,horizontalrule,408,,image,432,,indent-rtl,456,,indent,480,,outdent-rtl,504,,outdent,528,,justifyblock,552,,justifycenter,576,,justifyleft,600,,justifyright,624,,anchor-rtl,648,,anchor,672,,link,696,,unlink,720,,bulletedlist-rtl,744,,bulletedlist,768,,numberedlist-rtl,792,,numberedlist,816,,maximize,840,,pastefromword-rtl,864,,pastefromword,888,,pastetext-rtl,912,,pastetext,936,,print,960,,removeformat,984,,source-rtl,1008,,source,1032,,specialchar,1056,,table,1080,,templates-rtl,1104,,templates,1128,,redo-rtl,1152,,redo,1176,,undo-rtl,1200,,undo,1224,','icons_hidpi.png');else setIcons('about,0,auto,bold,24,auto,italic,48,auto,strike,72,auto,subscript,96,auto,superscript,120,auto,underline,144,auto,blockquote,168,auto,copy-rtl,192,auto,copy,216,auto,cut-rtl,240,auto,cut,264,auto,paste-rtl,288,auto,paste,312,auto,bgcolor,336,auto,textcolor,360,auto,creatediv,384,auto,horizontalrule,408,auto,image,432,auto,indent-rtl,456,auto,indent,480,auto,outdent-rtl,504,auto,outdent,528,auto,justifyblock,552,auto,justifycenter,576,auto,justifyleft,600,auto,justifyright,624,auto,anchor-rtl,648,auto,anchor,672,auto,link,696,auto,unlink,720,auto,bulletedlist-rtl,744,auto,bulletedlist,768,auto,numberedlist-rtl,792,auto,numberedlist,816,auto,maximize,840,auto,pastefromword-rtl,864,auto,pastefromword,888,auto,pastetext-rtl,912,auto,pastetext,936,auto,print,960,auto,removeformat,984,auto,source-rtl,1008,auto,source,1032,auto,specialchar,1056,auto,table,1080,auto,templates-rtl,1104,auto,templates,1128,auto,redo-rtl,1152,auto,redo,1176,auto,undo-rtl,1200,auto,undo,1224,auto','icons.png');})();
+CKEDITOR.config.plugins='dialogui,dialog,a11yhelp,about,basicstyles,blockquote,clipboard,button,panelbutton,panel,floatpanel,colorbutton,dialogadvtab,div,elementspath,enterkey,floatingspace,listblock,richcombo,format,horizontalrule,htmlwriter,image,indent,indentlist,indentblock,justify,fakeobjects,link,list,menu,contextmenu,liststyle,magicline,maximize,pastefromword,pastetext,print,removeformat,resize,sourcearea,specialchar,stylescombo,tab,table,tabletools,templates,toolbar,undo,wysiwygarea';CKEDITOR.config.skin='moono';(function() {var setIcons = function(icons, strip) {var path = CKEDITOR.getUrl( 'plugins/' + strip );icons = icons.split( ',' );for ( var i = 0; i < icons.length; i++ )CKEDITOR.skin.icons[ icons[ i ] ] = { path: path, offset: -icons[ ++i ], bgsize : icons[ ++i ] };};if (CKEDITOR.env.hidpi) setIcons('about,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,blockquote,168,,copy-rtl,192,,copy,216,,cut-rtl,240,,cut,264,,paste-rtl,288,,paste,312,,bgcolor,336,,textcolor,360,,creatediv,384,,horizontalrule,408,,image,432,,indent-rtl,456,,indent,480,,outdent-rtl,504,,outdent,528,,justifyblock,552,,justifycenter,576,,justifyleft,600,,justifyright,624,,anchor-rtl,648,,anchor,672,,link,696,,unlink,720,,bulletedlist-rtl,744,,bulletedlist,768,,numberedlist-rtl,792,,numberedlist,816,,maximize,840,,pastefromword-rtl,864,,pastefromword,888,,pastetext-rtl,912,,pastetext,936,,print,960,,removeformat,984,,source-rtl,1008,,source,1032,,specialchar,1056,,table,1080,,templates-rtl,1104,,templates,1128,,redo-rtl,1152,,redo,1176,,undo-rtl,1200,,undo,1224,','icons_hidpi.png');else setIcons('about,0,auto,bold,24,auto,italic,48,auto,strike,72,auto,subscript,96,auto,superscript,120,auto,underline,144,auto,blockquote,168,auto,copy-rtl,192,auto,copy,216,auto,cut-rtl,240,auto,cut,264,auto,paste-rtl,288,auto,paste,312,auto,bgcolor,336,auto,textcolor,360,auto,creatediv,384,auto,horizontalrule,408,auto,image,432,auto,indent-rtl,456,auto,indent,480,auto,outdent-rtl,504,auto,outdent,528,auto,justifyblock,552,auto,justifycenter,576,auto,justifyleft,600,auto,justifyright,624,auto,anchor-rtl,648,auto,anchor,672,auto,link,696,auto,unlink,720,auto,bulletedlist-rtl,744,auto,bulletedlist,768,auto,numberedlist-rtl,792,auto,numberedlist,816,auto,maximize,840,auto,pastefromword-rtl,864,auto,pastefromword,888,auto,pastetext-rtl,912,auto,pastetext,936,auto,print,960,auto,removeformat,984,auto,source-rtl,1008,auto,source,1032,auto,specialchar,1056,auto,table,1080,auto,templates-rtl,1104,auto,templates,1128,auto,redo-rtl,1152,auto,redo,1176,auto,undo-rtl,1200,auto,undo,1224,auto','icons.png');})();
 }());
