/*	Outliner functions	version: 1.5.2	last modified 18-Nov-2003	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://blogs.salon.com/0001147/activeRenderer/img/ol1.gif';(new Image (15,15)).src = 'http://blogs.salon.com/0001147/activeRenderer/img/ol2.gif';(new Image (15,15)).src = 'http://blogs.salon.com/0001147/activeRenderer/img/ol3.gif';(new Image (15,15)).src = 'http://blogs.salon.com/0001147/activeRenderer/img/ol4.gif';(new Image (15,15)).src = 'http://blogs.salon.com/0001147/activeRenderer/img/ol5.gif';(new Image (15,15)).src = 'http://blogs.salon.com/0001147/activeRenderer/img/ol6.gif';(new Image (15,15)).src = 'http://blogs.salon.com/0001147/activeRenderer/img/ol7.gif';(new Image (15,15)).src = 'http://blogs.salon.com/0001147/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 wedgeSpan = document.getElementById ('i' + nodeId.substr (1));		var nodeList = container.childNodes;		if (container) {			wedgeSpan.className = 'closedWedge';			wedgeSpan.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');}