// Copyright 2003-2010 Richard W. Adams

var backWord;
var homeWord;
var languageCode;
var pageMidiFile;
var nextPage;
var nextWord;
var prevPage;
var root;
var scoreWord;
var midiWord;

var tipBio					= "See biography (in English)";
var tipMidi		 			= "Open MIDI file";
var tipScore	 			= "Open score file (";
var openQuote  				= "&ldquo;";
var closeQuote 				= "&rdquo;";
var translatedBy 			= null;
var translatorNamePosition	= "after";
var translatorUnknownText	= null;

//------------------------------------------------
// PURPOSE Draw navigational arrows to home, previous & next pages
// ENTRY	Init() has been called

function arrows() {
	if (nextPage != ' .htm') {
		write('<p class="navigation"><a href="' + prevPage + '"><img src="' + root + '/img/a/ar-left.gif" border="0" title=" ' + backWord + ' " width="30" height="30"></a> ');
		write('<a href="' + root + 'index.htm#lk"><img src="' + root + 'img/a/ar-toc.gif" border="0" title=" ' + homeWord + ' " width="30" height="30" /></a>');
		write(' <a href="' + nextPage + '"><img src="' + root + '/img/a/ar-right.gif" border="0" title=" ' + nextWord + ' " width="30" height="30"></a></p>');
	}
}
//------------------------------------------------ 
// PURPOSE		Draw link to a biography page 
// ENTRY			Init() has been called 
// ARGUMENTS	text  Link text to display 
//					file  Biography file page (without extension, which must be .htm) 

function bio(text, file, language) { 
	write('<a');
	if (language != null) {
		write(' lang=' + language);
	}
	write(' hreflang="en-us" href="' + root + 'bio/' + file + '.htm" onMouseOver="return stat(\'' + tipBio + '\')" onMouseOut="return erase()" hreflang="en-us">' + text + '</a>');
} 
//------------------------------------------------
function checkFrame()
{
	var currentPage = new String(location);
	var index = currentPage.lastIndexOf("/");
	if (index != -1) {
		currentPage = currentPage.substring(++index);
	}
	par = new String(window.parent.location);
	if (par.indexOf("foreign.htm") == -1) {
		if (languageCode == null || languageCode == "") {
			error("Language code undefined");
			location = "../../index.htm";
		}		
		var newLocation = "../foreign.htm?" + languageCode + "/" + currentPage;
		location = newLocation ;
	}
}
//------------------------------------------------
// PURPOSE Draw end of the page
// ENTRY	Init() has been called

function end() {
	arrows();
	write('<p class="footer">' + document.lastModified + '</p>');
}
//------------------------------------------------
// PURPOSE Draw link to English translation

