(function($) {
	
	if(!$.maria) $.maria = {};

	/**
	* @param images [String, String, String] String -> Source-Path of an Image
	* @param callback Function -> Callback-Handle, fired when all Images are loaded
	*/
    $.maria.ImagePreloader = function(images, callback) {
	
		if( !$.isArray(images) ) {
			images = [images];
		}
	
        var remainingImages = images.length;
        
        var loadOneFinished = function (img) {
            console.log("Loaded image: %s (%s remaining)", img.src, remainingImages - 1);
            if(--remainingImages === 0) {
                callback(img);
            }
        };
        
        var imageContainer = "mariaImagePreloader" + (new Date()).getTime();
        
        window[imageContainer] = [];
	
        var loadOne = function (src) {
            var item = new Image();
            
            window[imageContainer].push(item);
            
            if($.browser.msie) {
                
                // bust Cache to make sure IE throws load Event
                src += "?" + (Math.random() + "").slice(2);
                
            }
            
            item.src = src;
            
            if($.browser.version <= 7) {
                function testImg() {
                    
                    if(item.complete != null && item.complete === true) { 
                        loadOneFinished(item);
                        return;
                    }
                    
                    setTimeout(testImg, 200);
                    
                }
                
                setTimeout(testImg, 200);
            
            } else {
                item.onload = function() {
                    loadOneFinished(item);
                };
            }
                
        };
        
        for (var i = 0, len = images.length; i < len; i++) {
            if(images[i].substring(0, 1) === "" || images[i].substring(0, 1) === "?" || typeof images[i] !== "string") {
                --remainingImages;
                console.log("Image %i was empty or not a string.", i);
                continue;
            }
            
            loadOne(images[i]);
        }
        
	};

})(jQuery);

