var timerFadeIn, timerSwitch, curFrame, curArrayPos, curSlideshowContainerID, curSlideOrder, curOrderType, curDelay, curNumSlides, slideArrayLen;

function getPos(offset)
	{
		// default retval to the current position with the applied offset
		var retVal = curArrayPos + offset;

		// if we have over-stepped the bounds of our array, correct it
		if (retVal < 0)
			retVal += slideArrayLen;
		else if (retVal >= slideArrayLen)
			retVal -= slideArrayLen;

		// return the value
		return retVal;
	}


function start_slideshow(slideshowContainerID, slideOrder, orderType, delay) {
	var arrayPos = 0;
	slideOrder = slideOrder.split(",");
	slideArrayLen = slideOrder.length;
	orderType = orderType.toLowerCase();
	numSlides = $('#' + slideshowContainerID + ' .slide').length;
	switch(orderType) {
		case "random":
			frame = Math.floor(Math.random()*4) + 1;
		break;
		case "specific":
			frame = slideOrder[arrayPos]; // starts at the beginning of the array
		break;
		case "numeric":
			frame = 1;
		break;
	}
	$('#' + slideshowContainerID + ' .slideCnt' + frame).show(); //shows the first slide; all slides should start as display: none;
	//Effect.Appear('slideshow' + slideOrder[arrayPos]);
	timerSwitch = setTimeout(switch_slides(frame, arrayPos, slideshowContainerID, slideOrder, orderType, delay, numSlides), delay);
	curFrame = frame;
	curArrayPos = arrayPos;
	curSlideshowContainerID = slideshowContainerID;
	curSlideOrder = slideOrder;
	curOrderType = orderType;
	curDelay = delay;
	curNumSlides = numSlides;
}
function switch_slides(frame, arrayPos, slideshowContainerID, slideOrder, orderType, delay, numSlides) {
	delayOffset = 0;
	return (function() {
		switch (orderType)
		{
		case "specific":
			$('#' + slideshowContainerID + ' .slideCnt' + frame).fadeOut();
			//console.info("input: arrayPos = " + arrayPos);
			if (arrayPos == slideOrder.length - 1) { 
				arrayPos = 0; 
			} else {
				arrayPos = arrayPos + 1;
			}
			//console.info("output: arrayPos = " + arrayPos);
			frame = slideOrder[arrayPos];
			break; 
		case "random":
			$('#' + slideshowContainerID + ' .slideCnt' + frame).fadeOut();
			frameOld = frame;
			while (frame == frameOld) {
				frame = Math.floor(Math.random()*numSlides) + 1
			}
			break;
		case "numeric":
			$('#' + slideshowContainerID + ' .slideCnt' + frame).fadeOut();
			frame += 1;
			if (frame > numSlides) { 
				frame = 1;
			}
		break;
		}
		curSlideName = "slideCnt" + frame;
		timerFadeIn = setTimeout("$('#" + slideshowContainerID + " ."+curSlideName+"').fadeIn();", delay * delayOffset);
		timerSwitch = setTimeout(switch_slides(frame, arrayPos, slideshowContainerID, slideOrder, orderType, delay, numSlides), delay);
		curFrame = frame;
		curArrayPos = arrayPos;
		curSlideshowContainerID = slideshowContainerID;
		curSlideOrder = slideOrder;
		curOrderType = orderType;
		curDelay = delay;
		curNumSlides = numSlides;
	})
}

function prevSlide() {
	if ($("#animContainer .playBtns .btnPause").css("display") == "none") {
		$("#animContainer .playBtns .btnPlay").css("display", "none");
		$("#animContainer .playBtns .btnPause").css("display", "inline");
	}
	clearTimeout(timerFadeIn);
	clearTimeout(timerSwitch);
	//Fade out the currently displayed slide before calling the new slide.
	$('#' + curSlideshowContainerID + ' .slideCnt' + curFrame).fadeOut();
	
	curArrayPos = getPos(-2);
	
	timerSwitch = setTimeout(switch_slides(curFrame, curArrayPos, curSlideshowContainerID, curSlideOrder, curOrderType, curDelay, curNumSlides),0);
}

function nextSlide() {
	if ($("#animContainer .playBtns .btnPause").css("display") == "none") {
		$("#animContainer .playBtns .btnPlay").css("display", "none");
		$("#animContainer .playBtns .btnPause").css("display", "inline");
	}
	clearTimeout(timerFadeIn);
	clearTimeout(timerSwitch);
	timerSwitch = setTimeout(switch_slides(curFrame, curArrayPos, curSlideshowContainerID, curSlideOrder, curOrderType, curDelay, curNumSlides),0);
}

function pauseSlides() {
	$("#animContainer .playBtns .btnPause").css("display", "none");
	$("#animContainer .playBtns .btnPlay").css("display", "inline");
	clearTimeout(timerFadeIn);
	clearTimeout(timerSwitch);
}

$(document).ready(function() {
	$("#animContainer .playBtns .btnPlay").css("display", "none");
	$("#animContainer .playBtns a").css("visibility", "visible");
	$("#animContainer img").attr("galleryimg", "no"); //important will remove image hover menu
	$("#animContainer .playBtns a").hover(function() {
		$("#animContainer .playBtns").toggleClass(($(this).attr("class")).replace("btn","hover"));
		$(this).find("img").attr("src", ($(this).find("img").attr("src")).replace(".png", "-over.png"));
	}, function() {
		$("#animContainer .playBtns").toggleClass(($(this).attr("class")).replace("btn","hover"));
		$(this).find("img").attr("src", ($(this).find("img").attr("src")).replace("-over.png", ".png"));
	});
});
