// 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
// allow for Chrome rendering bug
function clearText() {
	d3.innerHTML='Click on a filmmaker 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 filmmaker list display
var fmmenu=document.getElementById('fmnat');
fmmenu.onchange=function(){
var chosenfm=this.options[this.selectedIndex] //this refers to "fm menu"
key = chosenfm.value;
clearText();
showFMList(xmlFM, key);
}
// ------------
// Parse FilmMakerList.xml and display list of film makers in div
function showFMList(xmlFM, key) {
	x=xmlFM.responseXML.documentElement.getElementsByTagName('FilmMaker');
	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
	fm1 = "";
    for (i=0;i<x.length;i++) {
		// test which filter to be applied
		if (nation=='key') {
			if (x[i].getElementsByTagName('FMsta')[0].childNodes[0].nodeValue == nation) {
			fm2=x[i].getElementsByTagName('Dir')[0].childNodes[0].nodeValue;
			fmnam=x[i].getElementsByTagName('FMref')[0].childNodes[0].nodeValue;
			// eliminate duplicates
			if (fm2!=fm1) {
				fm1=fm2;
				txt="<span onclick=";
				txt=txt+'"showFMDetail('+i+')">';
				txt = txt+fm2+"</span>";
				var spl=document.createElement('li');
				spl.innerHTML = txt
				y.appendChild(spl);
			}
			}
	}
		else if ((nation=="") || (x[i].getElementsByTagName('Nat')[0].childNodes[0].nodeValue == nation)) {
			fm2=x[i].getElementsByTagName('Dir')[0].childNodes[0].nodeValue;
			fmnam=x[i].getElementsByTagName('FMref')[0].childNodes[0].nodeValue;
			// eliminate duplicates
			if (fm2!=fm1) {
				fm1=fm2;
			txt="<span onclick=";
			txt=txt+'"showFMDetail('+i+')">';
			txt = txt+fm2+"</span>";
			var spl=document.createElement('li');
			// test for key film makers and set style accordingly
    		if ((x[i].getElementsByTagName('FMsta')[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 Film Maker detail panel
// xFM is global for XML filmmaker elements
function showFMDetail(fmn) {
	txt='<span>', 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
	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;
		}
	}
