var galleryId = '';
var galleryData = {};
var galleryMenus = {};
var galleryImages = [];
var galleryImagesIdx = 0;

function openDiv(ele) {
	var open = 'gallery-best-show';
	var list = document.getElementById('page-gallery');
	var j = getElementsByClassName('content');
	for (var x=0; x<j.length && j!=ele; x++) {
		j[x].style.display = 'none';
	}
	document.getElementById(ele).style.display = 'block';
	open = ele;
}

function highlightButton(idx) {
	var j = getElementsByClassName('link-');
	for (var x=0; x<j.length; x++) {
		if (j[x].className.substring(0,6) == 'link-' + idx) {
			j[x].className = j[x].className.replace('-off','-on');
		} else {
			j[x].className = j[x].className.replace('-on','-off');
		}
	}
}

function loadGallery(input) {
	if (!galleries || (galleries.length < 1)) {
		return false; // vars not loaded yet
	}
	
	// validate input/hash to determine current gallery
	if (input) {
		currentGallery = input;
	} else if (document.location.hash) {
		var hash = document.location.hash.substring(1);
		if (hash in idxFromGallery) {
			currentGallery = hash;
		}
	}
	galleryId = currentGallery.replace('nav-', '');
	
	// load gallery data using AJAX
	var myAjax = new TOOLSCONTEXT_Ajax();
	var textResult = myAjax.sendParams('../../local/public/gallery.php', 'gallery='+galleryId, 'text', true, 'finishLoadGallery');
}

function finishLoadGallery (textResult) {
	if (textResult.indexOf('{') != 0) {
		// problem loading data
		alert('Could not load gallery data!');
		return false;
	} else {
		galleryData = eval("(" + textResult + ")");
	}
	
	generateGalleryMenus(); // fills in select menus, also updates content
	highlightButton(idxFromGallery[currentGallery]);
	openDiv(galleryId);
}

function generateGalleryMenus() {
	galleryMenus = {};
	galleryMenus['main'] = {"type": galleryData.subcatType, "menu": []};
	if (galleryData['subcatsAreImages'] == 1) {
		for (var i=0; i<galleryData.images.length; i++) {
			galleryMenus['main']['menu'][i] = galleryData.images[i].title;
		}
	} else {
		var j = 0;
		for (var i in galleryData.subcats) {
			galleryMenus['main']['menu'][j] = i;
			j++;
			
			if (galleryData.subcats[i].subcatType) {
				galleryMenus[i] = {"type": galleryData.subcats[i].subcatType, "menu": []};
				if ((galleryData.subcats[i].subcatsAreImages == 1) && galleryData.subcats[i].subcatType) {
					for (var k=0; k<galleryData.subcats[i].images.length; k++) {
						galleryMenus[i]['menu'][k] = galleryData.subcats[i].images[k].title;
					}
				} else {
					var m = 0;
					for (var n in galleryData.subcats[i].subcats) {
						galleryMenus[i]['menu'][m] = n;
						m++;
					}
				}
			}
		}
	}
	
	var idx = 0;
	updateMainMenu(galleryId + '_menu', idx);
}

function galleryMenuSelect (menu) {
	updateMainMenu (menu.id, menu.selectedIndex);
}
function gallerySubmenuSelect (menu) {
	updateMenu (menu.id, menu.selectedIndex, menu.name);
}

