var thumbs = new Array();
var curimg = null, nextimg = null, previmg = null;
var prevpos = -2, curpos = -2;	//force first display
var curoff = -2;
var loadcheck = 250;

var firsttag, prevtag, nexttag, lasttag, pguptag, pgdntag, showtag;
var nametag, sizetag, dimtag, captag, postag;
var imagetag;
var thumbtag = new Array();
var showing = null;
var fading = null;

var szprefs = new Array ('', 'K', 'M', 'G', 'T');

//var debugstr = '';

function MetaImage (file, size, caption)
{
	this.file = file;
	this.size = readableSize (size);
	this.caption = caption;
}

function readableSize (size)
{
	for (var idx = 0; idx < szprefs.length && size > 1024; idx++)
		size = Math.round (size / 1024);
	return size + szprefs[idx] + 'B';
}

function display (tnum)
{
//	var dbg = document.getElementById ('debug');
//	if (dbg)
//		dbg.innerHTML = '<b>tnum: </b>' + tnum + ' (' + typeof(tnum) + ')';
	
	displayAny (tnum+curoff);
}

function initdisplay (firstpos)
{
	for (var idx in svr_imglist)
	{
		var rec = svr_imglist[idx].split ("|", 3);
		svr_imglist[idx] = new MetaImage (rec[0], rec[1], rec[2]);
	}
	
	firsttag = document.getElementById ('first');
	prevtag = document.getElementById ('previous');
	nexttag = document.getElementById ('next');
	lasttag = document.getElementById ('last');
	nametag = document.getElementById ('filename');
	sizetag = document.getElementById ('filesize');
	dimtag = document.getElementById ('dimensions');
	captag = document.getElementById ('caption');
	postag = document.getElementById ('position');
	pguptag = document.getElementById ('pgup');
	pgdntag = document.getElementById ('pgdn');
	showtag = document.getElementById ('show');
	imagetag = document.getElementById ('image');
	imagetag.style.visibility = 'hidden';
	for (var tnum = 0; tnum < svr_thumbs; tnum++)
		thumbtag[tnum] = document.getElementById ('t'+tnum);
		
	if (showtag)
		showtag.innerHTML = svr_start;
	
	setTimeout ("displayAny("+firstpos+")", 100);
}

function displayThumbs ()
{
	var done = true;
	
	for (var tnum = 0; tnum < thumbs.length; tnum++)
	{
		var img = thumbs[tnum];
		if (img == null)
			break;
		if (!img.complete)
		{
			done = false;
			continue;
		}
		if (!thumbtag[tnum].innerHTML)
		{
			var imgclass = (tnum+curoff == curpos)? "selected-thumbnail" : "thumbnail";
			displayImg (thumbtag[tnum], img, svr_thumbsize, svr_thumbsize, imgclass);
		}
	}
		
	if (done)
		setPageNav (!showing);
	else
		setTimeout ("displayThumbs()", 500);
}

function displayView ()
{
	if (displayImg (imagetag, curimg, svr_viewwidth, svr_viewheight, "main-image"))
	{
		setNav (!showing);
		fadeIn (0);
	}
	else
		setTimeout ("displayView()", 500);
}

function displayImg (tag, img, xextent, yextent, cssclass)
{
	if (img.width == 0 || img.height == 0)
		return false;
	var scale = xextent / img.width;
	var yscale = yextent / img.height;
	if (yscale < scale)
		scale = yscale;
	var iwidth = img.width, iheight = img.height;
	if (scale < 1.0)
	{
		iwidth = Math.floor(iwidth * scale);
		iheight = Math.floor(iheight * scale);
	}
	var css = cssclass? '" class="' + cssclass : "";
	tag.innerHTML = '<img src="' + img.src + '" width="' + iwidth + '" height="' + iheight + css + '" />';
	return true;
}

function displayFirst ()
{
	displayAny (0);
}

function displayNext ()
{
	displayAny (curpos+1);
}

function displayPrev ()
{
	displayAny (curpos-1);
}

function displayLast ()
{
	displayAny (svr_imglist.length-1);
}

function displayAny (newpos)
{
	if (newpos == curpos || newpos < 0 || newpos >= svr_imglist.length)
		return;
	imagetag.innerHTML = '';
	clearTimeout (fading);
	fading = null;
	imagetag.style.visibility = 'hidden';
	if (curpos >= 0)	//ie. skip first time
		setNav (false);
	
	if (newpos == curpos+1)
	{
		previmg = curimg;
		curimg = nextimg;
		nextimg = null;
	}
	else if (newpos == curpos+2)
	{
		previmg = nextimg;
		curimg = null;
		nextimg = null;
	}
	else if (newpos == curpos-1)
	{
		nextimg = curimg;
		curimg = previmg;
		previmg = null;
	}
	else if (newpos == curpos-2)
	{
		nextimg = previmg;
		curimg = null;
		previmg = null;
	}
	else
		curimg = previmg = nextimg = null;
	prevpos = curpos;
	curpos = newpos;
	if (curimg == null)
	{
		curimg = new Image();
		curimg.src = svr_imagedir + svr_imglist[curpos].file;
	}
	if (nextimg == null && curpos < svr_imglist.length-1)
	{
		nextimg = new Image();
		nextimg.src = svr_imagedir + svr_imglist[curpos+1].file;
	}
	if (previmg == null && curpos > 0)
	{
		previmg = new Image();
		previmg.src = svr_imagedir + svr_imglist[curpos-1].file;
	}
	setOpacity (0);
	imagetag.style.visibility = 'visible';
	displayView ();
	displayThumbFor (curpos);
}

