// ---------- Define ImageShow class ----------
//
// (c) 2007 - Anders Bruhn Skarby, Vejle Taekwondo Klub.
//
var ImageShow = Class.create();
ImageShow.prototype = {
	at: -1,

	initialize: function(imagePaths, imageElements) {
		if (!(imagePaths instanceof Array)) {
			throw "FATAL ERROR - imagePaths argument must be an Array of paths to images.";
		}
		if (!(imageElements instanceof Array)) {
			throw "FATAL ERROR - imageElements argument must be an Array of image elements, like <img src='something'>.";
		}

		this.imageElements = imageElements;
		this.blankImage = new PreloadableImage("http://www.vejle-taekwondo.dk/modules/welcome/gfx/placeholder.jpg");
		this.images = new Array();
		for (var i=0; i<imagePaths.length; i++) {
			this.images[i] = new PreloadableImage(imagePaths[i]);
		};
	},

	runLoad: function() {
		this.at++;
		if (this.at < this.images.length) {
			var element = this.images[this.at];
			element.load();
			this.imageElements[this.at].src = element.image.src;
		}
	},

	run: function() {
		this.at++;
		var index = Math.floor(this.imageElements.length * Math.random());
		var element = this.imageElements[index].id;
		this.randomEffect(element);
	},

	randomEffect: function(element) {
		var fx = Math.floor(2 * Math.random());
		switch (fx) {
			case 0:
				// Make the image pulsate (blink)
				Effect.Pulsate(element, { scope: 'box', queue: 'end' });
				break;
			case 1:
				// Do nothing
				break;
		}
	}
}

var PreloadableImage = Class.create();
PreloadableImage.prototype = {
	loaded: false,

	initialize: function(path) {
		this.path = path;
		this.image = new Image();
	},

	load: function() {
		if (!this.loaded) {
			this.image.src = this.path;
			this.loaded = true;
		}
	}
}

// Usage of ImageShow
function initializeImageShow(imageShow) {
	if (!(imageShow instanceof ImageShow)) {
		throw "FATAL ERROR - must be given an ImageShow object.";
	}
	new PeriodicalExecuter(function(e) {
		imageShow.runLoad();
	}, 0.01);

	new PeriodicalExecuter(function(e) {
		imageShow.run();
	}, 2);
}