/**
* J.Cambier -- @kokmok pour Akimedia
 */
(function($) {
        $.fn.smoothSlide = function(params) {
                defaultParams = {
                    time:300,
                    easing :'easeOutBack',
                    width : 'auto',
                    height:'100px',
                    leftArrow:"<",
                    rightArrow:">",
                    step:20,
                    callBack : '',
                    navSpace : 36,
                    verticalCenter : true
                }
				params = $.extend( defaultParams, params);
				
    var speed = 0;
    var moovable = null;
    var interval = null;
    
    obj=this;
    obj.each(function(i) {
        var ul=$(this);           
            
        
        //WRAP et Controleurs
        ul.wrap('<div class="smoothSlideWrap" />');
        ul.parent('.smoothSlideWrap').css({'overflow':'hidden','width':params.width,'height':params.height}).append('<div class="smoothSlideControler" id="smoothSlideGotoLeft">'+params.leftArrow+'</div><div class="smoothSlideControler" id="smoothSlideGotoRight">'+params.rightArrow+'</div>');
        $('.smoothSlideControler').css({'position':'absolute'});
        $('#smoothSlideGotoLeft').css({'left':'0'});
        $('#smoothSlideGotoRight').css({'right':'0'});
        
        var widthWrap = ul.parent('.smoothSlideWrap').width();
        
        //CSS PART
        
        //Width du UL
        ul.css({'display':'block',opacity:0});
        
        var internalWidth = 0;
       
        ul.find('li').each(
            function(){
                $(this).css({'display':'block','float':'left','margin':'0 10px'});
                internalWidth+=$(this).outerWidth()+21;
            }
        );
        ul.width(internalWidth);
        ul.css({'position':'absolute','left':params.navSpace+"px"});
        
        
        
        //Centrage
        ul.find('li').each(
            function(){
                if ($(this).find('img').length){
                    var padding = (params.height - $(this).find('img').height())/2;
                    $(this).css({'padding-top':padding+'px'});  
                }
            }
        );
        
        ul.animate({opacity:1},250);  
        
        
        
        
        
        //Interactivité
        
        //Left
        $('#smoothSlideGotoLeft').mousedown(
            function(){
                clearInterval(interval);
                //var left = parseInt($(this).parent('.smoothSlideWrap').find('ul').css('left'));
                //var widthWrap = $(this).parent('.smoothSlideWrap').width();
                //var widthUl = $(this).parent('.smoothSlideWrap').find('ul').width();
                //
                //if (widthWrap<left+widthUl){
                //     $(this).parent('.smoothSlideWrap').find('ul').animate({'left':(left-params.step)+'px'},params.times,params.easing,params.callBack);
                // }
                speed = -params.step;
                moovable = $(this).parent('.smoothSlideWrap').find('ul');
                interval = setInterval(move,40);
                
            }
        );
        
        //Right
        $('#smoothSlideGotoRight').mousedown(
            function(){
                clearInterval(interval);
                //var left = parseInt($(this).parent('.smoothSlideWrap').find('ul').css('left'));
                //
                //if (left<0){
                //    $(this).parent('.smoothSlideWrap').find('ul').animate({'left':(left+params.step)+'px'},params.times,params.easing,params.callBack);
                //}
                speed = params.step;
                moovable = $(this).parent('.smoothSlideWrap').find('ul');
                interval = setInterval(move,40);
            }
        );
        
         $('.smoothSlideControler').mouseup(
            function(){
                clearInterval(interval);
                interval = setInterval(stop,40);
            }
        );
        
        
        
        function move(){
            var left = parseInt(moovable.css('left'));
           
            if (canMove(left)){
                moovable.css({'left':left-speed+'px'});
            }else{
                clearInterval(interval);
            }
        }
        
        
        function stop(){
            var left = parseInt(moovable.css('left'));
            
           if (canMove(left)){
                moovable.css({'left':left-speed+'px'});
                speed = speed/1.2;
           }else{
                clearInterval(interval);
           }
            
            if (speed<1 && speed>-1){
                clearInterval(interval);
            }
        }
        
        function canMove(left){
            if (speed>0){
                if (widthWrap<(left-speed)+internalWidth+params.navSpace){
                    return true;
                }else{
                    return false;
                }
            }else{
                if (left-speed<params.navSpace){
                     return true;
                }else{
                     return false;
                }
            }
        }
        
        
        
        
    });
    // Permettre le chaînage par jQuery
    return this;
    };
})(jQuery);
