/*
	Image Cross Fade
		for Feature Graphics, Text, and Slideshows
	Version 2.0
	Last revision: 2008/01/02
	Revised by: Wesley Haines

	Revised from Nathan Smith's Slideshow Alternative: http://sonspring.com/journal/slideshow-alternative

	Originally developed by: 
	steve@slayeroffice.com
	http://slayeroffice.com/code/imageCrossFade/index.html
*/

window.addEventListener ? window.addEventListener('load',so_init,false) : window.attachEvent('onload',so_init);

var featureId = 'feature_img';
var galleryId = 'feature_gallery';
var textId = 'feature_text';
var fade_interval = 7000 /* Milliseconds */

var d=document, imgs = new Array(), zInterval = null, current=0, pause=false;
var gallery_arrows = new Array();
var text_changed = false;
var so_timeout;

function so_init()
{
	if(!d.getElementById || !d.createElement)return;
	
	/* First, set the size of the thumbnail block, 64px image with 10px right-margin */
	d.getElementById(galleryId).style.width = (feature_text_array.length * 74) + "px";

	/* Show the first text block */
	d.getElementById(textId).innerHTML = feature_text_array[0];
	
	imgs = d.getElementById(featureId).getElementsByTagName('img');
	for(i=1;i<imgs.length;i++) imgs[i].xOpacity = 0.0;
	/* Show the first image without fading */
	imgs[0].style.display = 'block';
	imgs[0].xOpacity = 1.0;
	
	gallery_arrows_temp = d.getElementById(galleryId).getElementsByTagName('div');
	gaIndex = 0;
	for(i = 0; i < gallery_arrows_temp.length; i++)
	{
		img_temp = gallery_arrows_temp[i].getElementsByTagName('img');
		if(img_temp[0] && img_temp[0].className.indexOf('feature_arrow') != -1)
		{
			gallery_arrows[gaIndex] = img_temp[0];
			gaIndex++;
		}
	}
	for(i=1;i<gallery_arrows.length;i++) gallery_arrows[i].xOpacity = 0.0;
	/* Show the first image without fading */
	gallery_arrows[0].style.visibility = 'visible';
	gallery_arrows[0].xOpacity = 1.0;

	so_timeout = setTimeout(so_xfade, fade_interval);
}

function so_switchfeature(id)
{
	nIndex = imgs[current+1] ? current + 1 : 0;

	clearTimeout(so_timeout);
	
	/* Hide the current image */
	imgs[current].style.display = 'none';
	imgs[current].xOpacity = 0.0;
	setOpacity(imgs[current]);
	gallery_arrows[current].style.visibility = 'hidden';
	gallery_arrows[current].xOpacity = 0.0;
	setOpacity(gallery_arrows[current]);
	
	/* Hide the next image in case we clicked while the image was rotating */
	imgs[nIndex].style.display = 'none';
	imgs[nIndex].xOpacity = 0.0;
	setOpacity(imgs[nIndex]);
	gallery_arrows[nIndex].style.visibility = 'hidden';
	gallery_arrows[nIndex].xOpacity = 0.0;
	setOpacity(gallery_arrows[nIndex]);
	
	/* Show the new image and text */
	d.getElementById(textId).innerHTML = feature_text_array[id];
	imgs[id].xOpacity = 1.0;
	setOpacity(imgs[id]);
	imgs[id].style.display = 'block';
	gallery_arrows[id].xOpacity = 1.0;
	setOpacity(gallery_arrows[id]);
	gallery_arrows[id].style.visibility = 'visible';
	current = id;
}

function so_xfade()
{
	cOpacity = imgs[current].xOpacity;
	nIndex = imgs[current+1] ? current + 1 : 0;
	nOpacity = imgs[nIndex].xOpacity;

	cOpacity -= .05;
	nOpacity += .05;

	if(text_changed == false)
	{
		d.getElementById(textId).innerHTML = feature_text_array[nIndex];
		text_changed = true;
	}

	imgs[nIndex].style.display = 'block';
	imgs[current].xOpacity = cOpacity;
	imgs[nIndex].xOpacity = nOpacity;

	setOpacity(imgs[current]);
	setOpacity(imgs[nIndex]);
	
	gallery_arrows[nIndex].style.visibility = 'visible';
	gallery_arrows[current].xOpacity = cOpacity;
	gallery_arrows[nIndex].xOpacity = nOpacity;
	
	setOpacity(gallery_arrows[current]);
	setOpacity(gallery_arrows[nIndex]);

	if(cOpacity <= 0)
	{
		imgs[current].style.display = 'none';
		gallery_arrows[current].style.visibility = 'hidden';
		current = nIndex;
		text_changed = false;
		so_timeout = setTimeout(so_xfade, fade_interval);
	}
	else
	{
		so_timeout = setTimeout(so_xfade, 40);
	}
}

function setOpacity(obj)
{
	if(obj.xOpacity > .999)
	{
		obj.xOpacity = 1.0;
		obj.style.opacity = .999;
		obj.style.MozOpacity = .999;
		obj.style.filter = 'alpha(opacity=100)';
	}
	else
	{
		if(obj.xOpacity < 0)
		{
			obj.xOpacity = 0.0;
		}
		obj.style.opacity = obj.xOpacity;
		obj.style.MozOpacity = obj.xOpacity;
		obj.style.filter = 'alpha(opacity=' + (obj.xOpacity*100) + ')';
	}
}

function so_scroll(id, dir)
{

	el = d.getElementById(id);
	if(el.scrollBusy && el.scrollBusy == true) return;
	el.scrollBusy = true;
	// Scroll by 148px total
	scrollPx = 148;
	el.xLeft = el.style.left ? parseInt(el.style.left) : 0;
	el.xToGo = scrollPx;
	// How much can we scroll by?
	if(dir == 'left')
	{
		scrollSpace = el.offsetWidth - 640 + el.xLeft;
	}
	else
	{
		scrollSpace = Math.abs(el.xLeft);
	}
	if(scrollSpace < scrollPx) el.xToGo = scrollSpace;
	if(el.xToGo > 0)
	{
		if(dir == 'left')
		{
			setTimeout(function() { el = d.getElementById(galleryId); scrollLeftOnce(el); }, 25);
		}
		else
		{
			setTimeout(function() { el = d.getElementById(galleryId); scrollRightOnce(el); }, 25);
		}
	}
	else
	{
		el.scrollBusy = false;
	}
	return;
}

function scrollLeftOnce(el)
{
	step = Math.round(Math.abs(Math.sin((el.xToGo / 148) * Math.PI)) * 10);
	if(step < 1) step = 1;
	el.xLeft = el.xLeft - step;
	el.style.left = el.xLeft + "px";
	el.xToGo = el.xToGo - step;
	if(el.xToGo > 0)
	{
		setTimeout(function() { el = d.getElementById(galleryId); scrollLeftOnce(el); }, 25);
	}
	else
	{
		el.xToGo = 0;
		el.scrollBusy = false;
	}
	return true;
}

function scrollRightOnce(el)
{
	step = Math.round(Math.abs(Math.sin((el.xToGo / 148) * Math.PI)) * 10);
	if(step < 1) step = 1;
	el.xLeft = el.xLeft + step;
	el.style.left = el.xLeft + "px";
	el.xToGo = el.xToGo - step;
	if(el.xToGo > 0)
	{
		setTimeout(function() { el = d.getElementById(galleryId); scrollRightOnce(el); }, 25);
	}
	else
	{
		el.xToGo = 0;
		el.scrollBusy = false;
	}
	return true;
}
