/*
 * jQuery vislider plug-in 0.2 beta 
 *
 * Copyright (c) 2011 - 2012 Anton Starostin & Developers of Vipro
 * Mail to dev@vipro.ru
 * 
*/

(function($) {
  $.fn.vislider = function(options) {
      var settings = $.extend({
          speed: 600,
          blocks: '.slider-blocks:first',
          dots: '.slider-dots:first',
          left: '.slider-left',
          right: '.slider-right'
          
      }, options||{});
      
      var _vislider = $( this );
      _vislider.blocksObjs = _vislider.find( settings.blocks ).children();
      _vislider.dots = _vislider.find( settings.dots );
      
      _vislider.start = false;
      
      _vislider.find( settings.left ).css("cursor","pointer").click( function() {
         _changeCurrentBlock( 'l' );
      } );


      _vislider.find( settings.right ).css("cursor","pointer").click( function() {
         _changeCurrentBlock( 'r' );
      } );
      
      _vislider.blocksObjs.each( function(i) {
         
         var newDot = $('<span>&nbsp;</span>' )
            .css("cursor","pointer")
            .click( function() { 
            _changeCurrentBlock( i );
         } );
         
         if( $( this ).is(':visible') ) {
            newDot.addClass( 'active' );
         }
         _vislider.dots.append( newDot );
         
      });
      
      function _changeCurrentBlock( direction ) {

         var cur = _vislider.blocksObjs.filter( ':visible' ).last();
         
         if( _vislider.start == false ) {
            
            var new_cur;
            if( direction == 'l' ) {
               new_cur = cur.prev().length ? cur.prev() : cur.nextAll( ':last' );
            } else if( direction == 'r' ) {
               new_cur = cur.next().length ? cur.next() : cur.prevAll( ':last' );
            } else {
               new_cur = $( _vislider.blocksObjs[ direction ] );
            } // End if
            
            _download_images( new_cur );
            
            if( new_cur.length == 1 ) {
            
               _vislider.blocksObjs.not( cur ).hide();
            
               cur.fadeOut( settings.speed );
            
               _vislider.start = true;
               new_cur.fadeIn( settings.speed, function() { _vislider.start = false } );
               
               _set_active_dots( _vislider.blocksObjs.index( new_cur ) );
               
            } // End if
            
            _download_images( new_cur.prev().length ? new_cur.prev() : new_cur.nextAll( ':last' ) );
            _download_images( new_cur.next().length ? new_cur.next() : new_cur.prevAll( ':last' ) );
            
         }
         
      } // End function changeCurrentBlock
      
      // подгружаем изображения из блока
      function _download_images( obj ) {
            obj.find('img[_src]').attr( 'src', function( i, val ) { return $( this ).attr( '_src' );})
               .removeAttr( '_src' );
      }

      _vislider.dotsArray = _vislider.dots.children();

      function _set_active_dots( num ) {
         $( _vislider.dotsArray.removeClass( 'active' )[ num ] ).addClass( 'active' );
      } // End function _set_active_dots
      
      return _vislider;
  }
})( jQuery );
