[Ayuda] ¿Cómo pausar cada vuelta de $.each()?

Hola:

Lo que necesito saber es cómo pausar cada vuelta que da, o sea, en pseudocódigo sería:

Primera vuelta: ejecute instrucciones y pause por X tiempo.
Segunda vuelta: ejecute las mismas instrucciones y se detenga por X tiempo.
N vuelta: ejecute las instrucciones y se pause al finalizar por X tiempo.

Ya he intentado con setTimeout de Javascript pero no me funciona XD.

yaigplugin-1.0.js:
(function($) {

	var settings = {
    pause: 5000,
    fadeOut: 2500,
		galleryFolder: 'gallery',
    getFilesURL: 'yaigplugin-1.0/collect.php',
    css: {
      width: '100px',
      height: '100px',
      display: 'inline-block',
      paddingLeft: '3px'
    },
    cantImgs: 3,
    random: true    
	}
  
  var util = {
    base: function() {
      var root = 'http';
      if(window.location.href.match(/^(https)/))
        root += 's';
      root += '://' + location.host + '/';
      return root;
    },
    rndm: function(repeat, minVal, maxVal) {
      repeat = repeat == undefined ? 5: repeat;
      minVal = minVal == undefined ? 0: minVal;
      maxVal = maxVal == undefined ? 10: maxVal;
      
      var generated = new Array();
      var i = 0;
      while(i < repeat) {
        try {
          var rndm = Math.floor(Math.random() * (maxVal - minVal + 1) + minVal);
        }
        catch(e) {
          console.log('Error generating random number: ' + e);
          alert('Error generating random number: ' + e)
        }
        if(generated.length == 0) {
          generated[i] = rndm;
          i++;
        }
        else {
          var x = 0;
          var eq = false;
          while(x < generated.length && eq == false) {
            if(rndm == generated[x])
              eq = true;
            x++;
          }
          if(eq == false) {
            generated[i] = rndm;
            i++;
          }
        }
      }
      return generated;
    },
    processAnswer: function(string) {
      var folder = new Array();
      folder = string.split(/[|,]/);
      
      return folder;
    },
    display: function(img, _this, index) {
      $('<img />')
      .attr({
        src: img,
        alt: 'Nombre de la imágen: ' + img,
        title: 'Nombre de la imágen: ' + img
      })
      .appendTo(_this)
      .hide()
      .load(function() {
        $(this)
        .delay(index)
        .fadeIn('slow')
        .css(settings.css);
      })      
      .delay(settings.fadeOut)
      .fadeOut('slow', function() {
        $(this).remove();
      });
    },
    load: function(_this, url) {
      $.ajax({
        type: 'post',
        url: settings.getFilesURL,
        data: {folder: '../' + settings.galleryFolder},
        success: function(data) {
          var arr = util.processAnswer(data);
          var arrLen = arr.length;
          var index = 0;
          
          begin();
          function begin() {
            if(settings.cantImgs > arrLen)
              settings.cantImgs = arrLen;
            var rndmIndx = util.rndm(settings.cantImgs, 0, arrLen - 1);
            for(i = 0; i < settings.cantImgs; i++) {
              if(settings.random)
                util.display(url + arr[rndmIndx[i]], _this, i * 1000);
              else {
                util.display(url + arr[index], _this, i * 1000);
                index++;
                if(index >= arrLen)
                  index = 0;
              }
            }
            setTimeout(function() {
              begin();
            }, settings.pause);
          }
        }
      });
    }
  }
	
	var methods = {
		init: function(options) {
			return this.each(function() {
        if(options) {
          $.extend(settings, options);
        }
        var _this = $(this);
        var url = util.base();
        url += settings.galleryFolder + '/';
        util.load(_this, url);
			});
    }
	}
	
	$.fn.yaig = function(method) {
		if(methods[method])
      return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
    else if(typeof method === 'object' || !method)
      return methods.init.apply(this, arguments);
    else
      $.error('The method [' + method + '] does not exists.');

    return this;
	}
})(jQuery);

collect.php:
<?php
  $gallery_folder = empty($_POST['folder']) ? '../gallery': $_POST['folder'];
  $gallery_folder = trim($gallery_folder, '/');
  $main_folder = opendir($gallery_folder);
  $gallery = '';
  $i = 0;
  while(false !== ($folder = readdir($main_folder))) {
    if($folder != '.' && $folder != '..' && is_dir($gallery_folder. '/' .$folder)) {
      $gallery .= files($gallery_folder.'/'.$folder, $folder.'/');
      $gallery .= '|';
      $i++;
    }
  }
  closedir($main_folder);
  
  print trim($gallery, '|');

  function files($folder, $f) {
    $img_folder = opendir($folder);
    $str = '';
    while(false !== ($img = readdir($img_folder))) {
      if($img != '.' && $img != '..'  && is_file($folder. '/' .$img)) {
        $str .= $f.$img. ',';
      }
    }
    closedir($img_folder);
    
    return trim($str, ',');
  }
?>

Esto es un plugin de jQuery. La idea (como puse en los comentarios) es que se muestren X fotos de una carpeta X bajo la carpeta gallery, luego se pause por X segundos y comience la nueva vuelta pero con otra carpeta (por ahora la carpeta no se elige al azar) y otras fotos al azar.

Bueno, si alguien me puede ayudar, le doy las gracias de antemano (al igual que a quién se de el tiempo de leer hasta aquí XD).

Saludos :D.