
// As with other examples, this is best integrated into
// your own code instea of used as-is.


// I don't put a var here to make it obvious
// that it's a namespace and intended to be global
nolib = window.nolib || {};


nolib.hsh = 0;

nolib.insx = function(src) {
    var head = document.getElementsByTagName("head")[0],
        script = document.createElement("script");
        
    querySrc = src;
    script.id = "upload-script" + nolib.hsh;
    script.setAttribute("type", "text/javascript");
    script.setAttribute("src", src);
    if (script.src !== src) {
        script.src = src;
    }
    script.onload = function() { return true; };
    if (head) {
        head.appendChild(script);
    } else {
        document.write("<scr"+"ipt type=\"text/javascript\" src=\""+src+"\"></scr"+"ipt>");
    }
    return script;
};
        

nolib.load = function(str, noclobber) {
    var scripts = document.getElementsByTagName("script"),
        i, len,
        newScript;
    
    for (i = 0, len = scripts.length; i != len; i++ ) {
        if (scripts[i].src === str) {
            return {
                oncomplete: function(fn) { fn(); }
            };
        }
    }
    newScript = nolib.insx(str);
    if (/*@cc_on!@*/false) {
        newScript.oncomplete = function(fn) {
            newScript.onreadystatechange = function() {
                if (this.readyState != "loaded" && this.readyState != "complete") {
                    return;
                } else {
                    fn();
                }
            };
        };
    } else {
        newScript.oncomplete = function(fn) {
            if (newScript.addEventListener && /HTMLScriptElement/.test(newScript)) {
                newScript.addEventListener("load", function() { fn(); }, false);
            } else {
                newScript.onload = fn;
                return newScript;
            }
            return null;
        };
    }
    
    return newScript;
}

nolib.loadAll = function(s) {
    var modules = s.replace(/[\s]/gi, "").split(","),
        loadedModules = [],
        callback,
        i,
        moduleLoaded = function(url) {
            var allLoaded = false,
                j;
            for (j = 0; j != modules.length; j++) {
                if (url === modules[j]) {
                    loadedModules[j] = true;
                }
                if (!!loadedModules[j]) {
                    allLoaded = true;
                } else {
                    allLoaded = false;
                }
            }
            if (!!allLoaded && typeof callback == "function") {
                callback();
            }
        };
        
    for (i = 0; i != modules.length; i++) {
        (function() {
            var m = modules[i], j = i;
            loadedModules[j] = false;
            nolib.load(m, true).oncomplete(function() {
                moduleLoaded(m);
            });
        }());
    }
    
    
    return {
        oncomplete: function(cb) { callback = cb; }
    };
};