/*****************************************************************
	debug.js
    by Danny Goodman (www.dannyg.com)
    
    Add to your page with:
    <SCRIPT LANGUAGE="JavaScript" SRC="debug.js"></SCRIPT>
******************************************************************/
var isNav = ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion) >= 4))
var isIEMac = (!isNav && navigator.userAgent.indexOf("Mac") != -1)

//********BEGIN 'THE EVALUATOR'************************************
// Evaluate an expression (including executing a statement)
// and display returned values in 'output' textarea. Provide
// switch for Navigator codebase principal security.
function evaluateIt(form){
	if (isNav && form.security.checked) {
		netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead")
		netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite")
	}

	form.output.value = eval(form.input.value)
	
	if (isNav && form.security.checked) {
		netscape.security.PrivilegeManager.disablePrivilege("UniversalBrowserRead")
		netscape.security.PrivilegeManager.disablePrivilege("UniversalBrowserWrite")
	}
}

// List all properties of an object (except for document.domain) 
// in the 'output' textarea.
function showProps(form) {
	objName = form.inspector.value
	obj = eval(objName)
	var msg = ""
	var count = 0
	var cr = (isIEMac) ? "\r\n" : "\n"
	for (var i in obj) {
		if (i != "domain") {
			msg += objName + "." + i + "=" + obj[i] + cr
		}
	}
	form.output.value = msg
}

// Event handler looks for Enter key to trigger evaluateIt()
function evalIfReady(form, evt) {
	if (isNav) {
		if (evt.which == 13) {
			evaluateIt(form)
			return false
		}
	} else {
		if (window.event.keyCode == 13) {
			evaluateIt(form)
			return false
		}
	}
	return true
}

// Event handler looks for Enter key to trigger showProps()
function showPropsIfReady(form, evt) {
	if (isNav) {
		if (evt.which == 13) {
			showProps(form)
			return false
		}
	} else {
		if (window.event.keyCode == 13) {
			showProps(form)
			return false
		}
	}
	return true
}

var a, b, c, d, e, f

// Writes The Evaluator fields to your document wherever you want.
function printEvaluator() {
	document.writeln("<HR SIZE=4><FORM onSubmit='return false'>")
	document.writeln("<P>Enter an expression to evaluate:<BR>")
	document.writeln("<INPUT TYPE='text' NAME='input' SIZE=80 ")
	if (!isIEMac) {
		document.writeln("onKeyPress='return evalIfReady(this.form, event)'")
	}
	document.writeln("><INPUT TYPE='button' VALUE='Evaluate' onClick='evaluateIt(this.form)'>&nbsp;")
	if (isNav) {
		document.writeln("<INPUT TYPE='checkbox' NAME='security'>Use Codebase Security")
	}
	document.writeln("</P><P>Results:<BR>")
	document.writeln("<TEXTAREA NAME='output' COLS='80' ROWS='6' WRAP='virtual'>")
	document.writeln("</TEXTAREA></P>")
	document.writeln("<P>Enter a reference to an object:<BR>")
	document.writeln("<INPUT TYPE='text' NAME='inspector' SIZE=80 ")
	if (!isIEMac) {
		document.writeln("onKeyPress='return showPropsIfReady(this.form, event)'")
	}
	document.writeln("><INPUT TYPE='button' VALUE='List Properties' ")
	document.writeln("onClick='showProps(this.form)'><BR>")
	document.writeln("</FORM>")
}
//********END 'THE EVALUATOR'************************************

//********BEGIN PROPERTY DUMPER**********************************
// output list of properties for the object
function dumpProps(objName) {
   var obj = eval(objName)
   var msg = ""
   var count = 0
   var maxProps = 10
   // loop through properties of the object
   for (var i in obj) {
      if (i != "outerHTML" && i != "outerText" && i != "innerHTML" && i != "innerText" && i != "domain") {
         msg += objName + "." + i + "=" + obj[i] + "\n"
         if (count > maxProps) {
            // output a batch
            if (isNav) {
               java.lang.System.out.println(msg)
            } else {
               alert(msg)
            }
            msg = ""
            count = 0
            continue
         }
         count++
      }
   }
   // output any leftovers
   if (isNav) {
      java.lang.System.out.println(msg)
   } else {
      alert(msg)
   }
}
//********END PROPERTY DUMPER************************************


//********BEGIN TRACER*******************************************
// trace debugger (see http://developer.netscape.com/viewsource/goodman_jsdebug.html)
// 
var IETraceWind
function trace(flag, label, value) {
	if (flag) {
		var funcName = trace.caller.toString()
		funcName = funcName.substring(10, funcName.indexOf(")") + 1)
		var msg = "In " + funcName + ": " + label + "=" + value
		if (isNav) {
			java.lang.System.out.println(msg)
		} else {
			if (!IETraceWind || IETraceWind.closed) {
				IETraceWind = window.open()
			}
			IETraceWind.document.writeln(msg)
		}
	}
}
//********END TRACER*********************************************


