function ImagePreloader(images, cb, use_pb, pb_width) {

  this.cb = cb;                             // сохраним callback

  this.nLoaded = 0;                         // инициализируем внутреннее
  this.nProcessed = 0;                      // состояние.
  this.aImages = new Array;

  this.nImages = images.length;             // сохраним кол-во изображений.
  
  this.use_pb = use_pb;                     // Использование индикатора загрузки.
  this.coverage = pb_width / this.nImages;  // Покрытие preloadbar'а одним изображением.

  for (var i = 0; i < images.length; i++)   // Для каждого изображения
    this.preload(images[i]);                // вызовем preload().
}
			
ImagePreloader.prototype.preload = function(image) {

  var oImage = new Image;                   // Создадим новый объект Image
  this.aImages.push(oImage);                // и добавим его в массив.

  // set up event handlers for the Image object
  oImage.onload = ImagePreloader.prototype.onload;
  oImage.onerror = ImagePreloader.prototype.onerror;
  oImage.onabort = ImagePreloader.prototype.onabort;

  // assign pointer back to this.
  oImage.oImagePreloader = this;
  oImage.bLoaded = false;

  // assign the .src property of the Image object
  oImage.src = image;
}

ImagePreloader.prototype.onComplete = function() {

  this.nProcessed++;

  if (this.use_pb) {

    var pb_ind = document.getElementById('pb_ind');
    var pb_perc = pb_ind.nextSibling.firstChild;  // div с текстом процента загрузки.

    var pbi_width = Math.floor(this.nProcessed * this.coverage);
    pb_ind.style.width = pbi_width + "px";
    var proc = parseInt((this.nProcessed * 100) / this.nImages);

    pb_perc.innerHTML = proc + "%";
  }
 
  if (this.nProcessed == this.nImages)
    this.cb(this.aImages, this.nLoaded);
}

ImagePreloader.prototype.onload = function() {

  this.bLoaded = true;
  this.oImagePreloader.nLoaded++;
  this.oImagePreloader.onComplete();
}

ImagePreloader.prototype.onerror = function() {

  this.bError = true;
  this.oImagePreloader.onComplete();
}

ImagePreloader.prototype.onabort = function() {

  this.bAbort = true;
  this.oImagePreloader.onComplete();
}
