// Global Declarations


// Functions

// GENERAL // GENERAL // GENERAL // GENERAL // GENERAL // GENERAL // GENERAL // GENERAL // GENERAL // GENERAL // GENERAL // GENERAL // GENERAL // GENERAL
function $(theId) { return document.getElementById(theId); }
function hasClass(element, name) { return element.className.match(new RegExp('(\\s|^)' + name + '(\\s|$)')); }
function addClass(element, name) { if (!hasClass(element, name)) { element.className += ((element.className != '')?' ':'') + name; } }
function setClass(element, name) { element.className = name; }
function removeClass(element, name) { element.className = element.className.replace(new RegExp('(\\s|^)' + name + '(\\s|$)'), function(a, b, c) { return (b && c)?' ':''; }); }
function replaceClass(element, oldClass, newClass) { removeClass(element, oldClass); addClass(element, newClass); }
function duplicate(string, times) { for (var i = 0; i < times; i++) { val += string; } return val; }
function createArray(length, init) {
	var evaluate = false;
	if (init.substring(0, 5) == 'EVAL:') { init = init.substring(5); evaluate = true; }
		
	var arr = [];
	for (var i = 0; i < length; i++) {
		if (evaluate) {
			arr[i] = eval(init);
		} else {
			arr[i] = init;
		}
	}
	return arr;
}
function getIndex(arr, string) { for (var i = 0; i < arr.length; i++) { if (arr[i] == string) { return i; } } return -1; }
function setOpacity(element, value) { element.style.opacity = value / 100; element.style.filter = "alpha(opacity = " + value + ")"; }

// EFFECTS // EFFECTS // EFFECTS // EFFECTS // EFFECTS // EFFECTS // EFFECTS // EFFECTS // EFFECTS // EFFECTS // EFFECTS // EFFECTS // EFFECTS // EFFECTS // EFFECTS

var fader_inc = 10;		var fader_delay = 80; // delay between increments

function fader_start(imageId, direction) {
	imageInfo[imageId][FADER_DIRECTION] = direction;
	if (direction > 0) {
		imageInfo[imageId][FADER_DEGREE] = 0;
		setOpacity($('c_g_n_scroller_image' + imageId), imageInfo[imageId][FADER_DEGREE]);
		replaceClass($('c_g_n_scroller_image' + imageId), 'hidden', 'visible');
	} else {
		imageInfo[imageId][FADER_VISIBLE] = false;
		imageInfo[imageId][FADER_DEGREE] = 100;
		setOpacity($('c_g_n_scroller_image' + imageId), imageInfo[imageId][FADER_DEGREE]);
		replaceClass($('c_g_n_scroller_image' + imageId), 'z-bottom', 'z-top');
	}
	if (imageInfo[imageId][FADER_TIMERID] != -1) { clearInterval(imageInfo[imageId][FADER_TIMERID]); }
	imageInfo[imageId][FADER_TIMERID] = setInterval('fader_increment(' + imageId + ')', fader_delay);
}
function fader_increment(imageId) {
	imageInfo[imageId][FADER_DEGREE] += (fader_inc * imageInfo[imageId][FADER_DIRECTION]);
	if ((imageInfo[imageId][FADER_DEGREE] >= 100) || (imageInfo[imageId][FADER_DEGREE] <= 0)) {
		if (imageInfo[imageId][FADER_DIRECTION] > 0) {
			imageInfo[imageId][FADER_DEGREE] = 100;
			imageInfo[imageId][FADER_VISIBLE] = true;
			replaceClass($('c_g_n_scroller_image' + imageId), 'z-top', 'z-bottom');
		} else {
			imageInfo[imageId][FADER_DEGREE] = 0;
			replaceClass($('c_g_n_scroller_image' + imageId), 'visible', 'hidden');
		}
		clearInterval(imageInfo[imageId][FADER_TIMERID]);
		imageInfo[imageId][FADER_TIMERID] = -1;
	}
	setOpacity($('c_g_n_scroller_image' + imageId), imageInfo[imageId][FADER_DEGREE]);
}

var slider_inc = 8;		var slider_delay = 30; var slider_imageWidth = 99; // actual width +/- spacing

function slider_start(imageId, position, offset) {
	if (offset) {
		imageInfo[imageId][SLIDER_TARGETPOS] = imageInfo[imageId][SLIDER_TARGETPOS] + position;
	} else {
		imageInfo[imageId][SLIDER_TARGETPOS] = position;
	}
	if (imageInfo[imageId][SLIDER_TIMERID] != -1) { clearInterval(imageInfo[imageId][SLIDER_TIMERID]); }
	imageInfo[imageId][SLIDER_TIMERID] = setInterval('slider_increment(' + imageId + ')', slider_delay);
}
function slider_increment(imageId) {
	if (imageInfo[imageId][SLIDER_CURRENTPOS] < imageInfo[imageId][SLIDER_TARGETPOS]) {
		imageInfo[imageId][SLIDER_CURRENTPOS] += slider_inc;
		if (imageInfo[imageId][SLIDER_CURRENTPOS] >= imageInfo[imageId][SLIDER_TARGETPOS]) {
			imageInfo[imageId][SLIDER_CURRENTPOS] = imageInfo[imageId][SLIDER_TARGETPOS];
			clearInterval(imageInfo[imageId][SLIDER_TIMERID]);
			imageInfo[imageId][SLIDER_TIMERID] = -1;
		}
	} else {
		imageInfo[imageId][SLIDER_CURRENTPOS] -= slider_inc;
		if (imageInfo[imageId][SLIDER_CURRENTPOS] <= imageInfo[imageId][SLIDER_TARGETPOS]) {
			imageInfo[imageId][SLIDER_CURRENTPOS] = imageInfo[imageId][SLIDER_TARGETPOS];
			clearInterval(imageInfo[imageId][SLIDER_TIMERID]);
			imageInfo[imageId][SLIDER_TIMERID] = -1;
		}
	}
	slider_setPosition(imageId);
}
function slider_setPosition(imageId) {
	$('c_g_n_scroller_image' + imageId).style.left = imageInfo[imageId][SLIDER_CURRENTPOS] + 'px';
}

