
var currentIDNum = 0;
var timerlen = 5;
var objname = 'slider_frame';
var objframename = 'slider_background';
var stepNum = 10;
var imgWidth = 155;
var sliderMoving = false;
var backgroundMoving = false;
var containerWidth = 743;
//var backgroundWidth = 1550;// should be dependent upon number of images
var backgroundLeft = 0;
var moveslow = false;
var timerID;
//var minOpacity = 25;
var minOpacity = 50;
var startTime = false;

var travelTime = 700;

function runSlideShow() {
	var nextImgNum = parseInt(currentIDNum) + 1;
	
	if (nextImgNum == totalImgNum) {
		startslide(0);
	} else {
		slideright();
	}
	slideShowTimer = setTimeout('runSlideShow();',5000);
}


function getCurrentNum() {
	
		if (currentIDNum) {
		
			currentNum = currentIDNum;
		
		} else {
			obj = document.getElementById(objname);
			
			startLeft = parseInt(obj.style.left);
			
			currentNum = Math.floor(startLeft / imgWidth);
		}
		//writeDebug('starting image number: ' + currentNum);
		return currentNum;
}

function manualSlideLeft() {
	if (typeof( slideShowTimer ) != 'undefined' ) {
		clearTimeout(slideShowTimer);
	}
	slideleft();
}

function slideleft(){
		clearDebug();
        if (backgroundMoving == true || sliderMoving == true) {
			return;
		}

		currentImgNum = getCurrentNum();
		if (currentImgNum > 0) {
			newImgNum = currentImgNum - 1;
	        startslide(newImgNum);
		} else	{
				return;
		}
}

function manualSlideRight() {
	if (typeof( slideShowTimer ) != 'undefined' ) {
		clearTimeout(slideShowTimer);
	}
	slideright();
}

function slideright(){
		clearDebug();
        if(backgroundMoving == true || sliderMoving == true) {
			return;
		}
		
//BRIAN		alert(document.getElementById('li_2').offsetLeft);

		currentImgNum = getCurrentNum();
		newImgNum = parseInt(currentImgNum) + 1;
 //       moving = true;
        startslide(newImgNum);
}

function manualStartSlide(gotoImgNum) {
		clearDebug();
	if (typeof( slideShowTimer ) != 'undefined' ) {
		clearTimeout(slideShowTimer);
	}
	startslide(gotoImgNum);
}

