/*
	Outliner functions
	version: 1.5.3
	last modified 7-May-2004
	created by Marc Barrot, with help from Aaron Straup Cope, DJ Adams, Sjoerd Visscher, Doug Baron and Danny Goodman
	component of activeRenderer, copyright 2002-2003 by Precision IT Management,Inc.
*/

// wedge images caching
(new Image (15,15)).src = 'http://radio.weblogs.com/0113212/activeRenderer/img/ol1.gif';
(new Image (15,15)).src = 'http://radio.weblogs.com/0113212/activeRenderer/img/ol2.gif';
(new Image (15,15)).src = 'http://radio.weblogs.com/0113212/activeRenderer/img/ol3.gif';
(new Image (15,15)).src = 'http://radio.weblogs.com/0113212/activeRenderer/img/ol4.gif';
(new Image (15,15)).src = 'http://radio.weblogs.com/0113212/activeRenderer/img/ol5.gif';
(new Image (15,15)).src = 'http://radio.weblogs.com/0113212/activeRenderer/img/ol6.gif';
(new Image (15,15)).src = 'http://radio.weblogs.com/0113212/activeRenderer/img/ol7.gif';
(new Image (15,15)).src = 'http://radio.weblogs.com/0113212/activeRenderer/img/globe.gif';

// test browser type
var macMSIE = navigator.userAgent.search (/MSIE.*Mac/i) + 1;	// true if Mac MSIE
var safari = navigator.userAgent.search (/safari/i) + 1;		// true if Safari
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

// nodePreview flag: display node preview when hovering a collapsed wedge if true
var nodePreview = 1;

function switchPreview () {
	var link;

	if (document.getElementById) {
		link = document.getElementById ('preview');
	}

	if (nodePreview == 0) {
		nodePreview = 1;

		if (link) link.innerHTML = 'hide previews';
	} else {
		nodePreview = 0;

		if (link) link.innerHTML = 'show previews';
	}
}


function expand (nodeId) {

	if (document.getElementById) {
		var container = document.getElementById (nodeId);
		var wedgeSpan = document.getElementById ('i' + nodeId.substr (1));

		if (container) {
			wedgeSpan.className = 'openedWedge';
			wedgeSpan.title = 'collapse';
			container.className = 'expanded';
		}
	}
}


function collapse (nodeId) {

	if (document.getElementById) {
		var container = document.getElementById (nodeId);
		var wSpan = document.getElementById ('i' + nodeId.substr (1));
		var nodeList = container.childNodes;

		if (container) {
			wSpan.className = 'closedWedge';
			wSpan.title = 'expand';
			container.className = 'collapsed';

			for (var i = 0; i < nodeList.length; i++) {			// support webOutliner
				if (nodeList[i].nodeType == 1) {
					var textSpan = document.getElementById ('t' + nodeList[i].id.substr (1));
					if (textSpan && textSpan.className == 'selected') textSpan.className = 'clickable';
				}
			}
		}
	}
}


function nodeSwitch (nodeId) {

	if (! nodeId) var nodeId = 'p' + window.event.srcElement.id.substr (1);

	if (nodeId && typeof (nodeId) == 'object') {
		var targetElem = (nodeId.target.nodeType == 3) ? nodeId.target.parentNode : nodeId.target;
		nodeId = 'p' + targetElem.id.substr (1);
	}

	if (document.getElementById) {

		if (document.getElementById ('status')) {
			document.getElementById ('status').innerHTML = 'modified';
		}

		if (document.getElementById (nodeId) !=  null) {
			var nodeState = document.getElementById (nodeId).className;

			if (nodeState == 'collapsed' || nodeState == 'collapsedHigh') {

				if (nodeState == 'collapsedHigh') nodeLow (nodeId);

				expand (nodeId);
			} else {

				if (nodeState == 'expandedHigh') nodeLow (nodeId);

				collapse (nodeId);
			}
		}
	}
}


function nodeHigh (nodeId) {

	if (window.selectedObj && selectedObj.id) return;      // support webOutliner dragging

	if (! nodeId) var nodeId = 'p' + window.event.srcElement.id.substr (1);

	if (nodeId && typeof (nodeId) == 'object') {
		var targetElem = (nodeId.target.nodeType == 3) ? nodeId.target.parentNode : nodeId.target;
		nodeId = 'p' + targetElem.id.substr (1);
	}

	if (document.getElementById && document.getElementById (nodeId) !=  null) {
		var nodeState = document.getElementById (nodeId).className;
		var nodeList = document.getElementById (nodeId).childNodes;

		if (nodeState == 'expanded') {
			document.getElementById (nodeId).className = 'expandedHigh';

			for (var i = 0; i < nodeList.length; i++) {

				if (nodeList[i].nodeType == 1) {
					nodeList[i].className = nodeList[i].className.replace (/^(\D+)/, "$1High");
				}
			}
		} else {

			if (nodeState == 'collapsed') {

				if (window.top.nodePreview == 1) {
					document.getElementById (nodeId).className = 'collapsedHigh';

					for (var i = 0; i < nodeList.length; i++) {

						if (nodeList[i].nodeType == 1) {
							nodeList[i].className = nodeList[i].className.replace (/^(\D+)/, "$1High");
						}
					}
				}
			}
		}
	}
}


