--- /dev/null
+/*\r
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+(function()\r
+{\r
+ var loaded = {};\r
+\r
+ var loadImage = function( image, callback )\r
+ {\r
+ var doCallback = function()\r
+ {\r
+ img.removeAllListeners();\r
+ loaded[ image ] = 1;\r
+ callback();\r
+ };\r
+\r
+ var img = new CKEDITOR.dom.element( 'img' );\r
+ img.on( 'load', doCallback );\r
+ img.on( 'error', doCallback );\r
+ img.setAttribute( 'src', image );\r
+ };\r
+\r
+ /**\r
+ * @namespace Load images into the browser cache.\r
+ */\r
+ CKEDITOR.imageCacher =\r
+ {\r
+ /**\r
+ * Loads one or more images.\r
+ * @param {Array} images The URLs of the images to be loaded.\r
+ * @param {Function} [callback] A function to be called once all images\r
+ * are loaded.\r
+ * @return {CKEDITOR.event} An event object which fires the 'loaded'\r
+ * event when all images are completely loaded. Additionally, the\r
+ * "finished" property is set after the "loaded" event call.\r
+ * @example\r
+ * var loader = CKEDITOR.imageCacher.load( [ '/image1.png', 'image2.png' ] );\r
+ * if ( !loader.finished )\r
+ * {\r
+ * loader.on( 'load', function()\r
+ * {\r
+ * alert( 'All images are loaded' );\r
+ * });\r
+ * }\r
+ */\r
+ load : function( images, callback )\r
+ {\r
+ var pendingCount = images.length;\r
+\r
+ var event = new CKEDITOR.event;\r
+ event.on( 'loaded', function()\r
+ {\r
+ event.finished = 1;\r
+ });\r
+\r
+ if ( callback )\r
+ event.on( 'loaded', callback );\r
+\r
+ var checkPending = function()\r
+ {\r
+ if ( --pendingCount === 0 )\r
+ event.fire( 'loaded' );\r
+ };\r
+\r
+ for ( var i = 0 ; i < images.length ; i++ )\r
+ {\r
+ var image = images[ i ];\r
+\r
+ if ( loaded[ image ] )\r
+ checkPending();\r
+ else\r
+ loadImage( image, checkPending );\r
+ }\r
+\r
+ return event;\r
+ }\r
+ };\r
+})();\r