/*====================================================================*\

  Stormchild.net
  Image Viewer 1.0

  | Jason Sims
  | Symmetriq
  | www.symmetriq.net

  Feel free to steal my code and adapt it for your own purposes.

  Keyboard input code adapted from MozPoint (http://mozpoint.mozdev.org/)

  > Version 1.0 (2006-07-14)
  - Initial release
  - Added timing code to keyboard input to prevent double-fired key events.
    Key events must be at least 100ms apart. This fixes a problem in Safari
    (up to and including the latest WebKit nightly build at this time) in
    which the key event fires twice when an arrow key is pressed.

\*====================================================================*/

// preload image controls
pre_back = new Image(20,20); pre_back.src = imagePath + 'button_back_on.gif';
pre_index = new Image(20,20); pre_index.src = imagePath + 'button_index_on.gif';
pre_next = new Image(20,20); pre_next.src = imagePath + 'button_next_on.gif';

var maxID = imageList.length - 1;

var scrollOffset = 0;
var currentID;

var preload = new Array();

// viewport dimensions
var viewportX, viewportY;
if (self.innerHeight) {
	// all except Explorer
	viewportX = self.innerWidth;
	viewportY = self.innerHeight;
} else if (document.documentElement && document.documentElement.clientHeight) {
	// Explorer 6 Strict Mode
	viewportX = document.documentElement.clientWidth;
	viewportY = document.documentElement.clientHeight;
} else if (document.body) {
	// other Explorers
	viewportX = document.body.clientWidth;
	viewportY = document.body.clientHeight;
}

function show_viewport_size() {
	alert('Viewport size: ' + viewportX + ' x ' + viewportY);
}

// Page Objects
var gallery = document.getElementById('gallery');
var imagebox = document.getElementById('imagebox');
var imageTitle = document.getElementById('image_title');
var imageDate = document.getElementById('image_date');
var theImage = document.getElementById('the_image');
var imageInfo = document.getElementById('image_info');

// enable vertical centering?
if (viewportY >= 720) {
	vCenterImage = true;
	theImage.style.height = '652px';
}

function show_image(imgID) {

	if (self.pageYOffset) {
		// all except Explorer
		scrollOffset = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop) {
		// Explorer 6 Strict
		scrollOffset = document.documentElement.scrollTop;
	} else if (document.body) {
		// all other Explorers
		scrollOffset = document.body.scrollTop;
	}

	/* alert('Current scrollOffset: ' + scrollOffset); */

	currentID = imgID;

	display_image(imgID);

	gallery.style['display'] = 'none';
	imagebox.style['display'] = 'block';

	if (viewportY < 900) {
		window.scrollTo(0,170);
	} else {
		window.scrollTo(0,0);
	}

}

function display_image(imgID) {

	// Build <img> tag
	imgTag = '<img src="' + imgPath + imageList[imgID][0] + '" width="' + imageList[imgID][2] + '" height="' + imageList[imgID][3] + '"';

	// if viewport is at least 720px tall, center images less than 650px tall
	if (viewportY >= 720 && imageList[imgID][3] < 650) {
		margin = Math.round((650 - imageList[imgID][3]) / 2);
		imgTag += ' style="margin: ' + margin + 'px 0"';
	}

	imgTag += ' />';

	// Swap in image and info
	imageTitle.innerHTML = imageList[imgID][1];
	imageDate.innerHTML = imageList[imgID][4];
	theImage.innerHTML = imgTag;
	// additional info (optional)
	imageInfo.innerHTML = imageList[imgID][5] ? imageList[imgID][5] : '&nbsp;';

	// preload next/previous images
	preload_images();

}

function next_image() {
	nextID = get_next_id();
	currentID = nextID;
	display_image(nextID);
}

function prev_image() {
	prevID = get_prev_id();
	currentID = prevID;
	display_image(prevID);
}

function get_next_id() {
	return (currentID == maxID) ? 0 :  currentID + 1;
}

function get_prev_id() {
	return (currentID == 0) ? maxID : currentID - 1;
}

// preload next and previous images
function preload_images() {

	// preload next and previous images
	nextID = get_next_id();
	prevID = get_prev_id();

	if (!preload[nextID]) {
		preload[nextID] = new Image(); preload[nextID].src = imgPath + imageList[nextID][0];
	}

	if (!preload[prevID]) {
		preload[prevID] = new Image(); preload[prevID].src = imgPath + imageList[prevID][0];
	}

}

function hide_image() {
	imagebox.style['display'] = 'none';
	gallery.style['display'] = 'block';
	window.scrollTo(0,scrollOffset);
}

var timeStamp = prevTimeStamp = 0;

// Keyboard input
function keys(key) {
	if (!key) {
		key = event;
		key.which = key.keyCode;
	}

	curTime = new Date();
	timeStamp = curTime.getTime();

	// at least 100ms must elapse between key events to prevent double-firing
	if (timeStamp - prevTimeStamp > 100) {

		switch (key.which) {
			case 27: // esc
			case 88: // x
				hide_image();
				break;
			case 39: // right arrow
				next_image();
				break;
			case 37: // left arrow
				prev_image();
				break;
		}

		prevTimeStamp = timeStamp;
	}

}

function keyStartup() {
	document.onkeyup = keys;
}

addLoadEvent(keyStartup);
