
Log = function()
{
	this.beginDate = new Date();
	this.m_debugEnable = true;
	this.m_debugShow   = false;
	this.m_debugLog    = new Array();
	this.m_blockOffset = 0;
	this.m_mtError     = {"text":"Error   ", "color":"red"};
	this.m_mtInfo      = {"text":"Info    ", "color":"black"};
	this.m_mtWarning   = {"text":"Warning ", "color":"blue"};
	this.m_mtBegin     = {"text":"Begin   ", "color":"green"};
	this.m_mtEnd       = {"text":"End     ", "color":"green"};
	this.info("Log class - start");
}

Log.prototype._msg = function(type, msg, text)
{
	if (!this.m_debugEnable) return;
	var d = new Date();
	//d = d - this.refDate;
	var diffTime=this.calculateTimeToString(this.beginDate,new Date());
	this.beginDate = new Date();
	
	var h = d.getHours();
	var m = d.getMinutes();
	m = ((m < 10) ? "0" : "") + m;
	var sec = d.getSeconds();
	sec = ((sec < 10) ? "0" : "") + sec;
	var msec = d.getMilliseconds();
	msec = ((msec < 10) ? "0" : "") + msec;	
	//var s = "<pre style=\"margin: 0px; color=" + type["color"] + ";\">" + type["text"] + (h + ":" + m + ":" + sec + "." +msec);
	//var s = "<pre style=\"margin: 0px; color=" + type["color"] + ";\">"+(h + ":" + m + ":" + sec + "." +msec);
	var s = "<pre style=\"margin: 0px; color=" + type["color"] + ";\">"+diffTime;
	s += ": ";
	for (var i = 0; i < this.m_blockOffset; i++) s += "  ";
	if (text) {
		s += msg + "\r\n<span style='color=#aaaaaa'>" + text + "</span>";//"</pre>";
	}else{
		s += msg;//+"</pre>";
	}

	if(this.m_debugShow) {
		var o = window.open("","WBTAPIDebug","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,left=0,top=0,width=300,height=" + (screen.height - 30));
		top.window.moveTo(310, 0);
		top.window.resizeTo(screen.width - 310, screen.height - 30);
		if (o && this.m_debugLog.length > 0 ) {
			for (var i = 0; i < this.m_debugLog.length; i++) {
				o.document.write(this.m_debugLog[i]);
			}
			delete (this.m_debugLog);
			this.m_debugLog = new Array();
		}
		if (o) o.document.write(s);
	} else {
		this.m_debugLog[this.m_debugLog.length] = s;
	}
	
}

Log.prototype.error = function(msg, text)
{
	this._msg(this.m_mtError, msg, text);
}

Log.prototype.info = function(msg, text)
{
	this._msg(this.m_mtInfo, msg, text);
}

Log.prototype.warning = function(msg, text)
{
	this._msg(this.m_mtWarning, msg, text);
}

Log.prototype.begin = function(msg, text)
{
	this._msg(this.m_mtBegin, msg, text);
	this.m_blockOffset++;
}

Log.prototype.end = function(msg, text)
{
	this.m_blockOffset--;
	if (this.m_blockOffset < 0) this.m_blockOffset = 0;
	this._msg(this.m_mtEnd, msg, text);
}

Log.prototype.showWindow = function()
{
	this.m_debugShow = true;
	this.info("Show debuger window");
}

Log.prototype.calculateTimeToString = function(dateStart, dateEnd)
{
  var dd = Math.abs( dateEnd.getTime() - dateStart.getTime() );
  var ds = ((dd < 10) ? "0" : "") + dd;
  ds = ((dd < 100) ? "0" : "") + ds;
  ds = ((dd < 1000) ? "0" : "") + ds;
  return (ds);
};

log = new Log();

