function ImagePreloader(pl_images, callback)

{
   // store the call-back
   this.callback = callback;

 

   // initialize internal state.

   this.nLoaded = 0;

   this.nProcessed = 0;
   this.pl_images = pl_images;

   this.aImages = new Array;

 

   // record the number of images.

   this.nImages = pl_images.length;

 

   // for each image, call preload()

   for ( var i = 0; i < pl_images.length; i++ )

      this.preload(pl_images[i]);

}
ImagePreloader.prototype.preload = function(image)

{

   // create new Image object and add to array

   var oImage = new Image;

   this.aImages.push(oImage);

  

   // set up event handlers for the Image object

   oImage.onload = ImagePreloader.prototype.onload;

   oImage.onerror = ImagePreloader.prototype.onerror;

   oImage.onabort = ImagePreloader.prototype.onabort;

  

   // assign pointer back to this.

   oImage.oImagePreloader = this;

   oImage.bLoaded = false;

  

   // assign the .src property of the Image object

   oImage.src = image;

}
ImagePreloader.prototype.onComplete = function()

{

   this.nProcessed++;

   if ( this.nProcessed == this.nImages )

   {
        this.callback(this.pl_images);
   }

}

ImagePreloader.prototype.onload = function()

{

   this.bLoaded = true;

   this.oImagePreloader.nLoaded++;

   this.oImagePreloader.onComplete();

}

ImagePreloader.prototype.onerror = function()

{

   this.bError = true;

   this.oImagePreloader.onComplete();

}

ImagePreloader.prototype.onabort = function()

{

   this.bAbort = true;

   this.oImagePreloader.onComplete();

}