/*
----------------------------------------------------
---------------- Object Debugger -------------------
-----This is a friendlier alternative to alerts.---- 
-----Argument takes objects, elements or arrays----- 
-----In browsers that are Firebug enabled, it-------
-----serializes to the console. In browers without--
-----firebug, it creates an output panel in the-----
-----bottom right corner of the screen.-------------
----------------------------------------------------
*/

var oDebug = function(obj){
    return;
    var inspect = function(obj){
        try{
            obj = eval(obj);
        }catch(ex){
            //trace(ex);
        }
        
        if(obj){
            switch( typeof obj ){
                case 'string': trace(obj); break;
                case 'object': if(obj.length){ evalArr(obj); }else{ evalObj(obj); } break;     
                case 'array': evalArr(obj); break; 
                case 'function': trace(obj); break;
                default: trace('Unknown object type'); break;
            }
        }else{ trace('Debug takes 1 argument'); }
    }
    
    var evalArr = function(obj){
        for(i=0;i<obj.length;i++){
            trace(obj[i]);
        }
    }
    
    var evalObj = function(obj){
        if(obj.length){
            evalArr(obj);
        }else{
            for(key in obj){
                trace(key + ' : ' + obj[key] );
            }
        }
    }
     
    var trace = function(str){
        if(typeof console != 'undefined'){
            console.log(str);
        } else {
            if(document.getElementById('d3bugc0ns0l3')){
                if(typeof str != 'undefined'){
                    document.getElementById('d3bugL0gwin').value += str+'\n';
                    scrollToBottom();
                }
            }else{
                document.body.appendChild(createConsole());
                trace(str);
            }
        }
    }
    
    var scrollToBottom = function(){
        document.getElementById('d3bugL0gwin').scrollTop = document.getElementById('d3bugL0gwin').scrollHeight;
    }
    
    var createLogWin = function(){
        var el = document.createElement('textarea'); el.id = 'd3bugL0gwin'; el.style.width = '100%'; el.style.height = '200px'; el.style.border = '1px solid #00ff00'; el.style.color = '#00ff00'; el.style.padding = '10px'; el.style.background = '#000'; el.style.overflow = 'auto'; 
        return el;
    }
    
    var createEvalInput = function(){
        var input = document.createElement('textarea'); input.id = 'd3bugInput'; input.style.width = '100%'; input.style.height = '20px'; input.style.color = '#00ff00'; input.style.border = '1px solid #00ff00'; input.style.padding = '10px'; input.style.background = '#000'; input.style.overflow = 'hidden';
        return input;
    }
    
    var createEvalBtn = function(){
        var btn = document.createElement('a'); btn.innerHTML = 'EVAL()'; btn.href = 'javascript:;'; btn.style.color = '#00ff00'; btn.style.background = '#000'; btn.style.textDecoration = 'none'; btn.style.padding = '5px'; btn.style.margin = '4px'; 
        btn.onclick = function(){ 
            var val=document.getElementById('d3bugInput').value; 
            try{ trace( inspect( val ) ); }
            catch(ex){ trace(ex) } 
            document.getElementById('d3bugInput').value=''; 
        };
        return btn;
    }
    
    var createClearBtn = function(){
        var btn = document.createElement('a'); btn.innerHTML = 'CLEAR()'; btn.href = 'javascript:;'; btn.style.color = '#00ff00'; btn.style.background = '#000'; btn.style.textDecoration = 'none'; btn.style.padding = '5px'; btn.style.margin = '4px';
        btn.onclick = function(){ 
            document.getElementById('d3bugL0gwin').value = ''; 
        };
        return btn;
    }
    
    var createEvalCtl = function(){
        var el = document.createElement('div'); el.style.height = '30px'; 
        el.appendChild(createEvalInput()); 
        el.appendChild(createEvalBtn());
        el.appendChild(createClearBtn());
        return el;
    }
    
    var createConsole = function(){
        var el = document.createElement('div'); el.id = 'd3bugc0ns0l3'; el.style.position = 'absolute'; el.style.bottom = '40px'; el.style.right = '40px'; el.style.width = '800px'; el.style.opacity = '.7'; el.style.filter='alpha(opacity=70)'; 
        el.appendChild(createLogWin());
        el.appendChild(createEvalCtl());
        return el;
    }
    
    var init = new function(){
        inspect(obj);
    }
    
};

