﻿/*
* Singleton to manage sIFR and menu functionality on menu item page.
* @requires sifr.js
* @requires jquery.resize-events.min.js
* @requires tacoBell.js
* @requires InlineSearchManager.js
*/
if (!tacoBell.MenuItem) {
    tacoBell.MenuItem = (function() {
        // See What's Inside menu-related vars
        var _closedMenu, _openMenu, _openLink, _closeLink, _closedMenuTPos, _closedMenuLPos, _windowResizeTimeout, _resizeEventObs;
        var _modalDialogsLoadedTimeout, _sifrDoneTimeout, _corpusGothic;
        function _setUp() {
            _closedMenu = $('#seeInsideClMenu');
            _openMenu = $('#seeInsideOpMenu');
            _openLink = $('#seeInsideOpLink');
            _closeLink = $('#seeInsideClLink');
            _openLink.one('click', _showMenu);
            _addModalEventListeners();
            // window resizing-related
            ResizeEvents.conf['pollFrequency'] = 200;
            ResizeEvents.initialise();
            _resizeEventObs = false;
            _nutrStatsModalStriped = false;
            // time
            _modalDialogsLoadedTimeout = setTimeout('tacoBell.MenuItem.initSIFR()', 400);
            _sifrDoneTimeout = setTimeout('tacoBell.MenuItem.getClosedMenuPos()', 400);
        }
        // start sIFR replacement 
        // only when modal dialogs have been loaded/created
        function _initSIFR() {
            if (tacoBell.utils.ModalDialogManager.modalDialogsLoaded) { // see boolean var set in tacoBell.js
                clearTimeout(_modalDialogsLoadedTimeout);
                tacoBell.MenuItem.sIFR.setUp();
            } else {
                clearTimeout(_modalDialogsLoadedTimeout);
                _modalDialogsLoadedTimeout = setTimeout('tacoBell.MenuItem.modalDialogsLoadedTimeout()', 400);
            }
        }
        // get closed menu position for open menu placement 
        // only when sIFR replacement is done
        function _getClosedMenuPos() {
            if (tacoBell.MenuItem.sifrDone) { // see boolean var set below
                clearTimeout(_sifrDoneTimeout);
                _closedMenuTPos = _closedMenu.offset().top;
                _closedMenuLPos = _closedMenu.offset().left;
            } else {
                clearTimeout(_sifrDoneTimeout);
                _sifrDoneTimeout = setTimeout('tacoBell.MenuItem.getClosedMenuPos()', 400);
            }
        }
        function _showMenu(event) {
            // position open menu on top of closed menu div,
            // with manual adjustment for open images' drop shadows
            _getClosedMenuPos();
            _repositionMenu();
            _openMenu.show();
            if (tacoBell.isIE6) {
                IEPNGFix.update();
            }
            _closeLink.one('click', _hideMenu);
            $(window).trigger('pdp:see_inside:open');
            // Listen for custom window resizing events
            if (!_resizeEventObs) {
                ResizeEvents.eventElement.bind('x-window-resize', function(eventObj, emPixels, textHeight, windowWidth, windowHeight) {
                    _resizeEventObs = true;
                    _getClosedMenuPos();
                    _repositionMenu();
                });
            }
        }
        function _hideMenu(event) {
            _openMenu.hide();
            _openLink.one('click', _showMenu);
        }
        function _repositionMenu() {
            _openMenu.css({
                'top': (_closedMenuTPos - 6) + 'px',
                'left': (_closedMenuLPos - 6) + 'px'
            });
        }
        function _addModalEventListeners() {
            $('#nutritionFactsLink').bind('click', function(event) {
                event.preventDefault();
                tacoBell.utils.ModalDialogManager.openModal('nutritionFacts');
                tacoBell.utils.stripeColumns({
                    'tableID': 'nutritionFactsTable'
                });
                $(window).trigger('pdp:nutrition_facts');
            });
            $('#ingredDetailsLink').bind('click', function(event) {
                tacoBell.utils.ModalDialogManager.openModal('ingredDetails');
                tacoBell.MenuItem.sIFR.ingredDetailsHeader();
                tacoBell.InlineSearchManager.setUp({ 'searchElsContainSelector': '#ingredDetailsModal .modalScrollable:eq(0)' });
                $(window).trigger('pdp:see_inside:details');
            });
        }
        return {
            setUp: function() {
                _setUp();
            },
            getClosedMenuPos: function() {
                _getClosedMenuPos();
            },
            initSIFR: function() {
                _initSIFR();
            }
        };
    })();
}

if (!tacoBell.MenuItem.sifrDone) { tacoBell.MenuItem.sifrDone = false; }

if (!tacoBell.MenuItem.sIFR) {
    tacoBell.MenuItem.sIFR = (function() {
        function _setUp() {
            _corpusGothic = { src: tacoBell.constants.corpusGothicSrc };
            sIFR.fitExactly = true;
            sIFR.fromLocal = true;
            sIFR.activate(_corpusGothic);
            _pageHeader();
        }
        function _pageHeader() {
            sIFR.replace(_corpusGothic, {
                css: ['.sIFR-root {background-color: transparent; color: #eee9ef; font-size: 48px; leading: -16; text-transform: uppercase;}'],
                offsetTop: -11,
                onReplacement: function() {
                    tacoBell.MenuItem.sifrDone = true;
                },
                ratios: [9, 1.16, 16, 1.09, 24, 1.06, 37, 1.04, 74, 1.02, 1.01],
                selector: 'h1',
                tuneHeight: -21,
                //tuneWidth: +5,
                wmode: 'transparent'
            });
        }
        function _ingredDetailsHeader() {
            var printIcon = $('#ingredDetailsModal .modalPrint');
            printIcon.hide();
            var forceOneLine = true;
            // wrap text for really long product names (>30 chars)
            var foodNameLength = window.location.pathname.split('/')[2].length;
            if (foodNameLength > 30) {
              forceOneLine = false;
            }
            sIFR.replace(_corpusGothic, {
                css: ['.sIFR-root {background-color: transparent; color: #eee9ef; font-size: 30px; leading: -6; text-transform: uppercase;}'],
                forceSingleLine: forceOneLine,
                offsetTop: -7,
                // Update placement of print icon
                onReplacement: function() {
                    printIcon.show();
                },
                selector: '.modalHeaderText',
                tuneHeight: -10,
                wmode: 'transparent'
            });
        }
        return {
            setUp: function() {
                _setUp();
            },
            ingredDetailsHeader: function() {
                _ingredDetailsHeader();
            }
        };
    })();
}

