/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

// {{{ Namespace

Ext.ns('Ext.ux');

// }}}
// {{{ Ext.ux.ScriptLoader

/**
 * Ext.ux.ScriptLoader
 *
 * @author  Kazuhiro Kotsutsumi <kotsutsumi@xenophy.com>
 * @version 1.0
 */
Ext.ux.ScriptLoader = function(config) {

    Ext.apply(this, config);

    this.addEvents('load', 'next');

    Ext.data.Store.superclass.constructor.call(this);
};

Ext.extend(Ext.ux.ScriptLoader, Ext.util.Observable, {

    // {{{ load

    load: function() {

        var me = this;
        var load = false;

        if (Ext.isObject(me.items)) {
            me.items = [me.items];
            load = true;
        }

        var item = me.items.shift();

        if(item) {
            me._load(item);
        } else {
            this.fireEvent('load', me);
        }
    },

    // }}}
    // {{{ _load

    _load: function(item) {

        var me = this;
        var te = me.renderTo || document.body || document.documentElement;
        var script    = document.createElement('script');
        script.id     = item.id || Ext.id();
        script.src    = item.src;
        script.type   = item.type   || 'text/javascript';

        if(item.charset) {
            script.charset = item.charset;
        }

        if (Ext.isIE) {
            script.onreadystatechange = function(){
                switch(script.readyState){
                  case 'complete':
                  case 'loaded' :
                        if(item.callback) {
                            item.callback.apply(item.scope || me, [script.id, me]);
                        }
                        me.load();
                    break;
                    default:
                    break;
                  
                }
            };
        }

        Ext.get(te.appendChild(script)).on('load', function(e, t) {
            if(item.callback) {
                item.callback.apply(item.scope || me, [script.id, me]);
            }
            me.load();
        }, me);

    }

    // }}}

});

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * c-hanging-comment-ender-p: nil
 * End:
 */
