﻿(function($) {
	$.fn.scroller = function(opts) {
		var defaults = {
			handleLeft:  'jQscroller_handleLeft',
			handleRight: 'jQscroller_handleRight',
			wrapper:     'jQscroller_wrapper',
			slider:      'jQscroller_slider',
			cellWidth:   140,
			margin:      20,
			speed:       500
		}
		
		var config = $.extend(defaults, opts);
		
		//ciclo principale
		return this.each(function() {
			var Obj = $(this);
			var params = {
				handleLeft:   Obj.find('.'+config.handleLeft),
				handleRight:  Obj.find('.'+config.handleRight),
				wrapper:      Obj.find('.'+config.wrapper),
				slider:       Obj.find('.'+config.slider),
				imageLinks:   Obj.find('.'+config.slider+' a'),
				currentPos:   0,
				sliderWidth:  0,
				wrapperWidth: 0,
				maxRight:     0,
				maxLeft:      0
			}
			$.fn.scroller.init(config, params);
			$.fn.scroller.handleEvents(config, params);
		});
	}
	
	$.fn.scroller.init = function(config, params) {
		//metodo per settare le impostazioni iniziali
		params.wrapper.css('overflow-x', 'hidden');
		
		params.sliderWidth = (config.cellWidth + config.margin) * params.imageLinks.length;
		params.wrapperWidth = params.wrapper.width();
		
		params.slider.width(params.sliderWidth);
		
		params.maxRight = params.sliderWidth - params.wrapperWidth - config.margin;
	}
	
	$.fn.scroller.scrollLeft = function(config, params) {
		//metodo per scrollare a sinistra
		var nextPosition = params.currentPos - config.cellWidth - config.margin;
		if (nextPosition < 0) {
			nextPosition = 0;
		}
		params.slider.animate({left: '-' + nextPosition + 'px'}, config.speed);
		params.currentPos = nextPosition;
	}
	
	$.fn.scroller.scrollRight = function(config, params) {
		//metodo per scrollare a destra
		var nextPosition = params.currentPos + config.cellWidth + config.margin;
		if (nextPosition > params.maxRight) {
			nextPosition = params.maxRight;
		}
		params.slider.animate({left: '-' + nextPosition + 'px'}, config.speed);
		params.currentPos = nextPosition;
	}
	
	$.fn.scroller.handleEvents = function(config, params) {
		//metodo per gestire gli eventi
		params.handleLeft.click(function() {
			$.fn.scroller.scrollLeft(config, params);
			return false;
		});
		
		params.handleRight.click(function() {
			$.fn.scroller.scrollRight(config, params);
			return false;
		});
	}
})(jQuery)