// JavaScript Document
var imgs,  orientationHTML, isZoomable,isZoomedIn = false;
var orientDiv, descrDiv, pageDescrDiv, navDiv, contDiv;
var constPageDescription, pageDescriptions = new Array();
var curImgIdx, nrows, ncols = 5; // number of thumbnail columns
var extensions = ["jpg", "png", "gif"]; // permissible image file extensions 
// Thumbnail Index:
function showIndex() {
	pageDescrDiv.style.display = "none";
	descrDiv.style.display = "block";
	orientDiv.innerHTML = orientationHTML;
	navDiv.innerHTML = "";
	contDiv.innerHTML = getThumbs();
}
function getThumbs() {
	var html = new Array();
	for (var i = 0; i < imgs.length; i++)
		html[html.length] = getThumb(i);
	return "\n"+html.join("\n")+"\n";
}
function getThumb(i) {
	if (i < imgs.length)
		return "<a href='javascript: showImage(\""+imgs[i]+"\");'><img src='thumbnails/"+imgs[i]+"' /></a>";
	else
		return "";
}
// Image page:
function showImage(fileName) {
	curImgIdx = imgs.getIndex(fileName);
	if (pageDescriptions.length > 0) 
		if (pageDescriptions[curImgIdx])
			pageDescrDiv.innerHTML = pageDescriptions[curImgIdx];
		else 
			pageDescrDiv.innerHTML = constPageDescription;
	pageDescrDiv.style.display = "block";
	descrDiv.style.display = "none";
	contDiv.innerHTML = getImgTable();
	navDiv.innerHTML = getNav();
	orientDiv.innerHTML = orientationHTML + " / " + imgs[curImgIdx];
}
function getImgTable() {
	var dir = isZoomedIn ? "zoom" : "images";
	return "<table><td>"+getWikiButton(curImgIdx)+"<br /><a href='javascript: zoom();'><img src='"+dir+"/"+imgs[curImgIdx]+"' /></a></table>";
}
function zoom() {
	isZoomedIn = !isZoomedIn;
	showImage(imgs[curImgIdx]);
}
// Navigation:
function getNav() {
	var html = "";
	if (curImgIdx > 0)
		html += "<a href='javascript: prevImage();'>Previous</a>, ";
	if (curImgIdx < imgs.length - 1)
		html += " <a href='javascript: nextImage();'>Next, </a>";
	if (isZoomable)
		html += "<a href='javascript: zoom();'>Zoom "+(isZoomedIn ? "Out" : "In")+"</a> or ";
	html += "return to <a href='javascript: showIndex();'>Thumbnails</a>";
	return html;
}
function nextImage() {
	showImage(imgs[curImgIdx >= imgs.length - 1 ? 0 : curImgIdx + 1]);
}
function prevImage() {
	showImage(imgs[curImgIdx == 0 ? imgs.length - 1 : curImgIdx - 1]);
}
function getWikiButton(i) {
	return "<a href='javascript: goToWiki("+i+");'><img class='WikiButton' src='http://milos-and-slavica.net/pages/wiki-button.jpg' /></a>";
}
function goToWiki(i) {
	var pageScanName = imgs[i].substring(0, imgs[i].indexOf("."));
	var a = orientationHTML.split(" / ");
	var chapter = a[a.length - 1].split(" ").join("");
	document.location.href = "http://milos-and-slavica.net/wiki/"+chapter+"/"+pageScanName;
}
// Initialise:
function init() {
	imgs = filterFileTypes(thumbnailsScan, extensions);
	isZoomable = dirScan.contains("zoom");
	nrows = Math.ceil(imgs.length / ncols);
	orientDiv = document.getElementById("orientDiv");
	descrDiv = document.getElementById("descrDiv");
	pageDescrDiv = document.getElementById("pageDescrDiv");
	navDiv = document.getElementById("navDiv");
	contDiv = document.getElementById("contDiv");
	orientationHTML = orientDiv.innerHTML;
	getPageDescriptions();
	showIndex();
}
function getPageDescriptions() {
	var a = new Array();
	var s = pageDescrDiv.innerHTML;
	var re = /<p>(.*)<\/p>/gi;
	while(re.exec(s)){
		a[a.length] = RegExp.$1;
	}
	if(a.length == 0) return;
	constPageDescription = a[0];
	pageDescrDiv.innerHTML = constPageDescription;
	var fileNames, idx, a2;
	for (var i=1; i<a.length; i++) {
		if(!a[i].contains("==")) continue;
		a2 = a[i].split("==");
		fileNames = a2[0].split(",");
		for (var j=0; j<fileNames.length; j++) {
			idx = imgs.getIndex(fileNames[j]);
			pageDescriptions[idx] = a2[1];
		}
	}
}
function filterFileTypes(fileNames, extensions) {
	var a = new Array();
	for (var i = 0; i < fileNames.length; i++) {
		var name = fileNames[i];
		var idx = name.lastIndexOf(".");
		if (idx == -1 || idx == name.length - 1)
			continue;
		var ext = name.substring(idx+1);
		if (extensions.contains(ext))
			a[a.length] = name;
	}
	return a;
}
Array.prototype.contains = function (val) {
	for (var i = 0; i < this.length; i++) 
		if (this[i] == val)
			return true;
	return false;
}
Array.prototype.getIndex = function (e) {
	for (var i = 0; i < this.length; i++) 
		if (this[i] == e) 
			return i;
	return -1;
}
String.prototype.contains = function (s) {
	if (this.indexOf(s) == -1)
		return false;
	else 
		return true;
}

