/*
images.js
Randomise a series of images on a page, changing according to a timer and from a set pool of images.
*/
var cTotalImages = 79;
var cPageImages = 10;
var cImageNamePrefix = "images/abdn";
var cImageNameSuffix = ".jpg";
var cImageIdPrefix = "rnd_img_";

var imgs;
var imgs_use;
var tSwapTimer = 0;
var iTimerMillisecs = 1500;

function zeroPad(num,count) {
	var numZeropad = num + "";
	while (numZeropad.length < count) {
		numZeropad = "0" + numZeropad;
	}
	return numZeropad;
}

function initRndImages() {
	// Load all images into array so they'll be ready for action
	imgs = new Array();
	for (i=1; i<=cTotalImages; i++) {
		var sImgNum = zeroPad(i, 2);
		imgs[sImgNum] = new Image();
		imgs[sImgNum].src = makeImageUrl(sImgNum);
	}
	
	// Page loads startup images
	imgs_use = new Array();
	for (i=1; i<=cPageImages; i++) {
		var sImgNum = zeroPad(i, 2);
		var sSlotNum = zeroPad(i, 2);
		addImageToSlot(sImgNum, sSlotNum);
	}
	
	if (!tSwapTimer) {
		tSwapTimer = setTimeout("swapRndImage()", iTimerMillisecs);
	}
}

function makeImageUrl(sImgNum) { return cImageNamePrefix + sImgNum + cImageNameSuffix; }
function imageIsInUse(sImgNum) { return imgs_use[sImgNum]; }
function getRandomImage() { return Math.floor(Math.random()*cTotalImages) + 1; }
function getRandomSlot() { return Math.floor(Math.random()*cPageImages) + 1; }
function addImageToSlot(sImgNum,sSlotNum) { imgs_use[sImgNum] = sSlotNum; }

function delImageFromSlot(sSlotNum) {
	for (i=1; i<=cTotalImages; i++) {
		var sImgNum = zeroPad(i, 2);
		if (imgs_use[sImgNum] == sSlotNum) {
			delete imgs_use[sImgNum];
			return;
		}
	}
}

function getUnusedImgNum() {
	var sImgNum;
	
	do {
		sImgNum = zeroPad(getRandomImage(), 2);
	} while (imageIsInUse(sImgNum));

	return sImgNum;
}

function swapRndImage() {
	var iRndSlot = getRandomSlot();	// Pick a random image slot to swap
	var sSlotNum = zeroPad(iRndSlot, 2);
	var elem_id = cImageIdPrefix + sSlotNum;
	var elem = document.getElementById(elem_id);
	var sImgNum = getUnusedImgNum();	// Pick a random image to swap in, must not already be in a slot
	var sImgUrl = makeImageUrl(sImgNum);
	
	delImageFromSlot(sSlotNum);
	addImageToSlot(sImgNum, sSlotNum);
	elem.src = sImgUrl;

	tSwapTimer = setTimeout("swapRndImage()", iTimerMillisecs);
	return false;
}
