







function  x00405 (txt) {
if (txt === undefined) txt="undefined";
else if (txt === null) txt="null";


txt = txt.toString()





;
var dbgDiv = document.createElement("PRE");
dbgDiv.innerHTML = txt;
document.body.appendChild(dbgDiv);
} 


function  x00406 (title, obj, fnsShow ) {
if (arguments.length < 3) fnsShow = false;
var pr = "---------- "+title+" ("+typeOf(obj)+") ----------<br/>";
if (obj === undefined)
pr += "undefined";
else if (obj === null)
pr += "null";
else {
var first = true;
var keys = new Array();
for (var key in obj) keys.push(key);
keys.sort();
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var val = obj[key];
if (! fnsShow && (
(val != null && (val instanceof Function)) ||
(key.indexOf("on") === 0)))  
continue;
if (first) first = false; else pr += ", ";
pr+= key+"="+HTML_toString(val); }}
if (!fnsShow) pr += "<br/>(function props display suppressed)";
pr += "<br/>------------------------------";
x00405(pr);
} 


function  x00407 (
caption, rootHTMLNode, showLevels, isAbbrev ) {

if (arguments.length < 4) isAbbrev = true;

var html = "<span style=\"font-size:12px; font-family:Arial\">";
html += "<hr />";
html += "<h3>" + caption + "</h3>";
if (rootHTMLNode) {
var tree = new TreeWalkerX(  
rootHTMLNode, ~NodeFilterX.SHOW_COMMENT, null, false);
html += HTML_node (
"", rootHTMLNode, tree, showLevels, 0, isAbbrev); }
html += "</span>";

var dbgDiv = document.createElement("DIV");
dbgDiv.innerHTML = html;
document.body.appendChild(dbgDiv);


function  HTML_node (nodePath, node, tree, 
showLevels, indentLevel, isAbbrev) {
if (showLevels == 0) return "";

var html = 
"<table width=\"100%\" " +
"border=\"0\" cellspacing=\"0\" cellpadding=\"0\">" +
"<tr valign=\"top\">" +
"<td style=\"" +
"width:" + (15*indentLevel) + "px; " +
"padding:2px 5px; " +
"border-left:1px solid black; " +
"border-top:1px solid black\">" + 
nodePath + 
"</td>" +
"<td style=\"" +
"background-color:#FFFFDD; width:55px; " +
"padding: 2px 5px; " +
"border-top:1px solid black\">" + 
"&lt;" + typeOf(node) + "&gt;" +
"</td>" +
"<td style=\"" +
"color:#808080; background-color:#FFFFDD; " +
"padding:2px 5px; " +
"border-top:1px solid black; " +
"border-right:1px solid black\">";
var specVal = HTML_specialNodeValue(node);
if (specVal != null)
html += 
"<span style=\"color:black\">" + 
specVal + 
"</span><br/>"
var keys = new Array();
for (var key in node) keys.push(key);

keys.sort();
var first = true;
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
var val = node[key];

if (isAbbrev && (
(val != null && (val instanceof Function)) ||
(key.indexOf("on") === 0) ||  
(key == "innerHTML") ||
(key == "outerHTML") ||
(key == "innerText") ||
(key == "outerText")))
continue;
if (first) first = false; else html += ", ";
html += 
"<span style=\"color:red\">" + 
key + 
"</span>=" + 
((key == "innerHTML" || key == "outerHTML")
? "<i>nested html</i>" 
:HTML_toString(val)); }
html +=
"</td>" +
"</tr>" +
"</table>";


var currentNode = tree.currentNode;
var childI = 0;
for (var c = tree.firstChild(); c != null; c = tree.nextSibling())
html += HTML_node (
nodePath + (nodePath ? "." : "") + childI++, 
c, tree, showLevels - 1, indentLevel + 1, isAbbrev);
tree.currentNode = currentNode;

return html;
} 

} 


function  HTML_toString (val) {
var t = typeOf(val);
if (t == "string") return "\"" + val + "\"";
if (t == "number" || t == "boolean" || t == "undefined" || t == "null")
return val;
var asStr = (val.toString ? val.toString() : val);
if (asStr != "[object]") return asStr;
return "[" + t + "]";
} 


function  HTML_specialNodeValue (val) {  
var t = typeOf(val);
if (t == "#text") {
if (val.nodeValue != undefined)
return HTML_toString(val.nodeValue); }
if (t == "INPUT")
return val.name + " = \"" + val.value + "\"&nbsp; <i>(" +
(val.type == "hidden" ? "hidden " : "") +
"input)</i>";
if (t == "TEXTAREA")
return val.name + " = \"" + val.value + "\"&nbsp; <i>(input)</i>";
if (t == "IMG") {
if (val.src)
return val.src; }

return null;
} 


function  typeOf (val) {
var t = typeof val;
if (t == "string" || t == "number" || t == "boolean" || t == "undefined")
return t;
if (val === null)
return "null";  
var t = Object.prototype.toString.apply(val); 
t = t.substring(8, t.length - 1);
if (t != "Object") 
return t;
if (val.constructor) t = val.constructor;
if (t != "Object")
return t;
if (val.nodeName) t = val.nodeName;
else if (val.tagName) t = val.tagName;
return t;
} 



function  TreeWalkerX (rootHTMLNode, whatToShow, filter, expandEntityRefs) {






this.currentNode = rootHTMLNode;
this.root = rootHTMLNode;  
this.whatToShow = whatToShow;  
this.filter = filter;  
this.expandEntityReferences = expandEntityRefs;  
} 

TreeWalkerX.prototype.firstChild = function () {
if (! this.currentNode || 

! (this.currentNode = this.currentNode.firstChild)) 

return null;

if (this.shouldShowCurrent()) return this.currentNode;
return this.nextSibling();
} 

TreeWalkerX.prototype.nextSibling = function () {
if (! this.currentNode || 
! (this.currentNode = this.currentNode.nextSibling)) 
return null;
if (this.shouldShowCurrent()) return this.currentNode;
return this.nextSibling();
} 

TreeWalkerX.prototype.shouldShowCurrent = function () { 

return (! this.filter ||
(this.filter(this.currentNode) == NodeFilterX.FILTER_ACCEPT));
} 


function  NodeFilterX () {}

NodeFilterX.FILTER_ACCEPT = 1;
NodeFilterX.FILTER_REJECT = 2;
NodeFilterX.FILTER_SKIP = 3;

NodeFilterX.SHOW_ALL = 0xFFFFFFFF;
NodeFilterX.SHOW_ELEMENT = 0x00000001;
NodeFilterX.SHOW_ATTRIBUTE = 0x00000002;
NodeFilterX.SHOW_TEXT = 0x00000004;
NodeFilterX.SHOW_ENTITY_REFERENCE = 0x00000010;
NodeFilterX.SHOW_ENTITY = 0x00000020;
NodeFilterX.SHOW_PROCESSING_INSTRUCTION = 0x00000040;
NodeFilterX.SHOW_COMMENT = 0x00000080;
NodeFilterX.SHOW_DOCUMENT = 0x00000100;
NodeFilterX.SHOW_DOCUMENT_TYPE = 0x00000200;
NodeFilterX.SHOW_DOCUMENT_FRAGMENT = 0x00000400;
NodeFilterX.SHOW_NOTATION = 0x00000800;
