/***************Here's the init stuff***************/
addLoadEvent(initShow);

function initShow(){
	loadShow('slideShow','controlBar','playBar');
}
var prevText = "< Prev";
var playText = "Play";
var stopText = "Stop";
var nextText = "Next >";

var slideWidth = 250;
var slideHeight = 250;
var defaultSlideLength = 5000;
var defaultTStepNum = 10;
var defaultTStepLength = 50;	
var defaultSlideDelay = 0;
var changeOverflow = true;
var useTextButtons = false;
var useSpanButtons = false;
/**********************Here's the real code*************/

var pastInit = false;

var transitions = {};

transitions["flipIn"] = "flip(targetIndex,false);";
transitions["fadeIn"] = "moveFade(targetIndex,false,0,0,1,0,0,0,0,0,0,0,stepNum,stepLength);";

transitions["fadeNIn"] = "moveFade(targetIndex,false,0,0,1,0,0,0,-slideHeight,-slideHeight,0,0,stepNum,stepLength);";
transitions["fadeEIn"] = "moveFade(targetIndex,false,0,0,1,slideWidth,slideWidth,0,0,0,0,0,stepNum,stepLength);";
transitions["fadeSIn"] = "moveFade(targetIndex,false,0,0,1,0,0,0,slideHeight,slideHeight,0,0,stepNum,stepLength);";
transitions["fadeWIn"] = "moveFade(targetIndex,false,0,0,1,-slideWidth,-slideWidth,0,0,0,0,0,stepNum,stepLength);";

transitions["fadeNEIn"] = "moveFade(targetIndex,false,0,0,1,slideWidth,slideWidth,0,-slideHeight,-slideHeight,0,0,stepNum,stepLength);";
transitions["fadeNWIn"] = "moveFade(targetIndex,false,0,0,1,-slideWidth,-slideWidth,0,-slideHeight,-slideHeight,0,0,stepNum,stepLength);";
transitions["fadeSWIn"] = "moveFade(targetIndex,false,0,0,1,-slideWidth,-slideWidth,0,slideHeight,slideHeight,0,0,stepNum,stepLength);";
transitions["fadeSEIn"] = "moveFade(targetIndex,false,0,0,1,slideWidth,slideWidth,0,slideHeight,slideHeight,0,0,stepNum,stepLength);";

transitions["slideNIn"] = "moveFade(targetIndex,false,1,1,1,0,0,0,-slideHeight,-slideHeight,0,0,stepNum,stepLength);";
transitions["slideEIn"] = "moveFade(targetIndex,false,1,1,1,slideWidth,slideWidth,0,0,0,0,0,stepNum,stepLength);";
transitions["slideSIn"] = "moveFade(targetIndex,false,1,1,1,0,0,0,slideHeight,slideHeight,0,0,stepNum,stepLength);";
transitions["slideWIn"] = "moveFade(targetIndex,false,1,1,1,-slideWidth,-slideWidth,0,0,0,0,0,stepNum,stepLength);";

transitions["slideNEIn"] = "moveFade(targetIndex,false,1,1,1,slideWidth,slideWidth,0,-slideHeight,-slideHeight,0,0,stepNum,stepLength);";
transitions["slideNWIn"] = "moveFade(targetIndex,false,1,1,1,-slideWidth,-slideWidth,0,-slideHeight,-slideHeight,0,0,stepNum,stepLength);";
transitions["slideSWIn"] = "moveFade(targetIndex,false,1,1,1,-slideWidth,-slideWidth,0,slideHeight,slideHeight,0,0,stepNum,stepLength);";
transitions["slideSEIn"] = "moveFade(targetIndex,false,1,1,1,slideWidth,slideWidth,0,slideHeight,slideHeight,0,0,stepNum,stepLength);";




transitions["flipOut"] = "flip(targetIndex,true);";
transitions["fadeOut"] = "moveFade(targetIndex,true,1,1,0,0,0,0,0,0,0,0,stepNum,stepLength);";

