﻿
function DebugManager()
{
    var This = this;
    
    // Data members
    This.IsEnabled   = false;
    This.TraceWindow = null;
    This.DivTrace    = null;

    // Methods
    This.Write = function(iText)
    {
        This.DivTrace.innerHTML = iText;
    }

    This.Trace = function(iText)
    {
        This.DivTrace = document.createElement("div");
        This.TraceWindow.document.getElementById('log').appendChild(This.DivTrace);
        This.Write((new Date()).format('<b>yyyy-mm-dd HH:ii:ss</b>') + ': ' + iText);
        
        /* Scroll to end */
        var scroll       = This.TraceWindow.document.getElementById('log');
        scroll.scrollTop = scroll.scrollHeight;      
    }

    This.CreateTraceWindow = function()
    {
        This.TraceWindow = window.open("", "Debug", "width=800,height=600");
    
        if( This.TraceWindow.document.getElementById('taskbar') == null ){
            This.CreateTaskBar();
        }
    }
    
    This.CreateTaskBar = function()
    {
        var divTaskBar           = document.createElement("div");
        var DivTraceParent       = document.createElement("div");
        var separatorTaskBar     = document.createElement("hr")
        var buttonClear          = document.createElement("input");
        var buttonCookieEnabled  = document.createElement("input");
        var buttonCookieDisabled = document.createElement("input");
        var buttonTopPage        = document.createElement("input");
        var buttonBottomPage     = document.createElement("input");
        This.TraceWindow = window.open("", "Debug", "width=800,height=600");
        
        /* Reset Button */
        buttonClear.setAttribute('type','button');
        buttonClear.setAttribute('value','Clear');
        buttonClear.setAttribute('onClick', 'document.getElementById("log").innerHTML = "";');

        /* Enabled Button */
        buttonCookieEnabled.setAttribute('type','button');
        buttonCookieEnabled.setAttribute('value','Enabled');
        buttonCookieEnabled.setAttribute('onClick','document.cookie="debugmode=true";' + ' alert("Le cookie de Debug est maintenant activé !");');
        buttonCookieEnabled.style.margin = "0px 25px 0 25px";
        
        /* Disabled Button */
        buttonCookieDisabled.setAttribute('type','button');
        buttonCookieDisabled.setAttribute('value','Disabled');
        buttonCookieDisabled.setAttribute('onClick', 'document.cookie="debugmode=false;";' + ' alert("Le cookie de Debug est maintenant désactivé !");');
        
        /* Top Page Button */
        buttonTopPage.setAttribute('type','button');
        buttonTopPage.setAttribute('value','Top Page');
        buttonTopPage.setAttribute('onClick', 'document.getElementById("log").scrollTop = 0;');
        buttonTopPage.style.margin = "0px 25px 0 25px";
        
        /* Bottom Page Button */
        buttonBottomPage.setAttribute('type','button');
        buttonBottomPage.setAttribute('value','Bottom page');
        buttonBottomPage.setAttribute('onClick', 'var scroll = document.getElementById("log");scroll.scrollTop = scroll.scrollHeight;');
        
        /* Div Taskbar */
        divTaskBar.setAttribute('id','taskbar');
        divTaskBar.style.position = "fixed";  
        divTaskBar.style.left     = "160px";   
        divTaskBar.style.top      = "0";    
        divTaskBar.appendChild(buttonClear);  
        divTaskBar.appendChild(buttonCookieEnabled);  
        divTaskBar.appendChild(buttonCookieDisabled);  
        divTaskBar.appendChild(buttonTopPage); 
        divTaskBar.appendChild(buttonBottomPage); 

        separatorTaskBar.style.marginTop   = "30px";
        DivTraceParent.style.height        = "575px";
        DivTraceParent.style.overflow      = "scroll";

        DivTraceParent.setAttribute('id','log');
        
        This.TraceWindow.document.documentElement.appendChild(divTaskBar);
        This.TraceWindow.document.documentElement.appendChild(separatorTaskBar);  
        This.TraceWindow.document.documentElement.appendChild(DivTraceParent);    
    }
    
    // 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();

