// *** JSF ImgList
// *** (c) feel by fish 
// *** http://www.imagen.pl
// *** 2000.07.01
// *** GNU GPL distribution

// -> listy obrazkow do preloadingu
// JSFImgList - lista obrazkow do preloadingu (add -> run)

// lista obrazkow
function JSFImgList() {
	this.list = new Array();
	// (prawie) unikalny objname
	this.objname = "ilist" + Math.floor(Math.random()*1000);
	//this.objname = "ilist" + (new Date()).getTime();
	eval(this.objname + "=this");

	this.errors = 0;
	this.completed = 0;
	this.completedP = 0;
	this.display = null;
	
	this.onLoad = null;
}

// metody obiektu: dodaj, rozpocznij, wpisz stan procentowy
JSFImgList.prototype.add = JSFImgListAdd;
JSFImgList.prototype.run = JSFImgListRun;
JSFImgList.prototype.setp = JSFImgListSetPercent;

function JSFImgListAdd(url, size) {
	this.list[this.list.length] = new JSFImgListObj(url, size);
}

function JSFImgListRun() {
	this.setp();
	for (i=0; i<this.list.length; i++) {
		this.list[i].obj = new Image();
		obj = this;
		this.list[i].obj.onload = new Function("_jsfilistcomplete(\"" + this.objname + "\", " + i + ")");
		this.list[i].obj.onerror = new Function("_jsfilisterror(obj, " + i + ")");
		this.list[i].running = true;
		this.list[i].obj.src = this.list[i].url;
	}
}

// wylicz udzial procentowy
// dwie grupy: z/bez zdefiniowanych rozmiarow
function JSFImgListSetPercent() {
	sized = 0; sizemax = 0;
	for (i=0; i<this.list.length;i++)
		if (this.list[i].size != null) { sized++; sizemax += this.list[i].size; }
	sizedP = sized/this.list.length;
	percent = 0;
	for (i=0; i<this.list.length;i++) {
		if (i==this.list.length-1) p=100-percent;	// wyrownaj zaokraglenia
		else {
			if (this.list[i].size != null) p = Math.round(this.list[i].size*sizedP*100/sizemax);
			else p = Math.round(100/this.list.length);
		}
		percent += p;
		this.list[i].percent = p;
	}
}

// pomocnicze dla JSFImgList
function _jsfilistcomplete(objname, nr) {
	o = eval(objname);
	o.completed++;
	o.completedP += o.list[nr].percent;
	o.list[nr].loaded = true;
	o.list[nr].running = false;
	if (o.display != null)
		o.display.setProc(o.completedP);
	if (o.completed == o.list.length && o.onLoad)
		o.onLoad();
}

function _jsfilisterror(objname, nr) {
	o = eval(objname);
	o.errors++;
	o.list[nr].error = true;
	_jsfilistcomplete(objname, nr);
}

// reprezentacja pojedynczego obrazka
function JSFImgListObj(url, size) {
	this.url = url;
	this.size = size;
	this.percent = 0;
	this.obj = null;
	this.loaded = false;
	this.error = false;
	this.running = false;
}

// modfish: load part
if (window.JSFModules!=null) {
	JSFModules[JSFModules.length] = "jsf-imglist";
	loadJSFModules();
}