function prevPage ()
{
	displayThumbFor (curoff - svr_thumbs);
}

function nextPage ()
{
	displayThumbFor (curoff + svr_thumbs);
}

function displayThumbFor (tnum)
{
	var newoff = svr_thumbs * Math.floor (tnum / svr_thumbs);
	if (newoff < 0 || newoff >= svr_imglist.length)
		return;
	
	if (newoff != curoff)
	{
		curoff = newoff;
		
		setPageNav (false);
		for (var tnum in thumbtag)
		{
			thumbs[tnum] = null;
			thumbtag[tnum].innerHTML = '';
		}
		
		//var maxtnum = (svr_imglist.length < svr_thumbs)? svr_imglist.length : svr_thumbs;
		var maxtnum = (curoff+svr_thumbs <= svr_imglist.length)? svr_thumbs : svr_imglist.length-curoff;
		for (var tnum = 0; tnum < maxtnum; tnum++)
		{
			thumbs[tnum] = new Image();
			thumbs[tnum].src = svr_thumbdir + svr_imglist[tnum+curoff].file;
		}
		displayThumbs ();
	}
	else if (curpos != prevpos)
	{
		if (prevpos >= curoff && prevpos < curoff+svr_thumbs)
			displayImg (thumbtag[prevpos-curoff], thumbs[prevpos-curoff], svr_thumbsize, svr_thumbsize, "thumbnail");
		if (curpos >= curoff && curpos < curoff+svr_thumbs)
			displayImg (thumbtag[curpos-curoff], thumbs[curpos-curoff], svr_thumbsize, svr_thumbsize, "selected-thumbnail");
	}
	prevpos = curpos;
}

function setNav (on)
{
	 if (firsttag)
	 	firsttag.innerHTML = (on && curpos > 0)? svr_first : "";
	 if (prevtag)
	 	prevtag.innerHTML = (on && curpos > 0)? svr_prev : "";
	 if (nexttag)
	 	nexttag.innerHTML = (on && curpos < svr_imglist.length-1)? svr_next : "";
	 if (lasttag)
	 	lasttag.innerHTML = (on && curpos < svr_imglist.length-1)? svr_last : "";
	 
	 if (nametag)
	 	nametag.innerHTML = svr_imglist[curpos].file;
	 if (sizetag)
	 	sizetag.innerHTML = svr_imglist[curpos].size;
	 if (captag)
	 	captag.innerHTML = svr_imglist[curpos].caption;
	 if (dimtag)
	 	dimtag.innerHTML = curimg.width + "x" + curimg.height;
	 if (postag)
	 	postag.innerHTML = (curpos+1) + svr_of + svr_imglist.length;
}

function setPageNav (on)
{
	if (pguptag)
		pguptag.innerHTML = (on && curoff > 0)? svr_pgup : "";
	if (pgdntag)
		pgdntag.innerHTML = (on && curoff+svr_thumbs < svr_imglist.length)? svr_pgdn : "";
}

function slideShow (command)
{
	if (command)
	{
		if (showing)
		{
			stopSlideShow ();
			return;
		}
		showtag.innerHTML = svr_stop;
		setNav (false);
		setPageNav (false);
	}
	
	showing = true;	//to clear nav buttons. set properly below
	if (curpos >= svr_imglist.length-1)
		displayFirst();
	else
		displayNext ();
	if (curpos < svr_imglist.length-1 || svr_repeat)
		showing = setTimeout ("slideShowWait()", loadcheck);
	else
		stopSlideShow ();
}

//Don't start slide timer until image loaded
function slideShowWait()
{
	if (curimg.complete)
		showing = setTimeout ("slideShow(false)", svr_delay*1000);
	else
		showing = setTimeout ("slideShowWait()", loadcheck);
}

function stopSlideShow ()
{
	clearTimeout (showing);
	showing = null;
	showtag.innerHTML = svr_start;
	setPageNav (true);
	setNav (true);
}

function fadeIn (opacity)
{
	fading = null;
	if (opacity <= 100)
	{
		xfade = 0;
		setOpacity (opacity);
		opacity += 10;
		fading = setTimeout ("fadeIn(" + opacity + ")", 100);
	}
}

//This code courtesy of Richard Rutter
//http://clagnut.com/sandbox/imagefades/
function setOpacity (opacity)
{
	if (showing)
		return;
	if (opacity == 100)
		opacity = 99.999;	// prevents flicker in Firefox
  
	// IE/Win
	imagetag.style.filter = "alpha(opacity:" + opacity + ")";
  
	// Safari<1.2, Konqueror (doesn't work with Konqueror 3.5.5)
	imagetag.style.KHTMLOpacity = opacity/100;
  
	// Older Mozilla and Firefox
	imagetag.style.MozOpacity = opacity/100;
  
	// Safari 1.2, newer Firefox and Mozilla, CSS3
	imagetag.style.opacity = opacity/100;
}

