var SHOW_TIMEOUT = 3000;
var FADE_SPEED = 100;
var FADE_STEP = 10;
var ACTIVE_IMAGES = 1;
var prefix = "http://bohmian.org/files/images/m/reg";
var images = Array();


function buildImages(base)
{
	for(var n in bohmImages)
	{
		var imageName = bohmImages[n];
		var imageText = bohmText[n];
		var imageLink = bohmLink[n];
		var image = prefix+imageName;
		var div = document.createElement("div");
		var elmt  = document.createElement("img");
		images.push(div);
		elmt.setAttribute("src", image);
		div.style.display = "none";
		div.appendChild(elmt);
		if(imageText)
		{
			var ptxt = document.createElement("div");
			if(imageLink)
			{
				ptxt.onclick = function() { window.open(imageLink); };
			}
			div.appendChild(ptxt);
			ptxt.appendChild(document.createTextNode(imageText));
			ptxt.style.color = "#ddd";
		}
		base.appendChild(div);
	} 
}

function show() { setShow(); }
function setShow()
{
	setTimeout("showNext()", SHOW_TIMEOUT);
}

var lastShown = images.length-1;
function showNext()
{
	var hideValue = lastShown - ACTIVE_IMAGES + 1;
	if(hideValue < 0) hideValue = images.length + hideValue;
	toHide = images[hideValue];
	if(toHide) fadeOut(100);
	if(lastShown == images.length-1) lastShown = 0; else ++lastShown;
	toShow = images[lastShown];
	fadeIn(0);
	setShow();
}

function positionElement(elmt)
{
	elmt.style.position = 'absolute';
	// display off-screen
	elmt.style.left	 = -9999; elmt.style.top	  = -9999;
	elmt.style.display="block";
	// move to location
	elmt.style.left	 = _getLeft(elmt);
	elmt.style.top	  = _getTop(elmt);
}

function _getLeft(elmt)
{
	var size = elmt.clientWidth || elmt.outerWidth;
	var screenSize = window.innerWidth || document.documentElement.clientWidth;
	var rval = Math.floor(Math.random()*(screenSize - size));
	if(window.innerWidth < rval + size) rval = window.innerWidth-size;
	if(rval< 0 || rval > window.innerWidth) rval=0;
	return rval + "px";
}
function _getTop(elmt)
{
	var size = elmt.clientHeight || elmt.outerHeight;
	var screenSize = window.innerHeight || document.documentElement.clientHeight;
	var rval = Math.floor(Math.random()*(screenSize - size));
	if(window.innerHeight < rval + size) rval = window.innerHeight-size;
	if(rval< 0 || rval > window.innerHeight) rval=0;
	return rval + "px";
}

// Retiring an image
var toHide = null;
function fadeOut(perc)
{
	if(perc <= 0)
	{
		toHide.style.opacity = 0;
		toHide.style.display="none";
		return;
	}
	toHide.style.opacity = perc/100.0;
	setTimeout("fadeOut(" + (perc-FADE_STEP) + ")", FADE_SPEED);
}

// Producing an image
var toShow = null;
function fadeIn(perc)
{
	if(perc == 0)
	{
		positionElement(toShow);
	}
	if(perc >= 100)
	{
		toShow.style.opacity = 1;
		return;
	}
	toShow.style.opacity = perc/100.0;
	setTimeout("fadeIn(" + (perc+FADE_STEP) + ")", FADE_SPEED);
}

function run(base)
{
	if(!base) base = document.body;
	buildImages(base);
	show();
}
