var ELEMENT_NODE = 1; var _init_togglers = new Array(); function _toggler_getToggleItemParams(class_string) { var element_classes = class_string.split(/\s+/); var params = new Array(); for (var i = 0; i < element_classes.length; i++) { if (element_classes[i].indexOf("toggler-") == 0) { params = element_classes[i].split("-"); break; } } return params; } function _toggler_toggleElement(element, toggler_id, status) { var params = _toggler_getToggleItemParams(element.className); var re = new RegExp(toggler_id + "$", "i"); if ((params.length > 0) && (params[1] != "parent") && element.getAttribute("id").match(re) && params[2] != "stable") { if ((params[2] == "expanded" && status) || (params[2] == "collapsed" && !status) || ((params[2] != "expanded" && params[2] != "collapsed") && status)) { element.style.display = "none"; } else { element.style.display = params[1]; } } return; } function _toggler_toggleTree(element, toggler_id, status) { var elem = element; for (var i = 0; i < elem.childNodes.length; i++) { var child = elem.childNodes.item(i); if (child.nodeType == ELEMENT_NODE) { _toggler_toggleTree(child, toggler_id, status); } } _toggler_toggleElement(element, toggler_id, status); return; } function _toggler_deduceToggleId(element) { var togglee_id = ""; var toggler_id = element.getAttribute("id"); var togglee_id_offset = toggler_id.indexOf("toggler_expanded_"); if (togglee_id_offset >= 0) { togglee_id_offset += "toggler_expanded_".length; } else { togglee_id_offset = toggler_id.indexOf("toggler_collapsed_"); if (togglee_id_offset >= 0) { togglee_id_offset += "toggler_collapsed_".length; } else { togglee_id_offset = toggler_id.indexOf("toggler_parent_"); if (togglee_id_offset >= 0) { togglee_id_offset += "toggler_parent_".length; } else { togglee_id_offset = toggler_id.indexOf("toggler_block_"); if (togglee_id_offset >= 0) { togglee_id_offset += "toggler_block_".length; } else { togglee_id_offset = toggler_id.indexOf("toggler_element_"); if (togglee_id_offset >= 0) { togglee_id_offset += "toggler_element_".length; } } } } } if (togglee_id_offset >= 0) { togglee_id = toggler_id.substring(togglee_id_offset); } return togglee_id; } function toggler_clickHandler(element) { var params = _toggler_getToggleItemParams(element.className); if (params.length > 0) { var togglee_id = _toggler_deduceToggleId(element); if (togglee_id == "") { /* Failed to get the togglee id */ return false; } var toggle_block_parent; if (params[1] == "parent") { toggle_block_parent = element; } else { toggle_block_parent = document.getElementById("toggler_parent_" + togglee_id); } if (!toggle_block_parent) { toggle_block_parent = document.body; } /* The main togglable block */ var togglee = document.getElementById(togglee_id); if (!togglee) { togglee = document.getElementById("toggler_block_" + togglee_id); } /* Toggle status (false - collapsed, true - expanded */ var status = (togglee.style.display != 'none'); _toggler_toggleTree(toggle_block_parent, togglee_id, status); _toggler_toggleElement(togglee, togglee_id, status); return true; } return false; } function _toggler_init(parent) { var toggle_block_parent = document.getElementById(parent); var togglee_id = _toggler_deduceToggleId(toggle_block_parent); if (togglee_id == "") { /* Failed to get the togglee id */ return false; } _init_togglers.push( { tree_parent_elem: toggle_block_parent, togglee_id: togglee_id }); return true; } function init_togglers() { for (var i = 0; i < _init_togglers.length; i++) { /* The main togglable block */ var togglee = document.getElementById(_init_togglers[i].togglee_id); if (!togglee) { togglee = document.getElementById("toggler_block_" + _init_togglers[i].togglee_id); } var params = _toggler_getToggleItemParams(togglee.className); if (params.length > 1) { var status = true; // overall default is collapsed if (params[2] == "initcollapsed") { status = true; } else if (params[2] == "initexpanded") { status = false; } _toggler_toggleTree(_init_togglers[i].tree_parent_elem, _init_togglers[i].togglee_id, status); _toggler_toggleElement(togglee, _init_togglers[i].togglee_id, status); } } _init_togglers = new Array(); }