﻿Type.registerNamespace("Res.Commerce.Web.Composants.FicheProduit.V01");
Res.Commerce.Web.Composants.FicheProduit.V01.SelecteurProduit = function (element) {
    Res.Commerce.Web.Composants.FicheProduit.V01.SelecteurProduit.initializeBase(this, [element]);

    this._ButtonPlusId = null;
    this._ButtonMoinsId = null;
    this._ButtonAjoutPanierId = null;
    this._SelectTailleId = null;

    this._QuantiteMaximum = null;
    this._InputQuantiteId = null;
    this._CurrencySymbol = null;
    this._TailleEpuise = null;
    this._TailleIndisponible = null;
    this._Produit = null;

    this._selectedIndexTaille = null;
    this._messageErreurChoixColoris = null;
    this._messageErreurEpuise = null;

    this._agCat = null;
};
Res.Commerce.Web.Composants.FicheProduit.V01.SelecteurProduit.prototype = {
    initialize: function () {
        Res.Commerce.Web.Composants.FicheProduit.V01.SelecteurProduit.callBaseMethod(this, "initialize");

        if (this._dataSource == null)
            return;

        this._Produit = this._dataSource.Produit;
        this._QuantiteMaximum = 9;

        $(this.FormatId('#' + this._ButtonAjoutPanierId)).click(Function.createDelegate(this, this.OnAjoutPanier));
        $(this.FormatId('#' + this._ButtonPlusId)).click(Function.createDelegate(this, this.SelecteurProduit_QuantiteChanged));
        $(this.FormatId('#' + this._ButtonMoinsId)).click(Function.createDelegate(this, this.SelecteurProduit_QuantiteChanged));
        $(this.FormatId('#' + this._ButtonAjoutPanierId)).click(Function.createDelegate(this, this.SelecteurProduit_AjoutPanier));
        $(this.FormatId('#' + this._SelectTailleId)).change(Function.createDelegate(this, this.SelecteurProduit_TailleChanged));
        $(this.FormatId('#' + this._SelectTailleId)).change(Function.createDelegate(this, this.OnTailleSelected));

        if (this._Produit.IsAfficherImageColoris) {
            var delegateInSelecteur = Function.createDelegate(this, this.SelecteurProduit_ColorChanged);
            $(this.FormatId('.coloris_color')).click(function (ev) { delegateInSelecteur($(this), ev) });
            $(this.FormatId('.coloris_color')).tooltip();
            var delegateIn = Function.createDelegate(this, this.OnMouseInPastilleColoris);
            $(this.FormatId('.coloris_color')).mouseenter(function () { delegateIn($(this)) });
            $(this.FormatId('.coloris_color')).mouseleave(Function.createDelegate(this, this.OnMouseOutPastilleColoris));
            $(this.FormatId('.coloris_color')).click(Function.createDelegate(this, this.OnTailleSelected));
        }
        else {
            var delegateInSelecteur = Function.createDelegate(this, this.SelecteurProduit_ColorChanged);
            $(this.FormatId('.coloris_select')).change(function (ev) { delegateInSelecteur($(this), ev) });
            $(this.FormatId('.coloris_select')).change(Function.createDelegate(this, this.OnTailleSelected));
        }

        this.SetLibelleTaille();
        var produitTaille = this.GetCurrentProduitTaille();
        this.SetPrix(produitTaille);
    },

    dispose: function () {
        this.Clean();
        Res.Commerce.Web.Composants.FicheProduit.V01.SelecteurProduit.callBaseMethod(this, "dispose");
    },
    saveClientState: function () {
        return null;
    },
    Clean: function () {
        // Efface les précédents branchement si déjà existant
        $(this.FormatId('#' + this._ButtonPlusId)).unbind('click');
        $(this.FormatId('#' + this._ButtonMoinsId)).unbind('click');
        $(this.FormatId('#' + this._ButtonAjoutPanierId)).unbind('click');
        $(this.FormatId('#' + this._SelectTailleId)).unbind('change');

        $(this.FormatId('.coloris_color')).unbind('click');
        $(this.FormatId('.coloris_select')).unbind('change');
    },
    SetLibelleTaille: function () {
        var countTailleDisponible = $('#' + this._SelectTailleId + ' option').length;

        if ($('#disabled_taille_label') != null && $('#disabled_taille_label') != undefined && $('#disabled_taille_label') != 'undefined') {
            $('#disabled_taille_label').remove();
        }

        if (countTailleDisponible <= 1) {
            var option = $(this.FormatId('#' + this._SelectTailleId + ' option:first'));
            var keyTaille = option.val();
            var produitTaille = option.text().replace('\n', '').trim();

            $('<label id="disabled_taille_label" for=' + keyTaille + '>' + produitTaille + '</label>').insertAfter($('#' + this._SelectTailleId));
            $('#' + this._SelectTailleId).css("display", "none");
        } else {
            $('#' + this._SelectTailleId).css("display", "block");
        }
    },

    FormatId: function (selector) {
        return '#' + this._element.id + ' ' + selector;
    },

    AjoutPanier: function (func) {
        $('#' + this._element.id).live('AjoutPanierEvent', func);
    },

    OnAjoutPanier: function (evtArgs) {
        var event = jQuery.Event("AjoutPanierEvent");
        $('#' + this._element.id).trigger(event);
    },

    MouseInPastilleColoris: function (func) {
        $('#' + this._element.id).live("SelecteurProduitHoverColoris", func);
    },

    MouseOutPastilleColoris: function (func) {
        $('#' + this._element.id).live("SelecteurProduitOutColoris", func);
    },

    ColorisSelected: function (func) {
        $('#' + this._element.id).live("SelecteurProduitColorisSelected", func);
    },

    TailleSelected: function (func) {
        $('#' + this._element.id).live("SelecteurProduitTailleSelected", func);
    },

    OnMouseInPastilleColoris: function (ev) {
        var keyColoris = ev.attr('rel');
        var produitColoris = this._Produit.ProduitColoris[keyColoris];
        var urlimage = produitColoris.UrlImageAssocieColoris;
        var event = jQuery.Event("SelecteurProduitHoverColoris");
        event.urlimage = urlimage;
        $('#' + this._element.id).trigger(event);
    },

    OnMouseOutPastilleColoris: function (ev) {
        var event = jQuery.Event("SelecteurProduitOutColoris");
        $('#' + this._element.id).trigger(event);
    },

    /*OnClickPastilleColoris: function (ev) {
    var keyColoris = ev.target.attributes['rel'].value;
    var produitColoris = this._Produit.ProduitColoris[keyColoris];
    var urlimage = produitColoris.UrlImageAssocieColoris;
    var keyTaille = $(this.FormatId('#' + this._SelectTailleId + ' option:selected')).val();
    var produitTaille = produitColoris.ProduitTailles[keyTaille];
    var event = jQuery.Event("SelecteurProduitColorisSelected");
    event.urlimage = urlimage;
    event.produitTaille = produitTaille;
    $('#' + this._element.id).trigger(event);
    },*/
    OnSelectColoris: function () {
        var keyColoris = $(this.FormatId('.coloris_select  option:selected')).val();
        if (keyColoris != "-1") {
            var produitColoris = this._Produit.ProduitColoris[keyColoris];
            var urlimage = produitColoris.UrlImageAssocieColoris;
            var keyTaille = $(this.FormatId('#' + this._SelectTailleId + ' option:selected')).val();
            var produitTaille = produitColoris.ProduitTailles[keyTaille];
            var produitReference = produitTaille.ReferencePresentation;
            var event = jQuery.Event("SelecteurProduitColorisSelected");
            event.urlimage = urlimage;
            event.produitTaille = produitTaille;
            $('#' + this._element.id).trigger(event);

        }
        //début meca promo
        else {
            var event = jQuery.Event("SelecteurProduitColorisSelected");
            $('#' + this._element.id).trigger(event);
        }
        //fin meca promo
    },
    GetQuantite: function () {
        return $(this.FormatId('#' + this._InputQuantiteId)).val();
    },
    GetKeyTaille: function () {
        return $(this.FormatId('#' + this._SelectTailleId + ' option:selected')).val();
    },

    GetInformation: function () {

        var key = null;

        if (this._Produit.IsAfficherImageColoris) {
            var selectedDiv = $(this.FormatId('div[class*="current_coloris"]'));
            if (selectedDiv != null) {
                var keyColoris = selectedDiv.attr("rel");
                if (keyColoris != null) {
                    key = keyColoris;
                }
            }
            else
                key = "-1";
        }
        if (key == null) {
            var selectedOption = $(this.FormatId('.coloris_select'));
            if (selectedOption != null) {
                var keyColoris = selectedOption.attr('value');
                if (keyColoris != null) {
                    key = keyColoris;
                }
            }
        }

        if (key == null) {
            return null;
        }

        if (key == "-1") {
            alert(this._messageErreurChoixColoris);
            return null;
        }

        var keyTaille = this.GetKeyTaille();
        if (keyTaille == null) {
            return null;
        }

        var value = new Object();
        value.CodeCouleur = key;
        value.LibelleColoris = $(this.FormatId('.coloris_select option[value="' + key + '"]')).html();

        var produitColoris = this._Produit.ProduitColoris[key];
        var produitTaille = produitColoris.ProduitTailles[keyTaille];

        if (produitTaille.Taille.Disponibilite == 2) {
            alert(this._messageErreurEpuise);
            return null;
        }

        value.TaillePresentation = produitTaille.Taille.TaillePresentation;
        value.ReferencePresentation = produitTaille.ReferencePresentation;
        value.Quantite = this.GetQuantite();
        value.Disponibilite = produitTaille.Taille.Disponibilite;
        value.Prix = produitTaille.Prix;
        value.PrixBarre = produitTaille.PrixBarre;
        value.NumeroSelection = produitTaille.NumeroSelection;
        // début meca promo
        value.NumeroMecaPromo = produitTaille.NumeroMecaPromo;
        value.UrlPictoMecaPromo = produitTaille.UrlPictoMecaPromo;
        // fin meca promo
        value.AgCat = this._agCat;
        value.UrlPictoTauxDemarque = produitTaille.TauxDemarque;

        return value;

    },

    GetClassMod: function () {
        var value = new Object();
        value.Classe = this._Produit.Classe;
        value.Modele = this._Produit.Modele;
        return value;
    },

    OnTailleSelected: function (ev) {
        var keyColoris = $(this.FormatId('.coloris_select option:selected')).val();
        if (keyColoris == null)
            keyColoris = $(this.FormatId('.coloris_select option:first'));
        if (keyColoris != "-1") {
            var keyTaille = $(this.FormatId('#' + this._SelectTailleId + ' option:selected')).val();
            var produitColoris = this._Produit.ProduitColoris[keyColoris];
            var produitTaille = produitColoris.ProduitTailles[keyTaille];
            if (typeof (produitTaille) == "undefined") {
                keyColoris = $(this.FormatId('.coloris_select option[selected]')).val();
                if (keyColoris != "-1") {
                    keyTaille = $(this.FormatId('#' + this._SelectTailleId + ' option:selected')).val();
                    produitColoris = this._Produit.ProduitColoris[keyColoris];
                    produitTaille = produitColoris.ProduitTailles[keyTaille];

                }
            }
            // On lance l'évènement au niveau page
            var event = jQuery.Event("SelecteurProduitTailleSelected");
            event.finaref = produitColoris.Finaref;
            event.produitTaille = produitTaille;
            $('#' + this._element.id).trigger(event);

        }
    },

    SelecteurProduit_ColorChanged: function (el, ev) {

        var keyColoris = null;

        if (this._Produit.IsAfficherImageColoris) {
            keyColoris = el.attr('rel');
            $(this.FormatId('.coloris_select option:selected')).removeAttr('selected');
            // TODO reste un bug ici, cela ne fonctionne pas
            $(this.FormatId('.coloris_select option[value=' + keyColoris + ']')).attr('selected', 'selected');
            $(this.FormatId('div .current_coloris')).removeClass('current_coloris');
            $(this.FormatId('div[rel=' + keyColoris + ']')).addClass('current_coloris');
        }

        this.SetTaille();
        var produitTaille = this.GetCurrentProduitTaille();
        this.SetPrix(produitTaille);
        this.OnSelectColoris();
        this.SetLibelleTaille();
        this.SetReference(produitTaille);
        return null;
    },

    GetCurrentProduitTaille: function () {
        var produitColoris = this.GetCurrentProduitColoris();
        if (produitColoris != null) {
            var option = $(this.FormatId('#' + this._SelectTailleId + ' option:selected'));
            if (option == null)
                option = $(this.FormatId('#' + this._SelectTailleId + ' option:first'));
            if (option != null) {
                var keyTaille = option.val();
                if (keyTaille != -1) {
                    return produitColoris.ProduitTailles[keyTaille];
                }
            }
        }
        return null;
    },

    GetCurrentProduitColoris: function () {
        var option = $(this.FormatId('.coloris_select option:selected'));
        if (option == null)
            option = $(this.FormatId('.coloris_select option:first'));
        if (option != null) {
            var keyColoris = option.val();
            if (keyColoris != -1) {
                return this._Produit.ProduitColoris[keyColoris];
            }
        }
        return null;
    },

    SetTaille: function () {
        var keyColoris = $(this.FormatId('.coloris_select option:selected')).val();
        if (keyColoris != "-1") {
            $(this.FormatId('#' + this._SelectTailleId + " option")).remove();

            var produitColoris = this._Produit.ProduitColoris[keyColoris];
            var index = 0;
            for (var key in produitColoris.ProduitTailles) {
                var value = produitColoris.ProduitTailles[key];
                var libelleTaille = value.Taille.Libelle;
                var disabled = '';
                var selected = '';
                if (value.Taille.Disponibilite == 2) {
                    disabled = ' disabled="disabled" ';
                    libelleTaille = this._TailleEpuise.replace('{0}', libelleTaille);

                }
                else if (value.Taille.Disponibilite == 9) {
                    disabled = ' disabled="disabled" ';
                    libelleTaille = this._TailleIndisponible.replace('{0}', libelleTaille);
                }
                else {
                    if (this._selectedIndexTaille != null && this._selectedIndexTaille == index)
                        selected = 'selected';
                }
                $('#' + this._SelectTailleId).append('<option value=\'' + key + '\'' + selected + '' + disabled + '>' + libelleTaille + '</option>');
                index++;
            }
            var tailleSelected = $(this.FormatId('#' + this._SelectTailleId + ' option:selected')).val();
            if (tailleSelected == null || typeof (tailleSelected) == 'undefined') {
                $('#' + this._SelectTailleId + ' option:first').attr('selected', 'selected');
            }
        }


    },

    SelecteurProduit_QuantiteChanged: function (ev) {
        if (ev != null) {
            ev.preventDefault();
            var current = 1;
            if (ev.currentTarget.id == this._ButtonMoinsId) {
                current = parseInt($(this.FormatId('#' + this._InputQuantiteId)).val()) - 1;

            }
            else if (ev.currentTarget.id == this._ButtonPlusId) {
                current = parseInt($(this.FormatId('#' + this._InputQuantiteId)).val()) + 1;
            }

            if (current <= 1) {
                $(this.FormatId('#' + this._ButtonMoinsId)).css("display", "none");
                $(this.FormatId('#' + this._ButtonPlusId)).css("display", "inline");
            }
            else if (current >= this._QuantiteMaximum) {
                $(this.FormatId('#' + this._ButtonMoinsId)).css("display", "inline");
            }
            else {
                $(this.FormatId('#' + this._ButtonPlusId)).css("display", "inline");
                $(this.FormatId('#' + this._ButtonMoinsId)).css("display", "inline");
            }

            if (current <= this._QuantiteMaximum && current >= 1) {
                $(this.FormatId('#' + this._InputQuantiteId)).val(current);
            }
        }

        return null;
    },

    SelecteurProduit_TailleChanged: function (ev) {
        this._selectedIndexTaille = ev.currentTarget.options.selectedIndex;
        var produitTaille = this.GetCurrentProduitTaille();
        this.SetPrix(produitTaille);
        this.SetReference(produitTaille);
        return false;
    },

    SetPrix: function (produitTaille) {
        if (produitTaille != null) {
            var disponibilite = produitTaille.Taille.Disponibilite;

            // Disponibilite
            var dispo = $(this.FormatId('.memo_fp_quantity_dec + span'));
            dispo.removeClass();
            $(this.FormatId('#' + this._ButtonAjoutPanierId)).attr('disabled', false);
            $(this.FormatId('#' + this._ButtonAjoutPanierId)).removeClass('memo_fp_ajouter_panier_disabled').addClass('memo_fp_ajouter_panier');

            switch (disponibilite) {
                case 1:
                    dispo.addClass(this.FormatId('memo_fp_color_dispo_1'));
                    break;
                case 5:
                    dispo.addClass(this.FormatId('memo_fp_color_dispo_2'));
                    break;
                case 9:
                    dispo.addClass(this.FormatId('memo_fp_color_dispo_9'));
                    $(this.FormatId('#' + this._ButtonAjoutPanierId)).addClass('memo_fp_ajouter_panier_disabled');
                    $(this.FormatId('#' + this._ButtonAjoutPanierId)).attr('disabled', true);
                    break;
                default:
                    dispo.addClass(this.FormatId('memo_fp_color_dispo_0'));
                    break;
            }
            dispo.html(produitTaille.LibelleDisponibilite);
        }
    },

    SetReference: function (produitTaille) {
        if (produitTaille != null)
            $('.memo_fp_txt_refpres_ref').html(produitTaille.ReferencePresentation);
    },

    SelecteurProduit_AjoutPanier: function (ev) {
        if (ev != null) {
            ev.preventDefault();
        }
        return null;
    },

    get_ButtonPlusId: function () {
        return this._ButtonPlusId;
    },

    set_ButtonPlusId: function (value) {
        this._ButtonPlusId = value;
    },

    get_ButtonMoinsId: function () {
        return this._ButtonMoinsId;
    },

    set_ButtonMoinsId: function (value) {
        this._ButtonMoinsId = value;
    },

    get_ButtonAjoutPanierId: function () {
        return this._ButtonAjoutPanierId;
    },

    set_ButtonAjoutPanierId: function (value) {
        this._ButtonAjoutPanierId = value;
    },

    set_SelectTailleId: function (value) {
        this._SelectTailleId = value;
    },

    get_SelectTailleId: function () {
        return this._SelectTailleId;
    },

    get_InputQuantiteId: function () {
        return this._InputQuantiteId;
    },

    set_InputQuantiteId: function (value) {
        this._InputQuantiteId = value;
    },

    get_CurrencySymbol: function () {
        return this._CurrencySymbol;
    },

    set_CurrencySymbol: function (value) {
        this._CurrencySymbol = value;
    },
    get_DataSource: function () {
        return this._dataSource;
    },
    set_DataSource: function (value) {
        this._dataSource = value;
    },
    get_TailleEpuise: function () {
        return this._TailleEpuise;
    },
    set_TailleEpuise: function (value) {
        this._TailleEpuise = value;
    },

    get_TailleIndisponible: function () {
        return this._TailleIndisponible;
    },
    set_TailleIndisponible: function (value) {
        this._TailleIndisponible = value;
    },
    get_MessageErreurChoixColoris: function () {
        return this._messageErreurChoixColoris;
    },
    set_MessageErreurChoixColoris: function (value) {
        this._messageErreurChoixColoris = value;
    },
    get_MessageErreurEpuise: function () {
        return this._messageErreurEpuise;
    },
    set_MessageErreurEpuise: function (value) {
        this._messageErreurEpuise = value;
    },
    get_AgCat: function () {
        return this._agCat;
    },
    set_AgCat: function (value) {
        this._agCat = value;
    }
};
Res.Commerce.Web.Composants.FicheProduit.V01.SelecteurProduit.registerClass("Res.Commerce.Web.Composants.FicheProduit.V01.SelecteurProduit", Res.Commerce.Web.Composants.ScriptControlBase);
if (typeof (Sys) !== "undefined") Sys.Application.notifyScriptLoaded(); 

