(function($) {

jQuery.fn.slideShow = function( settings ) {
   var _slideShow = this;
   var TimeOut;
   
   _slideShow.frames = new Array();
   blocks = new Array();
   buttons = new Array();
   _slideShow.frameIndex = 0;
   _slideShow.count = 0;
   _slideShow.imgCount = 0;

   
   // Насторойки
   _slideShow._settings = $.extend({
      play: true,
      speed: 3000, // Скорость плавного появления следующего кадра
      delay: 4000, // Задержка между кадрами при play: true
      callback : function(){}
      
   }, settings );

   
   // Инициализация слайдшоу
   _slideShow._init = function() {
      settings = _slideShow._settings;
      
      _slideShow.each( function() {
         _slideShow.frames.push( jQuery(this) );
         _slideShow.imgCount += jQuery(this).find('img').length;
      });
      $("#img-menu").find("li").each( function( n ) {
         buttons.push( jQuery(this) );
         jQuery(this).attr('num', n);
      });

      _slideShow.count = _slideShow.imgCount;
      _slideShow._check_all_load();

   } // End _slideShow._init()

   // Показывает один кадр в замен другого
   _slideShow._showFrame = function( newFrameIndex, oldFrameIndex ) {
      // Если кадр реально меняется..
      if( newFrameIndex != oldFrameIndex ) {
         _slideShow.frames[ newFrameIndex ].css( 'z-index', 10 );
         _slideShow.frames[ oldFrameIndex ].css( 'z-index', 5 );
         
         var html1 = buttons[ newFrameIndex ].find('a').html();
         buttons[ newFrameIndex ].html('<span>' + html1 + '</span>');
         var html2 = buttons[ oldFrameIndex ].find('span').html();
         buttons[ oldFrameIndex ].html('<a href="javascript://">' + html2 + '</a>');
         
         _slideShow.frames[ newFrameIndex ].fadeIn( 
            _slideShow._settings.speed, 
            function() {
               _slideShow.frames[ oldFrameIndex ].css( 'z-index', 0 ); 
            }
         );
         _slideShow._settings.callback.call( _slideShow.frames[ newFrameIndex ] );
         _slideShow.frames[ oldFrameIndex ].fadeOut(_slideShow._settings.speed);
         
      } // End if
   
   } // End _slideShow._showFrame()

   
   // Показывает следующий кадр
   _slideShow._showNextFrame = function() {
      oldFrameIndex = _slideShow.frameIndex;
      _slideShow.frameIndex = ( _slideShow.frameIndex + 1 == _slideShow.frames.length ) ? 0 : _slideShow.frameIndex + 1;
      _slideShow._showFrame( 
         _slideShow.frameIndex, 
         oldFrameIndex 
      );
      
   } // End _slideShow._showNextFrame()
   
   // Показывает следующий кадр
   _slideShow._showFrameNum = function( FrameNum ) {
      oldFrameIndex = _slideShow.frameIndex;
      _slideShow.frameIndex = FrameNum;
      _slideShow._showFrame( 
         _slideShow.frameIndex, 
         oldFrameIndex 
      );
      if( _slideShow._settings.play ){
         TimeOut = setTimeout( function() { _slideShow._showNewFrame() }, _slideShow._settings.delay );
      }
      
   } // End _slideShow._showFrameNum()

   
   // Показывает предыдущий кадр
   _slideShow._showLastFrame = function() {
      oldFrameIndex = _slideShow.frameIndex;
      _slideShow.frameIndex = ( _slideShow.frameIndex == 0 ) ? ( _slideShow.frames.length - 1 ) : _slideShow.frameIndex - 1;
      _slideShow._showFrame( 
         _slideShow.frameIndex, 
         oldFrameIndex 
      );
      
   } // End _slideShow._showLastFrame()
   
   
   // Проверка на загрузку всех картинок
   _slideShow._check_all_load = function() {
      if( _slideShow.count == _slideShow.imgCount ) {
         // Подключаем кнопку "вперед"
         if( settings.forward ) {
            jQuery(settings.forward).click( function(){
               _slideShow._showNextFrame();
               return false;
            }); 
            
         } // End if
         
         // Подключаем кнопки "меню"
         $("#img-menu li a").live('click', function(){
            clearTimeout( TimeOut );
            _slideShow._settings.play = false;
            _slideShow._showFrameNum( parseInt( $(this).parent().attr('num') ) );
            return false;
         });
         
         // Подключаем кнопку "назад"
         if( settings.back ) {
            jQuery(settings.back).click( function(){
               _slideShow._showLastFrame();
               return false;
            }); 
            
         } // End if

         // Включаем если надо автопроигрование
         if( _slideShow._settings.play ) {
            TimeOut = setTimeout( function() { _slideShow._showNewFrame() }, _slideShow._settings.delay );
            
         } // End if

      } // End if
      
   } // End _slideShow._check_all_load()
   
   
   // Автоматическое слайд шоу
   _slideShow._showNewFrame = function() { 
      _slideShow._showNextFrame();
      
      TimeOut = setTimeout( function() { _slideShow._showNewFrame() }, _slideShow._settings.delay );
   
   }  // End _slideShow._showNewFrame()
   
   _slideShow._init();
   
   return this;

};

})(jQuery);
