/*
 * jQuery.randomText.js
*/

(function ($) {

  $.randomText = function (text, options) {
    
    var $randomText;
    
    var length = text.length;
    var count = 0;

    var settings = $.extend({
      duration : 600,
      fps : 30
    }, options);
    
    var randomInterval = Math.floor(1000 / settings.fps);
    var randomTimer;
    
    var shiftInterval = Math.floor(settings.duration / length);
    var shiftLength = Math.ceil(length / (settings.duration / randomInterval));
    
    $randomText = $("<span>");
    
    $randomText.text(text);
    
    
    function randomiseLoop() {
      
      var nextText = '';
      var repeat;
      
      count += shiftLength;
      
      if (count > length) {
        count = length;
      }
      
      repeat = text.length - count;

      nextText += text.substr(0,count);

      for (var i = 0; i < repeat; ++i) {
        nextText += getRandomLetter();
      }
    
      $randomText.text(nextText);
      
      if (count < length) {
        loopTimer = setTimeout(randomiseLoop, randomInterval);
      }
      else {
        count = 0;
      }
      
    }

    function getRandomLetter() {
      
      var letterList = $.randomText.LETTER_LIST;
      var letterIndex = Math.floor(Math.random() * letterList.length);
      
      return letterList.substr(letterIndex,1);
    }

    
    $randomText.shuffle = function () {
      randomTimer = setTimeout(randomiseLoop, randomInterval);
    };
    
    $randomText.clear = function () {
      clearTimeout(shiftTimer);
      clearTimeout(randomTimer);
      $randomText.text(text);
    };
    
    return $randomText;
  };

  $.randomText.LETTER_LIST = '!"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]`abcdefghijklmnopqrstuvwxyz{|}~';

})(jQuery);

