Index: /FCKeditor/branches/developers/alfonsoml/_test/manual/fckimagepreloader/test1.html
===================================================================
--- /FCKeditor/branches/developers/alfonsoml/_test/manual/fckimagepreloader/test1.html	(revision 69)
+++ /FCKeditor/branches/developers/alfonsoml/_test/manual/fckimagepreloader/test1.html	(revision 69)
@@ -0,0 +1,60 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<title>FCKScriptLoader</title>
+	<script src="../../../editor/_source/fckscriptloader.js" type="text/javascript"></script>
+	<script type="text/javascript">
+
+FCKScriptLoader.Load( 'FCKImagePreloader' ) ;
+
+	</script>
+	<script type="text/javascript">
+
+window.onload = function()
+{
+	var oPreloader = new FCKImagePreloader() ;
+	oPreloader.AddImages( [ '../_common/strip.gif', '../_common/check.gif' ] ) ;
+	oPreloader.AddImages( '../_common/smiley.gif;../_common/arrowdown.gif' ) ;
+	oPreloader.OnComplete = LoadImages ;
+	oPreloader.Start() ;
+	
+	// To test the undesired behavior, just comment the above Start() call and
+	// uncomment the following line.
+	// LoadImages() ;
+}
+
+function LoadImages()
+{
+	var sHtml1 = '' ;
+	var sHtml2 = '' ;
+	var sHtml3 = '' ;
+	var sHtml4 = '' ;
+	
+	for ( var i = 0 ; i < 10 ; i++ )
+	{
+		sHtml1 += '<img src="../_common/strip.gif" />' ;
+		sHtml2 += '<img src="../_common/check.gif" />' ;
+		sHtml3 += '<img src="../_common/smiley.gif" />' ;
+		sHtml4 += '<img src="../_common/arrowdown.gif" />' ;
+	}
+	
+	document.body.innerHTML += sHtml1 + sHtml2 + sHtml3 + sHtml4 ;
+}
+
+	</script>
+</head>
+<body>
+	<h1>
+		FCKScriptLoader
+	</h1>
+	<p>
+		Cleanup your browser cache. Load this page and watch the communications using Fiddler.
+		You must have just one HTTP 200 response for "strip.gif", "check.gif", "smiley.gif"
+		and "arrowdown.gif". All other responses for those files must be HTTP 304 (browser
+		cache), if any.
+	</p>
+	<p>
+		This is a IE only issue. Other browser will perform well whithout FCKScriptLoader.
+	</p>
+</body>
+</html>
Index: /FCKeditor/branches/developers/alfonsoml/editor/_packager.xml
===================================================================
--- /FCKeditor/branches/developers/alfonsoml/editor/_packager.xml	(revision 68)
+++ /FCKeditor/branches/developers/alfonsoml/editor/_packager.xml	(revision 69)
@@ -41,4 +41,5 @@
 		<File path="editor/_source/internals/fcktools_ie.js" />
 		<File path="editor/_source/fckeditorapi.js" />
+		<File path="editor/_source/classes/fckimagepreloader.js" />
 
 		<File path="editor/_source/internals/fckregexlib.js" />
@@ -123,4 +124,5 @@
 		<File path="editor/_source/internals/fcktools_gecko.js" />
 		<File path="editor/_source/fckeditorapi.js" />
+		<File path="editor/_source/classes/fckimagepreloader.js" />
 
 		<File path="editor/_source/internals/fckregexlib.js" />
Index: /FCKeditor/branches/developers/alfonsoml/editor/_source/classes/fckimagepreloader.js
===================================================================
--- /FCKeditor/branches/developers/alfonsoml/editor/_source/classes/fckimagepreloader.js	(revision 69)
+++ /FCKeditor/branches/developers/alfonsoml/editor/_source/classes/fckimagepreloader.js	(revision 69)
@@ -0,0 +1,45 @@
+﻿var FCKImagePreloader = function()
+{
+	this._Images = new Array() ;
+}
+
+FCKImagePreloader.prototype = 
+{
+	AddImages : function( images )
+	{
+		if ( typeof( images ) == 'string' )
+			images = images.split( ';' ) ;
+		
+		this._Images = this._Images.concat( images ) ;
+	},
+	
+	Start : function()
+	{
+		var aImages = this._Images ;
+		this._PreloadCount = aImages.length ;
+	
+		for ( var i = 0 ; i < aImages.length ; i++ )
+		{
+			var eImg = document.createElement( 'img' ) ;
+			eImg.onload = eImg.onerror = _FCKImagePreloader_OnImage ;
+			eImg._FCKImagePreloader = this ;
+			eImg.src = aImages[i] ;
+			
+			_FCKImagePreloader_ImageCache.push( eImg ) ;
+		}
+	}
+};
+
+// All preloaded images must be placed in a global array, otherwise the preload
+// magic will not happen.
+var _FCKImagePreloader_ImageCache = new Array() ;
+
+function _FCKImagePreloader_OnImage()
+{
+	var oImagePreloader = this._FCKImagePreloader ;
+	
+	if ( (--oImagePreloader._PreloadCount) == 0 && oImagePreloader.OnComplete )
+		oImagePreloader.OnComplete() ;
+
+	this._FCKImagePreloader = null ;
+}
Index: /FCKeditor/branches/developers/alfonsoml/editor/_source/fckscriptloader.js
===================================================================
--- /FCKeditor/branches/developers/alfonsoml/editor/_source/fckscriptloader.js	(revision 68)
+++ /FCKeditor/branches/developers/alfonsoml/editor/_source/fckscriptloader.js	(revision 69)
@@ -77,4 +77,5 @@
 FCKScriptLoader.AddScript( 'FCKConstants' ) ;
 FCKScriptLoader.AddScript( 'FCKJSCoreExtensions' ) ;
