jQuery.fn.rowgallery = function(){
	
	// ===========================================================
	// = impostazioni condivise da tutte le gallery della pagina =
	// ===========================================================
	
	/*debug*/
	debug = false;
	
	/*numero di miniature da muovere*/
	thumbs_to_move = 4;
	
	// ==============================
	// = formattazione della pagina =
	// ==============================
	
	/* attivo gli stili solo se js è attivo*/
	$(this).addClass('on');
	
	/*di default parte dell'html non deve essere presente nel codice, perchè funziona solo se c'è javascript, quindi lo aggiungo da qui*/
	$(this).prepend('<div class="content_module_rowgallery_prev"></div>');
	$(this).prepend('<div class="content_module_rowgallery_next"></div>');
	//$(this).prepend('<div class="content_module_rowgallery_tooltip"></div>');
	
	/*recupero il src delle thumb e lo assegno come bkg al li che la contiene*/
	$(this).find('li').each(function(){
		var src = $(this).find('img').attr('src');
		var background_color = $(this).css('background-color');
		//$(this).find("a").css('background', background_color + 'url(' + src + ') 50% 50% no-repeat');
	});
	
	// =============================
	// = gestione delle didascalie =
	// =============================
	
	/* gestione delle didascalie */ 
	$('.content_module_rowgallery_thumbs p').hide();
	$('.content_module_rowgallery_thumbs a').mouseover(function(){
		trace($(this).attr('title'));
		$(this).parents('.content_module_rowgallery').find('.content_module_rowgallery_tooltip').html($(this).attr('title'));
	}).mouseleave(function(){
		$(this).parents('.content_module_rowgallery').find('.content_module_rowgallery_tooltip').html('');
	});
	
	// ==============================
	// = gestione dei comportamenti =
	// ==============================
	
	init($(this));
	
	function init(obj){
		var rowgallery_thumbs_total_width = getTotalWidth(obj);
		var rowgallery_viewport_width = getRowgalleryViewportWidth(obj);
		var thumbs_number =getThumbsNumber(obj);
		
		/* assegno all'ul la larghezza calcolata per mantenere le miniature su una sola riga */
		obj.find('.content_module_rowgallery_thumbs ul').css('width',rowgallery_thumbs_total_width);
		trace('thumbs_number= ' + thumbs_number);
		/* se la larghezza delle miniature è superiore a quella del viewport devo attivare i bottoni*/
		if(rowgallery_thumbs_total_width > rowgallery_viewport_width && thumbs_number > 0){
			checkButtons(obj );
		}
	}
	
	/*gestisco lo stato dei bottoni*/
	function checkButtons(obj){
		//rimuov la classe che dice che l'oggetto si sta muovendo
		obj.removeClass('ismoving');
		
		var rowgallery_thumbs_total_width = getTotalWidth(obj);
		var rowgallery_viewport_width = getRowgalleryViewportWidth(obj);
		var rowgallery_btn_prev = obj.find('.content_module_rowgallery_prev');
		var rowgallery_btn_next = obj.find('.content_module_rowgallery_next');
		var rowgallery_thumbs_position = obj.find('.content_module_rowgallery_thumbs').position();
		
		// bottone prev
		if(rowgallery_thumbs_position.left >= 0){
			rowgallery_btn_prev.css('background-position', '0px 0px');
			rowgallery_btn_prev.unbind('click');
			rowgallery_btn_prev.unbind('mouseenter');
			rowgallery_btn_prev.unbind('mouseleave');
			rowgallery_btn_prev.removeClass('btnOn');
			trace('disattiva prev');
		}else{
			if(! rowgallery_btn_prev.hasClass('btnOn')){
				rowgallery_btn_prev.css('background-position', '-' + rowgallery_btn_prev.width() + 'px');
				rowgallery_btn_prev.bind('click', {dir:'prev', obj: obj}, move);
				rowgallery_btn_prev.bind('mouseenter', onBtnRollOver);
				rowgallery_btn_prev.bind('mouseleave', onBtnRollOut);	
				rowgallery_btn_prev.addClass('btnOn');
			}          
		}
		
		// bottone next
		if(rowgallery_thumbs_position.left < 0 && rowgallery_thumbs_position.left <=  rowgallery_viewport_width - rowgallery_thumbs_total_width){
			rowgallery_btn_next.css('background-position', '0px 0px');
			rowgallery_btn_next.unbind('click');
			rowgallery_btn_next.unbind('mouseenter');
			rowgallery_btn_next.unbind('mouseleave');
			rowgallery_btn_next.removeClass('btnOn');
		}else{
			if(! rowgallery_btn_next.hasClass('btnOn')){
				rowgallery_btn_next.css('background-position', '-' + rowgallery_btn_next.width() + 'px');
				rowgallery_btn_next.bind('click', {dir:'next', obj: obj}, move);
				rowgallery_btn_next.bind('mouseenter', onBtnRollOver);
				rowgallery_btn_next.bind('mouseleave', onBtnRollOut);	
				rowgallery_btn_next.addClass('btnOn');			
			}

		}
	}
	
	function move(evt){      
		var obj = evt.data.obj;
		if(obj.hasClass('ismoving')) return;
		
		obj.addClass('ismoving');
		
		var rowgallery_thumbs_position = obj.find('.content_module_rowgallery_thumbs').position();
		if(evt.data.dir == 'next'){
			target_pos = rowgallery_thumbs_position.left - getThumbTotalWidth(obj) * thumbs_to_move;
			trace('target_pos: ' + target_pos);
		}
		if(evt.data.dir == 'prev'){
			target_pos = rowgallery_thumbs_position.left + getThumbTotalWidth(obj) * thumbs_to_move;
		}
		trace('target_pos: ' + target_pos);
		obj.find('.content_module_rowgallery_thumbs').animate({
		    left: target_pos
		  }, 1000);
		setTimeout(function(){checkButtons(obj)},1200); //da controllare
	}
	
	function onBtnRollOver(){
		$(this).css('background-position', '-' + $(this).width()*2 + 'px 0px');
	}
	
	function onBtnRollOut(){
		$(this).css('background-position', '-' + $(this).width() + 'px 0px');
	}
	
	// =============
	// = utilities =
	// =============
	
	function getTotalWidth(obj){
		/*con l'html pronto recupero gli oggeti su cui devo lavorare*/
		var rowgallery_thumbs = obj.find('.content_module_rowgallery_thumbs');
		var rowgallery_thumbs_number = getThumbsNumber(obj);
		var rowgallery_thumb_space_temp = rowgallery_thumbs.find('li:first').css('margin-right');
		if (rowgallery_thumb_space_temp == undefined) return;
		var rowgallery_thumb_space = rowgallery_thumb_space_temp.substr(0, rowgallery_thumb_space_temp.length - 2)
		var rowgallery_thumbs_total_width = getThumbTotalWidth(obj) * rowgallery_thumbs_number + parseInt(rowgallery_thumb_space);
		return rowgallery_thumbs_total_width;
	}
	function getThumbTotalWidth(obj){
		var rowgallery_thumbs = obj.find('.content_module_rowgallery_thumbs');
		var rowgallery_thumb_width = rowgallery_thumbs.find('li:first').width();
		var rowgallery_thumb_space_temp = rowgallery_thumbs.find('li:first').css('margin-right');
		var rowgallery_thumb_space = rowgallery_thumb_space_temp.substr(0, rowgallery_thumb_space_temp.length - 2)
		var rowgallery_thumb_total_width = parseInt(rowgallery_thumb_width) + parseInt(rowgallery_thumb_space);
		return rowgallery_thumb_total_width;
	}
	function getRowgalleryViewportWidth(obj){
		return obj.find('.content_module_rowgallery_viewport').width();
	}
	function getThumbsNumber(obj){
		return obj.find('.content_module_rowgallery_thumbs').find('li').length;
	}

	
	function trace(s){
		//console.log(s);
	}
}

