/*

Auteur : Laurent BRACQUART <bracquart.laurent@gmail.com>
Date de création : 06 Janvier 2010
Version : 1.0

Index :

	0/ Affirmation de l'activation du JS chez le client
	1/ Gestion du survol sur les images cliquables
	2/ Gestion de l'animation du sous-menu
	3/ Gestion du tampon 'New'
	4/ Gestion du comportement du champ de texte du formulaire d'inscription à la newsletter
	5/ Gestion des slideshows (accueil + fiches produits)
	6/ Gestion de l'affichage en deux temps de la description sur la fiche produit
	7/ Gestion de la sélection automatique du texte au clic sur un champ texte
	8/ Gestion de l'affichage du choix de l'adresse de livraison
	9/ Ouverture des liens externes dans une nouvelle fenêtre
	10/ Gestion de l'affichage des messages de confirmation et d'erreurs
	11/ Chargement de l'encart Flash "Trimester print" sur la home
	12/ Chargement de l'encart Flash "Trimester print explanation" sur la fiche produit "Prints"
	13/ Chargement des vidéos sur les fiches produits "Books"
	14/ Chargement de l'encart Flash permettant le téléchargement des PDF "Otra-Vista Tribune"
	15/ Affichage des "Making of" des livres au sein d'une Shadowbox
	16/ Gestion du paiement par Paypal
	
	Annexes/ Fonctions annexes

*/

