function initDigitalProductAction()
{
	/* imposta il gestore del change sul select del tab review */
	$('#review-chapter-select').change
	(
		function(){ reviewChapterChanged( $( this ).val() ); }
	);
	/* imposta il funzionamento del pager della recensione */
	$('#product-tabber-review .pager a').click
	(
		function(){ reviewChapterChangedByPager( $( this ) ); return false; }
	);
}

/**********************
* TABBER REVIEW BLOCK *
**********************/


/**
 * Gestisce il cambio di capitolo della recensione dal pager
 *
 * @param link, jQuery, required, Il link del pager che è stato cliccato
**/
function reviewChapterChangedByPager( link )
{
	var href = link.attr('href');
	var page = href.substr( href.lastIndexOf('-') + 1 );
	reviewChapterChanged( page );
}

/**
 * Gestisce il change del select di selezione capitolo recensione
 *
 * @param page, int, required, La pagina selezionata
**/
function reviewChapterChanged( page )
{
	/* recupera il capitolo dalla pagina */
	var chapter = getReviewChapter( page );
	/* identifica il contenitore dei capitoli */
	var container = $('.review-chapters-list');
	container.each( function(){ this.scrollTop = 0; });
	/* nasconde tutti i capitoli presenti */
	$('.review-chapter-content').hide();
	/* nasconde il container */
	container.hide();

	/* verifica se esiste già il capitolo corrispondente */
	if( $('#review-chapter-' + chapter ).html() )
	{
		/* se esiste, lo mostra */
		updateReviewChapterSelection( page );
		/* mostra il capitolo */
		$('#review-chapter-' + chapter ).show();
		/* esegue il fadin del container */
		container.fadeIn('slow');

	} else {
		/* altrimenti, richiede il caricamento */
		/* recupera l'id della recensione */
		var review = container.attr('id').substr(container.attr('id').lastIndexOf('-') + 1 );
		showAjaxLoader( $('#tabber-content-container') );
		$.ajax
		(
			{
				type: 'POST',
				url: SITE_PATH + 'a/ajax.php',
				data: 'c=prodotti&m=getReviewChapter&review=' + review + '&chapter=' + chapter,
				success: function( result )
				{
					hideAjaxLoader( $('#tabber-content-container') );
					if( ajaxError( result ) )
					{
						return false;
					}
					/* aggiorna la selezione del select */
					updateReviewChapterSelection( page );
					/* scrive il contenuto e mostra il container */
					container.append( result ).fadeIn('slow');
				}
			}
		);
	}
}

/**
 * Aggiorna il sistema di selezione di un capitolo della recensione
 *
 * @param chapter, int, required, L'id del capitolo selezionato
**/
function updateReviewChapterSelection( page )
{
	/* trasforma page in numero */
	page = Number( page );
	/* definisce le variabili */
	var lis, li, current, pages = getReviewPages();
	/* aggiorna il select */
	$('#review-chapter-select').val( page );
	/* recupera tutti i li del pager */
	lis = $('#product-tabber-review .pager li');
	/* recupera il li attualmente selezionato */
	li = $('#product-tabber-review .pager .selected-page');
	/* recupera la pagina indicata */
	current = li.find('b').html();
	/* trasforma lo span al suo interno in un link */
	li.empty().html('<a href="#review-page-' + current + '" title="Pagina ' + current + ' di ' + pages + '"><span class="hidden">Pagina </span>' + current + '</a>')
	/* imposta il click del nuovo link */
	li.find('a').click( function(){ reviewChapterChangedByPager( $( this ) ); return false; } );
	/* rimuove la classe selected-page da tutti i li */
	lis.removeClass('selected-page');
	/* recupera il li relativo al capitolo selezionato */
	li = $( lis[ page ] );
	/* trasforma il link al suo interno in uno span */
	li.empty().html('<span class="hidden">Pagina </span><b>' + page + '</b>')
	/* seleziona la pagina corrente */
	li.addClass('selected-page');
	/* recupera il li del prev-page e ne modifica il link */
	$( lis[ 0 ] ).find('a').removeAttr('href').attr('href', '#review-page-' + ( page > 1 ? page - 1 : pages ) );
	/* recupera il li del next-page e ne modifica il link */
	$( lis[ pages + 1 ] ).find('a').removeAttr('href').attr('href', '#review-page-' + ( page < pages ? page + 1 : 1 ) );
}

/**
 * Restituisce il numero di pagine della recensione
 *
 * @return int
**/
function getReviewPages()
{
	return REVIEW_CHAPTERS.length;
}

/**
 * Restituisce l'id di un capitolo dalla pagina corrispondente
 *
 * @param page, int, required, Il numero di pagina
 *
 * @return int
**/
function getReviewChapter( page )
{
	return REVIEW_CHAPTERS[ page - 1 ];
}

/**
 * Restituisce il numero di pagina dall'id di un capitolo di recensione
 *
 * @param chapter, int, required, L'id del capitolo
 *
 * @return int
**/
function getReviewPage( chapter )
{
	chapter = Number(chapter);
	var l = REVIEW_CHAPTERS.length;
	for( var i = 0; i < l; i++ )
	{
		if( REVIEW_CHAPTERS[ i ] == chapter )
		{
			return i + 1;
		}
	}
	return 0;
}

/**
 * Associa la funzione initDigitalProductAction all'evento onload della pagina
**/
$( document ).ready( initDigitalProductAction );
