/*
 * Useful js debug functions
 *
 * Usage:
 *
 *	debug_log( 'I am here!' );      // write message to debug window
 *	debug_log( 'my_var='+my_var );  // print variable value
 *
 *	debug_dump('window');           // pretty dump (one level of depth) of global variable
 *                                  // (NB: variable name should be passed!)
 *	debug_dump('my_var', my_var);	// dump of local variables (have to pass name and value)
 *	debug_dump(my_var);             // this works too, but no correct name of var will be printed
 *
 * (Sergey Martynoff)
 */


 
var debug_window;

function debug_log(message) {
	if (!debug_window) {
		debug_window = window.open('','js_debug_dump_window','width=700,height=600,resizable=yes,scrollbars=yes');
		debug_window.document.write( '<html><head><title>Debug window</title></head><body><pre>' );
	}
	debug_window.document.write( "["+ (new Date()).formatISO() +"] "+ message + "\n" );
}


function debug_dump(objName, obj) {
	if (obj == null)
		obj = eval(objName);
	var result = objName + " = '" + obj + "'\n";
	for (var i in obj)
		result += objName + "." + i + " = '" + obj[i] + "'\n";
	debug_log( "<b>Dump: '"+ objName +"'</b>\n"+ result );
}


/*
 * Convert date to string, using ISO unambiguous format:
 * YYYY-MM-DD HH:MM:SS.sss
 *
 * (Sergey Martynoff)
 */
Date.prototype.formatISO = function() {
	var yyyy = this.getFullYear();
	var mm = this.getMonth()+1;
	if (mm < 10) mm = '0' + mm;
	var dd = this.getDate();
	if (dd < 10) dd = '0' + dd;
	var h = this.getHours();
	if (h < 10) h = '0' + h;
	var m = this.getMinutes();
	if (m < 10) m = '0' + m;
	var s = this.getSeconds();
	if (s < 10) s = '0' + s;
	var ms = this.getMilliseconds();
	if (ms < 10) ms = '00' + ms;
	else if (ms < 100) ms = '0' + ms;
	return yyyy+'-'+mm+'-'+dd+' '+h+':'+m+':'+s+'.'+ms;
};
