{"dojo.html._":{"meta":{"requires":{"common":["dojo.html.common","dojo.html.style"]}}},"dojo.html.color":{"meta":{"requires":{"common":["dojo.html.style","dojo.gfx.color","dojo.lang.common"]},"functions":{"dojo.html.getBackgroundColor":{"meta":{"summary":"","parameters":{"node":{"type":"HTMLElement"}},"src":" node = dojo.byId(node);\n\tvar color;\n\tdo{\n\t\tcolor = dojo.html.getStyle(node, \"background-color\");\n\t\t\/\/ Safari doesn't say \"transparent\"\n\t\tif(color.toLowerCase() == \"rgba(0, 0, 0, 0)\") { color = \"transparent\"; }\n\t\tif(node == document.getElementsByTagName(\"body\")[0]) { node = null; break; }\n\t\tnode = node.parentNode;\n\t}while(node && dojo.lang.inArray([\"transparent\", \"\"], color));\n\tif(color == \"transparent\"){\n\t\tcolor = [255, 255, 255, 0];\n\t}else{\n\t\tcolor = dojo.gfx.color.extractRGB(color);\n\t}\n\treturn color;\t\/\/\tarray","returns":"array"},"extra":{"returns":"the background color of the passed node as a 32-bit color (RGBA)"}}}}},"dojo.html.common":{"meta":{"requires":{"common":["dojo.lang.common","dojo.dom"]},"functions":{"dojo.html.getEventTarget":{"meta":{"summary":"Returns the target of an event","parameters":{"evt":{"type":"DOMEvent"}},"src":" if(!evt) { evt = dojo.global().event || {} };\n\tvar t = (evt.srcElement ? evt.srcElement : (evt.target ? evt.target : null));\n\twhile((t)&&(t.nodeType!=1)){ t = t.parentNode; }\n\treturn t;\t\/\/\tHTMLElement","returns":"HTMLElement"}},"dojo.html.getViewport":{"meta":{"summary":"Returns the dimensions of the viewable area of a browser window","src":" var _window = dojo.global();\n\tvar _document = dojo.doc();\n\tvar w = 0;\n\tvar h = 0;\n\tif(dojo.render.html.mozilla){\n\t\t\/\/ mozilla\n\t\tw = _document.documentElement.clientWidth;\n\t\th = _window.innerHeight;\n\t}else if(!dojo.render.html.opera && _window.innerWidth){\n\t\t\/\/in opera9, dojo.body().clientWidth should be used, instead\n\t\t\/\/of window.innerWidth\/document.documentElement.clientWidth\n\t\t\/\/so we have to check whether it is opera\n\t\tw = _window.innerWidth;\n\t\th = _window.innerHeight;\n\t} else if (!dojo.render.html.opera && dojo.exists(_document, \"documentElement.clientWidth\")){\n\t\t\/\/ IE6 Strict\n\t\tvar w2 = _document.documentElement.clientWidth;\n\t\t\/\/ this lets us account for scrollbars\n\t\tif(!w || w2 && w2 < w) {\n\t\t\tw = w2;\n\t\t}\n\t\th = _document.documentElement.clientHeight;\n\t} else if (dojo.body().clientWidth){\n\t\t\/\/ IE, Opera\n\t\tw = dojo.body().clientWidth;\n\t\th = dojo.body().clientHeight;\n\t}\n\treturn { width: w, height: h };\t\/\/\tobject","returns":"object"}},"dojo.html.getScroll":{"meta":{"summary":"Returns the scroll position of the document","src":" var _window = dojo.global();\n\tvar _document = dojo.doc();\n\tvar top = _window.pageYOffset || _document.documentElement.scrollTop || dojo.body().scrollTop || 0;\n\tvar left = _window.pageXOffset || _document.documentElement.scrollLeft || dojo.body().scrollLeft || 0;\n\treturn { \n\t\ttop: top, \n\t\tleft: left, \n\t\toffset:{ x: left, y: top }\t\/\/\tnote the change, NOT an Array with added properties. \n\t};\t\/\/\tobject"}},"dojo.html.getParentByType":{"meta":{"summary":"Returns the first ancestor of node with tagName type.","parameters":{"node":{"type":"HTMLElement"},"type":{"type":"string"}},"src":" var _document = dojo.doc();\n\tvar parent = dojo.byId(node);\n\ttype = type.toLowerCase();\n\twhile((parent)&&(parent.nodeName.toLowerCase()!=type)){\n\t\tif(parent==(_document[\"body\"]||_document[\"documentElement\"])){\n\t\t\treturn null;\n\t\t}\n\t\tparent = parent.parentNode;\n\t}\n\treturn parent;\t\/\/\tHTMLElement","returns":"HTMLElement"}},"dojo.html.getAttribute":{"meta":{"summary":"Returns the value of attribute attr from node.","parameters":{"node":{"type":"HTMLElement"},"attr":{"type":"string"}},"src":" node = dojo.byId(node);\n\t\/\/ FIXME: need to add support for attr-specific accessors\n\tif((!node)||(!node.getAttribute)){\n\t\t\/\/ if(attr !== 'nwType'){\n\t\t\/\/\talert(\"getAttr of '\" + attr + \"' with bad node\"); \n\t\t\/\/ }\n\t\treturn null;\n\t}\n\tvar ta = typeof attr == 'string' ? attr : new String(attr);\n\t\/\/ first try the approach most likely to succeed\n\tvar v = node.getAttribute(ta.toUpperCase());\n\tif((v)&&(typeof v == 'string')&&(v!=\"\")){ \n\t\treturn v;\t\/\/\tstring \n\t}\n\t\/\/ try returning the attributes value, if we couldn't get it as a string\n\tif(v && v.value){ \n\t\treturn v.value;\t\/\/\tstring \n\t}\n\t\/\/ this should work on Opera 7, but it's a little on the crashy side\n\tif((node.getAttributeNode)&&(node.getAttributeNode(ta))){\n\t\treturn (node.getAttributeNode(ta)).value;\t\/\/\tstring\n\t}else if(node.getAttribute(ta)){\n\t\treturn node.getAttribute(ta);\t\/\/\tstring\n\t}else if(node.getAttribute(ta.toLowerCase())){\n\t\treturn node.getAttribute(ta.toLowerCase());\t\/\/\tstring\n\t}\n\treturn null;\t\/\/\tstring","returns":"string"}},"dojo.html.hasAttribute":{"meta":{"summary":"Determines whether or not the specified node carries a value for the attribute in question.","parameters":{"node":{"type":"HTMLElement"},"attr":{"type":"string"}},"src":" return dojo.html.getAttribute(dojo.byId(node), attr) ? true : false;\t\/\/\tboolean","returns":"boolean"}},"dojo.html.getCursorPosition":{"meta":{"summary":"Returns the mouse position relative to the document (not the viewport). For example, if you have a document that is 10000px tall, but your browser window is only 100px tall, if you scroll to the bottom of the document and call this function it will return {x: 0, y: 10000} NOTE: for events delivered via dojo.event.connect() and\/or dojoAttachEvent (for widgets), you can just access evt.pageX and evt.pageY, rather than calling this function.","parameters":{"e":{"type":"DOMEvent"}},"src":" e = e || dojo.global().event;\n\tvar cursor = {x:0, y:0};\n\tif(e.pageX || e.pageY){\n\t\tcursor.x = e.pageX;\n\t\tcursor.y = e.pageY;\n\t}else{\n\t\tvar de = dojo.doc().documentElement;\n\t\tvar db = dojo.body();\n\t\tcursor.x = e.clientX + ((de||db)[\"scrollLeft\"]) - ((de||db)[\"clientLeft\"]);\n\t\tcursor.y = e.clientY + ((de||db)[\"scrollTop\"]) - ((de||db)[\"clientTop\"]);\n\t}\n\treturn cursor;\t\/\/\tobject","returns":"object"}},"dojo.html.isTag":{"meta":{"summary":"Like dojo.dom.isTag, except case-insensitive","parameters":{"node":{"type":"HTMLElement"}},"src":" node = dojo.byId(node);\n\tif(node && node.tagName) {\n\t\tfor (var i=1; i= 1.0){\n\t\t\tif(h.ie){\n\t\t\t\tdojo.html.clearOpacity(node);\n\t\t\t\treturn;\n\t\t\t}else{\n\t\t\t\topacity = 0.999999;\n\t\t\t}\n\t\t}else if( opacity < 0.0){ opacity = 0; }\n\t}\n\tif(h.ie){\n\t\tif(node.nodeName.toLowerCase() == \"tr\"){\n\t\t\t\/\/ FIXME: is this too naive? will we get more than we want?\n\t\t\tvar tds = node.getElementsByTagName(\"td\");\n\t\t\tfor(var x=0; x= 0.999999 ? 1.0 : Number(opac);\t\/\/\tfloat","returns":"float"}}},"objects":{"dojo.html.displayMap":{"meta":{"variables":["tr","td","th","img","span","input","button"]}}}}},"dojo.html.iframe":{"meta":{"requires":{"common":["dojo.html.util"]},"functions":{"dojo.html.iframeContentWindow":{"meta":{"summary":"","parameters":{"iframe_el":{"type":"HTMLIFrameElement"}},"src":" var win = dojo.html.getDocumentWindow(dojo.html.iframeContentDocument(iframe_el)) ||\n\t\t\/\/ Moz. TODO: is this available when defaultView isn't?\n\t\tdojo.html.iframeContentDocument(iframe_el).__parent__ ||\n\t\t(iframe_el.name && document.frames[iframe_el.name]) || null;\n\treturn win;\t\/\/\tWindow","returns":"Window"},"extra":{"returns":"the window reference of the passed iframe"}},"dojo.html.iframeContentDocument":{"meta":{"summary":"","parameters":{"iframe_el":{"type":"HTMLIFrameElement"}},"src":" var doc = iframe_el.contentDocument \/\/ W3\n\t\t|| ((iframe_el.contentWindow)&&(iframe_el.contentWindow.document))\t\/\/ IE\n\t\t|| ((iframe_el.name)&&(document.frames[iframe_el.name])&&(document.frames[iframe_el.name].document)) \n\t\t|| null;\n\treturn doc;\t\/\/\tHTMLDocument","returns":"HTMLDocument"},"extra":{"returns":"a reference to the document object inside iframe_el"}},"dojo.html.BackgroundIframe":{"meta":{"summary":"For IE z-index schenanigans Two possible uses: 1. new dojo.html.BackgroundIframe(node) Makes a background iframe as a child of node, that fills area (and position) of node 2. new dojo.html.BackgroundIframe() Attaches frame to dojo.body(). User must call size() to set size.","parameters":{"node":{"type":"HTMLElement"}},"src":" if(dojo.render.html.ie55 || dojo.render.html.ie60) {\n\t\tvar html=\"