function ImagePreloader( imageSource, callback ) {
  this.preload = new Image();
  this.preload.src = imageSource;

  this.loadCallback = callback;

  this.testComplete = function() {
    if ( this.preload.complete ) {
      this.abort();
      this.loadCallback.call( this, this.preload );
    }
  }
  this.abort = function() {
    clearInterval( this.timeout );
    this.timeout = null;
  }

  this.timeout = setInterval( Delegate.create( this, 'testComplete' ), 100 );
}