document.addEvent('domready', function() {
	var imagesPreloads = $$('img.preload').map(function(imgElement){
		var preloadElement = $(new Image());
		preloadElement.src = imgElement.src;
		preloadElement.store('targetElement', imgElement);
		return preloadElement;
	});
	imagesPreloads.each(function(preloadElement) {
		var imgElement = preloadElement.retrieve('targetElement');
		preloadElement.addEvents({
			'load': function() {
				logInfo('event load ok "' + preloadElement.get('src') + '"');
				imgElement.fireEvent('imageLoad');
				imagesPreloads.erase(preloadElement);
			},
			'error': function() {
				logInfo('event load error "' + preloadElement.get('src') + '"');
				imgElement.fireEvent('imageError');
				imagesPreloads.erase(preloadElement);
			}
		});
	});
	
	if (imagesPreloads.length > 0) {
		var loaderFunctionTimer = (function(){
			imagesPreloads = imagesPreloads.filter(function(preloadElement){
				if (preloadElement.complete || ($type(preloadElement.naturalWidth) !== false && preloadElement.naturalWidth > 0) || (Browser.Engine.trident && preloadElement.width > 0)) {
					logInfo('loaded "' + preloadElement.get('src') + '"');
					var imgElement = preloadElement.retrieve('targetElement');
					if (preloadElement.width > 0 && preloadElement.complete) {
						imgElement.fireEvent('imageLoad');
					} else {
						imgElement.fireEvent('imageError');
					}
					return false;
				}
				return true;
			});
			
			
			if (imagesPreloads.length === 0) {
				logInfo('image loader done');
				$clear(loaderFunctionTimer);
			}
		}).periodical(100);
	}
});
