function ImagePreloader( p_aImages, p_fCallback )
{
   // Save referene to callback function.
   this.m_fCallback = p_fCallback; 

   // Initialize internal state.
   this.m_iLoaded = 0;
   this.m_iProcessed = 0;
   this.m_aImages = new Array; 

   // Save number of images.
   this.m_iImages = p_aImages.length; 

   // Peload each image.
   for ( var i = 0; i < p_aImages.length; i++ )
      this.Preload( p_aImages[ i ] );
}

ImagePreloader.prototype.Preload = function( p_oImage )
{
   // Create new Image object and add to array.
   var l_oImage = new Image();
   this.m_aImages.push( l_oImage );   

   // Set up event handlers for the Image object
   l_oImage.onload = ImagePreloader.prototype.onload;
   l_oImage.onerror = ImagePreloader.prototype.onerror;
   l_oImage.onabort = ImagePreloader.prototype.onabort;   

   // Assign pointer back to this.
   l_oImage.m_oImagePreloader = this;
   l_oImage.m_bLoaded = false;
   l_oImage.m_bError = false;
   l_oImage.m_Abort = false;

   // Assign the .src property of the Image object.
   l_oImage.src = p_oImage;
}

ImagePreloader.prototype.onComplete = function()
{
	this.m_iProcessed++;

	if ( this.m_iProcessed == this.m_iImages )
		this.m_fCallback( this.m_aImages, this.m_iLoaded );	
}

ImagePreloader.prototype.onload = function()
{
	this.m_bLoaded = true;
	this.m_oImagePreloader.m_iLoaded++;

	this.m_oImagePreloader.onComplete();
}

ImagePreloader.prototype.onerror = function()
{
   this.m_bError = true;
   this.m_oImagePreloader.onComplete();

}

ImagePreloader.prototype.onabort = function()
{
   this.m_Abort = true;
   this.m_oImagePreloader.onComplete();
}





