(function($){
  $.fn.shuffle = function(arg, callback) {
    var allElems = this.get(),
    getRandom = function(max) {
      return Math.floor(Math.random() * max);
    }, shuffled = $.map(allElems, function(){
      var random = getRandom(allElems.length),
      randEl = $(allElems[random]).clone(true)[0];
      allElems.splice(random, 1);
      return randEl;
    });
    this.each(function(i){
      $(this).replaceWith($(shuffled[i]));
    });
    
    callback.call(this);
    
  };
})(jQuery);
