/* The primary impetus for this script was to provide a default cat picture, as
the original JavaScript this replaces made no allowance for browsers
with JavaScript disabled; they saw no picture at all.
I had seen my first JavaScript crossfade at slayeroffice 
(http://slayeroffice.com/code/imageCrossFade/xfade2.html)
and was impressed, so I thought, what the heck, while I'm at it...
Grateful acknowledgement to some really smart people whose code I adapted 
or stole outright, including:
Richard Rutter http://clagnut.com/sandbox/imagefades/
Dean Edwards http://dean.edwards.name/weblog/2006/06/again/?full
Peter-Paul Koch http://www.quirksmode.org/js/contents.html
brothercake
*/

var imagesCount = 5;
var seenCats = new Array(imagesCount);
var seenCatsCounter = 0;
var currentIndex = 0;
var imageTag;
var imageTag2;
var newcat;
var firstTimeThru = true;
var isFading = false;
var clickCount = 0;
var step = 5;
var interval = 30;

var images = new Array(imagesCount);
images[0] = new Array("/comp/img/paris-expo-ad.jpg","");
images[1] = new Array("/comp/img/mac-mini.jpg","");
images[2] = new Array("/comp/img/matias-keyboard.jpg","");
images[3] = new Array("/comp/img/interface-builder.jpg","");
images[4] = new Array("/comp/img/macworld-ny.jpg","");

function removeDefaultCat () {
	if (document.getElementById) {
		var headerdiv = document.getElementById("header");
		var categoryimg = document.getElementById("category");
		if (headerdiv && categoryimg) {
			try {
				headerdiv.removeChild(categoryimg);
				firstTime();
			} catch(errMsg) {
				window.setTimeout("removeDefaultCat()",100);
			}
		} else {
			window.setTimeout("removeDefaultCat()",100);
		}
	} else {
		window.setTimeout("removeDefaultCat()",100);
	}
}

function getImageIndex() {
	var currentnum = currentIndex;
	currentIndex = getRandom();	
	if (seenCatsCounter < imagesCount) {
		while (checkCat(currentIndex) === true) {
			currentIndex = getRandom();
			checkCat(currentIndex);
		}
		seenCats[seenCatsCounter] = currentIndex;
		seenCatsCounter++;
	} else {
		while (currentnum == currentIndex) {
			currentIndex = getRandom();
		}
		seenCats = new Array(imagesCount);
		seenCatsCounter = 0;
		seenCats[seenCatsCounter] = currentIndex;
		seenCatsCounter++;
	}
}

function checkCat(arrNum) {
	for (var i = 0; i < imagesCount; i++) {
		if (seenCats[i] === null) {
			return false;
		}
		if (arrNum == seenCats[i]) {
			return true;
		}
	}
	return false;
}

function getRandom() {
	if (Math.random) {
		var ranNum = Math.round(Math.random()*(imagesCount - 1));
		return ranNum;
	}
	else
	{
		return 4;
	}
}

function preloadImage() {
	isFading = true;
	getImageIndex(); /* sets currentIndex */
	newcat = new Image();
	newcat.src = images[currentIndex][0];
	newcat.onload = setCat;
}

function setCat() {
	if (firstTimeThru) {
		// set up main image
		setOpacity(imageTag2, 0);
		imageTag.src = newcat.src;
		imageTag.setAttribute("alt",images[currentIndex][1]);
		imageTag.setAttribute("title",images[currentIndex][1]);
		setOpacity(imageTag, 0);
		crossfade();
	} else {
		// remove utility image (behind main image), load it with new image and re-insert it
		var headerdiv = document.getElementById("header");
		var category2img = document.getElementById("category2");
		if (headerdiv && category2img) {
			headerdiv.removeChild(category2img);
		}
		imageTag2 = document.createElement("img");
		setOpacity(imageTag2, 0);
		imageTag2.setAttribute("id","category2");
		imageTag2.src = newcat.src; // this causes a flash under load
		var categoryimg = document.getElementById("category");
		headerdiv.insertBefore(imageTag2,categoryimg);
		crossfade();
	}
}

