    //test:   
    //var t={ p1 : 'prop1', p2 : 'prop2', p3 : [ 'elem1', { nest: 'n', 'nest2': 'm' }, 'elem2' ], p4 : (function fun() { alert(''); }), p5 : null };

    tj$ = window.tj$ || {};
    
    tj$.$ = tj$.$ || (function(id){ return document.getElementById( id ); });

    tj$.digger_calls_limit = 1000;
    tj$.digger_calls_count = 0;
    tj$.digger_size_limit  = 50000;

    tj$.dig = function ( indent, ob, r ){
        if( tj$.digger_calls_limit <  tj$.digger_calls_count ) return r;
        if( tj$.digger_size_limit < r.length ) return r;
        var t = (typeof ob ); 
        var n = "\n";
        var i = indent;
        if( t === 'string' || t === 'function'){
            var s = i + ob.toString().replace( n, n + indent );
            r += s + n;
        }else if( t === 'number' ){
            r += i + ob + n;
        }else if( t === 'boolean' ){
            r += i + ob + n;
        }else if( ob === null ){
            r += i + 'null' + n;
        }else if( t === 'undefined' ){
            r += i + 'undefined' + n;
        }else if( t === 'object' && ob.length  ){
            for( var j=0; j<ob.length; j++ ){
                 r = tj$.dig(i + '  ', ob[j], r);
            }
        }else if( t === 'object')
            for(var p in ob ){
                 r = tj$.dig(i + '  ' + p + ' = ', ob[p], r);
            }
        return r;
    };

    tj$.digs = function ( ob ){
        tj$.digger_calls_count = 0;
        var deb =  tj$.$('tjdebug');
        tj$.deb_collector = tj$.deb_collector || "debug:\n";
        //TODO create div status
        //if( !deb ) {
        //    documentCreateElement('div');
        //    document....
        var w = new Date();   //title_font_size+'px';
        if( tj$.deb_collector || (deb && deb.innerHTML.length < 10000 ) || (window.console && window.console.log) ){
           w = '' + (w.getHours()+1) + ':' + (w.getMinutes()+1) + ':' + (w.getSeconds()+1) + '.' + (w.getMilliseconds() + 1);
           w += ' ' + tj$.dig('',ob,'');
           tj$.deb_collector += w;
        }
        if( deb && deb.innerHTML.length < 500000 )  deb.innerHTML += "<pre>" + w + "</pre>";
        //Should catch history before page loaded:
        //if( deb && deb.innerHTML.length < 50000 )  deb.innerHTML = "<pre>" + tj$.deb_collector + "</pre>";
        if( window.console && window.console.log )  console.log( w );
    };





