var historyData = [];
var scrollFx;
var constantScrollFx;
var screenFx;
var imgPreload = [];
var scrollSpeeds = {"slowBack": -1, "slowNext": 1, "fastBack": -10, "fastNext": 10};
var scrollSpeed = 0;
var scrollBackOver = false;
var scrollNextOver = false;
var scrollDown = false;
var scrolling = false;
var scrollingMax = 0;

function scrollBack() {
	if (scrollIdx > 0) {
		scrollTo(scrollIdx - 2);
	}
	return false;
}

function scrollNext() {
	if (scrollIdx < scrollMaxIdx) {
		scrollTo(scrollIdx + 2);
	}
	return false;
}

function scrollTo(idx) {
	if (!scrollFx) {
		setTimeout('scrollTo('+idx+')', 1000);
		return false;
	}
	
	scrollIdx = Math.max(0, Math.min(idx, scrollMaxIdx));
	
	var year = historyIdx.numToYear[scrollIdx];
	var tbl = document.getElementById("years");
	var menu = document.getElementById("menuDiv");
	var cell = document.getElementById("year_" + year);
	var posleft = 0 - Math.min(cell.offsetLeft, tbl.offsetWidth - menu.offsetWidth);
	
	var yearsEl = document.getElementById('years');
	scrollFx.start(yearsEl.offsetLeft, posleft);
}

function constantScroll() {
	var years = document.getElementById("years");
	var posleft = Math.min(0, Math.max(years.offsetLeft - scrollSpeed, scrollingMax));
	
	constantScrollFx.set(posleft);
	
	if (scrolling) {
		setTimeout('constantScroll()', 60);
	}
}
function startScroll() {
	var tbl = document.getElementById("years");
	var menu = document.getElementById("menuDiv");
	scrollingMax = 0 - (tbl.offsetWidth - menu.offsetWidth);

	scrolling = true;
	constantScroll();
}
function stopScroll() {
	scrolling = false;
}

function mouseOverBack() {
	scrollBackOver = true;
	if (!scrollDown) {
		scrollSpeed = scrollSpeeds.slowBack;
		startScroll();
	}
}
function mouseOverNext() {
	scrollNextOver = true;
	if (!scrollDown) {
		scrollSpeed = scrollSpeeds.slowNext;
		startScroll();
	}
}
function mouseOutBack() {
	scrollBackOver = false;
	scrollDown = false; // cancel mousedown scrolling as well
	stopScroll();
}
function mouseOutNext() {
	scrollNextOver = false;
	scrollDown = false; // cancel mousedown scrolling as well
	stopScroll();
}
function mouseDownBack() {
	scrollDown = true;
	scrollSpeed = scrollSpeeds.fastBack;
	return false;
}
function mouseDownNext() {
	scrollDown = true;
	scrollSpeed = scrollSpeeds.fastNext;
	return false;
}
function mouseUpBack() {
	scrollDown = false;
	if (scrollBackOver) {
		mouseOverBack();
	} else if (scrollNextOver) {
		mouseOverNext();
	} else {
		stopScroll();
	}
	return false;
}
function mouseUpNext() {
	scrollDown = false;
	if (scrollBackOver) {
		mouseOverBack();
	} else if (scrollNextOver) {
		mouseOverNext();
	} else {
		stopScroll();
	}
	return false;
}
function preventClick() {
	return false;
}

function setupFx () {
	scrollFx = new Fx.Style('years', 'left');
	constantScrollFx = new Fx.Style('years', 'left');
	screenFx = new Fx.Styles('content-screen');
	var backArrow = document.getElementById('scrollLeft');
	var nextArrow = document.getElementById('scrollRight');
	
	backArrow.onmouseover = mouseOverBack;
	backArrow.onmouseout = mouseOutBack;
	backArrow.onmousedown = mouseDownBack;
	backArrow.onmouseup = mouseUpBack;
	backArrow.onclick = preventClick;
	
	nextArrow.onmouseover = mouseOverNext;
	nextArrow.onmouseout = mouseOutNext;
	nextArrow.onmousedown = mouseDownNext;
	nextArrow.onmouseup = mouseUpNext;
	nextArrow.onclick = preventClick;

}

