﻿//Enregistrement du namespace
Type.registerNamespace("Pages");

//Constructeur
Pages.Produit = function () {
    Pages.Produit.initializeBase(this);

    this.VisuelProduit = null;
    this.ZoomVisuelProduit = null;
    this.SelecteurProduit = null;
    this.BazaarVoice = null;
    this.Partage = null;
    this.Finaref = null;
    this.InfoProduitPrincipale = null;

    this.MiniFiche = null;
    this.MiniFicheFinaref = null;
    this.MiniFichePartage = null;
    this.MiniFicheVisuelProduit = null;
    this.MiniFicheZoomVisuelProduit = null;
    this.MiniFicheSelecteurProduit = null;
    this.MiniFicheInfoProduitPrincipale = null;

    this.AjoutPanier = null;
    this.ProduitsAssocies = null;
    this.ApercuPanier = null;
    this.Omniture = null;

    this.RappelPageListe = null;

    this.isMiniFicheEventInitialized = null;
    this.isZoomInitialized = null;

};

//Définition du prototype de la classe client
Pages.Produit.prototype = {
    DocumentReady: function () {

        // Ceci permet d'éviter de ré-initialiser les évènements de la page produit
        // lors de l'affichage d'un composant Ajax via les web services
        if (!this._isFirstLoad) return;

        if (this.ApercuPanier != null) {
            this.ApercuPanier = $find(this._listeComposants.ApercuPanier);
        }

        this.VisuelProduit = $find(this._listeComposants.VisuelProduit);
        this.ZoomVisuelProduit = $find(this._listeComposants.VisuelProduit_DivZoom);
        if (this.VisuelProduit != null) {
            this.VisuelProduit.ClickDivZoom(Function.createDelegate(this, this.DivZoomClicked));
        }
        if (this.ZoomVisuelProduit != null) {
            this.ZoomVisuelProduit.set_IdVisuelProduit(this._listeComposants.VisuelProduit);
            this.ZoomVisuelProduit.SelectVignetteEnCours();
        }

        this.MiniFiche = $find(this._listeComposants.MiniFiche);

        this.SelecteurProduit = $find(this._listeComposants.SelecteurProduit);
        if (this.SelecteurProduit != null) {
            this.SelecteurProduit.MouseInPastilleColoris(Function.createDelegate(this, this.MouseInPastilleColoris));
            this.SelecteurProduit.MouseOutPastilleColoris(Function.createDelegate(this, this.MouseOutPastilleColoris));
            this.SelecteurProduit.ColorisSelected(Function.createDelegate(this, this.ColorisSelected));
            this.SelecteurProduit.TailleSelected(Function.createDelegate(this, this.TailleSelected));
        }

        this.Finaref = $find(this._listeComposants.InfoProduitPrincipale_Finaref);
        this.InfoProduitPrincipale = $find(this._listeComposants.InfoProduitPrincipale);

        this.BazaarVoice = $find(this._listeComposants.BazaarVoice);

        this.Partage = $find(this._listeComposants.Partage);
        if (this.Partage != null) {
            this.Partage.SetBVOverlay();
            this.Partage.ClickNote(Function.createDelegate(this, this.PartageNoteClicked));
        }

        if (this.BazaarVoice != null) {
            // event declenché si BazaarVoice possède au moins un avis
            this.BazaarVoice.InfoEnteteReady(Function.createDelegate(this, this.SetInfosPartage));
            // event declenché si BazaarVoice ne possède aucun avis
            this.BazaarVoice.BazaarVoice_Empty(Function.createDelegate(this, this.SetInfosPartageVide));
        }

        this.AjoutPanier = $find(this._listeComposants.AjoutPanier);
        if (this.AjoutPanier != null && this.SelecteurProduit != null) {
            this.SelecteurProduit.AjoutPanier(Function.createDelegate(this, this.AjoutPanierClicked));
        }
        this.ProduitsAssocies = $find(this._listeComposants.ProduitsAssocies);
        if (this.ProduitsAssocies != null) {
            this.ProduitsAssocies.ClickProduitAssocie(Function.createDelegate(this, this.ProduitsAssociesClicked));
        }

        // On récupère les données du rappel page liste de façon asynchrone si le composant est actif
        if (this._listeComposants.RappelPageListe != null) {
            this.RappelPageListe = $find(this._listeComposants.RappelPageListe);
            this.LoadRappelPageListe();
        }

        if (this._listeComposants.Omniture != null) {
            this.Omniture = $find(this._listeComposants.Omniture);
        }

        this.isMiniFicheEventInitialized = false;
        this.isZoomInitialized = false;
    },
    GetUrlWebService: function (evtArgs) {
        // le code langue est une variable globale du site
        if (typeof (urlCodeLangue) != 'undefined' && urlCodeLangue != undefined && urlCodeLangue != null && urlCodeLangue != "") {
            return "../../" + urlCodeLangue + "/AjaxServices/DataFicheProduit.svc";
        }
        else {
            return "../../AjaxServices/DataFicheProduit.svc";
        }
    },
    PartageNoteClicked: function (evtArgs) {
        if (evtArgs == null) return;

        if (this.Omniture != null) {
            this.Omniture.FicheProduitClickBazarVoice();
        }
    },
    DivZoomClicked: function (evtArgs) {
        if (evtArgs == null) return;
        if (this.ZoomVisuelProduit == null) return;
        if (this.VisuelProduit == null) return;

        if (this.isZoomInitialized) {
            this.ZoomVisuelProduit.SelectVignetteEnCours();
            this.ZoomVisuelProduit.DisplayOverlay();
            return;
        }

        var params = new Object();
        params.idControlZoom = this.ZoomVisuelProduit._element.id;
        params.dataSource = this.VisuelProduit.get_ZoomDataSource();
        params.currentUrl = window.location.href;
        this.ajax(this.GetUrlWebService() + "/VisuelsZoomProduitJson", Function.createDelegate(this, this.DivZoomSuccess), params);
        if (this.Omniture != null) {
            this.Omniture.FicheProduitClickZoom();
        }
    },
    DivZoomSuccess: function (data) {

        if (data == null) return;

        if (this.ZoomVisuelProduit == null) return;

        var result = data.VisuelsZoomProduitJsonResult;
        if (result == null) return;

        if (result.VisuelsZoomProduit != null) this.ZoomVisuelProduit.AddHtml(result.VisuelsZoomProduit);

        this.ZoomVisuelProduit.set_IdVisuelProduit(this._listeComposants.VisuelProduit);
        this.ZoomVisuelProduit.SelectVignetteEnCours();

        this.isZoomInitialized = true;
    },
    LoadRappelPageListe: function () {

        if (this.RappelPageListe == null) return;

        var sousSecteur = $('#memo_fil_ariane a:last');

        if (sousSecteur != null) {
            var params = new Object();
            params.idControlRappelPageList = this.RappelPageListe._element.id;
            params.sousSecteurUrl = window.location.protocol + '//' + window.location.host + sousSecteur.attr('href');
            params.urlRelative = sousSecteur.attr('href');
            this.ajax(this.GetUrlWebService() + "/RappelPageListeJson", Function.createDelegate(this, this.RappelPageListeSuccess), params, false, Function.createDelegate(this, this.RappelPageListeError));
        }

    },
    RappelPageListeError: function () {
        if (this.RappelPageListe == null) return;

        $('#' + this.RappelPageListe._element.id).css({ visibility: 'hidden', height: '0px' });
    },
    RappelPageListeSuccess: function (data) {

        if (data == null) return;

        var result = data.RappelPageListeJsonResult;
        if (result == null) return;

        // Si il n'y a qu'un article en rappel page liste, on le masque
        if (result.NombreArticle <= 1) {
            $('#' + this.RappelPageListe._element.id).css({ visibility: 'hidden', height: '0px' });
            return;
        }

        if (result.RappelPageListe != null) this.RappelPageListe.AddHtml(result.RappelPageListe);
    },
    ProduitsAssociesClicked: function (evtArgs) {
        var params = new Object();
        params.cookies = this.GetCookies();
        params.pageProduitUrl = window.location.protocol + '//' + window.location.host + '/' + evtArgs.href;
        params.idControlMiniFiche = this.MiniFiche._element.id;
        if (this.Omniture != null) {
            params.idControlOmniture = this.Omniture._element.id;
        }
        else {
            params.idControlOmniture = null;
        }
        this.ajax(this.GetUrlWebService() + "/MiniFicheJson", Function.createDelegate(this, this.ProduitsAssociesSuccess), params);
    },
    ProduitsAssociesSuccess: function (data) {

        if (data == null) return;

        var result = data.MiniFicheJsonResult;
        if (result == null || result.IsErreur) return;

        if (result.MiniFiche != null) this.MiniFiche.AddHtml(result.MiniFiche);

        // Sauvegarde l'url de la mini fiche
        if (result.MiniFicheUrl != null && result.MiniFicheUrl != '') {
            this.MiniFiche.set_MiniFicheUrl(result.MiniFicheUrl);
        }

        this.MiniFicheFinaref = $find(this._listeComposants.MiniFiche_InfoProduitPrincipale_Finaref);
        this.MiniFicheInfoProduitPrincipale = $find(this._listeComposants.MiniFiche_InfoProduitPrincipale);
        this.MiniFicheSelecteurProduit = $find(this._listeComposants.MiniFiche_SelecteurProduit);
        this.MiniFichePartage = $find(this._listeComposants.MiniFiche_Partage);
        this.MiniFicheVisuelProduit = $find(this._listeComposants.MiniFiche_VisuelProduit);
        this.MiniFicheZoomVisuelProduit = $find(this._listeComposants.MiniFiche_VisuelProduit_DivZoom);
        this.MiniFicheZoomVisuelProduit.set_IdVisuelProduitMiniFiche(this._listeComposants.MiniFiche_VisuelProduit);

        if (this.MiniFicheSelecteurProduit != null && this.isMiniFicheEventInitialized == false) {
            this.MiniFicheSelecteurProduit.MouseInPastilleColoris(Function.createDelegate(this, this.MiniFicheMouseInPastilleColoris));
            this.MiniFicheSelecteurProduit.MouseOutPastilleColoris(Function.createDelegate(this, this.MiniFicheMouseOutPastilleColoris));
            this.MiniFicheSelecteurProduit.ColorisSelected(Function.createDelegate(this, this.MiniFicheColorisSelected));
            this.MiniFicheSelecteurProduit.TailleSelected(Function.createDelegate(this, this.MiniFicheTailleSelected));
        }

        if (this.MiniFichePartage != null) {
            this.MiniFichePartage.SetBVOverlay();
            this.MiniFichePartage.ClickNote(Function.createDelegate(this, this.PartageNoteMiniFicheClicked));
        }

        //BazaarVoice pour la MiniFicheproduit
        this.InitPartageMiniFiche();

        if (this.MiniFicheSelecteurProduit != null && this.isMiniFicheEventInitialized == false) {
            this.MiniFicheSelecteurProduit.AjoutPanier(Function.createDelegate(this, this.AjoutPanierMiniFicheClicked));
        }
        if (this.MiniFicheVisuelProduit != null && this.isMiniFicheEventInitialized == false) {
            this.MiniFicheVisuelProduit.ClickDivZoom(Function.createDelegate(this, this.DivZoomMiniFicheClicked));
        }

        if (result.Omniture != null && this.Omniture != null) {
            this.Omniture.AddHtml(result.Omniture);
        }

        this.isMiniFicheEventInitialized = true;
    },
    PartageNoteMiniFicheClicked: function (evtArgs) {
        if (evtArgs == null) return;

        if (this.Omniture != null) {
            this.Omniture.MiniFicheProduitClickBazarVoice();
        }
    },
    InitPartageMiniFiche: function () {

        if (this.ProduitsAssocies == null) return;

        if (this.MiniFicheSelecteurProduit == null) return;

        var infosProduitsAssocies = this.ProduitsAssocies.get_InfoProduitAssocies();
        var classmod = this.MiniFicheSelecteurProduit.GetClassMod();

        if (classmod == null) return;
        var classemodele = classmod.Classe + classmod.Modele;
        var urlbzv = null;

        jQuery.each(infosProduitsAssocies, function () {
            if (this.ProductId == classemodele) {
                urlbzv = this.UrlBazaarVoice;
            }
        });

        if (this.BazaarVoice != null) {
            var url = this.BazaarVoice.get_HandlerBzvUrl() + '?url=' + urlbzv;
        }

        if (urlbzv != null && this.Partage != null) {
            this.Partage.LoadAndParseReviewsMini(url, this.MiniFichePartage._IdNoteAvis, this.MiniFichePartage._IdImgNote, this.MiniFichePartage._element.id, this.MiniFichePartage.get_IdLinkOverlay());
        }
    },
    // Lors du clic sur le div 
    // qui lance le zoom de la mini fiche
    DivZoomMiniFicheClicked: function (evtArgs) {
        if (evtArgs == null) return;

        if (this.MiniFicheZoomVisuelProduit == null) return;

        if (this.MiniFicheVisuelProduit == null) return;

        var params = new Object();
        params.idControlZoom = this.MiniFicheZoomVisuelProduit._element.id;
        params.dataSource = this.MiniFicheVisuelProduit.get_ZoomDataSource();
        params.currentUrl = window.location.href;
        this.ajax(this.GetUrlWebService() + "/VisuelsZoomProduitJson", Function.createDelegate(this, this.DivZoomMiniFicheSuccess), params);

        if (this.Omniture != null) {
            this.Omniture.MiniFicheProduitClickZoom();
        }
    },
    DivZoomMiniFicheSuccess: function (data) {

        if (data == null) return;

        var result = data.VisuelsZoomProduitJsonResult;
        if (result == null) return;

        if (result.VisuelsZoomProduit != null) this.MiniFicheZoomVisuelProduit.AddHtml(result.VisuelsZoomProduit);

        this.MiniFicheZoomVisuelProduit.set_IdVisuelProduitMiniFiche(this._listeComposants.MiniFiche_VisuelProduit);
        this.MiniFicheZoomVisuelProduit.SelectVignetteEnCours();

    },
    AjoutPanierMiniFicheClicked: function (evtArgs) {
        var information = this.MiniFicheSelecteurProduit.GetInformation();

        if (information == null) return;

        if (this.MiniFiche == null) return;

        var params = new Object();
        params.cookies = this.GetCookies();
        params.ajoutPaniers = new Array();
        params.ajoutPaniers[0] = information;
        params.idControlPanier = this.AjoutPanier._element.id;
        if (this.ApercuPanier != null) {
            params.idControlApercuPanier = this.ApercuPanier._element.id;
        }
        else {
            params.idControlApercuPanier = "";
        }
        if (this.Omniture != null) {
            params.idControlOmniture = this.Omniture._element.id;
        }
        else {
            params.idControlOmniture = "";
        }
        params.isMiniFiche = true;
        var miniFicheUrl = this.MiniFiche.get_MiniFicheUrl();
        if (miniFicheUrl != null && miniFicheUrl != '') {
            params.pageProduitUrl = miniFicheUrl;
        }
        else {
            params.pageProduitUrl = window.location.href;
        }
        params.isMultiProduit = false;

        this.ajax(this.GetUrlWebService() + "/AjoutPanierJson", Function.createDelegate(this, this.AjoutPanierSuccess), params);
    },
    AjoutPanierClicked: function (evtArgs) {
        var information = this.SelecteurProduit.GetInformation();

        if (information == null) return;

        var params = new Object();
        params.cookies = this.GetCookies();
        params.ajoutPaniers = new Array();
        params.ajoutPaniers[0] = information;
        params.idControlPanier = this.AjoutPanier._element.id;
        if (this.ApercuPanier != null) {
            params.idControlApercuPanier = this.ApercuPanier._element.id;
        }
        else {
            params.idControlApercuPanier = "";
        }
        if (this.Omniture != null) {
            params.idControlOmniture = this.Omniture._element.id;
        }
        else {
            params.idControlOmniture = "";
        }
        params.isMiniFiche = false;
        params.pageProduitUrl = window.location.href;
        params.isMultiProduit = false;

        this.ajax(this.GetUrlWebService() + "/AjoutPanierJson", Function.createDelegate(this, this.AjoutPanierSuccess), params);
    },
    AjoutPanierSuccess: function (data) {

        if (data == null) return;

        var result = data.AjoutPanierJsonResult;
        if (result == null) return;

        if (result.AjoutPanier != null) this.AjoutPanier.AddHtml(result.AjoutPanier);

        if (result.IsApercuPanierRollOverActif == true) {
            if (this.ApercuPanier != null) {
                // Mise à jour de l'apercu panier
                if (result.ApercuPanier != null) this.ApercuPanier.AddHtml(result.ApercuPanier);
            }
            // Gestion du cookie aperçu panier
            this.CreateCookie(result.ApercuPanierNombreArticleCookie, result.ApercuPanierNombreArticle, result.NombreJourCookiePanier);
        }

        if (result.Omniture != null && this.Omniture != null) {
            this.Omniture.AddHtml(result.Omniture);
        }
    },
    TailleSelected: function (evtArgs) {
        if (evtArgs == null) return;

        if (this.Finaref != null) {
            this.Finaref.SetInfoFinaref(evtArgs.finaref);
        }
        if (this.InfoProduitPrincipale != null) {
            this.InfoProduitPrincipale.SetPrix(evtArgs.produitTaille);
        }
    },
    ColorisSelected: function (evtArgs) {
        if (evtArgs == null) return;

        if (this.VisuelProduit != null) {
            this.VisuelProduit.SetImageColoris(evtArgs.urlimage);
        }
        if (this.InfoProduitPrincipale != null) {
            this.InfoProduitPrincipale.SetPrix(evtArgs.produitTaille);
            //début meca promo
            this.InfoProduitPrincipale.DisplayPictoMecaPromo(evtArgs.produitTaille);
            //fin meca promo
        }
    },
    MouseInPastilleColoris: function (evtArgs) {
        if (this.VisuelProduit != null) {
            this.VisuelProduit.SetImage(evtArgs.urlimage);
        }
    },
    MouseOutPastilleColoris: function () {
        if (this.VisuelProduit != null) {
            this.VisuelProduit.ResetImage();
        }
    },
    SetInfosPartage: function (EventArgs) {

        if (EventArgs == null) return;

        var url = EventArgs.url;
        var note = EventArgs.note;
        if (this.Partage != null) {
            this.Partage.SetDataBzV(url, note);
        }
    },
    // partage vide
    SetInfosPartageVide: function (EventArgs) {
        if (this.Partage != null) {
            this.Partage.SetDataBzVEmpty();
        }
    },
    MiniFicheTailleSelected: function (evtArgs) {
        if (this.MiniFicheFinaref != null) {
            this.MiniFicheFinaref.SetInfoFinaref(evtArgs.finaref);
        }
        if (this.MiniFicheInfoProduitPrincipale != null) {
            this.MiniFicheInfoProduitPrincipale.SetPrix(evtArgs.produitTaille);
        }
    },
    MiniFicheColorisSelected: function (evtArgs) {
        if (this.MiniFicheVisuelProduit != null) this.MiniFicheVisuelProduit.SetImageColoris(evtArgs.urlimage);
        if (this.MiniFicheInfoProduitPrincipale != null) this.MiniFicheInfoProduitPrincipale.SetPrix(evtArgs.produitTaille);
    },
    MiniFicheMouseInPastilleColoris: function (evtArgs) {
        if (this.MiniFicheVisuelProduit != null) this.MiniFicheVisuelProduit.SetImage(evtArgs.urlimage);
    },
    MiniFicheMouseOutPastilleColoris: function () {
        if (this.MiniFicheVisuelProduit != null) this.MiniFicheVisuelProduit.ResetImage();
    },
    MiniFicheSetInfosPartage: function (EventArgs) {

        if (EventArgs == null) return;

        var url = EventArgs.url;
        var note = EventArgs.note;
        this.MiniFichePartage.SetDataBzV(url, note);
    }
};

//Enregistrement de la classe avec Pages.PageBase comme classe mère
Pages.Produit.registerClass("Pages.Produit", Pages.PageBase);

//Instanciation d'un objet représentant la page en cours
var Page = new Pages.Produit();
//Affectation de la liste des composants enfant
Page.set_ListeComposants(registeredComponents);   