transitions["fadeSOut"] = "moveFade(targetIndex,true,1,1,0,0,0,0,0,0,slideHeight,0,stepNum,stepLength);";
transitions["fadeWOut"] = "moveFade(targetIndex,true,1,1,0,0,0,-slideWidth,0,0,0,0,stepNum,stepLength);";
transitions["fadeNOut"] = "moveFade(targetIndex,true,1,1,0,0,0,0,0,0,-slideHeight,0,stepNum,stepLength);";
transitions["fadeEOut"] = "moveFade(targetIndex,true,1,1,0,0,0,slideWidth,0,0,0,0,stepNum,stepLength);";

transitions["fadeSWOut"] = "moveFade(targetIndex,true,1,1,0,0,0,-slideWidth,0,0,slideHeight,0,stepNum,stepLength);";
transitions["fadeSEOut"] = "moveFade(targetIndex,true,1,1,0,0,0,slideWidth,0,0,slideHeight,0,stepNum,stepLength);";
transitions["fadeNWOut"] = "moveFade(targetIndex,true,1,1,0,0,0,-slideWidth,0,0,-slideHeight,0,stepNum,stepLength);";
transitions["fadeNEOut"] = "moveFade(targetIndex,true,1,1,0,0,0,slideWidth,0,0,-slideHeight,0,stepNum,stepLength);";

transitions["slideSOut"] = "moveFade(targetIndex,true,1,1,1,0,0,0,0,0,slideHeight,0,stepNum,stepLength);";
transitions["slideWOut"] = "moveFade(targetIndex,true,1,1,1,0,0,-slideWidth,0,0,0,0,stepNum,stepLength);";
transitions["slideNOut"] = "moveFade(targetIndex,true,1,1,1,0,0,0,0,0,-slideHeight,0,stepNum,stepLength);";
transitions["slideEOut"] = "moveFade(targetIndex,true,1,1,1,0,0,slideWidth,0,0,0,0,stepNum,stepLength);";

transitions["slideSWOut"] = "moveFade(targetIndex,true,1,1,1,0,0,-slideWidth,0,0,slideHeight,0,stepNum,stepLength);";
transitions["slideSEOut"] = "moveFade(targetIndex,true,1,1,1,0,0,slideWidth,0,0,slideHeight,0,stepNum,stepLength);";
transitions["slideNWOut"] = "moveFade(targetIndex,true,1,1,1,0,0,-slideWidth,0,0,-slideHeight,0,stepNum,stepLength);";
transitions["slideNEOut"] = "moveFade(targetIndex,true,1,1,1,0,0,slideWidth,0,0,-slideHeight,0,stepNum,stepLength);";







var slideIds;
var curSlideIndex = 0;
var maxSlideIndex;
var ssElem;
var cbElem;
var isRunning = false;
var csTimerId; //this is the timerId that's set to trigger the next slide when this one is done
var otherTimeId;

function loadShow(slideShow,controlBar,playBar){
	if(pastInit){
	return;
	}	
	pastInit = true;	
	ssElem = document.getElementById(slideShow);
	cbElem = document.getElementById(controlBar);
	pbElem = document.getElementById(playBar);

	//var slides = getElementsByClassName('slide');
	var slides = getElementsBySelector('.slide');	

	slideIds = new Array(slides.length);
	
	
	for(var i=0; i<slides.length; i++){
	    var slide = slides[i];
	    if(slide.id==null || slide.id==''){
	        slide.id='s'+i;
	    }
	    slideIds[i] = slide.id;
	    if(i==0){

		addClass(slide,'curSlide');
	    }
	    maxSlideIndex = i;

	    if(cbElem!=null){
		    buttonElem = document.createElement('a');
		    buttonElem.href = 'javascript:showSlideFromClick('+i+');';

		    if(i==0){
			    buttonElem.className='sb curSb';
	 	    }else{
			    buttonElem.className='sb';
		    }
		    buttonElem.slideIndex = i;
		    buttonElem.id='sb_'+slide.id;
		    cbElem.appendChild(buttonElem);
	            if(useTextButtons){
			var buttonText = slide.getAttribute("buttonText");
			buttonElem.appendChild(document.createTextNode(buttonText));
		    }else if(useSpanButtons){
	  		var buttonId = slide.getAttribute("buttonId");
			buttonElem.appendChild(document.getElementById(buttonId));
		    }
		    //addEvent(buttonElem.id,'click',showSlide);
	    }
	}

	if(pbElem!=null){
		buttonElem = document.createElement('a');
		buttonElem.href = 'javascript:showPrevSlide();';
		buttonElem.className='sbp';
		buttonElem.id='sb_prev';
		buttonElem.appendChild(document.createTextNode(prevText));
		pbElem.appendChild(buttonElem);

		buttonElem = document.createElement('a');
		buttonElem.href = 'javascript:stopSlides();';
		buttonElem.className='sbp';
		buttonElem.id='sb_stop';
		buttonElem.appendChild(document.createTextNode(stopText));
		pbElem.appendChild(buttonElem);

		buttonElem = document.createElement('a');
		buttonElem.href = 'javascript:playSlides();';
		buttonElem.className='sbp';
		buttonElem.id='sb_play';
		buttonElem.appendChild(document.createTextNode(playText));
		pbElem.appendChild(buttonElem);

		buttonElem = document.createElement('a');
		buttonElem.href = 'javascript:showNextSlide();';
		buttonElem.className='sbp';
		buttonElem.id='sb_next';
		buttonElem.appendChild(document.createTextNode(nextText));
		pbElem.appendChild(buttonElem);
	}
	var firstSlideTime = getSlideTime(0);
	isRunning=true;
	otherTimerId = setTimeout("showNextSlide()",firstSlideTime);

}

