// Copyright Dalbrook Limited 2004
// All rights reserved

function findTopWindow() {
	// Normal Window
	var topWindow = top.window;
	// Dialog Window
	if (window.dialogArguments) {
		if (window.dialogArguments.parent) {
			topWindow = window.dialogArguments.parent;
		}
	// Sub Window
	} else if(window.opener) {
		if (window.opener.parent) {
			topWindow = window.opener.parent;
		}
	}
	return topWindow;
}

function findBrowserActionFrame() {
	var ActionFrame = findTopWindow().frames["action_frame"];
	return ActionFrame;
}

function findBrowserControlFrame() {
	var ControlFrame = findTopWindow().frames["control_frame"];
	return ControlFrame;
}

function findBrowserInformationFrame() {
	var InformationFrame = findTopWindow().frames["information_frame"];
	return InformationFrame;
}

function findBrowserListFrame() {
	var ListFrame = findTopWindow().frames["list_frame"];
	return ListFrame;
}

function findBrowserMapFrame() {
	var MapFrame = findTopWindow().frames["map_frame"];
	return MapFrame;
}

function findBrowserStatusFrame() {
	var statusFrame = findTopWindow().frames["status_frame"];
	return statusFrame;
}

function findHTMLActionFrame () {
	var topDoc       = findTopWindow().document;
	var actionFrame  = topDoc.getElementById("action_frame");
	return actionFrame;
}

function findHTMLControlFrame () {
	var topDoc       = findTopWindow().document;
	var ControlFrame  = topDoc.getElementById("control_frame");
	return ControlFrame;
}

function findHTMLInformationFrame () {
	var topDoc       = findTopWindow().document;
	return topDoc.getElementById("information_frame");
}

function findHTMLListFrame () {
	var topDoc       = findTopWindow().document;
	return topDoc.getElementById("list_frame");
}

function findHTMLMapFrame () {
	var topDoc       = findTopWindow().document;
	return topDoc.getElementById("map_frame");
}

function findHTMLStatusFrame () {
	var topDoc       = findTopWindow().document;
	return topDoc.getElementById("status_frame");
}

function findStatusWindow () {
	var statusWindow = findHTMLStatusFrame().contentWindow;
	return statusWindow;
}

function findMap() {
	var mapObj = findBrowserMapFrame().document.getElementById("printable_map");
	var svgdoc = mapObj.getSVGDocument();
	return svgdoc;
}

function findMapRoot () {
	var svgdoc = findMap();
	var thisChild;
	var i;
	var children = svgdoc.childNodes.length;

	for (i=0; i<children; i++) {
		thisChild = svgdoc.childNodes.item(i);
		if (thisChild.getNodeType() == 1) {return thisChild}
	}
	return null;
}

function findPrefs() {
	var prefsObject = findBrowserStatusFrame().preferences;
	return prefsObject;
}

function getPref(whichPref) {
	var prefsObject = findPrefs();
	if (prefsObject) {
		var prefItem = prefsObject[whichPref];
		if (prefItem) {
			return prefItem;
		} else {
			alert("SYSTEM ERROR - Can't find " + whichPref + " preference");
			return null;
		}
	} else {
		alert("SYSTEM ERROR - Can't find any preferences");
		return null
	}
}

function setPref(whichPref, prefValue) {
	var prefsObject = findPrefs();
	if (prefsObject) {
		prefsObject[whichPref] = prefValue;
	} else {
		alert("SYSTEM ERROR - Can't find any preferences");
		return null;
	}
}

function objectAnalysis(thing, nestingLevel) {

	if (nestingLevel > 2) return "NESTING LIMIT EXCEEDED";

	var resultString;
	var i;
	var itemCount;
	var childResult;
	
	if (thing.nodeType == 1) {

		resultString = "ELEMENT: ";
		
		resultString = resultString + "Node Name: " + thing.nodeName + ",  ";

		if (thing.hasAttributes) {
			itemCount = thing.attributes.length;
			resultString = resultString + "Has " + itemCount + " Attributes,  ";
			for (i=0; i<itemCount; i++) {
				resultString = resultString + objectAnalysis(thing.attributes.item(i), nestingLevel + 1);
			}
		} else {
			resultString = resultString + "No Attributes,  ";
		}
	
		if (thing.hasChildNodes) {
			itemCount = thing.childNodes.length;
			resultString = resultString + "Has " + itemCount + " Child Nodes,  ";
			for (i=0; i<itemCount; i++) {
				childResult = objectAnalysis(thing.childNodes.item(i), nestingLevel + 1);
				alert ("Child " + i + " at level " + nestingLevel + " - " + childResult);
			}
		} else {
			resultString = resultString + "No Child Nodes,  ";
		}
		
	} else if (thing.nodeType == 2) {
	
		resultString = "ATTRIBUTE: ";
		resultString = resultString + thing.name + "=" + thing.value + ",  ";

	} else if (thing.nodeType == 3) {
	
		resultString = "TEXT NODE: ";
		resultString = resultString + thing.data + ",  ";

	} else if (thing.nodeType == 8) {
	
		resultString = "COMMENT: ";
		resultString = resultString + thing.data + ",  ";

	} else if (thing.nodeType == 9) {
	
		resultString = "DOCUMENT: ";
		resultString = resultString + "Node Name: " + thing.nodeName + ",  ";

		if (thing.hasAttributes) {
			itemCount = thing.attributes.length;
			resultString = resultString + "Has " + itemCount + " Attributes,  ";
			for (i=0; i<itemCount; i++) {
				resultString = resultString + objectAnalysis(thing.attributes.item(i), nestingLevel + 1);
			}
		} else {
			resultString = resultString + "No Attributes,  ";
		}
	
		if (thing.hasChildNodes) {
			itemCount = thing.childNodes.length;
			resultString = resultString + "Has " + itemCount + " Child Nodes,  ";
			for (i=0; i<itemCount; i++) {
				childResult = objectAnalysis(thing.childNodes.item(i), nestingLevel + 1);
				alert ("Child " + i + " at level " + nestingLevel + " - " + childResult);
			}
		} else {
			resultString = resultString + "No Child Nodes,  ";
		}

	} else if (thing.nodeType == 10) {
	
		resultString = "DTD: ";
		resultString = resultString + thing.data + ",  ";

	} else {
		resultString = "UNKNOWN NODE ";

	}
	
	return resultString;
}

function bookmarkTheMap() {
	var fullpath = document.location.pathname;
	var slashPos = fullpath.lastIndexOf('/');
	var pathname = fullpath.substr(0, slashPos + 1);
	var url = 
		document.location.protocol + '//' +
		document.location.host + 
		pathname + 
		"frames.htm";
	var who = "Westonbirt Map - The Interactive Map of the National Arboretum";
	window.external.AddFavorite(url,who);
}

function displayEmailSafely (emailAddress, emailText){

	var emailAddressWork = emailAddress.replace(/\[at]/gi, "@");
	emailAddressWork = emailAddressWork.replace(/\[dot]/gi, ".");
	
	var emailTextWork = emailText.replace(/\[at]/gi, "@");
	emailTextWork = emailTextWork.replace(/\[dot]/gi, ".");
	
	document.write('<span>\n');
	document.write('<a href="mailto:' + emailAddressWork + '">' + emailTextWork + '</a>\n');
	document.write('</span>\n');
}
