function autoInit_trees() { var candidates = document.getElementsByTagName('ul'); for(var i=0;i<candidates.length;i++) { if(candidates[i].className && candidates[i].className.indexOf('tree') != -1) { initTree(candidates[i]); candidates[i].className = candidates[i].className.replace(/ ?unformatted ?/, ' ');}
}
}
function initTree(el) { var i,j; var spanA, spanB, spanC; var startingPoint, stoppingPoint, childUL; for(i=0;i<el.childNodes.length;i++) { if(el.childNodes[i].tagName && el.childNodes[i].tagName.toLowerCase() == 'li') { var li = el.childNodes[i]; spanA = document.createElement('span'); spanB = document.createElement('span'); spanC = document.createElement('span'); spanA.appendChild(spanB); spanB.appendChild(spanC); spanA.className = 'a ' + li.className.replace('closed','spanClosed'); spanA.onMouseOver = function() {}
spanB.className = 'b'; spanB.onclick = treeToggle; spanC.className = 'c'; stoppingPoint = li.childNodes.length; startingPoint = 0; childUL = null; for(j=0;j<li.childNodes.length;j++) { if(li.childNodes[j].tagName && li.childNodes[j].tagName.toLowerCase() == 'div') { startingPoint = j + 1; continue;}
if(li.childNodes[j].tagName && li.childNodes[j].tagName.toLowerCase() == 'ul') { childUL = li.childNodes[j]; stoppingPoint = j; break;}
}
for(j=startingPoint;j<stoppingPoint;j++) { spanC.appendChild(li.childNodes[startingPoint]);}
if(li.childNodes.length > startingPoint) li.insertBefore(spanA, li.childNodes[startingPoint]); else li.appendChild(spanA); if(childUL != null) { if(initTree(childUL)) { addClass(li, 'children', 'closed'); addClass(spanA, 'children', 'spanClosed');}
}
}
}
if(li) { addClass(li, 'last', 'closed'); addClass(spanA, 'last', 'spanClosed'); return true;} else { return false;}
}
function treeToggle(el, force) { el = this; while(el != null && (!el.tagName || el.tagName.toLowerCase() != "li")) el = el.parentNode; var childSet = findChildWithTag(el, 'ul'); var topSpan = findChildWithTag(el, 'span'); if( force != null ){ if( force == "open"){ treeOpen( topSpan, el )
}
else if( force == "close" ){ treeClose( topSpan, el )
}
}
else if( childSet != null) { if(!el.className.match(/(^| )closed($| )/)) { treeClose( topSpan, el )
} else { treeOpen( topSpan, el )
}
}
}
function treeOpen( a, b ){ removeClass(a,'spanClosed'); removeClass(b,'closed');}
function treeClose( a, b ){ addClass(a,'spanClosed'); addClass(b,'closed');}
function findChildWithTag(el, tag) { for(var i=0;i<el.childNodes.length;i++) { if(el.childNodes[i].tagName != null && el.childNodes[i].tagName.toLowerCase() == tag) return el.childNodes[i];}
return null;}
function addClass(el, cls, forceBefore) { if(forceBefore != null && el.className.match(new RegExp('(^| )' + forceBefore))) { el.className = el.className.replace(new RegExp("( |^)" + forceBefore), '$1' + cls + ' ' + forceBefore);} else if(!el.className.match(new RegExp('(^| )' + cls + '($| )'))) { el.className += ' ' + cls; el.className = el.className.replace(/(^ +)|( +$)/g, '');}
}
function removeClass(el, cls) { var old = el.className; var newCls = ' ' + el.className + ' '; newCls = newCls.replace(new RegExp(' (' + cls + ' +)+','g'), ' '); el.className = newCls.replace(/(^ +)|( +$)/g, '');}