function nextYear() {
	if (curIdx < maxIdx) {
		var myYear = historyIdx.numToYear[curIdx + 1];
		loadYear(myYear);
	}
	return false;
}

function loadYear (year) {
	// check anchor (hash)
	if (!year) {
		if (document.location.hash) {
			var hash = document.location.hash.substring(1);
			if (hash in historyIdx.yearToNum) {
				year = hash;
			}
		}
	}
	// check if we got one
	if (!year) {
		// default to first one
		year = historyIdx.numToYear[0];
	}
	
	curYear = year;
	curIdx = historyIdx.yearToNum[year];
	highlightYear(year);
	var curId = historyIdx.yearToId[year];
	
	// hide content
	hideContent();
	
	// get data if not in cache
	if (!historyData[curId]) {
		// load data using ajax
		var myAjax = new TOOLSCONTEXT_Ajax();
		var textResult = myAjax.sendParams('../../local/public/history.php', 'Id='+curId, 'text', false);
		if (textResult.indexOf('{') != 0) {
			alert('Could not load history data!');
			return false;
		} else {
			historyData[curId] = eval("(" + textResult + ")");
		}
	}
	
	// load data into content areas
	var el = document.getElementById('heading');
	el.innerHTML = historyData[curId].Heading;
	var descEl = document.getElementById('description-text');
	descEl.innerHTML = historyData[curId].Content;
	var capEl = document.getElementById('captionDiv');
	if (historyData[curId].Caption) {
		var el = document.getElementById('caption');
		el.innerHTML = historyData[curId].Caption;
		capEl.style.display = 'block';
	} else {
		capEl.style.display = 'none';
	}
	// preload image
	var loadTmp = new Image();
	loadTmp.src = historyData[curId].Photo;
	imgPreload.push(loadTmp);
	var img = document.getElementById('photo');
	img.src = historyData[curId].Photo;
	var height = historyData[curId].PhotoHeight + 30;
	
	// show content
	setTimeout('showContent('+height+')', 500);
	
	//alert(historyIdx.yearToId[year] + ' ' + curIdx + ' ' + curYear);
	return false;
}

function hideContent () {
	var contentEl = document.getElementById('main-content');
	var loadingEl = document.getElementById('loading');
	var boxEl = document.getElementById('history-box');
	
	// this is only necessary the first time
	if (contentEl.style.display == 'none') return false;
	
	var h = Math.max(contentEl.offsetHeight, loadingEl.offsetHeight);
	loadingEl.style.height = h + 'px';
	boxEl.style.height = h + 'px';

	contentEl.style.display = 'none';
	loadingEl.style.display = 'block';	
}

function showContent (height) {
	var contentEl = document.getElementById('main-content');
	var loadingEl = document.getElementById('loading');
	var boxEl = document.getElementById('history-box');
	var screenEl = document.getElementById('content-screen');

	if (!screenFx) {
		setTimeout('hideContent()', 1000);
		return false;
	}
	
	contentEl.style.display = 'block';
	var h = Math.max(height, Math.max(contentEl.offsetHeight, loadingEl.offsetHeight));
	boxEl.style.height = h + 'px';
	screenEl.style.height = h + 'px';
	screenEl.style.top = '0px';
	loadingEl.style.display = 'none';
	screenFx.start({'height':[0],'top':[h]});
}

function highlightYear (year) {
	var j = getElementsByClassName('year-');
	for (var x=0; x<j.length; x++) {
		if (j[x].id == 'link_' + year) {
			j[x].className = j[x].className.replace('-off','-on');
		} else {
			j[x].className = j[x].className.replace('-on','-off');
		}
	}
	scrollTo(historyIdx.yearToNum[year] - 3);
}
