$(document).ready(function() {

	// Le plugin numeric avec le paramètre false n'autorise que les valeurs entières pour les input
	$('#tableauListeProduits input[type=text], #tableauListePanier input[type=text]').numeric(false);

	function getURLParameter(nom, url) {

		return unescape((RegExp(nom + '=' + '(.+?)(&|$)').exec(url)||[,null])[1]);
	}
	
	function creerListeCadeaux(listeCadeaux, idCadeauCourant) {
		
		var liste = '<option value="aucun">Aucun</option>'

		for (var i = 0 in listeCadeaux) {
	
			liste = liste + '<option value="' + listeCadeaux[i].idProduit + '">' + listeCadeaux[i].nomProduit + '</option>';
		}
		
		return liste;
	}
	
	// Infobulle
	$('.descriptionProduit').wTooltip({

		style : {
			width:'350px',
			padding:'15px',
			background:'#F9F9F0',
			border:'1px solid #E2B26B'
		}
	});

	// Ajout d'un produit dans le panier
	$('.formAjouterPanier').submit(function() {

		var ligneCourante = $(this).parent('td').parent('tr');

		var idProduit = $(this).find('input[type=hidden]').val();

		var quantiteProduit = $(this).find('input[type=text]').val();

		// Si la quantité saisie est bien un nombre supérieur à 0
		if (!(isNaN(quantiteProduit)) && (quantiteProduit > 0)) {

			// Arrondi supérieur afin d'éviter les problèmes de nombres décimaux
			quantiteProduit = Math.ceil(quantiteProduit);

			url = $(this).attr('action');

			// Récupération des options du produit si elles existent
			var tableauOptionsProduit = new Array();
			
			var listeOptionsProduit = ligneCourante.find('select');
			
			// Si il y a des options
			if (listeOptionsProduit.length > 0) {
			
				// Itération qui récupère chacune d'entre elles dans un tableau
				$.each(listeOptionsProduit, function(i) {
				
					var idOption = $(this).attr('name').substr(11);

					var idValeurOption = $(this).val();

					tableauOptionsProduit[i] = { idOption : idOption, idValeurOption : idValeurOption };
				});
			}			
			
			$.getJSON(url, {idProduit : idProduit, tableauOptionsProduit : tableauOptionsProduit, quantiteProduit : quantiteProduit }, function(json) {

				$('span.descriptionPanier').empty().append('Mon panier contient ' + json.nbProduits + ' produit(s) pour un total de ' + json.montantTotal + ' €');				
				$('span.cacherLien').show();
			});
			
			// Affichage du <span> précisant que le produit a été ajouté
			var spanAjoute = ligneCourante.find('td.celluleQuantite').find('.ajoute');

			spanAjoute.empty().append('Ajouté !').hide().fadeIn(600);
		}

		return false;
	});

	$('.supprimerProduitPanier').click(function() {
	
		var ligneCourante = $(this).parent('td').parent('tr');
		
		var nomProduit = ligneCourante.find(':nth-child(2) p').text();

		if (confirm('Êtes-vous sûr(e) de vouloir retirer « ' + nomProduit + ' » du panier ?')) {

			var url = $(this).attr('href');
			
			$.getJSON(url, function(json) {
				
				if (json.nbProduits > 0) {

					ligneCourante.fadeOut(400);
					
					$('.totalCommande').empty().append(json.montantTotal);
					
					// On recharge la nouvelle liste de cadeaux pour qu'elle corresponde au montant total
					var listeCadeaux = creerListeCadeaux(json.listeCadeaux);
					
					var idCadeauCourant = $('#formCommentaireCommande select').val();
						
					// La nouvelle liste de cadeaux est générée avec l'ancien choix mis par défaut si il est encore disponible
					$('#formCommentaireCommande select').empty().append(listeCadeaux).find('option[value=' + idCadeauCourant + ']').attr('selected', 'selected');

					$('#formCommentaireCommande select').trigger('change');
				}
				else {
					
					// Suppression du produit cadeau sélectionné
					$('#formCommentaireCommande select').val('aucun').trigger('keyup');
					
					$('#formCommentaireCommande').fadeOut(400);
	
					$('#tableauListePanier').fadeOut(400, function() {
						
						$('#contenu').append('<p>Votre panier ne comporte aucun produit.</p>');
					});
				}

				// Affichage des nouveaux montants (la foncition toFixed permet un arrondi à deux chiffres)
				$('.soldeBonsCadeauxDepense').text(json.soldeBonsCadeauxDepense);
				$('.soldeBonsCadeauxRestant').text(json.soldeBonsCadeauxRestant.toFixed(2));
			});
		}

		return false;
	});

	$('#tableauListePanier form').submit(function() {

		return false;
	});	
	
	$('.formChangerBonsCadeauxProduit input[name=nbBonsCadeaux]').focus(function() {
		
		if ($(this).val() == 0 || $(this).val() == '00') {
	
			$(this).val('');
		}
	});

	$('.formChangerBonsCadeauxProduit input[name=nbBonsCadeaux]').blur(function() {
		
		if ($(this).val() == '') {
			
			$(this).val(0);
		}
	});
	
	$('.formChangerQuantite input[name=quantiteProduit]').blur(function() {
		
		if ($(this).val() == '') {
			
			var bonneQuantite = $(this).parent('form').find('input[name=bonneQuantiteProduit]').val();
			$(this).val(bonneQuantite);
		}
	});

	$('#tableauListePanier input[type=text]').bind('keyup', function(e) {

		// Permet de vérifier si la touche tapée est bien un chiffre (évite les appels de fonction inutiles)
		var verifTouche = (e.which!=8 && e.which!=0 && ((e.which < 48 || e.which > 57) && (e.which < 96 || e.which > 105))) ? false : true;

		// Si la touche tapée est bien un chiffre alors on peut lancer la vérification
		if (verifTouche == true) {

			var ligneCourante = $(this).parent('form').parent('td').parent('tr');
		
			updateLigneCourante(ligneCourante);
		}	
	});

	function updateLigneCourante(ligneCourante) {
		
		var formSaisirNbBonsCadeaux = ligneCourante.find(':nth-child(4)').find('form');
		
		var formSaisirQuantiteProduit = ligneCourante.find(':nth-child(5)').find('form');
		
		var quantiteProduit = ligneCourante.find(':nth-child(5)').find('input[name=quantiteProduit]').val();

		// Si la quantité saisie est bien un nombre supérieur à 0
		if (!(isNaN(quantiteProduit)) && (quantiteProduit > 0)) {
		
			// Arrondi supérieur afin d'éviter les problèmes de nombres décimaux
			quantiteProduit = Math.ceil(quantiteProduit);

			// Si la zone de saisie des bons cadeaux n'existe pas alors nbBonsCadeaux est initialisé à 0
			if (formSaisirNbBonsCadeaux.find('input[name=nbBonsCadeaux]').length > 0) {

				nbBonsCadeaux = formSaisirNbBonsCadeaux.find('input[name=nbBonsCadeaux]').val();
			}
			else {

				nbBonsCadeaux = 0;
			}

			// Ensuite si le nombre de bons cadeaux saisi est bien supérieur ou égal à 0
			if (!(isNaN(nbBonsCadeaux)) && (nbBonsCadeaux >= 0)) {

				// Arrondi supérieur afin d'éviter les problèmes de nombres décimaux
				nbBonsCadeaux = Math.ceil(nbBonsCadeaux);
				
				var bonneQuantiteBonsCadeaux = formSaisirNbBonsCadeaux.find('input[name=bonneQuantiteBonsCadeaux]').val();

				var soldeBonsCadeaux = $('.soldeBonsCadeaux').text();
				
				var soldeBonsCadeauxDepense = $('.soldeBonsCadeauxDepense').text();

				var prixUnitaireProduit = formSaisirQuantiteProduit.find('input[name=prixUnitaireProduit]').val();

				// On réinitialise le montant restant en soustrayant la réduction précédente
				var montantRestant = soldeBonsCadeaux - soldeBonsCadeauxDepense + (bonneQuantiteBonsCadeaux * prixUnitaireProduit);

				var prixLigneProduit = quantiteProduit * prixUnitaireProduit; 

				var montantReduction = nbBonsCadeaux * prixUnitaireProduit;
				
				// Si trop de bons cadeaux ont été saisis
				if (montantReduction > prixLigneProduit) {
				
					var bonneQuantiteProduit = formSaisirQuantiteProduit.find('input[name=bonneQuantiteProduit]').val();

					alert('Le nombre de bons cadeaux saisi pour ce produit est trop élevé.');

					formSaisirNbBonsCadeaux.find('input[name=nbBonsCadeaux]').val(bonneQuantiteBonsCadeaux);
					formSaisirQuantiteProduit.find('input[name=quantiteProduit]').val(bonneQuantiteProduit);
					
				}
				// Sinon si le montant de la réduction est trop élevé par rapport au montant restant
				else if (montantReduction > montantRestant)  {

					alert('Votre solde de bons cadeaux est insuffisant.');

					formSaisirNbBonsCadeaux.find('input[name=nbBonsCadeaux]').empty().val(bonneQuantiteBonsCadeaux);
				}
				// Sinon toutes les conditions sont remplies pour mettre à jour le panier
				else {
				
					var url = formSaisirQuantiteProduit.attr('action');

					$.getJSON(url, { quantiteProduit : quantiteProduit, nbBonsCadeaux : nbBonsCadeaux }, function(json) {

						ligneCourante.find(':nth-child(6)').empty().append(json.nouveauMontantProduit + ' €');
						
						$('.totalCommande').empty().append(json.nouveauTotal);
		
						$('.soldeBonsCadeauxDepense').text(json.soldeBonsCadeauxDepense);
						$('.soldeBonsCadeauxRestant').text(json.soldeBonsCadeauxRestant);
						
						formSaisirNbBonsCadeaux.find('input[name=bonneQuantiteBonsCadeaux]').val(nbBonsCadeaux);
						formSaisirQuantiteProduit.find('input[name=bonneQuantiteProduit]').val(quantiteProduit);
						
						var listeCadeauxPanier = creerListeCadeaux(json.listeCadeaux);
						
						var idCadeauCourant = $('#formCommentaireCommande select').val();
						
						// La nouvelle liste de cadeaux est générée avec l'ancien choix mis par défaut si il est encore disponible
						$('#formCommentaireCommande select').empty().append(listeCadeauxPanier).find('option[value=' + idCadeauCourant + ']').attr('selected', 'selected');
					
						$('#formCommentaireCommande select').trigger('change');
					});
				}
				
			}
		}
		else if (quantiteProduit != '') {
		
			var bonneQuantiteProduit = formSaisirQuantiteProduit.find('input[name=bonneQuantiteProduit]').val();
			
			alert('La quantité saisie doit être supérieure à zéro.');
			
			formSaisirQuantiteProduit.find('input[name=quantiteProduit]').val(bonneQuantiteProduit);
		}
	}
	
	$('#formCommentaireCommande select').live('change', function() {
	
		// alert('ok');
		
		var idProduitCadeau = $(this).val();

		var url = $('#formCommentaireCommande').find('input[name=URLChangerProduitCadeau]').val();

		$.post(url, {idProduitCadeau : idProduitCadeau});
	});
});