var zoom_inc = 1;		var zoom_delay = 10; var zoom_factor = 0.5; // 0.75 = 75% of full size

function zoom_start(imageId, direction) {
	if (!loading && imageInfo[imageId][SLIDER_TIMERID] == -1) {
		imageInfo[imageId][ZOOM_DIRECTION] = direction;
		if (imageInfo[imageId][ZOOM_TIMERID] != -1) { clearInterval(imageInfo[imageId][ZOOM_TIMERID]); }
		imageInfo[imageId][ZOOM_TIMERID] = setInterval('zoom_increment(' + imageId + ')', zoom_delay);
	}
}
function zoom_increment(imageId) {
	imageInfo[imageId][ZOOM_WIDTH] += (zoom_inc * imageInfo[imageId][ZOOM_DIRECTION]);
	imageInfo[imageId][ZOOM_HEIGHT] += Math.round(zoom_inc * imageInfo[imageId][ZOOM_DIRECTION] * imageInfo[imageId][ZOOM_RATIO]);
	if ((imageInfo[imageId][ZOOM_WIDTH] >= imageList[imageId][IMAGE_THUMBWIDTH]) || 
			(imageInfo[imageId][ZOOM_WIDTH] <= imageInfo[imageId][ZOOM_NORMALWIDTH])) {
		if (imageInfo[imageId][ZOOM_DIRECTION] > 0) {
			imageInfo[imageId][ZOOM_WIDTH] = imageList[imageId][IMAGE_THUMBWIDTH];
			imageInfo[imageId][ZOOM_HEIGHT] = imageList[imageId][IMAGE_THUMBHEIGHT];
		} else {
			imageInfo[imageId][ZOOM_WIDTH] = imageInfo[imageId][ZOOM_NORMALWIDTH];
			imageInfo[imageId][ZOOM_HEIGHT] = imageInfo[imageId][ZOOM_NORMALHEIGHT];
		}
		clearInterval(imageInfo[imageId][ZOOM_TIMERID]);
		imageInfo[imageId][ZOOM_TIMERID] = -1;
	}
	zoom_setSize(imageId);
}
function zoom_setSize(imageId) {
	var padding_x = Math.round((imageList[imageId][IMAGE_THUMBHEIGHT] - imageInfo[imageId][ZOOM_WIDTH]) / 2);
	var padding_y = Math.round((scroller_height - imageInfo[imageId][ZOOM_HEIGHT]) / 2);
	$('c_g_n_scroller_image' + imageId).style.padding = padding_y + 'px ' + padding_x + 'px';
	$('c_g_n_scroller_image' + imageId).style.width = imageInfo[imageId][ZOOM_WIDTH] + 'px';
	$('c_g_n_scroller_image' + imageId).style.height = imageInfo[imageId][ZOOM_HEIGHT] + 'px';
}

function resize_hasElement(element) {
	for (var i = 0; i < resizeInfo.length; i++) {
		if (resizeInfo[i][RESIZE_ELEMENT] == element) { return i; }
	}
	return -1;
}
function resize_start(element, newX, newY, newW, newH, hMultiplier, vMultiplier) {
	var moveH = (newX != NO); var resizeH = (newW != NO);
	var moveV = (newY != NO); var resizeV = (newH != NO);
	var nowX = element.offsetLeft; var nowY = element.offsetTop;
	var nowW = element.offsetWidth; var nowH = element.offsetHeight;
	
	var elementIndex = resize_hasElement(element);
	resizeInfo[((elementIndex != -1)?elementIndex:resizeInfo.length)] = [element, nowX, ((moveH)?newX:NO),
		nowY, ((moveV)?newY:NO), nowW, ((resizeH)?newW:NO), nowH, ((resizeV)?newH:NO), hMultiplier, vMultiplier];
	if (resizeTimer == -1) { resizeTimer = setInterval('resize_increment()', resize_delay); }
}
function resize_increment() {
	var i = 0;
	var me;
	var increase;
	var done = true;
	while (i < resizeInfo.length) {
		me = resizeInfo[i];
		if ((me[RESIZE_NOWX] != me[RESIZE_NEWX]) && (me[RESIZE_NEWX] != NO)) {
			increase = (me[RESIZE_NOWX] < me[RESIZE_NEWX]);
			me[RESIZE_NOWX] += resize_inc * me[RESIZE_HMUL] * ((increase)?1:-1);
			if (increase != (me[RESIZE_NOWX] <= me[RESIZE_NEWX])) {
				me[RESIZE_NOWX] = me[RESIZE_NEWX]; // finished... if done is true then leave it true
			} else { done = false; }
		}
		if ((me[RESIZE_NOWY] != me[RESIZE_NEWY]) && (me[RESIZE_NEWY] != NO)) {
			increase = (me[RESIZE_NOWY] < me[RESIZE_NEWY]);
			me[RESIZE_NOWY] += resize_inc * me[RESIZE_VMUL] * ((increase)?1:-1);
			if (increase != (me[RESIZE_NOWY] <= me[RESIZE_NEWY])) {
				me[RESIZE_NOWY] = me[RESIZE_NEWY];
			} else { done = false; }
		}
		if ((me[RESIZE_NOWW] != me[RESIZE_NEWW]) && (me[RESIZE_NEWW] != NO)) {
			increase = (me[RESIZE_NOWW] < me[RESIZE_NEWW]);
			me[RESIZE_NOWW] += resize_inc * me[RESIZE_HMUL] * ((increase)?1:-1);
			if (increase != (me[RESIZE_NOWW] <= me[RESIZE_NEWW])) {
				me[RESIZE_NOWW] = me[RESIZE_NEWW];
			} else { done = false; }
		}
		if ((me[RESIZE_NOWH] != me[RESIZE_NEWH]) && (me[RESIZE_NEWH] != NO)) {
			increase = (me[RESIZE_NOWH] < me[RESIZE_NEWH]);
			me[RESIZE_NOWH] += resize_inc * me[RESIZE_VMUL] * ((increase)?1:-1);
			if (increase != (me[RESIZE_NOWH] <= me[RESIZE_NEWH])) {
				me[RESIZE_NOWH] = me[RESIZE_NEWH];
			} else { done = false; }
		}
		resize_redrawElement(i);
		if (done) {
			resizeInfo.splice(i, 1);
		} else {
			i++;
		}
	}
	if (resizeInfo.length == 0) {
		clearInterval(resizeTimer);
		resizeTimer = -1;
	}
}
function resize_redrawElement(elementId) {
	var me = resizeInfo[elementId];
	if (me[RESIZE_NEWX] != NO) { me[RESIZE_ELEMENT].style.left = me[RESIZE_NOWX] + 'px'; };
	if (me[RESIZE_NEWY] != NO) { me[RESIZE_ELEMENT].style.top = me[RESIZE_NOWY] + 'px'; };
	if (me[RESIZE_NEWW] != NO) { me[RESIZE_ELEMENT].style.width = me[RESIZE_NOWW] + 'px'; };
	if (me[RESIZE_NEWH] != NO) { me[RESIZE_ELEMENT].style.height = me[RESIZE_NOWH] + 'px'; };
}


