﻿Type.registerNamespace("Res.Commerce.Web.Composants.FicheProduit.V01");
Res.Commerce.Web.Composants.FicheProduit.V01.BazaarVoice = function (element) {
    Res.Commerce.Web.Composants.FicheProduit.V01.BazaarVoice.initializeBase(this, [element]);
    this.call = null;
    this.Note = null;
    this.UrlPic = null;
    this._reviews = null
};
Res.Commerce.Web.Composants.FicheProduit.V01.BazaarVoice.prototype = {
    initialize: function () {
        Res.Commerce.Web.Composants.FicheProduit.V01.BazaarVoice.callBaseMethod(this, "initialize");

        this.call = Function.createDelegate(this, this.pushTemplate);
        this.initBV();
        this.DataInit();

    },

    dispose: function () {
        Res.Commerce.Web.Composants.FicheProduit.V01.BazaarVoice.callBaseMethod(this, "dispose");
    },
    saveClientState: function () {
        return null;
    },

    initBV: function (ev) {
        $('<script type="text/html" id="review_template"><table id="memo_fp_avis_table"><thead><tr><th id="memo_fp_avis_th_avis">' + this.get_ResAvisGeneral() + '</th><th id="memo_fp_avis_th_note" class="">' + this.get_ResTriParNote() + '</th><th id="memo_fp_avis_th_date" class="">' + this.get_ResTriParDate() + '</th></tr></thead><tbody><% if(reviews != undefined && reviews != null) { for ( var i = 0; i < reviews.length; i++ ){review = reviews[i];%><tr><td><p><span class="memo_fp_avis_username"><%= review.pseudo %></span><span class="memo_fp_avis_date"> <%= print_date_for_review(review.date) %></span><span class="memo_fp_avis_rating"><img src="<%= review.rating %>" alt="<%= review.alt %>" /></span></p><p><%= review.text %></p></td><td class="memo_fp_avis_td_note"><%= review.rating %></td><td class="memo_fp_avis_td_date"><%= review.date.getTime() %></td></tr><% }} %></tbody></table><p><a target="_blank" href="' + this.get_UrlBazaarVoice() + '" class="memo_fp_lire_tous_les_avis">> ' + this.get_ResLireTousLesAvis() + '</a></p></script>').appendTo('#' + this._element.id);
    },

    DataInit: function () {
        var url = this.get_HandlerBzvUrl() + '?url=' + this.get_UrlBazaarVoice();
        this.load_and_parse_reviews(url);
    },

    load_and_parse_reviews: function (url) {
        $.get(url, this.call);
    },

    pushTemplate: function (data) {
        var control = this;
        var html_reviews = $(data).find(".BVRRReviewDisplayStyle3");
        var reviews = [];
        if (html_reviews.length != 0) {
            this.set_infosEntete(data);
            html_reviews.each(function (i, el) {
                var $el = $(el);
                $el.find(".dtreviewed span").remove();
                reviews.push({
                    pseudo: $el.find(".reviewer").html(),
                    rating: $el.find(".BVRRRatingNormalImage img").attr('src'),
                    alt: $el.find(".BVRRRatingNormalImage img").attr('alt'),
                    date: control.parse_date($el.find(".dtreviewed").html()),
                    text: $el.find(".BVRRReviewText").html()
                });
            });
            this._reviews = reviews;

            this.SetupControl();

            this.SetupOverlay();
        }
        else {
            //bzv inactif
            $('#' + this._element.id).css('display', 'none');
            $('#' + this._element.id).trigger('BazaarVoice_Empty');
            $('.memo_fp_c_est_joli_avec').attr('class', 'memo_fp_c_est_joli_avec memo_fp_silhouette_centrer');
        }

        if ($(".memo_fp_avis_general_recommandations").length) {
            $(".memo_fp_avis_general_recommandations").clone().appendTo(".memo_fp_partager");
        }
    },

    SetupOverlay: function () {
        if (this._reviews != undefined && this._reviews != null) {
            var overlaySelect = "#memo_fp_overlay_avis .contentWrap";
            $(overlaySelect).append(tmpl("review_template", { reviews: this._reviews }));
            this.set_datatables(overlaySelect);
            $("#memo_fp_overlay_avis th").attr('style', '');
        }
    },

    SetupControl: function () {
        if (this._reviews != undefined && this._reviews != null) {
            var id = '#' + this._element.id;
            $(id).append(tmpl("review_template", { reviews: this._reviews }));
            this.set_datatables(id);
        }
    },

    InfoEnteteReady: function (func) {
        $('#' + this._element.id).live("set_infosOK", func);
    },

    BazaarVoice_Empty: function (func) {
        $('#' + this._element.id).live("BazaarVoice_Empty", func);
    },

    set_infosEntete: function (_sdata) {
        var SrcPicAvis = $(_sdata).find('#BVRRSReviewsSummaryRatingImageID img').attr('src').toString().replace('Large', '');
        var altPicAvis = $(_sdata).find('.BVRRNumber').html();
        var NbAvis = $(_sdata).find('.count').html(); //.count
        var recommandation = $(_sdata).find('.BVRRBuyAgainContainer').html();

        this.set_UrlPic(SrcPicAvis);
        this.set_Note(altPicAvis);

        $('<h2 id="memo_fp_title_vous_en_parlez" class="memo_fp_title"><span>' + this.get_ResTitre() + '</span></h2>').appendTo('#' + this._element.id);
        $('<hr />').appendTo('#' + this._element.id);
        $('<p class="memo_fp_avis_general"><span >' + this.get_ResAvisGeneral() + '</span> <span class="memo_fp_note">' + altPicAvis + '</span><img src="' + SrcPicAvis + '" alt="' + altPicAvis + '" />| <span>' + NbAvis + '</span> ' + this.get_ResCommentaires() + '</p>').appendTo('#' + this._element.id);

        //Alimentation du Composant partage
        $('#Partage_LinkOverlay').css('display', 'block');
        $("<p class=\"memo_fp_avis_general_recommandations\">" + recommandation + "</p>").appendTo('#' + this._element.id);

        var event = jQuery.Event("set_infosOK");
        event.url = this.get_UrlPic().toString();
        event.note = this.get_Note().toString();
        $('#' + this._element.id).trigger(event);
    },


    set_datatables: function (id) {
        $(id).find("#memo_fp_avis_table").dataTable({
            "bDestroy": true,
            "aaSorting": [[1, 'desc'], [2, 'desc']],
            "bFilter": false,
            "bLengthChange": false,
            "iDisplayLength": 4,
            "sPaginationType": "full_numbers",
            "oLanguage": {
                "sProcessing": "Traitement en cours...",
                "sLengthMenu": "Afficher _MENU_ éléments",
                "sZeroRecords": "Aucun élément à afficher",
                "sInfo": "",
                "sInfoEmpty": "",
                "sInfoFiltered": "(filtré de _MAX_ éléments au total)",
                "sInfoPostFix": "",
                "sSearch": "Rechercher :",
                "sUrl": "",
                "oPaginate": {
                    "sFirst": "Premier",
                    "sPrevious": this.get_ResPrecedent(),
                    "sNext": this.get_ResSuivant(),
                    "sLast": "Dernier"
                }
            }
        });
    },

    parse_date: function (d) {
        var d1 = d.split(" ");
        var datum = d1;

        if (d1.length > 2) {
            datum = new Date(d1[2], this.get_month_from_string(d1[1]), d1[0]);
        }
        else {
            var year = d.substring(d.length, d.length - 2);
            var year2 = '20' + year;
            var d2 = d.replace(d.substring(d.length, d.length - 2), year2).split("/");

            datum = new Date(year2, parseInt(d2[1]) - 1, d2[0]);
        }

        return datum;
    },

    get_month_from_string: function (month) {
        var lstMois = this.get_ResMois();

        switch (month.toLowerCase()) {
            case lstMois[0].toString():
                return 0;
            case lstMois[1].toString():
                return 1;
            case lstMois[2].toString():
                return 2;
            case lstMois[3].toString():
                return 3;
            case lstMois[4].toString():
                return 4;
            case lstMois[5].toString():
                return 5;
            case lstMois[6].toString():
                return 6;
            case lstMois[7].toString():
                return 7;
            case lstMois[8].toString():
                return 8;
            case lstMois[9].toString():
                return 9;
            case lstMois[10].toString():
                return 10;
            case lstMois[11].toString():
                return 11;
        }
    },

    ////////////////////////////////////////////////////////

    get_HandlerBzvUrl: function () {
        return this.HandlerBzvUrl;
    },
    set_HandlerBzvUrl: function (value) {
        this.HandlerBzvUrl = value;
    },

    get_UrlBazaarVoice: function () {
        return this.UrlBazaarVoice;
    },
    set_UrlBazaarVoice: function (value) {
        this.UrlBazaarVoice = value;
    },

    get_ResMois: function () {
        return this.ResMois;
    },
    set_ResMois: function (value) {
        this.ResMois = value;
    },

    get_ResAvisGeneral: function () {
        return this.ResAvisGeneral;
    },
    set_ResAvisGeneral: function (value) {
        this.ResAvisGeneral = value;
    },

    get_ResCommentaires: function () {
        return this._ResCommentaires;
    },
    set_ResCommentaires: function (value) {
        this._ResCommentaires = value;
    },

    get_ResLireTousLesAvis: function () {
        return this._ResLireTousLesAvis;
    },
    set_ResLireTousLesAvis: function (value) {
        this._ResLireTousLesAvis = value;
    },

    get_ResNote: function () {
        return this._ResNote;
    },
    set_ResNote: function (value) {
        this._ResNote = value;
    },

    get_ResPrecedent: function () {
        return this._ResPrecedent;
    },
    set_ResPrecedent: function (value) {
        this._ResPrecedent = value;
    },

    get_ResSuivant: function () {
        return this._ResSuivant;
    },
    set_ResSuivant: function (value) {
        this._ResSuivant = value;
    },

    get_ResTitre: function () {
        return this._ResTitre;
    },
    set_ResTitre: function (value) {
        this._ResTitre = value;
    },

    get_ResTriParDate: function () {
        return this.ResTriParDate;
    },
    set_ResTriParDate: function (value) {
        this.ResTriParDate = value;
    },

    get_ResTriParNote: function () {
        return this.ResTriParNote;
    },
    set_ResTriParNote: function (value) {
        this.ResTriParNote = value;
    },

    get_Note: function () {
        return this.Note;
    },
    set_Note: function (value) {
        this.Note = value;
    },

    get_UrlPic: function () {
        return this.UrlPic;
    },
    set_UrlPic: function (value) {
        this.UrlPic = value;
    }

};
Res.Commerce.Web.Composants.FicheProduit.V01.BazaarVoice.registerClass("Res.Commerce.Web.Composants.FicheProduit.V01.BazaarVoice", Res.Commerce.Web.Composants.ScriptControlBase);
if (typeof (Sys) !== "undefined") Sys.Application.notifyScriptLoaded(); 

