/**
 * ImagePreloader by Heerko van der Kooij, heerko@swummoq.net
 * dependant on prootype.js
 * based on code found on http://www.webreference.com/programming/javascript/gr/column3/
 */
var ImagePreloader 		= Class.create();
ImagePreloader.prototype = {
	bError: false,
	bAbort: false,
	nLoaded: 0,
	nProcessed: 0,
	nImages: 0,
	initialize: function (images, call_back)
	{
		// store the call-back
		this.call_back = call_back;

		// initialize internal state.
		this.nLoaded = 0;
		this.nProcessed = 0;
		this.aImages = new Array;
		// 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]);
	},
	
	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;
	},

	onComplete: function()
	{
		this.nProcessed++;
		if ( this.nProcessed == this.nImages )
		{
		  this.call_back(this.aImages, this.nLoaded);
		}
	},

	onload: function()
	{
		this.bLoaded = true;
		this.oImagePreloader.nLoaded++;
		this.oImagePreloader.onComplete();
	},

	onerror: function()
	{
		this.oImagePreloader.bError = true;
		this.oImagePreloader.onComplete();
	},

	onabort: function()
	{
		this.oImagePreloader.bAbort = true;
		this.oImagePreloader.onComplete();
	}
}