function nodeLow (nodeId) {

	if (! nodeId) var nodeId = 'p' + window.event.srcElement.id.substr (1);

	if (nodeId && typeof (nodeId) == 'object') {
		var targetElem = (nodeId.target.nodeType == 3) ? nodeId.target.parentNode : nodeId.target;
		nodeId = 'p' + targetElem.id.substr (1);
	}

	if (document.getElementById && document.getElementById (nodeId) !=  null) {
		var nodeState = document.getElementById (nodeId).className;
		var nodeList = document.getElementById (nodeId).childNodes;

		if (nodeState == 'expandedHigh') {
			document.getElementById (nodeId).className = 'expanded';

			for (var i = 0; i < nodeList.length; i++) {

				if (nodeList[i].nodeType == 1) {
					nodeList[i].className = nodeList[i].className.replace ('High', '');
				}
			}
		} else {

			if (nodeState == 'collapsedHigh') {
				document.getElementById (nodeId).className = 'collapsed';

				for (var i = 0; i < nodeList.length; i++) {

					if (nodeList[i].nodeType == 1) {
						nodeList[i].className = nodeList[i].className.replace ('High', '');
					}
				}
			}
		}
	}
}


function expandAll (outlineId) {

	if (document.getElementsByTagName) {
		nodeList = document.getElementsByTagName ('div');

		for (var i = 0; i < nodeList.length; i++) {
	
			if (nodeList[i].title == outlineId) {
				expand (nodeList[i].id);	
			}
		}
	}
}


function collapseAll (outlineId) {

	if (document.getElementsByTagName) {
		nodeList = document.getElementsByTagName ('div');

		for (var i = 0; i < nodeList.length; i++) {

			if (nodeList[i].title == outlineId) {
				collapse (nodeList[i].id);
			}
		}
	}
}


function normalizeAll (nodeClass) {

	if (document.getElementsByTagName) {
		nodeList = document.getElementsByTagName ('span');

		for (var i = 0; i < nodeList.length; i++) {
	
			if (nodeList[i].className == nodeClass) {
				nodeList[i].style.fontWeight = 'normal';
			}
		}
	}
}


function expandBold (nodeId) {

	wedgeId = "i" + nodeId.substr (1);
	textId = "t" + nodeId.substr (1);

	if (document.getElementById && document.getElementById (nodeId) != null) {
		document.getElementById (wedgeId).className = 'openedWedge';
		document.getElementById (wedgeId).title='collapse';
		document.getElementById (textId).style.fontWeight = 'bold';
		document.getElementById (nodeId).className='expanded';
	}
}

function expandByDate (node) {

	var nodeList = node.childNodes;

	for (var i=0; i < nodeList.length; i++ ) {
	
		if (nodeList[i].nodeType == 1 && nodeList[i].tagName.toLowerCase () == 'div') {

			if (nodeList[i].title == 'item') {
				expandBold (nodeList[i].id);
			} else {
				expandByDate (nodeList[i]);
			}
		}
	}
}


function daySwitch (postDate) {

	var hasItems = 0;

	if (document.getElementsByTagName) {
		nodeList = document.getElementsByTagName ('span');

		for (var i = 0; i < nodeList.length; i++) {
	
			if (nodeList[i].className == 'itemTitle') {
				hasItems = 1;
				break;
			}
		}
	}
	
	if (hasItems) {
		collapseAll ('item');
		normalizeAll ('itemTitle');

		if (document.getElementById) {
			expandByDate (document.getElementById (postDate));
		}
	}
	else {
		collapseAll ('day');
		nodeSwitch (postDate);
	}
}

