// Auto-gallery wrapper functions by Paul Duff

// Flags for tracking interrupts to the automated routine
var interrupt = 0;

// Track latest settings
var g_oldImg = 0;
var g_newImg = 0;
var g_numImgs = 0;
var g_timeInc = 0;
var g_cycle = 0;
var animating = 0;

// Called to prepare the page to load the next image
function setNextTimeout(oldImg, newImg, numImgs, timeInc, cycle) {
	// Only change picture if automatic show mode is on
	if (showStatus == 1 && interrupt == 0) {
		// Update current image being displayed
		blendimage(jsFileList[newImg], g_fadeSpeed, cycle);
//alert(jsFileList[newImg] + 'ok' + newImg);

		// Set timer to load next image
		var curImage = newImg;
		var nextImage = (newImg + 1) % numImgs;
		var nextCycle = (cycle + 1) % 2;
	} else {
		// Set timer to dmake no change
		var curImage = g_oldImg;
		var nextImage = g_newImg;
		var nextCycle = g_cycle;
		interrupt = 0;
	}
	
	// Update latest settings
	g_oldImg = curImage;
	g_newImg = nextImage;
	g_numImgs = numImgs;
	g_timeInc = timeInc;
	g_cycle = nextCycle;
	
	// Set timer to update later
	setTimeout("setNextTimeout(" + curImage + "," + nextImage + "," + numImgs + "," + timeInc + "," + nextCycle + ")", timeInc * 1000);
}

// Called to advance to next page immediately
function nextImage() {
	if (animating == 0) {
		interrupt = 1;	// Notify blender to ignore next automated update
	
		// Update current image being displayed immediately
		blendimage(jsFileList[g_newImg], 300, g_cycle);
	
		// Set timer to load next image
		var curImage = g_newImg;
		var nextImage = (g_newImg + 1) % g_numImgs;
		var nextCycle = (g_cycle + 1) % 2;
		
		// Update latest settings
		g_oldImg = curImage;
		g_newImg = nextImage;
		g_cycle = nextCycle;
	
		// Set timer to update later
		//setTimeout("setNextTimeout(" + curImage + "," + nextImage + "," + g_numImgs + "," + g_timeInc + "," + nextCycle + ")", g_timeInc * 1000);
	}
}

// Called to revert to previous page immediately
function previousImage() {
	if (animating == 0) {
		interrupt = 1;	// Notify blender to ignore next automated update
	
		// Update current image being displayed immediately
		g_newImg = (g_newImg - 2 + g_numImgs) % g_numImgs;
		blendimage(jsFileList[g_newImg], 300, g_cycle)
	
		// Set timer to load next image
		var curImage = g_newImg;
		var nextImage = (g_newImg + 1) % g_numImgs;
		var nextCycle = (g_cycle + 1) % 2;
		
		// Update latest settings
		g_oldImg = curImage;
		g_newImg = nextImage;
		g_cycle = nextCycle;
		
		// Set timer to update later
		//setTimeout("setNextTimeout(" + curImage + "," + nextImage + "," + g_numImgs + "," + g_timeInc + "," + nextCycle + ")", g_timeInc * 1000);
	}
}

// Called to switch automatic show on/off
function toggleShow() {
	showStatus = (showStatus + 1) % 2;
	var txt;
	if (showStatus == 0) {
		txt = "Resume";
	} else {
		txt = "Stop";
	}
	document.getElementById('toggleLink').innerHTML = txt;
}

// Called to make show faster
function fasterShow() {
	if (g_timeInc > 1) {
		g_timeInc = g_timeInc - 1;
	}
	if (g_fadeSpeed > 0) {
		g_fadeSpeed = g_fadeSpeed - 1000;
	}
}

// Called to make show slower
function slowerShow() {
	g_timeInc = g_timeInc + 1;
	g_fadeSpeed = g_fadeSpeed + 1000;
}

// Run when animation completes
// This is to avoid bizarre race conditions through overclicking buttons
function resetAnimation() {
	animating = 0;
}

// DreamWeaver preload function
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

// Functions originally from http://www.brainerror.net/scripts_js_blendtrans.php
// Heavily edited to deal with different sized images by Paul Duff
function opacity(id, opacStart, opacEnd, millisec) {
	//speed for each frame
	var speed = Math.round(millisec / 100);
	var timer = 0;

	//determine the direction for the blending, if start and end are the same nothing happens
	if(opacStart > opacEnd) {
		for(i = opacStart; i >= opacEnd; i--) {
			setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
			timer++;
		}
	} else if(opacStart < opacEnd) {
		for(i = opacStart; i <= opacEnd; i++)
			{
			setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
			timer++;
		}
	}
}

//change the opacity for different browsers
function changeOpac(opacity, id) {
	var object = document.getElementById(id).style; 
	object.opacity = (opacity / 100);
	object.MozOpacity = (opacity / 100);
	object.KhtmlOpacity = (opacity / 100);
	object.filter = "alpha(opacity=" + opacity + ")";
	if (id == 'blendimage0') {
		id2 = 'blendimage1';
	} else {
		id2 = 'blendimage0';
	}
	var object2 = document.getElementById(id2).style; 
	object2.opacity = ((100-opacity) / 100);
	object2.MozOpacity = ((100-opacity) / 100);
	object2.KhtmlOpacity = ((100-opacity) / 100);
	object2.filter = "alpha(opacity=" + (100-opacity) + ")";
}

function shiftOpacity(id, millisec) {
	//if an element is invisible, make it visible, else make it ivisible
	if(document.getElementById(id).style.opacity == 0) {
		opacity(id, 0, 100, millisec);
	} else {
		opacity(id, 100, 0, millisec);
	}
}

function blendimage(imagefile, millisec, cycle) {
	var speed = Math.round(millisec / 100);
	var timer = 0;

	//make new image
	if (cycle == 0) {
		document.getElementById('blendimage0').src = imagefile;
	} else {
		document.getElementById('blendimage1').src = imagefile;
	}
	
	//fade in image
	animating = 1;
	for(i = 0; i <= 100; i++) {
		if (cycle == 0) {
			setTimeout("changeOpac(" + i + ",'blendimage0')",(timer * speed));
		} else {
			setTimeout("changeOpac(" + i + ",'blendimage1')",(timer * speed));
		}
		timer++;
	}
	setTimeout("resetAnimation()",(timer * speed));
}
