function PreloadImage(src)
{
	var imgSrc = src;
	var imgObj = null;

	this.load = function ()
	{
		imgObj = new Image();
		imgObj.src = imgSrc;
	}

	this.getSrc = function () { return imgSrc; };
	this.setSrc = function (src) { imgSrc = src; imgObj.src = src; };
}

function ImageLoaderObject()
{
	var preloadImages = new Array();
	var keysByName = new Array();
	
	var setKey = function (name, key)
	{
		keysByName[name] = key + 1; // this is to avoid confusion between 0 and null
	};

	var getKey = function (name)
	{
		var key = keysByName[name];
		if (key>0) {
			return key - 1;
		} else {
			return -1;
		}
	};

	this.addImage = function (name, src)
	{
		var index = preloadImages.length;
		preloadImages[index] = new PreloadImage(src);
		setKey(name,index);
	};

	this.loadNow = function ()
	{
		var i;
		for (i=0; i<preloadImages.length; i++) {
			preloadImages[i].load();
		}
		this.loaded = true;
	};

	this.getImageByName = function (name)
	{
		var index = getKey(name);
		if ((!this.loaded) || index == -1) {
			return null;
		} else {
			return preloadImages[index];
		}
	};

	this.loaded = false;
}

if (document.images) {
	window.imageLoader = new ImageLoaderObject();
	if (window.pageLoader) {
		window.pageLoader.addAction("window.imageLoader.loadNow()");
	} else {
		window.onload = function () { window.imageLoader.loadNow(); };
	}
	window.swapImages = function (name, preloadName)
	{
		if (document[name]) {
			var tmp = document[name].src;
			var preloadImage = window.imageLoader.getImageByName(preloadName);
			if (preloadImage) {
				document[name].src = preloadImage.getSrc();
				preloadImage.setSrc(tmp);
			}
		}
	};
} else {
	window.swapImages = function (name, preloadNam) {};
}