Index: /CKEditor/trunk/_source/plugins/link/dialogs/link.js
===================================================================
--- /CKEditor/trunk/_source/plugins/link/dialogs/link.js	(revision 3162)
+++ /CKEditor/trunk/_source/plugins/link/dialogs/link.js	(revision 3163)
@@ -290,5 +290,5 @@
 										[
 											[ 'http://' ],
-											[ 'https//' ],
+											[ 'https://' ],
 											[ 'ftp://' ],
 											[ 'news://' ],
@@ -312,4 +312,32 @@
 										id : 'url',
 										label : editor.lang.common.url,
+										onLoad : function ()
+										{
+											this.allowOnChange = true;
+										},
+										onKeyUp : function()
+										{
+											this.allowOnChange = false;
+											var	protocolCmb = this.getDialog().getContentElement( 'info', 'protocol' ),
+												url = this.getValue(),
+												urlOnChangeProtocol = /^(http|https|ftp|news):\/\/(?=.)/gi,
+												urlOnChangeTestOther = /^((javascript:)|[#\/\.])/gi;
+
+											var protocol = urlOnChangeProtocol.exec( url );
+											if ( protocol )
+											{
+												this.setValue( url.substr( protocol[ 0 ].length ) );
+												protocolCmb.setValue( protocol[ 0 ].toLowerCase() );
+											}
+											else if ( urlOnChangeTestOther.test( url ) )
+												protocolCmb.setValue( '' );
+
+											this.allowOnChange = true;
+										},
+										onChange : function()
+										{
+											if ( this.allowOnChange )		// Dont't call on dialog load.
+												this.onKeyUp();
+										},
 										validate : function()
 										{
@@ -328,10 +356,13 @@
 										setup : function( data )
 										{
+											this.allowOnChange = false;
 											if ( data.url )
 												this.setValue( data.url.url );
+											this.allowOnChange = true;
 
 											var linkType = this.getDialog().getContentElement( 'info', 'linkType' );
 											if ( linkType && linkType.getValue() == 'url' )
 												this.select();
+
 										},
 										commit : function( data )
@@ -341,4 +372,5 @@
 
 											data.url.url = this.getValue();
+											this.allowOnChange = false;
 										}
 									}
@@ -1007,5 +1039,5 @@
 			{
 				case 'url':
-					var protocol = ( data.url && data.url.protocol ) || 'http://',
+					var protocol = ( data.url && data.url.protocol != undefined ) ? data.url.protocol : 'http://',
 						url = ( data.url && data.url.url ) || '';
 					attributes._cke_saved_href = protocol + url;