$(document).ready(function()
{
	// 0/ Affirmation de l'activation du JS chez le client
	$('body').removeClass('no-js');
	
	// ---------------------------------------------------------------------------------------- //

	// 1/ Gestion du survol sur les images cliquables
	// Note importante : on repère une image cliquable à la présence du mot "neutre"
	// à l'intérieur de son attribut src, qu'on remplace par le mot "hover" au survol.
	$('a img').live('mouseover', function()
	{
		if ($(this).attr('src').indexOf('neutre') > 0)
		{
			$(this).attr('src', $(this).attr('src').replace('neutre', 'hover'));
		}
	});
	$('a img').live('mouseout', function()
	{
		if ($(this).attr('src').indexOf('hover') > 0)
		{
			$(this).attr('src', $(this).attr('src').replace('hover', 'neutre'));
		}
	});
	
	// ---------------------------------------------------------------------------------------- //

	// 2/ Gestion de l'animation du sous-menu
	$('ul#menu li.second-item').hover(function()
	{
		$(this).find('ul').stop(true, true).slideDown(300);
	}, function()
	{
		$(this).find('ul').delay(2000).slideUp(250);
	});
	
	// ---------------------------------------------------------------------------------------- //

	// 3/ Gestion du tampon 'New'
	// Le positionnement est géré dans la CSS.
	var stampNew = $('<img class="stamp-new" src="/images/stamp-new.png" alt="Button: New" title="" width="57" height="57" />');
	$('p.new').append(stampNew);
	
	// ---------------------------------------------------------------------------------------- //

	// 4/ Gestion du comportement du champ de texte du formulaire d'inscription à la newsletter
	var champTexte = $('form#newsletter-block ul.list-form-fields li.text input');
	viderChampTexteAuFocus(champTexte, 'Your email');
	
	// ---------------------------------------------------------------------------------------- //
	
	// 5/ Gestion des slideshows (accueil + fiches produits)
	// Les positionnements sont gérés directement dans la CSS
	// Ajout d'un conteneur
	$('ul#slideshow').wrap('<div id="slideshow-wrapper"></div>');
	// Ajout des boutons si le slideshow contient plusieurs images
	if ($('ul#slideshow li').length > 1)
	{
		previous = $('<a id="previous-button-slideshow" href="#" title="Previous"><img src="/images/previous-button-slideshow-neutre.png" alt="Previous" title="" width="10" height="10" /></a>');
		next = $('<a id="next-button-slideshow" href="#" title="Next"><img src="/images/next-button-slideshow-neutre.png" alt="Next" title="" width="10" height="10" /></a>');
		$('div#slideshow-wrapper').prepend(next).prepend(previous);
		// Masquage des boutons par défaut
		$('a#previous-button-slideshow, a#next-button-slideshow').hide();
	}	
	// Lancement du slideshow
	$('ul#slideshow').cycle(
	{
		fx:		'fade',
		prev:	'a#previous-button-slideshow',
		next:	'a#next-button-slideshow',
		pause:	true
	});
	// Gestion des effets sur les boutons de navigation
	$('div#slideshow-wrapper').hover(function()
	{
		$('a#previous-button-slideshow, a#next-button-slideshow').stop(true, true).fadeIn();
	}, function()
	{
		$('a#previous-button-slideshow, a#next-button-slideshow').stop(true, true).fadeOut();
	});
	
	// ---------------------------------------------------------------------------------------- //
	
	// 6/ Gestion de l'affichage en deux temps de la description sur la fiche produit
	// Utilise l'intéressant plugin jQuery Expander : http://plugins.learningjquery.com/expander/
	var selecteur = 'body#postcards-product-details div#product-block div.product-description p';
		selecteur += ', body#otra-vista-tribune-product-details div#product-block div.product-description p';
		selecteur += ', body#miscellaneous-product-details div#product-block div.product-description p';
		selecteur += ', body#books-limited-edition-product-details div#product-block div.product-description p';
		selecteur += ', body#prints-product-details div#product-block div.product-description p';
	$(selecteur).expander(
	{
		slicePoint:			170,
		expandSpeed:		500,
		expandText:			'[more]',
		userCollapseText:	'[less]'
	});
	
	// ---------------------------------------------------------------------------------------- //
	
	// 7/ Gestion de la sélection automatique du texte interne au clic sur un champ texte
	$('input[type=text], textarea').focus(function()
	{
		$(this).select();
	});
	
	// ---------------------------------------------------------------------------------------- //
	
	// 8/ Gestion de l'affichage du choix de l'adresse de livraison
	$('body#address form#addresses-form fieldset#billing-address div.choose-an-address-block').hide();
	$('body#address form#addresses-form input#same-address:checkbox').click(function()
	{
		$(this).parents('fieldset').find('div.choose-an-address-block').toggle();
	});
	
	// ---------------------------------------------------------------------------------------- //
	
	// 9/ Ouverture des liens externes dans une nouvelle fenêtre
	$('a[class*=external-link]').each(function()
	{
		title = '';
		if($(this).attr('title')) title = $(this).attr('title') + ' ';
		$(this).attr('target', '_blank').attr('title', title + '[Opening in a new window]');
	});
	
	// ---------------------------------------------------------------------------------------- //
	
	// 10/ Gestion de l'affichage des messages de confirmation et d'erreurs
	$('p.confirmation, ul.errors').hide().fadeIn(750);
	
	// ---------------------------------------------------------------------------------------- //
	
	// 11/ Chargement de l'encart Flash "Trimester print" sur la home
	// Utilise le prometteur Flashembed : http://flowplayer.org/tools/flashembed.html
	$('body#home div#print-subscription-overview').flashembed(
	{
		src:	'/swf/trimester-bloc-home.swf',
		w3c:	true
	});
	
	// ---------------------------------------------------------------------------------------- //
	
	// 12/ Chargement de l'encart Flash "Trimester print explanation" sur la fiche produit "Prints"
	// Utilise le prometteur Flashembed : http://flowplayer.org/tools/flashembed.html
	$('body#prints-product-details div#trimester-print-explanation-block').flashembed(
	{
		src:	'/swf/subscription-bloc-prints.swf',
		w3c:	true
	});
	
	// ---------------------------------------------------------------------------------------- //
	
	// 13/ Chargement des vidéos sur les fiches produits "Books"
	// Utilise le prometteur Flashembed : http://flowplayer.org/tools/flashembed.html
	// Récupération du nom de la vidéo
	var nomVideo = $('body#books-product-details div#product-video').attr('title');
	// Si l'élément n'existe pas
	if (!nomVideo)
	{
		nomVideo = '';
	}
	// Sinon, si l'extension n'est pas '.flv', on vide la variable
	else if (nomVideo.substring(nomVideo.lastIndexOf('.')) != '.flv')
	{
		nomVideo = '';
	}
	// Chargement de cette dernière
	$('body#books-product-details div#product-video').flashembed(
	{
		src:		'/swf/otravistaPlayer.swf',
		w3c:		true,
		wmode:		'opaque'
	},
	{
		videoUrl:	'videos/' + nomVideo
	});
	
	// ---------------------------------------------------------------------------------------- //
	
	// 14/ Chargement de l'encart Flash permettant le téléchargement des PDF "Otra-Vista Tribune"
	// Utilise le prometteur Flashembed : http://flowplayer.org/tools/flashembed.html
	// Récupération du lien vers le PDF
	var urlPdf = $('body#otra-vista-tribune-product-details a#download-otra-vista-tribune-link').attr('href');
	// Si l'élément n'existe pas
	if (!urlPdf)
	{
		urlPdf = '';
	}
	// Sinon, si l'extension n'est pas '.pdf', on vide la variable
	else if (urlPdf.substring(urlPdf.lastIndexOf('.')) != '.pdf' || !urlPdf)
	{
		urlPdf = '';
	}
	// Chargement du lien .swf vers ce dernier
	$('body#otra-vista-tribune-product-details div#download-otra-vista-tribune-block').flashembed(
	{
		src:		'/swf/download-tribune-bloc.swf',
		w3c:		true
	},
	{
		urlPDF:		urlPdf
	});
	
	// ---------------------------------------------------------------------------------------- //
	
	// 15/ Affichage des "Making of" des livres au sein d'une Shadowbox
	// Masquage de tous les <li>, sauf le premier
	$('ul#making-of-buttons li:not(:first)').hide();
	// Initalisation de la Shadowbox
	Shadowbox.init(
	{
		skipSetup:		true
	});
	// Association manuelle de la Shadowbox avec les liens du "Making of"
	Shadowbox.setup('ul#making-of-buttons a',
	{
		gallery:		'making-of',
		overlayOpacity:	0.8
	});
	
	// ---------------------------------------------------------------------------------------- //
	
	// 16/ Gestion du paiement par Paypal
	$('a.paypal_link').click(function()
	{
		$('form#paypal_form').submit();
		return false;
	});
	$('form#payment-form').submit(function()
	{
		$('form#paypal_form').submit();
		return false;
	});
});

// Annexes/ Fonctions annexes

// Vide ou remplit à nouveau le champ texte passé en
// premier paramètre avec la valeur passée en second paramètre
function viderChampTexteAuFocus(champ, valeurChamp)
{
	champ.focus(function()
	{
		if(champ.val() == valeurChamp) champ.val('');
	});
	champ.blur(function()
	{
		if(champ.val() == '') champ.val(valeurChamp);
	});
}
