var NNLM = (NNLM === undefined) ? {} : NNLM;
if(window.dump === undefined){
    window.dump = function(){
    };
}
NNLM.dump = function(msg){
    window.dump(msg);
    if(window.console !== undefined){
        window.console.log(msg);
    }
};
NNLM.dump("\n*************\n*** BEGIN ***\n*************\n");
// Dean Edwards/Matthias Miller/John Resig
NNLM.initFn = [];
NNLM.pageLoaded = false;
NNLM.init = function() {
    // quit if this function has already been called
    if (arguments.callee.done === true){
        return;
    }
    NNLM.dump("\nNNLM INITIALIZING...\nNumber of callbacks to execute: " + NNLM.initFn.length);
    NNLM.pageLoaded = true;
    // flag this function so we don't do the same thing twice
    arguments.callee.done = true;

    // kill the timer
    if (NNLM.clearSafariInitTimer !== undefined){
        NNLM.clearSafariInitTimer();
    }
    if (NNLM.initFn.length !== 0){
        for (var i = 0; i < NNLM.initFn.length; i++){
            NNLM.initFn[i]();
        }
        NNLM.initFn = [];
    }
    NNLM.dump("\n*** NNLM.init function complete. ***\n");
};
NNLM.bindLoadFn = function(fn){
    if (NNLM.pageLoaded === true){
        //dump('Page already loaded, function executing immediately.\n');
        return fn();
    }
    NNLM.initFn.push(fn);
};


/* for Mozilla/Opera9 */
if (document.addEventListener) {
    document.addEventListener("DOMContentLoaded", NNLM.init, false);
}

/* for Safari */
if (/WebKit/i.test(navigator.userAgent)) { // sniff
    NNLM.clearSafariInitTimer = function(){
        var ival = window.setInterval(function() {
            if (/loaded|complete/.test(document.readyState)) {
                NNLM.init(); // call the onload handler
            }
        }, 10);
        return function(){
            window.clearInterval(ival);
        };
    }();
}

/* for other browsers */
window.onload = NNLM.init;