function wedgeSwitch (outlineId) {

	if (document.getElementsByTagName) {
		nodeList = document.getElementsByTagName ('span');

		for (var i = 0; i < nodeList.length; i++) {

			if (nodeList[i].className && nodeList[i].className.indexOf ("Wedge") != -1) {

				if (nodeList[i].parentNode.parentNode.className.replace (/[0-9]+/, '') == outlineId) {

					if (nodeList[i].style.visibility == 'hidden') {
						nodeList[i].style.visibility = 'visible';
					} else {
						nodeList[i].style.visibility = 'hidden';
					}
				}
			}
		}
	}

	if (document.getElementById) {

		var link = document.getElementById ('hide');

		if (link) {

			if (link.innerHTML == 'hide wedges') {
				link.innerHTML = 'show wedges';
			} else {
				link.innerHTML = 'hide wedges';
			}
		}
	}
}


var targetNode;
var targetRoot;

function transclude (nodeId, url, ctx) {

	var wedgeId = "i" + nodeId.substr (1);
	var rootId = "r" + nodeId.substr (1);
	var refId = "x" + nodeId.substr (1);
	var context;
	
	(ctx) ? context = '&' + ctx + '=yes' : context = '';
	
	if (document.getElementById) {

		if (! document.getElementById ('buffer')) {					// create buffer if needed
			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 wedgeNode = document.getElementById (wedgeId);			// wedge image node
		var rootNode = document.getElementById (rootId);			// embedding div node
		var rootClass = rootNode.className;							// class of root node

		// create request elements
		var serverUrl = '/activeRenderer/';

		if (! document.getElementById ('served'))
			serverUrl = 'http://services.activerenderer.com' + serverUrl;

		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);			// unique prefix for transcluded node ids

		if (macMSIE || safari) {

			// 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 + '&flDisplayHTMLWedge=yes&action=render';
			window.open (renderRequest, 'Related', 'width=' + xWidth + ', left=' + xAnchor + ', height=' + yHeight + ', top=' + yAnchor);

		} else {

			// expand node
			wedgeNode.className = 'pendingWedge';						// update wedge's image
			wedgeNode.title = 'loading...';
			wedgeNode.onmouseover = '';
			wedgeNode.onmouseout = '';
			wedgeNode.setAttribute ('source', url);
			var expandedNode = document.createElement ('div');		// create embedding element
			expandedNode.id = nodeId;
			expandedNode.className ='expanded';
			expandedNode.title = cssClassName;
			rootNode.appendChild (expandedNode);					// insert embedding element
			targetNode = expandedNode;
			targetRoot = wedgeNode;
		
			// load buffer with rendered outline script
			var renderRequest = serverUrl + 'jsrender/?src=' + url + '&cssClassName=' + cssClassName + '&cssClassLevel=' + cssClassLevel + '&uniqId=' + uniqId + context + '&flDisplayHTMLWedge=yes&action=submit';
			var theEl = document.createElement ('script');
			theEl.src = renderRequest;
			document.getElementById ('buffer').appendChild (theEl);
		}
	}
}

function includeHtml (s) {

	var nodeId = "p" + targetRoot.id.substr (1);
	targetRoot.className = 'openedWedge';								// update wedge image
	targetRoot.title = 'collapse';
	targetRoot.onmouseover = nodeHigh;
	targetRoot.onmouseout = nodeLow;
	targetRoot.setAttribute ('onclick', '');
	targetRoot.onclick = nodeSwitch;
	targetNode.innerHTML = s;										// insert transcluded HTML
}


