
/************************************************************************************
**								FICHE PRODUIT										                                  *
************************************************************************************/

Event.observe(window, 'load',
              function() {
                new FicheProduit();
              });

var FicheProduit = Class.create({

	/**
	* Constructeur
	*/
	initialize: function() {
		var self = this;

		new Control.Modal('lien_callback', {
			iframe: true,
      fade: true,
      width: 445,
			height: 474,
      opacity: 0.8,
      beforeOpen: function() { hideFlash(); },
      afterClose: function() { showFlash(); }
		});
			
		// Ajout au panier
		Event.observe('btn-ajouter-ref-panier', 'click',
									function(event) {
										Panier.ajouterReferenceAuPanier(event, $('id-produit-courant').value, $('id-reference-courante').value, 1);
										return false;
									});

		// Attributs
		$$('[name="attributs_references[]"]').each(
			function(sel) {
				Event.observe(sel, 'change',
											function() {
												self.updateReference($('id-produit-courant').value, $$('[name="attributs_references[]"]'));
											});
			}
		);

		// Vignettes
		$('liste-vignettes').childElements().each(
			function(ligne) {
				var img	= ligne.select('img')[0];
				var a 	= ligne.select('a')[0];

				Event.observe(img, 'mouseover',
											function() {
												General.changerSourceImageEtLightbox('image-produit', img.src, a.href);
											});
			}
		);

		// Alerte produit
		Event.observe('alerte-texte', 'click',
									function() {
										self.ajouterAlerteProduit($('id-reference-courante').value);
									});

		Event.observe('lien-bouton-alerte', 'click',
									function() {
										self.ajouterAlerteProduit($('id-reference-courante').value);
									});

		// Note
		$('ajax_notes').select('img.actif').each(
			function(casque) {
				Event.observe(casque, 'click',
											function() {
												self.updateNote($('id-produit-courant').value, casque.alt);
											});

				Event.observe(casque, 'mouseover',
											function() {
												self.combineNotesFichesProduit(casque.alt, true);
											});

				Event.observe(casque, 'mouseout',
											function() {
												self.combineNotesFichesProduit($('moyenne-notes').value, false);
											});
			}
		);

		// Commentaires
		Event.observe('lien-lire-commentaires', 'click',
									function() {
										General.changerStyleClasse('bloc-commentaires', {'display': 'block'});
									});

		var valeurInputCommentaire = $('commentaire_captcha').value;

		Event.observe('commentaire_captcha', 'focus',
									function() {
										if (this.value == valeurInputCommentaire)
											this.value = '';
									});

		Event.observe('bouton-ajouter-commentaire', 'click',
									function() {
										self.updateAvis($('id-produit-courant').value,
																		$('commentaire_id_internaute').value,
																		$('commentaire_pseudo').value,
																		$('commentaire_email').value,
																		$('commentaire_titre').value,
																		$('commentaire_commentaire').value,
																		$('commentaire_captcha').value); 
									});

		Event.observe($('fermer-commentaires').select('a')[0], 'click',
									function() {
										General.changerStyleClasse('bloc-commentaires', {'display': 'none'}); 
									});

		// Effectues au chargement
		this.updateReference($('id-produit-courant').value, $$('[name="attributs_references[]"]'));

		this.combineNotesFichesProduit($('moyenne-notes').value, false);
	},

  /**
  * Mise a jour des infos sur la page detail d'un produit concernant une reference
  */
  updateReference: function(id_produit, params) {

    // On récupère la liste des paramètres passés à la fonction
    // On va créer la chaine post pour le traitement php

    // Chaine passée en paramètre a php
    var parametres_passes_php = 'id_produit='+id_produit+'&valeurs_attributs=';
	
    // On boucle sur l'ensemble des input / select passés a la fonction
    params.each(
      function(param) {
        parametres_passes_php += param.value + '_';
      }
    );

    // On balance la requete
    new Ajax.Request(
      'javascript/ajax/updateReference.php',
      {
        method: 'post', 
        parameters: parametres_passes_php,
        onComplete: function(transport) { 

          // On parse le JSON
          var JSON = transport.responseText.evalJSON();

          // Mauvais paramètres passés
          switch(JSON) {
            case -1:
              // Aucun valeur d'attributs envoyé
              $('alerte-produit').className	= 'cache';
              break;

            case -2:
              // Aucune référence trouvée pour cet attribut
              $('alerte-produit').className	= 'cache';
              break;

            case -3:
              $('prix-origine').update('-');
              $('prix-publique').update('-');
              $('prix-membre').update('-');
              $('prix-economie').update('0');
              $('id-reference-courante').setAttribute('value', '0');
              $('btn-ajouter-ref-panier').setStyle({'display': 'none'});
              General.changerStyleClasse('bloc-prix-origine', {'display': 'none'});
              $('pastille-produit').update('');
              $('alerte-produit').className = 'cache';
              break;

            default:
              // On récupère le code de la référence
              $('prix-origine').update(JSON.prix_origine);
              $('prix-publique').update(JSON.prix_publique);
              $('prix-membre').update(JSON.prix_membre);
              $('prix-economie').update(JSON.economie);
              $('id-reference-courante').setAttribute('value', JSON.idReferences);
              
              $('prix-credit-cetelem').update(JSON.prix_cetelem + " €");
							$('info_legales_cetelem_1').update(JSON.prix_publique + " €");
							$('info_legales_cetelem_2').update(JSON.prix_publique + " €");
							$('info_legales_cetelem_3').update(JSON.prix_cetelem + " €");
							$('info_legales_cetelem_4').update(JSON.cout_credit + " €");
							
							// $('affichage_credit_lightbox').setAttribute("href", ""+JSON.prix_publique);
							$('affichage_credit_lightbox').setAttribute("href", "templates/popup/cetelem.php?prix="+JSON.prix_publique);
														
							new Control.Modal('affichage_credit_lightbox', {
								iframe: true,
		            fade: true,
		            width: 590,
								height: 575,
		            opacity: 0.8,
                beforeOpen: function() { hideFlash(); },
                afterClose: function() { showFlash(); }
							});

              // Si le prix d'origine est egal au prix publique, on ne l'affiche pas
              $('bloc-prix-origine').className = (JSON.prix_origine == JSON.prix_publique) ? 'cache' : 'none';

              switch(JSON.id_type_promo) {
                case JSON.constante_id_promotion:
                  // Pastille d'une promo
                  $('pastille-produit').className           = 'pastille-promo';
                  $('pastille-produit').update(JSON.pourcentage + '%');
                  break;

                case JSON.constante_id_nouveaute:
                  // Pastille d'une nouveaute
                  $('pastille-produit').className           = 'pastille-nouveaute';
                  $('pastille-produit').update('');
                  break;

                case JSON.constante_id_solde:
                  // Pastille de soldes
                  $('pastille-produit').className           = 'pastille-solde';
                  $('pastille-produit').update(JSON.pourcentage + '%');
                  break;

                case JSON.constante_id_finserie:
                  // Pastille d'une fin de serie
                  $('pastille-produit').className           = 'pastille-finserie';
                  $('pastille-produit').update(JSON.pourcentage + '%');
                  break;

                case JSON.constante_id_destockage:
                  // Pastille d'un destockage
                  $('pastille-produit').className           = 'pastille-destockage';
                  $('pastille-produit').update('');
                  break;

                case JSON.constante_id_nouvelarrivage:
                  // Pastille d'un nouvel arrivage
                  $('pastille-produit').className           = 'pastille-nouvelarrivage';
                  $('pastille-produit').update(JSON.pourcentage + '%');
                  break;

                case JSON.constante_id_arrivagemassif:
                  // Pastille d'un arrivage massif
                  $('pastille-produit').className           = 'pastille-arrivagemassif';
                  $('pastille-produit').update('');
                  break;

                case JSON.constante_id_exclu:
                  // Pastille d'une exclu
                  $('pastille-produit').className           = 'pastille-exclu';
                  $('pastille-produit').update(JSON.pourcentage + '%');
                  break;

                case JSON.constante_id_serielimitee:
                  // Pastille d'une serie limitee
                  $('pastille-produit').className           = 'pastille-serielimitee';
                  $('pastille-produit').update(JSON.pourcentage + '%');
                  break;

                case '5':
                  // Pastille d'un produit soldé 
                  $('pastille-produit').className           = 'pastille-solde';
                  $('pastille-produit').update(JSON.pourcentage + '%');
                  break;

                default:
                  // Pas de pastille (on vide aussi le texte)
                  $('pastille-produit').className           = 'pastille-vide';
                  $('pastille-produit').update('');
                  break;
              }

              // Affichage different en fonction de s'il y a du stock ou non
              if (JSON.stock == 0) {

                $('btn-ajouter-ref-panier').setStyle({'display': 'none'});
                $('info-produit').setStyle({'display': 'block'});

                // On affiche le lien pour poser une alerte, s'il n'y a pas de fin de serie
                $('alerte-produit').className	            = (JSON.fin_de_serie == '0') ? '' : 'cache';
  
              } else {
  
                $('info-produit').setStyle({'display': 'none'});
                $('btn-ajouter-ref-panier').setStyle({'display': 'inline'});
  
                // On cache le lien pour poser une alerte
                $('alerte-produit').className	= 'cache';
  
              }
              break;
          }
        }
      }
    );
  },
  
  /**
  * Poste d'un avis et mise a jour de l'affichage
  */
  updateAvis: function(id_produit, id_internaute, pseudo, email, titre, avis, captcha) {
		// On effectue l'appel ajax
    new Ajax.Request(
			'javascript/ajax/updateAvis.php',
			{
				method: 'post', 
				parameters: 'id_produit=' + id_produit + '&id_internaute=' + id_internaute + '&pseudo=' + pseudo + '&email=' + email + '&titre=' + titre + '&avis=' + avis + '&captcha=' + captcha,
				onComplete: function(transport) { 

					var retour = parseInt(transport.responseText);

					switch(retour) {
            case 1:
              // Operation OK.
              $('message_avis').update("Votre avis a été pris en compte.");

              // Vidage des champs
              $('commentaire_pseudo').value				= "";
              $('commentaire_email').value				= "";
              $('commentaire_titre').value				= "";
              $('commentaire_commentaire').value	= "";
              $('commentaire_captcha').value			= "";
              break;

            case -3:
              // Internaute n'a pas saisie de pseudo
              $('message_avis').update("Merci de saisir votre pseudo.");
              break;

					  case -4:
              // L'internaute n'a pas saisie d'avis
              $('message_avis').update("Merci de saisir un commentaire.");
              break;
  
            case -1:
              // L'internaute n'a pas saisi d'avis
              $('message_avis').update("Merci de saisir les caractères de l'image ci-dessous.");
              break;
            
            default:
              // Operation NOK
              break;
					}
				}
			}
		);
  },
  
  /**
  * Poste d'une note et mise a jour de l'affichage
  */
  updateNote: function(id_produit, note){
		var self = this;

    // Appel ajax
    new Ajax.Request(
			'javascript/ajax/updateNote.php',
			{
				method:'post',
				parameters:'id_produit=' + id_produit + '&note=' + note,
				onComplete: function(transport) {

					var retour = parseInt(transport.responseText);

					// Opération OK
					if (retour > 0) {
						// On désactive la mise à jour des notes
						$("ajax_notes").update('<img id="casque_1" src="images/notation/casque-vide.gif" /><img id="casque_2" src="images/notation/casque-vide.gif" /><img id="casque_3" src="images/notation/casque-vide.gif" /><img id="casque_4" src="images/notation/casque-vide.gif" /><img id="casque_5" src="images/notation/casque-vide.gif" />');

						// On met la bonne note
						self.combineNotesFichesProduit(retour, false);

					} else if (retour == -1) {
						// L'internaute n'est pas loggué
						$("message_notes").update("Merci de vous connecter pour pouvoir donner une note.");

          } else {
						// Opération NOK
					}
				}
			}		
		);
  },

  /**
  * Methode qui fixe la note visuellement en affichant les casques pleins
  */
  combineNotesFichesProduit: function(note, rollover){
    // On définit l'image par defaut
    var src1 = src2 = src3 = src4 = src5 = 'images/notation/casque-vide.gif';

    if (note >= 0 && note < 0.5) {

    } else if (note >= 0.5 && note < 1) {
      src1 = 'images/notation/casque-mi.gif';

    } else if (note >= 1 && note < 1.5) {
       src1 = (rollover) ? 'images/notation/casque-rollover.gif' : 'images/notation/casque-plein.gif';

    } else if (note >= 1.5 && note < 2) {
      src1 = "images/notation/casque-plein.gif";
      src2 = "images/notation/casque-mi.gif";

    } else if (note >= 2 && note < 2.5) {
      src1 = src2 = (rollover) ? 'images/notation/casque-rollover.gif' : 'images/notation/casque-plein.gif';

    } else if (note >= 2.5 && note < 3) {
      src1 = src2 = "images/notation/casque-plein.gif";
      src3 = "images/notation/casque-mi.gif";

  	} else if (note >= 3 && note < 3.5) {
      src1 = src2 = src3 = (rollover) ? 'images/notation/casque-rollover.gif' : 'images/notation/casque-plein.gif';

    } else if (note >= 3.5 && note < 4) {
      src1 = src2 = src3 = "images/notation/casque-plein.gif";
      src4 = "images/notation/casque-mi.gif";

  	} else if (note >= 4 && note < 4.5) {
			src1 = src2 = src3 = src4 = (rollover) ? 'images/notation/casque-rollover.gif' : 'images/notation/casque-plein.gif';

    } else if (note >= 4.5 && note < 5) {
      src1 = src2 = src3 = src4 = "images/notation/casque-plein.gif";
      src5 = "images/notation/casque-mi.gif";

  	} else if (note >= 5) {
			src1 = src2 = src3 = src4 = src5 = (rollover) ? 'images/notation/casque-rollover.gif' : 'images/notation/casque-plein.gif';
    }

    $("casque_1").setAttribute("src", src1);
    $("casque_2").setAttribute("src", src2);
    $("casque_3").setAttribute("src", src3);
    $("casque_4").setAttribute("src", src4);
    $("casque_5").setAttribute("src", src5);
  },
  
  /**
  * Ajoute une alerte sur une reference
  */
  ajouterAlerteProduit: function(id_reference) {
    // Appel ajax
    new Ajax.Request(
			'javascript/ajax/ajouterAlerteProduit.php',
			{
				method: 'post', 
				parameters: 'id_reference=' + id_reference,
				onComplete: function(transport) {
					
					// On parse le JSON
					var JSON = transport.responseText.toJSON();

					switch(JSON) {
            case -1:
              // Erreur : l'internaute n'est pas loggue
              alert('Veuillez vous connecter pour pouvoir poser une alerte.');
              break;

            case -2:
              // Erreur : impossible de poser une alerte pour ce produit
              alert('Impossible de poser une alerte.');
              break;
    
            default:
              // Traitement Ok
              alert('L\'alerte a été ajoutée.');
              break;
					}
				}
			}
		);
  }
});
