/**
 * Image preloader
 * 
 * @param Array<String> images
 */
var ImagePreload = function (images, elem) {
	var _images = [];
	
	/**
	 * Wait specified images are loaded
	 * 
	 * @param function callback
	 */
	this.wait = function (callback) {
//dPut("ImagePreload::wait");
		var retry = 0;
		var checkPreload = function () {
			var len = _images.length,
				count = 0;

			for (var index=0; index < len; index++) {
//dPut(retry + ": " + index + ": " + _images[index].complete + ", " + _images[index].src);
				if (_images[index].complete) {
					count++;
				}
			}

			if (elem) {
				var pct = Math.round((count / len) * 1000) / 10;
				$(elem).html(pct + "%");
			}
			
			
//dPut("loaded: " + count + " / " + len);
			if (count < len) {
				if (++retry < 100) {
//dPut("...Retry: " + retry);
					setTimeout(checkPreload, 200);
				}
			}
			else {
//dPut("***complete");
				if (elem) {
					$(elem).animate({opacity: "0"}, 3000);
				}
				if (callback) {
					callback();
				}
			}
			
		};
		checkPreload();
	};
	
	/**
	 * appendImage
	 * 
	 * @param ImageElement image
	 */
	this.appendImage = function (image) {
		_images.push(image);
	};
	
	/**
	 * adddImagePath
	 */
	this.adddImagePath = function (path) {
		var img = new Image();
		img.src = path;
		_images.push(img);
	};
	
	/**
	 * init
	 */
	this.init = function () {
		var len = images.length;
		for (var index=0; index < len; index++) {
			var img = new Image();
			img.src = images[index];
			_images.push(img);
		}
	};
	
	this.init();
};