function updateMainMenu (id, idx, gotoLastImage) {
	var menu = updateMenu(id, idx, 'main');
	var submenu = document.getElementById(galleryId + '_submenu');
	var capDiv = document.getElementById(galleryId + '_caption');
	var menuEl = document.getElementById(galleryId + '_menu');
	
	// check for submenu
	if (galleryMenus[menu]) {
		// update submenu, pick first choice
		if (submenu) {
			submenu.style.display = 'block';
			capDiv.className = 'caption';
		}
		id = id.replace('_menu', '_submenu');
		idx = 0;
		if (gotoLastImage) idx = -1;
		updateMenu(id, idx, menu);
	} else {
		// no submenu - go ahead and load content
		// disable submenu if it is in the document
		if (submenu) {
			submenu.style.display = 'none';
			capDiv.className = 'caption caption-alt';
		}
		// if only one choice in main menu, hide
		if (menuEl.options.length <= 1) {
			menuEl.style.display = 'none';
			capDiv.className = 'caption caption-alt';
		} else {
			menuEl.style.display = 'block';
		}
		var idx = 0;
		if (gotoLastImage) idx = -1;
		loadContent(false, idx);
	}
}

function updateMenu (id, idx, menuName, gotoLastImage) {
	var sel = document.getElementById(id);
	if (!sel) {
		return '';
	}
	sel.options.length = 0;
	if (idx == -1) {
		idx = galleryMenus[menuName].menu.length - 1;
	}
	for (var i=0; i<galleryMenus[menuName].menu.length; i++) {
		var text = galleryMenus[menuName].menu[i];
		var menuVal = text;
		if (i == idx) {
			var menu = menuVal;
			switch (galleryMenus[menuName].type) {
				case 'Rank':
					text = galleryMenus[menuName].type + ': ' + text;
					break;
				case '':
					text = 'Selected: ' + galleryMenus[menuName].type + ' ' + text;
					break;
				default:
					text = 'Selected ' + galleryMenus[menuName].type + ': ' + text;
			}
		}
		sel.options[i] = new Option(text, menuVal);
	}
	sel.selectedIndex = idx;
	if (menuName != 'main') {
		sel.name = menuName;
		// load content based on menu selections
		var idx = 0;
		if (gotoLastImage) idx = -1;
		loadContent(false, idx);
	}
	return menu;
}

function loadContent (skipLoadImages, loadImageIdx) {
	if (!skipLoadImages) {
		var menuId = galleryId + '_menu';
		var sel = document.getElementById(menuId);
		if (sel) {
			var selVal = sel.options[sel.selectedIndex].value;
			if (galleryMenus[selVal]) { // check for submenu
				var submenuId = galleryId + '_submenu';
				var subsel = document.getElementById(submenuId);
				if (subsel) {
					var subselVal = subsel.options[subsel.selectedIndex].value;
					loadImages(selVal, subselVal);
				}
			} else { // just one menu's value to interpret
				loadImages(selVal);
			}
		} else { // no selection menus
			loadImages(false);
		}
	}
	
	// update gallery images index
	if (loadImageIdx == -1) {
		galleryImagesIdx = galleryImages.length - 1;
	} else if (loadImageIdx) {
		galleryImagesIdx = loadImageIdx;
	}
		
	// load content text into document
	var titleEl = document.getElementById(galleryId + '_title');
	var textEl = document.getElementById(galleryId + '_text');
	var img = galleryImages[galleryImagesIdx];
	switch (galleryId) {
		case 'gallery-winners':
		case 'gallery-best-show':
		case 'gallery-review':
			titleEl.innerHTML = img.parentTitle;
			// load text with labels - same for best-show/winners
			var text = '';
			for (var i in img.text) {
				if (img.text[i]) text += '<p><strong>' + i + ':<\/strong> ' + img.text[i] + '<\/p>';
			}
			textEl.innerHTML = text;
			break;
		case 'gallery-concept':
			titleEl.innerHTML = img.title;
			var contentEl = document.getElementById(galleryId + '_content');
			contentEl.innerHTML = img.text.Description;
			break;
	}
	
	// hide image frame div, show loading div
	hideImageLayer();
	
	// load new image using setTimeout so that content div can show during loading
	setTimeout("showImage()", 10);
}