function imgLoad (nodeId, url) { 									// load image at url into browser cache

	var wedgeId = "i" + nodeId.substr (1);

	if (document.getElementById) {									// update wedge's image
		var wedgeNode = document.getElementById (wedgeId);
		wedgeNode.className = 'pendingWedge';
		wedgeNode.title = 'loading...';
		wedgeNode.source = url;										// create custom attribute for transcluded content's source
	}

   	cachedImg.nodeId = nodeId;										// load image in cache
   	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 nodeId = cachedImg.nodeId;
	var wedgeId = "i" + nodeId.substr (1);
	var rootId = "r" + nodeId.substr (1);
	var refId = "x" + nodeId.substr (1);

	if (document.getElementById) {

		// locate relevant info in DOM tree
		var wedgeNode = document.getElementById (wedgeId);			// wedge image node
		var rootNode = document.getElementById (rootId);			// embedding div node
		var rootClass = rootNode.className;							// class of root node
		var cssClassLevel = rootClass.replace (/[a-z]+/gi, '');		// root node outline level
		var cssClassName = rootClass.replace (/[0-9]+/gi, '');		// root node class radix

		//expand node
		var expandedNode = document.createElement ('div');			// create embedding div
		expandedNode.id = cachedImg.nodeId;
		expandedNode.className = 'expanded';
		expandedNode.title = 'active';
		rootNode.appendChild (expandedNode);						// insert embedding element

		var mediaNode = document.createElement ('div');				// create embedding div for transcluded media
		mediaNode.className = cssClassName + String (Number (cssClassLevel) + 1);
		expandedNode.appendChild (mediaNode);						// insert embedding div for transcluded media

		var includedLink = document.createElement ('a');			// create a link for the included image
		includedLink.href = cachedImg.src;
		includedLink.target = '_blank';
		includedLink.title = 'view full size';
		mediaNode.appendChild (includedLink);						// insert link

		var includedImg = document.createElement ('img');			// create the transcluded image
		includedImg.border = '0';
		includedImg.hspace = '0';
		includedImg.vspace = '8';
		includedImg.alt = 'included image';
		includedImg.src = cachedImg.src;							// set the image's url
		var expandedWidth;

		if (document.defaultView && document.defaultView.getComputedStyle) {	// get embedding element's width
			expandedWidth = parseInt (document.defaultView.getComputedStyle (expandedNode, '').getPropertyValue ('width'));
		} else {
			expandedWidth = parseInt (rootNode.offsetWidth) - (16 + 4);
		}

		if (expandedWidth < cachedImg.width) {						// adjust size if greater than embedding element
			includedImg.width = expandedWidth;
			includedImg.height = (cachedImg.height / cachedImg.width) * expandedWidth;
		}

		includedLink.appendChild (includedImg);						// insert image

		// update wedge
		wedgeNode.className = 'openedWedge';
		wedgeNode.title = 'collapse';
		wedgeNode.setAttribute ('source', cachedImg.src);			// create custom attribute for transcluded content's source
		wedgeNode.setAttribute ('onclick', '');
		wedgeNode.onclick = nodeSwitch;
		wedgeNode.onmouseover = nodeHigh;
		wedgeNode.onmouseout = nodeLow;
	}
}


function mmLoad (nodeId, url) { 									// load multimedia object at url into browser cache

	if (safari) {
		window.open (url, 'Movie');
	} else {
		var wedgeId = "i" + nodeId.substr (1);
		var rootId = "r" + nodeId.substr (1);
		var refId = "x" + nodeId.substr (1);
		var ioObject = "f" + nodeId.substr (1);

		var urlType = 'application/x-shockwave-flash';

		if (url.substring (url.length - 3, url.length) == 'mov') {
			urlType = 'video/quicktime';
		}

		if (document.getElementById) {

			// locate relevant info in DOM tree
			var wedgeNode = document.getElementById (wedgeId);			// wedge image element
			var rootNode = document.getElementById (rootId);			// embedding div node
			var rootClass = rootNode.className;							// class of root node
			var cssClassLevel = rootClass.replace (/[a-z]+/gi, '');		// root node outline level
			var cssClassName = rootClass.replace (/[0-9]+/gi, '');		// root node class radix

			// expand node
			var expandedNode = document.createElement ('div');
			expandedNode.id = nodeId;
			expandedNode.className = 'expanded';
			expandedNode.title = 'active';
			rootNode.appendChild (expandedNode);						// insert embedding element

			var mediaNode = document.createElement ('div');				// create embedding div for transcluded media
			mediaNode.className = cssClassName + String (Number (cssClassLevel) + 1);

			if ( macMSIE ) {											// use top margin if Mac MSIE
				mediaNode.style.marginTop = '4px';
			} else {
				mediaNode.style.marginTop = '0px';
			}

			expandedNode.appendChild (mediaNode);						// insert embedding div for transcluded media

			var expandedWidth;

			if (document.defaultView && document.defaultView.getComputedStyle) {	// get embedding element's width W3C style
				expandedWidth = parseInt (document.defaultView.getComputedStyle (expandedNode, '').getPropertyValue ('width'));
			} else {													// or get it a la IE
				var border = isWin ? (15 + 4) : 4;
				expandedWidth = parseInt (rootNode.offsetWidth) - border;
			}

			var embeddedstring = '<embed name="' + ioObject + '" width="' + expandedWidth + '" type="' + urlType + '" src="' + url + '"></embed>';
			expandedNode.innerHTML = embeddedstring;

			// update wedge
			wedgeNode.className = 'openedWedge';
			wedgeNode.title = 'collapse';
			wedgeNode.setAttribute ('source', url);						// create custom attribute for transcluded content's source
			wedgeNode.setAttribute ('onclick', '');
			wedgeNode.onclick = nodeSwitch;
			wedgeNode.onmouseover = nodeHigh;
			wedgeNode.onmouseout = nodeLow;
		}
	}
}

function pageLoad (nodeId, url) {
	var w = window.open (url, 'linked');
}