Index: /CKEditor/branches/prototype/_source/lang/en.js
===================================================================
--- /CKEditor/branches/prototype/_source/lang/en.js	(revision 2714)
+++ /CKEditor/branches/prototype/_source/lang/en.js	(revision 2715)
@@ -103,4 +103,7 @@
 	linkAnchorName		: 'By Anchor Name',
 	linkAnchorId		: 'By Element Id',
+	linkEmailAddress	: 'E-Mail Address',
+	linkEmailSubject	: 'Message Subject',
+	linkEmailBody		: 'Message Body',
 	browseServer	: 'Browser Server',
 	url				: 'URL',
Index: /CKEditor/branches/prototype/_source/plugins/dialog/plugin.js
===================================================================
--- /CKEditor/branches/prototype/_source/plugins/dialog/plugin.js	(revision 2714)
+++ /CKEditor/branches/prototype/_source/plugins/dialog/plugin.js	(revision 2715)
@@ -241,4 +241,14 @@
 			}, this );
 
+	// IE6 BUG: Text fields and text areas are only half-rendered the first time the dialog appears in IE6 (#2661).
+	// This is still needed after [2708] and [2709] because text fields in hidden TR tags are still broken.
+	this.on( 'load', function( evt )
+			{
+				var outer = this.getElement(),
+					inner = outer.getFirst();
+				inner.remove();
+				inner.appendTo( outer );
+			}, this );
+
 	CKEDITOR.dialog._.initDragAndDrop( this );
 	CKEDITOR.dialog._.initResizeHandles( this );
Index: /CKEditor/branches/prototype/_source/plugins/dialogui/plugin.js
===================================================================
--- /CKEditor/branches/prototype/_source/plugins/dialogui/plugin.js	(revision 2714)
+++ /CKEditor/branches/prototype/_source/plugins/dialogui/plugin.js	(revision 2715)
@@ -193,4 +193,37 @@
 
 			/**
+			 * A text area with a label on the top or left.
+			 * @constructor
+			 * @extends CKEDITOR.ui.dialog.labeledElement
+			 */
+			textarea : function( dialog, elementDefinition, htmlList )
+			{
+				if ( arguments.length < 3 )
+					return;
+
+				var _ = initPrivateObject.call( this, elementDefinition ),
+					domId = _.inputId = CKEDITOR.tools.getNextNumber() + '_textarea',
+					attributes = {};
+
+				if ( elementDefinition.validate )
+					this.validate = elementDefinition.validate;
+
+				// Generates the essential attributes for the textarea tag.
+				attributes.rows = elementDefinition.rows || 5;
+				attributes.cols = elementDefinition.cols || 20;
+
+				/** @ignore */
+				var innerHTML = function()
+				{
+					var html = [ '<div class="cke_dialog_ui_input_textarea"><textarea class="cke_dialog_ui_input_textarea" id="', domId, '" ' ];
+					for ( var i in attributes )
+						html.push( i + '="' + CKEDITOR.tools.htmlEncode( attributes[i] ) + '" ' );
+					html.push( '>', CKEDITOR.tools.htmlEncode( _['default'] ), '</textarea></div>' );
+					return html.join( '' );
+				}
+				CKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML );
+			},
+
+			/**
 			 * A single checkbox with a label on the right.
 			 * @constructor
@@ -643,4 +676,6 @@
 			}, commonPrototype, true );
 
+	CKEDITOR.ui.dialog.textarea.prototype = new CKEDITOR.ui.dialog.textInput();
+
 	CKEDITOR.ui.dialog.select.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement,
 			/** @lends CKEDITOR.ui.dialog.select.prototype */
@@ -650,5 +685,5 @@
 					return this._.select.getElement();
 				}
-			}, true );
+			}, commonPrototype, true );
 
 	CKEDITOR.ui.dialog.checkbox.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement,
@@ -739,4 +774,5 @@
 
 	CKEDITOR.ui.dialog.file.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement,
+			commonPrototype,
 			{
 				getInputElement : function()
@@ -782,4 +818,5 @@
 	CKEDITOR.dialog.addUIElement( 'text', textBuilder );
 	CKEDITOR.dialog.addUIElement( 'password', textBuilder );
+	CKEDITOR.dialog.addUIElement( 'textarea', commonBuilder );
 	CKEDITOR.dialog.addUIElement( 'checkbox', commonBuilder );
 	CKEDITOR.dialog.addUIElement( 'radio', commonBuilder );
Index: /CKEditor/branches/prototype/_source/plugins/link/plugin.js
===================================================================
--- /CKEditor/branches/prototype/_source/plugins/link/plugin.js	(revision 2714)
+++ /CKEditor/branches/prototype/_source/plugins/link/plugin.js	(revision 2715)
@@ -78,5 +78,5 @@
 			for ( var i = 0 ; i < partIds.length ; i++ )
 			{
-				var element = dialog.getContentElement( 'info', partIds[i] ).getElement();
+				var element = dialog.getContentElement( 'info', partIds[i] ).getElement().getParent().getParent();
 				if ( partIds[i] == typeValue + 'Options' )
 					element.show();
@@ -195,5 +195,25 @@
 							type :  'vbox',
 							id : 'emailOptions',
-							children : []
+							padding : 1,
+							children :
+							[
+								{
+									'type' : 'text',
+									id : 'emailAddress',
+									label : editor.lang.linkEmailAddress
+								},
+								{
+									'type' : 'text',
+									id : 'emailSubject',
+									label : editor.lang.linkEmailSubject
+								},
+								{
+									'type' : 'textarea',
+									id : 'emailBody',
+									label : editor.lang.linkEmailBody,
+									rows : 3,
+									'default' : ''
+								}
+							]
 						}
 					]
Index: /CKEditor/branches/prototype/_source/skins/default/dialog.css
===================================================================
--- /CKEditor/branches/prototype/_source/skins/default/dialog.css	(revision 2714)
+++ /CKEditor/branches/prototype/_source/skins/default/dialog.css	(revision 2715)
@@ -312,4 +312,25 @@
 }
 
+.cke_skin_default textarea.cke_dialog_ui_input_textarea
+{
+	background-color: white;
+	border: none;
+	padding: 0px;
+	width: 100%;
+	/*
+	 * IE6 BUG: Scrollbars in textareas can overflow even if the outer DIV is set to overflow:hidden.
+	 * So leave 1% width for the scrollbar. In most situations the 1% isn't noticeable by users.
+	 */
+	_width: 99%;
+	overflow: auto;
+}
+
+.cke_skin_default div.cke_dialog_ui_input_textarea
+{
+	background-color: white;
+	border: 1px solid #a0a0a0;
+	padding: 1px 0px;
+}
+
 .cke_skin_default .cke_dialog_ui_hbox
 {
Index: /CKEditor/branches/prototype/_source/skins/default/reset.css
===================================================================
--- /CKEditor/branches/prototype/_source/skins/default/reset.css	(revision 2714)
+++ /CKEditor/branches/prototype/_source/skins/default/reset.css	(revision 2715)
@@ -57,7 +57,11 @@
 }
 
-.cke_skin_default iframe,
-.cke_skin_default textarea
+.cke_skin_default iframe
 {
 	vertical-align: inherit;	/** For IE */
 }
+
+.cke_skin_default textarea
+{
+	white-space: pre;
+}
