/* EXIT if using NetScape */
if (document.layers)
{	window.alert("XML LayerMaps will NOT work in NetScape or similar browsers!");
	window.location="ngr_textlist_index.htm";
}

/* XMLDOM SITETYPES PROCESSING */
/* load SITETYPES XML into XMLDOM */
var xmlData=new ActiveXObject("Microsoft.XMLDOM");
xmlData.async="false";
xmlData.load("sitetypes.xml");
/* check for errors during XMLDOM load */
if (xmlData.parseError != 0)
{	var msg="<H3>Error!";
	msg+="<BR/>URL: "+xmlData.parseError.url;
	msg+="<BR/>Line: "+xmlData.parseError.line;
	msg+="<BR/>Error Code: "+xmlData.parseError.errorCode;
	msg+="<BR/>Reason: "+xmlData.parseError.reason;
	document.write(msg+"</H3>");
}
/* set up element retrieval by tag names */
var InCodes=xmlData.getElementsByTagName("code");
var InTexts=xmlData.getElementsByTagName("text");
/* functions to return element values */	
function fncGetSTCode(n) { return InCodes.item(n).text }
function fncGetSTText(n) { return InTexts.item(n).text }
/* function to retrieve text value of supplied SiteType code */
function fncGetText(stcode) {
	for (i=0; i<InCodes.length; i++) {
		if (fncGetSTCode(i)==stcode) return fncGetSTText(i);
	}
	return "SiteType NOT FOUND";
}

/* XMLDOM NGRDATA PROCESSING */
/* load NGRDATA XML into XMLDOM */
var xmlData=new ActiveXObject("Microsoft.XMLDOM");
xmlData.async="false";
xmlData.load("ngr_data.xml");
/* check for errors during XMLDOM load */
if (xmlData.parseError != 0) {
	var msg="<H3>Error!";
	msg+="<BR/>URL: "+xmlData.parseError.url;
	msg+="<BR/>Line: "+xmlData.parseError.line;
	msg+="<BR/>Error Code: "+xmlData.parseError.errorCode;
	msg+="<BR/>Reason: "+xmlData.parseError.reason;
	document.write(msg+"</H3>");
}
/* variables for element retrieval by tag names */
var dataset=xmlData.getElementsByTagName("dataset");
var ngrs=xmlData.getElementsByTagName("ngr");
var places=xmlData.getElementsByTagName("place");
var names=xmlData.getElementsByTagName("name");
var countys=xmlData.getElementsByTagName("county");
var ngrefs=xmlData.getElementsByTagName("ngref");
var types=xmlData.getElementsByTagName("type");
/* functions to return element values */	
function fncGetDataset(n) { return dataset.item(n).text }
function fncGetPlace(n) { return places.item(n).text }
function fncGetName(n) { return names.item(n).text }
function fncGetCounty(n) { return countys.item(n).text }
function fncGetNgref(n) { return ngrefs.item(n).text }
function fncGetType(n) { return types.item(n).text }
/* functions to return attribute values */
function fncGetCode(n) { return ngrs.item(n).getAttribute("code"); }
function fncGetTypes(n) { return ngrs.item(n).getAttribute("types"); }
function fncGetMaps(n) { return ngrs.item(n).getAttribute("maps"); }
function fncGetHref(n) { return places.item(n).getAttribute("href"); }
function fncGetLatiname(n) { return names.item(n).getAttribute("latiname"); }
function fncGetImg(n) { return types.item(n).getAttribute("img"); }
function fncGetNo(n) { return types.item(n).getAttribute("no"); }

/* PARAMETER PROCESSING */
/* function to retrieve specified values from document.cookie */
function fncGetCookie(name) {
	var cname=name+"=";
	var dc=document.cookie;
	if (dc.length>0) {
		begin=dc.indexOf(cname);
		if (begin!=-1)
		{	begin+=cname.length;
			end=dc.indexOf(";",begin);
			if (end==-1) end=dc.length;
			return unescape(dc.substring(begin,end));
		}
	}
	return null;
}
/* retrieve SiteTypes from document.cookie */
var ParmTypes=fncGetCookie('SiteTypes');

