﻿
var allPreloaders = new Array;
var allPreloaderCount = 0;

function addPreloader( ip) {
  allPreloaders.push(ip);
  allPreloaderCount++;
}

function startPreloading() {
	for( var i = 0; i < allPreloaders.length; i++)
		allPreloaders[i].startPreloading();
}

function ImagePreloader(preImages, callback)
{
   // store the call-back
   this.callback = callback;

   // initialize internal state.
   this.nLoaded = 0;
   this.nProcessed = 0;
   this.aImages = new Array;

   // record the number of images.
   this.nImages = preImages.length;
	 this.preImages = preImages;
}

ImagePreloader.prototype.startPreloading = function()
{
	if( this.preImages.length == 0)
	{
		this.callback(this.aImages, this.nLoaded);
    allPreloaderCount--;
    if( allPreloaderCount == 0)
    {
			if( window.correctPNGTransparency)
				correctPNGTransparency();
			loadMenuImages();
			startTimer();
    }
	}	

  // for each image, call preload()
  for ( var i = 0; i < this.preImages.length; i++ ) 
     this.preload(this.preImages[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.aImages, this.nLoaded);
      allPreloaderCount--;
      if( allPreloaderCount == 0)
      {
				if( window.correctPNGTransparency)
					correctPNGTransparency();
				loadMenuImages();
				startTimer();
      }
   }
}

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();
}
