function tree(id, pbId) { var element = document.getElementById(id) function hasClass(elem, className) { return new RegExp("(^|\\s)"+className+"(\\s|$)").test(elem.className) } function toggleNode(node) { var newClass = hasClass(node, 'ExpandOpen') ? 'ExpandClosed' : 'ExpandOpen' var re = /(^|\s)(ExpandOpen|ExpandClosed)(\s|$)/ node.className = node.className.replace(re, '$1'+newClass+'$3') } function load(node) { function showLoading(on) { var expand = node.getElementsByTagName('DIV')[0] expand.className = on ? 'ExpandLoading' : 'Expand' } function show_date(responseText, cartParams) { node.getElementsByTagName('UL')[0].innerHTML = responseText; node.isLoaded = true; toggleNode(node); showLoading(false) } showLoading(true) url = "./block.php"; url += "?pb_id="+pbId; url += "&type="+id; url += "&parent_id="+node.id; callAjax(url, show_date, ''); } element.onclick = function(event) { event = event || window.event var clickedElem = event.target || event.srcElement if (!hasClass(clickedElem, 'Expand')) { return } var node = clickedElem.parentNode if (hasClass(node, 'ExpandLeaf')) { return } if (node.isLoaded || node.getElementsByTagName('LI').length) { toggleNode(node); return; } if (node.getElementsByTagName('LI').length) { toggleNode(node); return; } load(node) } }