var browserId = "w3c"; if (document.all) browserId = "ie"; document.write(''); //////////////////////////////////////////////////////////////////////////////////////////////////// // DOM Iteration function $(id) { return document.getElementById(id); } function findNode(node, criteria, container) { while (node) { if (criteria(node)) return node; node = findNext(node, container); } return null; } function findNodeUp(node, criteria) { while (node) { if (criteria(node)) return node; node = node.parentNode; } return null; } function findNext(node, container) { var next = node.firstChild; if (next) return next; while (node && node != container) { next = node.nextSibling; if (next) return next; node = node.parentNode; } return null; } function getElementByClass(root, className) { return findNode(root, function(node) { return node.nodeType == 1 && hasClass(node, className) }); } function clearChildren(node) { while (node.firstChild) node.removeChild(node.firstChild); } //////////////////////////////////////////////////////////////////////////////////////////////////// // Serialization function toInnerXML(aElt) { var xml = ""; var child = aElt.firstChild; while (child) { xml += toXML(child); child = child.nextSibling; } return xml; } function toXML(aElt) { if (aElt.nodeType == 1) { var xml = "<" + aElt.nodeName; var child = aElt.firstChild; if (child) { xml += ">"; while (child) { if (child.nodeType == 1) { // element node xml += toInnerXML(child); } else if (child.nodeType == 3) { // text node xml += child.nodeValue; } child = child.nextSibling; } xml += ""; } else { xml += "/>"; } return xml; } else { return aElt.nodeValue; } } //////////////////////////////////////////////////////////////////////////////////////////////////// // Classes function addClass(elt, className) { if (elt.className) { var classes = elt.className.split(" "); if (className in classes) return; for (var i in classes) className += " " + classes[i]; } elt.className = className; } function setClass(elt, className) { if (!hasClass(elt)) addClass(elt, className); } function toggleClass(elt, className) { if (hasClass(elt, "toggled")) removeClass(elt, "toggled"); else addClass(elt, "toggled"); } function removeClass(elt, className) { if (!elt.className) return; var classes = elt.className.split(" "); for (var i in classes) { if (classes[i] == className) classes.splice(i, 1); } var classNames = ""; for (var i in classes) classNames += classes[i] + " "; elt.className = classNames; } function hasClass(elt, className) { if (elt.className) { var classes = elt.className.split(" "); for (var i in classes) { if (classes[i] == className) return true; } } return false; } //////////////////////////////////////////////////////////////////////////////////////////////////// // Positioning function getClientOffset(elt) { function addOffset(elt, coords, addStyle) { var style = computeStyle(elt); if (addStyle && style.position != "absolute") { coords.x += parseInt(style.marginLeft) + parseInt(style.borderLeftWidth); coords.y += parseInt(style.marginTop) + parseInt(style.borderTopWidth); } if (elt.offsetLeft) coords.x += elt.offsetLeft; if (elt.offsetTop) coords.y += elt.offsetTop; if (elt.offsetParent && elt.offsetParent.nodeType == 1) addOffset(elt.offsetParent, coords, false); } var coords = { x: 0, y: 0 }; addOffset(elt, coords); return coords; } //////////////////////////////////////////////////////////////////////////////////////////////////// // Events function registerPopup(popupElt) { function onClick(event) { popupElt.style.visibility = "collapse"; removeListener(window, "click", onClick, true); } addListener(window, "click", onClick, true); }