/*

DOM Browser v2.7
Written by Max Herkender <static@brokenfunction.com>
2002

Syntax: showProps(value [, depth, noScan, noRepeat, charLimit])

"Traversal Depth":
	When you check this, it views an object as a tree, branching
	out whenever an instance of an object occurs.
	NOTE: You can set this to -1 to view the full names of
	properties without any branching

"Do not scan for additional properties":
	One of the features of the DOM Browser is that it has an
	internal list of over 200 common hidden properties. Each time
	it views the properties of something it checks for all those
	hidden properties and displays them below a line. If you check
	this, the DOM Browser will not search for those properties

"No Repeat Mode":
	When using the Traversal depth for large objects, sometimes
	the objects have properties that refrence to itself, or it's
	parent. When you check this, the DOM Browser makes sure it
	doesn't get stuck in loops like that
	
"Character Limit":
	When viewing some objects, they may have large amounts of text,
	it can take a long time to convert the text to HTML. When
	checked, the DOM Browser will limit all text to 500 characters

*/



var DOM = new Object()
DOM.working = false
DOM.functionList = new Array("apply","play","close","open","blur","focus","click","submit","reset","concat","call","fromCharCode","navigate","createTextRange","hasFeature","tags","namedItem","exec","test","javaEnabled","taintEnabled","forward","back","go","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","displayFile","pause","stop","next","previous","toString","toLocaleString","valueOf","insertCell","appendChild","createCaption","createTFoot","createTHead","deleteCaption","deleteRow","deleteTFoot","deleteTHead","deleteCell","insertRow","write","writeln","clear","getElementById","elementFromPoint","createElement","createTextNode","getElementsByTagName","execCommand","selection","AddChannel","AddDesktopComponent","AddFavorite","AutoCompleteSaveForm","AutoScan","ImportExportFavorites","IsSubscribed","NavigateAndFind","ShowBrowserUI","menuArguments","collapse","compareEndPoints","duplicate","expand","findText","getBookMark","inRange","isEqual","move","moveEnd","moveStart","moveToBookmark","moveToElementText","moveToPoint","parentElement","pastHTML","setEndPoint","contains","getAttribute","insertAdjacentHTML","insertAdjacentText","removeAttribute","scrollIntoView","setAttribute","select","charAt","substring","indexOf","lastIndexOf","strike","sub","big","blink","bold","fontcolor","fontsize","anchor","italics","link","toLowerCase","toUpperCase","fixed","small","match","search","substr","localeCompare","slice","toLocaleLowerCase","toLocaleUpperCase","replace","abs","acos","asin","atan","atan2","ceil","exp","floor","log","max","min","pow","random","round","sin","sqrt","sup","tan","toExponential","toFixed","toPrecision","getDate","getDay","getFullYear","getHours","getMilliseconds","getMinutes","getMonth","getSeconds","getTime","getTimezoneOffset","getUTCDate","getUTCDay","getUTCFullYear","getUTCHours","getUTCMilliseconds","getUTCMinutes","getUTCMonth","getUTCSeconds","getYear","parse","setDate","setFullYear","setHours","setMilliseconds","setMinutes","setMonth","setSeconds","setTime","setUTCDate","setUTCFullYear","setUTCHours","setUTCMilliseconds","setUTCMinutes","setUTCMonth","setUTCSeconds","setYear","toDateString","toGMTString","toLocaleDateString","toLocaleTimeString","toTimeString","toUTCString","UTC","join","sort","split","pop","push","reverse","shift","splice","unshift","copy")
DOM.propList = new Array("item","length","prototype","arguments","constructor","global","ignoreCase","lastIndex","multiline","source","width","height","availWidth","availHeight","colorDepth","fontSmoothingEnabled","E","LN2","LN10","LOG2E","LOG10E","PI","SQRT1_2","SQRT2","MAX_VALUE","MIN_VALUE","NEGATIVE_INFINITY","POSITIVE_INFINITY")
DOM.functionList.sort()
DOM.propList.sort()
function removeHTML(HTMLinput,forceFunction,limit) {
	var HTMLoutput = ""
	if (typeof(HTMLinput) == "undefined") {return("undefined")}
	else if (HTMLinput == null) {return("null")}
	if (""+HTMLinput+"" == "") {return(HTMLinput)}
	DOM.errorID = 4
	HTMLinput = (!forceFunction && HTMLinput["toString"])? HTMLinput.toString():""+HTMLinput+""
	DOM.errorID = 0
	for (var rha=0;rha<=HTMLinput.length-1 && (!limit || rha<=500);rha++) {
		switch(HTMLinput.charAt(rha)) {
		case("\r"):break
		case("\n"):HTMLoutput += "<BR>";break
		case("<"):HTMLoutput += "&lt;";break
		case("&"):HTMLoutput += "&amp;";break
		case(" "):HTMLoutput += "&nbsp;";break
		default:HTMLoutput += HTMLinput.charAt(rha);break
		}
	}
	return(HTMLoutput)
}
function closeDocument() {
	while (DOM.depth >= 0) {DOMwrite("</UL>\r");DOM.depth--}
	var sig = ""
	if (!DOM.hideExtras) {sig += (DOM.functionList.length+DOM.propList.length)+" additional properties tested"}
	DOMwrite("<SPAN STYLE=\"font-size:75%\">\r"+((sig != "")? sig+"<BR>\r":"")+"DOM Browser v2.7 by <A HREF=\"mailto:static"+"@"+"brokenfunction.com\">Staticreator</A>\r</SPAN>\r</BODY>\r</HTML>")
	DOM.window.document.close()
	DOM.window.focus()
	DOM.window.status = "Done ("+DOM.fullCount+"/"+DOM.fullCountTop+")"
	window.onerror = DOM.errorBackup
	DOM.working = false
}
function reportAdjust(msg,url,line) {
	if (!DOM.errorObjects[DOM.lastExaminedIndex]) {
		if (!DOM.startedProps && !DOM.objectAccessErrorFix) {DOMwrite("<UL>\r")}
		DOMwrite("</UL>\r")
		DOMwrite("<SPAN CLASS=\"msg\">\r")
		var errorMsg = null
		DOM.cancelErr++
		if (DOM.lastErrorIndex == DOM.lastExaminedIndex && DOM.cancelErr >= 5) {
			DOMwrite("The DOM Browser detected that it is repeating itself, operation stopped\r")
		} else {
			if (DOM.lastExamined) {
				var propWrite = (DOM.current)? ((DOM.objectWorking)? DOM.current:(DOM.current+((!isNaN(DOM.lastExamined))? "["+DOM.lastExamined+"]":"."+DOM.lastExamined))):DOM.lastExamined
				if (propWrite) {errorMsg = "Error encountered while accessing the "+propWrite+" property"}
			} else if (DOM.errorID) {
				switch(DOM.errorID) {
					case(1):errorMsg = "Error encountered while evaluating the data";break
					case(4):case(5):errorMsg = "Error encountered while accessing a method";break
					case(3):errorMsg = "Error encountered, this object does not support the for/in statement";break
					default:alert("Error\rUnknown errorID: "+DOM.errorID);break
				}
				DOM.errorID = 0
			}
			if (typeof(msg) == "string") {
				if (errorMsg) {DOMwrite(errorMsg+" (Type "+line+")<BR>\r"+msg+"\r")}
				else {DOMwrite("Error (Type "+line+"): "+msg+"\r")}
			} else {
				if (errorMsg) {DOMwrite(errorMsg+"\r")}
				else {DOMwrite("Error encountered here\r")}
			}
		}
		DOMwrite("</SPAN>\r")
		if (!DOM.objectAccessErrorFix) {
			if (DOM.errorID != 3) {DOMwrite("<UL>\r")}
			if (!DOM.startedProps) {DOMwrite("</UL>\r")}
		}
	}
	DOM.lastErrorIndex = DOM.lastExaminedIndex
	if (DOM.objectWorking) {
		if (!DOM.errorObjects[DOM.lastExaminedIndex]) {DOM.errorObjects[DOM.lastExaminedIndex] = 0}
		DOM.errorObjects[DOM.lastExaminedIndex]++
	}
	DOM.objectWorking = false
	if ((DOM.lastErrorIndex == DOM.lastExaminedIndex && DOM.cancelErr >= 5) || (!DOM.startedProps && !DOM.objectAccessErrorFix)) {closeDocument()}
	else {setTimeout("restoreDOM()",0)}
	return(true)
}
function restoreDOM() {
	DOM.window.status = "Working...("+DOM.fullCount+"/"+DOM.fullCountTop+") -Error Encountered, restoring-"
	DOM.depth = 0
	DOM.core = DOM.baseCore
	DOM.current = DOM.baseCurrent
	DOM.lastExaminedIndex = -1
	DOM.foundList = new Array()
	DOM.foundList[0] = new Object()
	DOM.foundList[0].core = DOM.baseCore
	DOM.foundList[0].parent = -1
	DOM.coreIndex = 0
	if (DOM.objectAccessErrorFix) {
		DOM.objectAccessErrorFix = false
		DOM.stupidCounterInitErrorFix = true
		DOM.startedProps = true
		DOMwrite("<UL>\r")
		DOM.depth++
	}
	findPropData()
	closeDocument()
}
function quoteEncode(input) {var output = ""
	for (var qea=0;qea<=input.length-1;qea++) {
		switch(input.charAt(qea)) {
		case("\""):output += "%1";break
		case("'"):output += "%2";break
		case("\\"):output += "%3";break
		case("%"):output += "%4";break
		default:output += input.charAt(qea);break
		}
	}
	return(output)
}
function quoteDecode(input) {var output = ""
	for (var qda=0;qda<=input.length-1;qda++) {
		if (input.charAt(qda) == "%") {qda++
			switch(input.charAt(qda)) {
			case("1"):output += "\"";break
			case("2"):output += "'";break
			case("3"):output += "\\";break
			case("4"):output += "%";break
			default:alert("Error\rUnknown % quote command number: "+input.charAt(qda));break
			}
		} else {output += input.charAt(qda)}
	}
	return(output)
}
function findPropData() {
	if (DOM.core != null) {
		var list = new Array(), functionStart = 0
		DOM.lastExaminedIndex++
		DOM.objectWorking = true
		if (!DOM.errorObjects[DOM.lastExaminedIndex] || (DOM.errorObjects[DOM.lastExaminedIndex] && DOM.errorObjects[DOM.lastExaminedIndex] < 1)) {
			DOM.errorID = 3
			for (var prop in DOM.core) {list[list.length] = prop}
			DOM.errorID = 0
		}
		if (!DOM.errorObjects[DOM.lastExaminedIndex] || (DOM.errorObjects[DOM.lastExaminedIndex] && DOM.errorObjects[DOM.lastExaminedIndex] < 2)) {
			var drawLine = list.length
			DOM.errorID = 5
			DOM.core.length
			DOM.errorID = 0
			if (typeof(DOM.core.length) != "undefined" && !DOM.hideExtras) {
				for (var fpa=0;fpa<=DOM.core.length-1;fpa++) {
					if (typeof(DOM.core[fpa]) != "undefined") {
						var foundProp = false
						for (var fpb=0;fpb<=list.length-1;fpb++) {if (list[fpb] == fpa) {foundProp = true;break}}
						if (!foundProp) {list[list.length] = fpa}
					}
				}
				
			}
			if ((DOM.depth <= 0 && !DOM.hideExtras) || DOM.stupidCounterInitErrorFix) {
				for (var fpc=0;fpc<=DOM.propList.length-1;fpc++) {
					if (typeof(DOM.core[DOM.propList[fpc]]) != "undefined") {
						var foundProp = false
						for (var fpd=0;fpd<=list.length-1;fpd++) {if (list[fpd] == DOM.propList[fpc]) {foundProp = true;break}}
						if (!foundProp) {list[list.length] = DOM.propList[fpc]}
					}
				}
				functionStart = list.length
				for (var fpe=0;fpe<=DOM.functionList.length-1;fpe++) {
					if (typeof(DOM.core[DOM.functionList[fpe]]) != "undefined") {
						var foundProp = false
						for (var fpf=0;fpf<=list.length-1;fpf++) {if (list[fpf] == DOM.functionList[fpe]) {foundProp = true;break}}
						if (!foundProp) {list[list.length] = DOM.functionList[fpe]}
					}
				}
			} else {functionStart = list.length}
		}
		if (list.length == 0 && DOM.lastExaminedIndex == DOM.lastErrorIndex) {
			if (DOM.lastPropFix) {DOMwrite("<UL>\r")}
			else {
				DOM.fullCountTop--
				displayDOMstat()
			}
			
		}
		DOM.objectWorking = false
		if (list.length <= 0 && DOM.lastExaminedIndex > DOM.lastErrorIndex) {
			if (!DOM.errorObjects[DOM.lastExaminedIndex]) {
				DOMwrite("</UL>\r<SPAN CLASS=\"msg\">\rThis object has no properties\r</SPAN>\r<UL>\r")
			}
		} else {
			if (DOM.lastExaminedIndex >= DOM.lastErrorIndex) {
				DOM.fullCountTop += list.length
				displayDOMstat()
			}
			for (var fpg=0;fpg<=list.length-1;fpg++) {
				DOM.lastExaminedIndex++
				if (drawLine == fpg && DOM.lastExaminedIndex > DOM.lastErrorIndex) {DOMwrite("</UL>\r<HR WIDTH=\"100%\">\r<UL>\r")}
				DOM.lastExamined = list[fpg]
				var jprop = (!isNaN(list[fpg]))? "["+list[fpg]+"]":"."+list[fpg]
				if (typeof(DOM.core[list[fpg]]) == "object" && DOM.core[list[fpg]] != null && fpg < functionStart) {
					var cancelOp = false
					if (DOM.noRepeat && DOM.map && DOM.depth < DOM.max) {
						var parentSave = DOM.coreIndex
						while(parentSave >= 0) {
							// IE Bug
							// (window == document) = true
							// (document == window) = false
							if ((DOM.foundList[parentSave].core == DOM.core[list[fpg]]) && (DOM.core[list[fpg]] == DOM.foundList[parentSave].core)) {cancelOp = true;break}
							else {parentSave = DOM.foundList[parentSave].parent}
						}
						if (!cancelOp) {
							var saveCoreIndex = DOM.coreIndex
							DOM.coreIndex = DOM.foundList.length
							DOM.foundList[DOM.coreIndex] = new Object()
							DOM.foundList[DOM.coreIndex].core = DOM.core[list[fpg]]
							DOM.foundList[DOM.coreIndex].parent = saveCoreIndex
						}
					}
					if (!cancelOp && DOM.map && DOM.depth < DOM.max) {
						if (DOM.lastExaminedIndex <= DOM.lastErrorIndex) {
							var saveCurr = DOM.current, saveCore = DOM.core
							DOM.current = (DOM.current)? DOM.current+jprop:list[fpg]
							DOM.core = DOM.core[list[fpg]]
							DOM.depth++
							findPropData()
							if (DOM.lastExaminedIndex > DOM.lastErrorIndex) {
								DOMwrite("</UL>\r")
								DOM.fullCount++
								displayDOMstat()
							}
							DOM.depth--
							DOM.current = saveCurr
							DOM.core = saveCore
						} else {
							if (DOM.lastPropFix && DOM.lastErrorIndex == DOM.lastExaminedIndex-1) {
								while (DOM.depth < DOM.lastPropFix) {
									DOMwrite("</UL>\r")
									DOM.fullCount++
									DOM.lastPropFix--
								}
								displayDOMstat()
							}
							if (DOM.processLink && DOM.lastExaminedIndex > DOM.lastErrorIndex) {DOMwrite("<LI><A HREF='javascript:window.opener.showProps(window.opener.quoteDecode(\""+quoteEncode(DOM.current+jprop)+"\"),0,"+DOM.hideExtras+","+DOM.noRepeat+")'>"+((DOM.map && DOM.current)? DOM.current+jprop:list[fpg])+"</A>:\r")}
							else {DOMwrite("<LI><SPAN CLASS=\"disabled\">"+((DOM.map && DOM.current)? DOM.current+jprop:list[fpg])+"</SPAN>:\r")}
							var saveCurr = DOM.current, saveCore = DOM.core
							DOM.current = (DOM.current)? DOM.current+jprop:list[fpg]
							DOM.core = DOM.core[list[fpg]]
							DOMwrite("<UL>\r")
							DOM.depth++
							DOM.lastPropFix = (fpg == list.length-1)? DOM.depth:false
							findPropData()
							DOM.lastPropFix = 0
							DOMwrite("</UL>\r")
							DOM.depth--
							DOM.current = saveCurr
							DOM.core = saveCore
							DOM.fullCount++
							displayDOMstat()
						}
						if (DOM.noRepeat && DOM.map) {DOM.coreIndex = saveCoreIndex}
					} else if (DOM.lastExaminedIndex > DOM.lastErrorIndex) {
						if (DOM.lastPropFix && DOM.lastErrorIndex == DOM.lastExaminedIndex-1) {
							while (DOM.depth < DOM.lastPropFix) {
								DOMwrite("</UL>\r")
								DOM.lastPropFix--
							}
						}
						DOM.cancelErr = 0
						if (DOM.processLink) {DOMwrite("<LI><A HREF='javascript:window.opener.showProps(window.opener.quoteDecode(\""+quoteEncode(DOM.current+jprop)+"\"),0,"+DOM.hideExtras+","+DOM.noRepeat+")'>"+((DOM.map && DOM.current)? DOM.current+jprop:list[fpg])+"</A>\r")}
						else {DOMwrite("<LI><SPAN CLASS=\"disabled\">"+((DOM.map && DOM.current)? DOM.current+jprop:list[fpg])+"</SPAN>\r")}
						DOM.fullCount++
						displayDOMstat()
					}
				} else if (DOM.lastExaminedIndex == DOM.lastErrorIndex) {
					DOM.fullCountTop--
					displayDOMstat()
				} else if (DOM.lastExaminedIndex > DOM.lastErrorIndex) {
					if (DOM.lastPropFix && DOM.lastErrorIndex == DOM.lastExaminedIndex-1) {
						while (DOM.depth < DOM.lastPropFix) {
							DOMwrite("</UL>\r")
							DOM.fullCount++
							DOM.lastPropFix--
						}
						displayDOMstat()
					}
					DOM.lastPropFix = (fpg == list.length-1)? DOM.depth:false
					var str = DOM.core[list[fpg]]
					if (str == reportAdjust) {str = DOM.errorBackup}
					var stat = (!str && ((str+"").length <= 0 || str == null))? false:true, sty = "off"
					str = removeHTML(str,((fpg >= functionStart)? true:false),DOM.charLimit)
					if (stat || fpg >= functionStart) {
						sty = "on"
						if (typeof(DOM.core[list[fpg]]) == "function" || fpg >= functionStart) {
							sty = "function"
							str = (str.indexOf("<BR>") != 0)? "<BR>"+str:str
						}
					}
					var stTag = (sty == "function")? "TT":"SPAN"
					DOM.lastPropFix = 0
					DOM.cancelErr = 0
					if (DOM.processLink && fpg < functionStart) {DOMwrite("<LI><A CLASS=\""+((stat)? "on":"off")+"\" HREF='javascript:window.opener.showProps(window.opener.quoteDecode(\""+quoteEncode(DOM.current+jprop)+"\"),0,"+DOM.hideExtras+","+DOM.noRepeat+")'>"+((DOM.map && DOM.current)? DOM.current+jprop:list[fpg])+"</A>: <"+stTag+" CLASS=\""+sty+"\">"+str+"</"+stTag+">\r")}
					else {DOMwrite("<LI><SPAN CLASS=\""+((stat)? "on":"off")+"\">"+((DOM.map && DOM.current)? DOM.current+jprop:list[fpg])+"</SPAN>: <"+stTag+" CLASS=\""+sty+"\">"+str+"</"+stTag+">\r")}
					DOM.fullCount++
					displayDOMstat()
				}
				DOM.lastExamined = null
			}
		}
	} else {DOMwrite("</UL>\r<SPAN CLASS=\"msg\">\rThis object is null or undefined and cannot have properties\r</SPAN>\r<UL>\r")}
}
function DOMwrite(text) {DOM.window.document.write(text)}
function displayDOMstat() {DOM.window.status = "Working...("+DOM.fullCount+"/"+DOM.fullCountTop+")"}
function showProps(data,maplimit,hideAdditionalProps,noRepeatMode,limitString) {
	if (!DOM.working) {
		DOM.errorID = 0
		DOM.lastExaminedData = data
		DOM.map = (maplimit)? true:false
		DOM.max = (maplimit)? maplimit:0
		DOM.hideExtras = (hideAdditionalProps)? true:false
		DOM.noRepeat = (noRepeatMode)? true:false
		DOM.charLimit = (limitString)? true:false
		DOM.lastExamined = null
		DOM.errorObjects = new Array()
		DOM.lastPropFix = 0
		DOM.stupidCounterInitErrorFix = false
		DOM.fullCount = 0
		DOM.fullCountTop = 0
		DOM.depth = -1
		DOM.working = true
		DOM.lastExaminedIndex = -1
		DOM.lastErrorIndex = -2
		DOM.startedProps = false
		if (!DOM.objectAccessErrorFix) {DOM.objectAccessErrorFix = false}
		var errorHolder = window.onerror;DOM.errorBackup = errorHolder;window.onerror = reportAdjust
		DOM.window = window.open("","domwindow","width=700,height=400,left=20,top=20,status=1,scrollbars=1,resizable=1")
		DOM.window.document.clear()
		DOM.window.document.open("text/html","replace")
		DOM.window.status = "Working..."
		DOMwrite("<HTML>\r<HEAD>\r<TITLE>DOM browser</TITLE>\r<STYLE>\rA,.disabled {text-decoration:none;color:#0000FF}\r.on {color:#000000}\r.off {color:#999999}\r.function {color:#000000;font-family:fixedsys,courier,monospace}\r.msg {color:#FF0000}\rA:hover {color:#FF0000}\r</STYLE>\r</HEAD>\r<BODY NOWRAP>\r")
		if (typeof(data) != "string") {var header = "Path: Unknown", cleanHeader = null}
		else {
			var holder = new Array(), holderi = 0, headerFound = false, header = "", cleanHeader = "", strMode = null, dataFormat = "", bracketList = new Array()
			for (var spb=0;spb<=data.length-1;spb++) {
				var cChar = data.charAt(spb)
				if (cChar == "%") {dataFormat += "%4"}
				else if (!strMode) {
					if (cChar == "\"") {strMode = "\""}
					else if (cChar == "'") {strMode = "'"}
					dataFormat += cChar
				} else {
					switch(cChar) {
					case("."):dataFormat += "%1";break
					case("["):dataFormat += "%2";break
					case("]"):dataFormat += "%3";break
					case("%"):dataFormat += "%4";break
					case("\\"):spb++;dataFormat += "\\"+data.charAt(spb);break
					case(strMode):dataFormat += strMode;strMode = null;break
					default:dataFormat += cChar;break
					}
				}
			}
			while (!headerFound) {
				var indexF1 = dataFormat.indexOf(".",holderi), indexF2 = dataFormat.indexOf("[",holderi)
				if (!holder.length) {
					if (indexF1 >= 0 && ((indexF2 >= 0 && indexF1 < indexF2) || indexF2 < 0)) {holderi = indexF1}
					else if (indexF2 >= 0 && ((indexF1 >= 0 && indexF2 < indexF1) || indexF1 < 0)) {holderi = indexF2}
					else {holderi = dataFormat.length}
					holder[0] = dataFormat.substring(0,holderi)
				} else if (indexF1 >= 0 && ((indexF2 >= 0 && indexF1 < indexF2) || indexF2 < 0)) {
					var indexF1s = dataFormat.indexOf(".",indexF1+1), indexF2s = dataFormat.indexOf("[",indexF1+1)
					if (indexF1s >= 0 && ((indexF2s >= 0 && indexF1s < indexF2s) || indexF2s < 0)) {holderi = indexF1s}
					else if (indexF2s >= 0 && ((indexF1s >= 0 && indexF2s < indexF1s) || indexF1s < 0)) {holderi = indexF2s}
					else {holderi = dataFormat.length}
					holder[holder.length] = dataFormat.substring(indexF1+1,holderi)
				} else if (indexF2 >= 0 && ((indexF1 >= 0 && indexF2 < indexF1) || indexF1 < 0)) {
					holderi = dataFormat.indexOf("]",indexF2+1)
					if (holderi < 0) {holderi = dataFormat.length}
					bracketList[holder.length] = true
					holder[holder.length] = dataFormat.substring(indexF2+1,holderi)
					holderi++
				} else {headerFound = true}
			}
			for (var spa=0;spa<=holder.length-1;spa++) {
				var startTag = "", endTag = (spa < holder.length-1)? "</A>":"", holderOut = ""
				for (var spc=0;spc<=holder[spa].length-1;spc++) {
					if (holder[spa].charAt(spc) == "%") {spc++
						switch(holder[spa].charAt(spc)) {
						case("1"):holderOut += ".";break
						case("2"):holderOut += "[";break
						case("3"):holderOut += "]";break
						case("4"):holderOut += "%";break
						default:alert("Error\rUnknown % string command number: "+input.charAt(qda));break
						}
					} else {holderOut += holder[spa].charAt(spc)}
				}
				holder[spa] = holderOut
				if (!bracketList[spa]) {
					cleanHeader += ((spa != 0)? ".":"")+holder[spa]
					if (spa < holder.length-1) {startTag = "<A HREF='javascript:window.opener.showProps(window.opener.quoteDecode(\""+quoteEncode(cleanHeader)+"\"),0,"+DOM.hideExtras+","+DOM.noRepeat+")'>"}
					header += ((header != "")? ".":"")+startTag+removeHTML(holder[spa])+endTag
				} else {
					cleanHeader += "["+holder[spa]+"]"
					if (spa < holder.length-1) {startTag = "<A HREF='javascript:window.opener.showProps(window.opener.quoteDecode(\""+quoteEncode(cleanHeader)+"\"),0,"+DOM.hideExtras+","+DOM.noRepeat+")'>"}
					header += "["+startTag+holder[spa]+endTag+"]"
				}
			}
			header = "Path: "+header
		}
		var propsboxheader = ""
		if (cleanHeader) {
			if (cleanHeader.indexOf("'") >= 0) {
			if (cleanHeader.indexOf("\"") < 0) {propsboxheader = " VALUE=\""+cleanHeader+"\""}
			} else if (cleanHeader.indexOf("\"") >= 0) {
			if (cleanHeader.indexOf("'") < 0) {propsboxheader = " VALUE='"+cleanHeader+"'"}
			} else {propsboxheader = " VALUE=\""+cleanHeader+"\""}
		}
		DOMwrite("<B>"+header+"</B><BR>\r")
		DOMwrite("<FORM onSubmit=\"window.opener.showProps(showpropsbox1.value,((showpropscheck1.checked && !isNaN(showpropsbox2.value))? Number(showpropsbox2.value):0),showpropscheck3.checked,showpropscheck4.checked,showpropscheck5.checked)\">\r")
		DOMwrite("<INPUT TYPE=TEXT NAME=\"showpropsbox1\""+propsboxheader+">\r")
		DOMwrite("<INPUT TYPE=SUBMIT VALUE=\"Go\"><BR>\r")
		DOMwrite("<INPUT TYPE=CHECKBOX ID=\"showpropscheck1\">Traversal depth (Limit: <INPUT TYPE=TEXTBOX ID=\"showpropsbox2\" VALUE=\""+((DOM.map)? DOM.max:"")+"\" SIZE=\"2\">)<BR>\r")
		DOMwrite("<INPUT TYPE=CHECKBOX ID=\"showpropscheck3\""+((DOM.hideExtras)? ' CHECKED':'')+">Do not search for additional properties<BR>\r")
		DOMwrite("<INPUT TYPE=CHECKBOX ID=\"showpropscheck4\""+((DOM.noRepeat)? ' CHECKED':'')+">No repeat mode<BR>\r")
		DOMwrite("<INPUT TYPE=CHECKBOX ID=\"showpropscheck5\""+((DOM.charLimit)? ' CHECKED':'')+">Character Limit<BR>\r")
		DOMwrite("</FORM>\r")
		DOMwrite(((cleanHeader || typeof(cleanHeader) == "string")? "<INPUT TYPE=BUTTON VALUE=\"Refresh\" onClick='window.opener.showProps(window.opener.quoteDecode(\""+quoteEncode(cleanHeader)+"\"),"+DOM.max+","+DOM.hideExtras+","+DOM.noRepeat+","+DOM.charLimit+")'>\r<BR><BR>\r":""))
		DOM.errorID = 1
		var actualObj = (typeof(data) == "string")? eval(data):data
		DOM.errorID = 0
		DOM.cancelErr = 0
		DOMwrite("Type: "+typeof(actualObj)+"<BR>\r")
		DOM.current = (typeof(data) == "string")? data:null
		DOM.baseCurrent = (typeof(data) == "string")? data:null
		DOM.core = actualObj
		DOM.baseCore = actualObj
		if (DOM.noRepeat && DOM.map) {
			DOM.foundList = new Array()
			DOM.foundList[0] = new Object()
			DOM.foundList[0].core = DOM.baseCore
			DOM.foundList[0].parent = -1
			DOM.coreIndex = 0
		}
		DOM.processLink = (typeof(data) == "string")? true:false
		if (actualObj == reportAdjust) {actualObj = DOM.errorBackup}
		var stat = (!actualObj && ((actualObj+"").length <= 0 || actualObj == null))? false:true
		DOM.objectAccessErrorFix = true
		var str = removeHTML(actualObj), sty = "on"
		DOM.objectAccessErrorFix = false
		if (typeof(actualObj) == "function") {
			sty = "function"
			if (str.indexOf("<BR>") != 0) {str = "<BR>"+str}
		}
		var stTag = (sty == "function")? "TT":"SPAN"
		DOMwrite("Value: <"+stTag+" CLASS=\""+sty+"\">"+str+"</"+stTag+">\r")
		DOM.startedProps = true
		DOMwrite("<UL>\r")
		DOM.depth++
		findPropData()
		closeDocument()
	}
}