
// wedge images caching
(new Image (15,15)).src = 'http://hothouse.lowfattech.com/images/ol1.gif';
(new Image (15,15)).src = 'http://hothouse.lowfattech.com/images/ol2.gif';
(new Image (15,15)).src = 'http://hothouse.lowfattech.com/images/ol3.gif';
(new Image (15,15)).src = 'http://hothouse.lowfattech.com/images/ol4.gif';
(new Image (15,15)).src = 'http://hothouse.lowfattech.com/images/ol5.gif';
(new Image (15,15)).src = 'http://hothouse.lowfattech.com/images/ol6.gif';
(new Image (15,15)).src = 'http://hothouse.lowfattech.com/images/ol7.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 = 0;
function switchPreview (checked) {
if (checked) {
nodePreview = 1;
} else {
nodePreview = 0;
}
}
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';
}
}
}
}
}
}
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 = '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);// 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');
}
