﻿
function DebugManager()
{
    var This = this;
    
    // Data members
    This.IsEnabled = false;
    This.TraceLog = '';    
    This.TraceWindow = null;

    // Methods
    This.Write = function(iText)
    {
        This.TraceLog = This.TraceLog + iText.replace(/\n/g, '<br/>\n');
        This.TraceWindow.document.body.innerHTML = This.TraceLog;
    }

    This.Trace = function(iText)
    {
        This.Write((new Date()).format('<b>yyyy-mm-dd HH:ii:ss</b>') + ': ' + iText + '\n');
    }

    This.CreateTraceWindow = function()
    {
        This.TraceWindow = window.open("", "Debug", "width=800,height=600,scrollbars=1");
        This.TraceLog = This.TraceWindow.document.body.innerHTML;
    }
    
    // Initialize
    {
        var f = function() { };

        This.IsEnabled =
            ( window.location.search.indexOf('debugmode=true') >= 0 || document.cookie.indexOf('debugmode=true') >= 0 ) &&
            window.location.search.indexOf('debugmode=false') < 0;

        if (This.IsEnabled)
        {
            document.cookie = 'debugmode=true';
            This.CreateTraceWindow();
            This.Trace('[Page refresh: ' + window.location.toString() + ']');
        }
        else
        {
            document.cookie = 'debugmode=false; expires='+(new Date()).toUTCString();
            This.Write = f;
            This.Trace = f;
        }
    }
}

var Debug = new DebugManager();
