// Alice CPA Slideshow
// by Alex Cho Snyder
// 2009/11/01
// 2009/11/02

var imageFades = ['bar','box'];
var imageNames = ['bar_image','box_image','title_image'];
var fieldNames = ['title_field', 'description_field'];
var slideImages = [	['images/mission_bar.jpg','images/mission_box.jpg','images/mission_title.png'],
					['images/achieve_bar.jpg','images/achieve_box.jpg','images/achieve_title.png'],
					['images/balance_bar.jpg','images/balance_box.jpg','images/balance_title.png'],
					['images/sustain_bar.jpg','images/sustain_box.jpg','images/sustain_title.png']];
var slideFields = [	['<h1>Mission Statement</h1>','To support small businesses that value the Triple Bottom Line approach: Profit, People and Planet. Together we can lead in adopting sustainable business practices to support a healthy local economy.'],
					['<h1>Achieve Financial Fitness</h1>','Knowing the importance of financial fitness is only the first step. Get help in getting started: put the proper system in place, execute your plan of action, and maintain financial fitness.'],
					['<h1>Balance Rewards and Risks</h1>','Every action or inaction has consequences. Sound decisions are possible when based on accurate financial data to weigh the extent of risk against potential rewards.'],
					['<h1>Enjoy and Sustain Success</h1>','Being financially fit allows you flexibility and more options to stay viable in an ever-changing business world. Sustainable financial management with a long-term view is essential to your business’ health.']];
var slideTotal = slideImages.length;
var slideIndex = 0;
var slideAlpha = 100;
var slideReady = false;
var waitDelay = 10000;
var fadeDelay = 50;
var fadeAlpha = 5;

function cacheImage(url) {
	var img = new Image();
	img.src = url;
	return img;
}

function checkDownload() {
	if (slideIndex < 0) slideIndex = 0;
	if (slideIndex >= slideTotal) slideIndex = 0;
	var images = slideImages[slideIndex];
	for (var i in images) {
		if (!images[i].complete) {
			setTimeout(checkDownload, 100);
			return;
		}
	}
	slideReady = true;
}

function cacheNextSlide() {
	if (slideIndex < 0) slideIndex = 0;
	if (slideIndex >= slideTotal) slideIndex = 0;
	var images = slideImages[slideIndex];
	for (var i in images) {
		if (typeof images[i] == 'string') {
			slideReady = false;
			images[i] = cacheImage(images[i]);
		}
	}
	checkDownload();
}

function setOpacity(object, percent) {
	var fraction = percent/100;
	object.style.opacity = fraction;
	object.style.MozOpacity = fraction;
	object.style.KHTMLOpacity = fraction;
	object.style.filter = 'alpha(opacity:' + percent + ')';
}

function fadeSlide() {
	if (slideAlpha >= 100) {
		for (var i in imageFades) {
			imageFades[i].style.backgroundImage = '';
			setOpacity(document.images[imageNames[i]], 100);
		}
		slideIndex += 1;
		cacheNextSlide();
	}
	else {
		for (var i in imageFades) {
			setOpacity(document.images[imageNames[i]], slideAlpha);
		}
		slideAlpha += fadeAlpha;
		setTimeout(fadeSlide, fadeDelay);
	}
}

function startFade() {
	var images = slideImages[slideIndex];
	for (var i in imageFades) {
		imageFades[i].style.backgroundImage = 'url(' + document.images[imageNames[i]].src + ')';
	}
	slideAlpha = 0;
	fadeSlide();
}

function showNextSlide() {
	if (!slideReady) {
		setTimeout(showNextSlide, 100);
		return;
	}
	if (slideIndex < 0) slideIndex = 0;
	if (slideIndex >= slideTotal) slideIndex = 0;
	startFade();
	var images = slideImages[slideIndex];
	for (var i in images) {
		document.images[imageNames[i]].src = images[i].src;
	}
	var fields = slideFields[slideIndex];
	for (var f in fields) {
		fieldNames[f].innerHTML = fields[f];
	}
}

function startSlides() {
	for (var i in imageFades) {
		if (typeof imageFades[i] == 'string') {
			imageFades[i] = document.getElementById(imageFades[i]);
		}
	}
	for (var i in fieldNames) {
		if (typeof fieldNames[i] == 'string') {
			fieldNames[i] = document.getElementById(fieldNames[i]);
		}
	}
	cacheNextSlide();
	slideReady = true;
	showNextSlide();
	setInterval(showNextSlide, waitDelay);
}

if (window.attachEvent) window.attachEvent('onload', startSlides);
else if (window.addEventListener) window.addEventListener('load', startSlides, false);
else document.addEventListener('load', startSlides, false);