/*
PRELOADER.JS
Image preloading manager class
*/

function ImagePreloader(src_list, callback, hook) {
   // store the callbacks
   this.callback = callback;
   this.hook     = hook;
   
   // initialize internal state.
   this.nLoaded    = 0;
   this.nProcessed = 0;
   this.aImages    = new Array;
 
   // record the number of images.
   this.nImages = src_list.length;
 
   // for each image, call preload()
   for (var i = 0; i < src_list.length; i++) {
      this.preload(src_list[i]);
   }
}

ImagePreloader.prototype.preload = function(src) {
   // 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 = src;
}

ImagePreloader.prototype.onComplete = function() {
   this.nProcessed++;
   this.hook(Math.round(this.nProcessed / this.nImages * 100));
   
   if (this.nProcessed == this.nImages) {
	   this.callback(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();
}

