| 1 | 
							- function TrinAssetLoader(onComplete, onP) {
    if (onComplete === undefined) {
        onComplete = null;
    }
    if (onP === undefined) {
        onP = null;
    }
    this.currentAsset = 0;
    this.assetsToLoad = [];
    this.onComplete = onComplete;
    this.onP = onP;
    this.caller = null;
    this.partSize = 0;
    this.currentProgress = 0;
}
TrinAssetLoader.prototype = {
    TYPE_IMAGE: 0,
    TYPE_SOUND: 1,
    TYPE_JSON: 2,
    LOADED_JSON: [],
    addImage: function(name, src, animated) {
        if (animated === undefined) {
            animated = true;
        }
        this.assetsToLoad.push({
            name: name,
            src: src,
            type: this.TYPE_IMAGE,
            animated: animated
        });
    },
    addSound: function(name, src) {
        this.assetsToLoad.push({
            name: name,
            src: src,
            type: this.TYPE_SOUND
        });
    },
    addJson: function(name, src) {
        this.assetsToLoad.push({
            name: name,
            src: src,
            type: this.TYPE_JSON
        });
    },
    load: function() {
        var loader;
        if (this.loader === undefined) {
            loader = this;
        } else {
            loader = this.loader;
            switch (this.info.type) {
                case loader.TYPE_IMAGE:
                    this.onload = null;
                    this.onprocess = null;
                    TrinAnimation.prototype.addImage(this);
                    if (!this.info.animated) {
                        TrinAnimation.prototype.makeAnimation(this.info.name, this.info.name);
                    }
                    break;
                case loader.TYPE_SOUND:
                    this.removeEventListener("canplay", loader.load, true);
                    TrinSound.prototype.add(this);
                    break;
                case loader.TYPE_JSON:
                    TrinAssetLoader.prototype.LOADED_JSON[this.info.name] = this;
                    break;
            }
            this.loader = null;
            this.info = null;
        }
        if (loader.currentAsset === loader.assetsToLoad.length) {
            loader.loadingEnded();
            loader.process(loader, 1);
            return;
        }
        loader.currentProgress = loader.currentAsset / loader.assetsToLoad.length;
        loader.process(loader, loader.currentProgress);
        var info = loader.assetsToLoad[loader.currentAsset++];
        switch (info.type) {
            case loader.TYPE_IMAGE:
                var image = new Image();
                image.loader = loader;
                image.onload = loader.load;
                image.onprogress = function(event) {
                    var loader = arguments.callee.loader;
                    loader.process(loader.currentProgress + loader.partSize * (event.loaded / event.total));
                };
                image.onprogress.loader = loader;
                image.info = info;
                image.src = info.src;
                break;
            case loader.TYPE_SOUND:
                var sound = new Audio();
                sound.loader = loader;
                sound.info = info;
                var src;
                src = document.createElement("source");
                src.setAttribute("src", info.src + ".mp3");
                src.setAttribute("type", "audio/mpeg");
                sound.appendChild(src);
                src = document.createElement("source");
                src.setAttribute("src", info.src + ".ogg");
                src.setAttribute("type", "audio/ogg");
                sound.appendChild(src);
                sound.addEventListener("canplay", loader.load, true);
                sound.load();
                break;
            case loader.TYPE_JSON:
                var onLoad = function(json) {
                    var obj = JSON.parse(json);
                    obj.loader = arguments.callee.loader;
                    obj.info = arguments.callee.info;
                    obj.loader.load.apply(obj);
                };
                onLoad.loader = loader;
                onLoad.info = info;
                loader.loadJson(info.src, onLoad);
                break;
        }
    },
    loadingEnded: function() {
        this.currentImage = 0;
        this.assetsToLoad = [];
        if (this.onComplete !== null) {
            this.onComplete();
        }
    },
    process: function(loader, percent) {
        if (loader.onP !== null) {
            loader.onP(percent);
        }
    },
    loadJson: function(url, callback) {
        var xobj = new XMLHttpRequest();
        xobj.overrideMimeType("application/json");
        xobj.open('GET', url, true);
        xobj.onreadystatechange = function() {
            if (xobj.readyState === 4 && xobj.status === 200) {
                callback(xobj.responseText);
                xobj.onreadystatechange = null;
            }
        };
        xobj.send(null);
    },
    getLoadedJson: function(name) {
        return TrinAssetLoader.prototype.LOADED_JSON[name];
    }
};
 
 
  |