var flatArray = undefined;
var timerID = undefined;
var speed = 5000;
var speedID = '4';

function parseTibetan(hex) {
	var html = '';
	var array = new Array();
	array = hex.split(",");
	(array.length).times(function(i) {
		html += "&#" + parseInt(array[i],16) + ";";
	});
	return html;
}

function titleSpan(s) {
	return '<span title="' + s + '"><u>';
}

function wylieSpan(s) {
	return '<span class="wylie">' + s + '</span>';
}

function parsingSpan(s) {
	return '<span class="parsing">' + s + '</span>';
}

function glossaryParsing(wylie, parsing) {
	var wylieArray = wylie.split(" ");
	var result = '';

	for (var w = 0, p = 0; w < wylieArray.length && p < parsing.length; ++w, ++p) {
		if (w > 0)
			result += ' ';
		switch (parsing[p]) {
			case '2':
				result +=
					titleSpan(parsing[++p]) +
					wylieArray[w++] + ' ' + wylieArray[w] + '</u></span>';
				break;
			case '3':
				result +=
					titleSpan(parsing[++p]) +
					wylieArray[w++] + ' ' + wylieArray[w++] + ' ' + wylieArray[w] + '</u></span>';
				break;
			case '4':
				result +=
					titleSpan(parsing[++p]) +
					wylieArray[w++] + ' ' + wylieArray[w++] + ' ' + 
					wylieArray[w++] + ' ' + wylieArray[w] + '</u></span>';
				break;
			default:
				result += 
					titleSpan(parsing[p]) + wylieArray[w] + '</u></span>';
				break; 
		}
	}

	return result;
}

function vocabularyFlashcardParsing(wylie, parsing) {
	var wylieArray = wylie.split(" ");
	var result = '';

	for (var w = 0, p = 0; w < wylieArray.length && p < parsing.length; ++w, ++p) {
		if (w > 0)
			result += ' ';
		switch (parsing[p]) {
			case '2':
				result +=
					wylieSpan(wylieArray[w++] + ' ' + wylieArray[w]) + 
					'&nbsp;' + parsingSpan(parsing[++p]) + '<br/>';
				break;
			case '3':
				result +=
					wylieSpan(wylieArray[w++] + ' ' + wylieArray[w++] + ' ' + wylieArray[w]) +
					'&nbsp;' + parsingSpan(parsing[++p]) + '<br/>';
				break;
			case '4':
				result +=
					wylieSpan(
						wylieArray[w++] + ' ' + wylieArray[w++] + ' ' + 
						wylieArray[w++] + ' ' + wylieArray[w]) +
					'&nbsp;' + parsingSpan(parsing[++p]) + '<br/>';
				break;
			default:
				result += 
					wylieSpan(wylieArray[w]) +
					'&nbsp;' + parsingSpan(parsing[p]) + '<br/>';
				break; 
		}
	}

	return result;
}

function Entry(wylie, pronunciation, tibetan, english, parsing) {
	if (parsing === undefined) {
		this.wylie = wylie;
		this.pronunciation = pronunciation;
		this.tibetan = parseTibetan(tibetan);
		this.english = english;
		return;
	}

	if (page == 'glossary')
		this.wylie = glossaryParsing(wylie, parsing);
	else if (page == 'vocabularyFlashcards')
		this.wylie = vocabularyFlashcardParsing(wylie, parsing);
	else
		this.wylie = wylie;
	this.pronunciation = pronunciation;
	this.tibetan = parseTibetan(tibetan);
	this.english = english;
}

function LetterEntry(letter, tibetan, entries) {
	this.letter = letter;
	this.tibetan = parseTibetan(tibetan);
	this.entries = entries;
}

function FlatIndex(i, j) {
	this.i = i;
	this.j = j;
}

function flatten() {
	flatArray = new Array();
	(glossary.length).times(function(i) {
		var entries = glossary[i].entries;
		for (var j = 0; j < entries.length; ++j) {
			flatArray.push(new FlatIndex(i,j));
		}
	});
}

