/*	Outliner functions	version: 1.5.6	last modified 23-Feb-2005	created by Marc Barrot, with help from Aaron Straup Cope, DJ Adams, Sjoerd Visscher, Doug Baron and Danny Goodman	component of activeRenderer, copyright 2002-2005 by Precision IT Management,Inc.*/// wedge images caching(new Image (15,15)).src = 'http://radio.weblogs.com/0109157/activeRenderer/img/ol1.gif';(new Image (15,15)).src = 'http://radio.weblogs.com/0109157/activeRenderer/img/ol2.gif';(new Image (15,15)).src = 'http://radio.weblogs.com/0109157/activeRenderer/img/ol3.gif';(new Image (15,15)).src = 'http://radio.weblogs.com/0109157/activeRenderer/img/ol4.gif';(new Image (15,15)).src = 'http://radio.weblogs.com/0109157/activeRenderer/img/ol5.gif';(new Image (15,15)).src = 'http://radio.weblogs.com/0109157/activeRenderer/img/ol6.gif';(new Image (15,15)).src = 'http://radio.weblogs.com/0109157/activeRenderer/img/ol7.gif';(new Image (15,15)).src = 'http://radio.weblogs.com/0109157/activeRenderer/img/ol8.gif';(new Image (15,15)).src = 'http://radio.weblogs.com/0109157/activeRenderer/img/globe.gif';(new Image (15,15)).src = 'http://radio.weblogs.com/0109157/activeRenderer/img/zoomIn.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var winMSIE = isWin & isIE;														// true is Windows MSIE// 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	var wedgeId = "i" + nodeId.substr (1);	var rootId = "r" + nodeId.substr (1);	var refId = "x" + nodeId.substr (1);	var uniqId = String (Math.random ()).substr(2,5);							// unique prefix for media node id	var ioObject = "f" + nodeId.substr (1);	var urlType = 'video/quicktime';	if (url.substring (url.length - 3, url.length) == 'swf') {		urlType = 'application/x-shockwave-flash';	}	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);		mediaNode.id = "r" + uniqId		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')) - 16;		} else {																// or get it a la IE			var border = isWin ? (15 + 4) : 4;			expandedWidth = parseInt (rootNode.offsetWidth) - border;		}		var embeddedstring = '<a href="' + url + '" target="_blank" title="view full size"><img src="/activeRenderer/img/zoomIn.gif" align="right" border="0" alt="view full size"></a><embed name="' + ioObject + '" bgcolor="#ffffff" width="' + expandedWidth + '" type="' + urlType + '" src="' + url + '"></embed>';		mediaNode.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) {	if (url.indexOf ("##") != -1) {												// macros found in the url		var textId = "t" + nodeId.substr (1);		var rootId = "r" + nodeId.substr (1);		var nodeText = document.getElementById (textId).innerHTML;				// get node text		nodeText = nodeText.replace ( / /g, '+');		var docTitle = document.title;											// default title text		if (document.getElementById ('titleDiv')) {								// update title			docTitle = document.getElementById ('titleDiv').innerHTML;		}		docTitle = docTitle.replace ( / /g, '+');		var parentText = '';													// default parent text		if (document.getElementById (rootId) && document.getElementById (rootId).parentNode) {		// update parent			var realNode = document.getElementById (rootId).parentNode;			while (realNode.nodeType && realNode.nodeType != 1) {				// allow for possible blank text before real parent				realNode = realNode.parentNode;			}			if (document.getElementById (rootId).parentNode.id && document.getElementById (rootId).parentNode.id.match (/^p/)) {				var parentTextId = "t" + document.getElementById (rootId).parentNode.id.substr (1);				parentText = document.getElementById (parentTextId).innerHTML;				parentText = parentText.replace ( / /g, '+');			}		}		var previousText = '';													// default previous node text		if (document.getElementById (rootId) && document.getElementById (rootId).previousSibling) {	// update previous			var realNode = document.getElementById (rootId).previousSibling;			while (realNode && realNode.nodeType != 1) {						// allow for possible blank text between siblings				realNode = realNode.previousSibling;			}			if (realNode && realNode.id && realNode.id.match (/^r/)) {				var previousTextId = "t" + realNode.id.substr (1);				previousText = document.getElementById (previousTextId).innerHTML;				previousText = previousText.replace ( / /g, '+');			}		}		var nextText = '';														// default next node text		if (document.getElementById (rootId) && document.getElementById (rootId).nextSibling) {		// update next			var realNode = document.getElementById (rootId).nextSibling;			while (realNode && realNode.nodeType != 1) {						// allow for possible blank text between siblings				realNode = realNode.nextSibling;			}			if (realNode && realNode.id && realNode.id.match (/^r/)) {				var nextTextId = "t" + realNode.id.substr (1);				nextText = document.getElementById (nextTextId).innerHTML;				nextText = nextText.replace ( / /g, '+');			}		}		url = url.replace (/##( *)?self( *)?##/ig, nodeText);					// replace macros		url = url.replace (/##( *)?title( *)?##/ig, docTitle);		url = url.replace (/##( *)?parent( *)?##/ig, parentText);		url = url.replace (/##( *)?previous( *)?##/ig, previousText);		url = url.replace (/##( *)?next( *)?##/ig, nextText);	}	var w = window.open (url, 'linked');										// open link in new window}function sndLoad (nodeId, url) { 												// load sound object at url into browser cache	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 uniqId = String (Math.random ()).substr(2,5);							// unique prefix for media node id	var urlType = 'audio/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);		mediaNode.id = "r" + uniqId		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')) - 16;		} 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 + '" bgcolor="#ffffff" height="16" type="' + urlType + '" src="' + url + '"></embed>';		mediaNode.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;	}}