function stopSlides(){
	isRunning=false;
	clearTimeout(otherTimerId);
	clearTimeout(csTimerId);
}

function playSlides(){
	isRunning=true;
	showNextSlide();
}

function showSlide(e){
	targetId = getTargetElement(e).id;
	targetIndex = document.getElementById(targetId).slideIndex;
	showSlideByIndex(targetIndex);	
}

function showNextSlide(){
	if(curSlideIndex==maxSlideIndex){
	    showSlideByIndex(0);
	}else{
	    showSlideByIndex(curSlideIndex+1);
	}
}

function showPrevSlide(){
	if(curSlideIndex==0){
	    showSlideByIndex(maxSlideIndex);
	}else{
	    showSlideByIndex(curSlideIndex-1);
	}
}



function showSlideFromClick(targetIndex){
	stopSlides();
	showSlideByIndex(targetIndex);
}

function showSlideByIndex(targetIndex){
	if(targetIndex==curSlideIndex){
	return;
	}
	oldSlide = document.getElementById(slideIds[curSlideIndex]);
	newSlide = document.getElementById(slideIds[targetIndex]);
	oldTransName = oldSlide.getAttribute("transOut");
	oldTStepNum = oldSlide.getAttribute("tOStepNum");
	oldTStepLength = oldSlide.getAttribute("tOStepLength");
	
	newTransName = newSlide.getAttribute("transIn");
	newTStepNum = newSlide.getAttribute("tIStepNum");
	newTStepLength = newSlide.getAttribute("tIStepLength");
	newTransDelay = newSlide.getAttribute("inDelay");
	
	if(oldTStepNum==null || oldTStepNum=='' || oldTStepNum<0){
		oldTStepNum=defaultTStepNum;
	}

	if(oldTStepLength==null || oldTStepLength=='' || oldTStepLength<0){
		oldTStepLength=defaultTStepLength;
	}

	if(newTStepNum==null || newTStepNum=='' || newTStepNum<0){
		newTStepNum=defaultTStepNum;
	}

	if(newTStepLength==null || newTStepLength=='' || newTStepLength<0){
		newTStepLength=defaultTStepLength;
	}

	
	if(oldTransName==null || oldTransName==''){
	oldTransName = 'fadeOut';
	}

	if(newTransName==null || newTransName==''){
	newTransName = 'fadeIn';
	}

	if(newTransDelay==null || newTransDelay==''){
	newTransDelay=defaultSlideDelay;
	}
	oldTrans = transitions[oldTransName];
	newTrans = transitions[newTransName];

	if(oldTrans==null || oldTrans==''){
	oldTrans = transitions["fadeOut"];
	}

	if(newTrans==null || newTrans==''){
	newTrans = transitions["fadeIn"];
	}

	oldTrans = oldTrans.replace("targetIndex",curSlideIndex);
	oldTrans = oldTrans.replace("stepNum",oldTStepNum);
	oldTrans = oldTrans.replace("stepLength",oldTStepLength);	
	
	newTrans = newTrans.replace("targetIndex",targetIndex);
	newTrans = newTrans.replace("stepNum",newTStepNum);
	newTrans = newTrans.replace("stepLength",newTStepLength);
	
	//alert(oldTrans + " " + newTrans);

	eval(oldTrans);
	otherTimerId = setTimeout("eval(newTrans)",newTransDelay);
	//;
	//remClass(oldSlide,'curSlide');
	//moveFade(curSlideIndex,true,1,1,0,0,0,400,0,0,400,0,10,50);
	//moveFade(targetIndex,false,0,0,1,400,400,0,400,400,0,0,10,50);
	//addClass(newSlide,'curSlide');
	curSlideIndex = targetIndex;
}