function glossaryButtons() {
	var table = $('buttons');
	var i = 0;
	var c = 0;
	var row = table.insertRow(0);
	var middle = 14;
	(glossary.length).times(function(i) {
		var letter = glossary[i].letter;
		var tibetan = glossary[i].tibetan;
		var cell = row.insertCell(c++);
		cell.innerHTML = 
			'<a href="javascript:showGlossaryEntry(' + i + ');">' + 
			'<span class="bigTib">' + tibetan + '</span>' +
			letter + '</a>';
		if (i == middle) {
			row = table.insertRow(1);
			c = 0;
		}
	});
	var cell = row.insertCell(c++);
	cell.innerHTML = 
		'<a href="javascript:window.location = ' + "'alphabetFlashcards.html'" + 
		';">Alphabet Flashcards</a><br/>' +	
		'<a href="javascript:window.location = ' + "'vocabularyFlashcards.html'" +
		';">Vocabulary Flashcards</a><br/>' +
		'<a href="javascript:aboutTibetanFonts(' + "'visible'" + ');">About Tibetan Fonts</a><br/>' +
		'<a href="javascript:window.location = ' + "'seedSyllables.html'" + 
		';">Seed Syllables</a><br/>';
}

function flashcardButtons() {
	var table = $('buttons');
	var row = table.insertRow(0);
	var cell = row.insertCell(0);
	cell.innerHTML = '<a href="javascript:gotoGlossary();";>Glossary</a>';
}

function showGlossaryEntry(i) {
	var table = $('glossary');
	var entries = glossary[i].entries;

	while (table.rows.length > 0)
		table.deleteRow(0);

	if (entries.length == 0) {
		var row = table.insertRow(0);
		var cell = row.insertCell(0);
		cell.innerHTML = 'No entries';
		cell.className = 'warning';
		return;
	}

	(entries.length).times(function(j) {
		var entry = entries[j];
		var row = table.insertRow(j);
		var cell = row.insertCell(0);
		cell.innerHTML = entry.wylie;
		cell.className = 'wylie';
		cell = row.insertCell(1);
		cell.innerHTML = entry.pronunciation;
		cell = row.insertCell(2);
		cell.innerHTML = entry.tibetan;
		cell.className = 'tib';
		cell = row.insertCell(3);
		cell.innerHTML = entry.english;
	});
}

function initGlossary() {
	glossaryButtons();
	showGlossaryEntry(0);
}

function showAlphabetFlashcard() {
	var i = Math.floor(glossary.length * Math.random());
	$('letter').innerHTML = glossary[i].letter;
	$('tibetan').innerHTML = glossary[i].tibetan;
	
	if (speedID)
		timerID = setTimeout('showAlphabetFlashcard()', speed);
}

function manual() {
	if (timerID !== undefined) {
		clearTimeout(timerID);
		timerID = undefined;
	}
	if (speedID !== undefined) {
		$(speedID).src = 'box.gif';
		speedID = undefined;
	}
}

function flashAlphabetManual() {
	manual();
	showAlphabetFlashcard();
}

function flashVocabularyManual() {
	manual();
	showVocabularyFlashcard();
}

function showVocabularyFlashcard() {
	var index = Math.floor(flatArray.length * Math.random());
	var i = flatArray[index].i;
	var j = flatArray[index].j;
	var entry = glossary[i].entries[j];
	$('wylie').innerHTML = entry.wylie;
	$('tibetan').innerHTML = entry.tibetan;
	$('pronounciation').innerHTML = entry.pronunciation;
	$('english').innerHTML = entry.english;
	
	if (speedID)
		timerID = setTimeout('showVocabularyFlashcard()', speed);
}

function gotoGlossary() {
	if (timerID !== undefined)
		clearTimeout(timerID);
	window.location = 'glossary.html';
}

function setSpeed(id, s, func) {
	if (speedID !== undefined)
		$(speedID).src = 'box.gif';
	$(speedID = id).src = 'bigBox.gif';
	speed = s;
	if (timerID !== undefined)
		clearTimeout(timerID);
	func();
}

function initAlphabetFlashcard() {
	flashcardButtons();
	speedID = 4;
	showAlphabetFlashcard();
}

function initVocabularyFlashcard() {
	flashcardButtons();
	flatten();
	speedID = 4;
	showVocabularyFlashcard();
}

function aboutTibetanFonts(visible) {
	$('aboutTibetanFonts').style.visibility = visible;
}