var DRAG_X = 0, DRAG_Y = 1;
var drag_mousedown = false, drag_element, drag_mousePos;

document.onmouseup = function() { drag_off(); }
document.onmouseout = function() { drag_off(); }
document.onmouseover =  function(event) { event = event || window.event; drag_test(event); }

function document_setPage(name, category) {
	var truePage = ((location.href.indexOf('#') != -1)?location.href.substr(0, location.href.indexOf('#')):location.href);
	if (name == '' && category == '') {
		location.href = truePage + '#';
	} else {
		location.href = truePage + '#' + escape(name + '_' + category);
	}
}

function document_getPage() {
	var page = '';
	if (location.href.indexOf('#') != -1) {
		page = location.href.substr(location.href.indexOf('#') + 1, location.href.length);
	}
	if (page != '') {
		var arr = page.split('_');
		menu_click(arr[0]);
		//query_request(arr[0], arr[1], arr[2]);
	}
}

function drag_on(ev, el) {
	if (!ev) { ev = window.event; }
	drag_mouseDown = true;
	drag_element = el;
	drag_mousePos = [ev.clientX, ev.clientY];
	document.onmousemove = function(event) { drag_mouseMove(event); return false; };
	return false;
}
function drag_test(ev) { if (ev.detail && ev.detail > 0) { drag_on(ev, drag_element); } }
function drag_off() { drag_mouseDown = false; document.onmousemove = null; }
function drag_mouseMove(ev) {
	if (!ev) { ev = window.event; }
	if (drag_mouseDown) {
		var left = drag_element.offsetLeft + ((ev.clientX - drag_mousePos[DRAG_X]) * 2), width = drag_element.offsetWidth, parentWidth = drag_element.offsetParent.offsetWidth;
		var top = drag_element.offsetTop + ((ev.clientY - drag_mousePos[DRAG_Y]) * 2), height = drag_element.offsetHeight, parentHeight = drag_element.offsetParent.offsetHeight;
		drag_element.style.left = ((left > 0 || width <= parentWidth)?0:((left + width < parentWidth)?(parentWidth - width):left)) + 'px';
		drag_element.style.top = ((top > 0 || height <= parentHeight)?0:((top + height < parentHeight)?(parentHeight - height):top)) + 'px';
		drag_mousePos = [ev.clientX, ev.clientY];
	}
}


var imageList = [];
var imageCategories = [];
var IMAGE_ID = 0;
var IMAGE_TITLE = 1; var IMAGE_MEDIUM = 2;
var IMAGE_HEIGHT = 3; var IMAGE_WIDTH = 4; var IMAGE_3D = 5;
var IMAGE_PXWIDTH = 6; var IMAGE_PXHEIGHT = 7;
var IMAGE_THUMBWIDTH = 8; var IMAGE_THUMBHEIGHT = 9;
var IMAGE_SOLD = 10;

var imageInfo = [];
var FADER_TIMERID = 0; var FADER_DEGREE = 1; var FADER_DIRECTION = 2; var FADER_VISIBLE = 3;
var SLIDER_TIMERID = 4; var SLIDER_CURRENTPOS = 5; var SLIDER_TARGETPOS = 6;
var ZOOM_TIMERID = 7; ZOOM_WIDTH = 8; var ZOOM_HEIGHT = 9; var ZOOM_DIRECTION = 10; var ZOOM_NORMALWIDTH = 11; var ZOOM_NORMALHEIGHT = 12; ZOOM_RATIO =13;

var gallery_selected = '';
var category_selected = '';
var image_selected = -1;


