$.fn.panelSlider = function(vars){
	// Riporto le variabili e setto i valori di default in caso non vengano dichiarate
	var idPanelSlider=this;
	var transitionTime= (vars.transitionTime != undefined) ? vars.transitionTime : 1000; 
	var tPause= (vars.tPause != undefined) ? vars.tPause : 3000;        
	var transitionMetod=(vars.transitionMetod != undefined) ? vars.transitionMetod : 'easeOutQuart'; 
	var horizontal=(vars.horizontal != undefined) ? vars.horizontal : false;
	var loop=(vars.loop != undefined) ? vars.loop : true;
		
	// Variabili iniziali
	var startPos=0;
	var posizione=0;
	var transitionDuration=0;
				 
	if(loop){
		// Se setto il loop duplico il primo pannello alla fine
		if($('#'+idPanelSlider[0].id + ' .panelContainer .panel').size() > 1){
			 var firstPanelContent=$('#' + idPanelSlider[0].id + " .panelContainer .panel:first-Child").html();
			 $("<div class='panel'>"+firstPanelContent+"</div>").appendTo('#' + idPanelSlider[0].id +' .panelContainer');
		};
	};
			
	// Creo gli oggetti
	var panel=$('#' + idPanelSlider[0].id +' .panelContainer .panel');
	var panelContainer=$('#' + idPanelSlider[0].id +' .panelContainer');

	if(horizontal){
		// controllo se la visualizzazione è in orizzontale
		panel.css('float','left');
		panelContainer.css('width', panel.width()*panel.size())
	};
		 
	// funzione slide
	function slide(){
		var step = horizontal ? panel.width() : panel.height();
		posizione -= step;
							 
		if(posizione == -(step * (panel.size()))){				
			if(loop){
				// Se ho settato il loop
				posizione= -(startPos + step);
				horizontal ? panelContainer.css('left', startPos) : panelContainer.css('top', startPos);
			} else{
				// Se non sono in loop
				posizione = startPos;
				transitionDuration=(transitionTime * panel.size())/2;
			}
			transition();
			
		}else{
			transitionDuration=transitionTime;
			transition();
		};
	};
				  
	// Funzione per la transizione 
	function transition(){  
		if(horizontal){     
			panelContainer.animate({left: posizione}, {easing:transitionMetod, duration:transitionDuration});
		}else{
			panelContainer.animate({top: posizione}, {easing:transitionMetod, duration:transitionDuration});                          
		}
		timeout = nextSlide();
	};                         
	
	// Funzione con timeout per la slide successiva
	function nextSlide(){
		return setTimeout(slide, (tPause+transitionDuration));
	};
	
	//Inizializzo        
	var timeout = nextSlide();

	$(this).hover(function(){
		clearTimeout(timeout);
	},function(){
		timeout = nextSlide();
	});
};