function Loader() {
	this.load = function(images, progress, complete) {
		var imageObjects = [];
		var imageCount = images.length;
		var imagesLoaded = 0;
		
		if(navigator.userAgent.indexOf("Firefox/3.0") != -1) {
			var next = function() {
				var img = document.createElement("img");
				imageObjects[images[imagesLoaded]] = img;
				img.onload = function() {
					imagesLoaded++;
					progress(imagesLoaded / imageCount);

					if(imagesLoaded == imageCount) {
						complete(imageObjects);
						return;
					}

					next();
				}
				img.onerror = function(imageName, img) {
					return function() {
						var altImg = document.createElement("img");
						imageObjects[imageName] = altImg;
						altImg.onload = img.onload;
						altImg.onerror = img.onerror;
						altImg.src = imageName;
					}
				}(images[i], img);
				img.src = images[imagesLoaded];
			}

			next();
		} else {
			for(var i=0; i<images.length; i++) {
				var img = document.createElement("img");
				imageObjects[images[i]] = img;
				img.onload = function() {
					imagesLoaded++;
					progress(imagesLoaded / imageCount);

					if(imagesLoaded == imageCount) {
						complete(imageObjects);
					}
				}
				img.onerror = function(imageName, img) {
					return function() {
						var altImg = document.createElement("img");
						imageObjects[imageName] = altImg;
						altImg.onload = img.onload;
						altImg.onerror = img.onerror;
						altImg.src = imageName;
					}
				}(images[i], img);
				img.src = images[i];
			}
		}
	}
}
