var FadeArr = [];

var gFadeIn=true;
var gFadeOut=false;

var gSlideShowTimer = null;

function populateSlide (isInit, which, doResume)
{
	so = document.getElementById('slide' + (which % 2))
	so = so.getElementsByTagName('div')[0];
	imag = so.getElementsByTagName('img')[0];
	imag.onload = function (evt) {
		resumePopulateSlide(isInit, so, which, doResume);
	};
	imag.src = slidedata.slides[which-1].src;
}

function resumePopulateSlide(isInit, so, which, doResume)
{
	spns = so.getElementsByTagName('span');
	spns[0].innerHTML = slidedata.slides[which-1].name;
	spns[1].innerHTML = slidedata.slides[which-1].title;
	spns[2].innerHTML = slidedata.slides[which-1].start;
	if (isInit) {
		resumeSetActiveSlide();
	} else {
		resumeThumbClick(which, doResume);
	}
}

function toggleCycle (cycleOn)
{
	setActiveSlide();
	
	if (cycleOn) {
		setTimerForSlideshow();
	} else if (gSlideShowTimer) {
		window.clearTimeout (gSlideShowTimer);
	}
}

function setActiveSlide ()
{
	populateSlide(true, gCurSlide, null);
}

function resumeSetActiveSlide()
{
	so = document.getElementById('slide' + (gCurSlide % 2))
	so.style.zIndex=102;
	SetAlp(so, 100);
}

function setTimerForSlideshow()
{
	if (gSlideShowTimer) {
		window.clearTimeout (gSlideShowTimer);
	}
	gSlideShowTimer = window.setTimeout ('SlideShow()', gDefaultSlideDelay * 1000);
}

function SlideShow()
{
	if (!autocycle) {
		if (gSlideShowTimer) {
			window.clearTimeout (gSlideShowTimer);
		}
	} else {
		var NextSlide = gCurSlide + 1;
		if (NextSlide > MaxSlides)
			NextSlide = 1;
	
		ThumbClick(NextSlide, false);
		// Do nothing here since we suspend ThumbClick via onload
	}
}

function ThumbClick (which, doResume)
{
	if (doResume == null) doResume=true;
	
	ZSetHi = 'slide' + (which % 2);
	ZSetLo = null;

	populateSlide(false, which, doResume);
}

function resumeThumbClick(which, doResume)
{
	if ((gCurSlide != 0) && (gCurSlide != which)) {
		ZSetLo = 'slide' + (gCurSlide % 2);
		Fader(ZSetLo,gFadeOut,0,100,10,1);
	}
	Fader(ZSetHi,gFadeIn,0,100,10,1);
	
	gCurSlide = which;
	if ((doResume) && (gSlideShowTimer))
		window.clearTimeout (gSlideShowTimer);

	if (doResume)
		gSlideShowTimer = window.setTimeout ('setTimerForSlideshow()', 10000);

	setTimerForSlideshow();
}

function AddToFadeArr (ind, ObjSearch, FadeIn, MinAlp, MaxAlp, Speed)
{
	if (FadeArr[ind]) {
		b = ind;
	} else {
		b = FadeArr.length;
		FadeArr[b] = new Object();
		FadeArr[b].CurAlp = (FadeIn) ? MinAlp : MaxAlp;
		FadeArr[b].MinAlp = MinAlp;
		FadeArr[b].MaxAlp = MaxAlp;
		FadeArr[b].Speed = Speed;
		FadeArr[b].ObjID = ObjSearch;
		FadeArr[b].TimerID = null;
	}
	
	FadeArr[b].FadeIn = FadeIn;
	return b;
}

function GetFadeArrInd (ObjSearch, FadeIn, MinAlp, MaxAlp, Speed)
{
	a = FadeArr.length;
	for (i = 0; i < a; i++) {
		if (FadeArr[i].ObjID == ObjSearch) {
			if (FadeArr[i].FadeIn == FadeIn)
				return i;
			return AddToFadeArr(i, ObjSearch, FadeIn, MinAlp, MaxAlp, Speed);
		}
	}
	
	return AddToFadeArr(a+1, ObjSearch, FadeIn, MinAlp, MaxAlp, Speed);
}

function Fader(FadeObjID, FadeIn, MinAlp, MaxAlp, Speed, SwapZ)
{
	if (SwapZ == null) SwapZ = 0;
	FadeObj = document.getElementById (FadeObjID);
	a = GetFadeArrInd(FadeObjID, FadeIn, MinAlp, MaxAlp, Speed);
	if (FadeIn)
		MyAdder = Speed;
	else
		MyAdder = -Speed;
	
	NewAlp = MyAdder + GetAlp(FadeObj);
	
	NewAlp = (NewAlp > MaxAlp) ? MaxAlp : NewAlp;
	NewAlp = (NewAlp < MinAlp) ? MinAlp : NewAlp;

	FadeArr[a].CurAlp = NewAlp;
	
	SetAlp(FadeObj, NewAlp);
	
	if (FadeArr[a].TimerID)
		window.clearTimeout(FadeArr[a].TimerID);
	
	if (FadeIn) {
		if (NewAlp < MaxAlp)
			FadeArr[a].TimerID = window.setTimeout("Fader('"+FadeObjID+"', "+FadeIn+", "+MinAlp+", "+MaxAlp+", "+Speed+", "+SwapZ+")",50);
		else if (SwapZ)
			FadeObj.style.zIndex=102;
	} else {
		if (NewAlp > MinAlp)
			FadeArr[a].TimerID = window.setTimeout("Fader('"+FadeObjID+"', "+FadeIn+", "+MinAlp+", "+MaxAlp+", "+Speed+", "+SwapZ+")",50);
		else if (SwapZ)
			FadeObj.style.zIndex=101;
	}
}

function SetAlp (Obj, NewAlp)
{
  NewAlp = (NewAlp == 100)?99.999:NewAlp;
  
  // IE/Win
  Obj.style.filter = "alpha(opacity:"+NewAlp+")";
  
  // Older Mozilla and Firefox
  Obj.style.MozOpacity = NewAlp/100;
  
  // Safari<1.2, Konqueror
  Obj.style.KhtmlOpacity = NewAlp/100;
  
  // Safari 1.2, newer Firefox and Mozilla, CSS3
  Obj.style.opacity = NewAlp/100;
}

function GetAlp (Obj)
{
	if (Obj.filters)
		return Obj.filters.alpha.opacity;
	else if (Obj.style.opacity != 'undefined')
		return Obj.style.opacity * 100;
	else if (Obj.style.MozOpacity != 'undefined')
		return Obj.style.MozOpacity * 100;
	else if (Obj.style.KhtmlOpacity != 'undefined')
		return Obj.style.KhtmlOpacity * 100;
}
