Loader

This js and css loader

HTML

<!--
<script src="fcms.js" data-loadjs="ajax.js,test.js"></script>
Скрипты ajax.js,test.js загрузятся сразу после загрузки fcms.js
<script>
fcms.loadJs('fcms.page_panel.js', function () {
alert('fcms.page_panel.js IS LOADED');
});
fcms.loadFnArray('Js', ['ajax.js', 'test.js']);
fcms.loadFnArray('Css', ['ajax.css', 'test.css']);
fcms.loadCss('ajax.css');
fcms.loadJs('testme.js');
fcms.loadJs('testme.js', function () {
    fcms.loadJs('testme1.js', function () {
        fcms.loadJs('testme2.js');    
    });
});
</script>
--!>

JavaScript

/**
 * Created by Fedor Vlasenko [email protected]
 */
(function () {
    "use strict";
    var doc = window.document,
        items = doc.scripts,
        js, arr,

    fcms = {
        cache: {
            js: {},
            css: {}
        },
        loadJs: function (src, callback) {
            if (this.cache.js.hasOwnProperty(src)) {
                if (callback) {
                    callback();
                } else {
                    return true;
                }
            }

            var script = doc.createElement("script");
            script.src = src;
            this.cache.js[src] = 1;
            doc.head.appendChild(script);

            if (callback) {
                if (script.readyState) {
                    script.onreadystatechange = function () {
                        if (script.readyState === "loaded" || script.readyState === "complete") {
                            script.onreadystatechange = null;
                            callback();
                        }
                    };
                } else {
                    script.onload = function () {
                        callback();
                    };
                }
            }
        },

        loadCss: function (href) {
            if (this.cache.css.hasOwnProperty(href)) {
                return true;
            }
            var link = doc.createElement("link");
            link.rel = "stylesheet";
            link.href = href;
            this.cache.css[href] = 1;
            doc.head.appendChild(link);
        },

        loadBefore: function (href) {
            if (navigator.appName.indexOf("Microsoft") !== -1) {
                (new Image()).src = href;
            } else {
                var obj = doc.createElement("object");
                obj.width = 0;
                obj.height = 0;
                obj.data = href;
                doc.body.appendChild(obj);
            }
        },

        loadFnArray: function (fn, arr) {
      ...