{"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 = '
'\r\n + '' + item.Name + ''\r\n //+ ''\r\n + '
';\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 + \"&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"]}