function startslide(gotoImgNum){
        
        if (backgroundMoving == true || sliderMoving == true) { // if already moving, do not start new slide
			return;
		}
		
		
		currentImgNum = getCurrentNum(); // current img number
		
        obj = document.getElementById(objname); // this is the slider frame or "viewing window"
		sliderStartLeft = parseInt(obj.style.left); // current left position of the window
		
		backgroundObj = document.getElementById(objframename);
		backgroundStartLeft = parseInt(backgroundObj.style.left);
		bgStartLeft = backgroundStartLeft;
		
		newImgNum = gotoImgNum; // destination img number
		
		newImgNum = parseInt(newImgNum);
		currentImgNum = parseInt(currentImgNum);
		
		if (currentImgNum == newImgNum) { // if it's the same, do nothing
			return;
		} else if (currentImgNum > newImgNum) { // if the current # is larger, then move it left
			sliderDir = "left";
			backgroundDir = "right";
			//writeDebug('<b>' + currentImgNum + ' &gt; ' + newImgNum + '</b>');
		} else { // if the current # is smaller, then move it right
			sliderDir = "right";
			backgroundDir = "left";
			//writeDebug('<b>' + currentImgNum + ' &lt; ' + newImgNum + '</b>');
		}
		
		
		
		
		if (newImgNum == 0) {
			sliderEndLeft = 0;
			backgroundEndLeft = 0;
			//writeDebug('ending option 1');
		} else if (newImgNum == 1) {
			sliderEndLeft = imgWidth;
			backgroundEndLeft = 0;
			//writeDebug('ending option 2');
		} else if (newImgNum >= 2 && newImgNum < (totalImgNum - 2)) {
			sliderEndLeft = imgWidth * 2;
			backgroundEndLeft = - ((newImgNum * imgWidth) - (imgWidth * 2));
			//writeDebug('ending option 3');
		} else if (newImgNum == (totalImgNum - 2)) {
			
			if (totalImgNum <= 4) {
				sliderEndLeft = imgWidth * newImgNum;
				backgroundEndLeft = - ((newImgNum * imgWidth) - (imgWidth * 2));
			}
			else {
				sliderEndLeft = containerWidth - (imgWidth * 2);
				backgroundEndLeft = - (backgroundWidth - containerWidth);
			}
			//writeDebug('ending option 4');
		} else if (newImgNum == (totalImgNum - 1)) {
			
			if (totalImgNum <= 4) {
				// don't slide all the way to the right
				sliderEndLeft = imgWidth * newImgNum;
				backgroundEndLeft = 0;
			}
			else {			
				sliderEndLeft = containerWidth - imgWidth;
				backgroundEndLeft = - (backgroundWidth - containerWidth);
			}
			//writeDebug('ending option 5');
		} else {
			return;
		}
		//writeDebug('<Br>sliderDir = ' + sliderDir);
		//writeDebug('backgroundDir = ' + backgroundDir + '<br>');
		//writeDebug('<Br>bgStartLeft = ' + bgStartLeft);
		//writeDebug('backgroundEndLeft = ' + backgroundEndLeft + '<br>');
		
		sliderTravelDistance = Math.abs(sliderEndLeft - sliderStartLeft); // calculate the travel distance of the slider in pixels
		backgroundTravelDistance = Math.abs(backgroundEndLeft - backgroundStartLeft); // calculate the travel distance of the slider in pixels
		
		//writeDebug('<Br>sliderTravelDistance = ' + sliderTravelDistance);
		//writeDebug('backgroundTravelDistance = ' + backgroundTravelDistance + '<br>');
		
//		alert(currentImgNum + ' :: ' + newImgNum + '\n\n' + sliderStartLeft + ' :: ' + sliderEndLeft + '\n\n' + backgroundStartLeft + ' :: ' + backgroundEndLeft + '\n\n' + sliderTravelDistance + ' :: ' + backgroundTravelDistance);
		
		sliderStepLength = sliderTravelDistance / (travelTime / timerlen);
		backgroundStepLength = backgroundTravelDistance / (travelTime / timerlen);
		
        startTime = (new Date()).getTime();
		
//		changeOpacity(makeThumbID(currentImgNum),minOpacity); // change the current thumbnails opacity to darken it
		fadeOut(makeThumbID(currentImgNum),100);  // start fading out the thumb image
		
		fadeOut(makeLargeID(currentImgNum),100);  // start fading out the large image
		
		sliderMoving = true;
		backgroundMoving = true;
		
		sliderTimerID = setInterval('slidetick(\'' + sliderStepLength + '\',\''+sliderDir+'\',\''+sliderEndLeft+'\');',timerlen); // set the interval time for each step	
		backgroundTimerID = setInterval('slideBackground(\''+backgroundStepLength+'\',\''+backgroundEndLeft+'\',\''+backgroundDir+'\')',timerlen);
		
}


function slidetick(stepLength,thisDir,thisEndLeft){
        var elapsed = (new Date()).getTime() - startTime;
		

		obj = document.getElementById(objname);
		
		sliderCurrentLeft = parseInt(obj.style.left);
		
        if (elapsed > travelTime || sliderStartLeft == sliderEndLeft) {
                endSliderSlide();
		} else {
			
			
				if (sliderEndLeft == 0) {
					sliderEndLeft = 1;	
				}
                //var d = Math.round(elapsed / travelTime * sliderEndLeft);
                var d = Math.round(elapsed / travelTime * sliderTravelDistance);
			  
				
                if(sliderDir == "right") {
					if (sliderCurrentLeft >= sliderEndLeft) {
						endSliderSlide();	
					} else {
                        d = sliderStartLeft + d;
					}
				} else {
					if (sliderCurrentLeft <= sliderEndLeft) {
						endSliderSlide();	
					} else {
                        d = sliderStartLeft - d;
					}
				}

                obj.style.left = d + "px";
        }

        return;
		
}



function slideBackground(backgroundStepLength,thisEndLeft,backgroundDir) {

	var elapsed = (new Date()).getTime() - startTime;

	
	if (elapsed > travelTime) {
			endBackgroundSlide();
	} else {
		
			objFrame = document.getElementById(objframename);
			
//			currentBackgroundLeft = parseInt(objFrame.style.left);
		
//			var d =Math.round(elapsed / travelTime * backgroundEndLeft);
			var d =Math.round(elapsed / travelTime * backgroundTravelDistance);
		  
			
			if(backgroundDir == "right") {
					d = backgroundStartLeft + d;
			} else {
					d = backgroundStartLeft - d;
			}

			objFrame.style.left = d + "px";
	}

	return;
	
	
}



