function ImagePreloader(imageClientID, mapClientID, images, callback)
{
   // store the call-back

   this.callback = callback;

   // initialize internal state.

	this.nLoaded = 0;

	this.nProcessed = 0;

	this.aImages = new Array;

	this.mapClientID = mapClientID;

	this.imageClientID = imageClientID;
	//this.ctlImage2Swap = dnn.dom.getById(imageClientID);
	
	
   // record the number of images.

   this.nImages = images.length;

 

   // for each image, call preload()

   for ( var i = 0; i < images.length; i++ ) 

      this.preload(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 )

   {
	/* Test To check if the images are properly cached -> doesn't seem to work properly on the first load (getmap.aspx gets called again)
	//
	 var oImage = new Image;
	 oImage.src = this.aImages[2].src;
	
	/**/
      this.callback(this.imageClientID, this.mapClientID, this.aImages, this.nLoaded);

   }

}

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();

}