/**
 * Avvia tutti gli script necessari a magazine.digital.it
**/
function initMagazine()
{
	preloadImages
	(
		'images/links/business-digital-link-background-over.png',
		'images/links/business-digital-link-background-up.png',
		'images/links/www-digital-link-background-over.png',
		'images/links/www-digital-link-background-up.png',
		'images/links/home-digital-link-background-over.png',
		'images/links/home-digital-link-background-up.png',
		'images/ajax-loader.gif'
	);
	$( 'a[rel="external"]' ).click( openExternalLink );

	var currentSelectedClassId = $( '#products-navigation > li > span' ).attr( 'id' );
	if( currentSelectedClassId )
	{
		$( '#prod-nav-' + getClassNumericId( currentSelectedClassId ) ).show();
	}
	$( '#products-navigation > li > a,#products-navigation > li > span' ).mouseover
	(
		function() { navigateClass( this ); }
	);
	$( '.prod-nav-select-container > select' ).change
	(
		function(){ return gotoSelectedPage( this, 'category' ); }
	).each
	(
		function()
		{
			autoAdjustSelectSize( $(this), 200, false );
		}
	);
	$( '#sel-networksite' ).change
	(
		function(){ changeNetworkSite(); }
	);
	$( '#visit-network-site a' ).click
	(
		function(){ changeNetworkSite(); return false; }
	);
	$('#header-search-form').submit
	(
		function()
		{
			var s = $('#header-search-form-input').val();
			if( $.trim( s ).length < 2 )
			{
				showAlert( 'Devi inserire almeno due caratteri!' );
				return false;
			} else {
				return true;
			} 
		}
	);
	$( '.hinted-input' ).hint();
	$('.advertorial-sponsor .toggle').click
	(
		function(){ advertorialShowMore( $(this) ); return false; }
	);
	
	/* setta l'hint per il campo dell'email nel box newsletter */
	$( 'input[name="e"]' ).hint();
	/* gestisce il click sul pulsante della newsletter */
	$( '.newsletter-box-send' ).click
	(
		function(){ return newsletterButtonClicked( $( this ) ); }
	);
	$( '.share-on-facebook a' ).click( shareOnFacebook );
}

/**
 * Gestisce il click sul pulsante "Segnala su Facebook"
**/
function shareOnFacebook()
{
	var u = location.href;
	var t = document.title;
	window.open
	(
		'http://www.facebook.com/sharer.php?u=' + encodeURIComponent(u) + '&t=' + encodeURIComponent(t),
		'sharer','toolbar=0,status=0,width=626,height=436'
	);
	return false;
}


/**
 * Gestisce il click sui pulsante del box newsletter
 *
 * @param link, jQuery, required, Il riferimento al pulsante
**/
function newsletterButtonClicked( button )
{
	var mail = $.trim( $( 'input[name="e"]' ).val() );
	if( mail.match(/^([a-z0-9_\.-])+@(([a-z0-9_-])+\.)+[a-z]{2,6}$/i) == null )
	{
		alert('Inserisci un indirizzo email!');
		return false;
	} else {
		return true;
	}
}

/**
 * Verifica l'esistenza di una variabile
 *
 * @param variable, string, required, Il nome dell variabile
**/
function isDefined( variable )
{
	return typeof( variable ) != 'undefined';
}

/**
 * Imposta la visibilità dei banner
 *
 * @param visibility, boolean, required, True per rendere visibili i banner
**/
function setBannersVisibility( visibility )
{
	if( visibility )
	{
		$('.banner > div').show();
		$('#leaderboard-banner').css( 'height', 'auto' );
	} else {
		$('#leaderboard-banner').css( 'height', $('#leaderboard-banner').height() + 'px' );
		$('.banner > div').hide();
	}
}

/**
 * Imposta la visibilità del pulsante "vai" dei filtri
 *
 * @param visibility, boolean, required, True per rendere il pulsante visibile
**/
function setFilterButtonVisibility( visibility )
{
	if( visibility )
	{
		$('#filter-go-button').show();
	} else {
		$('#filter-go-button').hide();
	}
}

/**
 * Gestice il combobox per visitare gli altri siti del network
**/
function changeNetworkSite()
{
	var value = $( '#sel-networksite' ).val();
	if( value != '' )
	{
		window.location.href = value + '/';
	}
}

/**
 * Risolve il bug del select di ie
 *
 * @param select, jQuery, required, Il select
 * @param width, int, required, La larghezza del select chiuso
 * @param isFilter, boolean, required, True se il select è un filtro di categoria
**/
function autoAdjustSelectSize( select, width, isFilter )
{
	if( $.browser.msie )
	{
		select.mouseover
		(
			function()
			{
				var s = $( this );
				s.css( 'width', 'auto' );
				if( s.width() < width )
				{
					s.css( 'width', width + 'px' );
				}
				if( isFilter )
				{
					setFilterButtonVisibility( false );
				}
				setAdjustOnMouseOut( $( this ), width, isFilter );
			}
		);
	}
}
function setAdjustOnMouseOut( select, width, isFilter )
{
	select.mouseout
	(
		function(){ $( this ).css( 'width', width + 'px' );setFilterButtonVisibility( true ); }
	).mousedown
	(
		function(){ $(this).unbind( 'mouseout' ); setAdjustOnBlur( $( this ), width, isFilter ); }
	).unbind( 'blur' );
}
function setAdjustOnBlur( select, width, isFilter )
{
	select.blur
	(
		function(){ $( this ).css( 'width', width + 'px' );setFilterButtonVisibility( true ); }
	);
}

