// +---------------------+ //
// | Image Preload Class | //
// +---------------------+ //

function ImagePreload( ImageList, LoadProgress, LoadFinished ) {
   // Call-back routines
   this.m_Percent = LoadProgress;
   this.m_Finished = LoadFinished;

   // Class Member Vars
   this.m_loaded = 0;
   this.m_processed = 0;
   this.m_images = new Array;
   this.m_count = ImageList.length;

   // Preload Array of Images
   for( var i = 0; i < ImageList.length; i++ ) {
      this.Preload( ImageList[i] );
      }
}

ImagePreload.prototype.Preload = function( p_oImage ) {
   var oImage = new Image;
   this.m_images.push( oImage );

   oImage.onload = ImagePreload.prototype.OnLoad;
   oImage.onerror = ImagePreload.prototype.OnError;
   oImage.onabort = ImagePreload.prototype.OnAbort;

   oImage.oImagePreload = this;
   oImage.bLoaded = false;
   oImage.source = p_oImage;
   oImage.src = p_oImage;
}

ImagePreload.prototype.OnComplete = function() {
   this.m_processed++;
   if ( this.m_processed == this.m_count )
      this.m_Finished();
   else
      this.m_Percent( Math.round( (this.m_processed / this.m_count) * 10 ), this.m_count );
}

ImagePreload.prototype.OnLoad = function() {
   // 'this' pointer points to oImage Object
   this.bLoaded = true;
   this.oImagePreload.m_loaded++;
   this.oImagePreload.OnComplete();
}

ImagePreload.prototype.OnError = function() {
   // 'this' pointer points to oImage Object
   this.bError = true;
   this.oImagePreload.OnComplete();
}

ImagePreload.prototype.OnAbort = function() {
   // 'this' pointer points to oImage Object
   this.bAbort = true;
   this.oImagePreload.OnComplete();
}