function endBackgroundSlide(){
//		alert('endSlide: endLeft:: ' + endLeft);
        clearInterval(backgroundTimerID);


		backgroundObj = document.getElementById('slider_background');
        backgroundObj.style.left = backgroundEndLeft + "px";
		
		backgroundLeft = backgroundEndLeft;

		backgroundMoving = false;
        return;
}



function endSliderSlide(){
//		alert('endSlide: endLeft:: ' + endLeft);
        clearInterval(sliderTimerID);

		obj = document.getElementById(objname);
        obj.style.left = sliderEndLeft + "px";

//        delete(moving);
		oldImgNum = currentImgNum;
		currentImgNum = newImgNum;
		
		//writeDebug('oldImgNum: ' + oldImgNum);
		//writeDebug('currentImgNum: ' + currentImgNum);
		
		currentIDNum = currentImgNum;
		newImgNum = 0;
		sliderMoving = false;
		moveslow = false;
        delete(sliderTimerID);
        delete(startTime);
        delete(endLeft);
        delete(obj);
        delete(dir);
		
		document.getElementById('imageCounter').innerHTML = (parseInt(currentIDNum) + 1) + ' of ' + totalImgNum;
		
		
		finishTransition (oldImgNum,currentImgNum);
		
        return;
}


function finishTransition (oldImgNum,currentImgNum) {
	//writeDebug('finishTransition');
	if (sliderMoving == true || backgroundMoving == true) {
		finishInterval = setTimeout('finishTransition ('+oldImgNum+','+currentImgNum+')',10);
	} else {
		hideDiv(makeLargeID(oldImgNum));
//		changeOpacity(makeThumbID(currentImgNum),100);
		fadeIn(makeThumbID(currentImgNum),minOpacity);
		fadeIn(makeLargeID(currentImgNum),minOpacity);
		displayDiv(makeLargeID(currentImgNum));
	}
}

function makeThumbID(idNum) {
	return ("li_" + idNum);
}

function makeLargeID(idNum) {
	return ("large_image_" + idNum );
}

function displayDiv(idNum) {
	var obj = document.getElementById(idNum);
	obj.style.display = 'block';
}

function hideDiv(idNum) {
	var obj = document.getElementById(idNum);
	obj.style.display = 'none';
}

function changeOpacity(objID,opacity) {
	var opacity = (opacity == 100)?99.999:opacity;
	var obj = document.getElementById(objID);
	// IE/Win
	obj.style.filter = "alpha(opacity:"+opacity+")";
	// Safari<1.2, Konqueror
	obj.style.KHTMLOpacity = opacity/100;
	// Older Mozilla and Firefox
	obj.style.MozOpacity = opacity/100;
	// Safari 1.2, newer Firefox and Mozilla, CSS3
	obj.style.opacity = opacity/100;	
}


function fadeIn(objID,opacity) {
		//writeDebug('fadeIn('+objID+','+opacity+')');
	  if (document.getElementById) {
		var obj = document.getElementById(objID);
		if (opacity <= 100) {
		  changeOpacity(objID, opacity);
		  opacity += 10;
		  window.setTimeout("fadeIn('"+objID+"',"+opacity+")", 100);
		} else {
			changeOpacity(objID, 100);	
		}
	  }
}


function fadeOut(objID,opacity) {
	  if (document.getElementById) {
		var obj = document.getElementById(objID);
		if (opacity >= minOpacity) {
		  changeOpacity(objID, opacity);
		  opacity -= 10;
		  window.setTimeout("fadeOut('"+objID+"',"+opacity+")", 100);
		} else {
			changeOpacity(objID, minOpacity);	
		}
	  }
}

function showLeft() {
	obj = document.getElementById(objname);
	alert(obj.style.left);	
	return;
}

function showVariables() {
	clearDebug();
	//writeDebug('currentIDNum: ' + currentIDNum);
	//writeDebug('timerlen: ' + timerlen);
	//writeDebug('objname: ' + objname);
	//writeDebug('stepNum: ' + stepNum);
	//writeDebug('imgWidth: ' + imgWidth);
	//writeDebug('moving: ' + moving);
	//writeDebug('containerWidth: ' + containerWidth);
	//writeDebug('backgroundLeft: ' + backgroundLeft);
	//writeDebug('moveslow: ' + moveslow);
	//writeDebug('timerID: ' + timerID);
}




function writeDebug(copyText) {
//	document.getElementById('debugDiv').innerHTML = document.getElementById('debugDiv').innerHTML + "<br>";
//	document.getElementById('debugDiv').innerHTML = document.getElementById('debugDiv').innerHTML + copyText;
	return;
}

function clearDebug() {
	document.getElementById('debugDiv').innerHTML = "";
	return;
}