﻿// JScript File

var Debug = {

    resizeBar: null,
    debugContainer: null,
    debugConsole: null,
    preparedForResize: false,
    preparedForMove: false,
    armedForResize: false,
    armedForMove: false,
    startY: 0,
    startX: 0,
    containerStartHeight: 0,
    containerStartXpos: 0,
    consoleStartHeight: 0,
    winHeight: 0,
    filters: [],
    enabled: false,

    show: function(text)
    {
        var altConsole = Debug.createConsole(text);                
        var fontColor = 'black';
        var fontWeight = 'normal';                  
        
        Debug.endResizeMove();
    },

    write: function(text)
    {
        if (Debug.checkFilters(text) && Debug.enabled)
        {
            if (typeof(console) != 'undefined')     // Hantera FireBug.
            {
                if (typeof(text) != 'object')
                    console.log(text);
                else
                    throw(text);
            }
            else                                    // Hantera alla andra fall.
            {
                var altConsole = Debug.createConsole();
                var fontColor = 'black';
                var fontWeight = 'normal';                      
                
                if (typeof(text) == 'object')       // Exceptionhantering
                {
                    fontColor = 'red';
                    fontWeight = 'bold';        
                    //text = text.name + " >> " + text.message;            
                }
                
                altConsole.innerHTML += '<font style=\'font-weight: ' + fontWeight + ';color: ' + fontColor + ';\'>' + text + '</font><br/><!--div style=\'width:480px; height:1px; background-color:#AAA;\' /-->';
                altConsole.scrollTop = altConsole.scrollHeight;            
            }
        }
    },
    
    createConsole: function(text)
    {
        if (document.getElementById('debugConsole') != null)
            return document.getElementById('debugConsole');
        else
        {            
            Debug.debugContainer = Debug.makeContainer();                   
            Debug.debugConsole = Debug.makeConsole();                             
            Debug.debugInput = Debug.makeInput();                              
            Debug.debugContainer.appendChild(Debug.debugConsole);
            Debug.debugContainer.appendChild(Debug.debugInput);                           
            document.body.appendChild(Debug.debugContainer);            
            Debug.resizeBar = document.getElementById('resizeBar');
            return Debug.debugConsole;
        }
    },
    
    testWrite: function()
    {
        Debug.write('test');
    },
    
    makeContainer: function()
    {
        var debugContainer = document.createElement('div');
        debugContainer.style.backgroundColor='#d69c00';
        debugContainer.style.height='130px';
        debugContainer.style.width = '510px';
        debugContainer.style.position = 'absolute';
        debugContainer.style.bottom = '0px';
        debugContainer.style.left = '50px';
        debugContainer.style.cursor = 'move';
        debugContainer.onmouseover = Debug.prepareForMove;
        debugContainer.onmouseout = Debug.cancelMove;
        debugContainer.innerHTML = "<div id='resizeBar' style='position:absolute;width:100%;height:4px;background-color:black;top:0px;cursor:n-resize;' onmouseover='Debug.prepareForResize()' onmouseout='Debug.cancelResize()' /><div id='debugTitleBar' style='position:absolute;top:3px;left:5px;'>DEBUG CONSOLE</div>";                        
        debugContainer.setAttribute('onselectstart', 'return false;');
        return debugContainer;
    },
    
    makeConsole: function()
    {
        var debugConsole = document.createElement('div');
        debugConsole.id = 'debugConsole';
        debugConsole.style.fontSize = '9px';
        debugConsole.style.fontFamily = 'Trebuchet MS, Tahoma, Verdana, Arial';
        debugConsole.style.backgroundColor = '#EFEFEF';
        debugConsole.style.width = '500px';
        debugConsole.style.height = '75px';
        debugConsole.style.position = 'relative';
        debugConsole.style.top = '25px';
        debugConsole.style.left = '5px';
        debugConsole.style.overflowY = 'scroll';  
        debugConsole.setAttribute('onselectstart', 'return false;');      
        return debugConsole;    
    },
    
    makeInput: function()
    {
        var debugInput = document.createElement('input');
        debugInput.type = 'text';
        debugInput.style.position = 'absolute';
        debugInput.style.bottom = '5px';
        debugInput.style.left = '5px';
        debugInput.style.width = '500px';
        debugInput.onkeyup = Debug.checkFormInput;
        return debugInput;
    },
    
    checkFormInput: function(e)
    {
        if (getEventCode(e) == 13)
        {
            Debug.write('>> ' + eval(Debug.debugInput.value));
            Debug.debugInput.value = '';
        }
    },
        
    
    addFilter: function(filterString)
    {
        Debug.filters.Push(filterString);
    },
    
    
    checkFilters: function(text)    
    {        
        if (Debug.filters.length == 0)
            return true;
            
        for (i=0; i<Debug.filters.length; i++)
        {
            if (text.indexOf(Debug.filters[i]) != -1)
                return true;                                
        }
        
        return false;
    },
    
    
    
    
    // RESIZING AND MOVING
    
    prepareForResize: function()
    {
        if (!Debug.armedForResize && !Debug.preparedForResize)
        {
            Debug.preparedForResize = true;
            Debug.resizeBar.onmousedown = Debug.armForResize;
            //document.onmouseup = Debug.endResizeMove;
            //document.getElementById('resizePrepared').value='ON';
        }
    },
    
    cancelResize: function()
    {
        if (!Debug.armedForResize)
        {
            Debug.preparedForResize = false;
            Debug.resizeBar.onmousedown = null;
            document.onmouseup = null;        
            //document.getElementById('resizePrepared').value='OFF';
        }
    },    
    
    prepareForMove: function()
    {        
        if (!Debug.armedForMove && !Debug.armedForResize && !Debug.preparedForMove)
        {
            Debug.preparedForMove = true;
            //Debug.debugContainer.onmousedown = Debug.armForMove;
            document.getElementById('debugTitleBar').onmousedown = Debug.armForMove;
            //document.onmouseup = Debug.endResizeMove;
            //document.getElementById('movePrepared').value='ON'; 
        }
    },
    
    cancelMove: function()
    {
        if (!Debug.armedForResize && !Debug.armedForMove)
        {
            Debug.preparedForMove = false;
            Debug.debugContainer.onmousedown = null;
            document.onmouseup = null;        
            //document.getElementById('movePrepared').value='OFF';
        }
    },      
    
    armForResize: function()
    {
        if (Debug.preparedForResize && Debug.preparedForMove)
        {
            Debug.armedForResize = true; 
            document.onmousemove = Debug.resize;
            document.onmouseup = Debug.endResizeMove;
            //document.getElementById('resizeArmed').value='ON';   
        }    
    },
    
    armForMove: function()
    {
        if (!Debug.preparedForResize)
        {
            Debug.armedForMove = true;
            document.onmousemove = Debug.move;
            document.onmouseup = Debug.endResizeMove;
            //document.getElementById('moveArmed').value='ON';
        }
    },      
    
    endResizeMove: function()
    {
        Debug.armedForResize = false; 
        Debug.armedForMove = false;
        Debug.preparedForResize = false;
        Debug.preparedForMove = false;
        document.onmousemove = null;   
        document.onmouseup = null;
        Debug.resizeBar.onmousedown = null;
        Debug.debugContainer.onmousedown = null;
        /*
        document.getElementById('resizeArmed').value='OFF';
        document.getElementById('moveArmed').value='OFF';
        document.getElementById('resizePrepared').value='OFF';
        document.getElementById('movePrepared').value='OFF';
        */
    },    
    
    resize: function(e)
    {        
        try
        {
            if (Debug.startY == 0)
            { 
                Debug.startY = event.clientY + document.body.scrollTop;
            }
            
            if (Debug.containerStartHeight == 0)
            {
                Debug.containerStartHeight = Debug.debugContainer.offsetHeight;
                Debug.consoleStartHeight = Debug.debugConsole.offsetHeight;
            }
            
            if (Debug.winHeight == 0)
            {
                Debug.winHeight = document.offsetHeight;                
            }
            
            var deltaY = Debug.startY - event.clientY + document.body.scrollTop;
            
            Debug.debugContainer.style.height = (Debug.containerStartHeight + deltaY) + 'px';
            Debug.debugConsole.style.height = (Debug.consoleStartHeight + deltaY) + 'px';
        }
        catch(ex)
        {
            Debug.write(ex.name);
        }    
    },
    
    move: function(e)
    {        
        try
        {
            if (Debug.startX == 0)
            { 
                Debug.startX = event.clientX;
            }
            
            if (Debug.containerStartXpos == 0)
            {
                Debug.containerStartXpos = Debug.debugContainer.offsetLeft;
            }
            
//            if (Debug.winHeight == 0)
//            {
//                Debug.winHeight = document.offsetHeight;                
//            }
            
            var deltaX = Debug.startX - event.clientX;
            
            Debug.debugContainer.style.left = (Debug.containerStartXpos - deltaX) + 'px';
        }
        catch(ex)
        {
            Debug.write(ex.name);
        }    
    }    

};

function getEventCode(e)
{
    if (window.event)
    {
        return window.event.keyCode;
    }
    else
        return e.keyCode;
}
