/*
	Outliner functions
	version: 1.4
	last modified 4-Mar-2003
	created by Marc Barrot, with help from Aaron Straup Cope, DJ Adams, Sjoerd Visscher and Danny Goodman
	copyright 2002 by Precision IT Management,Inc.
 	You may use and distribute this code freely,
	just keep this header information intact.
*/
var img_expanded  = 'http://www.zaz.com/system/directory/js/view/ol3.gif';
var img_collapsed = 'http://www.zaz.com/system/directory/js/view/ol2.gif';
var img_rotating = 'http://www.zaz.com/system/directory/js/view/globe.gif';
(new Image(15,15)).src = img_expanded; // caching
(new Image(15,15)).src = img_collapsed; // caching
(new Image(15,15)).src = img_rotating; // caching
function expand(ioNode) {
	if (document.getElementById && document.getElementById(ioNode) != null) {
		ioWedge = "i" + ioNode.substr(1);
		// document.getElementById(ioWedge).src=img_collapsed;
		if (document.getElementById(ioWedge) != null) {
			if (document.getElementById(ioWedge).rel == null)
				document.getElementById(ioWedge).title='collapse';
			else
				document.getElementById(ioWedge).title='go';
		}
		ioExpander = "e" + ioNode.substr(1);
		ioLink = "l" + ioNode.substr(1);
		if (document.getElementById(ioExpander) != null && document.getElementById(ioLink) != null) {
			document.getElementById(ioExpander).className='collapsed';
			document.getElementById(ioLink).className='expanded';
		}
		document.getElementById(ioNode).className='expanded';
	}
}
function collapse(ioNode) {
	if (document.getElementById && document.getElementById(ioNode) !=  null) {
		ioWedge = "i" + ioNode.substr(1);
		if (document.getElementById(ioWedge) != null) {
			// document.getElementById(ioWedge).src=img_expanded;
			document.getElementById(ioWedge).title='expand';
		}
		ioExpander = "e" + ioNode.substr(1);
		ioLink = "l" + ioNode.substr(1);
		if (document.getElementById(ioExpander) != null && document.getElementById(ioLink) != null) {
			document.getElementById(ioExpander).className='expanded';
			document.getElementById(ioLink).className='collapsed';
		}
		document.getElementById(ioNode).className='collapsed';
	}
}
function ioSwitch(ioNode) {
	if (document.getElementById && document.getElementById(ioNode) !=  null) {
		nodeState = document.getElementById(ioNode).className;
		ioLink = "l" + ioNode.substr(1);
		if (nodeState == 'collapsed' && document.getElementById(ioLink) == null) {
			expand(ioNode);
		}
		else {
			if (nodeState == 'collapsed') {  // document.getElementById(ioLink) != null

				// ioWedge = "i" + ioNode.substr(1);
				// document.getElementById(ioWedge).title='collapse';
				document.getElementById(ioNode).className='expanded';
	
				ioExpander = "e" + ioNode.substr(1);
				document.getElementById(ioExpander).className='collapsed';
	
				document.getElementById(ioLink).className='expanded';
			}
			else {
				// ioWedge = "i" + ioNode.substr(1, ioNode.length);  // apparently the same as below
				ioWedge = "i" + ioNode.substr(1);
				if (document.getElementById(ioWedge).rel == null)
					collapse(ioNode);
				else {
					url = document.getElementById(ioWedge).rel;
					document.getElementById(ioWedge).target = '_top';  // forces new window
		
					// document.location = url;  // same window
					var macMSIE = navigator.userAgent.search (/MSIE.*Mac/i) + 1;
					if (macMSIE)
						window.open(url,'','location=yes,toolbar=yes');  // Mac MSIE doesn't show these by default
					else
						window.open(url,'');
				}
			}
		}
	}
}
function expandAll(divName) {
	if (document.getElementsByTagName) {
		nodeList = document.getElementsByTagName('div');
		for (var i = 0; i < nodeList.length; i++) {
	
			if (nodeList.item(i).getAttribute('name') == divName) {
				expand(nodeList.item(i).id);	
			}
		}
		nodeList = document.getElementsByTagName('font');
		for (var i = 0; i < nodeList.length; i++) {
	
			if (nodeList.item(i).getAttribute('name') == divName) {
				expand(nodeList.item(i).id);	
			}
		}
		document.getElementById('show').className='collapsed';
		document.getElementById('hide').className='expanded';
	}
	else {
		alert ("Sorry, don't know how to make this run in your browser.");
	}
}
function collapseAll(divName) {
	if (document.getElementsByTagName) {
		nodeList = document.getElementsByTagName('div');
		// for (var i = 0; i < nodeList.length; i++) {
		for (var i = 2; i < nodeList.length; i++) {  // leave the first one expanded, for some reason only 2 works
	
			if (nodeList.item(i).getAttribute('name') == divName) {
				collapse(nodeList.item(i).id);
			}
		}
		// Do Fonts as well
		nodeList = document.getElementsByTagName('font');
		// for (var i = 0; i < nodeList.length; i++) {
		for (var i = 2; i < nodeList.length; i++) {  // leave the first one expanded, for some reason only 2 works
	
			if (nodeList.item(i).getAttribute('name') == divName) {
				collapse(nodeList.item(i).id);
			}
		}
		document.getElementById('show').className='expanded';
		document.getElementById('hide').className='collapsed';
	}
	else {
		alert ("Sorry, don't know how to make this run in your browser.");
	}
}
function normalizeAll(spanName) {
	if (document.getElementsByTagName) {
		nodeList = document.getElementsByTagName('span');
		for (var i = 0; i < nodeList.length; i++) {
	
			if (nodeList.item(i).getAttribute('name') == spanName) {
				nodeList.item(i).style.fontWeight = 'normal';
			}
		}
	}
	else {
		alert ("Sorry, don't know how to make this run in your browser.");
	}
}
function expandBold(ioNode) {
	ioWedge = "i" + ioNode.substr(1);
	ioTitle = "t" + ioNode.substr(1);
	if (document.getElementById && document.getElementById(ioNode) != null) {
		// document.getElementById(ioWedge).src=img_collapsed;
		document.getElementById(ioWedge).title='collapse';
		document.getElementById(ioNode).className='expanded';
		document.getElementById(ioTitle).style.fontWeight = 'bold';
	}
}
function expandByDate(n) {
	if (n.nodeType == 1) {
		if (n.tagName.toLowerCase() == 'div') {
			if (n.getAttribute('name') == 'item') {
				expandBold(n.id);
			}
		}
	}
	var children = n.childNodes;
	for (var i=0; i < children.length; i++ ) {
		expandByDate(children[i]);
	}
}
function daySwitch(postDate) {
	var hasItems = 0;
	if (document.getElementsByTagName) {
		nodeList = document.getElementsByTagName('span');
		for (var i = 0; i < nodeList.length; i++) {
	
			if (nodeList.item(i).getAttribute('name') == 'itemTitle') {
				hasItems = 1;
				break;
			}
		}
	}
	
	if (hasItems) {
		collapseAll('item');
		normalizeAll('itemTitle');
		if (document.getElementById) {
			expandByDate(document.getElementById(postDate));
		}
	}
	else {
		collapseAll('day');
		ioSwitch(postDate);
	}
}
var targetNode;
var targetRoot;
function transclude(ioNode, url) {
	var serverUrl = 'http://www.w3.org/2000/06/webdata/xslt';
	var xsltUrl = 'http://www.zaz.com/system/directory/js/view/outliner_js_xsl.txt';
	var xsltUrl2 = 'http://www.zaz.com/system/directory/js/view/outliner_xsl.txt';
	var renderRequest = serverUrl + '?xslfile=' + xsltUrl + '&xmlfile=' + url + '&transform=Submit';
	var renderRequest2 = serverUrl + '?xslfile=' + xsltUrl2 + '&xmlfile=' + url + '&transform=Submit';
	var ioWedge = "i" + ioNode.substr(1);
	var ioRoot = "r" + ioNode.substr(1);
	var ioTitle = "t" + ioNode.substr(1);
	if (document.getElementById) {
		// create buffer if needed
		if (! document.getElementById ('buffer')) { // if buffer does not already exist
			var buffer = document.createElement('div');
			buffer.setAttribute ('id', 'buffer');
			document.body.appendChild (buffer); // add buffer as last element of body
		}
		// test for Mac MSIE
		var macMSIE = navigator.userAgent.search (/MSIE.*Mac/i) + 1;
		if (macMSIE) {
			// open new window for transcluded content
			var xAnchor = screen.width - (640 + 20);
			var yAnchor = 5;
			var xWidth = 640;
			var yHeight = 400;			
			window.open (renderRequest2, 'Related', 'width=' + xWidth + ', left=' + xAnchor + ', height=' + yHeight + ', top=' + yAnchor);
		} else {
			// expand node
			var imgNode = document.getElementById (ioWedge);		// wedge image node
			var rootNode = document.getElementById (ioRoot);		// embedding div node
			var spanNode = document.getElementById (ioTitle);		// title span node
			var title = spanNode.firstChild.data;
			var newTitle = document.createTextNode (title);			// create new heading container
			var expandedNode = document.createElement ('div');		// create embedding element
			expandedNode.setAttribute ('name', 'active');
			expandedNode.setAttribute ('class', 'expanded');
			expandedNode.setAttribute ('id', ioNode);
			expandedNode.style.marginLeft = '15px';
			// imgNode.src = img_rotating;								// update wedge's image
			imgNode.title = 'loading';
			imgNode.parentNode.setAttribute ('href', 'javascript:ioSwitch(\'' + ioNode + '\')');
			spanNode.removeChild (spanNode.firstChild);				// replace heading
			spanNode.appendChild (newTitle);
			rootNode.appendChild (expandedNode);					// insert embedding element
			targetNode = expandedNode;
			targetRoot = imgNode;
		
			// load buffer with rendered outline script
			var theEl=document.createElement('script');
			theEl.src = renderRequest;
			document.getElementById('buffer').appendChild(theEl);
		}
	}
}
function retrieveHtml(s) {
	// clean-up entity encoded HTML
	s = s.replace (/&lt;/g, '<');
	s = s.replace (/&gt;/g, '>');
	s = s.replace (/&amp;/g, '&');
	// generate random key
	var rnd = Math.random();
	var rnd_key = String (rnd).substr(1,6);
	s = s.replace (/(id="[rpti][^"][^"]*)/g, '$1' + rnd_key);		// update all div node ids
	s = s.replace (/(\('p[^'][^']*)/g, '$1' + rnd_key);				// update headings ids
	// insert transcluded HTML
	targetNode.innerHTML = s;
	// targetRoot.src = img_collapsed;									// update wedge image
	targetRoot.title = 'collapse';
}
function imgLoad(ioNode, url) { 									// load image at url into browser cache
    // ioNode :    expanding node identifier (string), stored in a custom property
    // url    :    web address of the included image (string)
	var ioWedge = "i" + ioNode.substr(1);
	if (document.getElementById) {
		var imgNode = document.getElementById (ioWedge);			// wedge image node
		// imgNode.src = img_rotating;									// update wedge's image
		imgNode.title = 'loading';
	}
    cachedImg.ioNode = ioNode;
    cachedImg.onload = imgTakeABreath;
    cachedImg.src = url;
}
function imgTakeABreath() { 										// allow for Mac MSIE and Mozilla to catch up
    setTimeout("imgSwitch()", 0);   								// ugh!
}
function imgSwitch() {												// actual image transclusion starts here
	var ioWedge = "i" + cachedImg.ioNode.substr(1);
	var ioRoot = "r" + cachedImg.ioNode.substr(1);
	var ioTitle = "t" + cachedImg.ioNode.substr(1);
	if (document.getElementById) {
		var imgNode = document.getElementById (ioWedge);			// wedge image node
		var rootNode = document.getElementById (ioRoot);			// embedding div node
		var spanNode = document.getElementById (ioTitle);			// title span node
		var expandedNode = document.createElement ('div');
		expandedNode.setAttribute ('name', 'active');
		expandedNode.setAttribute ('class', 'expanded');
		expandedNode.setAttribute ('id', cachedImg.ioNode);
		expandedNode.style.marginLeft = '15px';
		rootNode.appendChild (expandedNode);						// insert embedding element
		var expandedWidth;
		if (rootNode.currentStyle) {								// get embedding element's width
			expandedWidth = parseInt (rootNode.offsetWidth) - (15 + 4);
		} else {
			expandedWidth = parseInt (document.defaultView.getComputedStyle (expandedNode, '').getPropertyValue('width'));
		}
		var includedLink = document.createElement ('a');			// create a link for the included image
		includedLink.setAttribute ('href', cachedImg.src);
		includedLink.setAttribute ('target', '_new');
		includedLink.setAttribute ('title', 'view full size');
		var includedImg = document.createElement ('img');			// create the included image
		includedImg.setAttribute ('border', 0);
		includedImg.setAttribute ('hspace', 0);
		includedImg.setAttribute ('vspace', 8);
		includedImg.setAttribute ('alt', 'included image');
		includedImg.src = cachedImg.src;							// set the image's url
		if (expandedWidth < cachedImg.width) {						// adjust size if greater than embedding element
			includedImg.width = expandedWidth;
			includedImg.height = (cachedImg.height / cachedImg.width) * expandedWidth;
		}
		expandedNode.appendChild (includedLink);					// insert link
		includedLink.appendChild (includedImg);						// insert image
		// imgNode.src = img_collapsed;								// update wedge
		imgNode.title = 'collapse';
		imgNode.parentNode.setAttribute ('href', 'javascript:ioSwitch(\'' + cachedImg.ioNode + '\')');
	}
}
function mmLoad(ioNode, url) { 										// load multimedia object at url into browser cache
    // ioNode :    expanding node identifier (string), stored in a custom property
    // url    :    web address of the included object (string)
	var ioWedge = "i" + ioNode.substr(1);
	var ioRoot = "r" + ioNode.substr(1);
	var ioTitle = "t" + ioNode.substr(1);
	var ioObject = "f" + ioNode.substr(1);
	var urlType = 'application/x-shockwave-flash';
	var isWin = navigator.appVersion.indexOf("Win") != -1;			// true if Windows, false if MacOS
	var isIE = navigator.appName.indexOf("Microsoft") != -1;		// true if MSIE, false if other browser
	
	if (url.substring (url.length - 3, url.length) == 'mov') {
		urlType = 'video/quicktime';
	}
	if (document.getElementById) {
		var mmNode = document.getElementById (ioWedge);				// wedge image element
		var rootNode = document.getElementById (ioRoot);			// embedding div node
		var spanNode = document.getElementById (ioTitle);			// title span node
		var expandedNode = document.createElement ('div');
		expandedNode.setAttribute ('name', 'active');
		expandedNode.setAttribute ('class', 'expanded');
		expandedNode.setAttribute ('id', ioNode);
		expandedNode.style.textAlign = 'left';
		expandedNode.style.marginLeft = '15px';
		if (!isWin && isIE) {										// use top margin if Mac MSIE
			expandedNode.style.marginTop = '4px';
		} else {
			expandedNode.style.marginTop = '0px';
		}
		rootNode.appendChild (expandedNode);						// insert embedding element
		var expandedWidth;
		if (rootNode.currentStyle) {								// get embedding element's width IE style
			var border = isWin ? (15 + 4) : 4;
			expandedWidth = parseInt (rootNode.offsetWidth) - border;
		} else {													// or get it a la Mozilla
			expandedWidth = parseInt (document.defaultView.getComputedStyle (expandedNode, '').getPropertyValue('width'));
		}
		var embeddedstring = '<embed name="' + ioObject + '" width="' + expandedWidth + '" type="' + urlType + '" src="' + url + '"></embed>';
		expandedNode.innerHTML = embeddedstring;
		// mmNode.src = img_collapsed;									// update wedge
		mmNode.title = 'collapse';
		mmNode.parentNode.setAttribute ('href', 'javascript:ioSwitch(\'' + ioNode + '\')');
	}
}
function rssclude(ioNode, url) {
	var ioWedge = "i" + ioNode.substr(1);
	var ioRoot = "r" + ioNode.substr(1);
	var ioTitle = "t" + ioNode.substr(1);
	if (document.getElementById) {
		// create buffer if needed
		if (! document.getElementById ('buffer')) { // if buffer does not already exist
			var buffer = document.createElement('div');
			buffer.setAttribute ('id', 'buffer');
			document.body.appendChild (buffer); // add buffer as last element of body
		}
		// locate relevant info in DOM tree
		var imgNode = document.getElementById (ioWedge);			// wedge image node
		var rootNode = document.getElementById (ioRoot);			// embedding div node
		var spanNode = document.getElementById (ioTitle);			// title span node
		var rootClass = rootNode.className;							// class of root node
		// create request elements
		var serverUrl = 'http://services.activerenderer.com/activeRenderer/';
		var cssClassLevel = rootClass.replace (/[a-z]+/gi, '');		// root node outline level
		var cssClassName = rootClass.replace (/[0-9]+/gi, '');		// root node class radix
		var uniqId = String (Math.random ()).substr(2,5);
		url = escape (url).replace (/\//g, "%2F");
		// test for Mac MSIE
		var macMSIE = navigator.userAgent.search (/MSIE.*Mac/i) + 1;
		var safari = navigator.userAgent.search (/safari/i) + 1;
		if (macMSIE) {
			// open new window for transcluded content
			var xAnchor = screen.width - (640 + 20);
			var yAnchor = 5;
			var xWidth = 640;
			var yHeight = 400;
			var renderRequest = serverUrl + 'render?src=' + url + '&action=submit';
			var w = window.open (renderRequest, 'Related', 'width=' + xWidth + ', left=' + xAnchor + ', height=' + yHeight + ', top=' + yAnchor);
		} else {
			/* expand node
			var title = spanNode.firstChild.data;
			var newTitle = document.createTextNode (title);			// create new heading container
			var expandedNode = document.createElement ('div');		// create embedding element
			expandedNode.setAttribute ('name', 'active');
			expandedNode.setAttribute ('class', 'expanded');
			expandedNode.setAttribute ('id', ioNode);
			expandedNode.style.marginLeft = '15px';
			// imgNode.src = img_rotating;								// update wedge's image
			imgNode.title = 'loading';
			imgNode.parentNode.setAttribute ('href', 'javascript:ioSwitch(\'' + ioNode + '\')');
			spanNode.removeChild (spanNode.firstChild);				// replace heading
			spanNode.appendChild (newTitle);
			rootNode.appendChild (expandedNode);					// insert embedding element
			targetNode = expandedNode;
			targetRoot = imgNode;
		
			// load buffer with rendered outline script
			var theEl=document.createElement('script');
			var renderRequest = serverUrl + 'jsrender?src=' + url + '&action=submit';
			theEl.src = renderRequest;
			document.getElementById('buffer').appendChild(theEl); */
			alert ('RSS inclusion will be here shortly, keep faith :-)');
		}
	}
}
function includeHtml(s) {
	// insert transcluded HTML
	targetNode.innerHTML = s;
	// targetRoot.src = img_collapsed;									// update wedge image
	targetRoot.title = 'collapse';
}