(function (jQuery) {
	jQuery.fn.imagesLoaded = function( pOptions ){
		
		var variacaoBrowser = 0;
		
		if ( jQuery.browser.msie ) {
			var v = jQuery.browser.version;
			switch ( v ) {
				case ( '7.0' ) : { }
				case ( '8.0' ) : {
					variacaoBrowser = 1;
					break;
				}
			}
		}
		
		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 + variacaoBrowser ) >= _qtImagensTotal ) {
				_options.allLoad( _qtImagensCarregadas );
			}
		try {
			log( '_qtImagensCarregadas: ' + _qtImagensCarregadas );
		} catch( ex ) {
			
		}
		};
		
		$imgs.each( function() {
			
			var _objImg = this;
			var $_img = jQuery( this );
			
			$_img.bind( 'load', function() {
				if ( ( $_img.attr( 'src' ) != defCachedSrc ) && ( $_img.attr( 'src' ) != '' ) && ( $_img.attr( 'src' ) != null ) ) {
					setTimeout( function() {
						_options.eachLoad( $_img );
					}, 10 );
					checkAllLoad();
				}
			});
			
			var src = _objImg.src;
			_objImg.src = defCachedSrc;
			_objImg.src = null;
			_objImg.src = '';
			_objImg.src = src;
			
		});
		
		return $container;
	};
})(jQuery);
