(function (jQuery) {
	jQuery.fn.imagesLoaded = function( pOptions ){
		
		var defCachedSrc = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
		
		var $container = jQuery( this );
		var $imgs = $container.find( 'img' );
		
		var _defOptions = {
			eachLoad : function( pImage ) { },
			allLoad : function( pQtdeImagens ) { }
		}
		
		var _options = jQuery.extend( _defOptions, pOptions );
		
		var _qtImagensTotal = $imgs.length;
		var _qtImagensCarregadas = 0;
		
		var checkAllLoad = function() {
			_qtImagensCarregadas++;
			if ( _qtImagensCarregadas == _qtImagensTotal ) {
				_options.allLoad( _qtImagensCarregadas );
			}
		};
		
		$imgs.each( function() {
			
			var _objImg = this;
			var $_img = jQuery( this );
			
			$_img.bind( 'load', function() {
				if ( $_img.attr( 'src' ) != defCachedSrc ) {
					_options.eachLoad( $_img );
					checkAllLoad();
				}
			});
			
			var src = _objImg.src;
			_objImg.src = defCachedSrc;
			_objImg.src = src;
			
		});
		
		return $container;
	};
})(jQuery);
