preloader = {
	_images: {},
	_packs: {},
	_packId: 0,
	getImage: function(imgSrc, imgObj) {
		if (typeof(preloader._images[imgSrc]) != 'undefined') {
			var packId = preloader._images[imgSrc].pack;
			var pack = preloader._packs[packId];
			pack.left--;
			if (!pack.left) {
				pack.callback(pack.images);
			}
		}
	},
	handlerOnLoad: function() {
		preloader.getImage(this.relSrc, this);
	},
	handlerOnError: function() {
		preloader.getImage(this.relSrc, this);
	},
	handlerOnAbort: function() {
		preloader.getImage(this.relSrc, this);
	},
	add: function(imgList, callback) {
		if (typeof(callback) != 'function') {
			callback = function() {};
		}
		var packId = preloader._packId++;
		var images_no = 0;
		for (var i in imgList) {
			images_no++;
		}
		
		preloader._packs[packId] = {
			'left': images_no,
			'images': imgList,
			'callback': callback
		};
		
		for (var i in imgList) {
			var img		= new Image();
			img.onload	= preloader.handlerOnLoad;
			img.onerror	= preloader.handlerOnError;
			img.onabort	= preloader.handlerOnAbort;
			img.relSrc	= imgList[i];
			img.src		= imgList[i];
			preloader._images[imgList[i]] = {
				'pack': packId,
				'obj': img
			}
		}
	}
}
