{"version":3,"sources":["Content/multikart2/js/clamp.js","Content/multikart2/js/main.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;ACpQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"app.js","sourcesContent":["/*!\r\n* Clamp.js 0.5.1\r\n*\r\n* Copyright 2011-2013, Joseph Schmitt http://joe.sh\r\n* Released under the WTFPL license\r\n* http://sam.zoy.org/wtfpl/\r\n*/\r\n\r\n(function () {\r\n    /**\r\n     * Clamps a text node.\r\n     * @param {HTMLElement} element. Element containing the text node to clamp.\r\n     * @param {Object} options. Options to pass to the clamper.\r\n     */\r\n    function clamp(element, options) {\r\n        options = options || {};\r\n\r\n        var self = this,\r\n            win = window,\r\n            opt = {\r\n                clamp: options.clamp || 2,\r\n                useNativeClamp: typeof (options.useNativeClamp) != 'undefined' ? options.useNativeClamp : true,\r\n                splitOnChars: options.splitOnChars || ['.', '-', '–', '—', ' '], //Split on sentences (periods), hypens, en-dashes, em-dashes, and words (spaces).\r\n                animate: options.animate || false,\r\n                truncationChar: options.truncationChar || '…',\r\n                truncationHTML: options.truncationHTML\r\n            },\r\n\r\n            sty = element.style,\r\n            originalText = element.innerHTML,\r\n\r\n            supportsNativeClamp = typeof (element.style.webkitLineClamp) != 'undefined',\r\n            clampValue = opt.clamp,\r\n            isCSSValue = clampValue.indexOf && (clampValue.indexOf('px') > -1 || clampValue.indexOf('em') > -1),\r\n            truncationHTMLContainer;\r\n\r\n        if (opt.truncationHTML) {\r\n            truncationHTMLContainer = document.createElement('span');\r\n            truncationHTMLContainer.innerHTML = opt.truncationHTML;\r\n        }\r\n\r\n\r\n        // UTILITY FUNCTIONS __________________________________________________________\r\n\r\n        /**\r\n         * Return the current style for an element.\r\n         * @param {HTMLElement} elem The element to compute.\r\n         * @param {string} prop The style property.\r\n         * @returns {number}\r\n         */\r\n        function computeStyle(elem, prop) {\r\n            if (!win.getComputedStyle) {\r\n                win.getComputedStyle = function (el, pseudo) {\r\n                    this.el = el;\r\n                    this.getPropertyValue = function (prop) {\r\n                        var re = /(\\-([a-z]){1})/g;\r\n                        if (prop == 'float') prop = 'styleFloat';\r\n                        if (re.test(prop)) {\r\n                            prop = prop.replace(re, function () {\r\n                                return arguments[2].toUpperCase();\r\n                            });\r\n                        }\r\n                        return el.currentStyle && el.currentStyle[prop] ? el.currentStyle[prop] : null;\r\n                    }\r\n                    return this;\r\n                }\r\n            }\r\n\r\n            return win.getComputedStyle(elem, null).getPropertyValue(prop);\r\n        }\r\n\r\n        /**\r\n         * Returns the maximum number of lines of text that should be rendered based\r\n         * on the current height of the element and the line-height of the text.\r\n         */\r\n        function getMaxLines(height) {\r\n            var availHeight = height || element.clientHeight,\r\n                lineHeight = getLineHeight(element);\r\n\r\n            return Math.max(Math.floor(availHeight / lineHeight), 0);\r\n        }\r\n\r\n        /**\r\n         * Returns the maximum height a given element should have based on the line-\r\n         * height of the text and the given clamp value.\r\n         */\r\n        function getMaxHeight(clmp) {\r\n            var lineHeight = getLineHeight(element);\r\n            return lineHeight * clmp;\r\n        }\r\n\r\n        /**\r\n         * Returns the line-height of an element as an integer.\r\n         */\r\n        function getLineHeight(elem) {\r\n            var lh = computeStyle(elem, 'line-height');\r\n            if (lh == 'normal') {\r\n                // Normal line heights vary from browser to browser. The spec recommends\r\n                // a value between 1.0 and 1.2 of the font size. Using 1.1 to split the diff.\r\n                lh = parseInt(computeStyle(elem, 'font-size')) * 1.2;\r\n            }\r\n            return parseInt(lh);\r\n        }\r\n\r\n\r\n        // MEAT AND POTATOES (MMMM, POTATOES...) ______________________________________\r\n        var splitOnChars = opt.splitOnChars.slice(0),\r\n            splitChar = splitOnChars[0],\r\n            chunks,\r\n            lastChunk;\r\n\r\n        /**\r\n         * Gets an element's last child. That may be another node or a node's contents.\r\n         */\r\n        function getLastChild(elem) {\r\n            //Current element has children, need to go deeper and get last child as a text node\r\n            if (elem.lastChild.children && elem.lastChild.children.length > 0) {\r\n                return getLastChild(Array.prototype.slice.call(elem.children).pop());\r\n            }\r\n            //This is the absolute last child, a text node, but something's wrong with it. Remove it and keep trying\r\n            else if (!elem.lastChild || !elem.lastChild.nodeValue || elem.lastChild.nodeValue == '' || elem.lastChild.nodeValue == opt.truncationChar) {\r\n                elem.lastChild.parentNode.removeChild(elem.lastChild);\r\n                return getLastChild(element);\r\n            }\r\n            //This is the last child we want, return it\r\n            else {\r\n                return elem.lastChild;\r\n            }\r\n        }\r\n\r\n        /**\r\n         * Removes one character at a time from the text until its width or\r\n         * height is beneath the passed-in max param.\r\n         */\r\n        function truncate(target, maxHeight) {\r\n            if (!maxHeight) { return; }\r\n\r\n            /**\r\n             * Resets global variables.\r\n             */\r\n            function reset() {\r\n                splitOnChars = opt.splitOnChars.slice(0);\r\n                splitChar = splitOnChars[0];\r\n                chunks = null;\r\n                lastChunk = null;\r\n            }\r\n\r\n            var nodeValue = target.nodeValue.replace(opt.truncationChar, '');\r\n\r\n            //Grab the next chunks\r\n            if (!chunks) {\r\n                //If there are more characters to try, grab the next one\r\n                if (splitOnChars.length > 0) {\r\n                    splitChar = splitOnChars.shift();\r\n                }\r\n                //No characters to chunk by. Go character-by-character\r\n                else {\r\n                    splitChar = '';\r\n                }\r\n\r\n                chunks = nodeValue.split(splitChar);\r\n            }\r\n\r\n            //If there are chunks left to remove, remove the last one and see if\r\n            // the nodeValue fits.\r\n            if (chunks.length > 1) {\r\n                // console.log('chunks', chunks);\r\n                lastChunk = chunks.pop();\r\n                // console.log('lastChunk', lastChunk);\r\n                applyEllipsis(target, chunks.join(splitChar));\r\n            }\r\n            //No more chunks can be removed using this character\r\n            else {\r\n                chunks = null;\r\n            }\r\n\r\n            //Insert the custom HTML before the truncation character\r\n            if (truncationHTMLContainer) {\r\n                target.nodeValue = target.nodeValue.replace(opt.truncationChar, '');\r\n                element.innerHTML = target.nodeValue + ' ' + truncationHTMLContainer.innerHTML + opt.truncationChar;\r\n            }\r\n\r\n            //Search produced valid chunks\r\n            if (chunks) {\r\n                //It fits\r\n                if (element.clientHeight <= maxHeight) {\r\n                    //There's still more characters to try splitting on, not quite done yet\r\n                    if (splitOnChars.length >= 0 && splitChar != '') {\r\n                        applyEllipsis(target, chunks.join(splitChar) + splitChar + lastChunk);\r\n                        chunks = null;\r\n                    }\r\n                    //Finished!\r\n                    else {\r\n                        return element.innerHTML;\r\n                    }\r\n                }\r\n            }\r\n            //No valid chunks produced\r\n            else {\r\n                //No valid chunks even when splitting by letter, time to move\r\n                //on to the next node\r\n                if (splitChar == '') {\r\n                    applyEllipsis(target, '');\r\n                    target = getLastChild(element);\r\n\r\n                    reset();\r\n                }\r\n            }\r\n\r\n            //If you get here it means still too big, let's keep truncating\r\n            if (opt.animate) {\r\n                setTimeout(function () {\r\n                    truncate(target, maxHeight);\r\n                }, opt.animate === true ? 10 : opt.animate);\r\n            }\r\n            else {\r\n                return truncate(target, maxHeight);\r\n            }\r\n        }\r\n\r\n        function applyEllipsis(elem, str) {\r\n            elem.nodeValue = str + opt.truncationChar;\r\n        }\r\n\r\n\r\n        // CONSTRUCTOR ________________________________________________________________\r\n\r\n        if (clampValue == 'auto') {\r\n            clampValue = getMaxLines();\r\n        }\r\n        else if (isCSSValue) {\r\n            clampValue = getMaxLines(parseInt(clampValue));\r\n        }\r\n\r\n        var clampedText;\r\n        if (supportsNativeClamp && opt.useNativeClamp) {\r\n            sty.overflow = 'hidden';\r\n            sty.textOverflow = 'ellipsis';\r\n            sty.webkitBoxOrient = 'vertical';\r\n            sty.display = '-webkit-box';\r\n            sty.webkitLineClamp = clampValue;\r\n\r\n            if (isCSSValue) {\r\n                sty.height = opt.clamp + 'px';\r\n            }\r\n        }\r\n        else {\r\n            var height = getMaxHeight(clampValue);\r\n            if (height <= element.clientHeight) {\r\n                clampedText = truncate(getLastChild(element), height);\r\n            }\r\n        }\r\n\r\n        return {\r\n            'original': originalText,\r\n            'clamped': clampedText\r\n        }\r\n    }\r\n\r\n    window.$clamp = clamp;\r\n})();","mainBrandLib = (function ($) {\r\n    return {\r\n\r\n        fakeClick: function (event, anchorObj) {\r\n           \r\n            if (anchorObj.click) {\r\n                anchorObj.click();\r\n            } else if (document.createEvent) {\r\n                if (event.target !== anchorObj) {\r\n                    var evt = document.createEvent(\"MouseEvents\");\r\n                    evt.initMouseEvent(\"click\", true, true, window,\r\n                        0, 0, 0, 0, 0, false, false, false, false, 0, null);\r\n                    var allowDefault = anchorObj.dispatchEvent(evt);\r\n                }\r\n            }\r\n        },\r\n\r\n        newsletterSubmit: function (frm) {\r\n            $(frm).find('.error').hide();\r\n            var isValid = $(\"#NewsletterEmail\").valid();\r\n            var errMessate = $(\"#NewsletterEmail\").data('val-regex');\r\n            if (isValid) {\r\n                $.post(frm.action, { NewsletterEmail: $(\"#NewsletterEmail\").val() }, function (res) {\r\n                    if (res.status === \"ok\") {\r\n                        $(frm).hide().next('.success').show();\r\n                    }\r\n                    else {\r\n                        $(frm).find('.error').show().text(res.message);\r\n                    }\r\n                });\r\n            }\r\n            else {\r\n                $(frm).find('.error').show().text(errMessate);\r\n            }\r\n\r\n            return false;\r\n        },\r\n\r\n        initAutoComplete: function (elId) {\r\n            var url = $(elId).data('url');\r\n\r\n            $(elId).typeahead({\r\n                hint: true,\r\n                highlight: true,\r\n                minLength: 1\r\n            },\r\n                {\r\n                    name: 'states',\r\n                    display: 'Name',\r\n                    limit: 9,\r\n                    source: function (query, process, processAsync) {\r\n                        return $.post(url, { key: query }, function (res) {\r\n                            return processAsync(res);\r\n                        });\r\n                    },\r\n                    templates: {\r\n                        suggestion: function (item) {\r\n                            var resTpl = '<div>'\r\n                                + '<span>' + item.Name + '</span>'\r\n                                //+ '<img src=\"' + item.Image + '\">'\r\n                                + '</div>';\r\n                            return resTpl;\r\n                        }\r\n                    }\r\n                });\r\n\r\n            $(elId).bind('typeahead:select', function (ev, item) {\r\n                location.href = item.Url;\r\n                return false;\r\n            });\r\n        },\r\n\r\n        removeClass: function (elem, bgWhite) {\r\n            elem.className = elem.className.replace(/(?:^|\\s)bgWhite(?!\\S)/g, '');\r\n        },\r\n\r\n        mapsSelector: function (latitude, longitude) {\r\n            var q = \"daddr=\" + latitude + \",\" + longitude + \"&amp;ll=\";\r\n            /* if we're on iOS, open in Apple Maps */\r\n            if (navigator.platform.indexOf(\"iPhone\") !== -1 ||\r\n                navigator.platform.indexOf(\"iPad\") !== -1 ||\r\n                navigator.platform.indexOf(\"iPod\") !== -1) {\r\n\r\n                window.open(\"maps://maps.google.com/maps/dir/?\" + q);\r\n            }\r\n            else { /* else use Google */\r\n                window.open(\"https://maps.google.com/maps/dir/?\" + q);\r\n            }\r\n        },\r\n\r\n        init: function () {\r\n            var self = this;\r\n            this.initAutoComplete(\"#SearchInput\");\r\n\r\n            var elem = document.getElementById('SearchInput');\r\n            if (elem) {\r\n                elem.addEventListener('focus', function () {\r\n                    if (this.value === '') {\r\n                        this.className += \" bgWhite\";\r\n                    }\r\n                });\r\n\r\n                elem.addEventListener('blur', function () {\r\n                    if (this.value === '') {\r\n                        self.removeClass(this, \"bgWhite\");\r\n                    }\r\n                });\r\n            }\r\n\r\n            $(\"a#btn-call-store\").on('click', function (event) {});\r\n\r\n            $(\"a#btn-map-store\").on('click', function (event) {\r\n                event.preventDefault();\r\n                var latitude = $(this).data(\"latitude\");\r\n                var longitude = $(this).data(\"longitude\");\r\n                self.mapsSelector(latitude, longitude);\r\n            });\r\n\r\n            $(\"a.menu-item-link\").on('click', function (event) {\r\n                var href = decodeURI($(this).attr(\"href\"));\r\n                href = href.slice(href.indexOf(\"#\")+1, href.length);\r\n                console.log(href);\r\n                var target = $(\"a[name='\" + href + \"']\")[0];\r\n                if (target) {\r\n                    self.fakeClick(event, target);\r\n                }\r\n                \r\n            });\r\n\r\n            $(document).ready(function () {\r\n                console.log(document.location.href);\r\n                var href = decodeURI(document.location.href);\r\n                href = href.slice(href.indexOf(\"#\") + 1, href.length);\r\n                var target = $(\"a[name='\" + href + \"']\")[0];\r\n                if (target) {\r\n                    self.fakeClick(event, target);\r\n                }\r\n            });\r\n        }\r\n    };\r\n})(jQuery);\r\n"]}