var g_fDebug = false;
var g_fTrace = false;

function getExceptionInfo(e)
{
	return (e.name + ' (' + e.number + '): ' + (e.description ? e.description : e.message));
}

function getExceptionInfoWithoutNumber(e)
{
	return (e.name + ': ' + (e.description ? e.description : e.message));
}

function assert(f, sMsg)
{
	if (g_fDebug && !f)
	{
		var s = ("JAVASCRIPT ASSERTION FAILURE" + (sMsg ? (": " + sMsg) : "!"))

		if (assert.caller == null)
			alert(s);
		else
		{
			var sCaller = assert.caller.toString();		// get the caller's code
			sCaller = sCaller.replace(/\t/gi, "    ");	// replace TABs with spaces
			alert(s + "\n\n" + sCaller);
		}
	}
}

// To enable tracing, set g_fTrace AND g_fDebug to true AND in IE do:
//
//		1. Tools -> Options -> Security
//		2. Custom Level
//		3. Enable: Initialize and script ActiveX controls not marked as safe
//
// SECURITY WARNING: Rreset the above IE security setting to Disable (or Prompt)
// when you're done with tracing.
//
function trace(s)
{
	if (!g_fTrace || !g_fDebug)
		return;
	
	try
	{
		var oFSO = new ActiveXObject("Scripting.FileSystemObject");
		var file = oFSO.OpenTextFile("c:/cussTrace.log", 8, true);	// 8 = ForAppending
		file.WriteLine(getTraceDate() + s);
		file.close();
	}
	catch (e)
	{
		window.status = ('trace() failed: ' + getExceptionInfo(e));
	}

	function getTraceDate()
	{
		var sTraceDate = "";
		var date = new Date();
		sTraceDate += date.getMonth()+1 + '/';
		sTraceDate += date.getDay()+1 + '/';
		sTraceDate += date.getYear() + ' ';
		sTraceDate += date.toLocaleTimeString() + ' - ';
		return sTraceDate;	// example: "4/5/2004 1:22:40 PM - "
	}
}

// Displays all the properties defined on the specified object and their values.
//
function alertProps(obj, skipObjects)
{
	var props = "";
	for (var i in obj)
	{
		try
		{
			if (!skipObjects || ((typeof(obj[i]) != 'object') && (typeof(obj[i]) != 'function')))
				props += ("." + i + "=" + obj[i] + "\n");
		}
		catch (e)
		{
			continue;
		}
	}
	alert(props);
}