// 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 = getThumbTable();
}
function getThumbTable() {
	var html = new Array("<table>");
	for (var i = 0, r = 0; r < nrows; r++) {
		html[html.length] = "<tr>";
		for (var c = 0; c < ncols; c++, i++)
			html[html.length] = "<td>"+getThumb(i);
	}
	html[html.length] = "</table>";
	return "\n"+html.join("\n")+"\n";
}
function getThumb(i) {
	if (i < imgs.length)
		return getWikiButton(i)+"<br /><a href='javascript: showImage("+i+");'><img src='thumbnails/"+imgs[i]+"' /></a>";
	else
		return "";
}
// Image page:
function showImage(i) {
	curImgIdx = i;
	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(curImgIdx);
}
// Navigation:
function getNav() {
	var html = "";
	if (curImgIdx > 0)
		html += "<a href='javascript: prevImage();'>Previous</a> ";
	html += "<span style='font-size: 10px'>(";
	if (isZoomable)
		html += "<a href='javascript: zoom();'>Zoom "+(isZoomedIn ? "Out" : "In")+"</a> or ";
	html += "return to <a href='javascript: showIndex();'>Thumbnails</a>)</span>";
	if (curImgIdx < imgs.length - 1)
		html += " <a href='javascript: nextImage();'>Next</a>";
	return html;
}
function nextImage() {
	showImage(curImgIdx >= imgs.length - 1 ? 0 : curImgIdx + 1);
}
function prevImage() {
	showImage(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 s = pageDescrDiv.innerHTML;
	if(!s.contains("<p>"))
		return;
	var a = s.replace(/<p>/g,"").split("</p>");
	constPageDescription = a[0];
	pageDescrDiv.innerHTML = constPageDescription;
	var idxs, idx, a2;
	for (var i=1; i<a.length; i++) {
		a2 = a[i].split("=");
		idxs = a2[0].split(",");
		for (var j=0; j<idxs.length; j++) {
			idx = parseInt(idxs[j]);
			for (var k=0; k<imgs.length; k++)
				if (imgs[k].split(".")[0] == idx) 
					pageDescriptions[k] = 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;
}
String.prototype.contains = function (s) {
	if (this.indexOf(s) == -1)
		return false;
	else 
		return true;
}
