if ( _debug == undefined ) {

var _debug = { logstr:'', varDumpObjects:[], varDumpLength:0, logDate:true};

_debug.getObj = function(id)
{
  if (document.getElementById)  {
  	return document.getElementById(id);
  } else if (document.all) {
	return  document.all[id];
  } else if (document.layers)  {
   	return  document.layers[id];
  }
};

_debug.writeLog = function(str)
{
	if ( this.logDate ) {
		var d = new Date();
		str = d.toLocaleTimeString() + ' : ' + str;
	}
	this.logstr += str + '<br />';
	var o = this.getObj('log');
	if ( o && o.innerHTML ) {
		o.innerHTML = this.logstr;
	}
};

_debug.overwriteLog = function(str)
{
	this.logstr = str + '<br />';
	var o = this.getObj('log');
	if ( o && o.innerHTML ) {
		o.innerHTML = this.logstr;
	}
};

_debug.logcheck = function()
{
	if ( this.logstr ) {
		var o = this.getObj('log');
		if ( o && o.innerHTML ) {
			o.innerHTML = this.logstr;
		}
	}
};

_debug.var_dump = function(variable, maxdepth, maxlength, length, indent) {
   
	//return 'NO';
	var indent = indent ? indent : '';
	var maxdepth = maxdepth ? maxdepth : 5;
	var maxlength = maxlength ? maxlength : 500;
	var length = length ? length : 0;
	indent += '\xA0\xA0\xA0\xA0';
	var i = 0;
	switch (typeof variable) {
		case "string" :
		   return "\"" + this.escapeString(variable) + "\"";
		case "number" :
		   return variable;
		case 'boolean':
			return variable ? 'true':'false';
		case 'function':
			return 'function(){...}';
		case "object" :
			if (variable == null) {
				return "*null*";
			}
			if (variable) {
				if ( this.varDumpObjects.length ) {
					for(var vdoi in this.varDumpObjects) {
						if ( this.varDumpObjects[vdoi] == variable ) {
							return this.highlightString('RECURSION');
						}
					}
				} else {
					this.varDumpLength = 0;
				}
				if ( this.varDumpObjects.length >= maxdepth ) {
					return this.highlightString('MAX DEPTH');
				}
				this.varDumpObjects.push(variable);
				//var fosy='';for(var fosx in this.varDumpObjects) {fosy+=(fosy?', ':'')+this.varDumpObjects[fosx]}; _log('_debug.var_dump: varDumpObjects'+fosy);
				var e = '', i;
				for (var p in variable) {
					//_log('_debug.var_dump: var_dump call with object property "'+p+'"');
					//if ( ++length > maxlength ) 
					if ( ++this.varDumpLength > maxlength ) {
						e += (e ? ",<br /> " : " ") + indent + this.highlightString('MAXLENGTH');
						break;
					} else {
						try {
							e += (e ? ",<br /> " : " ") + indent + "[" + this.escapeString(p) + "]:" 
								+ this.var_dump(variable[p], maxdepth, maxlength, length, indent);
						} catch (exc) {}
						i++;
					}
				}
				this.varDumpObjects.pop();
				return ( (variable instanceof Array) ? 'array' : 'object' ) +
					'(' + i + '){<br />' + e + '<br />' + indent + ')';
			}
			break;
		case "undefined" :
			return "*undefined*";
	}
	return variable;
};

_debug.escapeString = function(str) // make HTML compatible stings with special character marks (newline, tab, etc)
{
	var repl = { '&': '&amp;',  '<': '&lt;',   '>': '&gt;' };
	var spec = { '\r':  '&lt;CR&gt;',   '\n':  '&lt;NL&gt;',  '\t':  '&lt;TB&gt;'};
	if ( typeof(str) == 'string' || str instanceof String ) {
		var l = str.length, estr = '';
		for(var i=0; i<l; i++) {
			if ( spec[str.charAt(i)] !== undefined ) {
				estr +=  this.highlightString( spec[str.charAt(i)] );
			} else if ( str.charCodeAt(i)<32 ) {
				estr +=  this.highlightString( str.charCodeAt(i) );
			} else if ( repl[str.charAt(i)] !== undefined ) {
				estr +=  repl[str.charAt(i)];
			} else {
				estr += str.charAt(i);
			}
			//estr += repl[str.charAt(i)] !== undefined ? repl[str.charAt(i)] : str.charAt(i);
		}
		return estr;
	} else {
		return false;
	}
};

_debug.highlightString = function(str)
{
	return '<span style="background-color:#FBB; color:#FFF">' + str + '</span>';
};

_debug.printDebugBox = function()
{
	//document.write('<pre id="log" style="font-family: Verdana, Arial, Helvetica, sans-serif; font-weight: normal; font-size: 10px; line-height:12px; text-align:left; color:#000; background-color: #F8F8F8; border: 2px solid #F00; padding: 2px; margin: 2px;">...</pre>');
	document.write('<div id="log" class="_debug_jslog">...</div>');
	_logcheck();
};

}


function _log(str)
{
	_debug.writeLog(str);
}
function _logVar(variable, str, maxlength, maxdepth)
{
	_debug.writeLog( 'variable '+(str!=undefined ? '"'+str+'" = ' : '= ')+_debug.var_dump(variable, maxdepth, maxlength));
}
function _logcheck()
{
	_debug.logcheck();
}