function showImage () {
	var imgData = galleryImages[galleryImagesIdx];
	var loadTmp = new Image();
	loadTmp.onload = showImageLayer;
	loadTmp.src = imgData.image;

	document.getElementById(galleryId + '_image').src = imgData.image;
	document.getElementById(galleryId + '_link').href = imgData.enlarge;
	document.getElementById(galleryId + '_enlarge').href = imgData.enlarge;
}

function showImageLayer () {
	document.getElementById(galleryId + '_frame').style.display = 'block';
	document.getElementById(galleryId + '_loading').style.display = 'none';
}

function hideImageLayer () {
	document.getElementById(galleryId + '_frame').style.display = 'none';
	document.getElementById(galleryId + '_loading').style.display = 'block';
}

function loadImages (lev1, lev2) {
	// check galleryData array to find the proper images to load

	// init
	galleryImages = [];
	galleryImagesIdx = 0;

	if (lev1) {
		if (galleryData.subcatsAreImages) {
			// find matching image
			for (var i in galleryData.images) {
				if (galleryData.images[i].title == lev1) {
					galleryImages = [galleryData.images[i]];
					return true;
				}
			}
		} else {
			var imgs = galleryData.subcats[lev1];
			if (imgs.subcatsAreImages) {
				if (lev2) { 
					// search for image that matches 2nd menu selection
					// return array containing that image
					for (var i in imgs.images) {
						if (imgs.images[i].title == lev2) {
							galleryImages = [imgs.images[i]];
							return true;
						}
					}
				} else {
					// return all images
					galleryImages = imgs.images;
					return true;
				}
			} else {
				// look at second-level categories
				if (lev2) {
					// get matching subcat
					imgs = imgs.subcats[lev2];
				} else {
					// get first subcat
					for (var i in imgs.subcats) {
						imgs = imgs.subcats[i];
						break;
					}
				}
				galleryImages = imgs.images;
				return true;
			}
		}
	} else {
		galleryImages = galleryData.images;
		return true;
	}
}

function nextImg() {
	if (galleryImagesIdx < galleryImages.length - 1) {
		galleryImagesIdx++;
		loadContent(true);
	} else {
		// switch to next gallery
		nextGallery();
	}
}

function nextGallery() {
	var menu = document.getElementById(galleryId + '_menu');
	var submenu = document.getElementById(galleryId + '_submenu');
	if (submenu && submenu.style.display != 'none') {
		if (submenu.selectedIndex < submenu.options.length - 1) {
			// go to next gallery in submenu
			updateMenu(submenu.id, submenu.selectedIndex + 1, submenu.name);
			return true;
		}
	}
	
	if (menu) {
		// try going to next gallery in main menu - triggered if submenu fails to increment, or doesn't exist
		if (menu.selectedIndex < menu.options.length - 1) {
			updateMainMenu(menu.id, menu.selectedIndex + 1);
			return true;
		} 
	}
		
	// no more images! wrap around
	updateMainMenu(galleryId + '_menu', 0);
	return true;
}

function prevImg() {
	if (galleryImagesIdx > 0) {
		galleryImagesIdx--;
		loadContent(true);
	} else {
		// switch to previous gallery
		prevGallery();
	}
}

function prevGallery() {
	var menu = document.getElementById(galleryId + '_menu');
	var submenu = document.getElementById(galleryId + '_submenu');
	if (submenu && submenu.style.display != 'none') {
		if (submenu.selectedIndex > 0) {
			// go to prev gallery in submenu
			updateMenu(submenu.id, submenu.selectedIndex - 1, submenu.name, true);
			return true;
		}
	}
	
	if (menu) {
		// try going to prev gallery in main menu - triggered if submenu fails to load new gallery, or doesn't exist
		if (menu.selectedIndex > 0) {
			updateMainMenu(menu.id, menu.selectedIndex - 1, true);
			return true;
		}
	} 
	
	// no more images! wrap around
	// get idx of last menu (may be zero)
	var idx = galleryMenus.main.menu.length - 1;
	updateMainMenu(galleryId + '_menu', idx, true);
	return true;
}