/* TABLES AND VARIABLES */
var oTxt=""; /* output text build-up variable */
var sNgr=new Array(41), sTop=new Array(41), sLeft=new Array(41); /* tables for NGRCode OffSet values */
sNgr[00]="NH"; sTop[00]=0; sLeft[00]=1;
sNgr[01]="NJ"; sTop[01]=0; sLeft[01]=2;
sNgr[02]="NK"; sTop[02]=0; sLeft[02]=3;
sNgr[03]="NN"; sTop[03]=1; sLeft[03]=1;
sNgr[05]="NO"; sTop[05]=1; sLeft[05]=2;
sNgr[06]="NS"; sTop[06]=2; sLeft[06]=1;
sNgr[07]="NT"; sTop[07]=2; sLeft[07]=2;
sNgr[08]="NU"; sTop[08]=2; sLeft[08]=3;
sNgr[09]="NX"; sTop[09]=3; sLeft[09]=1;
sNgr[10]="NY"; sTop[10]=3; sLeft[10]=2;
sNgr[11]="NZ"; sTop[11]=3; sLeft[11]=3;
sNgr[12]="SC"; sTop[12]=4; sLeft[12]=1;
sNgr[13]="SD"; sTop[13]=4; sLeft[13]=2;
sNgr[15]="SE"; sTop[15]=4; sLeft[15]=3;
sNgr[16]="TA"; sTop[16]=4; sLeft[16]=4;
sNgr[17]="SH"; sTop[17]=5; sLeft[17]=1;
sNgr[18]="SJ"; sTop[18]=5; sLeft[18]=2;
sNgr[19]="SK"; sTop[19]=5; sLeft[19]=3;
sNgr[20]="TF"; sTop[20]=5; sLeft[20]=4;
sNgr[21]="TG"; sTop[21]=5; sLeft[21]=5;
sNgr[22]="SM"; sTop[22]=6; sLeft[22]=0;
sNgr[23]="SN"; sTop[23]=6; sLeft[23]=1;
sNgr[25]="SO"; sTop[25]=6; sLeft[25]=2;
sNgr[26]="SP"; sTop[26]=6; sLeft[26]=3;
sNgr[27]="TL"; sTop[27]=6; sLeft[27]=4;
sNgr[28]="TM"; sTop[28]=6; sLeft[28]=5;
sNgr[29]="SR"; sTop[29]=7; sLeft[29]=0;
sNgr[30]="SS"; sTop[30]=7; sLeft[30]=1;
sNgr[31]="ST"; sTop[31]=7; sLeft[31]=2;
sNgr[32]="SU"; sTop[32]=7; sLeft[32]=3;
sNgr[33]="TQ"; sTop[33]=7; sLeft[33]=4;
sNgr[35]="TR"; sTop[35]=7; sLeft[35]=5;
sNgr[36]="SW"; sTop[36]=8; sLeft[36]=0;
sNgr[37]="SX"; sTop[37]=8; sLeft[37]=1;
sNgr[38]="SY"; sTop[38]=8; sLeft[38]=2;
sNgr[39]="SZ"; sTop[39]=8; sLeft[39]=3;
sNgr[40]="TV"; sTop[40]=8; sLeft[40]=4;

/* LAYER CONTROL FUNCTIONS */
/* Switch the setting of the identified layer */
function fncSwitchLayer(layerId) {
	if (document.layers) {
		if (document.layers[layerId].visibility=="hide")
		{	document.layers[layerId].visibility="show"; }
		else
		{	document.layers[layerId].visibility="hide"; }
	}
	else {
		var targetElement; targetElement=document.all[layerId];
		if (targetElement.style.visibility=="hidden")
		{	targetElement.style.visibility="visible"; }
		else
		{	targetElement.style.visibility="hidden"; }
	}
}
/* Switch the settings of all layers on/off */
function fncSetAll(onOff) {
	for (z=0; z<ParmTypes.length; z++) {
		var zType=ParmTypes.charAt(z);
		if (document.layers) {
			if (onOff==0) { document.layers[zType].visibility="hide"; }
			else { document.layers[zType].visibility="show"; }
		} else {
			var targetElement=document.all[zType];
			if (onOff==0) { targetElement.style.visibility="hidden"; }
			else { targetElement.style.visibility="visible"; }
		}
	}
}