function flip(targetIndex,isTransOut){
	if(isTransOut){
		try{
			remClass(document.getElementById(slideIds[targetIndex]),'curSlide');
		}catch(err){;}
		try{
			remClass(document.getElementById('sb_'+slideIds[targetIndex]),'curSb');	
		}catch(err){;};
	}else{
		try{
			addClass(document.getElementById(slideIds[targetIndex]),'curSlide');
		}catch(err){;}
		try{
			addClass(document.getElementById('sb_'+slideIds[targetIndex]),'curSb');
		}catch(err){;};
		document.getElementById(slideIds[targetIndex]).style.opacity=0.99;
		document.getElementById(slideIds[targetIndex]).style.filter="alpha(opacity="+99+")";
		document.getElementById(slideIds[targetIndex]).style.top=0;
		document.getElementById(slideIds[targetIndex]).style.left=0;
		
		if(changeOverflow){
			ssElem.style.overflow='auto';
		}
		slideTime = getSlideTime(targetIndex);
		clearTimeout(csTimerId);
		if(isRunning){
			csTimerId = setTimeout("showNextSlide()",slideTime);
		}
	}
}

function getSlideTime(targetIndex){
	st = document.getElementById(slideIds[targetIndex]).getAttribute("displayLength");
	
	if(st==null || st=='' || st < 0){
		st=defaultSlideLength;
	}else if(st==0){
		st=1;
	}
	return st;
}

function moveFade(targetIndex,isTransOut,curOpat,startOpat,endOpat,curX,startX,endX,curY,startY,endY,curStep,numSteps,delay){
	//alert(curStep + ' ' + numSteps);
	if(startOpat==1)
		startOpat = 0.99;

	if(endOpat==1)
		endOpat = 0.99;

	if(curStep >= numSteps){
		if(isTransOut){
			try{
				remClass(document.getElementById(slideIds[targetIndex]),'curSlide');
			}catch(err){;}
			try{
				remClass(document.getElementById('sb_'+slideIds[targetIndex]),'curSb');
			}catch(err){;};
		}else{
			if(changeOverflow){
				//alert('about to set overflow to auto');
				ssElem.style.overflow='auto';
				//alert('just to set overflow to auto');	
			}
			slideTime = getSlideTime(targetIndex);
			clearTimeout(csTimerId);
			if(isRunning){
				csTimerId = setTimeout("showNextSlide()",slideTime);
			}
		}
		;//do nothing
	}else{
		if(changeOverflow){
			ssElem.style.overflow='hidden';
		}
		try{
			addClass(document.getElementById(slideIds[targetIndex]),'curSlide');
		}catch(err){;};
		try{
			addClass(document.getElementById('sb_'+slideIds[targetIndex]),'curSb');
		}catch(err){;};
		opatStep = (endOpat - startOpat) / numSteps;
		curOpat = curOpat + opatStep;
		document.getElementById(slideIds[targetIndex]).style.opacity = curOpat;
	        document.getElementById(slideIds[targetIndex]).style.filter="alpha(opacity="+curOpat * 100+")";

		xStep = (endX - startX) / numSteps;
		curX = curX + xStep;
		document.getElementById(slideIds[targetIndex]).style.left = curX+'px';

		yStep = (endY - startY) / numSteps;
		curY = curY + yStep;
		document.getElementById(slideIds[targetIndex]).style.top = curY+'px';

		curStep += 1;
		otherTimerId = setTimeout("moveFade("+targetIndex+","+isTransOut+","+curOpat+","+startOpat+","+endOpat+","+curX+","+startX+","+endX+","+curY+","+startY+","+endY+","+curStep+","+numSteps+","+delay+")",delay);
	}		
}
