// =======================
// = 27/06/2011          =
// = Chaufourrier Jérémy =
// = jeremy@opsone.net   =
// = v1b                 =
// =======================

(function($) {
    $.fn.jslide = function(options) {
        var defaults = {
            opacity: 1,
            elementVisible : 4,
            fade : false
        };

        var nbElements = $(this).find('ul li').size();
        var active = 1;

        var opts = $.extend(defaults, options);

        if(nbElements <= opts.elementVisible) {
          $(this).parent().find('a.next').addClass('disabled');
        }

        $(this).parent().find('ul').width( nbElements * $(this).parent().find('ul li').innerWidth() );

        var i = 1;
        $(this).parent().find('ul li').each(function(){
          $(this).attr('data-position', i);
          i++;
        });

        $(this).parent().find('a.prev, a.next').click(function(){

          var contnaire = $(this).parent();

          if($(this).hasClass('disabled')){
            return false;
          }

          active += $(this).hasClass('prev') ? -1 : 1;

          contnaire.find('a.prev, a.next').removeClass('disabled');
          if (active <= 1 && $(this).hasClass('prev')) {
            contnaire.find('a.prev').addClass('disabled');
          }
          if (active + opts.elementVisible-1 == nbElements && $(this).hasClass('next')) {
            contnaire.find('a.next').addClass('disabled');
          }

          var l = contnaire.find('ul li:first').innerWidth();

          if(opts.fade)
          {
            l *= $(this).hasClass('prev') ? 1 : -1;
            l = parseInt(contnaire.find('ul').css('left')) + l;

            contnaire.find('ul').hide()
                                .css('left', l + 'px')
                                .fadeIn(1500);
          }
          else
          {
            l *= $(this).hasClass('prev') ? -1 : 1;
            l = '-=' + l;

            contnaire.find('ul').animate({
              opacity: opts.opacity,
              left : l
            }, 1500, function() {
              $(this).css('opacity', '1');
            });
          }


          return false;
        });

        return $(this);
    };
})(jQuery);
