function Gallery()
{
	var istance;
	
	var container;
	var stage;
	var slider;
	var thumbwrap;
	var images;
	var thumbs;
	var width;

	this.init = function init(container, stage, thumbwrap)
	{
		istance = this;
	
		this.container = $(container);
		this.stage     = $(stage);
		this.thumbwrap = $(thumbwrap);
		this.slider    = $(thumbwrap).find('.slider');
		this.images    = this.stage.find('img');
		this.thumbs    = this.slider.find('img');
		
		//ora organizzo le immagini...
		this.organize();
		this.handleEvents();
	}
	
	this.organize = function organize() {
		this.container.addClass('scripted');
		this.images.not(':first').hide();
		this.images.filter(':first').show();
		this.slider.width(this.calcWidth());
		this.centerImage(0);
	}
	
	this.handleEvents = function handleEvents() {
		this.thumbs.click(function() {
			index = istance.thumbs.index(this);
			prev = istance.images.filter(':visible');
			next = istance.images.eq(index);
			istance.swapImages(prev, next);
			istance.centerImage(index);
		});
	}

	this.calcWidth = function calcWidth() {
		istance.width = 0;
		this.thumbs.each(function() {
			istance.width += $(this).width() + 10;
		});
		return istance.width;
	}

	this.swapImages = function(prev, next) {
		prev.fadeOut('fast', function() {
			next.fadeIn('fast');
		});
	}
	
	this.centerImage = function centerImage(index) {
		var offset = 0;
		if (index >= 0) {
			//conto la larghezza di tutte le immagini precedenti...
			for (i = 0; i < index; i++) {
				offset += istance.thumbs.eq(i).width() + 10;
			}
			//aggiungo anche la metà dell'immagine corrente e tolgo i 10px di margine destro...
			offset += istance.thumbs.eq(index).width() / 2 - 10;
			
			//calcolo lo spazio disponibile...
			available = istance.thumbwrap.width();
			
			//calcolo la dimensione dello slider...
			size = istance.width;
			
			//calcolo il margine teorico...
			margin = available / 2 - offset;
			
			//calcolo i limiti inferiori e superiori (per non far sforare il layout)...
			var limiteSup = 0;
			var limiteInf = available - size;
			
			//se le immagini superano lo spazio disponibile
			if (size > available) {
				//controllo se sto violando i margini...
				if( margin > limiteSup) {
					margin = limiteSup;
				}
				if (margin < limiteInf) {
					margin = limiteInf;
				}
			} else {
				margin = Math.floor((available - size) / 2);
			}
			
			istance.slider.animate({left: margin+'px'}, 'fast');
			istance.thumbs.removeClass('currentImage');
			istance.thumbs.eq(index).addClass('currentImage');
		}
	}
}
