(function($){
  $.fn.peekMe = function(selector, options) {
    var defaults = {
      'loop': -1,
      'tagName': 'div',
      'className': 'peekme',
      'interval': 3000,
      'fade': 'slow'
    };
    
    var setting = $.extend(defaults, options);

    this.each(function() {
      var parent = $(this);
      var place = $(document.createElement(setting['tagName'])
                      ).addClass(setting['className']).hide();
      
      parent.before(place);
      
      var found = parent.find(selector) || [];
      var count = 0;
      var contents = $.map(found, function(c) {
        return $(c).contents();
      });
      
      parent.remove();
      
      var fade = setting['fade'];
      var loop = setting['loop'];
      var max = (loop < 0) ? Infinity : found.length * loop;
      
      var next = function() {
        place.fadeOut(fade, function() {
          place.empty();
          place.append(contents[count % found.length]).fadeIn(fade);
          count++;
          if (count < max) {
            setTimeout(next, setting['interval']);
          }
        });
      };
      next();
    });
    
    return this;
  };
})(jQuery);
