﻿if(typeof(NB) == "undefined") {
    NB = {};
}

(function() {
    
    function checkStatus() {
        for(var i = 0; i < this.imageStack.length; i++)
        {
            if(this.imageStack[i].complete)
            {
                this.loadedCount++;
                
                this.imageStack.splice(i, 1);
                
                if(this.onProgressChange)
                {
                    this.onProgressChange.call(this, this.getProgress());
                }
                
            }
        }
        
        if(this.imageStack.length == 0)
        {
            if(this.interval)
            {
                clearInterval(this.interval);
            }
            if(this.onComplete)
            {
                this.onComplete.call(this);
            }
        }
    }
    function preloadImage(src)
    {
        var img = new Image(1, 1);
        img.src = src;
        this.element.appendChild(img);
        this.imageStack[this.imageStack.length] = img;
        this.totalCount++;
        
        if(!this.interval)
        {
            var that = this;
            this.interval = setInterval(
                function() { checkStatus.call(that); }, 150
            );
        }
    }
    
    NB.ImagePreloader = function() {
        
        this.interval = null;
        this.imageStack = [];
        this.loadedCount = 0;
        this.totalCount = 0;
        
        this.element = document.createElement("div");
        this.element.style.position = "absolute";
        this.element.style.top = "-5000px";
        this.element.style.left = "-5000px";
        this.element.style.visibility = "hidden";
        document.body.appendChild
        
    };
    
    NB.ImagePreloader.prototype = {
        getProgress : function() {
            return Math.round(this.loadedCount / this.totalCount * 100);
        },
        preload : function(srcArr, path) {
            
            if(typeof(srcArr) == "object")
            {
                var src;
                for(var i = 0; i < srcArr.length; i++)
                {
                    src = (path) ? path + srcArr[i] : srcArr[i];
                    preloadImage.call(this, src);
                    
                }
            }
            else if(typeof(srcArr) == "string")
            {
                var src = (path) ? path + srcArr : srcArr;
                preloadImage.call(this, src);
                
            }
        }
        
    };
})();
