/*
 * jQuery vislider2 plug-in 0.1 beta 
 *
 * Copyright (c) 2011 - 2012 Anton Starostin & Developers of Vipro
 * Mail to dev@vipro.ru
 * 
*/
(function($) {
  $.fn.vislider2 = function(options) {
      var _vislider = $( this );
      
      var settings = $.extend({ 
         shift: 303, 
         tableObj: _vislider.find( '.tree-slide-in table:first'),
         boxObjWidth: _vislider.find( '.tree-slide-in' ).width(),
         right: _vislider.find( '.right div:first' ),
         left: _vislider.find( '.left div:first' ),
         cycling: false // если true, то нужно копировать первый слайд в конец.
      }, options||{});
      
      _vislider.start = false;
      
      settings.right.click( function() { _moveSlider( settings.tableObj, 'r' ); })
      settings.left.click( function() { _moveSlider( settings.tableObj, 'l' ); });
      
      _checkPossibility( settings.tableObj, 'r' );
      _checkPossibility( settings.tableObj, 'l' );
      
      function _checkPossibility ( obj, dir ) {
         
         dir_obj = ( dir == 'r' ) ? settings.right : settings.left;
         
         if( _checkNext ( obj, dir, settings.cycling ) || settings.cycling ) {
            dir_obj.css( "cursor","pointer" ).removeClass( "off" );
            return true;
            
         } else {
            dir_obj.css( "cursor","default" ).addClass( "off" );
            return false;
            
         } // End if
      
      } // End _checkPossibility
      
      
      function _checkNext ( obj, dir, skipLast ) {
         if( dir == 'r' ) {
            return ( obj.width() + parseFloat( obj.css('margin-left') ) - settings.shift > ( settings.boxObjWidth + skipLast * settings.shift ) );
         } else {
            return ( parseFloat( obj.css('margin-left') ) < 0 );
         } // End if
      
      } // End _checkNext  
      
      
      function _moveSlider( obj, dir ) {
      
         if( _vislider.start == false ) {
            
            if( _checkNext( obj, dir, settings.cycling ) || settings.cycling ) {
               _vislider.start = true;
               if( settings.cycling && ( dir != 'r' ) ) {
                  obj.css('margin-left', ( settings.boxObjWidth - settings.shift ) + 'px' );
               }
               obj.animate({ marginLeft: ( dir == 'r' ? '-' : '+' ) + '=' + settings.shift + 'px' }, 600,
                  function() { 
                     _vislider.start = false;
                     
                     if( settings.cycling && !_checkNext( obj, 'r', false ) ) {
                        obj.css('margin-left', '0px' );
                     }                         
                     _checkPossibility( obj, 'l' );
                     _checkPossibility( obj, 'r' );
               });
            
            } // End if
            
         } // End if
         
      } // End function moveSlider
      
      return _vislider;
  }
})( jQuery );