var RESIZE_ELEMENT = 0; var RESIZE_NOWX = 1; var RESIZE_NEWX = 2; var RESIZE_NOWY = 3; var RESIZE_NEWY = 4;
var RESIZE_NOWW = 5; var RESIZE_NEWW = 6; var RESIZE_NOWH = 7; var RESIZE_NEWH = 8; var RESIZE_HMUL = 9; var RESIZE_VMUL = 10;
var NO = -5000;
var resize_inc = 2;		var resize_delay = 10;
var resizeInfo = [];
var resizeTimer = -1;

var scroller_firstImage = 0;
var scroller_numVisible = 7; // preferably ODD
var scroller_top = 30;
var scroller_height = 122;
var scroller_contractedHeight = 60;
var scroller_expanded = false;

var options_contractedWidth = 120;
var options_expanded = false;
var options_header = ['Visible', 'Hidden'];
var options_imageView = ['Full Fit', 'Half Fit', 'Actual Size'];
var options_animation = ['On', 'Off'];
var options_resolution = ['Low', 'High'];

var image_fullscreen = false, image_top = 100, image_fullscreenTop = -114;
var image_resolution = 'small';


function scroller_createImageList(table, category) {
	$('c_g_n_scroller_imageList').innerHTML = '';
	image_selected = -1;
	var i;
	for (var i = 0; i < imageList.length; i++) {
		$('c_g_n_scroller_imageList').innerHTML += '<div id="c_g_n_scroller_image' + i + '" class="image hidden z-top" '
			+ 'onmouseover="scroller_mouseOver(' + i + ');" onmouseout="scroller_mouseOut(' + i + ');" '
			+ 'onclick="scroller_click(' + i + ');"><div><img src="images/' + table + '/' + category + '/thumb' + imageList[i][IMAGE_ID] + '.jpg" /></div></div>';
	}
	imageInfo = createArray(imageList.length, 'EVAL:new Array(-1, 0, 1, false, -1, 0, 0, -1, 0, 0, 1, 0, 0, 0)');
	
	scroller_firstImage = 0;
	var middle = Math.floor(scroller_numVisible / 2) * slider_imageWidth; // floor because 4th image = index of 3
	var pos = (scroller_numVisible - 1) * slider_imageWidth;
	for (var i = 0; i < imageList.length; i++) {
		imageInfo[i][ZOOM_WIDTH] = Math.floor(imageList[i][IMAGE_THUMBWIDTH] * zoom_factor);
		imageInfo[i][ZOOM_NORMALWIDTH] = imageInfo[i][ZOOM_WIDTH];
		imageInfo[i][ZOOM_HEIGHT] = Math.round(imageList[i][IMAGE_THUMBHEIGHT] * zoom_factor);
		imageInfo[i][ZOOM_NORMALHEIGHT] = imageInfo[i][ZOOM_HEIGHT];
		imageInfo[i][ZOOM_RATIO] = imageList[i][IMAGE_THUMBHEIGHT] / imageList[i][IMAGE_THUMBWIDTH];
		zoom_setSize(i);
		if (i < scroller_numVisible) {
			imageInfo[i][SLIDER_CURRENTPOS] = middle;
			fader_start(i, 5); slider_start(i, i * slider_imageWidth, false);
		} else {
			imageInfo[i][SLIDER_CURRENTPOS] = pos;
			imageInfo[i][SLIDER_TARGETPOS] = pos;
			slider_setPosition(i);
		}
	}
	popup_stopLoading();
}
function scroller_leftArrowDown() {
	addClass($('c_g_n_scroller_leftArrow'), 'mouseDown');
	if (scroller_firstImage > 0) {
		scroller_firstImage--;
		var scroller_lastImage = scroller_firstImage + scroller_numVisible;
		fader_start(scroller_firstImage, 1);
		for (var i = scroller_firstImage + 1; i < scroller_lastImage; i++) {
			slider_start(i, slider_imageWidth, true);
		}
		fader_start(scroller_lastImage, -1);
	}
}
function scroller_rightArrowDown() {
	addClass($('c_g_n_scroller_rightArrow'), 'mouseDown');
	var scroller_lastImage = scroller_firstImage + scroller_numVisible;
	if (scroller_lastImage < imageList.length) {
		fader_start(scroller_firstImage, -1);
		for (var i = scroller_firstImage + 1; i < scroller_lastImage; i++) {
			slider_start(i, (-1 * slider_imageWidth), true);
		}
		fader_start(scroller_lastImage, 1);
		scroller_firstImage++;
	}
}

function scroller_centreSelected() {
	var scroller_lastImage = scroller_firstImage + scroller_numVisible;
	if (!(image_selected >= scroller_firstImage && image_selected < scroller_lastImage) || image_selected == -1) {
		fader_inc *= 5;
		slider_inc *= 5;
		var target = (image_selected == -1)?0:image_selected - Math.floor(scroller_numVisible / 2);
		if (target < 0) { target = 0; }
		if (target >= imageList.length - Math.floor(scroller_numVisible / 2) - 1) { target = imageList.length - scroller_numVisible; }
		while (scroller_firstImage != target) {
			if (scroller_firstImage > target) { scroller_leftArrowDown(); }
			else { scroller_rightArrowDown(); }
		}
		scroller_leftArrowUp();
		scroller_rightArrowUp();
		fader_inc /= 5;
		slider_inc /=5;
	}
}

function scroller_previousImage() {
	scroller_centreSelected();
	if (image_selected != -1) {
		if (image_selected <= (scroller_firstImage + Math.floor(scroller_numVisible / 2))) {
			scroller_leftArrowDown(); scroller_leftArrowUp();
		}
		scroller_click(image_selected - 1);
	} else {
		scroller_click(0);
	}
	if (image_selected <= 0) { slideshow_control('click', 'pause'); }
}

