function SampleXmpLogListener(level, categoryFilterArray, callbackObj) // example, xmp.util.LogLevels.DEBUG
{
    SampleXmpLogListener.ctor.call(this, level);    

	this._callbackObj = null;
	var logger = xmp.util.Logger.getInstance();
	logger.addListener(this); // *this* class implements the LogListener interface
	logger.setCategoryFilterArray(categoryFilterArray);
	this._logAreaVisible = true;
}

xmp.DERIVE_CLASS( xmp.util.AbstractLoggerListener, SampleXmpLogListener );

SampleXmpLogListener.prototype.fini = function()
{
	this.initialize();
}

SampleXmpLogListener.prototype.setCallbackObject = function(callbackObj)
{
	this._callbackObj = (callbackObj) ? callbackObj : null;
};

SampleXmpLogListener.prototype.initialize = function()
{
	try
	{
		this.clearLogOutput();
	}
	catch (e)
	{
		alert('Error in SampleXmpLogListener.initialize:' + xmp.extractErrorMessage(e));
	}
};

SampleXmpLogListener.prototype.clearLogOutput = function()
{
	var outputArea = window.document.getElementById('log_output_area');
	if (outputArea)
	{
		outputArea.innerHTML = '';
	}
};

SampleXmpLogListener.prototype.toggleLogOutput = function()
{
	var scrollArea = window.document.getElementById('log_output_area_scroll_clip');
	if (scrollArea)
	{
		this._logAreaVisible = !this._logAreaVisible;
		scrollArea.style.display = this._logAreaVisible ? 'block' : 'none';
	}
};

// LoggerListener implementation
SampleXmpLogListener.prototype.handleLogMessage = function(level, category, message)
{
	try
	{	
		if (this._callbackObj)
		{
			this._callbackObj.handleLogMessage(level, category, message);
		}
		// See http://www.adp-gmbh.ch/web/js/scroll.html
		var outputArea = window.document.getElementById('log_output_area');
		if (outputArea)
		{
			var p = window.document.createElement("P");
			p.innerHTML = '<span class="' + xmp.util.LogLevels.stringify(level) + '_message">' +
				category + ': ' + xmp.escapeHtml(message, true, true) + '</span>'; 
			outputArea.appendChild(p);
			
			var scrollArea = window.document.getElementById('log_output_area_scroll_clip');
			if (scrollArea)
			{
				scrollArea.scrollTop = scrollArea.scrollHeight;
			}
		}
	}
	catch (e)
	{
		alert('Error in SampleXmpLogListener.handleLogMessage:' + xmp.extractErrorMessage(e));
	}
};