/* HTML GENERATION */
/* set up page headings and background map */
document.write('<DIV STYLE="position:absolute;left:-40;top:-75;"><IMG SRC="../images/_bgmap2.gif" WIDTH="600"></DIV>');
document.write('<DIV STYLE="background:lightgray;position:absolute;left:340;top:0;" WIDTH="400">');
document.write('<H3><SMALL>WWW.</SMALL>Roman-Britain<SMALL>.ORG</SMALL></H3>');
document.write('<H4>XML/JavaScript Generated LayerMap</H4>');
document.write('</DIV>');
/* create divisions positioned by NGRef */
for (k=0; k<ParmTypes.length; k++) {
	var kType=ParmTypes.charAt(k);
	if (document.layers) { document.write('<LAYER ID="',kType,'" TOP="0" LEFT="0">'); }
	else { document.write('<DIV ID="',kType,'" STYLE="position:absolute;top:0;left:0;">'); }
	for (i=0; i<places.length; i++) {
		var iImg=fncGetImg(i);
		if (iImg==kType) {
			var iNgref=fncGetNgref(i);
			var iNgr=iNgref.slice(0,2), tTop=0, tLeft=0;
			for (n=0; n<41; n++) { if (sNgr[n]==iNgr) { tTop=sTop[n]*100; tLeft=sLeft[n]*100; n=42; } }
			var posLeft=new Number(iNgref.slice(2,4))+tLeft;
			var posTop=100-iNgref.slice(4,6)+tTop;
			oTxt='<DIV STYLE="position:absolute;left:'+posLeft+';top:'+posTop+';">';
			oTxt+='<A HREF="../places/'+fncGetHref(i)+'">';
			oTxt+='<IMG SRC="../places/ngr/_'+iImg+'.gif" BORDER="0"';
			oTxt+=' ALT="'+fncGetName(i)+', '+fncGetCounty(i);
			oTxt+=' - '+fncGetType(i)+' ('+iNgref+')"></A></DIV>';
			document.write(oTxt);
		}
	}
	if (document.layers) { document.write('</LAYER>'); }
	else { document.write('</DIV>'); }
}
document.write('<DIV STYLE="position:absolute;left:515;top:80;">');
oTxt='<TABLE BORDER="2" CELLSPACING="0" CELLPADDING="2" BGCOLOR="darkslategray" BORDERCOLOR="mediumseagreen"';
oTxt+=' BORDERCOLORDARK="darkseagreen" BORDERCOLORLIGHT="lightseagreen">';
oTxt+='<TR><TH COLSPAN="2" STYLE="color:gold;"><NOBR>Layers in This Map</NOBR></TH></TR>';
document.write(oTxt);
for (k=0; k<ParmTypes.length; k++) {
	var kType=ParmTypes.charAt(k);
	oTxt='<TR><TH><IMG SRC="../places/ngr/_'+kType+'.gif"></TH><TD><A HREF="#tic" onClick="';
	oTxt+="JavaScript:fncSwitchLayer('"+kType+"');";
	oTxt+='"><NOBR>'+fncGetText(kType)+'</NOBR></A></TD></TR>';
	document.write(oTxt);
}
oTxt='<TR><TD COLSPAN=2 ALIGN=CENTER><A HREF="#tic" onClick="JavaScript:fncSetAll(1);">';
oTxt+='<NOBR>Display All Site Types</NOBR></A></TD></TR>';
document.write(oTxt);
oTxt='<TR><TD COLSPAN=2 ALIGN=CENTER><A HREF="#tic" onClick="JavaScript:fncSetAll(0);">';
oTxt+='<NOBR>Reset All Site Types</NOBR></A></TD></TR>';
document.write(oTxt);
document.write('</TABLE></DIV>');