function scroller_nextImage() {
	scroller_centreSelected();
	if (image_selected != -1) {
		if (image_selected >= (scroller_firstImage + Math.floor(scroller_numVisible / 2))) {
			scroller_rightArrowDown(); scroller_rightArrowUp();
		}
		scroller_click(image_selected + 1);
	} else {
		scroller_click(0);
	}
	if (image_selected >= imageList.length - 1) { slideshow_control('click', 'pause'); }
}
	
	
function scroller_rightArrowUp() { removeClass($('c_g_n_scroller_rightArrow'), 'mouseDown'); }
function scroller_leftArrowUp() { removeClass($('c_g_n_scroller_leftArrow'), 'mouseDown'); }
function scroller_mouseOver(imageId) { zoom_start(imageId, 10); }
function scroller_mouseOut(imageId) { zoom_start(imageId, -1); }
function scroller_click(imageId) {
	if (imageId >= 0 && imageId < imageList.length) {
		if (image_selected != -1) { removeClass($('c_g_n_scroller_image' + image_selected).firstChild, 'selected'); }
		image_selected = imageId;
		addClass($('c_g_n_scroller_image' + imageId).firstChild, 'selected');
		image_setImage();
	}
}
function scroller_expand() {
	resize_start($('c_g_n_border'), NO, NO, NO, scroller_top + scroller_height, 1, 2);
	resize_start($('c_g_n_scroller'), NO, (scroller_height / 2), NO, NO, 1, 1);
	scroller_expanded = true;
}
function scroller_contract() {
	resize_start($('c_g_n_border'), NO, NO, NO, scroller_top + scroller_contractedHeight, 1, 2);
	var top =  scroller_contractedHeight / 2;
	resize_start($('c_g_n_scroller'), NO, top, NO, NO, 1, 1);
	scroller_expanded = false;
}
function scroller_setAnimation(value) {
	if (value == 'Off' && zoom_inc < 1000) {
		zoom_inc *= 1000;
		slider_inc *= 1000;
		fader_inc *= 1000;
		resize_inc *= 1000;
	} else if (value == 'On' && zoom_inc > 500) {
		zoom_inc /= 1000;
		slider_inc /= 1000;
		fader_inc /= 1000;
		resize_inc /= 1000;
	}
}

var slideshow_timerProgress = 0, slideshow_timerInc = 2, slideshow_timer;
function slideshow_incrementTimer(direction) {
	slideshow_timerProgress += slideshow_timerInc;
	if (slideshow_timerProgress > 100) {
		slideshow_timerProgress = 0;
		if (direction == 'forward') { scroller_nextImage(); }
		else if (direction == 'reverse') { scroller_previousImage(); }
	}
	document.getElementById('c_g_n_scroller_slideshow_time_filler').style.width = slideshow_timerProgress + '%';
}

function slideshow_control(action, command) {
	if (!hasClass($('c_g_n_s_s_c_' + command), 'unclickable')) {
		if (command == 'slower') {
			if (action == 'hover') { $('c_g_n_scroller_slideshow_title').innerHTML = 'Decrease Interval'; }
			else if (action == 'click') {
				if (slideshow_timerInc > 1) { slideshow_timerInc--; }
				
			}
		} else if (command == 'faster') {
			if (action == 'hover') { $('c_g_n_scroller_slideshow_title').innerHTML = 'Decrease Interval'; }
			else if (action == 'click') {
				if (slideshow_timerInc < 10) { slideshow_timerInc++; }
			}
		} else if (command == 'first') {
			if (action == 'hover') { $('c_g_n_scroller_slideshow_title').innerHTML = 'First Image'; }
			else if (action == 'click') {
				scroller_click(0);
				scroller_centreSelected();
				//addClass($('c_g_n_s_s_c_first'), 'unclickable');
			}
		} else if (command == 'reverse') {
			if (action == 'hover') { $('c_g_n_scroller_slideshow_title').innerHTML = 'wohsedilS tratS'; }
			else if (action == 'click') {
				slideshow_control('click', 'pause');
				slideshow_timer = setInterval(function() { slideshow_incrementTimer('reverse'); }, 200);
			}
		} else if (command == 'pause') {
			if (action == 'hover') { $('c_g_n_scroller_slideshow_title').innerHTML = 'Pause Slideshow'; }
			else if (action == 'click') {
				clearInterval(slideshow_timer);
			}
		} else if (command == 'play') {
			if (action == 'hover') { $('c_g_n_scroller_slideshow_title').innerHTML = 'Start Slideshow'; }
			else if (action == 'click') {
				slideshow_control('click', 'pause');
				slideshow_timer = setInterval(function() { slideshow_incrementTimer('forward'); }, 200);
			}
		} else if (command == 'last') {
			if (action == 'hover') { $('c_g_n_scroller_slideshow_title').innerHTML = 'Last Image'; }
			else if (action == 'click') {
				scroller_click(imageList.length - 1);
				scroller_centreSelected();
				//addClass($('c_g_n_s_s_c_first'), 'unclickable');
			}
		} else {
			if (action == 'hover') { $('c_g_n_scroller_slideshow_title').innerHTML = '<b>Slideshow Controls</b>'; }
		}
	}
}

