Classes.ImagePreloader = Class();
Classes.ImagePreloader.prototype = {
	leftToLoad: null,
	errorCnt: null,
	abort:  null,
	imagesArray: null,
	objectsArray: null,
	data:	  null,

	onImageLoad: null,
	onImageError: null,
	onImageAbort: null,

	onLoad: null,
	onError: null,
	onAbort: null,


	__construct: function(params) {
		if(!params) throw "__construct ImagePreloader: null params";
		this.copy(params);
	},

	preload: function() {
		this.errorCnt = 0;
		this.abort = 0;
		this.leftToLoad = this.imagesArray ? this.imagesArray.length : 0;
		this.objectsArray = new Array();

		for(i=0;i<this.imagesArray.length;i++) {
			var img = new Image();
			this.objectsArray.push(img);
			img.onload = this.onImgLoad.bindEvent(this,img,i);
			img.onerror = this.onImgError.bindEvent(this,img,i);
			img.onabort = this.onImgAbort.bindEvent(this,img,i);
			img.src = this.imagesArray[i];
		}
	},
	checkIfCompleted: function() {
		if(this.leftToLoad <= 0) {
			if(this.errorCnt <= 0 && this.abort <= 0 && this.onLoad) this.onLoad();
			else
				if(this.abort > 0 && this.onAbort) this.onAbort();
				else
					if(this.errorCnt > 0 && this.onError) this.onError();
		}
	},
	onImgLoad: function(e,img,index) {
		this.leftToLoad--;
		if(this.onImageLoad) this.onImageLoad(img,index);
		this.checkIfCompleted();
	},
	assignData: function(data) {
		this.data = data;
	},
	onImgError: function(e,img,index) {
		this.errorCnt++;
		this.leftToLoad--;
		if(this.onImageError) this.onImageError(img,index);
		this.checkIfCompleted();
	},
	onImgAbort: function(e,img,index) {
		this.abort++;
		this.leftToLoad--;
		if(this.onImageAbort) this.onImageAbort(img,index);
		this.checkIfCompleted();
	}
}

