Index: /CKEditor/branches/prototype/_source/plugins/image/dialogs/image.js
===================================================================
--- /CKEditor/branches/prototype/_source/plugins/image/dialogs/image.js	(revision 2852)
+++ /CKEditor/branches/prototype/_source/plugins/image/dialogs/image.js	(revision 2853)
@@ -47,6 +47,40 @@
 		}
 		return false;
-	};
-
+	}
+	var onImgLoad = function()
+	{
+		// Image is ready.
+		this.editObj[ 'imageOriginal' ].setCustomData( 'isReady', 'true' );
+		this.editObj[ 'imageOriginal' ].removeListener( 'load', onImgLoad );
+		this.editObj[ 'imageOriginal' ].removeListener( 'error', onImgLoadError );
+		this.editObj[ 'imageOriginal' ].removeListener( 'abort', onImgLoadError );
+
+		// Hide loader
+		CKEDITOR.document.getById( 'ImagePreviewLoader' ).setStyle( 'display', 'none' );
+
+		// New image -> new domensions
+		if ( this.forceResetSize ){
+			resetSize( this );
+		}
+	}
+	var onImgLoadError = function()
+	{
+		// Error. Image is not loaded.
+		this.editObj[ 'imageOriginal' ].removeListener( 'load', onImgLoad );
+		this.editObj[ 'imageOriginal' ].removeListener( 'error', onImgLoadError );
+		this.editObj[ 'imageOriginal' ].removeListener( 'abort', onImgLoadError );
+
+		// Set Error image.
+		var noimage = CKEDITOR.getUrl(
+			'_source/' +	// TODO: Add @-Packager.RemoveLine to the final build process.
+			'skins/' + editor.config.skin + '/images/dialog.noimage.gif' );
+
+		if ( showPreview && this.editObj[ 'imagePreview' ] )
+			this.editObj[ 'imagePreview' ].setAttribute( 'src', noimage );
+
+		// Hide loader
+		CKEDITOR.document.getById( 'ImagePreviewLoader' ).setStyle( 'display', 'none' );
+		switchLockRatio( dialog, false );	// Unlock.
+	}
 	var onUrlChange = function( input )
 	{
@@ -183,42 +217,8 @@
 			// Show loader
 			var loader = CKEDITOR.document.getById( 'ImagePreviewLoader' );
+			this.forceResetSize = forceResetSize;
 			if ( loader && showPreview )
 				loader.setStyle( 'display', '' );
 
-			var onImgLoad = function()
-			{
-				// Image is ready.
-				this.editObj[ 'imageOriginal' ].setCustomData( 'isReady', 'true' );
-				this.editObj[ 'imageOriginal' ].removeListener( 'load', onImgLoad );
-				this.editObj[ 'imageOriginal' ].removeListener( 'error', onImgLoadError );
-				this.editObj[ 'imageOriginal' ].removeListener( 'abort', onImgLoadError );
-
-				// Hide loader
-				CKEDITOR.document.getById( 'ImagePreviewLoader' ).setStyle( 'display', 'none' );
-
-				// New image -> new domensions
-				if ( forceResetSize ){
-					resetSize( this );
-				}
-			}
-			var onImgLoadError = function()
-			{
-				// Error. Image is not loaded.
-				this.editObj[ 'imageOriginal' ].removeListener( 'load', onImgLoad );
-				this.editObj[ 'imageOriginal' ].removeListener( 'error', onImgLoadError );
-				this.editObj[ 'imageOriginal' ].removeListener( 'abort', onImgLoadError );
-
-				// Set Error image.
-				var noimage = CKEDITOR.getUrl(
-					'_source/' +	// TODO: Add @-Packager.RemoveLine to the final build process.
-					'skins/' + editor.config.skin + '/images/dialog.noimage.gif' );
-
-				if ( showPreview )
-					this.editObj[ 'imagePreview' ].setAttribute( 'src', noimage );
-
-				// Hide loader
-				CKEDITOR.document.getById( 'ImagePreviewLoader' ).setStyle( 'display', 'none' );
-				switchLockRatio( dialog, false );	// Unlock.
-			}
 			if ( showPreview )		// Load image preview
 			{
@@ -564,4 +564,5 @@
 			this.dimensionsInStyle[ 'width' ] = false;
 			this.dimensionsInStyle[ 'height' ] = false;
+			this.forceResetSize = false;
 
 			// IE BUG: Selection must be in the editor for getSelection() to work.
@@ -580,4 +581,7 @@
 			this.editObj[ 'linkPreview' ] = CKEDITOR.document.getById( 'previewLink' );
 
+			//Hide loader.
+			CKEDITOR.document.getById( 'ImagePreviewLoader' ).setStyle( 'display', 'none' );
+			
 			// Check selection. Fill in all the relevant fields if there's already one link selected.
 			if ( ranges.length == 1 )
@@ -591,5 +595,5 @@
 				elementInput = rangeRoot.getAscendant( 'input', true );
 				
-				if ( elementImg )
+				if ( elementImg && !elementImg.getAttribute( '_cke_protected_html' ) )
 					element = elementImg;
 				else
@@ -674,6 +678,12 @@
 				this.editObj[ 'imagePreview' ].setAttribute( 'src', '' );
 
+			if ( this.editObj[ 'imageOriginal' ] )
+			{
+				this.editObj[ 'imageOriginal' ].removeListener( 'load', onImgLoad );
+				this.editObj[ 'imageOriginal' ].removeListener( 'error', onImgLoadError );
+				this.editObj[ 'imageOriginal' ].removeListener( 'abort', onImgLoadError );
+				this.editObj[ 'imageOriginal' ].remove();
+			}
 			this.editObj[ 'imagePreview' ] = false;
-			this.editObj[ 'imageOriginal' ].remove();
 
 			// Don't call onChange before onShow.