function options_click() {
	if (options_expanded) {
		resize_start($('c_g_n_scroller_options_inner'), $('c_g_n_scroller_options').offsetWidth - options_contractedWidth, NO, NO, NO, 15, 1);
		options_expanded = false;
	} else {
		resize_start($('c_g_n_scroller_options_inner'), 0, NO, NO, NO, 15, 1);
		options_expanded = true;
	}
}
function options_select(set, func) {
	var value = eval('options_' + set + '[((getIndex(options_' + set + ', $(\'options_' + set + '\').innerHTML) + 1) % options_' + set + '.length)]');
	$('options_' + set).innerHTML = value;
	func(value);
}

function image_setImage() {
	replaceClass($('c_g_i_box'), 'on', 'off');
	replaceClass($('c_g_i_loading'), 'off', 'on');
	if (imageList[image_selected][IMAGE_TITLE] != '') {
		replaceClass($('c_g_i_title'), 'off', 'on');
		removeClass($('c_g_i_box'), 'notitle');
		removeClass($('c_g_i_loading'), 'notitle');
		$('c_g_i_title_title').innerHTML = imageList[image_selected][IMAGE_TITLE];
		if (imageList[image_selected][IMAGE_HEIGHT] > 0) {
			$('c_g_i_title_size').innerHTML = imageList[image_selected][IMAGE_HEIGHT] + 'cm x ' + imageList[image_selected][IMAGE_WIDTH] + 'cm' + ((imageList[image_selected][IMAGE_3D] != '')?' x ' + imageList[image_selected][IMAGE_3D]:'');
		} else {
			$('c_g_i_title_size').innerHTML = '';
		}
		$('c_g_i_title_medium').innerHTML = imageList[image_selected][IMAGE_MEDIUM] + ((imageList[image_selected][IMAGE_SOLD] == 1)?' <span style="color: #c00;">*</span>':'');
	} else {
		replaceClass($('c_g_i_title'), 'on', 'off');
		addClass($('c_g_i_box'), 'notitle');
		addClass($('c_g_i_loading'), 'notitle');
	}
	$('c_g_i_box_image').src = 'images/' + gallery_selected + '/' + category_selected + '/' + image_resolution + imageList[image_selected][IMAGE_ID] + '.jpg';
}
function image_setStyle(value) {
	if (imageList.length == 0) { return; }
	var image = imageList[((image_selected < 0)?0:image_selected)];
	if (value == 'Full Fit') {
		if ((image[IMAGE_PXWIDTH] / $('c_g_i_box').offsetWidth) > (image[IMAGE_PXHEIGHT] / $('c_g_i_box').offsetHeight)) {
			$('c_g_i_box_image').style.width = '100%';
			$('c_g_i_box_image').style.height = 'auto';
		} else {
			$('c_g_i_box_image').style.height = '100%';
			$('c_g_i_box_image').style.width = 'auto';
		}
		replaceClass($('c_g_i_box_image'), 'drag', 'fit');
	} else {
		if (value == 'Half Fit') {
			//if ((image[IMAGE_PXWIDTH] / $('c_g_i_box').offsetWidth) < (image[IMAGE_PXHEIGHT] / $('c_g_i_box').offsetHeight)) {
				$('c_g_i_box_image').style.width = '100%';
				$('c_g_i_box_image').style.height = 'auto';
				$('c_g_i_box_image').style.left = '0';
				$('c_g_i_box_image').style.top = '0';
			//} else {
			//	$('c_g_i_box_image').style.height = '100%';
			//	$('c_g_i_box_image').style.width = 'auto';
			//}	
		} else if (value == 'Actual Size') {
			$('c_g_i_box_image').style.width = image[IMAGE_PXWIDTH] + 'px';
			$('c_g_i_box_image').style.height = image[IMAGE_PXHEIGHT] + 'px';
			$('c_g_i_box_image').style.left = '0';
			$('c_g_i_box_image').style.top = '0';
			//$('c_g_i_box').style.left = '50%';
			//$('c_g_i_box').style.marginLeft = Math.floor(image[IMAGE_PXWIDTH] / -2) + 'px';
		}
		replaceClass($('c_g_i_box_image'), 'fit', 'drag');
	}
}
function image_setFullscreen() {
	if (image_fullscreen) {
		resize_start($('content_gallery_image'), NO, image_top, NO, NO, 1, 5);
		removeClass($('content_gallery_image'), 'fullscreen');
		image_fullscreen = false;
	} else {
		resize_start($('content_gallery_image'), NO, image_fullscreenTop, NO, NO, 1, 5);
		addClass($('content_gallery_image'), 'fullscreen');
		image_fullscreen = true;
	}
}
function image_setResolution() {
	image_resolution = ((image_resolution == 'small')?'large':'small');
	image_setImage();
}
function image_loaded() {
	replaceClass($('c_g_i_loading'), 'on', 'off');
	replaceClass($('c_g_i_box'), 'off', 'on');
	image_setStyle($('options_imageView').innerHTML);
}
function image_fail() {
	alert('Image failed to load.');
}

var menu_displayingIndex = true;
var menu_selected = '';
var menu_indexOpacity = 100;
var menu_indexTimer;

function menu_click(item) {
	if (menu_displayingIndex) {
		clearInterval(menu_indexTimer);
		menu_indexTimer = setInterval(function() { menu_fadeIndex('out'); }, 150);
		menu_displayingIndex = false;
		resize_start($('header'), NO, 0, NO, NO, 1, 10) 
	}
	if ((item == 'about') || (item == 'statement') || (item == 'sheeet') || (item == 'email') ||
					(item == 'links') || (item == 'poetry') || (item == 'songs')) {
		query_request('page', item, '');
	} else {
		query_request('gallery', item, 'latest');
	}
	if (menu_selected != '') { replaceClass($('menu_' + menu_selected), 'menu_selectedItem', 'menu_item'); }
	replaceClass($('menu_' + item), 'menu_item', 'menu_selectedItem');
	menu_selected = item;
}

