// VERSION: 1.0 LAST UPDATE: 15.02.2011
/*
 * This is a free script, but, thank's to leave this comment
 * if you want to use it in your site
 *
 * Ce script est gratuit, mais merci à vous de laisser ce commentaire
 * si vous l'utilisez dans votre site
 * 
 * Made by Stéphane Médaille s.medaille@gmail.com, Paris, France, 02.2011
 * http://www.webdesigner-multimedia.com
 * 
 */

 
 (function($){
 jQuery.fn.extend({
    moveScroll:function(duree,parameters){
	    var bloc = this;
		
		if((typeof duree=="object" && typeof parameters == 'undefined') || typeof duree == 'undefined'){	
           parameters = duree;		
           var speed = {
			
			duree: 1000
			
		    };
        }else{
          var speed = {
			
			duree: duree
			
			
			
		    };
          
        };
		
		var params = $.extend({
		
		 
		 direction:'top',
		 speedReturn:0,
		 blocMove:0,
		 sizeMove:0,
		 countBloc:0,
		 begin:0,
		 bottom:'0px',
		 stay:0,
		 repet:0,
		 beginTemp:0,
		 speedManagement:1,
         //debug tools		 
		 debugMode:0,
		 relativeWindow:0,
		 displayDebug:'body'
		 
		 
		},parameters);
		
		//Verifications
		
		if(typeof speed.duree == 'number' && params.speedReturn == 0){
		     params.speedReturn = (speed.duree)/3;
            }else if(typeof speed.duree != 'number' || typeof params.speedReturn != 'number'){
              params.speedReturn = 'fast';
            };
			
			//Control speed
		if(params.speedManagement == 1){
		   if(typeof speed.duree == 'number' && typeof params.speedReturn == 'number'){
		      driveSpeed(speed,params);
		   };
		};	
		
		
		if(params.blocMove == 0){
		    
			params.blocMove = bloc;
		
		};
		if(params.sizeMove == 0){
		    params.sizeMove = $(params.blocMove).width();
		}
		
		
		if(params.countBloc == 0){
		 var nmbr = 0;
			$.each(params.blocMove,function(index){
			    nmbr++;
			});
		params.countBloc = nmbr;
		};
		
		
		params.begin = params.countBloc*params.sizeMove;
		params.bottom = params.begin+'px';
		
		if(params.stay!=0){
		    params.beginTemp = params.sizeMove;
		}
		
		//Mode Debug
		if(params.debugMode == 1){
		    debug(speed,params,'moveScroll()');
		};
	
		
		//Action
		    	
		if(params.repet == 0){
		    return scroll(speed,params);
		}else{
		    setInterval(function(){scroll(speed,params);},params.repet);
		};
	}
	
   });
   
   //Mouvement
   function scroll(speed,params){
       switch(params.direction){
	       
		   case 'left':
		       
			   param1 = {left: '+='+params.begin };
			   param2 = {left: '-='+params.begin };
			   param3 = {left: '+='+params.beginTemp };
			   
		       			   
		   break;
		   
		   case 'right':
		          param1 = {right: '+='+params.begin };
				  param2 = {right: '-='+params.begin };
				  param3 = {right: '+='+params.beginTemp };
				  
		        
		   break;
		   
		   case 'bottom':
		       param1 = {bottom: '+='+params.begin };
			   param2 = {bottom: '-='+params.begin };
			   param3 = {bottom: '+='+params.beginTemp };
			   
		   break;
		   
		   default:
		       param1 = {top: '+='+params.begin };
			   param2 = {top: '-='+params.begin };
			   param3 = {top: '+='+params.beginTemp };
			   
		   break;
	   
	   }
	   if(params.stay == 0){
	       return move(param1,param2,speed,params);
		   }else{
		       return moveStop(param1,param2,speed,params);
		   }
   };
   
   function move(param1,param2,speed,params){
            
			   
	            $(params.blocMove).animate(param1, speed.duree ) ;
	          
       
			   if($(params.blocMove).css(params.direction)== '0px'){
			       $(params.blocMove).animate(param2, params.speedReturn);
			   }
   }
   
      function moveStop(param1,param2,speed,params){
          
		   $.fx.off = true;
           
		setTimeout(function(){
		    $.fx.off = false;
		    $(params.blocMove).animate(param3, speed.duree ) ;
		   
		},params.stay);
		 
        if($(params.blocMove).css(params.direction)== params.bottom){
			    $(params.blocMove).animate(param2, params.speedReturn);
			}

       	   
   }
   //control time
   function driveSpeed(speed,params){
	        if(params.stay > params.repet ){
			   var repet1 = params.stay;
			   var tempo1 = params.repet;
			   
			   params.stay = tempo1;
			   params.repet = repet1;
			};
            var resultat = speed.duree + params.speedReturn + params.stay;
			
			if(resultat > params.repet){
			    params.error = 'Total timer superior timer repet';
			    if(params.stay < 500){
				    var temporisation = 500;
				}else{
				    var temporisation = params.stay;
				};
				
				var repetition = params.repet;
				var equation = repetition-temporisation;
				var duree = (equation*3)/4;
				var retour = duree/3;
				
				speed.duree = duree;
				params.speedReturn = retour;
				params.stateSpeed = 'Modified';
			}else{
			    params.stateSpeed = 'Unmodified';
			};
		    speed.duree = Math.floor(speed.duree);
		    params.speedReturn = Math.floor(params.speedReturn);
			params.totalTime = Math.floor(resultat);
			
			
         };
   
   //Dev Tools
   function debug(speed,params,name){
       
		$(params.displayDebug).append('<div class="debug"><h1>Debug window for<br /> '+name+'</h1><ul></ul></div>');
		
		if(params.relativeWindow ==1){
		    $(params.displayDebug).css('position','relative')
		};
		$('.debug ul').append('<li><b>speed : </b>'+speed.duree+'</li>');
		$.each(params,function(index,value){
		   $('.debug ul').append('<li><b>'+index+' : </b>'+value+'</li>');	
		});
		
			//Val css Debug
		$('.debug').css('position','absolute');
		$('.debug').css('top','0px');
		$('.debug').css('left','0px');
		
		$('.debug').css('z-index','1000');
		$('.debug').css('background-color','#eeeeee');
		$('.debug').css('border-color','#000000');
		$('.debug').css('border-style','solid');
		$('.debug').css('text-align','left');
		
		$('.debug ul').css('display','block');
		$('.debug ul').css('width','auto');
		$('.debug ul').css('margin','10px');
		$('.debug ul').css('padding','0px');
		$('.debug ul').css('list-style-type','none');
		
		
		$('.debug ul li').css('display','block');
		$('.debug ul li').css('margin','10px');
		
		$('.debug ul li').css('background-color','#cccccc');
		
		
		
		$('.debug h1').css('font-size','18px');
		$('.debug h1').css('width','98%');
		$('.debug h1').css('padding','1%');
		$('.debug h1').css('background-color','#333333');
		$('.debug h1').css('color','#eeeeee');
		$('.debug h1').css('text-align','center');
   }
   
 })(jQuery)
