// Developed by Robert Nyman/DOMAssistant team, code/licensing: http://code.google.com/p/domassistant/, documentation: http://www.domassistant.com/documentation, version 2.7.3 var DOMAssistant = function () { var HTMLArray = function () { // Constructor }; var isIE = /*@cc_on!@*/false; var ie5 = isIE && parseFloat(navigator.appVersion) < 6; var tagCache = {}, lastCache = {}, useCache = true; var camel = { "accesskey": "accessKey", "class": "className", "colspan": "colSpan", "for": "htmlFor", "maxlength": "maxLength", "readonly": "readOnly", "rowspan": "rowSpan", "tabindex": "tabIndex", "valign": "vAlign", "cellspacing": "cellSpacing", "cellpadding": "cellPadding" }; var regex = { rules: /\s*(,)\s*/g, selector: /^(\w+)?(#[\w\u00C0-\uFFFF\-\_]+|(\*))?((\.[\w\u00C0-\uFFFF\-_]+)*)?((\[\w+\s*(\^|\$|\*|\||~)?(=\s*([\w\u00C0-\uFFFF\s\-\_\.]+|"[^"]*"|'[^']*'))?\]+)*)?(((:\w+[\w\-]*)(\((odd|even|\-?\d*n?((\+|\-)\d+)?|[\w\u00C0-\uFFFF\-_\.]+|"[^"]*"|'[^']*'|((\w*\.[\w\u00C0-\uFFFF\-_]+)*)?|(\[#?\w+(\^|\$|\*|\||~)?=?[\w\u00C0-\uFFFF\s\-\_\.\'\"]+\]+)|(:\w+[\w\-]*))\))?)*)?(>|\+|~)?/, id: /^#([\w\u00C0-\uFFFF\-\_]+)$/, tag: /^(\w+)/, relation: /^(>|\+|~)$/, pseudo: /^:(\w[\w\-]*)(\((.+)\))?$/, pseudos: /:(\w[\w\-]*)(\(([^\)]+)\))?/g, attribs: /\[(\w+)\s*(\^|\$|\*|\||~)?=?\s*([\w\u00C0-\uFFFF\s\-_\.]+|"[^"]*"|'[^']*')?\]/g, classes: /\.([\w\u00C0-\uFFFF\-_]+)/g, quoted: /^["'](.*)["']$/, nth: /^((odd|even)|([1-9]\d*)|((([1-9]\d*)?)n([\+\-]\d+)?)|(\-(([1-9]\d*)?)n\+(\d+)))$/ }; var pushAll = function (set1, set2) { set1.push.apply(set1, [].slice.apply(set2)); return set1; }; if (isIE) { pushAll = function (set1, set2) { if (set2.slice) { return set1.concat(set2); } var i=0, item; while ((item = set2[i++])) { set1[set1.length] = item; } return set1; }; } var contains = function (array, value) { if (array.indexOf) { return array.indexOf(value) >= 0; } for (var i=0, iL=array.length; i add)? (start - add) % add : ((start === add)? 0 : start); } else if (pseudoValue[8]) { // -an+b add = pseudoValue[10]? parseInt(pseudoValue[10], 10) : 1; start = max = parseInt(pseudoValue[11], 10); while (start > add) { start -= add; } modVal = (max > add)? (max - add) % add : ((max === add)? 0 : max); } return { start: start, add: add, max: max, modVal: modVal }; }, cssByDOM : function (cssRule) { var cssRules = cssRule.replace(regex.rules, "$1").split(","); var elm = new HTMLArray(), prevElm = [], matchingElms = []; var selectorSplitRegExp, prevParents, currentRule, cssSelectors, childOrSiblingRef, nextTag, nextRegExp, current, previous, prevParent, notElm, addElm, iteratorNext, childElm, sequence; try { selectorSplitRegExp = new RegExp("(?:\\[[^\\[]*\\]|\\(.*\\)|[^\\s\\+>~\\[\\(])+|[\\+>~]", "g"); } catch (e) { selectorSplitRegExp = /[^\s]+/g; } function clearAdded (elm) { elm = elm || prevElm; for (var n=0, nl=elm.length; n -1; }, other: function(el) { return getAttr(previous, pseudoClass) === pseudoValue; } }; function basicMatch(key) { while ((previous=previousMatch[idx++])) { if (match[key](previous)) { matchingElms[matchingElms.length] = previous; } } return matchingElms; } var word = pseudo[0] || null; if (word && match[word]) { return basicMatch(word); } switch (word) { case "only": var kParent; while ((previous=previousMatch[idx++])) { prevParent = previous.parentNode; if (prevParent !== kParent) { if (!getPrevElm(previous) && !getNextElm(previous)) { matchingElms[matchingElms.length] = previous; } kParent = prevParent; } } break; case "nth": if (/^n$/.test(pseudoValue)) { matchingElms = previousMatch; } else { var direction = (pseudo[1] === "last")? ["lastChild", "previousSibling"] : ["firstChild", "nextSibling"]; sequence = DOMAssistant.getSequence.call(this, pseudoValue); if (sequence) { while ((previous=previousMatch[idx++])) { prevParent = previous.parentNode; if (!prevParent.childElms) { var childCount = 0, p = previous.nodeName; iteratorNext = sequence.start; childElm = prevParent[direction[0]]; while (childElm && (sequence.max < 0 || iteratorNext <= sequence.max)) { var c = childElm.nodeName; if ((checkNodeName && c === p) || (!checkNodeName && childElm.nodeType === 1)) { if (++childCount === iteratorNext) { if (c === p) { matchingElms[matchingElms.length] = childElm; } iteratorNext += sequence.add; } } childElm = childElm[direction[1]]; } prevParent.childElms = true; prevParents[prevParents.length] = prevParent; } } clearChildElms(); } } break; case "target": var hash = document.location.hash.slice(1); if (hash) { while ((previous=previousMatch[idx++])) { if (getAttr(previous, "name") === hash || getAttr(previous, "id") === hash) { matchingElms[matchingElms.length] = previous; break; } } } break; case "not": if ((recur = regex.pseudo.exec(pseudoValue))) { matchingElms = subtractArray(previousMatch, getElementsByPseudo(previousMatch, recur[1]? recur[1].toLowerCase() : null, recur[3] || null)); } else { for (var re in regex) { if (regex[re].lastIndex) { regex[re].lastIndex = 0; } } pseudoValue = pseudoValue.replace(regex.id, "[id=$1]"); var notTag = regex.tag.exec(pseudoValue); var notClass = regex.classes.exec(pseudoValue); var notAttr = regex.attribs.exec(pseudoValue); var notRegExp = new RegExp(notAttr? attrToRegExp(notAttr[3], notAttr[2]) : "(^|\\s)" + (notTag? notTag[1] : notClass? notClass[1] : "") + "(\\s|$)", "i"); while ((notElm=previousMatch[idx++])) { addElm = null; if (notTag && !notRegExp.test(notElm.nodeName)) { addElm = notElm; } else if (notClass && !notRegExp.test(notElm.className)) { addElm = notElm; } else if (notAttr) { var att = getAttr(notElm, notAttr[1]); if (!att || !notRegExp.test(att)) { addElm = notElm; } } if (addElm && !addElm.added) { addElm.added = true; matchingElms[matchingElms.length] = addElm; } } } break; default: return basicMatch("other"); } return matchingElms; } for (var a=0; (currentRule=cssRules[a]); a++) { if (a && contains(cssRules.slice(0, a), currentRule)) { continue; } prevElm = [this]; cssSelectors = currentRule.match(selectorSplitRegExp); for (var i=0, rule; (rule=cssSelectors[i]); i++) { matchingElms = []; if (i > 0 && regex.relation.test(rule)) { if ((childOrSiblingRef = regex.relation.exec(rule))) { var idElm = null, nextWord = cssSelectors[i+1]; if ((nextTag = regex.tag.exec(nextWord))) { nextTag = nextTag[1]; nextRegExp = new RegExp("(^|\\s)" + nextTag + "(\\s|$)", "i"); } else if (regex.id.test(nextWord)) { idElm = DOMAssistant.$(nextWord) || null; } for (var j=0, prevRef; (prevRef=prevElm[j]); j++) { switch (childOrSiblingRef[0]) { case ">": var children = idElm || getElementsByTagName(nextTag, prevRef); for (var k=0, child; (child=children[k]); k++) { if (child.parentNode === prevRef) { matchingElms[matchingElms.length] = child; } } break; case "+": while ((prevRef = prevRef.nextSibling) && prevRef.nodeType !== 1) {} if (prevRef) { if ((idElm && idElm[0] === prevRef) || (!idElm && (!nextTag || nextRegExp.test(prevRef.nodeName)))) { matchingElms[matchingElms.length] = prevRef; } } break; case "~": while ((prevRef = prevRef.nextSibling) && !prevRef.added) { if ((idElm && idElm[0] === prevRef) || (!idElm && (!nextTag || nextRegExp.test(prevRef.nodeName)))) { prevRef.added = true; matchingElms[matchingElms.length] = prevRef; } } break; } } prevElm = matchingElms; clearAdded(); rule = cssSelectors[++i]; if (/^\w+$/.test(rule) || regex.id.test(rule)) { continue; } prevElm.skipTag = true; } } var cssSelector = regex.selector.exec(rule); var splitRule = { tag : (!cssSelector[1] || cssSelector[3] === "*")? "*" : cssSelector[1], id : (cssSelector[3] !== "*")? cssSelector[2] : null, allClasses : cssSelector[4], allAttr : cssSelector[6], allPseudos : cssSelector[11] }; if (splitRule.id) { var u = 0, DOMElm = document.getElementById(splitRule.id.replace(/#/, "")); if (DOMElm) { while (prevElm[u] && !isDescendant(DOMElm, prevElm[u])) { u++; } matchingElms = (u < prevElm.length)? [DOMElm] : []; } prevElm = matchingElms; } else if (splitRule.tag && !prevElm.skipTag) { if (i===0 && !matchingElms.length && prevElm.length === 1) { prevElm = matchingElms = pushAll([], getElementsByTagName(splitRule.tag, prevElm[0])); } else { for (var l=0, ll=prevElm.length, tagCollectionMatches, tagMatch; l~\\[\\(])+|[\\+>~]", "g"); function attrToXPath (match, p1, p2, p3) { p3 = p3? p3.replace(regex.quoted, "$1") : p3; switch (p2) { case "^": return "starts-with(@" + p1 + ", \"" + p3 + "\")"; case "$": return "substring(@" + p1 + ", (string-length(@" + p1 + ") - " + (p3.length - 1) + "), " + p3.length + ") = \"" + p3 + "\""; case "*": return "contains(concat(\" \", @" + p1 + ", \" \"), \"" + p3 + "\")"; case "|": return "(@" + p1 + "=\"" + p3 + "\" or starts-with(@" + p1 + ", \"" + p3 + "-\"))"; case "~": return "contains(concat(\" \", @" + p1 + ", \" \"), \" " + p3 + " \")"; default: return "@" + p1 + (p3? "=\"" + p3 + "\"" : ""); } } function attrToXPathB (match, p1, p2, p3) { return "[" + attrToXPath(match, p1, p2, p3) + "]"; } function pseudoToXPath (tag, pseudoClass, pseudoValue) { tag = /\-child$/.test(pseudoClass)? "*" : tag; var xpath = "", pseudo = pseudoClass.split("-"), recur; switch (pseudo[0]) { case "nth": if (!/^n$/.test(pseudoValue)) { var position = ((pseudo[1] === "last")? "(count(following-sibling::" : "(count(preceding-sibling::") + tag + ") + 1)"; if ((sequence = DOMAssistant.getSequence.call(this, pseudoValue))) { xpath = (sequence.start === sequence.max)? position + " = " + sequence.start : position + " mod " + sequence.add + " = " + sequence.modVal + ((sequence.start > 1)? " and " + position + " >= " + sequence.start : "") + ((sequence.max > 0)? " and " + position + " <= " + sequence.max: ""); } } break; case "not": var notSelector = (recur = regex.pseudo.exec(pseudoValue))? pseudoToXPath(tag, recur[1]? recur[1].toLowerCase() : null, recur[3] || null) : pseudoValue.replace(regex.id, "[id=$1]") .replace(regex.tag, "self::$1") .replace(regex.classes, "contains(concat(\" \", @class, \" \"), \" $1 \")") .replace(regex.attribs, attrToXPath); xpath = "not(" + notSelector + ")"; break; case "first": return "not(preceding-sibling::" + tag + ")"; case "last": return "not(following-sibling::" + tag + ")"; case "only": return "not(preceding-sibling::" + tag + " or following-sibling::" + tag + ")"; case "empty": return "count(child::*) = 0 and string-length(text()) = 0"; case "contains": return "contains(., \"" + pseudoValue.replace(regex.quoted, "$1") + "\")"; case "enabled": return "not(@disabled) and not(@type=\"hidden\")"; case "disabled": return "@disabled"; case "target": var hash = document.location.hash.slice(1); return "@name=\"" + hash + "\" or @id=\"" + hash + "\""; default: return "@" + pseudoClass + "=\"" + pseudoValue + "\""; } return xpath; } for (var i=0; (currentRule=cssRules[i]); i++) { if (i && contains(cssRules.slice(0, i), currentRule)) { continue; } cssSelectors = currentRule.match(selectorSplitRegExp); xPathExpression = "."; for (var j=0, jl=cssSelectors.length; j": "/child::", "+": "/following-sibling::*[1]/self::", "~": "/following-sibling::" }; xPathExpression += mapping[splitRule.tagRelation] || ""; } else { xPathExpression += (j > 0 && regex.relation.test(cssSelectors[j-1]))? splitRule.tag : ("/descendant::" + splitRule.tag); } if (splitRule.id) { xPathExpression += "[@id = \"" + splitRule.id.replace(/^#/, "") + "\"]"; } if (splitRule.allClasses) { xPathExpression += splitRule.allClasses.replace(regex.classes, "[contains(concat(\" \", @class, \" \"), \" $1 \")]"); } if (splitRule.allAttr) { xPathExpression += splitRule.allAttr.replace(regex.attribs, attrToXPathB); } if (splitRule.allPseudos) { var allPseudos = splitRule.allPseudos.match(regex.pseudos); for (var k=0, kl=allPseudos.length; k= 1 && xhr.readyState <= 3); }; return { publicMethods : [ "ajax", "get", "post", "load" ], initRequest : function () { var XMLHttp = null; if (!!window.XMLHttpRequest) { XMLHttp = new XMLHttpRequest(); DOMAssistant.AJAX.initRequest = function () { return requestPool.length? requestPool.pop() : new XMLHttpRequest(); }; } else if (!!window.ActiveXObject) { var XMLHttpMS = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP"]; for (var i=0; i 0 && ajaxObj.params)? ("&" + ajaxObj.params) : ""); } return DOMAssistant.AJAX.makeCall.call(this, ajaxObj); }, get : function (url, callback, addToContent) { var ajaxObj = createAjaxObj(url, "GET", callback, addToContent); return DOMAssistant.AJAX.makeCall.call(this, ajaxObj); }, post : function (url, callback) { var ajaxObj = createAjaxObj(url, "POST", callback); return DOMAssistant.AJAX.makeCall.call(this, ajaxObj); }, load : function (url, addToContent) { DOMAssistant.AJAX.get.call(this, url, DOMAssistant.AJAX.replaceWithAJAXContent, addToContent); }, makeCall : function (ajaxObj) { var XMLHttp = DOMAssistant.AJAX.initRequest(); if (XMLHttp) { globalXMLHttp = XMLHttp; (function (elm) { var url = ajaxObj.url, method = ajaxObj.method || "GET", callback = ajaxObj.callback, params = ajaxObj.params, headers = ajaxObj.headers, responseType = ajaxObj.responseType || "text", addToContent = ajaxObj.addToContent, timeout = ajaxObj.timeout || null, ex = ajaxObj.exception, timeoutId = null; XMLHttp.open(method, url, true); XMLHttp.setRequestHeader("AJAX", "true"); XMLHttp.setRequestHeader("X-Requested-With", "XMLHttpRequest"); if (method === "POST") { var contentLength = params? params.length : 0; XMLHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); XMLHttp.setRequestHeader("Content-length", contentLength); if (XMLHttp.overrideMimeType) { XMLHttp.setRequestHeader("Connection", "close"); } } for (var i in headers) { if (typeof i === "string") { XMLHttp.setRequestHeader(i, headers[i]); } } if (typeof callback === "function") { XMLHttp.onreadystatechange = function () { try { if (XMLHttp.readyState === 4) { window.clearTimeout(timeoutId); status = XMLHttp.status; statusText = XMLHttp.statusText; readyState = 4; if (!status || status !== 200) { throw new Error(statusText); } var response = /xml/i.test(responseType)? XMLHttp.responseXML : XMLHttp.responseText; if (/json/i.test(responseType)) { response = (typeof JSON === "object" && typeof JSON.parse === "function")? JSON.parse(response) : eval("(" + response + ")"); } globalXMLHttp = null; XMLHttp.onreadystatechange = function () {}; requestPool.push(XMLHttp); callback.call(elm, response, addToContent); } } catch (e) { globalXMLHttp = XMLHttp = null; if (typeof ex === "function") { ex.call(elm, e); ex = null; } } }; } XMLHttp.send(params); if (timeout) { timeoutId = window.setTimeout( function () { if (inProgress(XMLHttp)) { XMLHttp.abort(); if (typeof ex === "function") { readyState = 0; status = 408; statusText = "Request timeout"; globalXMLHttp = XMLHttp = null; ex.call(elm, new Error(statusText)); ex = null; } } }, timeout); } })(this); } return this; }, replaceWithAJAXContent : function (content, add) { if (add) { this.innerHTML += content; } else { DOMAssistant.clearHandlers.apply(this); this.innerHTML = content; } }, getReadyState : function () { return (globalXMLHttp && typeof globalXMLHttp.readyState !== "undefined")? globalXMLHttp.readyState : readyState; }, getStatus : function () { return status; }, getStatusText : function () { return statusText; } }; }(); DOMAssistant.attach(DOMAssistant.AJAX); DOMAssistant.CSS = function () { return { addClass : function (className) { if (!this.hasClass(className)) { var currentClass = this.className; this.className = currentClass + (currentClass.length? " " : "") + className; } return this; }, removeClass : function (className) { return this.replaceClass(className); }, replaceClass : function (className, newClass) { var classToRemove = new RegExp(("(^|\\s)" + className + "(\\s|$)"), "i"); this.className = this.className.replace(classToRemove, function (match, p1, p2) { var retVal = newClass? (p1 + newClass + p2) : ""; if (/^\s+.*\s+$/.test(match)) { retVal = match.replace(/(\s+).+/, "$1"); } return retVal; }).replace(/^\s+|\s+$/g, ""); return this; }, hasClass : function (className) { return new RegExp(("(^|\\s)" + className + "(\\s|$)"), "i").test(this.className); }, setStyle : function (style, value) { if (this.filters && (typeof style === "string"? /opacity/i.test(style) : style.opacity)) { this.style.filter = "alpha(opacity=" + (value || style.opacity || 1) * 100 + ")"; } if (typeof this.style.cssText !== "undefined") { var styleToSet = this.style.cssText; if (typeof style === "object") { for (var i in style) { if (typeof i === "string") { styleToSet += ";" + i + ":" + style[i]; } } } else { styleToSet += ";" + style + ":" + value; } this.style.cssText = styleToSet; } return this; }, getStyle : function (cssRule) { var val = ""; cssRule = cssRule.toLowerCase(); if (document.defaultView && document.defaultView.getComputedStyle) { val = document.defaultView.getComputedStyle(this, "").getPropertyValue(cssRule); } else if (this.currentStyle) { if (this.filters && /^opacity$/.test(cssRule)) { var alpha = this.filters["DXImageTransform.Microsoft.Alpha"] || this.filters.alpha || {}; val = (alpha.opacity || 100) / 100; } else { cssRule = cssRule.replace(/^float$/, "styleFloat").replace(/\-(\w)/g, function (match, p1) { return p1.toUpperCase(); }); val = this.currentStyle[cssRule]; } if (val === "auto" && /^(width|height)$/.test(cssRule) && this.currentStyle.display !== "none") { val = this["offset" + cssRule.charAt(0).toUpperCase() + cssRule.substr(1)] + "px"; } } return val; } }; }(); DOMAssistant.attach(DOMAssistant.CSS); DOMAssistant.Content = function () { var $ = DOMAssistant.$; return { init : function () { DOMAssistant.setCache(false); }, prev : function () { var prevSib = this; while ((prevSib = prevSib.previousSibling) && prevSib.nodeType !== 1) {} return $(prevSib); }, next : function () { var nextSib = this; while ((nextSib = nextSib.nextSibling) && nextSib.nodeType !== 1) {} return $(nextSib); }, create : function (name, attr, append, content) { var elm = $(document.createElement(name)); if (attr) { elm = elm.setAttributes(attr); } if (typeof content !== "undefined") { elm.addContent(content); } if (append) { DOMAssistant.Content.addContent.call(this, elm); } return elm; }, setAttributes : function (attr) { if (DOMAssistant.isIE) { var setAttr = function (elm, att, val) { var attLower = att.toLowerCase(); switch (attLower) { case "name": case "type": return document.createElement(elm.outerHTML.replace(new RegExp(attLower + "=[a-zA-Z]+"), " ").replace(">", " " + attLower + "=" + val + ">")); case "style": elm.style.cssText = val; return elm; default: elm[DOMAssistant.camel[attLower] || att] = val; return elm; } }; DOMAssistant.Content.setAttributes = function (attr) { var elem = this; var parent = this.parentNode; for (var i in attr) { if (typeof attr[i] === "string" || typeof attr[i] === "number") { var newElem = setAttr(elem, i, attr[i]); if (parent && /(name|type)/i.test(i)) { if (elem.innerHTML) { newElem.innerHTML = elem.innerHTML; } parent.replaceChild(newElem, elem); } elem = newElem; } } return $(elem); }; } else { DOMAssistant.Content.setAttributes = function (attr) { for (var i in attr) { if (/class/i.test(i)) { this.className = attr[i]; } else { this.setAttribute(i, attr[i]); } } return this; }; } return DOMAssistant.Content.setAttributes.call(this, attr); }, addContent : function (content) { var type = typeof content; if (type === "string" || type === "number") { this.innerHTML += content; } else if (type === "object" || (type === "function" && !!content.nodeName)) { this.appendChild(content); } return this; }, replaceContent : function (content) { DOMAssistant.clearHandlers.apply(this); this.innerHTML = ""; return this.addContent(content); }, replace : function (content, returnNew) { var type = typeof content; if (type === "string" || type === "number") { var parent = this.parentNode; var tmp = $(parent).create("div", null, false, content); for (var i=tmp.childNodes.length-1; i>=0; i--) { parent.insertBefore(tmp.childNodes[i], this.nextSibling); } content = this.nextSibling; parent.removeChild(this); } else if (type === "object" || (type === "function" && !!content.nodeName)) { this.parentNode.replaceChild(content, this); } return returnNew? content : this; }, remove : function () { this.parentNode.removeChild(this); return null; } }; }(); DOMAssistant.attach(DOMAssistant.Content); DOMAssistant.Events = function () { var uniqueHandlerId = 1; return { publicMethods : [ "triggerEvent", "addEvent", "removeEvent", "preventDefault", "cancelBubble" ], init : function () { window.addEvent = this.addEvent; window.removeEvent = this.removeEvent; DOMAssistant.preventDefault = this.preventDefault; DOMAssistant.cancelBubble = this.cancelBubble; }, triggerEvent : function (evt, target) { if (this.events && this.events[evt]) { // Create synthetic event var event = { type: evt, target: target || this, currentTarget: this, bubbles: false, cancelable: false, preventDefault: function(){}, stopPropagation: function(){}, timeStamp: +new Date() }; for (var i=0, iL=this.events[evt].length; i=0; i--) { fn = func || eventColl[i]; if (eventColl[i] === fn) { delete eventColl[i]; eventColl.splice(i, 1); if (fn.attachedElements) { fn.attachedElements[evt + this.uniqueHandlerId] = null; } } } } else if (this["on" + evt] && !func) { this["on" + evt] = null; } return this; }, preventDefault : function (evt) { if (evt && evt.preventDefault) { DOMAssistant.Events.preventDefault = function (evt) { evt.preventDefault(); }; } else { DOMAssistant.Events.preventDefault = function (evt) { event.returnValue = false; }; } return DOMAssistant.Events.preventDefault(evt); }, cancelBubble : function (evt) { if (evt && evt.stopPropagation) { DOMAssistant.Events.cancelBubble = function (evt) { evt.stopPropagation(); }; } else { DOMAssistant.Events.cancelBubble = function (evt) { event.cancelBubble = true; }; } return DOMAssistant.Events.cancelBubble(evt); } }; }(); DOMAssistant.attach(DOMAssistant.Events); DOMAssistant.DOMLoad = function () { var DOMLoaded = false; var DOMLoadTimer = null; var functionsToCall = []; var addedStrings = {}; var errorHandling = null; var execFunctions = function () { for (var i=0, il=functionsToCall.length; i<\/script>"); document.getElementById("ieScriptLoad").onreadystatechange = function() { if (this.readyState === "complete") { DOMHasLoaded(); } }; } @end @*/ /* Mozilla/Opera 9 */ if (document.addEventListener) { document.addEventListener("DOMContentLoaded", DOMHasLoaded, false); } /* Safari, iCab, Konqueror */ if (/KHTML|WebKit|iCab/i.test(navigator.userAgent)) { DOMLoadTimer = setInterval(function () { if (/loaded|complete/i.test(document.readyState)) { DOMHasLoaded(); clearInterval(DOMLoadTimer); } }, 10); } /* Other web browsers */ window.onload = DOMHasLoaded; return { DOMReady : function () { for (var i=0, il=arguments.length, funcRef; i