function menu_fadeIndex(dir) {
	if (dir == 'out') {
		menu_indexOpacity -= 10;
		if (menu_indexOpacity <= 0) { menu_indexOpacity = 0; clearInterval(menu_indexTimer); replaceClass($('content_index'), 'on', 'off'); }
	} else {
		menu_indexOpacity += 10;
		if (menu_indexOpacity >= 100) { menu_indexOpacity = 100; clearInterval(menu_indexTimer); }
	}
	setOpacity($('content_index'), menu_indexOpacity);
}
var header_indexTop = 250;
function menu_returnToIndex() {
	replaceClass($('content_index'), 'off', 'on');
	replaceClass($('content_general'), 'on', 'off');
	replaceClass($('content_gallery'), 'on', 'off');
	if (menu_selected != '') { replaceClass($('menu_' + menu_selected), 'menu_selectedItem', 'menu_item'); }
	menu_selected = '';
	if (!menu_displayingIndex) {
		clearInterval(menu_indexTimer);
		menu_indexTimer = setInterval(function() { menu_fadeIndex('in'); }, 150);
		menu_displayingIndex = true;
		resize_start($('header'), NO, header_indexTop, NO, NO, 1, 10) 
	}
}

function tabs_click(item) {
	removeClass($('c_g_n_s_t_c_cat' + getIndex(imageCategories, category_selected)), 'selected');
	addClass($('c_g_n_s_t_c_cat' + getIndex(imageCategories, item)), 'selected');
	query_request('gallery', gallery_selected, item);
	category_selected = item;
}
function tabs_createCategories() {
	$('c_g_n_scroller_tabs_categories').innerHTML = '';
	for (var i = 0; i < imageCategories.length; i++) {
		$('c_g_n_scroller_tabs_categories').innerHTML += '<div id="c_g_n_s_t_c_cat' + i + '" class="category" '
				+ 'onclick="tabs_click(\'' + imageCategories[i] + '\');">' + imageCategories[i] + '</div>';
	}
}


function query_request(type, name, category) {
	popup_startLoading();
	if (type == 'gallery') {
		// clear any existing events
		for (var i = 0; i < imageList.length; i++) {
			if (imageInfo[i][ZOOM_TIMERID] != -1) {
				clearInterval(imageInfo[i][ZOOM_TIMERID]);
				imageInfo[i][ZOOM_TIMERID] = -1;
			}
			if (imageInfo[i][SLIDER_TIMERID] != -1) {
				clearInterval(imageInfo[i][SLIDER_TIMERID]);
				imageInfo[i][SLIDER_TIMERID] = -1;
			}
			if (imageInfo[i][FADER_TIMERID] != -1) {
				clearInterval(imageInfo[i][FADER_TIMERID]);
				imageInfo[i][FADER_TIMERID] = -1;
			}
		}
	}
	document.forms['queryForm'].type.value = type;
	document.forms['queryForm'].name.value = name;
	document.forms['queryForm'].category.value = category;
	document.forms['queryForm'].submit();
	document_setPage(name, category);
}
function query_sendEmail() {
	var name = $('email_to').value;
	var email = $('email_email').value;
	var subject = $('email_subject').value;
	if (name.length == 0) {
		alert('Name is a required field.');
		return -1;
	}
	if (subject.length == 0) {
		alert('Subject is a required field.');
		return -2;
	}
	if (email.length == 0) {
		alert('Your email address is required in case you need to be contacted.');
		return -3;
	}
	if (email.indexOf('@') == -1) {
		alert('A valid email address is required.');
		return -4;
	}
	query_request('action', 'sendemail', name + '||' + email + '||' + subject + '||' + $('email_message').value);
}

function query_submitComment(id) {
	var content = id + '||' + $('sheeet_c' + id + '_name').value + '||' + $('sheeet_c' + id + '_email').value + '||' + $('sheeet_c' + id + '_comment').value;
	query_request('action', 'addcomment', content);
}

function query_processResult() {
	if (menu_displayingIndex) { return; }

	var query = window.frames['query'].document.body.innerHTML;
	if (query == '') { alert('The server query returned no content.'); }
	var origQuery = query;
	var query = query.split('||');
	
	if (query[0] == 'page') {
		setClass($('content_general'), query[1]);
		$('content_general').innerHTML = query[2];
		replaceClass($('content_gallery'), 'on', 'off');
		replaceClass($('content_general'), 'off', 'on');
		popup_stopLoading();
		content_selected = '';
		if (query[1] == 'about') { content_select('about', 'about'); }
	} else if (query[0] == 'gallery') {
		eval(query[3]); // variable definitions
		if (query[2] == 'latest') { // must be changing from another gallery
			tabs_createCategories();
			addClass($('c_g_n_s_t_c_cat0'), 'selected');
			query[2] = imageCategories[0];
			category_selected = imageCategories[0];
			gallery_selected = query[1];
		}
		scroller_createImageList(query[1], query[2]);
		replaceClass($('content_general'), 'on', 'off');
		replaceClass($('content_gallery'), 'off', 'on');
	} else if (query[0] == 'action') {
		if (query[1] == 'sendemail') { $('content_general').innerHTML = query[2]; }
		if (query[1] == 'addcomment') { $('sheeet_c' + query[2]).innerHTML = '<span style="color: #ff0;">Your comment has been sent.</span>'; }
		popup_stopLoading();
	} else if (query[0] != 'start') { alert(origQuery); alert('The server query returned erroneous content.'); }
}