function english(file, linktext) {
	if (argsOk(arguments.callee, true, false))
	  write('<a href="' + root + "htm/" + file + '.htm" + title="English" hreflang="en-us" target="_self">' + linktext + '</a>')
}
//------------------------------------------------
function init
// PURPOSE		Page initialization
(
	level		, 	// Number of levels below site root
	midi		, 	// MIDI file name (without extension, which must be .mid)
	prev		, 	// Previous page's URL (without extension, which must be .htm)
	next		, 	// Next page's URL (without extension, which must be .htm)
	back		,	// Translation of "Back"
	home		, 	// Translation of "Home"
	forward	,	// Translation of "Next",
	score		, 	// Translation of "Score"
	midiWd	,	// Translation of "MIDI"
	midiTip	,	// Translation of "Open MIDI file"
	scoreTip		// Translation of "Open score file (Noteworthy Composer format)"
){
	if (argsOk(arguments.callee, false, true)) {
		checkFrame();
		backWord = back.length	> 0 ? back  : "Back";
		homeWord = home.length	> 0 ? home  : "Home";
		nextWord = forward.length > 0 ? forward : "Next";
		scoreWord = score.length  > 0 ? score  : "score";
		midiWord = (midiWd && midiWd.length > 0) ? midiWd : "MI&shy;DI";
		if (midiTip)
			tipMidi  = midiTip;
		if (scoreTip)
			tipScore = scoreTip;
		root = "";
	  	for (i = 0; i < level; ++i) {
	  		root += "../";
	  	}
		pageMidiFile = root + "mid/" + midi + ".mid";
		prevPage = prev + ".htm";
		nextPage = next + ".htm";
		write('<link href="' + root + 'sty/tch-foreign.css" rel="stylesheet" type="text/css" />');
		write('<bgsound src="' + pageMidiFile + '" loop="infinite">');
		delay = location.search.toString();
		if (delay != "") {
			delay = delay.substring(1, delay.length);
			write('<meta http-equiv="refresh" content="' + delay + ';url=' + nextPage + '?' + delay + '">');
		}
	}
}
//------------------------------------------------
function tellUsIfYouKnowTheTranslator() {
	if (ifYouKnowTheTranslator  == null)
		error("Variable ifYouKnowTheTranslator  not set!");
	else
		write(ifYouKnowTheTranslator);
}
//------------------------------------------------
function insertMusicLinks(
	midi			,	// Full MIDI file name, including extension
	scoreBase		,	// Score file name, down from score directory (no extension)
	scoreExtension	,	// Extension of score file name (must be same as score directory name)
	scoreType			// Decscription of score file type
)
// PURPOSE	Insert insert links for a MIDI & a score file.
// ENTRY	Init() has been called
{
	if (argsOk(arguments.callee, true, false)) {
		score = root + scoreExtension + '/' + scoreBase + '.' + scoreExtension;
		write(' (<a href="' + midi + '" onMouseOver="return stat(\'' + tipMidi + '\')" onMouseOut="return erase()">' + midiWord + '</a>,');
		write(' <a href="' + score + '" onMouseOver="return stat(\'' + tipScore + '\')" onMouseOut="return erase()">' + scoreWord + '</a>)');
	}
}
//------------------------------------------------
function music() {
	var midi, nwc, pdf;
	switch (arguments.length) {
		case 2 :
			midi = pageMidiFile;
			nwc  = arguments[0];
			pdf  = arguments[1];
			break;
		case 3 :
			midi = root + "mid/" + arguments[0]+ ".mid";
			nwc  = arguments[1];
			pdf  = arguments[2];
			break;
	}
	if (nwc == null) {
		error("Bad music argument count (" + arguments.length + ')');
	} else {
		var output = '<span class="musicLinks"> (';
		output += '<a href="' + midi + '" onmouseover="return stat(\'Open MIDI file\')" onMouseOut="return erase()">MI&shy;DI</a>, ';
		output += '<a href="' + root + 'nwc/' + nwc + '.nwc"' + ' onmouseover="return stat(\'' + tipScore + '\')" onmouseout="return erase()">' + scoreWord + '</a>';
		if (pdf != null) {		
			output += ', <a href="' + root + 'pdf/' + pdf + '.pdf"' + ' onmouseover="return stat(\'See sheet music (Adobe PDF format)\')" onmouseout="return erase()" target="_blank">PDF</a>';
		}
		output += ')</span>';
		write(output);
	}
}
//------------------------------------------------
function lmn(
	score	// Base name of score file, with path down from nwc directory (no extension, which must be "nwc")
)
// PURPOSE	Insert links for a page's main MIDI file & NoteWorthy Composer score file
// ENTRY	Init() has been called
{
	if (argsOk(arguments.callee, true, false)) {
		lmn2(pageMidiFile, score);
	}
}
//------------------------------------------------
function lmn2(
	midi,	// Full path to MIDI file, or path down from MIDI directory. If not full path, should not have extension, which must be "mid".
	score	// Score file name, down from the "nwc" directory (no extension, which must be "nwc")
)
// PURPOSE	Insert links for a MIDI file & NoteWorthy Composer score file. This function is called from lmn(),
//			and is also used for "alternate tune" links on hymn pages.
{
	if (argsOk(arguments.callee, true, false)) {
		if (midi.indexOf(root) == -1) {								// If MIDI lacks full path
			midi = root + 'mid/' + midi + ".mid";					// Add it
		}
		insertMusicLinks(midi, score, "nwc", "NoteWorthy Composer");
	}
}
//------------------------------------------------
function needTranslationTo(language) {
	write('<p class="request" lang="en-us">If you can trans&shy;late the Eng&shy;lish parts of this page in&shy;to ' + language);
	mail();
    write('</p>');
}
//------------------------------------------------
function pdf(file) {
	if (argsOk(arguments.callee, true, false)) {
		write('<p class="pdf-icon"><a href="' + root + 'pdf/' + file + '.pdf" target="_blank">');
		var imageURL = root + "img/p/d/f/pdficon_large.gif";
		write('<img src="' + imageURL + '" class="pdf-icon"></a></p>');
	}
}
//------------------------------------------------
function play()
{
// PURPOSE	Insert embedded MIDI object for browsers that need it, & insert autoplay HTML when appropriate.
// ENTRY	Init() has been called

	if (navigator.appName == "Netscape") {
		write('<embed src="' + pageMidiFile + '" autostart="true" height="18" loop="true" repeat="true">');
	}
	if (location.search.toString() != "") {
		write('<p class="ap">AUTOPLAY</p>');
	}
}
//------------------------------------------------
function setTipBio(tip) {
	tipBio = tip;
}
//------------------------------------------------
function setTipMidi(tip) {
	tipMidi = tip;
}
//------------------------------------------------
function setTipScore(tip) {
	tipScore = tip;
}
//------------------------------------------------
function start(
	title, 			// Page title
	quote, 		// Scripture quotation
	verse,		// Chapter & verse
	alternate	// Alternate title (optional)
){
	play();
	write("<h1>" + title + "</h1>");
	if (alternate != null) {
		write("<h2>" + alternate + "</h2>");
	}
	startx(quote, verse);
}
//------------------------------------------------
function startx(quote, verse)
{
// PURPOSE		Draw the top of the page
// ENTRY	 	Init() has been called
// ARGUMENTS	quote Scripture quotation (optional)
//				verse Chapter & verse (required if quote is present)
	arrows();
	if (quote && quote.length != 0) {
		write('<p align="center"><marquee width="90%">' + openQuote + quote + closeQuote + ' ' + verse + '</marquee></p>');
	}
	write("<hr/>");
}
//------------------------------------------------
function tran(name, link) {
// PURPOSE		Write text telling who did the translation from English.
// ENTRY	 	translatedBy is set
//				translatorNamePosition Can be optionally set
// ARGUMENTS	name	Translator's name
//				link	Path to biography page (may be null)
	
	if (translatedBy == null) {
		error("'Translated by' text not set yet");
	} else {
		if (translatorNamePosition == "before") {
			if (link != null)
				write('<script type="text/javascript">bio("' + name + '","' + link + '")</script>');
			else if (name != null)
				write(name);
			write(' ')
		}
		write(translatedBy);
		if (translatorNamePosition == "after") {
			write(' ');
			if (link != null)
				write('<script type="text/javascript">bio("' + name + '","' + link + '")</script>');
			else if (name != null)
				write(name);
		}
	}
}
//------------------------------------------------
function translatorUnknown()
{
// PURPOSE		Write text saying the translator is uknown.
// ENTRY	 		translatorUnknown is set
	
	if (translatorUnknownText == null)
		error("The 'translatorUnknownText' variable has not been set.");
	else
		write(" " + translatorUnknownText + ". ");
}
