(function() {
  window.imagesLoad = function(images) {
    images = images || document.getElementsByTagName('img');
    var imagesCount = images.length, loadedCount = 0, image;
    var i, j, loaded = false, cbs = [];
    imagesCount < 1 && (loaded = true);
    for (i = 0; i < imagesCount; i++) {
      image = images[i];
      image.complete ? handleImageLoad() : image.addEventListener('load', handleImageLoad);
    }
    function handleImageLoad() {
      loadedCount++;
      if (loadedCount === imagesCount) {
        loaded = true;
        if (cbs.length > 0) {
          for (j = 0; j < cbs.length; j++) {
            cbs[j]();
          }
        }
      }
    }
    return {
      then: function(cb) {
        cb && (loaded ? cb() : (cbs.push(cb)));
      }
    };
  };
})();
