  var Thumbnails = {
    fromBackgroundImageSource : function(src)
    {
      if(src.indexOf('http://i.ytimg.com/vi/') == 0)
      {
        src = src.replace(/\/\w+\.jpg/i, '');
        return [src + '/3.jpg', src + '/2.jpg', src + '/1.jpg', src + '/default.jpg'];
      }
      
      if(src.search(/^http:\/\/([\w\-]+\.)?rutube\.ru\//i) != -1)
      {
        var num = src.match(/-(\d+)-\d+\.jpg/i);
        if(num && num.length > 1)
        {
          num = parseInt(num[1]);
          if(!isNaN(num) && num > 1)
          {
            var t = new Array();
            for(var i = 1; i <= num; i++)
            {
              t.push(src.replace(/^(.+-)\d+(-\d+\.jpg.*)/i, '$1' + i + '$2'));
            }
            
            return t;
          }
        }
        
        return null;
      }
      
      return null;
    },
    
    fromElement : function(e)
    {
      var bg = $(e).css('background-image');
      if(!bg)
        return null;
            
      var bgurl = bg.match(/url\s*\(\s*[\x22\x27]?([^\s\"\'\(\)]+)/i);
      if(!bgurl || bgurl.length < 2)  
        return null;
        
      return this.fromBackgroundImageSource(bgurl[1]);
    }
  };
  
  
    
  function LoopThumbnailsRotator()
  {
    this.timer = 0;
    this.delay = 3000;
    this.beginDelay = 3000;
    
    this.current = 0;
    this.thumbnails = new Array();
    
    this.onNext = null;
    
    this.rotate = function()
    {
      var thisObj = this;
      
      if(this.thumbnails.length == 0)
        return;
      
      if(this.current < 0 || this.current >= this.thumbnails.length)
        this.current = 0;
        
      var curbg = this.thumbnails[this.current][2];
      this.thumbnails[this.current][0].style.backgroundImage = "url('" + this.thumbnails[this.current][1][curbg] + "')";
      
      this.thumbnails[this.current][2]++;
      if(this.thumbnails[this.current][2] < 0 || this.thumbnails[this.current][2] >= this.thumbnails[this.current][1].length)
        this.thumbnails[this.current][2] = 0;
        
      if(thisObj.onNext && typeof(thisObj.onNext) == 'function')
      {
        this.onNext(thisObj.thumbnails[thisObj.current][0]);
      }      
        
      this.current++;  
        
      this.timer = setTimeout(function(){thisObj.rotate()}, this.delay);
    };
    
    this.find = function(selector, begin, count)
    {
      clearTimeout(this.timer);
      this.thumbnails = new Array();
      this.current = 0;

      var thisObj = this;
      
      if(!begin)
        begin = 0;
        
      if(!count)
        count = 0;
      
      if(!selector)
        return;
        
      var num = 0;  
      
      $(selector).each(function(){
        if(num >= begin)
        {
          var t = Thumbnails.fromElement(this);
          if(t)
          {
            thisObj.thumbnails.push(new Array(this, t, 0));        
          }
        }
        
        num++;
        
        if(count > 0 && num >= begin + count)
        {
          return false;
        }  
      });
      
      if(this.thumbnails.length > 0)
      {
        this.preload();
        this.timer = setTimeout(function(){thisObj.rotate();}, this.beginDelay);
        this.beginDelay = this.delay;
      }
    };
    
    this.preload = function()
    {
      for(var i in this.thumbnails)
      {
        for(var j in this.thumbnails[i][1])
        {
          $("<img>").attr("src", this.thumbnails[i][1][j]);
        }
      }
    };
  }
    
  
  
  function HoverThumbnailsRotator()
  {
    this.rotationTimer = 0;
    this.stopTimer = 0;
    
    this.rotationDelay = 1500;
    this.stopDelay = 1000;

    this.rotate = function(element, thumbnails, num)
    {
      var thisObj = this;

      if(!element || !thumbnails || thumbnails.length < 2)
        return;
        
      if(!num || num < 0 || num >= thumbnails.length)
        num = 0;
        
      element.style.backgroundImage = "url('" + thumbnails[num] + "')";
      num++;

      this.rotationTimer = setTimeout(function(){thisObj.rotate(element, thumbnails, num);}, this.rotationDelay);
    };
    
    this.find = function(selector)
    {
      var thisObj = this;
      
      if(!selector)
        retutn;

      $(selector).each(function(){      
        if(this.onmouseover || this.onmouseout)
          return;
          
        var element = this;  

        var t = Thumbnails.fromElement(this);
        if(t)
        {
          $(this).mouseover(function(){
            thisObj.preload(t);
            clearTimeout(thisObj.stopTimer);
            clearTimeout(thisObj.rotationTimer);
            thisObj.rotationTimer = setTimeout(function(){thisObj.rotate(element, t, 0);}, thisObj.rotationDelay);
          });
              
          $(this).mouseout(function(){
            thisObj.stopTimer = setTimeout(function(){clearTimeout(thisObj.rotationTimer);}, thisObj.stopDelay);
          });
        } 
      });
    };
    
    this.preload = function(thumbnails)
    {
      for(var i in thumbnails)
      {
        $("<img>").attr("src", thumbnails[i]);
      }
    };
  }