var MealPlanMenus =
{
    resetMealPlanMenusView : function (mealPlanId)
    {
        var mealPlanMenusElementId = 'meal-plan-'+mealPlanId+'-menus';
        var tabSetElementId = 'meal-plan-'+mealPlanId+'-menus-tab-set';
    
        // Hide switch view options
        $(mealPlanMenusElementId).select('a.switchToFullView', 'a.switchToTabView').each(function(e) { e.hide(); });
   
        // Hide tab set
        $(tabSetElementId).hide();
    
        // Hide titles
        $(mealPlanMenusElementId).select('h2.day', 'h2.unclassified').each(function(e) { e.hide(); });
        
        // Hide day/unclassified contents and remove class name 'tabContent'
        $(mealPlanMenusElementId).select('div.dayContent', 'div.unclassifiedContent').each(function(e)
        {
            e.hide();
            e.removeClassName('tabContent');
        });
    },

    showMealPlanMenusFullView : function (mealPlanId)
    {
        var mealPlanMenusElementId = 'meal-plan-'+mealPlanId+'-menus';
        
        // Reset view
        this.resetMealPlanMenusView(mealPlanId);
        
        // Show switch to tab view option
        $(mealPlanMenusElementId).select('a.switchToTabView').each(function(e) { e.show(); });
           
        // Show titles
        $(mealPlanMenusElementId).select('h2.day', 'h2.unclassified').each(function(e) { e.show(); });
        
        // Show day/unclassified contents
        $(mealPlanMenusElementId).select('div.dayContent', 'div.unclassifiedContent').each(function(e)
        {
            e.show();
        });
        
        // Set view variable
        this.setVariable(mealPlanId, 'view', 'full');
        jQuery.cookie('meal_plan_view_type', 'full', { expires: 365 });
    },

    showMealPlanMenusTabView : function (mealPlanId)
    {
        var mealPlanMenusElementId = 'meal-plan-'+mealPlanId+'-menus';
        var tabSetElementId = 'meal-plan-'+mealPlanId+'-menus-tab-set';
        
        // Reset view
        this.resetMealPlanMenusView(mealPlanId)
        
        // Show switch to full view option
        $(mealPlanMenusElementId).select('a.switchToFullView').each(function(e) { e.show(); });

        // Add class name 'tabContent' to day/unclassified content
        $(mealPlanMenusElementId).select('div.dayContent', 'div.unclassifiedContent').each(function(e)
        {
            e.hide();
            e.addClassName('tabContent');
        });

        // Enable tabs
        var firstTabContent = $(mealPlanMenusElementId).select('.tabContent').first();
        var controlTabsInstance = Control.Tabs.findByTabId(firstTabContent.id);
        if (controlTabsInstance == undefined)
        {
            new Control.Tabs(tabSetElementId);
        }
        else
        {
            controlTabsInstance.activeContainer.show();
        }
    
        // Show tab set
        $(tabSetElementId).show();
        
        // Set view variable
        this.setVariable(mealPlanId, 'view', 'tab');
        jQuery.cookie('meal_plan_view_type', 'tab', { expires: 365 });
    },
    
    hideCostAndNutritionInfo : function(mealPlanId)
    {
        var mealPlanMenusElementId = 'meal-plan-'+mealPlanId+'-menus';
        $(mealPlanMenusElementId).select('div.dayContent div.costAndNutritionInfo', 'div.dayContent a.hideCostAndNutritionInfo').each(function(e)
        {
            e.hide();
        });
        $(mealPlanMenusElementId).select('div.dayContent a.showCostAndNutritionInfo').each(function(e)
        {
            e.show();
        });
        this.setVariable(mealPlanId, 'show_cost_and_nutrition_info', '0');
    },

    showCostAndNutritionInfo : function(mealPlanId)
    {
        var mealPlanMenusElementId = 'meal-plan-'+mealPlanId+'-menus';
        $(mealPlanMenusElementId).select('div.dayContent div.costAndNutritionInfo', 'div.dayContent a.hideCostAndNutritionInfo').each(function(e)
        {
            e.show();
        });
        $(mealPlanMenusElementId).select('div.dayContent a.showCostAndNutritionInfo').each(function(e)
        {
            e.hide();
        });
        this.setVariable(mealPlanId, 'show_cost_and_nutrition_info', '1');
    },
    
    getVariable : function(mealPlanId, variable)
    {
        var mealPlanMenusElementId = 'meal-plan-'+mealPlanId+'-menus';
        return $(mealPlanMenusElementId).select('.variables .'+variable).first().innerHTML;
    },

    setVariable : function(mealPlanId, variable, value)
    {
        var mealPlanMenusElementId = 'meal-plan-'+mealPlanId+'-menus';
        $(mealPlanMenusElementId).select('.variables .'+variable).first().innerHTML = value;
    },
    
    hideSwapButtons : function(mealPlanId)
    {
        var mealPlanMenusElementId = 'meal-plan-'+mealPlanId+'-menus';
        $(mealPlanMenusElementId).select('.mealSwapButton').each(function(e)
        {
            e.hide();
        });
    }
}
YUI().use('node', function(Y) {
    window.suggestionCache = null;
    Y.on('domready', function(e) {
        var locale = Y.one('.variables .active_locale').get('innerHTML');
        YUI(YUI().merge(SOSCuisineConfiguration,{charset: 'iso-8859-1', lang: locale})).use('transition', 'soscuisine-notification', 'soscuisine-mealsuggestor', 'soscuisine-plus', 'array-extras', 'node', 'io', 'json', 'gallery-base64', 'overlay', 'gallery-overlay-extras', 'widget-anim', 'substitute', 'soscuisine-utilities', 'datasource-io', 'datasource-cache', 'cache', function(Y) {
            if (window.suggestionCache === null) {
                window.suggestionCache = new Y.Cache({max : 200});
            }
            var mainContainerNode,
                memberId = parseInt(Y.one('.variables .member_id').get('innerHTML'), 10);

            function showHelpPopup() {
                var headerContent = '<span>{header}</span><a href="#" class="sosmenuclose">X</a>',
                    overlay,
                    contentBox,
                    dialog = Y.one('div.yui3-soscuisine-standard-dialog.mealplan-menus-help-dialog'),
                    headerStrings = {
                        'en-CA': 'Help',
                        'fr-CA': 'Aide'
                    },
                    bodyStrings = {
                        'en-CA': 'The meal suggestions given here match the type of meal to be replaced (breakfast, snack, lunch or dinner) and the type of meal plan that you are subscribed to (budget, diabetes, weight loss, etc.).<br><br>You can change the type of meal plan that you are subscribed to in the <a href="/membre_profil.php">My Profile</a> page.',
                        'fr-CA': 'Les suggestions de repas données ici sont du même type que le repas à remplacer (déjeuner, collation, dîner ou souper) et du même type de menu que celui auquel vous êtes abonné (budget, diabète, maigrir, etc.).<br /><br />Vous pouvez changer le type de menu auquel vous êtes abonné dans la page <a href="/membre_profil.php">Mon Profil</a>'
                    },
                    okButtonStrings = {
                        'en-CA': 'OK',
                        'fr-CA': 'OK'
                    },
                    markup = (
                        '<div class="content">' + bodyStrings[locale] + '</div>' +
                        '<div class="button-container">' +
                            '<a href="#" class="sosmenuok">' + okButtonStrings[locale] + '</a>' +
                        '</div>'
                    );

                if (Y.Lang.isNull(dialog)) {
                    overlay = new Y.Overlay({
                        zIndex: 9005,
                        width: 525,
                        centered: true,
                        visible: true,
                        render: true,
                        shim: true,
                        plugins: [
                            { fn: Y.Plugin.OverlayModal},
                            { fn: Y.Plugin.OverlayKeepAligned},
                            { fn: Y.Plugin.OverlayAutoHide, cfg: {focusedOutside: false}}, 
                        ],
                        headerContent: Y.substitute(headerContent, { header: headerStrings[locale] }),
                        bodyContent: markup
                    });

                    contentBox = overlay.get('contentBox');

                    contentBox.addClass(Y.ClassNameManager.getClassName('soscuisine-standard-dialog'));
                    contentBox.addClass('mealplan-menus-help-dialog');
                    contentBox.delegate('click', function(e) { e.halt(); overlay.set('visible', false); }, 'a.sosmenuclose, a.sosmenuok', this);
                } else {
                    overlay = Y.Widget.getByNode(dialog);
                    overlay.set('visible', true);
                    overlay.set('centered', true);
                }
                return overlay;
            }
            function showPopup() {
                var headerContent = '<span>{header}</span><a href="#" class="sosmenuclose">X</a>',
                    overlay,
                    contentBox,
                    dialog = Y.one('div.yui3-soscuisine-standard-dialog.mealplan-menus-dialog'),
                    headerStrings = {
                        'en-CA': 'Warning',
                        'fr-CA': 'Avertissement'
                    },
                    bodyStrings = {
                        'en-CA': 'If you modify this meal plan, it will erase and replace <a href="/meal_plan_menus.php" onclick="this.target=\'_blank\'">your current meal plan</a>. <span class="hasTooltip" style="border: none;" title="We offer several meal plans. You can only modify one at a time. If you modify a meal plan, it will replace your current one."><strong>[?]</strong></span>',
                        'fr-CA': 'Si vous modifiez ce menu, il effacera et remplacera <a href="/meal_plan_menus.php" onclick="this.target=\'_blank\'">votre menu courant</a>. <span class="hasTooltip" style="border: none;" title="Nous offrons plusieurs menus. Vous pouvez en modifier un à la fois. Si vous modifiez un menu, il remplacera votre menu courant."><strong>[?]</strong></span>'
                    },
                    okButtonStrings = {
                        'en-CA': 'OK',
                        'fr-CA': 'OK'
                    },
                    cancelButtonStrings = {
                        'en-CA': 'Cancel',
                        'fr-CA': 'Annuler'
                    },
                    markup = (
                        '<div class="content">' + bodyStrings[locale] + '</div>' +
                        '<div class="button-container">' +
                            '<a href="#" class="sosmenuok">' + okButtonStrings[locale] + '</a>' +
                            '<a href="#" class="sosmenucancel">' + cancelButtonStrings[locale] + '</a>' +
                        '</div>'
                    );
                var gOverlay = Y.one('#overlay');
                var oldZIndex = gOverlay.getStyle('zIndex');
                gOverlay.setStyle('zIndex', 999);
                gOverlay.setStyle('visibility', 'visible');

                overlay = new Y.Overlay({
                    zIndex: 1000,
                    width: 525,
                    centered: true,
                    visible: true,
                    render: true,
                    shim: true,
                    plugins: [
                    ],
                    headerContent: Y.substitute(headerContent, { header: headerStrings[locale] }),
                    bodyContent: markup
                });

                contentBox = overlay.get('contentBox');
                contentBox.addClass(Y.ClassNameManager.getClassName('soscuisine-standard-dialog'));
                contentBox.addClass('mealplan-menus-dialog');
                contentBox.delegate('click', function(e) { e.halt(); overlay.destroy(); popup = undefined;gOverlay.setStyle('visibility', 'hidden'); gOverlay.setStyle('zIndex', oldZIndex); }, 'a.sosmenuclose, a.sosmenucancel', this);
                return overlay;
            }
            var popup;

            var attachEvents = function () {
                /*
                Y.all('.mealPlanMenus .mealSwap').each(function(mealSwapNode) {
                    var mealTypeCode = mealSwapNode.getAttribute('mealtypecode'),
                        categoryCode = mealSwapNode.getAttribute('mealplancategorycode'),
                        id           = mealSwapNode.getAttribute('mealplanid'),
                        day          = mealSwapNode.getAttribute('dayNumber'),
                        hashValue = mealSwapNode.getAttribute('meal_content_hash_value'),
                        myMealPlan = parseInt(MealPlanMenus.getVariable(id, 'my_meal_plan'), 10),
                        memberUsername = MealPlanMenus.getVariable(id, 'member_username');
                    var requestData = Object.toJSON({
                            'strategies': {
                                "ExcludeMealsByContentHashValue": [ hashValue ],
                                "GivenInConsumptionWithMealType": [ mealTypeCode ],
                                "PresentInMealPlanOfMealPlanCategory": [ categoryCode ]
                            }
                        });
                    var cachedSuggestions = window.suggestionCache.retrieve(requestData);

                    if (cachedSuggestions === null) {

                        Y.io('/services/meals/suggestions', {
                            method: 'POST',
                            data: requestData,
                            headers: {
                                'Content-Type': 'application/json',
                                'X-SosCuisine-Username': memberUsername
                            },
                            on: {
                                success: function(trId, resp) {
                                    window.suggestionCache.add(requestData, resp.responseText);
                                    var suggestions = Y.JSON.parse(resp.responseText);
                                    if (suggestions.meal_suggestions.length > 0) {
                                        mealSwapNode.removeClass('mealSwapLoad');
                                    } else {
                                        mealSwapNode.setStyle('display', 'none');
                                    }
                                },
                                failure: function() {
                                    mealSwapNode.setStyle('display', 'none');
                                }
                            }
                        });
                    } else {
                        var suggestions = Y.JSON.parse(cachedSuggestions.response);
                        if (suggestions.meal_suggestions.length > 0) {
                            mealSwapNode.removeClass('mealSwapLoad');
                        } else {
                            mealSwapNode.setStyle('display', 'none');
                        }
                    }
                });
                */
                Y.all('.mealPlanMenus .mealSwap').each(function(node) {
                    if (!node.hasClass('empty-meal')) {
                        node.removeClass('mealSwapLoad');
                        //node.ancestor().setStyle('display', 'block');
                    }
                });
                
                Y.delegate('click', function(e) {
                    e.preventDefault();

                    if (!Y.config.soscuisine.permissions.mealSwapper) {
                        Y.SOSCuisine.Plus.showPopup(
                            {
								exampleImage: "/media/images/pmp/sosplus/screenshots/3b_help_popup_msw_" + (locale === 'fr-CA' ? 'fr' : 'en') + ".jpg"
                            }
                        );
                        return false;
                    }
                    //Y.one('.mealPlanMenus').all('.mealSwap').detach('click');
                    mealTypeCode         = e.currentTarget.getAttribute('mealtypecode');
                    var mealPlanCategoryCode = e.currentTarget.getAttribute('mealplancategorycode'),
                        mealPlanId           = e.currentTarget.getAttribute('mealplanid'),
                        dayNumber            = e.currentTarget.getAttribute('dayNumber'),
                        mealContentHashValue = e.currentTarget.getAttribute('meal_content_hash_value'),
                        myMealPlan = parseInt(MealPlanMenus.getVariable(mealPlanId, 'my_meal_plan'), 10),
                        memberUsername = MealPlanMenus.getVariable(mealPlanId, 'member_username');
       
                    /* Suggestion handlers */
                    function onGetSuggestionsStart(trId, args) {
                    }
                    function onGetSuggestionsSuccess(trId, resp, args) {
                        var urns;

                        try {
                            urns = Y.JSON.parse(resp.responseText);
                        } catch(ex) {
                            onGetSuggestionsFailure();
                        }

                        if (urns.meal_suggestions.length > 0) {
                            urns.meal_suggestions.sort(function(a, b) {
                                return (Math.round(Math.random()) - 0.5);
                            });

                            var mealSuggestorPopup = Y.SOSCuisine.MealSuggestor.showPopup(urns.meal_suggestions, function(urn) {
                                var selectedUrn = urn,
                                    uuid = selectedUrn.split(':')[2];
                                mainContainer = Y.one('.mealPlanMenus');
                                if (Y.UA.ie === 0) {
                                    var o = Y.one('.mealPlanMenusOverlay');
                                    o.setStyle('opacity', 0);
                                }
                                mainContainer.addClass('mealPlanMenusLoading');
                                if (Y.UA.ie === 0) {
                                    o.transition(
                                        {
                                            easing: 'ease-out',
                                            duration: 0.75,
                                            opacity: 1
                                        }
                                    );
                                }

                                Y.io('/services/meal_plans/' + mealPlanId + '/meals/' + dayNumber + '/' + mealTypeCode , {
                                    method: 'PUT',
                                    data: Y.JSON.stringify({meal_urn: 'urn:uuid:' + uuid}),
                                    headers: {
                                        'X-SosCuisine-Username': memberUsername
                                    },
                                    on: {
                                        success: onGetMealPlanSuccess,
                                        failure: onGetMealPlanFailure
                                    }
                                });
                            });

                            mealSuggestorPopup.on('help', function(e) { showHelpPopup(); });
                        } else {
                            var alertStrings = {
                                'en-CA': 'Sorry, there is no other suggestion for this meal',
                                'fr-CA': "Désolé, il n'y a pas d'autre suggestion pour ce repas"
                            };
                            Y.SOSCuisine.showNotification('warning', {
                                markup: alertStrings[locale]
                            });
                            if (Y.UA.ie === 0) {
                                mainContainer = Y.one('.mealPlanMenus');
                                mainContainer.addClass('mealPlanMenusLoading');
                                var o = Y.one('.mealPlanMenusOverlay');
                                o.transition(
                                    {
                                        easing: 'ease-out',
                                        duration: 0.75,
                                        opacity: 0
                                    },
                                    function() {
                                        mainContainer.removeClass('mealPlanMenusLoading');
                                    }
                                );
                            } else {
                                mainContainer = Y.one('.mealPlanMenus');
                                mainContainer.removeClass('mealPlanMenusLoading');
                            }
                            Y.one('#overlay').setStyle('visibility', 'hidden');
                        }
                    }
                    function onGetSuggestionsFailure(trId, resp, args) {
                        var strings = {
                            'en-CA': 'An error occured while loading the meal suggestor, please <a href="#" onclick="location.reload();">retry</a>. If it persists, <a href="mailto:support@soscuisine.com?subject=Error%20while%20loading%20the%20meal%20suggestor">contact us</a>.',
                            'fr-CA': 'Une erreur est survenue durant le chargement du sélecteur de repas, veuillez <a href="#" onclick="location.reload();">réessayer</a>. Si le problème persiste, <a href="mailto:support@soscuisine.com?subject=Erreur%20durant%20le%20chargement%20du%20sélecteur%20de%20repas">contactez nous</a>.'
                        };
                        Y.SOSCuisine.showNotification('error', {
                            markup: strings[locale],
                            duration: 10
                        });
                        Y.one('#overlay').setStyle('visibility', 'hidden');
                    }
                    /* MealPlan handlers */
                    var currentMealPlanId;
                    var showCostAndNutritionInfo;
                    var viewType;
                    function onGetMealPlanSuccess(trId, resp, args) {
                        var newMealPlanIdObject;

                        currentMealPlanId = mealPlanId;

                        try {
                            newMealPlanIdObject = Y.JSON.parse(resp.responseText);
                        } catch(ex) {
                            onGetMealPlanFailure();
                        }

                        mealPlanId = newMealPlanIdObject['meal_plan_id'];

                        showCostAndNutritionInfo = parseInt(MealPlanMenus.getVariable(currentMealPlanId, 'show_cost_and_nutrition_info'));
                        viewType = MealPlanMenus.getVariable(currentMealPlanId, 'view');

                        var url = '/meal_plan_menus.php?meal_plan_id=' + mealPlanId + '&show_header=1&show_footer=1&show_layout=0&show_cost_and_nutrition_info=' + (showCostAndNutritionInfo ? '1' : '0') + '&view=' + viewType + '&rebuild_cache=1';
                
                        Y.io(url, {
                            method: 'GET',
                            on: {
                                success: onGetNewContentSuccess,
                                failure: onGetNewContentFailure
                            }
                        });
                    }
                    function onGetMealPlanFailure(trId, resp, args) {
                    	var strings = {
                            'en-CA': 'An error occured while loading the meal suggestor, please <a href="#" onclick="location.reload();">retry</a>. If it persists, <a href="mailto:support@soscuisine.com?subject=Error%20while%20loading%20the%20meal%20suggestor">contact us</a>.',
                            'fr-CA': 'Une erreur est survenue durant le chargement du sélecteur de repas, veuillez <a href="#" onclick="location.reload();">réessayer</a>. Si le problème persiste, <a href="mailto:support@soscuisine.com?subject=Erreur%20durant%20le%20chargement%20du%20sélecteur%20de%20repas">contactez nous</a>.'
                        };
                        Y.SOSCuisine.showNotification('error', {
                            markup: strings[locale],
                            duration: 10
                        });
                        Y.one('#overlay').setStyle('visibility', 'hidden');
                    }
                    /* new content handlers */
                    var newContent;
                    var activeTabIndex = 0;
                    function onGetNewContentSuccess(trId, resp, args) {
                        newContent = resp.responseText;

                        Y.Array.each(Control.Tabs.instances, function (instance, index) {
                            if (instance.activeLink.key.indexOf('-' + currentMealPlanId + '-') !== -1) {
                                // Get active tab
                                Y.Array.each(Control.Tabs.instances[index].links, function (link, linkIndex) {
                                    if (link == Control.Tabs.instances[index].activeLink)
                                    {
                                        activeTabIndex = linkIndex;
                                    }
                                });
                                Control.Tabs.instances.splice(index, 1);
                            }
                        });

                        var url = '/meal_plan_menus.php?meal_plan_id=' + mealPlanId + '&show_ppp_only=1';
                        Y.io(url, {
                            method: 'GET',
                            on: {
                                success: onGetPPPrefContentSuccess,
                                failure: onGetPPPrefContentFailure
                            }
                        });
                    }
                    function onGetNewContentFailure(trId, resp, args) {
                        var strings = {
                            'en-CA': 'An error occured while loading the meal suggestor, please <a href="#" onclick="location.reload();">retry</a>. If it persists, <a href="mailto:support@soscuisine.com?subject=Error%20while%20loading%20the%20meal%20suggestor">contact us</a>.',
                            'fr-CA': 'Une erreur est survenue durant le chargement du sélecteur de repas, veuillez <a href="#" onclick="location.reload();">réessayer</a>. Si le problème persiste, <a href="mailto:support@soscuisine.com?subject=Erreur%20durant%20le%20chargement%20du%20sélecteur%20de%20repas">contactez nous</a>.'
                        };
                        Y.SOSCuisine.showNotification('error', {
                            markup: strings[locale],
                            duration: 10
                        });
                        Y.one('#overlay').setStyle('visibility', 'hidden');
                    }
                    /* Personalized print preferences handlers */
                    function onGetPPPrefContentSuccess(trId, resp, args) {
                        var personalizedPrintPreferencesContent = resp.responseText;


                        Y.one('#modal_dialog_ppp').replace(Y.Node.create(personalizedPrintPreferencesContent));
                        Y.one('.inner_content').set('innerHTML', newContent);

                        if (showCostAndNutritionInfo)
                        {
                            MealPlanMenus.showCostAndNutritionInfo(''+mealPlanId+'');
                        }
                        else
                        {
                            MealPlanMenus.hideCostAndNutritionInfo(''+mealPlanId+'');
                        }
                        
                        if (viewType === 'tab') {
                            MealPlanMenus.showMealPlanMenusTabView(mealPlanId);
                            // Set active tab
                            Y.Array.each(Control.Tabs.instances, function (instance, index) {
                                if (instance.activeLink.key.indexOf('-' + mealPlanId + '-') !== -1) {
                                    Control.Tabs.instances[index].setActiveTab(activeTabIndex);
                                }
                            });
                        }
                        if (Y.UA.ie === 0) {
                            mainContainer = Y.one('.mealPlanMenus');
                            mainContainer.addClass('mealPlanMenusLoading');
                            var o = Y.one('.mealPlanMenusOverlay');
                            o.transition(
                                {
                                    easing: 'ease-out',
                                    duration: 0.75,
                                    opacity: 0
                                },
                                function() {
                                    mainContainer.removeClass('mealPlanMenusLoading');
                                }
                            );
                        } else {
                            mainContainer = Y.one('.mealPlanMenus');
                            mainContainer.removeClass('mealPlanMenusLoading');
                        }
                        
                        attachEvents();
                    }
                    function onGetPPPrefContentFailure(trId, resp, args) {
                        var strings = {
                            'en-CA': 'An error occured while loading the meal suggestor, please <a href="#" onclick="location.reload();">retry</a>. If it persists, <a href="mailto:support@soscuisine.com?subject=Error%20while%20loading%20the%20meal%20suggestor">contact us</a>.',
                            'fr-CA': 'Une erreur est survenue durant le chargement du sélecteur de repas, veuillez <a href="#" onclick="location.reload();">réessayer</a>. Si le problème persiste, <a href="mailto:support@soscuisine.com?subject=Erreur%20durant%20le%20chargement%20du%20sélecteur%20de%20repas">contactez nous</a>.'
                        };
                        Y.SOSCuisine.showNotification('error', {
                            markup: strings[locale],
                            duration: 10
                        });
                        Y.one('#overlay').setStyle('visibility', 'hidden');
                    }


                    var confirmStrings = {
                        'en-CA': 'If you modify this Meal Plan, it will erase and replace your current meal plan',
                        'fr-CA': 'Si vous modifiez ce menu, il effacera et remplacera votre menu courant'
                    };

                    if (!myMealPlan)
                    {
                        if (Y.Lang.isUndefined(popup)) {
                            popup = showPopup();

                            var okLink = popup.get('contentBox').one('a.sosmenuok').on('click', function(ea) {
                                ea.preventDefault();
                                Y.one('#overlay').setStyle('visibility', 'visible');
                                Y.io('/services/meals/suggestions', {
                                    method: 'POST',
                                    data: Object.toJSON({
                                        'strategies': {
                                            "ExcludeMealsByContentHashValue": [ mealContentHashValue ],
                                            "GivenInConsumptionWithMealType": [ mealTypeCode ],
                                            "PresentInMealPlanOfMealPlanCategory": [ mealPlanCategoryCode ]
                                        }
                                    }),
                                    headers: {
                                        'Content-Type': 'application/json',
                                        'X-SosCuisine-Username': memberUsername
                                    },
                                    on: {
                                        start: onGetSuggestionsStart,
                                        success: onGetSuggestionsSuccess,
                                        failure: onGetSuggestionsFailure
                                    }
                                });
                                popup.set('visible', false);
                            });
                        } else {
                            popup.set('visible', true);
                        }
                    } else {
                        Y.io('/services/meals/suggestions', {
                            method: 'POST',
                            data: Object.toJSON({
                                'strategies': {
                                    "ExcludeMealsByContentHashValue": [ mealContentHashValue ],
                                    "GivenInConsumptionWithMealType": [ mealTypeCode ],
                                    "PresentInMealPlanOfMealPlanCategory": [ mealPlanCategoryCode ]
                                }
                            }),
                            headers: {
                                'Content-Type': 'application/json',
                                'X-SosCuisine-Username': memberUsername
                            },
                            on: {
                                start: onGetSuggestionsStart,
                                success: onGetSuggestionsSuccess,
                                failure: onGetSuggestionsFailure
                            }
                        });
                    }


                }, '.mealPlanMenus', '.mealSwap');
            };
            Y.io('/services/members/' + memberId + '/permissions', {
                method: 'GET',
                on: {
                    success: function(trId, resp, args) {
                        var permissions = Y.JSON.parse(resp.responseText),
                            hasPermission = Y.Array.find(permissions, function(permission) {
                                return permission === 'have_access_to_meal_swapper_demo';
                            });

                        if(!Y.Lang.isNull(hasPermission)) {
                            Y.config.soscuisine.permissions.mealSwapper = true;
                            //Y.all('.mealPlanMenusHeader.empty-meal, .items.empty-meal').each(function(node) {
                            //    node.removeClass('empty-meal');
                            //});
                        }
                        
                        attachEvents();
                    }
                }
            });
        });
    });
});

