			// *****************************************************************
			function logError(message,file,row)
			{
				if(!file && !row)
					window.appError = "Error occured:\n" + window.name;
				else
					window.appError = "Error occured:\n\n        message: " + message + "\n        file: " + file + "\n        line: " + row + "\n\ncalled from:\n        frame: "+ window.name+"\n        href: "+window.location.href;
				handleError();
				return true;
			}

			// *****************************************************************
			function handleError()
			{
				// alert(window.appError)
				trace("error", window.appError);
			}


		    //window.onerror = logError;

			var traceHandler = null;
			
			function initTraceHandler()
			{
				if (typeof(topFrame)!="undefined")
					traceHandler = topFrame;
				
				try
				{
					if (this==top)
						traceHandler = this;
				}
				catch(e)
				{
					; // something went wrong
				}
			}
			
			
			function trace(type, col1, col2, col3)
			{
				if (traceHandler==null)
					initTraceHandler();
				if (traceHandler && typeof(traceHandler.doTrace)!="undefined")
					traceHandler.doTrace(type, col1, col2, col3);
			}

			function simpleTrace(id, val)
			{
				if (traceHandler==null)
					initTraceHandler();
				if (traceHandler && typeof(traceHandler.doTrace)!="undefined")
					traceHandler.doTrace("info", window.name, id, val);
			}
			
			function inspect(str)
			{
				if (traceHandler==null)
					initTraceHandler();
				if (traceHandler && typeof(traceHandler.interactiveInspect)!="undefined")
					traceHandler.interactiveInspect(str);
			}

			function handleKeyDownEvent(event)
			{
				if (traceHandler==null)
					initTraceHandler();
				// shift F12
				if (traceHandler && traceHandler.traceMode == "silent" && event.keyCode==123 && event.shiftKey) 
				{
					traceHandler.showTraced();
				}
			}
		
		
			initTraceHandler();
