/**

*  Plugin which is applied on a list of img objects and calls
*  the specified callback function, only when all of them are loaded (or errored).
*  @author:  H. Yankov (hristo.yankov at gmail dot com)
*  @version: 1.0.0 (Feb/22/2010)
*      http://yankov.us
*/

(function($) { $.fn.batchImageLoad = function(options) {

      var images = $(this);
      var originalTotalImagesCount = images.size();
      var totalImagesCount = originalTotalImagesCount;
      var elementsLoaded = 0;

      // Init
      $.fn.batchImageLoad.defaults = {
              loadingCompleteCallback: null,
              imageLoadedCallback: null
      }
var opts = $.extend({}, $.fn.batchImageLoad.defaults, options);

      // Start
      images.each(function() {
              // The image has already been loaded (cached)
              if ($(this)[0].complete) {
                      totalImagesCount--;
                      if (opts.imageLoadedCallback) opts.imageLoadedCallback(elementsLoaded, originalTotalImagesCount);
              // The image is loading, so attach the listener
              } else {
                      $(this).load(function() {
                              elementsLoaded++;

                              if (opts.imageLoadedCallback) opts.imageLoadedCallback(elementsLoaded, originalTotalImagesCount);

                              // An image has been loaded
                              if (elementsLoaded >= totalImagesCount)
                                      if (opts.loadingCompleteCallback) opts.loadingCompleteCallback();
                      });
                      $(this).error(function() {
                              elementsLoaded++;

                              if (opts.imageLoadedCallback) opts.imageLoadedCallback(elementsLoaded, originalTotalImagesCount);

                              // The image has errored
                              if (elementsLoaded >= totalImagesCount)
                                      if (opts.loadingCompleteCallback) opts.loadingCompleteCallback();
                      });
              }
      });

      // There are no unloaded images
      if (totalImagesCount <= 0)
              if (opts.loadingCompleteCallback) opts.loadingCompleteCallback();

}; })(jQuery);