/**
 * Converte le entità html
 *
 * @param s, string, required
**/
function html_entities_decode( s )
{
	var a = $('<textarea />').html( s );
	var d = a.val();
	a.remove();
	return d;
}

/**
 * Converte le entità html
 *
 * @param s, string, required
**/
function html_entities_encode( s )
{
	var a = $('<div />').html( s );
	var d = a.html();
	a.remove();
	return d;
}

/**
 * Esegue il preload di immagini
**/
function preloadImages()
{
	for( var i = 0; i < arguments.length; i++ )
	{
		$( '<img />' ).attr( 'src', arguments[i] );
	}
}

/**
 * Sostituisce gli ampersand nel testo passato
 *
 * @param text, string, required, Il testo in cui effettuare la sostituzione
**/
function fixAmpersand( text )
{
    return text.replace("&","<[AMPERSAND]>");
}

/**
 * Scrive un log nella finestra di firebug
 *
 * @param t, string, required, La stringa da loggare
**/
function debug( t )
{
	if ( window.console && window.console.log )
	{
		window.console.log( "magazine.digital.it: " + t );
	}
}

/**
 * Gestore degli errori ajax
 *
 * @param result, string, required, Il testo da verificare
 * @return boolean
**/
function ajaxError( result )
{
	var isError = false, errorString = '', match;
	if( result.match(/^Error:/i) )
	{
		isError = true;
		errorString = result.replace('Error:','');
	}
	else if( match = result.match(/<b>(Notice|Warning)<\/b>/i ) )
	{
		isError = true;
		errorString = '';/*match[ 0 ];*/
	}
	if( isError && errorString != '' )
	{
		showAlert( errorString, 'alert' );
	}
	return isError;
}

/**
 * Wrapper dei dialogs di default
 *
 * @param message, string, required, Il messaggio da visualizzare
 * @param type, string, required, Il tipo di Dialog
**/
function showAlert( message, type )
{
	var valid = typeof $.prompt !== 'undefined';
	var isIE6 = $.browser.msie && Number( $.browser.version.split('.')[0] ) <= 6;
	switch( type )
	{
		case 'alert': default:
			if( isIE6 || !valid )
			{
				alert( message );
			} else {
				setBannersVisibility( false );
				$.prompt
				(
					message,
					{
						prefix:'dgi',
						opacity:0.4,
						show:'fadeIn',
						overlayspeed:'fast',
						callback: function( v, m ) { setBannersVisibility( true ); }
					}
				);
			}
			break;

		case 'prompt':
			return window.prompt( message );
			break;

		case 'confirm':
			var callback = arguments[2];
			var param = arguments[3];
			if( isIE6 || !valid )
			{
				if( confirm( message ) )
				{
					callback( param );
				}
			} else {
				$.prompt
				(
					message,
					{
						prefix:'dgi',
						opacity:0.4,
						show:'fadeIn',
						overlayspeed:'fast',
						buttons: { Ok: true, Annulla: false },
						callback: function( v, m)
						{
							if( v ){
								callback( param );
							}
							setBannersVisibility( true );
						}
					}
				);
			}
			break;
	}
}

/**
 * Associato ad un tag <a>, ne apre il link in una nuova finestra
**/
function openExternalLink()
{
	window.open( $( this ).attr( 'href' ) );
	return false;
}

/**
 * Restituisce l'id numerico della classe dall'id dell'elemento
 *
 * @param id, string, required, L'id dell'elemento
 * @return int
**/
function getClassNumericId( id )
{
	return Number( getLinkName( id ) );
}

/**
 * Restituisce il nome del link
 *
 * @param id, string, required, L'id dell'elemento
 * @return string
**/
function getLinkName( id )
{
	if( isDefined( id ) )
	{
		return id.substr( id.lastIndexOf( '-' ) + 1 );
	} else {
		return '';
	}
}

/**
 * Mostra i link alle categorie della classe indicata
 *
 * @param link, object, required, Il link che ha invocato il metodo
**/
function navigateClass( link )
{
	$( '#products-navigation > li > a' ).removeAttr( 'class' );

	var currentLink = $( link );
	var currentLinkId = currentLink.attr( 'id' );

	currentLink.addClass( 'selected' );

	$( '.prod-nav-content' ).hide();
	$( '#prod-nav-' + getClassNumericId( currentLinkId ) ).show();
}

/**
 * Richiama una pagina html
 *
 * @param item, object, required, L'elemento selezionato
 * @oaram type, string, required, Il tipo di risorsa a cui redirigere la pagina
**/
function gotoSelectedPage( item, type )
{
	switch( type )
	{
		case 'category':
			var link = $( item ).val();
			if( link != '' )
			{
				window.location.href = link;
			}
			break;
	}
}

/**
 * Metodi per la gestione dell'advertorial
**/
function advertorialShowMore( link )
{
	var t = 'Nascondi testo';
	link.parent().find( '.more' ).show();
	link.attr( 'title', t ).html( t ).unbind().click( function(){ advertorialHideMore( $(this) ); return false; } );
}
function advertorialHideMore( link )
{
	var t = 'Leggi tutto';
	link.parent().find( '.more' ).hide();
	link.attr( 'title', t ).html( t ).unbind().click( function(){ advertorialShowMore( $(this) ); return false; } );
}

/**
 * Associa la funzione initMagazine all'evento onload della pagina
**/
$( document ).ready( initMagazine );