/** * initializes the toc with +/- bullets, and hooks click handlers */ function makeTocInteractive(documentMapPanel) { var lists = documentMapPanel.getElementsByTagName("ul"); for (iLists = 0; iLists < lists.length; iLists++) { if (lists[iLists].className=='toc') { // traverse children finding a.className=parent: var anchors = lists[iLists].getElementsByTagName("a"); for (iAnchors=0; iAnchors < anchors.length; iAnchors++) { if (anchors[iAnchors].className=='parent') { var parent = anchors[iAnchors]; var ul = getListForParent(parent); //we leave the list expanded initially incase browser doesn't run javascript, we collapse in javascript. ul.className = 'collapsed'; var img = fixImageForParent(parent); if (img !=null && parent != null && ul != null) img.onclick=parent_onclick; } } } } } /** * a click handler for the "parent" anchor of a list. */ function parent_onclick(evt) { var toc = document.getElementById("toc"); toc.style.display = 'none'; if (evt == null) evt = window.event; var parent = evt.target; if (parent == null) parent = evt.srcElement; var li = parent.parentNode; var anchors = li.getElementsByTagName("a"); var listForParent = getListForParent(anchors[0]); if (listForParent.className=='collapsed') listForParent.className=''; else listForParent.className='collapsed'; fixImageForParent(anchors[0]); toc.style.display = ''; } /** * ensures the bullet for a parent anchor is in the correct state */ function fixImageForParent(parent) { var img = parent.previousSibling; while (img != null && img.nodeType != 1 && img.nodeName.toLowerCase() != 'img') { img = img.previousSibling; } if (img == null) { img = document.createElement('img'); img.style.marginRight='.4em'; img.style.verticalAlign='middle'; parent.parentNode.insertBefore(img, parent); } var listForParent = getListForParent(parent); var isCollapsed = listForParent != null && listForParent.className == 'collapsed'; if (isCollapsed) img.src = "/CoreHandler.ashx?rs:Command=GetResourceItem&ResourceName=Plus.PNG"; else img.src = "/CoreHandler.ashx?rs:Command=GetResourceItem&ResourceName=Minus.PNG"; return img; } /** * gets a list associated with the specified parent anchor if there is one. otherwise null is returned. */ function getListForParent(parent) { var ul = parent.nextSibling; while (ul != null && ul.nodeType != 1 && ul.nodeName.toLowerCase() != 'ul') { ul = ul.nextSibling; } return ul; } /** * simple assert util */ function assert(fact) { if (!fact) alert('assert'); }