PI = function() {}
PI.Utils = function() {}
PI.Utils.prototype = {
  preLoadImage: function(src, callback) {
    var image = new Image();
    image.src = src;
    $(image).one("load", function() {
      callback(image);
    })
    .each(function() {
      if (this.complete) $(this).trigger("load");
    });
  },

  preLoadAllImages: function(srcs, callback) {
    var status = new Array();
    var $this = this;
    for (i in srcs) {
      status[i] = false;
    }
    
    for (i in srcs) {
      this.preLoadImage(srcs[i], function() {
        status[i] = true;
        if ($this.areImagesLoaded(status)) {
          callback();
        }
      });
    }
  },

  areImagesLoaded: function(status) {
    var test = true;
    for (i in status) {
      test &= status[i];
      if (!test) {
        return test;
      }
    }
    return test;
  },

  pulseItem: function($node, options, callback) {
    var opts = {fout:200, fin:200, delay:0, opacityOut:.25, opacityIn:1};
    $.extend(opts, options);

    $node
      .animate({
        opacity: opts.opacityOut
      }, opts.fout)
      .animate({
        opacity: opts.opacityIn
      }, opts.fin);

    if (callback) {
      $node.animate({
        opactiy: opts.opacityIn
      }, opts.delay, callback);
    }
  }
};

var $pi = new PI.Utils();