function crossfade() {
	if (firstTimeThru) {
		window.setTimeout("fadeIn('category',0)",20);
	} else {
		window.setTimeout("fadeOut('category',100)",0);
		window.setTimeout("fadeIn('category2',0)",20);
		window.setTimeout("switchSrc()",1600);
	}
}

function switchSrc () {


	imageTag.src = imageTag2.src;
	imageTag.setAttribute("alt",images[currentIndex][1]);
	imageTag.setAttribute("title",images[currentIndex][1]);
	imageTag2.removeAttribute("src");
	setOpacity(imageTag,100);
	setOpacity(imageTag2,0);
	isFading = false;
	clickCount = 0;
}

function switchImage() {
	clickCount++;
	if (clickCount == 1) {
		firstTimeThru = false;
		if (!isFading && clickCount > 0) {
			isFading = true;
			preloadImage();
		}
	}
}

function createSrc1() {
	if (document.createElement) {
		if (document.getElementById) {
			imageTag2 = document.createElement("img");
			setOpacity(imageTag2, 0);
			imageTag2.setAttribute("id","category2");
			var headerdiv = document.getElementById("header");
			var menubgdiv = document.getElementById("menubg");
			headerdiv.insertBefore(imageTag2,menubgdiv);
		}
	}
}

function createSrc2() {
	if (document.createElement) {
		if (document.getElementById) {
			imageTag = document.createElement("img");
			setOpacity(imageTag, 0);
			imageTag.setAttribute("id","category");
			imageTag.onclick = function() {
				switchImage();
			}
			var headerdiv = document.getElementById("header");
			var menubgdiv = document.getElementById("menubg");
			headerdiv.insertBefore(imageTag,menubgdiv);
		}
	}
}

function firstTime() {
	createSrc1();
	createSrc2();
	preloadImage();
}


// clagnut.com
function setOpacity(obj, opacity) {

	opacity = (opacity == 100)?99.999:opacity;

	// IE/Win
	obj.style.filter = "alpha(opacity="+opacity+")";
	
	// Safari<1.2, Konqueror
	obj.style.KHTMLOpacity = opacity/100;
	
	// Older Mozilla and Firefox
	obj.style.MozOpacity = opacity/100;
	
	// Safari 1.2, newer Firefox and Mozilla, CSS3
	obj.style.opacity = opacity/100;
}

// clagnut.com
function fadeIn(objId,opacity) {
	var obj = document.getElementById(objId);
	if (opacity <= 100) {
		setOpacity(obj, opacity);
		opacity += step;
		window.setTimeout("fadeIn('"+objId+"',"+opacity+")", interval);		
	} else {
		isFading = false;
	}
}

// clagnut.com
function fadeOut(objId,opacity) {
	if (document.getElementById) {
		var obj = document.getElementById(objId);
		if (opacity >= 0) {
			setOpacity(obj, opacity);
			opacity -= step;
			window.setTimeout("fadeOut('"+objId+"',"+opacity+")", interval);

		}
	}
}

function calladdsrc() {
	window.setTimeout("addsrc()",5000);
}

function addsrc() {
	if (document.getElementById) {
		var footerdiv = document.getElementById("footer");
		var scriptTag = document.createElement("script");
		scriptTag.src = "/com/footer.js";
		scriptTag.type = "text/javascript";
		footerdiv.appendChild(scriptTag);
	}
}

window.onload = calladdsrc;

// dean.edwards.name
// setTimeout gives them enough time, otherwise removeDefaultCat runs twice
/* for Safari and OmniWeb */
// default cat still flashes briefly with OmniWeb
if (/KHTML|OmniWeb|Opera/i.test(navigator.userAgent)) { // sniff
	window.setTimeout("removeDefaultCat();",0);
/* for Firefox/Opera - getting flashes with Firefox, too */
//} else if (document.addEventListener) {
//	document.addEventListener("DOMContentLoaded", removeDefaultCat, false);
} else {
/* for other browsers */
	removeDefaultCat();
}
