// JavaScript Document
// globals for elements of document
var	d3=document.getElementById("div3");
var	d4=document.getElementById("div4");
var	d5=document.getElementById("div5");
var	d6=document.getElementById("div6");
var	d7=document.getElementById("div7");
var	d8=document.getElementById("div8");
// ------------
// clear old text from details panel
function clearText() {
	d3.innerHTML='Click on a film for details';
	d3.style.color='black';
	d3.style.fontStyle='normal';
	d4.innerHTML='';
	d5.innerHTML='';
	d6.innerHTML='';
	d7.innerHTML='';
	d8.innerHTML='';
}
// ------------
// to select the Nation filter for film list display
var filmmenu=document.getElementById('filmnat');
filmmenu.onchange=function(){
var chosenfilm=this.options[this.selectedIndex] //'this' refers to "film menu"
key = chosenfilm.value;
clearText();
showFilmList(xmlFilm, key); 
}
// ------------
// Parse FilmList.xml and display list of films in div2
function showFilmList(xmlFilm, key) {
xF=xmlFilm.responseXML.documentElement.getElementsByTagName('Film');
var nation=key;
// first clear out any elements set in a previous listing
var y=document.getElementById('div2');
y.innerHTML='';
// now scan the complete xml file
for (i=0;i<xF.length;i++) {
// test which filter to be applied
	if (nation == "key") {
		if (xF[i].getElementsByTagName('Fsta')[0].childNodes[0].nodeValue == nation) {
			txt="<span onclick=";
			txt=txt + '"showDetail('+i+')">';
			txt=txt + (xF[i].getElementsByTagName('ShTi')[0].childNodes[0].nodeValue);
			txt = txt + "</span>";
			var spl = document.createElement('li');
			spl.innerHTML = txt
			y.appendChild(spl);
			}
	}
	else if ((nation == '') || (xF[i].getElementsByTagName('Nat')[0].childNodes[0].nodeValue == nation)) {
		txt="<span onclick=";
		txt=txt + '"showDetail('+i+')">';
		txt=txt + (xF[i].getElementsByTagName('ShTi')[0].childNodes[0].nodeValue);
		txt = txt + "</span>";
		var spl = document.createElement('li');
		// test for key films and set style accordingly
    	if ((xF[i].getElementsByTagName('Fsta')[0].childNodes[0].nodeValue)=='key') {
			spl.style.color = "#F00";
		}
		spl.innerHTML = txt
		y.appendChild(spl);
		}
	}
// scroll to top of list if required
window.scrollTo(0, 0);
//x=y.firstChild;
//x.scrollIntoView();
}
// ------------
// display the film details panel
// xF is global for XML 'Film' elements
function showDetail(i){
var tmp="", tmp2 = '\x5F', fnam="";
clearText();
// show title [and alt title] in div3
txt=xF[i].getElementsByTagName('Ti')[0].childNodes[0].nodeValue;
if (xF[i].getElementsByTagName('AltTi')[0].childNodes.length == 1){
	tmp=(xF[i].getElementsByTagName('AltTi')[0].childNodes[0].nodeValue);
	txt=txt+' / '+tmp;
	}
d3.innerHTML=txt;
d3.style.color='red';
d3.style.fontStyle='italic';
// show other fixed details in div4
txt=(xF[i].getElementsByTagName('RelYear')[0].childNodes[0].nodeValue);
txt=txt+', '+(xF[i].getElementsByTagName('Cou')[0].childNodes[0].nodeValue);
txt=txt+' ('+(xF[i].getElementsByTagName('Tmin')[0].childNodes[0].nodeValue) + 'min, ';
txt=txt+(xF[i].getElementsByTagName('Lang')[0].childNodes[0].nodeValue)+')<br/><br/>';
// if there is a cross-reference, set up link to the FM details panel
tmp=(xF[i].getElementsByTagName('FMref')[0].childNodes[0].nodeValue);
if (tmp!="*") {
	txt=txt+"<a onclick=";
	txt=txt+'"getFmaker(';
	txt=txt+"'"+tmp+"'"+')">';
	}
txt=txt+(xF[i].getElementsByTagName('Dir')[0].childNodes[0].nodeValue)+'</a><br/><br/>';
// if there are holdings and/or sources, display them
txt=txt+'Holdings: ';
if (xF[i].getElementsByTagName('Holds')[0].childNodes.length == 1){
	tmp=(xF[i].getElementsByTagName('Holds')[0].childNodes[0].nodeValue);
	txt=txt+tmp;
	}
txt=txt+'<br/>'+'Sources: ';
if (xF[i].getElementsByTagName('Fsrc')[0].childNodes.length == 1){
	tmp=(xF[i].getElementsByTagName('Fsrc')[0].childNodes[0].nodeValue);
// manipulate source to put in link
	tmp1=tmp.substring(0,3);
	switch(tmp1){
		case 'Pal':
		case 'Kur':
		case 'Ara':
		case 'Tur':
		case 'Arm':
		case 'Fil':
		break;
		default:
		tmp='<a href="http://'+tmp+'" target="'+tmp2+'blank">'+tmp+'</a>';
	}
	txt=txt+tmp;
	}
txt=txt+'<br/>';
d4.innerHTML=txt;
// if there is a synopsis, read and display
	if (xF[i].getElementsByTagName('Fref')[0].childNodes.length == 1){
		fnam=(xF[i].getElementsByTagName('Fref')[0].childNodes[0].nodeValue);
		if (fnam=='*') {
			fnam='Dummy';
		}
		fnam='/Films/Description/Synopsis/'+fnam+'.txt';
		d5.innerHTML= 'Loading ...';
		makeRequest(fnam);}
// if there is a pdf commentary for the film, display a link
	if (xF[i].getElementsByTagName('Comm')[0].childNodes.length==1){
	txt=(xF[i].getElementsByTagName('Comm')[0].childNodes[0].nodeValue);
	txt='<br/><a href="/Films/Description/Detail/'+txt+'.pdf"'+' target="'+tmp2+'blank"'+'>Download</a>'+' a more detailed discussion of this film';
	d6.innerHTML=txt;
	}
}
// ------------
// Function to set up call to display Film Maker details from Film List panel
// xFM is global for XML filmmaker elements
function getFmaker (fmnam) {
xFM=xmlFM.responseXML.documentElement.getElementsByTagName('FilmMaker');
for (i=0;i<xFM.length;i++) {
	txt=xFM[i].getElementsByTagName('FMref')[0].childNodes[0].nodeValue;
	if (fmnam==txt) {
	break;
	}
}
// ------------
// display Film Maker detail panel
// xFM is global for XML filmmaker elements
fmn=i, tmp='';
clearText();
xFM=xmlFM.responseXML.documentElement.getElementsByTagName('FilmMaker');
// fimmakers name in red italic
fmnam=xFM[fmn].getElementsByTagName('Dir')[0].childNodes[0].nodeValue;
d3.innerHTML='<span>'+fmnam+'</span>';
d3.style.color='red';
d3.style.fontStyle='italic';
// FM dob etc from XML, if any
//tmp='';
if (xFM[fmn].getElementsByTagName('FMdb')[0].childNodes.length == 1){
	tmp=xFM[fmn].getElementsByTagName("FMdb")[0].childNodes[0].nodeValue; }
	if (tmp!=''){
		d4.innerHTML='<span>'+tmp+'<br/></span>';		
	}
//	read and display bio if any
fmlnk=xFM[fmn].getElementsByTagName('FMlnk')[0].childNodes[0].nodeValue;
if (fmlnk=='*'){
	fmref=xFM[fmn].getElementsByTagName('FMref')[0].childNodes[0].nodeValue;
	fmref='/Films/Description/FMbio/'+fmref+'.txt';
		d5.innerHTML= 'Loading ...';
		getFMbio(fmref, fmn, fmnam);}
else {d5.innerHTML='<p>No biographical details available yet</p>';
	showFMrest(fmn, fmnam);
	}
}
// ------------
// read and display bio
function getFMbio(url, fmn, fmnam) {
	xhr='null';
if (window.XMLHttpRequest) {
	xhr = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
	xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
if (xhr!=null) {
		xhr.onreadystatechange = function(){showFMbio(xhr, fmn, fmnam)};
		xhr.open("GET", url, true); // async request
		xhr.send(null);
	}
else {
	alert("Cannot read the biographical data");
	}
}
// listener function, triggered when request completes
// displays the contents of the requested file
function showFMbio(xhr, fmn, fmnam) {
	var outMsg='';
	if (xhr.readyState==4) {
		switch (xhr.status) {
		case 200:
			outMsg = xhr.responseText;
			break;
		case 404:
			outMsg = "<i>No further details available at present<i>";
			break;
		default:
			outMsg = "<p>Cannot access the information requested at this time</p>";
			break;
		}
		d5.innerHTML = outMsg;
		showFMrest(fmn, fmnam);
	}
}
// display remainder of filmmaker information	
function showFMrest(fmn, fmnam){
txt='<span>';
d6.innerHTML='<span>Film titles:</span>';
for (j=fmn;j<xFM.length;j++){
	tmp=xFM[j].getElementsByTagName('Dir')[0].childNodes[0].nodeValue;
	if 	(fmnam != tmp) {
		break;
		}
	txt=txt+xFM[j].getElementsByTagName('Ti')[0].childNodes[0].nodeValue;
	tmp='';
	if (xFM[j].getElementsByTagName('AltTi')[0].childNodes.length == 1){
		tmp=xFM[j].getElementsByTagName('AltTi')[0].childNodes[0].nodeValue; }
	if (tmp!='') {
		txt=txt+' / '+tmp;
	}
		txt=txt+' ('+xFM[j].getElementsByTagName('RelYear')[0].childNodes[0].nodeValue;
		txt=txt+')'+'<br/></span>';
}
		d7.innerHTML=txt;
		d7.style.fontStyle='italic';
		d7.style.padding='5px';
// display web address if any
		tmp = xFM[fmn].getElementsByTagName('FMweb')[0].childNodes[0].nodeValue;
		if (tmp!='*') {
		tmp2='\x5F';
		tmp1='<a href="http://'+tmp+'"'+' target="'+tmp2+'blank">';
		txt='<p>Website: '+tmp1+tmp+'</a></p>';
		d8.innerHTML=txt;
		}
	}
