var image_srcs = new Array();
var hidden_images = new Array();
var visible_images = new Array();
var image_slots = new Array();

var NUM_IMAGE_SLOTS = 5;
var TIME_BETWEEN_FADES = 1000;
var FADE_TIME = 500;

function randomSort(a,b)
{
	return Math.random() > 0.5;
}

function startBanner()
{
	// Read all the images into the array.
	images_container = document.getElementById('image_list');
	for (i = 0; i < images_container.childNodes.length; i++)
	{
		if (images_container.childNodes[i].tagName == 'IMG')
		{
			image_srcs.push(images_container.childNodes[i].src);
		}
	}
	
	// Put five random images into the image containers
	generateHiddenImageList();
	generateVisibleImageList();
	generateImageSlotsList();
	for (i = 0; i < 5; i++)
	{
		showNextImage(true);
	}
	
	// Set up the callback
	window.setTimeout(revolveImage, TIME_BETWEEN_FADES);
}

function generateHiddenImageList()
{
	while(hidden_images.length > 0)
	{
		hidden_images.pop();
	}
	
	for (i = 0; i < image_srcs.length; i++)
	{
		image_visible = false;
		for (j = 0; j < visible_images.length; j++)
		{
			if (visible_images[j] == i)
			{
				image_visible = true
			}
		}
		
		if (image_visible == false)
		{
			hidden_images.push(i);
		}
	}
	
	hidden_images.sort(randomSort);
}

function generateVisibleImageList()
{
	for (i = 0; i < NUM_IMAGE_SLOTS; i++)
	{
		visible_images.push(-1);
	}
}

function generateImageSlotsList()
{
	while(image_slots.length > 0)
	{
		image_slots.pop();
	}
	
	for (i = 0; i < NUM_IMAGE_SLOTS; i++)
	{
		image_slots.push(i);
	}
	
	image_slots.sort(randomSort);
}

function showNextImage(snap)
{
	if (hidden_images.length == 0)
	{
		generateHiddenImageList();
	}
	image_index = hidden_images.pop();
	
	if (image_slots.length == 0)
	{
		generateImageSlotsList();
	}
	image_slot = image_slots.pop();
	
	if (snap == true)
	{
		front_container = document.getElementById('image_' + image_slot + '_front');
		front_container.src = image_srcs[image_index];
		visible_images[image_slot] = image_index;
	}
	else
	{
		// Set the back image.
		back_container = document.getElementById('image_' + image_slot + '_back');
		back_container.src = image_srcs[image_index];
		
		// Fade in the front image.
		new Effect.Opacity('image_' + image_slot + '_front', { from: 1.0, to: 0.0, duration: FADE_TIME / 1000 });
		
		// Set the timeout to swap the back image to the front image.
		window.setTimeout('swapImage(' + image_slot + ')', FADE_TIME);
		
		visible_images[image_slot] = image_index;
	}
}

function swapImage(image_slot)
{
	front_container = document.getElementById('image_' + image_slot + '_front');
	back_container = document.getElementById('image_' + image_slot + '_back');
	
	new Effect.Opacity('image_' + image_slot + '_front', { from: 1.0, to: 1.0 });
	
	front_container.src = back_container.src;
}

function revolveImage()
{
	showNextImage(false)
	window.setTimeout(revolveImage, TIME_BETWEEN_FADES)
}