+FCKScriptLoader.AddScript( 'FCKImagePreloader'	, 'classes/' ) ;
 FCKScriptLoader.AddScript( 'FCKBrowserInfo'		, 'internals/'	, ['FCKJSCoreExtensions'] ) ;
 FCKScriptLoader.AddScript( 'FCKConfig'			, 'internals/' ) ;
@@ -89,4 +90,3 @@
 FCKScriptLoader.AddScript( 'FCKListHandler'		, 'internals/'	, ['FCKJSCoreExtensions','FCKDomTools','FCKTools'], FCK_GENERIC ) ;
 FCKScriptLoader.AddScript( 'FCKW3CRange'		, 'classes/'	, ['FCKDomTools','FCKTools','FCKDocumentFragment'], FCK_GENERIC ) ;
-
 // ####################################
Index: /FCKeditor/branches/developers/alfonsoml/editor/_source/internals/fck_ie.js
===================================================================
--- /FCKeditor/branches/developers/alfonsoml/editor/_source/internals/fck_ie.js	(revision 68)
+++ /FCKeditor/branches/developers/alfonsoml/editor/_source/internals/fck_ie.js	(revision 69)
@@ -160,36 +160,16 @@
 }
 
-var FCK_PreloadImages_Count = 0 ;
-var FCK_PreloadImages_Images = new Array() ;
-
 function FCK_PreloadImages()
 {
-	// Get the images to preload.
-	var aImages = FCKConfig.PreloadImages || [] ;
-	
-	if ( typeof( aImages ) == 'string' )
-		aImages = aImages.split( ';' ) ;
+	var oPreloader = new FCKImagePreloader() ;
+	
+	// Add the configured images.
+	oPreloader.AddImages( FCKConfig.PreloadImages ) ;
 
 	// Add the skin icons strip.
-	aImages.push( FCKConfig.SkinPath + 'fck_strip.gif' ) ;
-	
-	FCK_PreloadImages_Count = aImages.length ;
-
-	var aImageElements = new Array() ;
-	
-	for ( var i = 0 ; i < aImages.length ; i++ )
-	{
-		var eImg = document.createElement( 'img' ) ;
-		eImg.onload = eImg.onerror = FCK_PreloadImages_OnImage ;
-		eImg.src = aImages[i] ;
-		
-		FCK_PreloadImages_Images[i] = eImg ;
-	}
-}
-
-function FCK_PreloadImages_OnImage()
-{
-	if ( (--FCK_PreloadImages_Count) == 0 )
-		FCKTools.RunFunction( LoadToolbarSetup ) ;
+	oPreloader.AddImages( FCKConfig.SkinPath + 'fck_strip.gif' ) ;
+
+	oPreloader.OnComplete = LoadToolbarSetup ;
+	oPreloader.Start() ;
 }
 
Index: /FCKeditor/branches/developers/alfonsoml/editor/fckeditor.html
===================================================================
--- /FCKeditor/branches/developers/alfonsoml/editor/fckeditor.html	(revision 68)
+++ /FCKeditor/branches/developers/alfonsoml/editor/fckeditor.html	(revision 69)
@@ -57,4 +57,5 @@
 LoadScript( '_source/internals/fcktools_' + sSuffix + '.js' ) ;
 LoadScript( '_source/fckeditorapi.js' ) ;
+LoadScript( '_source/classes/fckimagepreloader.js' ) ;
 LoadScript( '_source/internals/fckregexlib.js' ) ;
 LoadScript( '_source/internals/fcklanguagemanager.js' ) ;
