/* Copyright Jon Chester, White Room Software Inc. 2005 */

var isIE = navigator.userAgent.toLowerCase().indexOf('msie') != -1;
var isSafari = navigator.userAgent.toLowerCase().indexOf('safari') != -1;

CrossFader = function(elem1, elem2, imgUrls, crossFadeMS, pauseMS) {
	this.elem1 = elem1;
	this.elem2 = elem2;
	this.imgUrls = imgUrls;
	this.nextImg = Math.floor(Math.random() * imgUrls.length);
	this.crossFadeMS = crossFadeMS;
	this.pauseMS = pauseMS;
	this.iter = 0;
	var mThis = this;

	var handler = function() {
		var newElem = (mThis.iter % 2 == 0) ? mThis.elem1 : mThis.elem2;
		newElem.style.visibility = 'visible';
		mThis.doCrossFade();
		mThis.iter++;
	}

	elem1.onload = handler;
	elem2.onload = handler;
	elem1.fader = this;
	elem2.fader = this;
}

CrossFader.prototype.setOpacity = function(elem, opacity) {
	opacity = (opacity == 100) ? 99.99 : opacity;

	if (isIE) {
		elem.style.filter = 'alpha(opacity=' + opacity + ')';
	} else if (isSafari) {
		elem.style.opacity = opacity / 100;
	} else {
		elem.style.MozOpacity = opacity / 100;
	}
}

CrossFader.prototype.doCrossFade = function() {
	var mThis = this;
	this.fadeIter = 0;
	this.newElem = (this.iter % 2 == 0) ? this.elem1 : this.elem2;
	this.oldElem = (this.iter % 2 == 0) ? this.elem2 : this.elem1;

	var handler = function() {
		if (mThis.fadeIter < 100) {
			mThis.setOpacity(mThis.newElem, mThis.fadeIter);
			if (mThis.iter != 0) mThis.setOpacity(mThis.oldElem, 100 - mThis.fadeIter);
			mThis.fadeIter++;
			setTimeout(handler, mThis.crossFadeMS / 100);
		}
		else {
			var callback = function() {
				mThis.oldElem.src = mThis.imgUrls[mThis.nextImg];
				mThis.nextImg = (mThis.nextImg + 1) % mThis.imgUrls.length;
			}
		
			setTimeout(callback, mThis.pauseMS);
		}
	}

	setTimeout(handler, this.crossFadeMS / 100);
}

CrossFader.prototype.start = function() {
	this.elem1.src = this.imgUrls[this.nextImg];
	this.nextImg = (this.nextImg + 1) % this.imgUrls.length;
}