var loading = false;
function popup_startLoading() {
	loading = true;
	replaceClass($('popup_loading'), 'off', 'on');
}
function popup_stopLoading() {
	loading = false;
	replaceClass($('popup_loading'), 'on', 'off');
}
function popup_openImage(url) {
	$('popup_image_image').src = './images/blank.gif';
	$('popup_image_image').src = url;
	replaceClass($('popup_image'), 'off', 'on');
}
function popup_closeImage() {
	replaceClass($('popup_image'), 'on', 'off');
}
function popup_openDocument(url) {
	$('popup_document_frame_frame').src = './images/blank.gif';
	$('popup_document_frame_frame').src = url;
	replaceClass($('popup_document'), 'off', 'on');
}
function popup_downloadDocument(url) {
	$('popup_document_frame_frame').src = './download.php?file=' + url;
}
function popup_closeDocument() {
	replaceClass($('popup_document'), 'on', 'off');
}
function popup_openMessage(text) {
	$('popup_message_text').innerHTML = text;
	replaceClass($('popup_message'), 'off', 'on');
	$('popup_message').style.marginTop = (-1 * ($('popup_message').offsetHeight / 2)) + 'px';
}
function popup_closeMessage() {
	replaceClass($('popup_message'), 'on', 'off');
}
function popup_showOpenMessage(file) {
	popup_openMessage(
		'This feature is not supported by all browsers. It is fully compatible with Firefox/Adobe Reader.<br /><br />' +
		'<span class="link" onclick="popup_openDocument(\'' + file + '\'); popup_closeMessage();">View in Browser</span>&nbsp;&nbsp;&nbsp;' +
		'<span class="link" onclick="popup_showDownloadMessage(\'' + file + '\');">Download Instead</span><br /><br />' +
		'If the above does not work, click on the link below to open it in a new tab/window.<br /><br />' +
		'<a href="' + file + '" target="_blank">' + file + '</a>'
	);
}
function popup_showDownloadMessage(file) {
	popup_openMessage(
		'If the download does not start, right-click on the below link and select "Save Link As..." (or similar).<br /><br />' +
		'<a href="' + file + '" target="_blank">' + file + '</a>'
	);
	popup_downloadDocument(file);
}
function popup_showFirstTimeGalleryMessage() {
	popup_openMessage(
		'<b>Welcome to the gallery! Here are a few tips to help you navigate:</b><br />' +
		'The \'Viewing Options\' link contains various options to optimise viewing for your system. Click an option to change it.<ul>' +
		'<li>If you have an older computer that cannot process animations smoothly, you can turn this feature off.</li>' +
		'<li>If you have a small screen or want to get a closer look at Michael\'s work, change Image View to \'Half Fit\' or \'Actual Size\'. The default mode adjusts images to fit your browser window. In these alternate modes, you can drag the image around to view other parts of it.</li>' +
		'<li>If you have a fast connection, you may wish to view the full resolution image (unscaled). Do this by changing Resolution to \'High\'.</li></ul>' +
		'Double-clicking an image will trigger fullscreen mode, which provides a more intricate view, particularly when coupled with \'Image View\' set to \'Actual Size\'.'
	);
}
var content_selected = '';
function content_select(group, name) {
	if (content_selected != '') {
		replaceClass($(group + '_' + content_selected), 'on', 'off');
		removeClass($(group + '_' + content_selected + '_link'), 'selected');
	}
	content_selected = name;
	replaceClass($(group + '_' + name), 'off', 'on');
	addClass($(group + '_' + name + '_link'), 'selected');
}

function sheeet_addComment(id) {
	var cf  = 'Name/Username:<br />';
		cf += '<input id="sheeet_c' + id + '_name" type="text" size="45" /><br />';
		cf += 'Email Address (optional, will not be shown):<br />';
		cf += '<input id="sheeet_c' + id + '_email" type="text" size="45" /><br />';
		cf += 'Comment:<br />';
		cf += '<textarea id="sheeet_c' + id + '_comment" wrap="soft" rows="5" cols="34"></textarea><br />';
		cf += '<div class="textcenter" style="width: 70%;"><input type="button" value="Submit Comment" onclick="query_submitComment(' + id + ');" /></div>';
	$('sheeet_c' + id).innerHTML = cf;
}

function sheeet_iPostComment_load() {
/*
	var id = window.frames['iPostComment'].document.body.innerHTML;
	if (isNaN(id)) {
		alert(id);
	} else if (id != '') {
		document.getElementById('c'+id).innerHTML = '<span class="label">Your comment has been successfully posted.</span>';
	}
*/
}


//--------------------
var aph_currentImage = 1;
function aph_previousImage() {
	if (aph_currentImage > 1) {
		aph_currentImage--;
	}
	aph_setImage(aph_currentImage);
}

function aph_nextImage() {
	if (aph_currentImage < 5) {
		aph_currentImage++;
	}
	aph_setImage(aph_currentImage);
}

function aph_setImage(image) {
	for (var i = 1; i <= 5; i++) {
		if (i == image) {
			replaceClass($('aph_pv_' + i), 'off', 'on');
		} else {
			replaceClass($('aph_pv_' + i), 'on', 'off');
		}
		if (image == 1) { $('aph_pageName').innerHTML = 'Front Cover'; }
		else if (image == 2) { $('aph_pageName').innerHTML = 'Front Inner (1)'; }
		else if (image == 3) { $('aph_pageName').innerHTML = 'Front Inner (2)'; }
		else if (image == 4) { $('aph_pageName').innerHTML = 'Back Cover'; }
		else if (image == 5) { $('aph_pageName').innerHTML = 'Lyrics'; }
	}
}
