{"version":3,"file":"main-eizo.js","sources":["../../../node_modules/picturefill/dist/picturefill.js","../../../js/webcube-utils/utils.js","../../../js/globals.js","../../../js/webcube-base/document_binding.js","../../../js/webcube-base/message_handler.js","../../../js/webcube-base/message_sender.js","../../../node_modules/uuid/dist/esm-browser/max.js","../../../node_modules/uuid/dist/esm-browser/nil.js","../../../node_modules/uuid/dist/esm-browser/regex.js","../../../node_modules/uuid/dist/esm-browser/validate.js","../../../node_modules/uuid/dist/esm-browser/parse.js","../../../node_modules/uuid/dist/esm-browser/stringify.js","../../../node_modules/uuid/dist/esm-browser/rng.js","../../../node_modules/uuid/dist/esm-browser/v1.js","../../../node_modules/uuid/dist/esm-browser/v1ToV6.js","../../../node_modules/uuid/dist/esm-browser/md5.js","../../../node_modules/uuid/dist/esm-browser/v35.js","../../../node_modules/uuid/dist/esm-browser/v3.js","../../../node_modules/uuid/dist/esm-browser/native.js","../../../node_modules/uuid/dist/esm-browser/v4.js","../../../node_modules/uuid/dist/esm-browser/sha1.js","../../../node_modules/uuid/dist/esm-browser/v5.js","../../../node_modules/uuid/dist/esm-browser/v6.js","../../../node_modules/uuid/dist/esm-browser/v6ToV1.js","../../../node_modules/uuid/dist/esm-browser/v7.js","../../../node_modules/uuid/dist/esm-browser/version.js","../../../js/webcube-base/object.js","../../../js/webcube-base/object_factory.js","../../../js/webcube-base/main.js","../../../../../../simplecart/accounts/static_src/node_modules/jquery.cookie/jquery.cookie.js","../../../../../../simplecart/accounts/static_src/js/webcube-user-cookies/user_cookies.js","../../../../../../simplecart/extras/bulkorder/static_src/js/webcube-bulkorder/bulkorder.js","../../../../../../simplecart/extras/bulkorder/static_src/node_modules/jquery.cookie/jquery.cookie.js","../../../../../../simplecart/extras/bulkorder/static_src/js/webcube-bulkorder-replacements/bulkorder_replacements.js","../../../../../../simplecart/extras/klaviyo_tracker/static_src/node_modules/jquery.cookie/jquery.cookie.js","../../../../../../simplecart/extras/klaviyo_tracker/static_src/js/klaviyo_form/index.js","../../../../../../simplecart/extras/klaviyo_tracker/static_src/js/klaviyo_tracker/index.js","../../../../../../simplecart/payment/amazon/static_src/js/webcube-amazonpay/amazonpay.js","../../../../../../simplecart/payment/amazon/static_src/js/webcube-amazonpayview/amazonpayview.js","../../../../../../simplecart/payment/braintree/static_src/js/webcube-braintree/braintree.js","../../../../../../simplecart/payment/braintree/static_src/js/webcube-braintree-applepay/braintree_applepay.js","../../../../../../simplecart/payment/orbitals/static_src/js/webcube-orbital-applepay/orbital_applepay.js","../../../../../../simplecart/payment/orbitals/static_src/js/webcube-orbital-hpf/main.js","../../../../../../simplecart/payment/paypal/static_src/js/webcube-paypal/paypal.js","../../../../../../simplecart/payment/stripe/static_src/js/webcube-stripe/stripe.js","../../../../../../simplecart/payment/stripe/static_src/js/webcube-stripe-paymentrequest/stripe_payrq.js","../../../../../tag_manager/static_src/js/tag_manager_datalayer/main.js","../../../js/webcube-admin-basketsummary/basket_summary.js","../../../js/webcube-back-to-top/back-to-top.js","../../../js/webcube-product/product.js","../../../js/webcube-button-selector/button-selector.js","../../../js/webcube-checkout/checkout.js","../../../js/webcube-checkout-basketsummary/summary.js","../../../js/webcube-checkout-success/index.js","../../../js/webcube-checkoutstep/checkout_step.js","../../../js/webcube-checkoutstep-billing/billing.js","../../../js/webcube-checkoutstep-shipping/shipping.js","../../../js/webcube-checkoutstep-updateitems/update_items.js","../../../js/webcube-countrystate-autofill/index.js","../../../js/webcube-dealerlocator/dealer_locator.js","../../../js/webcube-debug/debug.js","../../../js/webcube-endless-scroll/endless.js","../../../js/webcube-endless-scroll/index.js","../../../js/webcube-footer-callout/footer-callout.js","../../../js/webcube-form-ajax/form_ajax.js","../../../node_modules/slick-carousel/slick/slick.js","../../../js/webcube-gallery/gallery.js","../../../js/webcube-general-modal/index.js","../../../js/webcube-graphicoption-selector/graphicoption-selector.js","../../../js/webcube-hide-faq-accordion/faq-accordion.js","../../../node_modules/jquery-lazyload/jquery.lazyload.js","../../../js/webcube-lazyload/index.js","../../../js/webcube-listing-tracker/main.js","../../../js/webcube-lookbook/lookbook.js","../../../js/webcube-mailto-form/main.js","../../../js/webcube-message-template/main.js","../../../js/webcube-minicart/minicart.js","../../../node_modules/fastclick/lib/fastclick.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.abide.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.accordion.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.alert.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.clearing.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.dropdown.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.equalizer.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.interchange.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.joyride.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.magellan.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.offcanvas.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.orbit.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.reveal.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.slider.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.tab.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.tooltip.js","../../../node_modules/zurb-foundation-5/js/foundation/foundation.topbar.js","../../../js/webcube-navigation/navigation.js","../../../js/webcube-oneclickadd/main.js","../../../js/webcube-overlay/overlay.js","../../../js/webcube-product-analytics/index.js","../../../js/webcube-productgallery/product_gallery.js","../../../js/webcube-productoption_form/productoption_form.js","../../../js/webcube-productgroup/productgroup.js","../../../js/webcube-promo-banner/index.js","../../../js/webcube-quickshop/quickshop.js","../../../js/webcube-rating/rating.js","../../../js/webcube-recentlyviewed/index.js","../../../js/webcube-slider/slider.js","../../../js/webcube-stafftoolbar/staff_toolbar.js","../../../js/webcube-upsell/upsell.js","../../../js/webcube-video/index.js","../../../js/webcube-videolazy/index.js","../../../js/bootstrap.js","../../../js/webcube-logger/logger.js","../../../js/main.js","../../../../../../../themes/eizo/eizo/static_src/js/main.js"],"sourcesContent":["/*! picturefill - v3.0.2 - 2016-02-12\n * https://scottjehl.github.io/picturefill/\n * Copyright (c) 2016 https://github.com/scottjehl/picturefill/blob/master/Authors.txt; Licensed MIT\n */\n/*! Gecko-Picture - v1.0\n * https://github.com/scottjehl/picturefill/tree/3.0/src/plugins/gecko-picture\n * Firefox's early picture implementation (prior to FF41) is static and does\n * not react to viewport changes. This tiny module fixes this.\n */\n(function(window) {\n\t/*jshint eqnull:true */\n\tvar ua = navigator.userAgent;\n\n\tif ( window.HTMLPictureElement && ((/ecko/).test(ua) && ua.match(/rv\\:(\\d+)/) && RegExp.$1 < 45) ) {\n\t\taddEventListener(\"resize\", (function() {\n\t\t\tvar timer;\n\n\t\t\tvar dummySrc = document.createElement(\"source\");\n\n\t\t\tvar fixRespimg = function(img) {\n\t\t\t\tvar source, sizes;\n\t\t\t\tvar picture = img.parentNode;\n\n\t\t\t\tif (picture.nodeName.toUpperCase() === \"PICTURE\") {\n\t\t\t\t\tsource = dummySrc.cloneNode();\n\n\t\t\t\t\tpicture.insertBefore(source, picture.firstElementChild);\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tpicture.removeChild(source);\n\t\t\t\t\t});\n\t\t\t\t} else if (!img._pfLastSize || img.offsetWidth > img._pfLastSize) {\n\t\t\t\t\timg._pfLastSize = img.offsetWidth;\n\t\t\t\t\tsizes = img.sizes;\n\t\t\t\t\timg.sizes += \",100vw\";\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\timg.sizes = sizes;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar findPictureImgs = function() {\n\t\t\t\tvar i;\n\t\t\t\tvar imgs = document.querySelectorAll(\"picture > img, img[srcset][sizes]\");\n\t\t\t\tfor (i = 0; i < imgs.length; i++) {\n\t\t\t\t\tfixRespimg(imgs[i]);\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar onResize = function() {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = setTimeout(findPictureImgs, 99);\n\t\t\t};\n\t\t\tvar mq = window.matchMedia && matchMedia(\"(orientation: landscape)\");\n\t\t\tvar init = function() {\n\t\t\t\tonResize();\n\n\t\t\t\tif (mq && mq.addListener) {\n\t\t\t\t\tmq.addListener(onResize);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdummySrc.srcset = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n\n\t\t\tif (/^[c|i]|d$/.test(document.readyState || \"\")) {\n\t\t\t\tinit();\n\t\t\t} else {\n\t\t\t\tdocument.addEventListener(\"DOMContentLoaded\", init);\n\t\t\t}\n\n\t\t\treturn onResize;\n\t\t})());\n\t}\n})(window);\n\n/*! Picturefill - v3.0.2\n * http://scottjehl.github.io/picturefill\n * Copyright (c) 2015 https://github.com/scottjehl/picturefill/blob/master/Authors.txt;\n *  License: MIT\n */\n\n(function( window, document, undefined ) {\n\t// Enable strict mode\n\t\"use strict\";\n\n\t// HTML shim|v it for old IE (IE9 will still need the HTML video tag workaround)\n\tdocument.createElement( \"picture\" );\n\n\tvar warn, eminpx, alwaysCheckWDescriptor, evalId;\n\t// local object for method references and testing exposure\n\tvar pf = {};\n\tvar isSupportTestReady = false;\n\tvar noop = function() {};\n\tvar image = document.createElement( \"img\" );\n\tvar getImgAttr = image.getAttribute;\n\tvar setImgAttr = image.setAttribute;\n\tvar removeImgAttr = image.removeAttribute;\n\tvar docElem = document.documentElement;\n\tvar types = {};\n\tvar cfg = {\n\t\t//resource selection:\n\t\talgorithm: \"\"\n\t};\n\tvar srcAttr = \"data-pfsrc\";\n\tvar srcsetAttr = srcAttr + \"set\";\n\t// ua sniffing is done for undetectable img loading features,\n\t// to do some non crucial perf optimizations\n\tvar ua = navigator.userAgent;\n\tvar supportAbort = (/rident/).test(ua) || ((/ecko/).test(ua) && ua.match(/rv\\:(\\d+)/) && RegExp.$1 > 35 );\n\tvar curSrcProp = \"currentSrc\";\n\tvar regWDesc = /\\s+\\+?\\d+(e\\d+)?w/;\n\tvar regSize = /(\\([^)]+\\))?\\s*(.+)/;\n\tvar setOptions = window.picturefillCFG;\n\t/**\n\t * Shortcut property for https://w3c.github.io/webappsec/specs/mixedcontent/#restricts-mixed-content ( for easy overriding in tests )\n\t */\n\t// baseStyle also used by getEmValue (i.e.: width: 1em is important)\n\tvar baseStyle = \"position:absolute;left:0;visibility:hidden;display:block;padding:0;border:none;font-size:1em;width:1em;overflow:hidden;clip:rect(0px, 0px, 0px, 0px)\";\n\tvar fsCss = \"font-size:100%!important;\";\n\tvar isVwDirty = true;\n\n\tvar cssCache = {};\n\tvar sizeLengthCache = {};\n\tvar DPR = window.devicePixelRatio;\n\tvar units = {\n\t\tpx: 1,\n\t\t\"in\": 96\n\t};\n\tvar anchor = document.createElement( \"a\" );\n\t/**\n\t * alreadyRun flag used for setOptions. is it true setOptions will reevaluate\n\t * @type {boolean}\n\t */\n\tvar alreadyRun = false;\n\n\t// Reusable, non-\"g\" Regexes\n\n\t// (Don't use \\s, to avoid matching non-breaking space.)\n\tvar regexLeadingSpaces = /^[ \\t\\n\\r\\u000c]+/,\n\t    regexLeadingCommasOrSpaces = /^[, \\t\\n\\r\\u000c]+/,\n\t    regexLeadingNotSpaces = /^[^ \\t\\n\\r\\u000c]+/,\n\t    regexTrailingCommas = /[,]+$/,\n\t    regexNonNegativeInteger = /^\\d+$/,\n\n\t    // ( Positive or negative or unsigned integers or decimals, without or without exponents.\n\t    // Must include at least one digit.\n\t    // According to spec tests any decimal point must be followed by a digit.\n\t    // No leading plus sign is allowed.)\n\t    // https://html.spec.whatwg.org/multipage/infrastructure.html#valid-floating-point-number\n\t    regexFloatingPoint = /^-?(?:[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/;\n\n\tvar on = function(obj, evt, fn, capture) {\n\t\tif ( obj.addEventListener ) {\n\t\t\tobj.addEventListener(evt, fn, capture || false);\n\t\t} else if ( obj.attachEvent ) {\n\t\t\tobj.attachEvent( \"on\" + evt, fn);\n\t\t}\n\t};\n\n\t/**\n\t * simple memoize function:\n\t */\n\n\tvar memoize = function(fn) {\n\t\tvar cache = {};\n\t\treturn function(input) {\n\t\t\tif ( !(input in cache) ) {\n\t\t\t\tcache[ input ] = fn(input);\n\t\t\t}\n\t\t\treturn cache[ input ];\n\t\t};\n\t};\n\n\t// UTILITY FUNCTIONS\n\n\t// Manual is faster than RegEx\n\t// http://jsperf.com/whitespace-character/5\n\tfunction isSpace(c) {\n\t\treturn (c === \"\\u0020\" || // space\n\t\t        c === \"\\u0009\" || // horizontal tab\n\t\t        c === \"\\u000A\" || // new line\n\t\t        c === \"\\u000C\" || // form feed\n\t\t        c === \"\\u000D\");  // carriage return\n\t}\n\n\t/**\n\t * gets a mediaquery and returns a boolean or gets a css length and returns a number\n\t * @param css mediaqueries or css length\n\t * @returns {boolean|number}\n\t *\n\t * based on: https://gist.github.com/jonathantneal/db4f77009b155f083738\n\t */\n\tvar evalCSS = (function() {\n\n\t\tvar regLength = /^([\\d\\.]+)(em|vw|px)$/;\n\t\tvar replace = function() {\n\t\t\tvar args = arguments, index = 0, string = args[0];\n\t\t\twhile (++index in args) {\n\t\t\t\tstring = string.replace(args[index], args[++index]);\n\t\t\t}\n\t\t\treturn string;\n\t\t};\n\n\t\tvar buildStr = memoize(function(css) {\n\n\t\t\treturn \"return \" + replace((css || \"\").toLowerCase(),\n\t\t\t\t// interpret `and`\n\t\t\t\t/\\band\\b/g, \"&&\",\n\n\t\t\t\t// interpret `,`\n\t\t\t\t/,/g, \"||\",\n\n\t\t\t\t// interpret `min-` as >=\n\t\t\t\t/min-([a-z-\\s]+):/g, \"e.$1>=\",\n\n\t\t\t\t// interpret `max-` as <=\n\t\t\t\t/max-([a-z-\\s]+):/g, \"e.$1<=\",\n\n\t\t\t\t//calc value\n\t\t\t\t/calc([^)]+)/g, \"($1)\",\n\n\t\t\t\t// interpret css values\n\t\t\t\t/(\\d+[\\.]*[\\d]*)([a-z]+)/g, \"($1 * e.$2)\",\n\t\t\t\t//make eval less evil\n\t\t\t\t/^(?!(e.[a-z]|[0-9\\.&=|><\\+\\-\\*\\(\\)\\/])).*/ig, \"\"\n\t\t\t) + \";\";\n\t\t});\n\n\t\treturn function(css, length) {\n\t\t\tvar parsedLength;\n\t\t\tif (!(css in cssCache)) {\n\t\t\t\tcssCache[css] = false;\n\t\t\t\tif (length && (parsedLength = css.match( regLength ))) {\n\t\t\t\t\tcssCache[css] = parsedLength[ 1 ] * units[parsedLength[ 2 ]];\n\t\t\t\t} else {\n\t\t\t\t\t/*jshint evil:true */\n\t\t\t\t\ttry{\n\t\t\t\t\t\tcssCache[css] = new Function(\"e\", buildStr(css))(units);\n\t\t\t\t\t} catch(e) {}\n\t\t\t\t\t/*jshint evil:false */\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cssCache[css];\n\t\t};\n\t})();\n\n\tvar setResolution = function( candidate, sizesattr ) {\n\t\tif ( candidate.w ) { // h = means height: || descriptor.type === 'h' do not handle yet...\n\t\t\tcandidate.cWidth = pf.calcListLength( sizesattr || \"100vw\" );\n\t\t\tcandidate.res = candidate.w / candidate.cWidth ;\n\t\t} else {\n\t\t\tcandidate.res = candidate.d;\n\t\t}\n\t\treturn candidate;\n\t};\n\n\t/**\n\t *\n\t * @param opt\n\t */\n\tvar picturefill = function( opt ) {\n\n\t\tif (!isSupportTestReady) {return;}\n\n\t\tvar elements, i, plen;\n\n\t\tvar options = opt || {};\n\n\t\tif ( options.elements && options.elements.nodeType === 1 ) {\n\t\t\tif ( options.elements.nodeName.toUpperCase() === \"IMG\" ) {\n\t\t\t\toptions.elements =  [ options.elements ];\n\t\t\t} else {\n\t\t\t\toptions.context = options.elements;\n\t\t\t\toptions.elements =  null;\n\t\t\t}\n\t\t}\n\n\t\telements = options.elements || pf.qsa( (options.context || document), ( options.reevaluate || options.reselect ) ? pf.sel : pf.selShort );\n\n\t\tif ( (plen = elements.length) ) {\n\n\t\t\tpf.setupRun( options );\n\t\t\talreadyRun = true;\n\n\t\t\t// Loop through all elements\n\t\t\tfor ( i = 0; i < plen; i++ ) {\n\t\t\t\tpf.fillImg(elements[ i ], options);\n\t\t\t}\n\n\t\t\tpf.teardownRun( options );\n\t\t}\n\t};\n\n\t/**\n\t * outputs a warning for the developer\n\t * @param {message}\n\t * @type {Function}\n\t */\n\twarn = ( window.console && console.warn ) ?\n\t\tfunction( message ) {\n\t\t\tconsole.warn( message );\n\t\t} :\n\t\tnoop\n\t;\n\n\tif ( !(curSrcProp in image) ) {\n\t\tcurSrcProp = \"src\";\n\t}\n\n\t// Add support for standard mime types.\n\ttypes[ \"image/jpeg\" ] = true;\n\ttypes[ \"image/gif\" ] = true;\n\ttypes[ \"image/png\" ] = true;\n\n\tfunction detectTypeSupport( type, typeUri ) {\n\t\t// based on Modernizr's lossless img-webp test\n\t\t// note: asynchronous\n\t\tvar image = new window.Image();\n\t\timage.onerror = function() {\n\t\t\ttypes[ type ] = false;\n\t\t\tpicturefill();\n\t\t};\n\t\timage.onload = function() {\n\t\t\ttypes[ type ] = image.width === 1;\n\t\t\tpicturefill();\n\t\t};\n\t\timage.src = typeUri;\n\t\treturn \"pending\";\n\t}\n\n\t// test svg support\n\ttypes[ \"image/svg+xml\" ] = document.implementation.hasFeature( \"http://www.w3.org/TR/SVG11/feature#Image\", \"1.1\" );\n\n\t/**\n\t * updates the internal vW property with the current viewport width in px\n\t */\n\tfunction updateMetrics() {\n\n\t\tisVwDirty = false;\n\t\tDPR = window.devicePixelRatio;\n\t\tcssCache = {};\n\t\tsizeLengthCache = {};\n\n\t\tpf.DPR = DPR || 1;\n\n\t\tunits.width = Math.max(window.innerWidth || 0, docElem.clientWidth);\n\t\tunits.height = Math.max(window.innerHeight || 0, docElem.clientHeight);\n\n\t\tunits.vw = units.width / 100;\n\t\tunits.vh = units.height / 100;\n\n\t\tevalId = [ units.height, units.width, DPR ].join(\"-\");\n\n\t\tunits.em = pf.getEmValue();\n\t\tunits.rem = units.em;\n\t}\n\n\tfunction chooseLowRes( lowerValue, higherValue, dprValue, isCached ) {\n\t\tvar bonusFactor, tooMuch, bonus, meanDensity;\n\n\t\t//experimental\n\t\tif (cfg.algorithm === \"saveData\" ){\n\t\t\tif ( lowerValue > 2.7 ) {\n\t\t\t\tmeanDensity = dprValue + 1;\n\t\t\t} else {\n\t\t\t\ttooMuch = higherValue - dprValue;\n\t\t\t\tbonusFactor = Math.pow(lowerValue - 0.6, 1.5);\n\n\t\t\t\tbonus = tooMuch * bonusFactor;\n\n\t\t\t\tif (isCached) {\n\t\t\t\t\tbonus += 0.1 * bonusFactor;\n\t\t\t\t}\n\n\t\t\t\tmeanDensity = lowerValue + bonus;\n\t\t\t}\n\t\t} else {\n\t\t\tmeanDensity = (dprValue > 1) ?\n\t\t\t\tMath.sqrt(lowerValue * higherValue) :\n\t\t\t\tlowerValue;\n\t\t}\n\n\t\treturn meanDensity > dprValue;\n\t}\n\n\tfunction applyBestCandidate( img ) {\n\t\tvar srcSetCandidates;\n\t\tvar matchingSet = pf.getSet( img );\n\t\tvar evaluated = false;\n\t\tif ( matchingSet !== \"pending\" ) {\n\t\t\tevaluated = evalId;\n\t\t\tif ( matchingSet ) {\n\t\t\t\tsrcSetCandidates = pf.setRes( matchingSet );\n\t\t\t\tpf.applySetCandidate( srcSetCandidates, img );\n\t\t\t}\n\t\t}\n\t\timg[ pf.ns ].evaled = evaluated;\n\t}\n\n\tfunction ascendingSort( a, b ) {\n\t\treturn a.res - b.res;\n\t}\n\n\tfunction setSrcToCur( img, src, set ) {\n\t\tvar candidate;\n\t\tif ( !set && src ) {\n\t\t\tset = img[ pf.ns ].sets;\n\t\t\tset = set && set[set.length - 1];\n\t\t}\n\n\t\tcandidate = getCandidateForSrc(src, set);\n\n\t\tif ( candidate ) {\n\t\t\tsrc = pf.makeUrl(src);\n\t\t\timg[ pf.ns ].curSrc = src;\n\t\t\timg[ pf.ns ].curCan = candidate;\n\n\t\t\tif ( !candidate.res ) {\n\t\t\t\tsetResolution( candidate, candidate.set.sizes );\n\t\t\t}\n\t\t}\n\t\treturn candidate;\n\t}\n\n\tfunction getCandidateForSrc( src, set ) {\n\t\tvar i, candidate, candidates;\n\t\tif ( src && set ) {\n\t\t\tcandidates = pf.parseSet( set );\n\t\t\tsrc = pf.makeUrl(src);\n\t\t\tfor ( i = 0; i < candidates.length; i++ ) {\n\t\t\t\tif ( src === pf.makeUrl(candidates[ i ].url) ) {\n\t\t\t\t\tcandidate = candidates[ i ];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn candidate;\n\t}\n\n\tfunction getAllSourceElements( picture, candidates ) {\n\t\tvar i, len, source, srcset;\n\n\t\t// SPEC mismatch intended for size and perf:\n\t\t// actually only source elements preceding the img should be used\n\t\t// also note: don't use qsa here, because IE8 sometimes doesn't like source as the key part in a selector\n\t\tvar sources = picture.getElementsByTagName( \"source\" );\n\n\t\tfor ( i = 0, len = sources.length; i < len; i++ ) {\n\t\t\tsource = sources[ i ];\n\t\t\tsource[ pf.ns ] = true;\n\t\t\tsrcset = source.getAttribute( \"srcset\" );\n\n\t\t\t// if source does not have a srcset attribute, skip\n\t\t\tif ( srcset ) {\n\t\t\t\tcandidates.push( {\n\t\t\t\t\tsrcset: srcset,\n\t\t\t\t\tmedia: source.getAttribute( \"media\" ),\n\t\t\t\t\ttype: source.getAttribute( \"type\" ),\n\t\t\t\t\tsizes: source.getAttribute( \"sizes\" )\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Srcset Parser\n\t * By Alex Bell |  MIT License\n\t *\n\t * @returns Array [{url: _, d: _, w: _, h:_, set:_(????)}, ...]\n\t *\n\t * Based super duper closely on the reference algorithm at:\n\t * https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-srcset-attribute\n\t */\n\n\t// 1. Let input be the value passed to this algorithm.\n\t// (TO-DO : Explain what \"set\" argument is here. Maybe choose a more\n\t// descriptive & more searchable name.  Since passing the \"set\" in really has\n\t// nothing to do with parsing proper, I would prefer this assignment eventually\n\t// go in an external fn.)\n\tfunction parseSrcset(input, set) {\n\n\t\tfunction collectCharacters(regEx) {\n\t\t\tvar chars,\n\t\t\t    match = regEx.exec(input.substring(pos));\n\t\t\tif (match) {\n\t\t\t\tchars = match[ 0 ];\n\t\t\t\tpos += chars.length;\n\t\t\t\treturn chars;\n\t\t\t}\n\t\t}\n\n\t\tvar inputLength = input.length,\n\t\t    url,\n\t\t    descriptors,\n\t\t    currentDescriptor,\n\t\t    state,\n\t\t    c,\n\n\t\t    // 2. Let position be a pointer into input, initially pointing at the start\n\t\t    //    of the string.\n\t\t    pos = 0,\n\n\t\t    // 3. Let candidates be an initially empty source set.\n\t\t    candidates = [];\n\n\t\t/**\n\t\t* Adds descriptor properties to a candidate, pushes to the candidates array\n\t\t* @return undefined\n\t\t*/\n\t\t// (Declared outside of the while loop so that it's only created once.\n\t\t// (This fn is defined before it is used, in order to pass JSHINT.\n\t\t// Unfortunately this breaks the sequencing of the spec comments. :/ )\n\t\tfunction parseDescriptors() {\n\n\t\t\t// 9. Descriptor parser: Let error be no.\n\t\t\tvar pError = false,\n\n\t\t\t// 10. Let width be absent.\n\t\t\t// 11. Let density be absent.\n\t\t\t// 12. Let future-compat-h be absent. (We're implementing it now as h)\n\t\t\t    w, d, h, i,\n\t\t\t    candidate = {},\n\t\t\t    desc, lastChar, value, intVal, floatVal;\n\n\t\t\t// 13. For each descriptor in descriptors, run the appropriate set of steps\n\t\t\t// from the following list:\n\t\t\tfor (i = 0 ; i < descriptors.length; i++) {\n\t\t\t\tdesc = descriptors[ i ];\n\n\t\t\t\tlastChar = desc[ desc.length - 1 ];\n\t\t\t\tvalue = desc.substring(0, desc.length - 1);\n\t\t\t\tintVal = parseInt(value, 10);\n\t\t\t\tfloatVal = parseFloat(value);\n\n\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t// a U+0077 LATIN SMALL LETTER W character\n\t\t\t\tif (regexNonNegativeInteger.test(value) && (lastChar === \"w\")) {\n\n\t\t\t\t\t// If width and density are not both absent, then let error be yes.\n\t\t\t\t\tif (w || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes.\n\t\t\t\t\t// Otherwise, let width be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {w = intVal;}\n\n\t\t\t\t// If the descriptor consists of a valid floating-point number followed by\n\t\t\t\t// a U+0078 LATIN SMALL LETTER X character\n\t\t\t\t} else if (regexFloatingPoint.test(value) && (lastChar === \"x\")) {\n\n\t\t\t\t\t// If width, density and future-compat-h are not all absent, then let error\n\t\t\t\t\t// be yes.\n\t\t\t\t\tif (w || d || h) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing floating-point number values to the descriptor.\n\t\t\t\t\t// If the result is less than zero, let error be yes. Otherwise, let density\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (floatVal < 0) {pError = true;} else {d = floatVal;}\n\n\t\t\t\t// If the descriptor consists of a valid non-negative integer followed by\n\t\t\t\t// a U+0068 LATIN SMALL LETTER H character\n\t\t\t\t} else if (regexNonNegativeInteger.test(value) && (lastChar === \"h\")) {\n\n\t\t\t\t\t// If height and density are not both absent, then let error be yes.\n\t\t\t\t\tif (h || d) {pError = true;}\n\n\t\t\t\t\t// Apply the rules for parsing non-negative integers to the descriptor.\n\t\t\t\t\t// If the result is zero, let error be yes. Otherwise, let future-compat-h\n\t\t\t\t\t// be the result.\n\t\t\t\t\tif (intVal === 0) {pError = true;} else {h = intVal;}\n\n\t\t\t\t// Anything else, Let error be yes.\n\t\t\t\t} else {pError = true;}\n\t\t\t} // (close step 13 for loop)\n\n\t\t\t// 15. If error is still no, then append a new image source to candidates whose\n\t\t\t// URL is url, associated with a width width if not absent and a pixel\n\t\t\t// density density if not absent. Otherwise, there is a parse error.\n\t\t\tif (!pError) {\n\t\t\t\tcandidate.url = url;\n\n\t\t\t\tif (w) { candidate.w = w;}\n\t\t\t\tif (d) { candidate.d = d;}\n\t\t\t\tif (h) { candidate.h = h;}\n\t\t\t\tif (!h && !d && !w) {candidate.d = 1;}\n\t\t\t\tif (candidate.d === 1) {set.has1x = true;}\n\t\t\t\tcandidate.set = set;\n\n\t\t\t\tcandidates.push(candidate);\n\t\t\t}\n\t\t} // (close parseDescriptors fn)\n\n\t\t/**\n\t\t* Tokenizes descriptor properties prior to parsing\n\t\t* Returns undefined.\n\t\t* (Again, this fn is defined before it is used, in order to pass JSHINT.\n\t\t* Unfortunately this breaks the logical sequencing of the spec comments. :/ )\n\t\t*/\n\t\tfunction tokenize() {\n\n\t\t\t// 8.1. Descriptor tokeniser: Skip whitespace\n\t\t\tcollectCharacters(regexLeadingSpaces);\n\n\t\t\t// 8.2. Let current descriptor be the empty string.\n\t\t\tcurrentDescriptor = \"\";\n\n\t\t\t// 8.3. Let state be in descriptor.\n\t\t\tstate = \"in descriptor\";\n\n\t\t\twhile (true) {\n\n\t\t\t\t// 8.4. Let c be the character at position.\n\t\t\t\tc = input.charAt(pos);\n\n\t\t\t\t//  Do the following depending on the value of state.\n\t\t\t\t//  For the purpose of this step, \"EOF\" is a special character representing\n\t\t\t\t//  that position is past the end of input.\n\n\t\t\t\t// In descriptor\n\t\t\t\tif (state === \"in descriptor\") {\n\t\t\t\t\t// Do the following, depending on the value of c:\n\n\t\t\t\t  // Space character\n\t\t\t\t  // If current descriptor is not empty, append current descriptor to\n\t\t\t\t  // descriptors and let current descriptor be the empty string.\n\t\t\t\t  // Set state to after descriptor.\n\t\t\t\t\tif (isSpace(c)) {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t\tcurrentDescriptor = \"\";\n\t\t\t\t\t\t\tstate = \"after descriptor\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// U+002C COMMA (,)\n\t\t\t\t\t// Advance position to the next character in input. If current descriptor\n\t\t\t\t\t// is not empty, append current descriptor to descriptors. Jump to the step\n\t\t\t\t\t// labeled descriptor parser.\n\t\t\t\t\t} else if (c === \",\") {\n\t\t\t\t\t\tpos += 1;\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// U+0028 LEFT PARENTHESIS (()\n\t\t\t\t\t// Append c to current descriptor. Set state to in parens.\n\t\t\t\t\t} else if (c === \"\\u0028\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in parens\";\n\n\t\t\t\t\t// EOF\n\t\t\t\t\t// If current descriptor is not empty, append current descriptor to\n\t\t\t\t\t// descriptors. Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tif (currentDescriptor) {\n\t\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Anything else\n\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\t\t\t\t// (end \"in descriptor\"\n\n\t\t\t\t// In parens\n\t\t\t\t} else if (state === \"in parens\") {\n\n\t\t\t\t\t// U+0029 RIGHT PARENTHESIS ())\n\t\t\t\t\t// Append c to current descriptor. Set state to in descriptor.\n\t\t\t\t\tif (c === \")\") {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t\tstate = \"in descriptor\";\n\n\t\t\t\t\t// EOF\n\t\t\t\t\t// Append current descriptor to descriptors. Jump to the step labeled\n\t\t\t\t\t// descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tdescriptors.push(currentDescriptor);\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Anything else\n\t\t\t\t\t// Append c to current descriptor.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentDescriptor = currentDescriptor + c;\n\t\t\t\t\t}\n\n\t\t\t\t// After descriptor\n\t\t\t\t} else if (state === \"after descriptor\") {\n\n\t\t\t\t\t// Do the following, depending on the value of c:\n\t\t\t\t\t// Space character: Stay in this state.\n\t\t\t\t\tif (isSpace(c)) {\n\n\t\t\t\t\t// EOF: Jump to the step labeled descriptor parser.\n\t\t\t\t\t} else if (c === \"\") {\n\t\t\t\t\t\tparseDescriptors();\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Anything else\n\t\t\t\t\t// Set state to in descriptor. Set position to the previous character in input.\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstate = \"in descriptor\";\n\t\t\t\t\t\tpos -= 1;\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Advance position to the next character in input.\n\t\t\t\tpos += 1;\n\n\t\t\t// Repeat this step.\n\t\t\t} // (close while true loop)\n\t\t}\n\n\t\t// 4. Splitting loop: Collect a sequence of characters that are space\n\t\t//    characters or U+002C COMMA characters. If any U+002C COMMA characters\n\t\t//    were collected, that is a parse error.\n\t\twhile (true) {\n\t\t\tcollectCharacters(regexLeadingCommasOrSpaces);\n\n\t\t\t// 5. If position is past the end of input, return candidates and abort these steps.\n\t\t\tif (pos >= inputLength) {\n\t\t\t\treturn candidates; // (we're done, this is the sole return path)\n\t\t\t}\n\n\t\t\t// 6. Collect a sequence of characters that are not space characters,\n\t\t\t//    and let that be url.\n\t\t\turl = collectCharacters(regexLeadingNotSpaces);\n\n\t\t\t// 7. Let descriptors be a new empty list.\n\t\t\tdescriptors = [];\n\n\t\t\t// 8. If url ends with a U+002C COMMA character (,), follow these substeps:\n\t\t\t//\t\t(1). Remove all trailing U+002C COMMA characters from url. If this removed\n\t\t\t//         more than one character, that is a parse error.\n\t\t\tif (url.slice(-1) === \",\") {\n\t\t\t\turl = url.replace(regexTrailingCommas, \"\");\n\t\t\t\t// (Jump ahead to step 9 to skip tokenization and just push the candidate).\n\t\t\t\tparseDescriptors();\n\n\t\t\t//\tOtherwise, follow these substeps:\n\t\t\t} else {\n\t\t\t\ttokenize();\n\t\t\t} // (close else of step 8)\n\n\t\t// 16. Return to the step labeled splitting loop.\n\t\t} // (Close of big while loop.)\n\t}\n\n\t/*\n\t * Sizes Parser\n\t *\n\t * By Alex Bell |  MIT License\n\t *\n\t * Non-strict but accurate and lightweight JS Parser for the string value <img sizes=\"here\">\n\t *\n\t * Reference algorithm at:\n\t * https://html.spec.whatwg.org/multipage/embedded-content.html#parse-a-sizes-attribute\n\t *\n\t * Most comments are copied in directly from the spec\n\t * (except for comments in parens).\n\t *\n\t * Grammar is:\n\t * <source-size-list> = <source-size># [ , <source-size-value> ]? | <source-size-value>\n\t * <source-size> = <media-condition> <source-size-value>\n\t * <source-size-value> = <length>\n\t * http://www.w3.org/html/wg/drafts/html/master/embedded-content.html#attr-img-sizes\n\t *\n\t * E.g. \"(max-width: 30em) 100vw, (max-width: 50em) 70vw, 100vw\"\n\t * or \"(min-width: 30em), calc(30vw - 15px)\" or just \"30vw\"\n\t *\n\t * Returns the first valid <css-length> with a media condition that evaluates to true,\n\t * or \"100vw\" if all valid media conditions evaluate to false.\n\t *\n\t */\n\n\tfunction parseSizes(strValue) {\n\n\t\t// (Percentage CSS lengths are not allowed in this case, to avoid confusion:\n\t\t// https://html.spec.whatwg.org/multipage/embedded-content.html#valid-source-size-list\n\t\t// CSS allows a single optional plus or minus sign:\n\t\t// http://www.w3.org/TR/CSS2/syndata.html#numbers\n\t\t// CSS is ASCII case-insensitive:\n\t\t// http://www.w3.org/TR/CSS2/syndata.html#characters )\n\t\t// Spec allows exponential notation for <number> type:\n\t\t// http://dev.w3.org/csswg/css-values/#numbers\n\t\tvar regexCssLengthWithUnits = /^(?:[+-]?[0-9]+|[0-9]*\\.[0-9]+)(?:[eE][+-]?[0-9]+)?(?:ch|cm|em|ex|in|mm|pc|pt|px|rem|vh|vmin|vmax|vw)$/i;\n\n\t\t// (This is a quick and lenient test. Because of optional unlimited-depth internal\n\t\t// grouping parens and strict spacing rules, this could get very complicated.)\n\t\tvar regexCssCalc = /^calc\\((?:[0-9a-z \\.\\+\\-\\*\\/\\(\\)]+)\\)$/i;\n\n\t\tvar i;\n\t\tvar unparsedSizesList;\n\t\tvar unparsedSizesListLength;\n\t\tvar unparsedSize;\n\t\tvar lastComponentValue;\n\t\tvar size;\n\n\t\t// UTILITY FUNCTIONS\n\n\t\t//  (Toy CSS parser. The goals here are:\n\t\t//  1) expansive test coverage without the weight of a full CSS parser.\n\t\t//  2) Avoiding regex wherever convenient.\n\t\t//  Quick tests: http://jsfiddle.net/gtntL4gr/3/\n\t\t//  Returns an array of arrays.)\n\t\tfunction parseComponentValues(str) {\n\t\t\tvar chrctr;\n\t\t\tvar component = \"\";\n\t\t\tvar componentArray = [];\n\t\t\tvar listArray = [];\n\t\t\tvar parenDepth = 0;\n\t\t\tvar pos = 0;\n\t\t\tvar inComment = false;\n\n\t\t\tfunction pushComponent() {\n\t\t\t\tif (component) {\n\t\t\t\t\tcomponentArray.push(component);\n\t\t\t\t\tcomponent = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction pushComponentArray() {\n\t\t\t\tif (componentArray[0]) {\n\t\t\t\t\tlistArray.push(componentArray);\n\t\t\t\t\tcomponentArray = [];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// (Loop forwards from the beginning of the string.)\n\t\t\twhile (true) {\n\t\t\t\tchrctr = str.charAt(pos);\n\n\t\t\t\tif (chrctr === \"\") { // ( End of string reached.)\n\t\t\t\t\tpushComponent();\n\t\t\t\t\tpushComponentArray();\n\t\t\t\t\treturn listArray;\n\t\t\t\t} else if (inComment) {\n\t\t\t\t\tif ((chrctr === \"*\") && (str[pos + 1] === \"/\")) { // (At end of a comment.)\n\t\t\t\t\t\tinComment = false;\n\t\t\t\t\t\tpos += 2;\n\t\t\t\t\t\tpushComponent();\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpos += 1; // (Skip all characters inside comments.)\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t} else if (isSpace(chrctr)) {\n\t\t\t\t\t// (If previous character in loop was also a space, or if\n\t\t\t\t\t// at the beginning of the string, do not add space char to\n\t\t\t\t\t// component.)\n\t\t\t\t\tif ( (str.charAt(pos - 1) && isSpace( str.charAt(pos - 1) ) ) || !component ) {\n\t\t\t\t\t\tpos += 1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (parenDepth === 0) {\n\t\t\t\t\t\tpushComponent();\n\t\t\t\t\t\tpos +=1;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// (Replace any space character with a plain space for legibility.)\n\t\t\t\t\t\tchrctr = \" \";\n\t\t\t\t\t}\n\t\t\t\t} else if (chrctr === \"(\") {\n\t\t\t\t\tparenDepth += 1;\n\t\t\t\t} else if (chrctr === \")\") {\n\t\t\t\t\tparenDepth -= 1;\n\t\t\t\t} else if (chrctr === \",\") {\n\t\t\t\t\tpushComponent();\n\t\t\t\t\tpushComponentArray();\n\t\t\t\t\tpos += 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if ( (chrctr === \"/\") && (str.charAt(pos + 1) === \"*\") ) {\n\t\t\t\t\tinComment = true;\n\t\t\t\t\tpos += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcomponent = component + chrctr;\n\t\t\t\tpos += 1;\n\t\t\t}\n\t\t}\n\n\t\tfunction isValidNonNegativeSourceSizeValue(s) {\n\t\t\tif (regexCssLengthWithUnits.test(s) && (parseFloat(s) >= 0)) {return true;}\n\t\t\tif (regexCssCalc.test(s)) {return true;}\n\t\t\t// ( http://www.w3.org/TR/CSS2/syndata.html#numbers says:\n\t\t\t// \"-0 is equivalent to 0 and is not a negative number.\" which means that\n\t\t\t// unitless zero and unitless negative zero must be accepted as special cases.)\n\t\t\tif ((s === \"0\") || (s === \"-0\") || (s === \"+0\")) {return true;}\n\t\t\treturn false;\n\t\t}\n\n\t\t// When asked to parse a sizes attribute from an element, parse a\n\t\t// comma-separated list of component values from the value of the element's\n\t\t// sizes attribute (or the empty string, if the attribute is absent), and let\n\t\t// unparsed sizes list be the result.\n\t\t// http://dev.w3.org/csswg/css-syntax/#parse-comma-separated-list-of-component-values\n\n\t\tunparsedSizesList = parseComponentValues(strValue);\n\t\tunparsedSizesListLength = unparsedSizesList.length;\n\n\t\t// For each unparsed size in unparsed sizes list:\n\t\tfor (i = 0; i < unparsedSizesListLength; i++) {\n\t\t\tunparsedSize = unparsedSizesList[i];\n\n\t\t\t// 1. Remove all consecutive <whitespace-token>s from the end of unparsed size.\n\t\t\t// ( parseComponentValues() already omits spaces outside of parens. )\n\n\t\t\t// If unparsed size is now empty, that is a parse error; continue to the next\n\t\t\t// iteration of this algorithm.\n\t\t\t// ( parseComponentValues() won't push an empty array. )\n\n\t\t\t// 2. If the last component value in unparsed size is a valid non-negative\n\t\t\t// <source-size-value>, let size be its value and remove the component value\n\t\t\t// from unparsed size. Any CSS function other than the calc() function is\n\t\t\t// invalid. Otherwise, there is a parse error; continue to the next iteration\n\t\t\t// of this algorithm.\n\t\t\t// http://dev.w3.org/csswg/css-syntax/#parse-component-value\n\t\t\tlastComponentValue = unparsedSize[unparsedSize.length - 1];\n\n\t\t\tif (isValidNonNegativeSourceSizeValue(lastComponentValue)) {\n\t\t\t\tsize = lastComponentValue;\n\t\t\t\tunparsedSize.pop();\n\t\t\t} else {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// 3. Remove all consecutive <whitespace-token>s from the end of unparsed\n\t\t\t// size. If unparsed size is now empty, return size and exit this algorithm.\n\t\t\t// If this was not the last item in unparsed sizes list, that is a parse error.\n\t\t\tif (unparsedSize.length === 0) {\n\t\t\t\treturn size;\n\t\t\t}\n\n\t\t\t// 4. Parse the remaining component values in unparsed size as a\n\t\t\t// <media-condition>. If it does not parse correctly, or it does parse\n\t\t\t// correctly but the <media-condition> evaluates to false, continue to the\n\t\t\t// next iteration of this algorithm.\n\t\t\t// (Parsing all possible compound media conditions in JS is heavy, complicated,\n\t\t\t// and the payoff is unclear. Is there ever an situation where the\n\t\t\t// media condition parses incorrectly but still somehow evaluates to true?\n\t\t\t// Can we just rely on the browser/polyfill to do it?)\n\t\t\tunparsedSize = unparsedSize.join(\" \");\n\t\t\tif (!(pf.matchesMedia( unparsedSize ) ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// 5. Return size and exit this algorithm.\n\t\t\treturn size;\n\t\t}\n\n\t\t// If the above algorithm exhausts unparsed sizes list without returning a\n\t\t// size value, return 100vw.\n\t\treturn \"100vw\";\n\t}\n\n\t// namespace\n\tpf.ns = (\"pf\" + new Date().getTime()).substr(0, 9);\n\n\t// srcset support test\n\tpf.supSrcset = \"srcset\" in image;\n\tpf.supSizes = \"sizes\" in image;\n\tpf.supPicture = !!window.HTMLPictureElement;\n\n\t// UC browser does claim to support srcset and picture, but not sizes,\n\t// this extended test reveals the browser does support nothing\n\tif (pf.supSrcset && pf.supPicture && !pf.supSizes) {\n\t\t(function(image2) {\n\t\t\timage.srcset = \"data:,a\";\n\t\t\timage2.src = \"data:,a\";\n\t\t\tpf.supSrcset = image.complete === image2.complete;\n\t\t\tpf.supPicture = pf.supSrcset && pf.supPicture;\n\t\t})(document.createElement(\"img\"));\n\t}\n\n\t// Safari9 has basic support for sizes, but does't expose the `sizes` idl attribute\n\tif (pf.supSrcset && !pf.supSizes) {\n\n\t\t(function() {\n\t\t\tvar width2 = \"data:image/gif;base64,R0lGODlhAgABAPAAAP///wAAACH5BAAAAAAALAAAAAACAAEAAAICBAoAOw==\";\n\t\t\tvar width1 = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n\t\t\tvar img = document.createElement(\"img\");\n\t\t\tvar test = function() {\n\t\t\t\tvar width = img.width;\n\n\t\t\t\tif (width === 2) {\n\t\t\t\t\tpf.supSizes = true;\n\t\t\t\t}\n\n\t\t\t\talwaysCheckWDescriptor = pf.supSrcset && !pf.supSizes;\n\n\t\t\t\tisSupportTestReady = true;\n\t\t\t\t// force async\n\t\t\t\tsetTimeout(picturefill);\n\t\t\t};\n\n\t\t\timg.onload = test;\n\t\t\timg.onerror = test;\n\t\t\timg.setAttribute(\"sizes\", \"9px\");\n\n\t\t\timg.srcset = width1 + \" 1w,\" + width2 + \" 9w\";\n\t\t\timg.src = width1;\n\t\t})();\n\n\t} else {\n\t\tisSupportTestReady = true;\n\t}\n\n\t// using pf.qsa instead of dom traversing does scale much better,\n\t// especially on sites mixing responsive and non-responsive images\n\tpf.selShort = \"picture>img,img[srcset]\";\n\tpf.sel = pf.selShort;\n\tpf.cfg = cfg;\n\n\t/**\n\t * Shortcut property for `devicePixelRatio` ( for easy overriding in tests )\n\t */\n\tpf.DPR = (DPR  || 1 );\n\tpf.u = units;\n\n\t// container of supported mime types that one might need to qualify before using\n\tpf.types =  types;\n\n\tpf.setSize = noop;\n\n\t/**\n\t * Gets a string and returns the absolute URL\n\t * @param src\n\t * @returns {String} absolute URL\n\t */\n\n\tpf.makeUrl = memoize(function(src) {\n\t\tanchor.href = src;\n\t\treturn anchor.href;\n\t});\n\n\t/**\n\t * Gets a DOM element or document and a selctor and returns the found matches\n\t * Can be extended with jQuery/Sizzle for IE7 support\n\t * @param context\n\t * @param sel\n\t * @returns {NodeList|Array}\n\t */\n\tpf.qsa = function(context, sel) {\n\t\treturn ( \"querySelector\" in context ) ? context.querySelectorAll(sel) : [];\n\t};\n\n\t/**\n\t * Shortcut method for matchMedia ( for easy overriding in tests )\n\t * wether native or pf.mMQ is used will be decided lazy on first call\n\t * @returns {boolean}\n\t */\n\tpf.matchesMedia = function() {\n\t\tif ( window.matchMedia && (matchMedia( \"(min-width: 0.1em)\" ) || {}).matches ) {\n\t\t\tpf.matchesMedia = function( media ) {\n\t\t\t\treturn !media || ( matchMedia( media ).matches );\n\t\t\t};\n\t\t} else {\n\t\t\tpf.matchesMedia = pf.mMQ;\n\t\t}\n\n\t\treturn pf.matchesMedia.apply( this, arguments );\n\t};\n\n\t/**\n\t * A simplified matchMedia implementation for IE8 and IE9\n\t * handles only min-width/max-width with px or em values\n\t * @param media\n\t * @returns {boolean}\n\t */\n\tpf.mMQ = function( media ) {\n\t\treturn media ? evalCSS(media) : true;\n\t};\n\n\t/**\n\t * Returns the calculated length in css pixel from the given sourceSizeValue\n\t * http://dev.w3.org/csswg/css-values-3/#length-value\n\t * intended Spec mismatches:\n\t * * Does not check for invalid use of CSS functions\n\t * * Does handle a computed length of 0 the same as a negative and therefore invalid value\n\t * @param sourceSizeValue\n\t * @returns {Number}\n\t */\n\tpf.calcLength = function( sourceSizeValue ) {\n\n\t\tvar value = evalCSS(sourceSizeValue, true) || false;\n\t\tif (value < 0) {\n\t\t\tvalue = false;\n\t\t}\n\n\t\treturn value;\n\t};\n\n\t/**\n\t * Takes a type string and checks if its supported\n\t */\n\n\tpf.supportsType = function( type ) {\n\t\treturn ( type ) ? types[ type ] : true;\n\t};\n\n\t/**\n\t * Parses a sourceSize into mediaCondition (media) and sourceSizeValue (length)\n\t * @param sourceSizeStr\n\t * @returns {*}\n\t */\n\tpf.parseSize = memoize(function( sourceSizeStr ) {\n\t\tvar match = ( sourceSizeStr || \"\" ).match(regSize);\n\t\treturn {\n\t\t\tmedia: match && match[1],\n\t\t\tlength: match && match[2]\n\t\t};\n\t});\n\n\tpf.parseSet = function( set ) {\n\t\tif ( !set.cands ) {\n\t\t\tset.cands = parseSrcset(set.srcset, set);\n\t\t}\n\t\treturn set.cands;\n\t};\n\n\t/**\n\t * returns 1em in css px for html/body default size\n\t * function taken from respondjs\n\t * @returns {*|number}\n\t */\n\tpf.getEmValue = function() {\n\t\tvar body;\n\t\tif ( !eminpx && (body = document.body) ) {\n\t\t\tvar div = document.createElement( \"div\" ),\n\t\t\t\toriginalHTMLCSS = docElem.style.cssText,\n\t\t\t\toriginalBodyCSS = body.style.cssText;\n\n\t\t\tdiv.style.cssText = baseStyle;\n\n\t\t\t// 1em in a media query is the value of the default font size of the browser\n\t\t\t// reset docElem and body to ensure the correct value is returned\n\t\t\tdocElem.style.cssText = fsCss;\n\t\t\tbody.style.cssText = fsCss;\n\n\t\t\tbody.appendChild( div );\n\t\t\teminpx = div.offsetWidth;\n\t\t\tbody.removeChild( div );\n\n\t\t\t//also update eminpx before returning\n\t\t\teminpx = parseFloat( eminpx, 10 );\n\n\t\t\t// restore the original values\n\t\t\tdocElem.style.cssText = originalHTMLCSS;\n\t\t\tbody.style.cssText = originalBodyCSS;\n\n\t\t}\n\t\treturn eminpx || 16;\n\t};\n\n\t/**\n\t * Takes a string of sizes and returns the width in pixels as a number\n\t */\n\tpf.calcListLength = function( sourceSizeListStr ) {\n\t\t// Split up source size list, ie ( max-width: 30em ) 100%, ( max-width: 50em ) 50%, 33%\n\t\t//\n\t\t//                           or (min-width:30em) calc(30% - 15px)\n\t\tif ( !(sourceSizeListStr in sizeLengthCache) || cfg.uT ) {\n\t\t\tvar winningLength = pf.calcLength( parseSizes( sourceSizeListStr ) );\n\n\t\t\tsizeLengthCache[ sourceSizeListStr ] = !winningLength ? units.width : winningLength;\n\t\t}\n\n\t\treturn sizeLengthCache[ sourceSizeListStr ];\n\t};\n\n\t/**\n\t * Takes a candidate object with a srcset property in the form of url/\n\t * ex. \"images/pic-medium.png 1x, images/pic-medium-2x.png 2x\" or\n\t *     \"images/pic-medium.png 400w, images/pic-medium-2x.png 800w\" or\n\t *     \"images/pic-small.png\"\n\t * Get an array of image candidates in the form of\n\t *      {url: \"/foo/bar.png\", resolution: 1}\n\t * where resolution is http://dev.w3.org/csswg/css-values-3/#resolution-value\n\t * If sizes is specified, res is calculated\n\t */\n\tpf.setRes = function( set ) {\n\t\tvar candidates;\n\t\tif ( set ) {\n\n\t\t\tcandidates = pf.parseSet( set );\n\n\t\t\tfor ( var i = 0, len = candidates.length; i < len; i++ ) {\n\t\t\t\tsetResolution( candidates[ i ], set.sizes );\n\t\t\t}\n\t\t}\n\t\treturn candidates;\n\t};\n\n\tpf.setRes.res = setResolution;\n\n\tpf.applySetCandidate = function( candidates, img ) {\n\t\tif ( !candidates.length ) {return;}\n\t\tvar candidate,\n\t\t\ti,\n\t\t\tj,\n\t\t\tlength,\n\t\t\tbestCandidate,\n\t\t\tcurSrc,\n\t\t\tcurCan,\n\t\t\tcandidateSrc,\n\t\t\tabortCurSrc;\n\n\t\tvar imageData = img[ pf.ns ];\n\t\tvar dpr = pf.DPR;\n\n\t\tcurSrc = imageData.curSrc || img[curSrcProp];\n\n\t\tcurCan = imageData.curCan || setSrcToCur(img, curSrc, candidates[0].set);\n\n\t\t// if we have a current source, we might either become lazy or give this source some advantage\n\t\tif ( curCan && curCan.set === candidates[ 0 ].set ) {\n\n\t\t\t// if browser can abort image request and the image has a higher pixel density than needed\n\t\t\t// and this image isn't downloaded yet, we skip next part and try to save bandwidth\n\t\t\tabortCurSrc = (supportAbort && !img.complete && curCan.res - 0.1 > dpr);\n\n\t\t\tif ( !abortCurSrc ) {\n\t\t\t\tcurCan.cached = true;\n\n\t\t\t\t// if current candidate is \"best\", \"better\" or \"okay\",\n\t\t\t\t// set it to bestCandidate\n\t\t\t\tif ( curCan.res >= dpr ) {\n\t\t\t\t\tbestCandidate = curCan;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( !bestCandidate ) {\n\n\t\t\tcandidates.sort( ascendingSort );\n\n\t\t\tlength = candidates.length;\n\t\t\tbestCandidate = candidates[ length - 1 ];\n\n\t\t\tfor ( i = 0; i < length; i++ ) {\n\t\t\t\tcandidate = candidates[ i ];\n\t\t\t\tif ( candidate.res >= dpr ) {\n\t\t\t\t\tj = i - 1;\n\n\t\t\t\t\t// we have found the perfect candidate,\n\t\t\t\t\t// but let's improve this a little bit with some assumptions ;-)\n\t\t\t\t\tif (candidates[ j ] &&\n\t\t\t\t\t\t(abortCurSrc || curSrc !== pf.makeUrl( candidate.url )) &&\n\t\t\t\t\t\tchooseLowRes(candidates[ j ].res, candidate.res, dpr, candidates[ j ].cached)) {\n\n\t\t\t\t\t\tbestCandidate = candidates[ j ];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbestCandidate = candidate;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( bestCandidate ) {\n\n\t\t\tcandidateSrc = pf.makeUrl( bestCandidate.url );\n\n\t\t\timageData.curSrc = candidateSrc;\n\t\t\timageData.curCan = bestCandidate;\n\n\t\t\tif ( candidateSrc !== curSrc ) {\n\t\t\t\tpf.setSrc( img, bestCandidate );\n\t\t\t}\n\t\t\tpf.setSize( img );\n\t\t}\n\t};\n\n\tpf.setSrc = function( img, bestCandidate ) {\n\t\tvar origWidth;\n\t\timg.src = bestCandidate.url;\n\n\t\t// although this is a specific Safari issue, we don't want to take too much different code paths\n\t\tif ( bestCandidate.set.type === \"image/svg+xml\" ) {\n\t\t\torigWidth = img.style.width;\n\t\t\timg.style.width = (img.offsetWidth + 1) + \"px\";\n\n\t\t\t// next line only should trigger a repaint\n\t\t\t// if... is only done to trick dead code removal\n\t\t\tif ( img.offsetWidth + 1 ) {\n\t\t\t\timg.style.width = origWidth;\n\t\t\t}\n\t\t}\n\t};\n\n\tpf.getSet = function( img ) {\n\t\tvar i, set, supportsType;\n\t\tvar match = false;\n\t\tvar sets = img [ pf.ns ].sets;\n\n\t\tfor ( i = 0; i < sets.length && !match; i++ ) {\n\t\t\tset = sets[i];\n\n\t\t\tif ( !set.srcset || !pf.matchesMedia( set.media ) || !(supportsType = pf.supportsType( set.type )) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( supportsType === \"pending\" ) {\n\t\t\t\tset = supportsType;\n\t\t\t}\n\n\t\t\tmatch = set;\n\t\t\tbreak;\n\t\t}\n\n\t\treturn match;\n\t};\n\n\tpf.parseSets = function( element, parent, options ) {\n\t\tvar srcsetAttribute, imageSet, isWDescripor, srcsetParsed;\n\n\t\tvar hasPicture = parent && parent.nodeName.toUpperCase() === \"PICTURE\";\n\t\tvar imageData = element[ pf.ns ];\n\n\t\tif ( imageData.src === undefined || options.src ) {\n\t\t\timageData.src = getImgAttr.call( element, \"src\" );\n\t\t\tif ( imageData.src ) {\n\t\t\t\tsetImgAttr.call( element, srcAttr, imageData.src );\n\t\t\t} else {\n\t\t\t\tremoveImgAttr.call( element, srcAttr );\n\t\t\t}\n\t\t}\n\n\t\tif ( imageData.srcset === undefined || options.srcset || !pf.supSrcset || element.srcset ) {\n\t\t\tsrcsetAttribute = getImgAttr.call( element, \"srcset\" );\n\t\t\timageData.srcset = srcsetAttribute;\n\t\t\tsrcsetParsed = true;\n\t\t}\n\n\t\timageData.sets = [];\n\n\t\tif ( hasPicture ) {\n\t\t\timageData.pic = true;\n\t\t\tgetAllSourceElements( parent, imageData.sets );\n\t\t}\n\n\t\tif ( imageData.srcset ) {\n\t\t\timageSet = {\n\t\t\t\tsrcset: imageData.srcset,\n\t\t\t\tsizes: getImgAttr.call( element, \"sizes\" )\n\t\t\t};\n\n\t\t\timageData.sets.push( imageSet );\n\n\t\t\tisWDescripor = (alwaysCheckWDescriptor || imageData.src) && regWDesc.test(imageData.srcset || \"\");\n\n\t\t\t// add normal src as candidate, if source has no w descriptor\n\t\t\tif ( !isWDescripor && imageData.src && !getCandidateForSrc(imageData.src, imageSet) && !imageSet.has1x ) {\n\t\t\t\timageSet.srcset += \", \" + imageData.src;\n\t\t\t\timageSet.cands.push({\n\t\t\t\t\turl: imageData.src,\n\t\t\t\t\td: 1,\n\t\t\t\t\tset: imageSet\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else if ( imageData.src ) {\n\t\t\timageData.sets.push( {\n\t\t\t\tsrcset: imageData.src,\n\t\t\t\tsizes: null\n\t\t\t} );\n\t\t}\n\n\t\timageData.curCan = null;\n\t\timageData.curSrc = undefined;\n\n\t\t// if img has picture or the srcset was removed or has a srcset and does not support srcset at all\n\t\t// or has a w descriptor (and does not support sizes) set support to false to evaluate\n\t\timageData.supported = !( hasPicture || ( imageSet && !pf.supSrcset ) || (isWDescripor && !pf.supSizes) );\n\n\t\tif ( srcsetParsed && pf.supSrcset && !imageData.supported ) {\n\t\t\tif ( srcsetAttribute ) {\n\t\t\t\tsetImgAttr.call( element, srcsetAttr, srcsetAttribute );\n\t\t\t\telement.srcset = \"\";\n\t\t\t} else {\n\t\t\t\tremoveImgAttr.call( element, srcsetAttr );\n\t\t\t}\n\t\t}\n\n\t\tif (imageData.supported && !imageData.srcset && ((!imageData.src && element.src) ||  element.src !== pf.makeUrl(imageData.src))) {\n\t\t\tif (imageData.src === null) {\n\t\t\t\telement.removeAttribute(\"src\");\n\t\t\t} else {\n\t\t\t\telement.src = imageData.src;\n\t\t\t}\n\t\t}\n\n\t\timageData.parsed = true;\n\t};\n\n\tpf.fillImg = function(element, options) {\n\t\tvar imageData;\n\t\tvar extreme = options.reselect || options.reevaluate;\n\n\t\t// expando for caching data on the img\n\t\tif ( !element[ pf.ns ] ) {\n\t\t\telement[ pf.ns ] = {};\n\t\t}\n\n\t\timageData = element[ pf.ns ];\n\n\t\t// if the element has already been evaluated, skip it\n\t\t// unless `options.reevaluate` is set to true ( this, for example,\n\t\t// is set to true when running `picturefill` on `resize` ).\n\t\tif ( !extreme && imageData.evaled === evalId ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !imageData.parsed || options.reevaluate ) {\n\t\t\tpf.parseSets( element, element.parentNode, options );\n\t\t}\n\n\t\tif ( !imageData.supported ) {\n\t\t\tapplyBestCandidate( element );\n\t\t} else {\n\t\t\timageData.evaled = evalId;\n\t\t}\n\t};\n\n\tpf.setupRun = function() {\n\t\tif ( !alreadyRun || isVwDirty || (DPR !== window.devicePixelRatio) ) {\n\t\t\tupdateMetrics();\n\t\t}\n\t};\n\n\t// If picture is supported, well, that's awesome.\n\tif ( pf.supPicture ) {\n\t\tpicturefill = noop;\n\t\tpf.fillImg = noop;\n\t} else {\n\n\t\t // Set up picture polyfill by polling the document\n\t\t(function() {\n\t\t\tvar isDomReady;\n\t\t\tvar regReady = window.attachEvent ? /d$|^c/ : /d$|^c|^i/;\n\n\t\t\tvar run = function() {\n\t\t\t\tvar readyState = document.readyState || \"\";\n\n\t\t\t\ttimerId = setTimeout(run, readyState === \"loading\" ? 200 :  999);\n\t\t\t\tif ( document.body ) {\n\t\t\t\t\tpf.fillImgs();\n\t\t\t\t\tisDomReady = isDomReady || regReady.test(readyState);\n\t\t\t\t\tif ( isDomReady ) {\n\t\t\t\t\t\tclearTimeout( timerId );\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar timerId = setTimeout(run, document.body ? 9 : 99);\n\n\t\t\t// Also attach picturefill on resize and readystatechange\n\t\t\t// http://modernjavascript.blogspot.com/2013/08/building-better-debounce.html\n\t\t\tvar debounce = function(func, wait) {\n\t\t\t\tvar timeout, timestamp;\n\t\t\t\tvar later = function() {\n\t\t\t\t\tvar last = (new Date()) - timestamp;\n\n\t\t\t\t\tif (last < wait) {\n\t\t\t\t\t\ttimeout = setTimeout(later, wait - last);\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttimeout = null;\n\t\t\t\t\t\tfunc();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\treturn function() {\n\t\t\t\t\ttimestamp = new Date();\n\n\t\t\t\t\tif (!timeout) {\n\t\t\t\t\t\ttimeout = setTimeout(later, wait);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\t\t\tvar lastClientWidth = docElem.clientHeight;\n\t\t\tvar onResize = function() {\n\t\t\t\tisVwDirty = Math.max(window.innerWidth || 0, docElem.clientWidth) !== units.width || docElem.clientHeight !== lastClientWidth;\n\t\t\t\tlastClientWidth = docElem.clientHeight;\n\t\t\t\tif ( isVwDirty ) {\n\t\t\t\t\tpf.fillImgs();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\ton( window, \"resize\", debounce(onResize, 99 ) );\n\t\t\ton( document, \"readystatechange\", run );\n\t\t})();\n\t}\n\n\tpf.picturefill = picturefill;\n\t//use this internally for easy monkey patching/performance testing\n\tpf.fillImgs = picturefill;\n\tpf.teardownRun = noop;\n\n\t/* expose methods for testing */\n\tpicturefill._ = pf;\n\n\twindow.picturefillCFG = {\n\t\tpf: pf,\n\t\tpush: function(args) {\n\t\t\tvar name = args.shift();\n\t\t\tif (typeof pf[name] === \"function\") {\n\t\t\t\tpf[name].apply(pf, args);\n\t\t\t} else {\n\t\t\t\tcfg[name] = args[0];\n\t\t\t\tif (alreadyRun) {\n\t\t\t\t\tpf.fillImgs( { reselect: true } );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\twhile (setOptions && setOptions.length) {\n\t\twindow.picturefillCFG.push(setOptions.shift());\n\t}\n\n\t/* expose picturefill */\n\twindow.picturefill = picturefill;\n\n\t/* expose picturefill */\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// CommonJS, just export\n\t\tmodule.exports = picturefill;\n\t} else if ( typeof define === \"function\" && define.amd ) {\n\t\t// AMD support\n\t\tdefine( \"picturefill\", function() { return picturefill; } );\n\t}\n\n\t// IE8 evals this sync, so it must be the last thing we do\n\tif ( !pf.supPicture ) {\n\t\ttypes[ \"image/webp\" ] = detectTypeSupport(\"image/webp\", \"data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA==\" );\n\t}\n\n} )( window, document );\n","/*** Basic JS Utility Functions ***/\nvar $ = require(\"jquery\");\nvar utils = {};\n\n// http://stackoverflow.com/questions/8486099/how-do-i-parse-a-url-query-parameters-in-javascript\nutils.getJsonFromUrl = function (hashBased) {\n  var query;\n  if (hashBased) {\n    var pos = location.href.indexOf(\"?\");\n    if (pos == -1) return [];\n    query = location.href.substr(pos + 1);\n  } else {\n    query = location.search.substr(1);\n  }\n  var result = {};\n  query.split(\"&\").forEach(function (part) {\n    if (!part) return;\n    part = part.split(\"+\").join(\" \"); // replace every + with space, regexp-free version\n    var eq = part.indexOf(\"=\");\n    var key = eq > -1 ? part.substr(0, eq) : part;\n    var val = eq > -1 ? decodeURIComponent(part.substr(eq + 1)) : \"\";\n    var from = key.indexOf(\"[\");\n    if (from == -1) result[decodeURIComponent(key)] = val;\n    else {\n      var to = key.indexOf(\"]\");\n      var index = decodeURIComponent(key.substring(from + 1, to));\n      key = decodeURIComponent(key.substring(0, from));\n      if (!result[key]) result[key] = [];\n      if (!index) result[key].push(val);\n      else result[key][index] = val;\n    }\n  });\n  return result;\n};\n\nutils.modal = function (content) {\n  var modal_content =\n    content +\n    '<a class=\"close-reveal-modal\" arial-label=\"Close\"><i class=\"fi-x\"></i></a>';\n  $(\"#general-modal\").html(modal_content);\n  $(\"#general-modal\").foundation(\"reveal\", \"open\");\n};\n\nmodule.exports = utils;\n","if (typeof window.WebCube === \"undefined\") {\n  window.WebCube = {};\n}\n\n// we only do this to accomodate site.js, which\n// does not know about jQuery on its own.\nwindow.jQuery = require(\"jquery\");\nwindow.$ = window.jQuery;\nrequire(\"picturefill\");\nwindow.WebCube.utils = require(\"webcube-utils\");\n","var _ = require(\"lodash\");\n\nfunction WebCubeDocumentBinding(doc, object_registry) {\n  this.doc = doc;\n  this.objects = object_registry || {};\n  this.elements = doc.getElementsByTagName(\"*\");\n  this.applyBindings = this.applyBindings.bind(this);\n  this.registerFactory = this.registerFactory.bind(this);\n}\n\n/**\n * @param key the 'binding' we search for in the document.\n *\n * @param factory the object factory we will use when creating an object for\n * the bound element.\n **/\nWebCubeDocumentBinding.prototype.registerFactory = function (factory) {\n  this.objects[factory.name] = factory;\n};\n\nWebCubeDocumentBinding.prototype.applyBindings = function (element) {\n  var elements;\n  if (typeof element !== \"undefined\") {\n    elements = element.getElementsByTagName(\"*\");\n  } else {\n    elements = this.elements;\n  }\n  // I want a list of instantiated objects, for each bound element.\n  // Bound elements are ones that have wc-object.\n  return _.flatten(\n    _.filter(elements, function (element) {\n      var v = _.some(element.attributes, function (a) {\n        return a.name == \"wc-object\";\n      });\n      return v;\n    }).map(\n      function (element) {\n        var modules = element.getAttribute(\"wc-object\") || \"\";\n        var module = \"\";\n        var factory = null;\n        modules = modules.split(\" \");\n        for (var i = 0, length = modules.length; i < length; i++) {\n          module = modules[i];\n          factory = this.objects[module];\n          if (factory) {\n            var obj = factory.build([[element]]);\n            obj[0].wc_type = module;\n            element.webcube_object = obj[0];\n            return obj;\n          } else {\n            if (typeof console !== \"undefined\" && console.log !== \"undefined\") {\n              console.log(\"module \" + module + \" not registered\");\n            }\n          }\n        }\n        return null;\n      }.bind(this)\n    )\n  );\n};\n\nWebCubeDocumentBinding.prototype.help = function (object_name) {\n  if (object_name === undefined) {\n    console.log(\"Web Cube Document Objects (wc-object=)\");\n    console.log(\n      \"Usage: WebCube.document_binding.help('slider') where 'slider' is the wc-object= name\"\n    );\n    var object_names = [];\n    for (var k in this.objects) {\n      object_names.push(k);\n    }\n    console.log(\"Available Bindings:\", object_names);\n  } else if (this.objects[object_name] === undefined) {\n    console.log(\"Unknown object: \", object_name);\n  } else {\n    var o = this.objects[object_name];\n    console.log(\"wc-object=\" + object_name);\n    var hr = \"============================================\";\n    var hr2 = hr.replace(/=/g, \"-\");\n\n    var doc = hr + \"\\n\";\n\n    if (o.factory_class._doc !== undefined) {\n      var d = o.factory_class._doc;\n      doc += d.title + \"\\n\" + d.description + \"\\n\";\n\n      doc += \"\\n\" + hr2 + \"\\n\";\n\n      for (k in d.data_params) {\n        doc +=\n          \"\\t data-\" +\n          k +\n          \"(\" +\n          d.data_params[k].type +\n          \") \" +\n          d.data_params[k].desc +\n          \"\\n\";\n      }\n    } else {\n      doc += \"No Doc String\\n\";\n    }\n\n    var pubfuncs = \"\";\n    for (var f in o.factory_class.prototype) {\n      if (f == \"constructor\" || f == \"log\" || f == \"send\" || f == \"dispatch\") {\n        continue;\n      }\n      var args = o.factory_class.prototype[f]\n        .toString()\n        .match(/function\\s.*?\\(([^)]*)\\)/)[1];\n      pubfuncs += f + \"(\" + args + \")\\n\";\n    }\n    if (pubfuncs) {\n      doc += \"\\n\" + hr2 + \"\\nPublic Functions:\\n\" + pubfuncs;\n    }\n\n    doc += \"\\n\" + hr + \"\\n\";\n    console.log(doc);\n  }\n};\n\nWebCubeDocumentBinding.prototype.applyBindingsAndInit = function (element) {\n  var new_bindings = this.applyBindings(element);\n  for (var i = 0; i < new_bindings.length; i++) {\n    if (new_bindings[i] != null && !new_bindings[i]._initialized) {\n      //console.log(\"initializing a \"+new_bindings[i].wc_type+\" (\"+new_bindings[i].mailbox+\")\");\n      new_bindings[i].initialize();\n      new_bindings[i]._initialized = true;\n    }\n  }\n  return new_bindings;\n};\n\nWebCubeDocumentBinding.prototype.unbind = function (wc_object) {\n  var t = wc_object.wc_type;\n  if (t == undefined) {\n    console.error(\"Unable to unbind webcube object, not wc_type:\", wc_object);\n    return;\n  }\n  if (this.objects[t] == undefined) {\n    console.error(\n      \"Unable to unbind webcube object, wc_type '\" +\n        t +\n        \"'is not in binding objects:\",\n      wc_object\n    );\n    return;\n  }\n  // There should only be one instance per id\n  for (var i = 0; i < this.objects[t].objects.length; i++) {\n    if (this.objects[t].objects[i].id == wc_object.id) {\n      //console.log(\"unbinding a \"+wc_object.wc_type+\" (\"+wc_object.mailbox+\")\");\n      this.objects[t].objects.splice(i, 1);\n      return;\n    }\n  }\n};\n\nmodule.exports = WebCubeDocumentBinding;\n","const registeredHandlers = [];\n\nfunction addHandler(target, callback, t) {\n  var addFunction = function (ev) {\n    callback.apply(t, [ev.details]);\n  };\n  window.addEventListener(\"webcubeEvent\" + target, addFunction);\n  registeredHandlers.push({\n    event: \"webcubeEvent\" + target,\n    sender: t,\n    addFunction: addFunction,\n  });\n}\n\nfunction removeHandler(sender) {\n  for (var i in registeredHandlers) {\n    var i_obj = registeredHandlers[i];\n    if (sender == i_obj.sender) {\n      window.removeEventListener(i_obj.event, i_obj.addFunction);\n    }\n  }\n}\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  exports.add = addHandler;\n  exports.remove = removeHandler;\n}\n","function send(target, msg, sender) { \n    if (typeof sender === 'undefined') { \n        sender = null;\n    }\n    var ev = document.createEvent(\"Event\");\n    ev.initEvent('webcubeEvent'+target, true, true);\n    ev.details = {\n        address: target,\n        sender: sender,\n        payload: msg\n    };\n    document.dispatchEvent(ev);\n    if( typeof window.debug_listener !== \"undefined\" ){\n        window.debug_listener(ev);\n    }\n}\n\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') { \n    module.exports = send\n}\n","export default 'ffffffff-ffff-ffff-ffff-ffffffffffff';\n","export default '00000000-0000-0000-0000-000000000000';\n","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;\n","import REGEX from './regex.js';\nfunction validate(uuid) {\n    return typeof uuid === 'string' && REGEX.test(uuid);\n}\nexport default validate;\n","import validate from './validate.js';\nfunction parse(uuid) {\n    if (!validate(uuid)) {\n        throw TypeError('Invalid UUID');\n    }\n    let v;\n    return Uint8Array.of((v = parseInt(uuid.slice(0, 8), 16)) >>> 24, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff, (v = parseInt(uuid.slice(9, 13), 16)) >>> 8, v & 0xff, (v = parseInt(uuid.slice(14, 18), 16)) >>> 8, v & 0xff, (v = parseInt(uuid.slice(19, 23), 16)) >>> 8, v & 0xff, ((v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000) & 0xff, (v / 0x100000000) & 0xff, (v >>> 24) & 0xff, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff);\n}\nexport default parse;\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n    byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n    return (byteToHex[arr[offset + 0]] +\n        byteToHex[arr[offset + 1]] +\n        byteToHex[arr[offset + 2]] +\n        byteToHex[arr[offset + 3]] +\n        '-' +\n        byteToHex[arr[offset + 4]] +\n        byteToHex[arr[offset + 5]] +\n        '-' +\n        byteToHex[arr[offset + 6]] +\n        byteToHex[arr[offset + 7]] +\n        '-' +\n        byteToHex[arr[offset + 8]] +\n        byteToHex[arr[offset + 9]] +\n        '-' +\n        byteToHex[arr[offset + 10]] +\n        byteToHex[arr[offset + 11]] +\n        byteToHex[arr[offset + 12]] +\n        byteToHex[arr[offset + 13]] +\n        byteToHex[arr[offset + 14]] +\n        byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n    const uuid = unsafeStringify(arr, offset);\n    if (!validate(uuid)) {\n        throw TypeError('Stringified UUID is invalid');\n    }\n    return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n    if (!getRandomValues) {\n        if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n            throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n        }\n        getRandomValues = crypto.getRandomValues.bind(crypto);\n    }\n    return getRandomValues(rnds8);\n}\n","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nconst _state = {};\nfunction v1(options, buf, offset) {\n    let bytes;\n    const isV6 = options?._v6 ?? false;\n    if (options) {\n        const optionsKeys = Object.keys(options);\n        if (optionsKeys.length === 1 && optionsKeys[0] === '_v6') {\n            options = undefined;\n        }\n    }\n    if (options) {\n        bytes = v1Bytes(options.random ?? options.rng?.() ?? rng(), options.msecs, options.nsecs, options.clockseq, options.node, buf, offset);\n    }\n    else {\n        const now = Date.now();\n        const rnds = rng();\n        updateV1State(_state, now, rnds);\n        bytes = v1Bytes(rnds, _state.msecs, _state.nsecs, isV6 ? undefined : _state.clockseq, isV6 ? undefined : _state.node, buf, offset);\n    }\n    return buf ?? unsafeStringify(bytes);\n}\nexport function updateV1State(state, now, rnds) {\n    state.msecs ??= -Infinity;\n    state.nsecs ??= 0;\n    if (now === state.msecs) {\n        state.nsecs++;\n        if (state.nsecs >= 10000) {\n            state.node = undefined;\n            state.nsecs = 0;\n        }\n    }\n    else if (now > state.msecs) {\n        state.nsecs = 0;\n    }\n    else if (now < state.msecs) {\n        state.node = undefined;\n    }\n    if (!state.node) {\n        state.node = rnds.slice(10, 16);\n        state.node[0] |= 0x01;\n        state.clockseq = ((rnds[8] << 8) | rnds[9]) & 0x3fff;\n    }\n    state.msecs = now;\n    return state;\n}\nfunction v1Bytes(rnds, msecs, nsecs, clockseq, node, buf, offset = 0) {\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    if (!buf) {\n        buf = new Uint8Array(16);\n        offset = 0;\n    }\n    else {\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n    }\n    msecs ??= Date.now();\n    nsecs ??= 0;\n    clockseq ??= ((rnds[8] << 8) | rnds[9]) & 0x3fff;\n    node ??= rnds.slice(10, 16);\n    msecs += 12219292800000;\n    const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n    buf[offset++] = (tl >>> 24) & 0xff;\n    buf[offset++] = (tl >>> 16) & 0xff;\n    buf[offset++] = (tl >>> 8) & 0xff;\n    buf[offset++] = tl & 0xff;\n    const tmh = ((msecs / 0x100000000) * 10000) & 0xfffffff;\n    buf[offset++] = (tmh >>> 8) & 0xff;\n    buf[offset++] = tmh & 0xff;\n    buf[offset++] = ((tmh >>> 24) & 0xf) | 0x10;\n    buf[offset++] = (tmh >>> 16) & 0xff;\n    buf[offset++] = (clockseq >>> 8) | 0x80;\n    buf[offset++] = clockseq & 0xff;\n    for (let n = 0; n < 6; ++n) {\n        buf[offset++] = node[n];\n    }\n    return buf;\n}\nexport default v1;\n","import parse from './parse.js';\nimport { unsafeStringify } from './stringify.js';\nexport default function v1ToV6(uuid) {\n    const v1Bytes = typeof uuid === 'string' ? parse(uuid) : uuid;\n    const v6Bytes = _v1ToV6(v1Bytes);\n    return typeof uuid === 'string' ? unsafeStringify(v6Bytes) : v6Bytes;\n}\nfunction _v1ToV6(v1Bytes) {\n    return Uint8Array.of(((v1Bytes[6] & 0x0f) << 4) | ((v1Bytes[7] >> 4) & 0x0f), ((v1Bytes[7] & 0x0f) << 4) | ((v1Bytes[4] & 0xf0) >> 4), ((v1Bytes[4] & 0x0f) << 4) | ((v1Bytes[5] & 0xf0) >> 4), ((v1Bytes[5] & 0x0f) << 4) | ((v1Bytes[0] & 0xf0) >> 4), ((v1Bytes[0] & 0x0f) << 4) | ((v1Bytes[1] & 0xf0) >> 4), ((v1Bytes[1] & 0x0f) << 4) | ((v1Bytes[2] & 0xf0) >> 4), 0x60 | (v1Bytes[2] & 0x0f), v1Bytes[3], v1Bytes[8], v1Bytes[9], v1Bytes[10], v1Bytes[11], v1Bytes[12], v1Bytes[13], v1Bytes[14], v1Bytes[15]);\n}\n","function md5(bytes) {\n    const words = uint8ToUint32(bytes);\n    const md5Bytes = wordsToMd5(words, bytes.length * 8);\n    return uint32ToUint8(md5Bytes);\n}\nfunction uint32ToUint8(input) {\n    const bytes = new Uint8Array(input.length * 4);\n    for (let i = 0; i < input.length * 4; i++) {\n        bytes[i] = (input[i >> 2] >>> ((i % 4) * 8)) & 0xff;\n    }\n    return bytes;\n}\nfunction getOutputLength(inputLength8) {\n    return (((inputLength8 + 64) >>> 9) << 4) + 14 + 1;\n}\nfunction wordsToMd5(x, len) {\n    const xpad = new Uint32Array(getOutputLength(len)).fill(0);\n    xpad.set(x);\n    xpad[len >> 5] |= 0x80 << len % 32;\n    xpad[xpad.length - 1] = len;\n    x = xpad;\n    let a = 1732584193;\n    let b = -271733879;\n    let c = -1732584194;\n    let d = 271733878;\n    for (let i = 0; i < x.length; i += 16) {\n        const olda = a;\n        const oldb = b;\n        const oldc = c;\n        const oldd = d;\n        a = md5ff(a, b, c, d, x[i], 7, -680876936);\n        d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n        c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n        b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n        a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n        d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n        c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n        b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n        a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n        d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n        c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n        b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n        a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n        d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n        c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n        b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n        a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n        d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n        c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n        b = md5gg(b, c, d, a, x[i], 20, -373897302);\n        a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n        d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n        c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n        b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n        a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n        d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n        c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n        b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n        a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n        d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n        c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n        b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n        a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n        d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n        c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n        b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n        a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n        d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n        c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n        b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n        a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n        d = md5hh(d, a, b, c, x[i], 11, -358537222);\n        c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n        b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n        a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n        d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n        c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n        b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n        a = md5ii(a, b, c, d, x[i], 6, -198630844);\n        d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n        c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n        b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n        a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n        d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n        c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n        b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n        a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n        d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n        c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n        b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n        a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n        d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n        c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n        b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n        a = safeAdd(a, olda);\n        b = safeAdd(b, oldb);\n        c = safeAdd(c, oldc);\n        d = safeAdd(d, oldd);\n    }\n    return Uint32Array.of(a, b, c, d);\n}\nfunction uint8ToUint32(input) {\n    if (input.length === 0) {\n        return new Uint32Array();\n    }\n    const output = new Uint32Array(getOutputLength(input.length * 8)).fill(0);\n    for (let i = 0; i < input.length; i++) {\n        output[i >> 2] |= (input[i] & 0xff) << ((i % 4) * 8);\n    }\n    return output;\n}\nfunction safeAdd(x, y) {\n    const lsw = (x & 0xffff) + (y & 0xffff);\n    const msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n    return (msw << 16) | (lsw & 0xffff);\n}\nfunction bitRotateLeft(num, cnt) {\n    return (num << cnt) | (num >>> (32 - cnt));\n}\nfunction md5cmn(q, a, b, x, s, t) {\n    return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n    return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n    return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n    return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n    return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\nexport default md5;\n","import parse from './parse.js';\nimport { unsafeStringify } from './stringify.js';\nexport function stringToBytes(str) {\n    str = unescape(encodeURIComponent(str));\n    const bytes = new Uint8Array(str.length);\n    for (let i = 0; i < str.length; ++i) {\n        bytes[i] = str.charCodeAt(i);\n    }\n    return bytes;\n}\nexport const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';\nexport const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';\nexport default function v35(version, hash, value, namespace, buf, offset) {\n    const valueBytes = typeof value === 'string' ? stringToBytes(value) : value;\n    const namespaceBytes = typeof namespace === 'string' ? parse(namespace) : namespace;\n    if (typeof namespace === 'string') {\n        namespace = parse(namespace);\n    }\n    if (namespace?.length !== 16) {\n        throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');\n    }\n    let bytes = new Uint8Array(16 + valueBytes.length);\n    bytes.set(namespaceBytes);\n    bytes.set(valueBytes, namespaceBytes.length);\n    bytes = hash(bytes);\n    bytes[6] = (bytes[6] & 0x0f) | version;\n    bytes[8] = (bytes[8] & 0x3f) | 0x80;\n    if (buf) {\n        offset = offset || 0;\n        for (let i = 0; i < 16; ++i) {\n            buf[offset + i] = bytes[i];\n        }\n        return buf;\n    }\n    return unsafeStringify(bytes);\n}\n","import md5 from './md5.js';\nimport v35, { DNS, URL } from './v35.js';\nexport { DNS, URL } from './v35.js';\nfunction v3(value, namespace, buf, offset) {\n    return v35(0x30, md5, value, namespace, buf, offset);\n}\nv3.DNS = DNS;\nv3.URL = URL;\nexport default v3;\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n    if (native.randomUUID && !buf && !options) {\n        return native.randomUUID();\n    }\n    options = options || {};\n    const rnds = options.random ?? options.rng?.() ?? rng();\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    rnds[6] = (rnds[6] & 0x0f) | 0x40;\n    rnds[8] = (rnds[8] & 0x3f) | 0x80;\n    if (buf) {\n        offset = offset || 0;\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n        for (let i = 0; i < 16; ++i) {\n            buf[offset + i] = rnds[i];\n        }\n        return buf;\n    }\n    return unsafeStringify(rnds);\n}\nexport default v4;\n","function f(s, x, y, z) {\n    switch (s) {\n        case 0:\n            return (x & y) ^ (~x & z);\n        case 1:\n            return x ^ y ^ z;\n        case 2:\n            return (x & y) ^ (x & z) ^ (y & z);\n        case 3:\n            return x ^ y ^ z;\n    }\n}\nfunction ROTL(x, n) {\n    return (x << n) | (x >>> (32 - n));\n}\nfunction sha1(bytes) {\n    const K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6];\n    const H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n    const newBytes = new Uint8Array(bytes.length + 1);\n    newBytes.set(bytes);\n    newBytes[bytes.length] = 0x80;\n    bytes = newBytes;\n    const l = bytes.length / 4 + 2;\n    const N = Math.ceil(l / 16);\n    const M = new Array(N);\n    for (let i = 0; i < N; ++i) {\n        const arr = new Uint32Array(16);\n        for (let j = 0; j < 16; ++j) {\n            arr[j] =\n                (bytes[i * 64 + j * 4] << 24) |\n                    (bytes[i * 64 + j * 4 + 1] << 16) |\n                    (bytes[i * 64 + j * 4 + 2] << 8) |\n                    bytes[i * 64 + j * 4 + 3];\n        }\n        M[i] = arr;\n    }\n    M[N - 1][14] = ((bytes.length - 1) * 8) / Math.pow(2, 32);\n    M[N - 1][14] = Math.floor(M[N - 1][14]);\n    M[N - 1][15] = ((bytes.length - 1) * 8) & 0xffffffff;\n    for (let i = 0; i < N; ++i) {\n        const W = new Uint32Array(80);\n        for (let t = 0; t < 16; ++t) {\n            W[t] = M[i][t];\n        }\n        for (let t = 16; t < 80; ++t) {\n            W[t] = ROTL(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1);\n        }\n        let a = H[0];\n        let b = H[1];\n        let c = H[2];\n        let d = H[3];\n        let e = H[4];\n        for (let t = 0; t < 80; ++t) {\n            const s = Math.floor(t / 20);\n            const T = (ROTL(a, 5) + f(s, b, c, d) + e + K[s] + W[t]) >>> 0;\n            e = d;\n            d = c;\n            c = ROTL(b, 30) >>> 0;\n            b = a;\n            a = T;\n        }\n        H[0] = (H[0] + a) >>> 0;\n        H[1] = (H[1] + b) >>> 0;\n        H[2] = (H[2] + c) >>> 0;\n        H[3] = (H[3] + d) >>> 0;\n        H[4] = (H[4] + e) >>> 0;\n    }\n    return Uint8Array.of(H[0] >> 24, H[0] >> 16, H[0] >> 8, H[0], H[1] >> 24, H[1] >> 16, H[1] >> 8, H[1], H[2] >> 24, H[2] >> 16, H[2] >> 8, H[2], H[3] >> 24, H[3] >> 16, H[3] >> 8, H[3], H[4] >> 24, H[4] >> 16, H[4] >> 8, H[4]);\n}\nexport default sha1;\n","import sha1 from './sha1.js';\nimport v35, { DNS, URL } from './v35.js';\nexport { DNS, URL } from './v35.js';\nfunction v5(value, namespace, buf, offset) {\n    return v35(0x50, sha1, value, namespace, buf, offset);\n}\nv5.DNS = DNS;\nv5.URL = URL;\nexport default v5;\n","import { unsafeStringify } from './stringify.js';\nimport v1 from './v1.js';\nimport v1ToV6 from './v1ToV6.js';\nfunction v6(options, buf, offset) {\n    options ??= {};\n    offset ??= 0;\n    let bytes = v1({ ...options, _v6: true }, new Uint8Array(16));\n    bytes = v1ToV6(bytes);\n    if (buf) {\n        for (let i = 0; i < 16; i++) {\n            buf[offset + i] = bytes[i];\n        }\n        return buf;\n    }\n    return unsafeStringify(bytes);\n}\nexport default v6;\n","import parse from './parse.js';\nimport { unsafeStringify } from './stringify.js';\nexport default function v6ToV1(uuid) {\n    const v6Bytes = typeof uuid === 'string' ? parse(uuid) : uuid;\n    const v1Bytes = _v6ToV1(v6Bytes);\n    return typeof uuid === 'string' ? unsafeStringify(v1Bytes) : v1Bytes;\n}\nfunction _v6ToV1(v6Bytes) {\n    return Uint8Array.of(((v6Bytes[3] & 0x0f) << 4) | ((v6Bytes[4] >> 4) & 0x0f), ((v6Bytes[4] & 0x0f) << 4) | ((v6Bytes[5] & 0xf0) >> 4), ((v6Bytes[5] & 0x0f) << 4) | (v6Bytes[6] & 0x0f), v6Bytes[7], ((v6Bytes[1] & 0x0f) << 4) | ((v6Bytes[2] & 0xf0) >> 4), ((v6Bytes[2] & 0x0f) << 4) | ((v6Bytes[3] & 0xf0) >> 4), 0x10 | ((v6Bytes[0] & 0xf0) >> 4), ((v6Bytes[0] & 0x0f) << 4) | ((v6Bytes[1] & 0xf0) >> 4), v6Bytes[8], v6Bytes[9], v6Bytes[10], v6Bytes[11], v6Bytes[12], v6Bytes[13], v6Bytes[14], v6Bytes[15]);\n}\n","import rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nconst _state = {};\nfunction v7(options, buf, offset) {\n    let bytes;\n    if (options) {\n        bytes = v7Bytes(options.random ?? options.rng?.() ?? rng(), options.msecs, options.seq, buf, offset);\n    }\n    else {\n        const now = Date.now();\n        const rnds = rng();\n        updateV7State(_state, now, rnds);\n        bytes = v7Bytes(rnds, _state.msecs, _state.seq, buf, offset);\n    }\n    return buf ?? unsafeStringify(bytes);\n}\nexport function updateV7State(state, now, rnds) {\n    state.msecs ??= -Infinity;\n    state.seq ??= 0;\n    if (now > state.msecs) {\n        state.seq = (rnds[6] << 23) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];\n        state.msecs = now;\n    }\n    else {\n        state.seq = (state.seq + 1) | 0;\n        if (state.seq === 0) {\n            state.msecs++;\n        }\n    }\n    return state;\n}\nfunction v7Bytes(rnds, msecs, seq, buf, offset = 0) {\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    if (!buf) {\n        buf = new Uint8Array(16);\n        offset = 0;\n    }\n    else {\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n    }\n    msecs ??= Date.now();\n    seq ??= ((rnds[6] * 0x7f) << 24) | (rnds[7] << 16) | (rnds[8] << 8) | rnds[9];\n    buf[offset++] = (msecs / 0x10000000000) & 0xff;\n    buf[offset++] = (msecs / 0x100000000) & 0xff;\n    buf[offset++] = (msecs / 0x1000000) & 0xff;\n    buf[offset++] = (msecs / 0x10000) & 0xff;\n    buf[offset++] = (msecs / 0x100) & 0xff;\n    buf[offset++] = msecs & 0xff;\n    buf[offset++] = 0x70 | ((seq >>> 28) & 0x0f);\n    buf[offset++] = (seq >>> 20) & 0xff;\n    buf[offset++] = 0x80 | ((seq >>> 14) & 0x3f);\n    buf[offset++] = (seq >>> 6) & 0xff;\n    buf[offset++] = ((seq << 2) & 0xff) | (rnds[10] & 0x03);\n    buf[offset++] = rnds[11];\n    buf[offset++] = rnds[12];\n    buf[offset++] = rnds[13];\n    buf[offset++] = rnds[14];\n    buf[offset++] = rnds[15];\n    return buf;\n}\nexport default v7;\n","import validate from './validate.js';\nfunction version(uuid) {\n    if (!validate(uuid)) {\n        throw TypeError('Invalid UUID');\n    }\n    return parseInt(uuid.slice(14, 15), 16);\n}\nexport default version;\n","var uuid = require('uuid');\nvar handler = require('./message_handler.js');\nvar sender = require('./message_sender.js');\n\nfunction WebCubeObject(additional_handlers) {\n    var i = 0;\n    this.id = uuid.v4();\n    this.mailbox = this.id;\n    this.handlers = additional_handlers || [];\n    this._initialized = false;\n    this.handlers.push(\n        {\n            mailbox: this.mailbox,\n            dispatch: this.dispatch\n        }\n    );\n\n\n    for (i = 0; i < this.handlers.length; i++) {\n        handler.add(this.handlers[i].mailbox, this.handlers[i].dispatch, this);\n    }\n\n    this.register = (function(message_name, callback, t) {\n        handler.add(message_name, callback?callback:this.dispatch, t?t:this);\n    }).bind(this);\n\n    this.destroy = function (){\n      handler.remove(this);\n    };\n\n    this.send = this.send.bind(this)\n}\n\nWebCubeObject.prototype = { \n    dispatch: function(msg) {\n    },\n    send: function(topic, msg) { \n        sender(topic, msg, this);\n    },\n    log: function(msg) { \n        if (typeof WebCube.Logger !== 'undefined' && WebCube.Logger.length != 0) { \n            WebCube.Logger[0].logger(msg);\n        } else {\n            console.log(msg);\n        }\n    },\n    initialize: function(){\n        // Implement post instantiation app initialization here\n        //console.log(\"initializing wc-object \"+this.id);\n    }\n}\n\nWebCubeObject.extend = function(ChildConstructor, childPrototype) { \n    var v = null;\n    ChildConstructor.prototype = Object.create(\n        WebCubeObject.prototype\n    );\n    for (v in childPrototype) { \n        ChildConstructor.prototype[v] = childPrototype[v];\n    }\n    ChildConstructor.prototype.constructor = ChildConstructor;\n    return ChildConstructor;\n}\n\nif (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n    module.exports = WebCubeObject;\n}\n","const _ = require(\"lodash\");\n\nfunction WebCubeObjectFactory(klass, name, klass_param_list) {\n    this.factory_class = klass;\n    this.name = name;\n    this.parameters = klass_param_list || [ [ ], ];\n    this.objects = [];\n}\n\nWebCubeObjectFactory.prototype = {\n    build: function(param_list) {\n        param_list = param_list || this.parameters;\n        var fConstructor = this.factory_class;\n        var self = this;\n        var result = _.map(\n            param_list,\n            function(pl) {\n                var fNewConstr = function() {\n                    fConstructor.apply(this, pl);\n                };\n                fNewConstr.prototype = self.factory_class.prototype;\n                return new fNewConstr();\n            }\n        )\n        this.objects = this.objects.concat(result);\n        return result;\n    }\n}\n\nWebCubeObjectFactory.prototype.constructor=WebCubeObjectFactory;\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = WebCubeObjectFactory\n}\n","import DocumentBinding from \"./document_binding\";\nimport MessageHandler from \"./message_handler\";\nimport MessageSender from \"./message_sender\";\nimport WebcubeObject from \"./object\"; // Renamed to avoid conflict with global Object\nimport ObjectFactory from \"./object_factory\";\n\nexport default {\n  DocumentBinding,\n  MessageHandler,\n  MessageSender,\n  Object: WebcubeObject,\n  ObjectFactory,\n};\n","/*!\n * jQuery Cookie Plugin v1.4.1\n * https://github.com/carhartl/jquery-cookie\n *\n * Copyright 2013 Klaus Hartl\n * Released under the MIT license\n */\n(function (factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// CommonJS\n\t\tfactory(require('jquery'));\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n}(function ($) {\n\n\tvar pluses = /\\+/g;\n\n\tfunction encode(s) {\n\t\treturn config.raw ? s : encodeURIComponent(s);\n\t}\n\n\tfunction decode(s) {\n\t\treturn config.raw ? s : decodeURIComponent(s);\n\t}\n\n\tfunction stringifyCookieValue(value) {\n\t\treturn encode(config.json ? JSON.stringify(value) : String(value));\n\t}\n\n\tfunction parseCookieValue(s) {\n\t\tif (s.indexOf('\"') === 0) {\n\t\t\t// This is a quoted cookie as according to RFC2068, unescape...\n\t\t\ts = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\n\t\t}\n\n\t\ttry {\n\t\t\t// Replace server-side written pluses with spaces.\n\t\t\t// If we can't decode the cookie, ignore it, it's unusable.\n\t\t\t// If we can't parse the cookie, ignore it, it's unusable.\n\t\t\ts = decodeURIComponent(s.replace(pluses, ' '));\n\t\t\treturn config.json ? JSON.parse(s) : s;\n\t\t} catch(e) {}\n\t}\n\n\tfunction read(s, converter) {\n\t\tvar value = config.raw ? s : parseCookieValue(s);\n\t\treturn $.isFunction(converter) ? converter(value) : value;\n\t}\n\n\tvar config = $.cookie = function (key, value, options) {\n\n\t\t// Write\n\n\t\tif (value !== undefined && !$.isFunction(value)) {\n\t\t\toptions = $.extend({}, config.defaults, options);\n\n\t\t\tif (typeof options.expires === 'number') {\n\t\t\t\tvar days = options.expires, t = options.expires = new Date();\n\t\t\t\tt.setTime(+t + days * 864e+5);\n\t\t\t}\n\n\t\t\treturn (document.cookie = [\n\t\t\t\tencode(key), '=', stringifyCookieValue(value),\n\t\t\t\toptions.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n\t\t\t\toptions.path    ? '; path=' + options.path : '',\n\t\t\t\toptions.domain  ? '; domain=' + options.domain : '',\n\t\t\t\toptions.secure  ? '; secure' : ''\n\t\t\t].join(''));\n\t\t}\n\n\t\t// Read\n\n\t\tvar result = key ? undefined : {};\n\n\t\t// To prevent the for loop in the first place assign an empty array\n\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t// calling $.cookie().\n\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\n\t\tfor (var i = 0, l = cookies.length; i < l; i++) {\n\t\t\tvar parts = cookies[i].split('=');\n\t\t\tvar name = decode(parts.shift());\n\t\t\tvar cookie = parts.join('=');\n\n\t\t\tif (key && key === name) {\n\t\t\t\t// If second argument (value) is a function it's a converter...\n\t\t\t\tresult = read(cookie, value);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Prevent storing a cookie that we couldn't decode.\n\t\t\tif (!key && (cookie = read(cookie)) !== undefined) {\n\t\t\t\tresult[name] = cookie;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tconfig.defaults = {};\n\n\t$.removeCookie = function (key, options) {\n\t\tif ($.cookie(key) === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Must not alter options, thus extending a fresh object...\n\t\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\n\t\treturn !$.cookie(key);\n\t};\n\n}));\n","var utils = require(\"webcube-base\");\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nrequire(\"jquery.cookie\");\nvar $ = require(\"jquery\");\n\nvar UserCookies = WebCubeObject.extend(function (html_element) {\n  WebCubeObject.call(this);\n  this.$el = $(html_element);\n\n  var userEmail = $.cookie(\"webcube.useremail\");\n  $.cookie(\"webcube.useremail_sha1\");\n\n  // Update cookies when user logs in\n  if (\n    (!userEmail || userEmail == \"null\" || userEmail == null) &&\n    this.$el.data(\"type\") == \"login\"\n  ) {\n    $.ajax({\n      url: \"/accounts/ajax/user-identifiers/\",\n      type: \"GET\",\n      cache: false,\n      dataType: \"json\",\n      global: false,\n      success: function (data) {\n        $.cookie(\"webcube.usersessionid\", data.sessionId, { path: \"/\" });\n        $.cookie(\"webcube.useremail\", data.email, { path: \"/\" });\n        $.cookie(\"webcube.useremail_sha1\", data.email_sha1, { path: \"/\" });\n      },\n      error: function (request, error) {\n        console.log(\"Couldn't fetch user info: \" + JSON.stringify(request));\n      },\n    });\n  }\n\n  // Remove cookies when user logs out\n  if (this.$el.data(\"type\") == \"logout\") {\n    $.cookie(\"webcube.usersessionid\", null, { path: \"/\" });\n    $.cookie(\"webcube.useremail\", null, { path: \"/\" });\n    $.cookie(\"webcube.useremail_sha1\", null, { path: \"/\" });\n  }\n}, {});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: UserCookies,\n    factory: new WebCubeObjectFactory(UserCookies, \"user-cookies\", [[]]),\n  };\n}\n","var utils = require(\"webcube-base\");\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require(\"lodash\");\nvar $ = require(\"jquery\");\n\nvar BulkOrderForm = WebCubeObject.extend(\n  function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    var self = this;\n    this.prior_orders = [];\n    this.freeship_min = 0;\n    if (this.$el.data(\"freeship_min\")) {\n      this.freeship_min = parseInt(this.$el.data(\"freeship_min\"));\n    }\n\n    // input handlers that update subtotal\n    self.handle_qty_change = function () {\n      var total = 0;\n      $(\".bulk-product-row\", self.$el).each(function () {\n        var qty = $(\"input[name=quantity]\", this).val();\n        if (!/^[.\\d]+$/.test(qty)) {\n          qty = 0;\n        }\n        var price = $(\".price\", this).data(\"unit_price\");\n        var subtotal = price * qty;\n        total += subtotal;\n        $(\".subtotal\", this).text(\"$\" + subtotal.toFixed(2));\n      });\n      $(\".total\", self.$el).text(\"$\" + total.toFixed(2));\n\n      if (self.freeship_min > 0) {\n        if (total > 0) {\n          $(\".free-shipping-progress.rd\", self.$el).addClass(\"active\");\n        } else {\n          $(\".free-shipping-progress.rd\", self.$el).removeClass(\"active\");\n        }\n        var freeship = Math.abs(total - self.freeship_min);\n        var freeship_percent = Math.floor((total / self.freeship_min) * 100);\n        if (total > self.freeship_min) {\n          freeship = 0;\n          freeship_percent = 100;\n        }\n        if (freeship_percent < 100 && total > 0) {\n          $(\"#freeShippingTextWholesale\", self.$el).addClass(\"active\");\n          $(\"#freeShippingQualifiedTextWholesale\", self.$el).removeClass(\n            \"active\"\n          );\n          $(\"#amountFreeShippingWholesale\", self.$el).text(freeship.toFixed(2));\n        } else {\n          $(\"#freeShippingQualifiedTextWholesale\", self.$el).addClass(\"active\");\n          $(\"#freeShippingTextWholesale\", self.$el).removeClass(\"active\");\n        }\n        $(\"#freeShippingMeterWholesale\", self.$el).css({\n          width: freeship_percent + \"%\",\n        });\n      }\n    };\n\n    self.initialize_inputs = function () {\n      $(\".bulk-product-row input[name=quantity]\", this.$el).change(\n        self.handle_qty_change\n      );\n      $(\n        \".bulk-product-row a.increment,.bulk-product-row a.decrement\",\n        this.$el\n      ).click(self.handle_qty_change);\n      self.handle_qty_change();\n    };\n\n    self.initialize_prefill = function () {\n      self.prior_orders = [];\n      $(\"script.prior_order\").each(function () {\n        try {\n          var o = JSON.parse($(this).text());\n          self.prior_orders.push(o);\n        } catch (e) {\n          console.error(e);\n        }\n      });\n      var html = \"<option value>Prefill from Previous Order</option>\";\n      self.prior_orders.forEach(function (o) {\n        html +=\n          '<option value=\"' +\n          o.id +\n          '\">Order #' +\n          o.id +\n          \" \" +\n          o.purchasedate +\n          \"</option>\";\n      });\n      $(\"#prior_orders\", self.$el).html(html);\n\n      // tie in uptae button\n      $(\"#update_from_prior_order\").click(function () {\n        var prior = _.filter(self.prior_orders, function (o) {\n          return o.id == $(\"#prior_orders\").val();\n        })[0];\n\n        $(\".bulk-product-row\").each(function () {\n          var row_sku = $(\"input[name=sku]\", this).val();\n          if (prior.skus[row_sku] != undefined) {\n            $(\"input[name=quantity]\", this).val(prior.skus[row_sku]);\n          } else if (\n            $(\"input[name=quantity]\", this).attr(\"readonly\") != \"readonly\"\n          ) {\n            $(\"input[name=quantity]\", this).val(0);\n          }\n        });\n\n        WebCube.utils.modal(\"Quantities updated to Order #\" + prior.id);\n        self.handle_qty_change();\n      });\n    };\n  },\n  {\n    initialize: function () {\n      this.initialize_inputs();\n      this.initialize_prefill();\n    },\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: BulkOrderForm,\n    factory: new WebCubeObjectFactory(BulkOrderForm, \"bulkorder-form\", [[]]),\n  };\n}\n","/*!\n * jQuery Cookie Plugin v1.4.1\n * https://github.com/carhartl/jquery-cookie\n *\n * Copyright 2013 Klaus Hartl\n * Released under the MIT license\n */\n(function (factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// CommonJS\n\t\tfactory(require('jquery'));\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n}(function ($) {\n\n\tvar pluses = /\\+/g;\n\n\tfunction encode(s) {\n\t\treturn config.raw ? s : encodeURIComponent(s);\n\t}\n\n\tfunction decode(s) {\n\t\treturn config.raw ? s : decodeURIComponent(s);\n\t}\n\n\tfunction stringifyCookieValue(value) {\n\t\treturn encode(config.json ? JSON.stringify(value) : String(value));\n\t}\n\n\tfunction parseCookieValue(s) {\n\t\tif (s.indexOf('\"') === 0) {\n\t\t\t// This is a quoted cookie as according to RFC2068, unescape...\n\t\t\ts = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\n\t\t}\n\n\t\ttry {\n\t\t\t// Replace server-side written pluses with spaces.\n\t\t\t// If we can't decode the cookie, ignore it, it's unusable.\n\t\t\t// If we can't parse the cookie, ignore it, it's unusable.\n\t\t\ts = decodeURIComponent(s.replace(pluses, ' '));\n\t\t\treturn config.json ? JSON.parse(s) : s;\n\t\t} catch(e) {}\n\t}\n\n\tfunction read(s, converter) {\n\t\tvar value = config.raw ? s : parseCookieValue(s);\n\t\treturn $.isFunction(converter) ? converter(value) : value;\n\t}\n\n\tvar config = $.cookie = function (key, value, options) {\n\n\t\t// Write\n\n\t\tif (value !== undefined && !$.isFunction(value)) {\n\t\t\toptions = $.extend({}, config.defaults, options);\n\n\t\t\tif (typeof options.expires === 'number') {\n\t\t\t\tvar days = options.expires, t = options.expires = new Date();\n\t\t\t\tt.setTime(+t + days * 864e+5);\n\t\t\t}\n\n\t\t\treturn (document.cookie = [\n\t\t\t\tencode(key), '=', stringifyCookieValue(value),\n\t\t\t\toptions.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n\t\t\t\toptions.path    ? '; path=' + options.path : '',\n\t\t\t\toptions.domain  ? '; domain=' + options.domain : '',\n\t\t\t\toptions.secure  ? '; secure' : ''\n\t\t\t].join(''));\n\t\t}\n\n\t\t// Read\n\n\t\tvar result = key ? undefined : {};\n\n\t\t// To prevent the for loop in the first place assign an empty array\n\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t// calling $.cookie().\n\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\n\t\tfor (var i = 0, l = cookies.length; i < l; i++) {\n\t\t\tvar parts = cookies[i].split('=');\n\t\t\tvar name = decode(parts.shift());\n\t\t\tvar cookie = parts.join('=');\n\n\t\t\tif (key && key === name) {\n\t\t\t\t// If second argument (value) is a function it's a converter...\n\t\t\t\tresult = read(cookie, value);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Prevent storing a cookie that we couldn't decode.\n\t\t\tif (!key && (cookie = read(cookie)) !== undefined) {\n\t\t\t\tresult[name] = cookie;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tconfig.defaults = {};\n\n\t$.removeCookie = function (key, options) {\n\t\tif ($.cookie(key) === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Must not alter options, thus extending a fresh object...\n\t\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\n\t\treturn !$.cookie(key);\n\t};\n\n}));\n","var utils = require('webcube-base');\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nrequire('jquery.cookie');\nvar $ = require(\"jquery\");\n\nvar BulkOrderReplacements = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n\n    var self = $(this);\n    var $el = $(html_element);\n\n    function bulkorder_replacements() {\n        // header\n        $.ajax({\n            url: '/retail-direct/header/',\n            cache: false,\n            dataType: 'html',\n            global: false,\n            success: function(data) {\n                $el.find(\".slideUp\")[0].outerHTML = data;\n                $el.find(\".slideUp\")[0].classList.add('active');\n            },\n            error: function(request,error) {\n                console.log(\"Couldn't fetch bulkorder header \" + JSON.stringify(request));\n            }\n        });\n        $el.addClass('wholesale-inner-wrap');\n\n        // PDP product detail and extra description\n        if ($el.find('.product-detail-form').length) {\n            $el.find('.product-detail-form')[0].outerHTML = \"\";\n        }\n        if ($el.find('.extra-description').length) {\n            $el.find('.extra-description')[0].outerHTML = \"\";\n        }\n\n        // PCPs and Shop one click add to cart\n        if ($el.find('.item-add-btn').length) {\n            $el.find('.item-add-btn').each(function(i,item) {\n                item.outerHTML = \"\";\n            });\n        }\n    }\n\n    // determine whether user is in the bulkorder group\n    $.ajax({\n        url: '/retail-direct/ajax/bulkorder-user/',\n        type: 'GET',\n        cache: false,\n        dataType: 'json',\n        global: false,\n        success: function(data) {\n            // if user is in the bulkorder group, make the\n            // necessary replacements\n            if (data.in_bulkorder_group == true) {\n                bulkorder_replacements();\n            }\n        },\n        error: function(request,error) {\n            console.log(\"Couldn't fetch bulkorder user info: \" + JSON.stringify(request));\n        }\n    });\n\n}, {});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: BulkOrderReplacements,\n        factory: new WebCubeObjectFactory(BulkOrderReplacements, \"bulkorder-replacements\", [[]])\n    };\n}\n\n","/*!\n * jQuery Cookie Plugin v1.4.1\n * https://github.com/carhartl/jquery-cookie\n *\n * Copyright 2013 Klaus Hartl\n * Released under the MIT license\n */\n(function (factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// CommonJS\n\t\tfactory(require('jquery'));\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n}(function ($) {\n\n\tvar pluses = /\\+/g;\n\n\tfunction encode(s) {\n\t\treturn config.raw ? s : encodeURIComponent(s);\n\t}\n\n\tfunction decode(s) {\n\t\treturn config.raw ? s : decodeURIComponent(s);\n\t}\n\n\tfunction stringifyCookieValue(value) {\n\t\treturn encode(config.json ? JSON.stringify(value) : String(value));\n\t}\n\n\tfunction parseCookieValue(s) {\n\t\tif (s.indexOf('\"') === 0) {\n\t\t\t// This is a quoted cookie as according to RFC2068, unescape...\n\t\t\ts = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\n\t\t}\n\n\t\ttry {\n\t\t\t// Replace server-side written pluses with spaces.\n\t\t\t// If we can't decode the cookie, ignore it, it's unusable.\n\t\t\t// If we can't parse the cookie, ignore it, it's unusable.\n\t\t\ts = decodeURIComponent(s.replace(pluses, ' '));\n\t\t\treturn config.json ? JSON.parse(s) : s;\n\t\t} catch(e) {}\n\t}\n\n\tfunction read(s, converter) {\n\t\tvar value = config.raw ? s : parseCookieValue(s);\n\t\treturn $.isFunction(converter) ? converter(value) : value;\n\t}\n\n\tvar config = $.cookie = function (key, value, options) {\n\n\t\t// Write\n\n\t\tif (value !== undefined && !$.isFunction(value)) {\n\t\t\toptions = $.extend({}, config.defaults, options);\n\n\t\t\tif (typeof options.expires === 'number') {\n\t\t\t\tvar days = options.expires, t = options.expires = new Date();\n\t\t\t\tt.setTime(+t + days * 864e+5);\n\t\t\t}\n\n\t\t\treturn (document.cookie = [\n\t\t\t\tencode(key), '=', stringifyCookieValue(value),\n\t\t\t\toptions.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n\t\t\t\toptions.path    ? '; path=' + options.path : '',\n\t\t\t\toptions.domain  ? '; domain=' + options.domain : '',\n\t\t\t\toptions.secure  ? '; secure' : ''\n\t\t\t].join(''));\n\t\t}\n\n\t\t// Read\n\n\t\tvar result = key ? undefined : {};\n\n\t\t// To prevent the for loop in the first place assign an empty array\n\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t// calling $.cookie().\n\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\n\t\tfor (var i = 0, l = cookies.length; i < l; i++) {\n\t\t\tvar parts = cookies[i].split('=');\n\t\t\tvar name = decode(parts.shift());\n\t\t\tvar cookie = parts.join('=');\n\n\t\t\tif (key && key === name) {\n\t\t\t\t// If second argument (value) is a function it's a converter...\n\t\t\t\tresult = read(cookie, value);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Prevent storing a cookie that we couldn't decode.\n\t\t\tif (!key && (cookie = read(cookie)) !== undefined) {\n\t\t\t\tresult[name] = cookie;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tconfig.defaults = {};\n\n\t$.removeCookie = function (key, options) {\n\t\tif ($.cookie(key) === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Must not alter options, thus extending a fresh object...\n\t\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\n\t\treturn !$.cookie(key);\n\t};\n\n}));\n","var utils = require('webcube-base');\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nrequire('jquery.cookie');\nvar $ = require(\"jquery\");\n\nvar KlaviyoForm = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n\n    var self = this;\n    var $el = $(html_element);\n    var $form = $(\"form\",$el)\n    var $success = $(\".success\",$el)\n    var event_name = $el.data(\"event-name\")\n\n    $form.on(\"submit\",function(event){\n        var _learnq = _learnq || [];\n        console.log(\"Found learnq\",_learnq);\n\n        var data = {};\n        $form.serializeArray().map(function(x){data[x.name] = x.value;});\n\n        if(event_name){\n            console.log(\"Submitting to learnq as event\",event_name,data)\n            var result = _learnq.push(['track',event_name,data])\n            if(result){console.log(\"learnq push succeeded\",result)}else{ console.error(\"Unable to push to learnq\",result) }\n        }else{\n            console.log(\"Submitting to learnq as identify\",data)\n            _learnq.push(['identify',data])\n        }\n\n        event.stopPropagation()\n        $form.hide()\n        $success.show()\n        return false\n    })\n\n}, {});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: KlaviyoForm,\n        factory: new WebCubeObjectFactory(KlaviyoForm, \"klaviyo-form\", [[]])\n    };\n}\n\n","var utils = require('webcube-base');\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nrequire('jquery.cookie');\nvar $ = require(\"jquery\");\n\nvar KlaviyoTracker = WebCubeObject.extend(function (html_element) {\n\n    WebCubeObject.call(this);\n\n    var self=this;\n    var $el = $(html_element);\n\n    // track checkoutStarted\n    this.track_checkout_started = function(msg) {\n        var cart = msg.payload;\n        if(!cart.shipping){ return; }\n\n        var email = cart.shipping.ship_email;\n        var _learnq = _learnq || [];\n\n        if(email && /@/.test(email)) {\n            _learnq.push(['identify', { $email: email }]);\n\n            //console.log('Klaviyo: Checkout started');\n            if (!$.cookie('wc-klaviyo-checkout-started') || $.cookie('wc-klaviyo-checkout-started') != cart.id) {\n                // Set cookie on close\n                $.cookie('wc-klaviyo-checkout-started', cart.id, {\n                    path: '/',\n                    expires: 7\n                });\n\n                var _items = [];\n                var _item_names = [];\n                var _has_no_discount_sku = false;\n                for (var item in cart.items) {\n\n                    var prod_url = cart.items[item].url;\n                    if (prod_url && prod_url.search('http') !== 0) prod_url = WebCube.document_binding.doc.location.origin + prod_url;\n\n                    var img_url = cart.items[item].image;\n                    if (img_url && img_url.search('http') !== 0) img_url = WebCube.document_binding.doc.location.origin + img_url;\n\n                    if (cart.items[item].no_discount) {\n                        _has_no_discount_sku = true;\n                    }\n\n                    _items.push({\n                        \"SKU\": cart.items[item].sku,\n                        \"ProductName\": cart.items[item].name,\n                        \"Quantity\": cart.items[item].quantity,\n                        \"ItemPrice\": parseFloat(cart.items[item].unit_price.replace(\"$\",\"\")),\n                        \"RowTotal\" :parseFloat(cart.items[item].total.replace(\"$\",\"\")),\n                        \"ProductURL\": prod_url,\n                        \"ImageURL\": img_url,\n                        \"ProductCategories\": [cart.items[item].category]\n                    });\n                    _item_names.push(cart.items[item].name);\n                }\n\n                var started_checkout_data = {\n                    \"$event_id\" : cart.id, // The cart ID if you have it. Otherwise remove this line.\n                    \"$value\" : cart.total,\n                    \"ItemNames\": _item_names,\n                    \"CheckoutURL\": WebCube.document_binding.doc.location.href,\n                    \"Items\": _items,\n                    \"HasNoDiscountSku\": _has_no_discount_sku\n                }\n                if ($el.data('cart-regeneration')) {\n                    started_checkout_data['cart-regeneration'] = $el.data('cart-regeneration');\n                }\n\n                // Please note, this is currently being done in Google Tag Manager, not this code.\n                _learnq.push(['track', 'Started Checkout', started_checkout_data]);\n            }\n        }\n    }\n    this.register('current_cart', this.track_checkout_started, this);\n\n}, {});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: KlaviyoTracker,\n        factory: new WebCubeObjectFactory(KlaviyoTracker, \"klaviyo-tracker\", [[]])\n    };\n}\n\n","var utils = require(\"webcube-base\");\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require(\"lodash\");\nvar $ = require(\"jquery\");\n\nvar SANDBOX_URL =\n  \"https://static-na.payments-amazon.com/OffAmazonPayments/us/sandbox/js/Widgets.js\";\nvar LIVE_URL =\n  \"https://static-na.payments-amazon.com/OffAmazonPayments/us/js/Widgets.js\";\nvar BUTTON_CONTAINER_ID = \"AmazonPayButton\";\n\n// We have seen issues with Amazon Pay in 'webview' browsers, and may want to conditionally\n// hide them if window.navigator.userAgent matches\nvar BLACKLIST_USERAGENTS = [/.*iPhone.*Instagram/, /.*iPhone.*FBIOS/];\n\nvar AmazonPay = WebCubeObject.extend(\n  function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    var self = this;\n\n    self.button_type = this.$el.data(\"pay_button_type\");\n    if (typeof self.button_type == \"undefined\") {\n      self.button_type = \"PwA\";\n    }\n    this.sandbox = this.$el.data(\"sandbox\");\n    this.client_id = this.$el.data(\"client_id\");\n    this.merchant_id = this.$el.data(\"merchant_id\");\n    this.pay_view = this.$el.data(\"pay_view_url\");\n    this.loading_started = false;\n\n    window.onAmazonLoginReady = function () {\n      window.amazon.Login.setClientId(self.client_id);\n      window.amazon.Login.setUseCookie(true);\n    };\n\n    this.handle_step_selection = function (msg) {\n      if (msg.payload.step_name == \"update-items\") {\n        self.create_button();\n      }\n    };\n\n    this.register(\"select-step\", this.handle_step_selection);\n\n    this.load_scripts = function () {\n      // document.write script tag\n      // NOTE make sure this hasn't been loaded yet!\n      if (typeof OffAmazonPayments === \"undefined\" && !this.loading_started) {\n        this.loading_started = true;\n        if (this.sandbox) {\n          $.getScript(SANDBOX_URL, function () {\n            self.create_button();\n          });\n        } else {\n          $.getScript(LIVE_URL, function () {\n            self.create_button();\n          });\n        }\n      } else {\n        console.log(\"Amazon pay already loaded\");\n        self.create_button();\n      }\n    };\n\n    this.create_button = function (element_id) {\n      if (element_id == null) {\n        element_id = BUTTON_CONTAINER_ID;\n      }\n      var authRequest;\n      // clear any children first\n      $(element_id).empty();\n      window.OffAmazonPayments.Button(element_id, self.merchant_id, {\n        type: self.button_type,\n        color: \"LightGray\",\n        size: \"medium\",\n        authorization: function () {\n          var loginOptions = {\n            scope:\n              \"profile postal_code payments:widget payments:shipping_address\",\n            popup: true,\n          };\n          authRequest = window.amazon.Login.authorize(loginOptions, self.pay_view);\n        },\n        onError: function (error) {\n          console.log(error);\n        },\n      });\n    };\n  },\n  {\n    initialize: function () {\n      // Don't initialize if we have a blacklisted user agent\n      // i.e. the \"webview\" of Instagram iOs doesn't do popups properly\n      var blacklisted = false;\n      BLACKLIST_USERAGENTS.forEach(function (ua) {\n        blacklisted |= ua.test(window.navigator.userAgent);\n      });\n      if (blacklisted) {\n        console.log(\"Disabling Amazon Pay buttne for blacklisted user agent\");\n        return;\n      }\n      if (\n        !$(\"body\").hasClass(\"cart\") ||\n        $(\".co-step,.current\").data(\"key\") == \"update-items\"\n      ) {\n        this.load_scripts();\n      }\n    },\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: AmazonPay,\n    factory: new WebCubeObjectFactory(AmazonPay, \"amazonpay\", [[]]),\n  };\n}\n","var utils = require(\"webcube-base\");\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require(\"lodash\");\nvar $ = require(\"jquery\");\n\nvar SANDBOX_URL =\n  \"https://static-na.payments-amazon.com/OffAmazonPayments/us/sandbox/js/Widgets.js\";\nvar LIVE_URL =\n  \"https://static-na.payments-amazon.com/OffAmazonPayments/us/js/Widgets.js\";\nvar BUTTON_CONTAINER_ID = \"AmazonPayButton\";\n\nvar AmazonPayView = WebCubeObject.extend(\n  function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    var self = this;\n\n    this.sandbox = this.$el.data(\"sandbox\");\n    this.client_id = this.$el.data(\"client_id\");\n    this.merchant_id = this.$el.data(\"merchant_id\");\n    this.basket_url = this.$el.data(\"basket_url\");\n    this.basket_summary_url = this.$el.data(\"basket_summary_url\");\n    this.pay_set_ship_url = this.$el.data(\"pay_set_ship_url\");\n    this.pay_details_url = this.$el.data(\"pay_details_url\");\n    this.loading_started = false;\n\n    window.onAmazonLoginReady = function () {\n      window.amazon.Login.setClientId(self.client_id);\n      window.amazon.Login.setUseCookie(true);\n    };\n\n    this.load_scripts = function () {\n      // document.write script tag\n      // NOTE make sure this hasn't been loaded yet!\n      if (typeof OffAmazonPayments === \"undefined\" && !this.loading_started) {\n        this.loading_started = true;\n        if (this.sandbox) {\n          $.getScript(SANDBOX_URL, function () {\n            self.configureWidgets();\n          });\n        } else {\n          $.getScript(LIVE_URL, function () {\n            self.configureWidgets();\n          });\n        }\n      } else {\n        self.configureWidgets();\n      }\n    };\n\n    this.method_select_template = null;\n    this.amazon_order_reference = null;\n\n    this.connect_edit_cart = function () {\n      $(\"#amazon-cart-summary .back_to_cart\").click(function () {\n        window.location = self.basket_url;\n      });\n    };\n\n    this.update_cart_summary = function () {\n      $.ajax({\n        dataType: \"json\",\n        url: self.basket_summary_url,\n        success: function (data) {\n          // Need to normalize to what it is expecting, cart as sub-item, and csrf_token above\n          var obj = { data: { cart: data }, summary: \"\" };\n          obj.data.csrf_token = data.csrf_token;\n          sender(\"update_cart_summary\", obj);\n        },\n      });\n    };\n\n    this.disable_place_order = function (disabled) {\n      if (disabled) {\n        $(\"#confirm_form input\").attr(\"disabled\", true);\n      } else {\n        $(\"#confirm_form input\").removeAttr(\"disabled\");\n      }\n    };\n\n    this.submit_ship_method = function (method) {\n      self.disable_place_order(true);\n      /*WebCube.loader(\"add\",\"#method_select \"); */\n\n      $(\"#method_select li input\").attr(\"disabled\", true);\n\n      $.post(self.pay_set_ship_url, { method: method }).done(function (data) {\n        //console.log(\"Ship Method Post\",data);\n\n        self.update_cart_summary();\n        data.ship_methods = null;\n\n        $(\"#method_select\").html(self.method_select_template(data));\n\n        $(\"#change_ship_method\").click(function () {\n          $(this).attr(\"disabled\", true);\n          self.show_ship_method_select(self.amazon_order_reference);\n        });\n\n        self.disable_place_order(false);\n        /*WebCube.loader(\"remove\",\"#method_select\"); */\n      });\n    };\n\n    // Post to pay-details, get ship mehtods back and populate select template\n    this.show_ship_method_select = function (orderReference) {\n      self.disable_place_order(true);\n      /*WebCube.loader(\"add\",\"#method_select\"); */\n\n      var args = { orderReferenceId: orderReference };\n      if (orderReference == null) {\n        args.orderReferenceId = self.amazon_order_reference;\n      }\n\n      $.post(self.pay_details_url, args).done(function (data) {\n        if (data.ship_methods != undefined) {\n          // Fill in template\n          $(\"#method_select\").html(self.method_select_template(data));\n          // and rig up input select handler\n          $(\"#method_select input\").change(function (event) {\n            event.preventDefault();\n            self.submit_ship_method($(this).val());\n          });\n          /*WebCube.loader(\"remove\",\"#method_select\"); */\n        }\n\n        // if we already selected a ship method, let the user check out\n        if (data.selected_ship_method != undefined) {\n          self.disable_place_order(false);\n        }\n      });\n    };\n\n    // Called when address changes\n    this.update_details = function (orderReference) {\n      var orderRef = null;\n      if (orderReference != null) {\n        orderRef = orderReference.getAmazonOrderReferenceId();\n        self.amazon_order_reference = orderRef;\n      } else if (self.amazon_order_reference == null) {\n        // don't try to update ship method\n        // if we haven't yet set our order reference\n        return;\n      }\n      self.show_ship_method_select(orderRef);\n    };\n\n    this.configureWidgets = function () {\n      self.method_select_template = _.template(\n        $(\"#method_select_template\").text()\n      );\n\n      new window.OffAmazonPayments.Widgets.AddressBook({\n        sellerId: self.merchant_id,\n        onOrderReferenceCreate: function (orderReference) {\n          self.update_details(orderReference);\n        },\n        onAddressSelect: function () {\n          // do stuff here like recalculate tax and/or shipping\n          self.update_details(null);\n        },\n        design: {\n          designMode: \"responsive\",\n        },\n        onError: function (error) {\n          console.error(\n            \"Error setting address\",\n            error.getErrorCode(),\n            error.getErrorMessage()\n          );\n          // your error handling code\n        },\n      }).bind(\"addressBookWidgetDiv\");\n\n      new window.OffAmazonPayments.Widgets.Wallet({\n        sellerId: self.merchant_id,\n        onPaymentSelect: function () {\n          //console.log(\"payment selected\");\n        },\n        design: {\n          designMode: \"responsive\",\n        },\n        onError: function (error) {\n          console.error(\n            \"Error selecting payment\",\n            error.getErrorCode(),\n            error.getErrorMessage()\n          );\n          // your error handling code\n        },\n      }).bind(\"walletWidgetDiv\");\n\n      self.connect_edit_cart();\n\n      $(\"#confirm_form\").submit(function (e) {\n        self.disable_place_order(true);\n        $(this).submit();\n      });\n    };\n  },\n  {\n    initialize: function () {\n      this.load_scripts();\n    },\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: AmazonPayView,\n    factory: new WebCubeObjectFactory(AmazonPayView, \"amazonpayview\", [[]]),\n  };\n}\n","var utils = require(\"webcube-base\");\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require(\"lodash\");\nvar $ = require(\"jquery\");\n\nvar BRAINTREE_CLIENT_SCRIPT =\n  \"https://js.braintreegateway.com/web/3.31.0/js/client.min.js\";\nvar BRAINTREE_HFIELDS_SCRIPT =\n  \"https://js.braintreegateway.com/web/3.31.0/js/hosted-fields.min.js\";\nvar BRAINTREE_FRAUD_SCRIPT =\n  \"https://js.braintreegateway.com/web/3.31.0/js/data-collector.min.js\";\n\nvar BRAINTREE_FIELD_MAP = {\n  number: {\n    selector: \"#card-number\",\n    placeholder: \"\",\n  },\n  cvv: {\n    selector: \"#cvv\",\n    placeholder: \"\",\n  },\n  expirationMonth: {\n    selector: \"#expiration-month\",\n    placeholder: \"MM\",\n  },\n  expirationYear: {\n    selector: \"#expiration-year\",\n    placeholder: \"YY\",\n  },\n  postalCode: {\n    selector: \"#postal-code\",\n    placeholder: \"\",\n  },\n};\n\nvar Braintree = WebCubeObject.extend(\n  function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    this.$form = $(\"#form_payment\", this.$el);\n    this.$nonce = $('input[name=\"nonce\"]', this.$form);\n    var self = this;\n\n    self.authorization = self.$el.data(\"authorization\");\n    self.use_kount = self.$el.data(\"kount\") == \"yes\";\n    self.device_data = null;\n\n    this.validate_webcube_fields = function () {\n      var incomplete = 0;\n      self.$el.find(\"[required] input\").each(function () {\n        if ($(this).val() == \"\") {\n          incomplete += 1;\n          $(this).addClass(\"checkout_field_error\");\n        } else {\n          $(this).removeClass(\"checkout_field_error\");\n        }\n      });\n      self.$el.find(\"[required] select\").each(function () {\n        if ($(this).val() == \"\") {\n          incomplete += 1;\n          $(this).addClass(\"checkout_field_error\");\n        } else {\n          $(this).removeClass(\"checkout_field_error\");\n        }\n      });\n      if (incomplete > 0) {\n        return false;\n      }\n      return true;\n    };\n\n    this.bt_submit = function (e) {\n      if (!self.validate_webcube_fields()) {\n        self.show_error(\"Please ensure all required fields are filled out\");\n        return false;\n      }\n      console.log(\"preparing for submit\");\n      self.$form.find(\"#braintree-submit\").addClass(\"disabled\");\n      if (self.$nonce.val() == \"\") {\n        self.tokenize();\n        return false;\n      }\n      // we still want to return false, as we expect the standard ajax submit handler\n      // to do the work\n\n      // Except in order creator which is not submitting\n      if ($(\"body\").hasClass(\"admin\")) {\n        return true;\n      }\n      return false;\n    };\n\n    this.handle_step_selection = function (msg) {\n      if (msg.payload.step_name == \"update-items\") {\n        // TODO?\n      }\n    };\n\n    this.register(\"select-step\", this.handle_step_selection);\n\n    this.load_scripts = function () {\n      if (\n        (typeof braintree === \"undefined\" ||\n          typeof window.braintree.hostedFields === \"undefined\") &&\n        !this.loading_started\n      ) {\n        this.loading_started = true;\n        $.getScript(BRAINTREE_CLIENT_SCRIPT, function () {\n          if (self.use_kount) {\n            $.getScript(BRAINTREE_FRAUD_SCRIPT, function () {\n              $.getScript(BRAINTREE_HFIELDS_SCRIPT, function () {\n                self.bt_create_client();\n              });\n            });\n          } else {\n            $.getScript(BRAINTREE_HFIELDS_SCRIPT, function () {\n              self.bt_create_client();\n            });\n          }\n        });\n      } else {\n        console.log(\"Braintree already loaded\");\n        self.bt_create_client();\n      }\n    };\n\n    this.bt_create_client = function () {\n      window.braintree.client.create(\n        { authorization: self.authorization },\n        self.bt_create_callback\n      );\n\n      // enable breaker for checkout_step.handle_checkout_form_submit\n      // so that we don't submit until tokenizaiton has completed if user\n      // presses enter in card-form\n      self.$form.data(\"no-ajax-submit\", true);\n      self.$el.find(\"button\").click(self.bt_submit);\n      self.$el.find(\"form\").submit(self.bt_submit);\n    };\n\n    this.bt_create_callback = function (err, clientInstance) {\n      if (err) {\n        console.error(err);\n        return;\n      }\n      var cfg = self.get_hosted_fields_config();\n      cfg.client = clientInstance;\n\n      if (self.use_kount && window.braintree.dataCollector) {\n        window.braintree.dataCollector.create(\n          {\n            client: clientInstance,\n            kount: true,\n          },\n          self.bt_handle_data_collector\n        );\n      }\n\n      window.braintree.hostedFields.create(cfg, self.bt_hosted_fields_callback);\n    };\n\n    this.bt_handle_data_collector = function (err, dataCollectorInstance) {\n      if (err) {\n        console.error(err);\n        return;\n      }\n      self.device_data = dataCollectorInstance.deviceData;\n      console.log(\"Received device data\", self.device_data);\n    };\n\n    this.bt_hosted_fields_callback = function (err, hostedFieldsInstance) {\n      if (err) {\n        console.error(err);\n        return;\n      }\n      console.log(\"Hosted Fields Instance Created\", hostedFieldsInstance);\n\n      self.hostedFieldsInstance = hostedFieldsInstance;\n\n      hostedFieldsInstance.on(\n        \"validityChange\",\n        self.bt_handle_validity_changed\n      );\n    };\n\n    this.tokenize = function () {\n      console.log(\"tokenizing\");\n      // CONSIDER: submit billing address at this step\n      self.hostedFieldsInstance.tokenize(self.bt_tokenize_callback);\n    };\n\n    this.show_error = function (message) {\n      self.$el.find(\".braintree_error_message\").html(message);\n    };\n\n    this.handle_callback_errors = function (err) {\n      if (err.code == \"HOSTED_FIELDS_FIELDS_INVALID\") {\n        for (var i = 0; i < err.details.invalidFieldKeys.length; i++) {\n          var k = err.details.invalidFieldKeys[i];\n          self.$el\n            .find(BRAINTREE_FIELD_MAP[k].selector)\n            .addClass(\"braintree_invalid\");\n        }\n        self.show_error(\"Please ensure all fields are filled in correctly\");\n      } else if (err.code == \"HOSTED_FIELDS_FIELDS_EMPTY\") {\n        for (k in BRAINTREE_FIELD_MAP) {\n          self.$el\n            .find(BRAINTREE_FIELD_MAP[k].selector)\n            .addClass(\"braintree_invalid\");\n        }\n        self.show_error(\"Please ensure all fields are filled in correctly\");\n      }\n      self.$form.find(\".button\").removeClass(\"disabled\");\n    };\n\n    this.bt_tokenize_callback = function (err, payload) {\n      if (err) {\n        self.handle_callback_errors(err);\n        return;\n      }\n      console.log(\"Submit nonce\", payload);\n      // update nonce field\n      // submit billing form to Web Cube\n      $('input[name=\"nonce\"]', self.$form).val(payload.nonce);\n\n      if (self.use_kount && self.device_data != null) {\n        $('input[name=\"devicedata\"]', self.$form).val(self.device_data);\n      }\n\n      // remove breaker for checkout_step.handle_checkout_form_submit\n      self.$form.data(\"no-ajax-submit\", false);\n\n      // disassociate click/submit, so these do not fire if we have an error\n      // and the form persists\n      self.clear_handlers();\n      self.$form.submit();\n    };\n\n    this.clear_handlers = function () {\n      self.$el.off(\"click\", self.$el.find(\"button\").selector, self.bt_submit);\n      self.$el.off(\"submit\", self.$el.find(\"form\").selector, self.bt_submit);\n    };\n\n    this.bt_handle_validity_changed = function (event) {\n      var field = event.fields[event.emittedBy];\n      console.log(\"Braintree validity changed\", field);\n      if (!field.isValid) {\n        $(field.container).addClass(\"braintree_invalid\");\n        self.show_error(\"Please ensure all fields are filled in correctly\");\n      } else {\n        $(field.container).removeClass(\"braintree_invalid\");\n        if (self.$el.find(\".braintree_invalid\").length == 0) {\n          self.show_error(\"\");\n        }\n      }\n    };\n\n    this.get_hosted_fields_config = function () {\n      var styles = {};\n      try {\n        styles = JSON.parse(self.$el.find(\"script.hosted_fields_style\").text());\n      } catch (err) {\n        console.err(\"issue loading braintree hosted fields style:\", err);\n      }\n\n      return {\n        styles: styles,\n        fields: BRAINTREE_FIELD_MAP,\n      };\n    };\n  },\n  {\n    initialize: function () {\n      console.log(\"initializing braintree\");\n      console.log(\"clearing nonce\");\n      this.$nonce.val(\"\");\n      this.load_scripts();\n    },\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: Braintree,\n    factory: new WebCubeObjectFactory(Braintree, \"braintree\", [[]]),\n  };\n}\n","var utils = require(\"webcube-base\");\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require(\"lodash\");\nvar $ = require(\"jquery\");\n\n// NOTE these must be same version as regular braintree script\nvar BRAINTREE_CLIENT_SCRIPT =\n  \"https://js.braintreegateway.com/web/3.31.0/js/client.min.js\";\nvar BRAINTREE_APPLEPAY_SCRIPT =\n  \"https://js.braintreegateway.com/web/3.31.0/js/apple-pay.min.js\";\n\nvar BraintreeApplePayButton = WebCubeObject.extend(\n  function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    var self = this;\n\n    self.client_authorization = self.$el.data(\"authorization\");\n    self.ship_methods_url = self.$el.data(\"applepay-ship-methods-url\");\n    self.set_ship_method_url = self.$el.data(\"applepay-set-ship-method-url\");\n    self.process_payment_url = self.$el.data(\"applepay-process-payment-url\");\n    self.complete_url = self.$el.data(\"complete-url\") || null;\n    self.basket_url = self.$el.data(\"basket-url\") || null;\n    self.csrf = self.$el.data(\"csrf\") || null;\n    self.braintree = null;\n    self.elements = null;\n    self.paymentRequest = null;\n    self.card = null;\n    self.prButton = null;\n    self.label = self.$el.data(\"store-label\") || \"Store\";\n\n    this.load_scripts = function () {\n      if (typeof braintree === \"undefined\" && !this.loading_started) {\n        this.loading_started = true;\n        $.getScript(BRAINTREE_CLIENT_SCRIPT, function () {\n          $.getScript(BRAINTREE_APPLEPAY_SCRIPT, function () {\n            self.create_button();\n          });\n        });\n      } else {\n        console.log(\"Braintree already loaded\");\n        self.create_button();\n      }\n    };\n\n    this.get_total = function () {\n      return {\n        label: self.label,\n        amount: self.$el.data(\"total\"),\n      };\n    };\n\n    this.create_button = function () {\n      console.log(\"initializing braintree client\");\n\n      // If we don't have an authorization, call out via ajax\n      // to get one\n      if (self.client_authorization == \"\") {\n        $.getJSON(self.$el.data(\"auth-url\"), function (obj) {\n          self.client_authorization = obj.authorization;\n          self.create_button();\n        });\n        return;\n      }\n\n      if (!window.ApplePaySession) {\n        console.log(\"This device does not support Apple Pay\");\n        return;\n      }\n\n      if (!window.ApplePaySession.canMakePayments()) {\n        console.error(\n          \"This device is not capable of making Apple Pay payments\"\n        );\n      }\n\n      window.braintree.client.create(\n        {\n          authorization: self.client_authorization,\n        },\n        self.handle_braintree_client\n      );\n    };\n\n    this.handle_braintree_client = function (clientErr, clientInstance) {\n      if (clientErr) {\n        console.error(\"Error creating client:\", clientErr);\n        return;\n      }\n      console.log(\"creating braintree applepay from\", clientInstance);\n\n      self.clientInstance = clientInstance;\n\n      window.braintree.applePay.create(\n        {\n          client: clientInstance,\n        },\n        self.init_applepay_instance\n      );\n    };\n\n    this.init_applepay_instance = function (applePayErr, applePayInstance) {\n      if (applePayErr) {\n        console.error(\"Error creating applePayInstance:\", applePayErr);\n        return;\n      }\n\n      self.applePayInstance = applePayInstance;\n\n      console.log(\"Applepay Instance created for braintree\", applePayInstance);\n\n      var promise = window.ApplePaySession.canMakePaymentsWithActiveCard(\n        applePayInstance.merchantIdentifier\n      );\n      promise.then(function (canMakePaymentsWithActiveCard) {\n        console.log(\n          \"can Make Payments with Active Card\",\n          canMakePaymentsWithActiveCard\n        );\n        if (canMakePaymentsWithActiveCard) {\n          self.insert_applepay_button(applePayInstance);\n        }\n      });\n    };\n\n    this.insert_applepay_button = function () {\n      // Set up Apple Pay buttons\n      self.$el.html(\n        '<div class=\"apple-pay-button apple-pay-button-black\"></div>'\n      );\n      $(\".apple-pay-button\").click(self.handle_applepay_click);\n    };\n\n    this.handle_applepay_click = function () {\n      console.log(\"creating payment request\");\n      self.paymentRequest = self.applePayInstance.createPaymentRequest({\n        total: self.get_total(),\n        requiredShippingContactFields: [\n          \"postalAddress\",\n          \"name\",\n          \"email\",\n          \"phone\",\n        ],\n        requiredBillingContactFields: [\"postalAddress\"],\n      });\n\n      // Reference Docs\n      // https://developer.apple.com/documentation/applepayjs\n      self.session = new window.ApplePaySession(2, self.paymentRequest);\n      self.session.onvalidatemerchant = self.handle_onvalidatemerchant;\n      self.session.onpaymentauthorized = self.handle_onpaymentauthorized;\n      self.session.onshippingcontactselected =\n        self.handle_onshippingcontactselected;\n      self.session.onshippingmethodselected =\n        self.handle_onshippingmethodselected;\n\n      console.log(\"Starting Apple Pay Session\");\n      self.session.begin();\n    };\n\n    this.handle_onshippingcontactselected = function (event) {\n      var ship_addr = event.shippingContact;\n\n      console.log(\"received shipping contact\", ship_addr);\n\n      if (ship_addr.countryCode.toLowerCase() !== \"us\") {\n        // is this a restriction?\n        event.updateWith({ status: \"invalid_shipping_address\" });\n      } else {\n        // Force country to be uppercase iso2\n        // centralize values\n        ship_addr.country = ship_addr.countryCode.toUpperCase();\n        ship_addr.city = ship_addr.locality;\n        ship_addr.region = ship_addr.administrativeArea;\n\n        $.ajax({\n          method: \"POST\",\n          url: self.ship_methods_url,\n          data: { address_json: JSON.stringify(ship_addr) },\n          success: function (data) {\n            data.status = event.STATUS_SUCCESS;\n            data.newTotal = data.total; // normalize\n            data.newLineItems = data.displayItems;\n            data.newShippingMethods = data.shippingOptions;\n            console.log(data);\n            self.session.completeShippingContactSelection(data);\n          },\n          error: function (data) {\n            console.log(\"Unable to set shipping options: \", data);\n            data.status = event.STATUS_FAIL;\n            self.session.completeShippingContactSelection(data);\n          },\n        });\n      }\n    };\n\n    this.handle_onshippingmethodselected = function (event) {\n      console.log(\"received shipping method\", event.shippingMethod);\n      $.ajax({\n        method: \"POST\",\n        url: self.set_ship_method_url,\n        data: { shippingOption: event.shippingMethod.identifier },\n        success: function (data) {\n          data.status = event.STATUS_SUCCESS;\n          data.newTotal = data.total;\n          data.newLineItems = data.displayItems;\n          console.log(data);\n          self.session.completeShippingMethodSelection(data);\n        },\n        error: function (data) {\n          console.log(\"Unable to set shipping option: \", data);\n          data.status = event.STATUS_FAIL;\n          self.session.completeShippingMethodSelection(data);\n        },\n      });\n    };\n\n    this.handle_onvalidatemerchant = function (event) {\n      self.applePayInstance.performValidation(\n        {\n          validationURL: event.validationURL,\n          displayName: self.label, // TODO where is this labeled, pass in via data-attribute\n        },\n        function (validationError, merchantSession) {\n          if (validationError) {\n            console.error(\"error validating merchant:\", validationError);\n            self.session.abort();\n            return;\n          }\n          self.session.completeMerchantValidation(merchantSession);\n        }\n      );\n    };\n\n    this.map_address = function (addr, data, prefix) {\n      data[prefix + \"firstname\"] = addr.givenName;\n      data[prefix + \"lastname\"] = addr.familyName;\n      data[prefix + \"country\"] = addr.countryCode;\n      data[prefix + \"state\"] = addr.administrativeArea;\n      data[prefix + \"city\"] = addr.locality;\n      data[prefix + \"zipcode\"] = addr.postalCode;\n      data[prefix + \"address1\"] = addr.addressLines[0];\n      if (addr.addressLines.length > 1) {\n        data[prefix + \"address2\"] = addr.addressLines[1];\n      }\n      if (addr[\"phoneNumber\"] != undefined) {\n        data[prefix + \"phone\"] = addr[\"phoneNumber\"];\n      }\n    };\n\n    this.handle_onpaymentauthorized = function (event) {\n      console.log(\"Payment Event\", event);\n\n      self.applePayInstance.tokenize(\n        {\n          token: event.payment.token,\n        },\n        function (tokenizeErr, payload) {\n          if (tokenizeErr) {\n            console.error(\"Error tokenizing Apple Pay:\", tokenizeErr);\n            self.session.completePayment(window.ApplePaySession.STATUS_FAILURE);\n            return;\n          }\n\n          console.log(payload);\n\n          var payer_data = {\n            token: payload.nonce,\n            email: event.payment.shippingContact.emailAddress,\n          };\n\n          self.map_address(event.payment.shippingContact, payer_data, \"ship_\");\n          self.map_address(event.payment.shippingContact, payer_data, \"bill_\");\n\n          if (payload.shippingOption != undefined) {\n            payer_data[\"shipping_method\"] = payload.shippingMethod.identifier;\n          }\n\n          $.ajax({\n            type: \"POST\",\n            url: self.process_payment_url,\n            data: payer_data,\n            success: function (data) {\n              self.session.completePayment(window.ApplePaySession.STATUS_SUCCESS);\n              self.payment_complete();\n            },\n            error: function (data) {\n              console.error(\"Error finalizing Apple Pay Payment\", data);\n              self.session.completePayment(window.ApplePaySession.STATUS_FAILURE);\n            },\n            dataType: \"json\",\n          });\n        }\n      );\n    };\n\n    this.payment_complete = function () {\n      if (!self.csrf) {\n        window.location = self.basket_url;\n      }\n      var ajax_param = {\n        method: \"POST\",\n        beforeSend: function (xhr, settings) {\n          xhr.setRequestHeader(\"X-CSRFToken\", self.csrf);\n        },\n        success: function (data, stat) {\n          if (data.checkout_success) {\n            window.location = data.checkout_success;\n            return;\n          } else if (data.errors) {\n            window.location = self.basket_url;\n          }\n        },\n      };\n      $.ajax(self.complete_url, ajax_param);\n    };\n  },\n  {\n    initialize: function () {\n      console.log(\"initializing braintree payment request\");\n      this.load_scripts();\n    },\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: BraintreeApplePayButton,\n    factory: new WebCubeObjectFactory(\n      BraintreeApplePayButton,\n      \"braintree-applepay\",\n      [[]]\n    ),\n  };\n}\n","var utils = require(\"webcube-base\");\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require(\"lodash\");\nvar $ = require(\"jquery\");\n\n/* NOTE stubbed out and not yet functional */\n\n/* https://developer.apple.com/documentation/apple_pay_on_the_web/displaying_apple_pay_buttons_using_javascript  */\nvar APPLEPAY_SCRIPT =\n  \"https://applepay.cdn-apple.com/jsapi/v1/apple-pay-sdk.js\";\n\nvar OrbitalApplePayButton = WebCubeObject.extend(\n  function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    var self = this;\n\n    self.client_authorization = self.$el.data(\"authorization\");\n    self.merchant_identifier = self.$el.data(\"merchant-id\");\n    self.ship_methods_url = self.$el.data(\"applepay-ship-methods-url\");\n    self.set_ship_method_url = self.$el.data(\"applepay-set-ship-method-url\");\n    self.process_payment_url = self.$el.data(\"applepay-process-payment-url\");\n    self.complete_url = self.$el.data(\"complete-url\") || null;\n    self.basket_url = self.$el.data(\"basket-url\") || null;\n    self.merchant_validation_url = self.$el.data(\n      \"applepay-merchant-validation-url\"\n    );\n    self.csrf = self.$el.data(\"csrf\") || null;\n    self.applepay = null;\n    self.elements = null;\n    self.paymentRequest = null;\n    self.card = null;\n    self.prButton = null;\n    self.label = self.$el.data(\"store-label\") || \"Store\";\n\n    this.load_scripts = function () {\n      if (typeof applepay === \"undefined\" && !this.loading_started) {\n        this.loading_started = true;\n        $.getScript(APPLEPAY_SCRIPT, function () {\n          self.create_button();\n        });\n      } else {\n        console.log(\"Apple Pay already loaded\");\n        self.create_button();\n      }\n    };\n\n    this.get_total = function () {\n      return {\n        label: self.label,\n        amount: self.$el.data(\"total\"),\n      };\n    };\n\n    this.create_button = function () {\n      console.log(\"initializing orbital client\");\n      self.applepay = {};\n\n      // If we don't have an authorization, call out via ajax\n      // to get one\n      if (self.merchant_identifier == \"\") {\n        $.getJSON(self.$el.data(\"auth-url\"), function (obj) {\n          self.merchant_identifier = obj.merchant_identifier;\n          console.log(\"Received merchant identifier\", obj.merchant_identifier);\n          if (!obj.merchant_identifier) {\n            console.error(\"Empty Merchant Id, aborting \", obj);\n          } else {\n            self.create_button();\n          }\n        });\n        return;\n      }\n\n      if (!window.ApplePaySession) {\n        console.log(\"This device does not support Apple Pay\");\n        return;\n      }\n\n      if (!window.ApplePaySession.canMakePayments()) {\n        console.error(\n          \"This device is not capable of making Apple Pay payments\"\n        );\n      }\n\n      $(\"#applepay-loading\", self.$el).show();\n      //self.$el.html('<apple-pay-button buttonstyle=\"black\" type=\"buy\" locale=\"en-US\"></apple-pay-button>');\n\n      var promise = window.ApplePaySession.canMakePaymentsWithActiveCard(\n        self.merchant_identifier\n      );\n\n      promise.then(function (canMakePaymentsWithActiveCard) {\n        //console.log(\"can Make Payments with Active Card\",canMakePaymentsWithActiveCard);\n        if (canMakePaymentsWithActiveCard) {\n          self.insert_applepay_button();\n        }\n        $(\"#applepay-loading\", self.$el).hide();\n      });\n    };\n\n    this.insert_applepay_button = function () {\n      // Set up Apple Pay buttons\n      //self.$el.html('<apple-pay-button buttonstyle=\"black\" type=\"buy\" locale=\"en-US\"></apple-pay-button>');\n      $(\"apple-pay-button\").on(\"click\", self.handle_applepay_click);\n    };\n\n    this.handle_applepay_click = function () {\n      console.log(\"creating payment request\");\n      self.paymentRequest = {\n        total: self.get_total(),\n        currencyCode: \"USD\",\n        countryCode: \"US\",\n        //supportedCountries: ['US'], // TODO add external country list support\n        supportedNetworks: [\"visa\", \"masterCard\", \"amex\", \"discover\"], // TOOD make configurable\n        merchantCapabilities: [\"supports3DS\"],\n        requiredShippingContactFields: [\n          \"postalAddress\",\n          \"name\",\n          \"email\",\n          //                \"phone\"\n        ],\n        requiredBillingContactFields: [\"postalAddress\"],\n        // CONSIDER supportsCouponCode\n      };\n\n      // Reference Docs\n      // https://developer.apple.com/documentation/applepayjs\n      self.session = new window.ApplePaySession(3, self.paymentRequest);\n      self.session.onvalidatemerchant = self.handle_onvalidatemerchant;\n      self.session.onpaymentauthorized = self.handle_onpaymentauthorized;\n      self.session.onshippingcontactselected =\n        self.handle_onshippingcontactselected;\n      self.session.onshippingmethodselected =\n        self.handle_onshippingmethodselected;\n\n      console.log(\"Starting Apple Pay Session\");\n      self.session.begin();\n    };\n\n    this.handle_onshippingcontactselected = function (event) {\n      var ship_addr = event.shippingContact;\n\n      console.log(\"received shipping contact\", ship_addr);\n\n      if (ship_addr.countryCode.toLowerCase() !== \"us\") {\n        // is this a restriction?\n        event.updateWith({ status: \"invalid_shipping_address\" });\n      } else {\n        // Force country to be uppercase iso2\n        // centralize values\n        ship_addr.country = ship_addr.countryCode.toUpperCase();\n        ship_addr.city = ship_addr.locality;\n        ship_addr.region = ship_addr.administrativeArea;\n\n        $.ajax({\n          method: \"POST\",\n          url: self.ship_methods_url,\n          data: { address_json: JSON.stringify(ship_addr) },\n          success: function (data) {\n            data.status = event.STATUS_SUCCESS;\n            data.newTotal = data.total; // normalize\n            data.newLineItems = data.displayItems;\n            data.newShippingMethods = data.shippingOptions;\n            console.log(data);\n            self.session.completeShippingContactSelection(data);\n          },\n          error: function (data) {\n            console.log(\"Unable to set shipping options: \", data);\n            data.status = event.STATUS_FAIL;\n            self.session.completeShippingContactSelection(data);\n          },\n        });\n      }\n    };\n\n    this.handle_onshippingmethodselected = function (event) {\n      console.log(\"received shipping method\", event.shippingMethod);\n      $.ajax({\n        method: \"POST\",\n        url: self.set_ship_method_url,\n        data: { shippingOption: event.shippingMethod.identifier },\n        success: function (data) {\n          data.status = event.STATUS_SUCCESS;\n          data.newTotal = data.total;\n          data.newLineItems = data.displayItems;\n          console.log(data);\n          self.session.completeShippingMethodSelection(data);\n        },\n        error: function (data) {\n          console.log(\"Unable to set shipping option: \", data);\n          data.status = event.STATUS_FAIL;\n          self.session.completeShippingMethodSelection(data);\n        },\n      });\n    };\n\n    this.handle_onvalidatemerchant = function (event) {\n      console.log(\"onvalidatemerchant\", event);\n      $.ajax({\n        method: \"POST\",\n        url: self.merchant_validation_url,\n        beforeSend: function (xhr, settings) {\n          xhr.setRequestHeader(\"X-CSRFToken\", self.csrf);\n        },\n        success: function (data) {\n          console.log(\"Merchant Validation:\", data);\n          self.session.completeMerchantValidation(data.applepay);\n        },\n        error: function (data) {\n          console.error(\"Error doing merchant validation: \", data);\n        },\n      });\n    };\n\n    this.map_address = function (addr, data, prefix) {\n      data[prefix + \"firstname\"] = addr.givenName;\n      data[prefix + \"lastname\"] = addr.familyName;\n      data[prefix + \"country\"] = addr.countryCode;\n      data[prefix + \"state\"] = addr.administrativeArea;\n      data[prefix + \"city\"] = addr.locality;\n      data[prefix + \"zipcode\"] = addr.postalCode;\n      data[prefix + \"address1\"] = addr.addressLines[0];\n      if (addr.addressLines.length > 1) {\n        data[prefix + \"address2\"] = addr.addressLines[1];\n      }\n      if (addr[\"phoneNumber\"] != undefined) {\n        data[prefix + \"phone\"] = addr[\"phoneNumber\"];\n      }\n    };\n\n    this.handle_onpaymentauthorized = function (event) {\n      console.log(\"Payment Event\", event);\n      var token = event.payment.token;\n\n      var payer_data = {\n        token: JSON.stringify(token),\n        email: event.payment.shippingContact.emailAddress,\n      };\n\n      self.map_address(event.payment.shippingContact, payer_data, \"ship_\");\n      self.map_address(event.payment.shippingContact, payer_data, \"bill_\");\n\n      // if (false) {\n      //   //payload.shippingOption != undefined){ TODO do i need to update this?\n      //   payer_data[\"shipping_method\"] = payload.shippingMethod.identifier;\n      // }\n\n      $.ajax({\n        type: \"POST\",\n        url: self.process_payment_url,\n        data: payer_data,\n        success: function (data) {\n          self.session.completePayment(window.ApplePaySession.STATUS_SUCCESS);\n          self.payment_complete();\n        },\n        error: function (data) {\n          console.error(\"Error finalizing Apple Pay Payment\", data);\n          self.session.completePayment(window.ApplePaySession.STATUS_FAILURE);\n        },\n        dataType: \"json\",\n      });\n    };\n\n    this.payment_complete = function () {\n      if (!self.csrf) {\n        window.location = self.basket_url;\n      }\n      var ajax_param = {\n        method: \"POST\",\n        beforeSend: function (xhr, settings) {\n          xhr.setRequestHeader(\"X-CSRFToken\", self.csrf);\n        },\n        success: function (data, stat) {\n          if (data.checkout_success) {\n            window.location = data.checkout_success;\n            return;\n          } else if (data.errors) {\n            window.location = self.basket_url;\n          }\n        },\n      };\n      $.ajax(self.complete_url, ajax_param);\n    };\n  },\n  {\n    initialize: function () {\n      console.log(\"initializing orbital payment request\");\n      this.load_scripts();\n    },\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: OrbitalApplePayButton,\n    factory: new WebCubeObjectFactory(\n      OrbitalApplePayButton,\n      \"orbital-applepay\",\n      [[]]\n    ),\n  };\n}\n","var utils = require(\"webcube-base\");\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require(\"lodash\");\nvar $ = require(\"jquery\");\n\nvar ORBITAL_HPF_SCRIPT_SANDBOX =\n  \"https://www.chasepaymentechhostedpay-var.com/hpf/js/hpfParent.min.js\";\nvar ORBITAL_HPF_SCRIPT_PROD =\n  \"https://www.chasepaymentechhostedpay.com/hpf/js/hpfParent.min.js\";\n\nvar OrbitalPayments = WebCubeObject.extend(\n  function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    this.$form = $(\"#form_payment\", this.$el);\n    this.$token = $('input[name=\"token\"]', this.$form);\n    var self = this;\n    self.hpf_src = self.$el.data(\"orbital-hpf-src\");\n    self.sandbox = self.$el.data(\"orbital-mode\") != \"production\";\n\n    this.load_scripts = function () {\n      if (window.orbital_loaded == undefined && !this.loading_started) {\n        this.loading_started = true;\n        $.getScript(\n          self.sandbox ? ORBITAL_HPF_SCRIPT_SANDBOX : ORBITAL_HPF_SCRIPT_PROD,\n          function () {\n            self.init();\n            window.orbital_loaded = true;\n          }\n        );\n      } else {\n        console.log(\"Orbital already loaded\");\n        self.init();\n      }\n    };\n\n    this.init = function () {\n      // TODO Create iframe\n      console.log(\n        \"initializing orbital iframe\",\n        self.sandbox ? \"sandbox\" : \"production\"\n      );\n      $(\".orbital_hpf_iframe_container\", self.$el).html(\n        '<iframe style=\"width: 100%; min-height: 900px;\" title=\"Orbital iFrame\" src=\"' +\n          self.hpf_src +\n          '\"></iframe>'\n      );\n    };\n\n    this.bind_window_handlers = function () {\n      window.handlePaymentErrors = function (data) {\n        console.log(\"handle Payment\", data);\n        var msg = HANDLE_PAY_ERRORS[data.errorCode[0]];\n        if (msg == undefined) {\n          msg = \"There was an error submitting payment info, please try again.\";\n        }\n        alert(msg);\n      };\n      window.completePayment = function (data) {\n        console.log(\"complete Payment\", data, self.id);\n        //alert(\"Completed Payment!\")\n        self.$token.val(data.uID);\n        if ($(\"#id_bill_email\", self.$form).val() == \"\") {\n          alert(\"Please enter billing email address\");\n          $(\".orbital_hpf_iframe_container\", self.$el).hide();\n          $(\".submit_row\", self.$el).removeClass(\"hide\").show();\n        } else {\n          console.log(\"Submitting form with\", self.$token.val());\n          self.$form.submit();\n        }\n      };\n      window.hpfReady = function () {\n        console.log(\"Orbital HPF Ready\");\n      };\n      window.scrollRelay = function (scrollX, scrollY) {\n        console.log(\"Orbital Scroll Relay\", scrollX, scrollY);\n      };\n      window.startPayment = function () {\n        console.log(\"Orbital Start Payment\");\n        return false;\n      };\n      window.cancelPayment = function () {\n        console.log(\"Orbital Cancel Payment\");\n        alert(\"Canceled Payment, Please Refresh\");\n      };\n      window.whatsThis = function (data) {\n        console.log(\"Orbital Whats This\", data); // show cvv popup\n        $(\".whatsthis-\" + data, self.$el).show();\n        // data=(cvv|routing|account)\n      };\n      window.whatCVV2 = function () {\n        console.log(\"Orbital What CVV2\"); // show cvv2 popup\n        $(\".whatsthis-cvv2\", self.$el).show();\n      };\n    };\n  },\n  {\n    initialize: function () {\n      this.bind_window_handlers();\n      this.load_scripts();\n    },\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: OrbitalPayments,\n    factory: new WebCubeObjectFactory(OrbitalPayments, \"orbital_hpf\", [[]]),\n  };\n}\n\nconst HANDLE_PAY_ERRORS = {\n  \"000\": \"Successful request.\",\n  100: \"Merchant Identifier left blank or not valid. The transaction was not processed.\",\n  110: \"Session Identifier left blank. The transaction was not processed.\",\n  118: \"Too many Captcha retries.\",\n  200: \"Name not present.\",\n  300: \"Amount not specified or invalid value entered \",\n  310: \"Credit card number left blank or did not pass Mod10. \",\n  315: \"Credit card number not valid\", //did not pass Mod10. ',\n  320: \"Credit card type left blank or invalid. \",\n  330: \"Expiration month left blank.\",\n  340: \"Expiration year left blank.\",\n  350: \"CVV2 field submitted but does not match the card.\",\n  355: \"CVV2 required but not present.\",\n  357: \"An invalid character was entered, such as a letter in a numeric field. \",\n  360: \"Payment declined by financial institution, or some other error has occurred.\",\n  370: \"Expiration date invalid.\",\n  400: \"Transaction tracer value does not match.\",\n};\n","var utils = require(\"webcube-base\");\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require(\"lodash\");\nvar $ = require(\"jquery\");\n\nvar SCRIPT_URL = \"https://www.paypalobjects.com/api/checkout.js\";\nvar BUTTON_CONTAINER_ID = \"paypal-button\";\n\nvar Paypal = WebCubeObject.extend(\n  function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    var self = this;\n\n    this.complete_url = this.$el.data(\"complete_url\") || null;\n    this.sandbox = this.$el.data(\"sandbox\") == true;\n    this.client_id = this.$el.data(\"client_id\");\n    this.create_payment_url = this.$el.data(\"create_payment_url\");\n    this.store_payer_url = this.$el.data(\"store_payer_url\");\n    this.loading_started = false;\n    this.style = {\n      size: this.$el.data(\"button-size\") || \"medium\",\n      color: this.$el.data(\"button-color\") || \"gold\",\n      shape: this.$el.data(\"button-shape\") || \"rect\",\n      label: this.$el.data(\"button-label\") || \"pay\",\n      tagline: this.$el.data(\"button-tagline\") || false,\n    };\n\n    this.handle_step_selection = function (msg) {\n      if (msg.payload.step_name == \"update-items\") {\n        self.create_button();\n      }\n    };\n\n    this.register(\"select-step\", this.handle_step_selection);\n\n    this.load_scripts = function () {\n      console.log(\"loading paypal script\");\n      // document.write script tag\n      // NOTE make sure this hasn't been loaded yet!\n      if (typeof paypal === \"undefined\" && !this.loading_started) {\n        this.loading_started = true;\n        $.getScript(SCRIPT_URL, function () {\n          self.create_button();\n        });\n      } else {\n        //console.log(\"PayPal already loaded\");\n        self.create_button();\n      }\n    };\n\n    this.create_button = function (element_id) {\n      console.log(\"creating paypal button\");\n      if (element_id == null) {\n        element_id = BUTTON_CONTAINER_ID;\n      }\n      var authRequest;\n      // clear any children first\n      $(\"#\" + element_id).empty();\n\n      window.paypal.Button.render(\n        {\n          env: self.sandbox ? \"sandbox\" : \"production\",\n          style: self.style,\n          payment: function (resolve, reject) {\n            console.log(\"resolving payment\");\n            window.paypal.request\n              .post(self.create_payment_url)\n              .then(function (data) {\n                //console.log(\"payment url sent data to resolve\",data);\n                resolve(data.paymentID);\n              })\n              .catch(function (err) {\n                reject(err);\n              });\n          },\n          onAuthorize: function (data, actions) {\n            console.log(\"Authorize\", data);\n            window.paypal.request\n              .post(self.store_payer_url, {\n                paymentID: data.paymentID,\n                payerID: data.payerID,\n              })\n              .then(function (data) {\n                if (typeof data.payer_id !== \"undefined\") {\n                  if (self.complete_url) {\n                    window.location = self.complete_url;\n                  } else {\n                    self.send(\"submit-step\", { step_name: \"update-items\" });\n                  }\n                } else {\n                  console.log(\"Checkout Errors Encountered\", data);\n                }\n              })\n              .catch(function (err) {\n                console.log(\"Go to an error page\", err);\n              });\n          },\n          onError: function (err) {\n            console.log(\"paypal error\", err);\n          },\n        },\n        \"#\" + element_id\n      );\n    };\n  },\n  {\n    initialize: function () {\n      if (\n        !$(\"body\").hasClass(\"cart\") ||\n        $(\".co-step,.current\").data(\"key\") == \"update-items\"\n      ) {\n        this.load_scripts();\n      }\n    },\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: Paypal,\n    factory: new WebCubeObjectFactory(Paypal, \"paypal\", [[]]),\n  };\n}\n","var utils = require(\"webcube-base\");\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require(\"lodash\");\nvar $ = require(\"jquery\");\n\nvar STRIPE_CLIENT_SCRIPT = \"https://js.stripe.com/v3/\";\n\nvar StripePayments = WebCubeObject.extend(\n  function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    this.$form = $(\"#form_payment\", this.$el);\n    this.$token = $('input[name=\"token\"]', this.$form);\n    var self = this;\n    self.public_key = self.$el.data(\"stripe-public-key\");\n    self.stripe = null;\n    self.elements = null;\n    self.card = null;\n    self.allow_form_submit = self.$el.data(\"no-checkout\") || false;\n\n    this.validate_webcube_fields = function () {\n      var incomplete = 0;\n      self.$el.find(\"[required] input\").each(function () {\n        if ($(this).val() == \"\") {\n          incomplete += 1;\n          $(this).addClass(\"checkout_field_error\");\n        } else {\n          $(this).removeClass(\"checkout_field_error\");\n        }\n      });\n      self.$el.find(\"[required] select\").each(function () {\n        if ($(this).val() == \"\") {\n          incomplete += 1;\n          $(this).addClass(\"checkout_field_error\");\n        } else {\n          $(this).removeClass(\"checkout_field_error\");\n        }\n      });\n      if (incomplete > 0) {\n        return false;\n      }\n      return true;\n    };\n\n    this.stripe_submit = function (e) {\n      // Checkout form handles its own submit, so we prevent default\n      // Card store form just relies on standard submit so we don't want to halt that here\n      if (self.allow_form_submit == false) {\n        e.preventDefault();\n      }\n      if (!self.validate_webcube_fields()) {\n        self.show_error(\"Please ensure all required fields are filled out\");\n        return false;\n      }\n\n      console.log(\"preparing for submit\");\n\n      self.$form.find(\"#stripe-submit\").addClass(\"disabled\");\n\n      if (self.$token.val() == \"\") {\n        console.log(\"getting token\");\n        self.get_token();\n        return false;\n      }\n      return true;\n    };\n\n    this.get_token = function () {\n      self.stripe.createToken(self.card).then(function (result) {\n        if (result.error) {\n          self.show_error(result.error.message);\n          self.$form.find(\"#stripe-submit\").removeClass(\"disabled\");\n        } else {\n          console.log(\"setting token in form\", result.token);\n          self.$token.val(result.token.id);\n          console.log(\"submitting payment form\");\n          // remove breaker for checkout_step.handle_checkout_form_submit\n          self.$form.data(\"no-ajax-submit\", false);\n          self.$form.submit();\n        }\n      });\n    };\n\n    this.handle_step_selection = function (msg) {\n      if (msg.payload.step_name == \"update-items\") {\n        // TODO?\n      }\n    };\n\n    this.register(\"select-step\", this.handle_step_selection);\n\n    this.load_scripts = function () {\n      if (typeof Stripe === \"undefined\" && !this.loading_started) {\n        this.loading_started = true;\n        $.getScript(STRIPE_CLIENT_SCRIPT, function () {\n          self.stripe_create_client();\n        });\n      } else {\n        console.log(\"Stripe already loaded\");\n        self.stripe_create_client();\n      }\n    };\n\n    this.stripe_create_client = function () {\n      self.$form.find(\"#id_token\").val(\"\"); // clear the token, this should only be filled when we interact via Ajax\n      console.log(\"initializing stripe client with \", self.public_key);\n\n      self.stripe = window.Stripe(self.public_key);\n\n      self.elements = self.stripe.elements();\n\n      var style = self.get_elements_style();\n\n      self.card = self.elements.create(\"card\", { style: style });\n      self.card.mount(\"#card-number\");\n\n      self.card.addEventListener(\"change\", function (event) {\n        if (event.error) {\n          self.show_error(event.error.message);\n        } else {\n          self.show_error(\"\");\n        }\n      });\n\n      // prevent checkout_step.handle_checkout_form_submit from\n      // submitting until we are ready\n      self.$form.data(\"no-ajax-submit\", true);\n      self.$el.find(\"button\").click(self.stripe_submit);\n      self.$el.find(\"form\").submit(self.stripe_submit);\n    };\n\n    this.get_elements_style = function () {\n      var style = {};\n      try {\n        style = JSON.parse(self.$el.find(\"script.elements_style\").text());\n      } catch (err) {\n        console.log(\"issue loading stripe elements style:\", err);\n      }\n\n      return style;\n    };\n\n    this.show_error = function (message) {\n      self.$el.find(\".stripe_error_message\").html(message);\n    };\n  },\n  {\n    initialize: function () {\n      console.log(\"initializing stripe\");\n      this.load_scripts();\n    },\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: StripePayments,\n    factory: new WebCubeObjectFactory(StripePayments, \"stripe\", [[]]),\n  };\n}\n","var utils = require(\"webcube-base\");\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require(\"lodash\");\nvar $ = require(\"jquery\");\n\nvar STRIPE_CLIENT_SCRIPT = \"https://js.stripe.com/v3/\";\n\nvar StripePaymentRequestButton = WebCubeObject.extend(\n  function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    var self = this;\n    self.public_key = self.$el.data(\"stripe-public-key\");\n    self.ship_methods_url = self.$el.data(\"applepay-ship-methods-url\");\n    self.set_ship_method_url = self.$el.data(\"applepay-set-ship-method-url\");\n    self.process_payment_url = self.$el.data(\"applepay-process-payment-url\");\n    self.complete_url = self.$el.data(\"complete-url\") || null;\n    self.basket_url = self.$el.data(\"basket-url\") || null;\n    self.csrf = self.$el.data(\"csrf\") || null;\n    self.stripe = null;\n    self.elements = null;\n    self.paymentRequest = null;\n    self.card = null;\n    self.prButton = null;\n\n    this.load_scripts = function () {\n      if (typeof Stripe === \"undefined\" && !this.loading_started) {\n        this.loading_started = true;\n        $.getScript(STRIPE_CLIENT_SCRIPT, function () {\n          self.stripe_create_button();\n        });\n      } else {\n        console.log(\"Stripe already loaded\");\n        self.stripe_create_button();\n      }\n    };\n\n    this.stripe_create_button = function () {\n      console.log(\"initializing stripe client with \", self.public_key);\n\n      self.stripe = window.Stripe(self.public_key);\n\n      self.paymentRequest = self.stripe.paymentRequest({\n        country: self.$el.data(\"country-code\"),\n        currency: self.$el.data(\"currency-code\"),\n        requestShipping: true,\n        requestPayerName: true,\n        requestPayerEmail: true,\n        total: {\n          label: \"Total\",\n          pending: true,\n          amount: Math.floor(self.$el.data(\"total\") * 100),\n        },\n      });\n\n      self.paymentRequest.on(\n        \"shippingaddresschange\",\n        self.shipping_address_change\n      );\n\n      self.paymentRequest.on(\n        \"shippingoptionchange\",\n        self.shipping_option_change\n      );\n\n      self.elements = self.stripe.elements();\n\n      console.log(\"activated payment request\", self.paymentRequest);\n      self.prButton = self.elements.create(\"paymentRequestButton\", {\n        paymentRequest: self.paymentRequest,\n      });\n\n      console.log(\"created button \", self.prButton);\n      self.paymentRequest.canMakePayment().then(function (result) {\n        console.log(\"Can make payment\", result);\n        if (result) {\n          self.prButton.mount(\"#\" + self.$el.attr(\"id\"));\n        }\n      });\n\n      /*self.paymentRequest.on('cancel', function(ev){\n            console.log(\"paymentRequest cancel\",ev);\n        });*/\n\n      self.paymentRequest.on(\"token\", function (ev) {\n        console.log(\"setting payment requests token in form\", ev);\n        console.log(\n          \"Received stripe token\",\n          ev.token.id,\n          \"TODO ajax submit to checkout\"\n        );\n        var payer_data = {\n          token: ev.token.id,\n          email: ev.payerEmail,\n          name: ev.payerName,\n        };\n        if (ev.shippingOption != undefined) {\n          payer_data[\"shipping_method\"] = ev.shippingOption.id;\n          self.map_address(ev.shippingAddress, payer_data, \"ship_\");\n        }\n\n        self.submit_payer_data(payer_data, ev);\n      });\n    };\n\n    this.map_address = function (addr, data, prefix) {\n      data[prefix + \"firstname\"] = addr.recipient.split(\" \")[0];\n      data[prefix + \"lastname\"] = addr.recipient.split(\" \").slice(1).join(\" \");\n      data[prefix + \"country\"] = addr.country;\n      data[prefix + \"state\"] = addr.region;\n      data[prefix + \"city\"] = addr.locality;\n      data[prefix + \"zipcode\"] = addr.postalCode;\n      data[prefix + \"address1\"] = addr.addressLine[0];\n      if (addr.addressLine.length > 1) {\n        data[prefix + \"address2\"] = addr.addressLine[1];\n      }\n    };\n\n    this.payment_complete = function () {\n      if (!self.csrf) {\n        window.location = self.basket_url;\n      }\n      var ajax_param = {\n        method: \"POST\",\n        beforeSend: function (xhr, settings) {\n          xhr.setRequestHeader(\"X-CSRFToken\", self.csrf);\n        },\n        success: function (data, stat) {\n          if (data.checkout_success) {\n            window.location = data.checkout_success;\n            return;\n          } else if (data.errors) {\n            window.location = self.basket_url;\n          }\n        },\n      };\n      $.ajax(self.complete_url, ajax_param);\n    };\n\n    this.submit_payer_data = function (payer_data, ev) {\n      $.ajax({\n        type: \"POST\",\n        url: self.process_payment_url,\n        data: payer_data,\n        success: function (data) {\n          ev.complete(\"success\");\n          self.payment_complete();\n        },\n        error: function (data) {\n          ev.complete(\"fail\");\n        },\n        dataType: \"json\",\n      });\n    };\n\n    this.shipping_option_change = function (ev) {\n      console.log(\"Shipping option changed\", ev);\n      // Perform server-side request to update shipping option and recompute total\n      $.ajax({\n        method: \"POST\",\n        url: self.set_ship_method_url,\n        data: { shippingOption: ev.shippingOption.id },\n        success: function (data) {\n          data.status = \"success\";\n          data.newTotal = data.total;\n          console.log(data);\n          ev.updateWith(data);\n        },\n        error: function (data) {\n          console.log(\"Unable to set shipping option: \", data);\n          ev.updateWith({ status: \"fail\" });\n        },\n      });\n    };\n\n    this.shipping_address_change = function (ev) {\n      if (ev.shippingAddress.country !== \"US\") {\n        // is this a restriction?\n        ev.updateWith({ status: \"invalid_shipping_address\" });\n      } else {\n        // Perform server-side request to fetch shipping options\n        $.ajax({\n          method: \"POST\",\n          url: self.ship_methods_url,\n          data: { address_json: JSON.stringify(ev.shippingAddress) },\n          success: function (data) {\n            data.status = \"success\";\n            console.log(data);\n            ev.updateWith(data);\n          },\n          error: function (data) {\n            console.log(\"Unable to set shipping options: \", data);\n            ev.updateWith({ status: \"fail\" });\n          },\n        });\n      }\n    };\n  },\n  {\n    initialize: function () {\n      console.log(\"initializing stripe payment request\");\n      this.load_scripts();\n    },\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: StripePaymentRequestButton,\n    factory: new WebCubeObjectFactory(\n      StripePaymentRequestButton,\n      \"stripe-paymentrequest\",\n      [[]]\n    ),\n  };\n}\n","var utils = require(\"webcube-base\");\nvar _ = require(\"lodash\");\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\n/*\n    Enhanced Ecommerce adapter for Tag Manager\n    Listens for analytics-impression and analytics-action\n    and pushes to dataLayer object accordingly\n*/\n\nvar TagManagerDataLayer = WebCubeObject.extend(\n  function (html_element) {\n    WebCubeObject.call(this);\n    var self = this;\n    self.$el = $(html_element);\n\n    self.email = null;\n    self.email_sha1 = null;\n    self.sessionId = null;\n\n    var userSessionId = $.cookie(\"webcube.usersessionid\");\n    var userEmail = $.cookie(\"webcube.useremail\");\n    var userEmailSha1 = $.cookie(\"webcube.useremail_sha1\");\n\n    // Get user identifiers\n    if (!userSessionId || userSessionId == \"null\" || userSessionId == null) {\n      $.ajax({\n        url: \"/accounts/ajax/user-identifiers/\",\n        type: \"GET\",\n        cache: false,\n        dataType: \"json\",\n        global: false,\n        success: function (data) {\n          $.cookie(\"webcube.usersessionid\", data.sessionId, {\n            path: \"/\",\n            expires: 1,\n          });\n\n          if (data.email) {\n            $.cookie(\"webcube.useremail\", data.email, {\n              path: \"/\",\n              expires: 1,\n            });\n            $.cookie(\"webcube.useremail_sha1\", data.email_sha1, {\n              path: \"/\",\n              expires: 1,\n            });\n          }\n        },\n        error: function (request, error) {\n          console.log(\"Couldn't fetch user info: \" + JSON.stringify(request));\n        },\n      });\n    } else {\n      self.email = userEmail;\n      self.sessionId = userSessionId;\n      self.emailSha1 = userEmailSha1;\n    }\n\n    self.checkout_steps = [\n      \"shipping-info\",\n      \"shipping-method\",\n      \"payment\",\n      \"review\",\n    ];\n    self.cart_data = null;\n\n    // We can custom specify step orders / names via a data-checkout-steps attribute\n    // e.g. data-checkout-steps=\"shipping-info,shipping-method,some-new-step,payment,review\",\n    // where this will correlate to 1,2,3,4,5 in GA Enhanced Ecomm\n    if (self.$el.data(\"checkout-steps\")) {\n      var checkout_steps = self.$el.data(\"checkout-steps\").split(\",\");\n    }\n    var dataLayerName = \"dataLayer\";\n    if (self.$el.data(\"datalayer-name\")) {\n      dataLayerName = self.$el.data(\"datalayer-name\");\n    }\n    self.dataLayer = window[dataLayerName];\n    self.items = null;\n\n    // data-datalayer=\"datalayer\"?\n    // queue impressions of products on visibility?\n    self.push = function (data, event_name) {\n      if (event_name) {\n        data[\"event\"] = event_name;\n      }\n      console.log(\"pushing to data layer\", data);\n      data[\"_clear\"] = true;\n      self.dataLayer.push(data);\n    };\n\n    self.register_listeners = function () {\n      this.register(\"analytics-impression\", self.handle_impression);\n      this.register(\"analytics-action\", self.handle_action);\n\n      // Cart Tracking\n      // We listened to cart updated events so we can\n      // keep track of when an item has been removed.\n      // This is because there are multiple places where the\n      // the removal might occur\n      this.register(\"minicart_updated\", self.track_cart);\n      this.register(\"current_cart\", self.track_cart);\n    };\n\n    self.track_cart = function (msg) {\n      var new_items = null;\n      if (msg.address == \"minicart_updated\") {\n        new_items = msg.payload.data.items;\n      } else {\n        new_items = msg.payload.items;\n      }\n      if (self.items != null && self.items.length > 0) {\n        var removed = _.filter(self.items, function (o) {\n          return (\n            _.findIndex(new_items, function (o1) {\n              return o1.id == o.id;\n            }) < 0\n          );\n        });\n        if (removed.length > 0) {\n          self.action_removeFromCart(\n            _.map(removed, function (o) {\n              return { id: o.sku, name: o.name };\n            })\n          );\n        }\n      }\n      self.items = new_items;\n      self.cart_data = msg.payload;\n\n      console.log(\"track_cart\", self.cart_data);\n      if (self.cart_data && self.cart_data.shipping) {\n        if (\n          self.dataLayer.find(function (e) {\n            return e.event === \"checkoutStarted\";\n          }) === undefined\n        ) {\n          self.action_checkoutStarted(self.cart_data);\n        }\n      }\n    };\n\n    self.push_user_identifiers = function () {\n      self.push({ user: { email: self.email, email_sha1: self.emailSha1, sessionId: self.sessionId } });\n    };\n\n    self.handle_impression = function (msg) {\n      // console.log(\"Received analytics impression\",msg.payload);\n      self.push_user_identifiers();\n      if (self[\"impression_\" + msg.payload.impression]) {\n        self[\"impression_\" + msg.payload.impression](msg.payload.data);\n      }\n    };\n\n    self.handle_action = function (msg) {\n      // console.log(\"Received analytics action\",msg.payload);\n      self.push_user_identifiers();\n      if (self[\"action_\" + msg.payload.action]) {\n        self[\"action_\" + msg.payload.action](msg.payload.data);\n      }\n    };\n\n    // Handle Impression Events\n    self.push(\n      { user: { email: self.email, email_sha1: self.emailSha1, sessionId: self.sessionId } },\n      \"pageView\"\n    );\n\n    self.impression_product_listing = function (data) {\n      self.push({ ecommerce: null });\n      self.push({ ecommerce: { impressions: data } });\n    };\n\n    self.impression_productDetail = function (product_list) {\n      self.push({ ecommerce: null });\n      self.push(\n        {\n          ecommerce: {\n            detail: {\n              products: product_list,\n            },\n          },\n        },\n        \"productDetailImpression\"\n      );\n    };\n\n    // Handle Actions\n    self.action_productClick = function (data) {\n      // TODO productClick action\n    };\n\n    // Currently limiting scope to id/name for simplicity, wherby id is SKU\n    // https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce#product-data\n    self.action_addToCart = function (product_list) {\n      // expecting [ {name,id}, .. ]\n      self.push({ ecommerce: null });\n      self.push(\n        {\n          ecommerce: {\n            add: {\n              products: product_list,\n            },\n          },\n        },\n        \"addToCart\"\n      );\n    };\n\n    self.action_removeFromCart = function (product_list) {\n      // list of removals from cart\n      // expecting [ {name,id}, .. ]\n      self.push({ ecommerce: null });\n      self.push(\n        {\n          ecommerce: {\n            remove: {\n              products: product_list,\n            },\n          },\n        },\n        \"removeFromCart\"\n      );\n    };\n\n    self._products_from_cart = function (wc_cart) {\n      var products = [];\n      if (wc_cart == null) {\n        return products;\n      }\n      _.each(wc_cart.items, function (i) {\n        products.push({\n          name: i.name,\n          id: i.style_number,\n          price: Number(i.unit_price.replace(/[^.\\d]/, \"\")),\n          brand: i.brand,\n          category: i.category,\n          variant: i.sku,\n          image: i.image,\n          display_image: i.display_image,\n          sku: i.sku,\n          url: i.url,\n          total: Number(i.total.replace(/[^.\\d]/, \"\")),\n          quantity: i.quantity,\n        });\n      });\n      return products;\n    };\n\n    self.action_checkoutStarted = function (cart) {\n      var cart_info = {\n        actionField: { step: 0 },\n        products: self._products_from_cart(cart),\n        cart_data: cart,\n        cart_id: cart.tracking,\n        subtotal: Number(cart.subtotal.replace(/[^.\\d]/, \"\")),\n        total: Number(cart.total.replace(/[^.\\d]/, \"\")),\n        currency_code: cart.currency_code,\n      };\n      if (cart.coupons != undefined && cart.coupons.length > 0) {\n        cart_info.coupon = cart.coupons[0]; // limited to 1 coupon, which is the majority\n      }\n      self.push({ ecommerce: null });\n      self.push(\n        {\n          ecommerce: {\n            checkout: cart_info,\n          },\n        },\n        \"checkoutStarted\"\n      );\n    };\n\n    self.action_checkoutStep = function (data) {\n      var step = self.checkout_steps.indexOf(data.step) + 1;\n      if (step >= 0) {\n        var cart_data = data.cart != null ? data.cart : self.cart_data;\n        self.push({ ecommerce: null });\n        self.push(\n          {\n            ecommerce: {\n              checkout: {\n                actionField: { step: step, stepName: data.step },\n                products: self._products_from_cart(\n                  data.cart ? data.cart : self.cart_data\n                ),\n                cart_data: cart_data,\n                subtotal: Number(cart_data.subtotal.replace(/[^.\\d]/, \"\")),\n                total: Number(cart_data.total.replace(/[^.\\d]/, \"\")),\n              },\n            },\n          },\n          \"checkout\"\n        );\n      } else {\n        console.log(\"ignoring checkout step analytics for step\", data.step);\n      }\n    };\n    this.register_listeners();\n  },\n  {\n    initialize: function () {},\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: TagManagerDataLayer,\n    factory: new WebCubeObjectFactory(\n      TagManagerDataLayer,\n      \"tag_manager_datalayer\",\n      [[]]\n    ),\n  };\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\nvar BasketSummary = WebCubeObject.extend(function (html_element) { \n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    var state_open = false;\n    var t = this;\n    var $sidecart = this.$el.find('#sidecart');\n    var $sidecart_sub = this.$el.find('#sidecart_sub');\n    $sidecart.hide();\n    var $basket_summary_header = this.$el.find(\"#basket_summary > h3\");\n    var self = this;\n\n    $basket_summary_header.on('click', function() {\n        if (state_open) { \n            state_open = false;\n            $sidecart.hide();\n            $sidecart_sub.hide();\n            $basket_summary_header.find('.toggle-minimize').html(\"+\");\n        } else { \n            state_open = true;\n            $sidecart.show();\n            $sidecart_sub.show();\n            $basket_summary_header.find('.toggle-minimize').html(\"-\");\n        }\n    });\n\n    this.register_view_cart = function() { \n        var btn = this.$el.find('a.back_to_cart');\n        btn.on('click', function() { \n            sender(\"select-step\",{step_name:\"update-items\"});\n        });\n    };\n\n    this.register('update_cart_summary', function(msg){\n        this.$el.html(msg.payload.summary);\n        self.register_view_cart();\n    });\n\n}, {});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: BasketSummary,\n        factory: new WebCubeObjectFactory(\n            BasketSummary, \n            \"admin-basketsummary\",\n            [[]]\n        )\n    }\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\nvar BackToTop = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n\n    //Check to see if the window is top if not then display button\n    $(window).scroll(function(){\n        if ($(this).scrollTop() > 250) {\n            $('#back_to_top').fadeIn();\n        } else {\n            $('#back_to_top').fadeOut();\n        }\n    });\n        \n    //Click event to scroll to top\n    $('#back_to_top').click(function(e){\n        e.preventDefault();\n        $('html, body').animate({scrollTop : 0},800);\n        return false;\n    });\n\n}, {});\n\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: BackToTop,\n        factory: new WebCubeObjectFactory(BackToTop, \"back-to-top\", [[]])\n    };\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require('lodash');\n\n\n// What this does\n// 1. Extracts JSON product descriptor and updates drop down selecs\n// (select_sku)\n//\n// 2. Manages add-to-cart/instock notify  button states\n//\n//\n// 3. Sends messages to gallery on what options are bineg selected\n//\n// 4. Updates price display based on selected SKU\n//\n//\n\nvar Product = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    this.$product_options = this.$el.find('form .product_option');\n    this.$order_form = this.$el.find(\"div.order_form\");\n    this.$instock_notification_form = this.$el.find(\".request_instock_notification\")\n    this.$product_JSON = this.$el.find(\"script[data-type='product']\")\n    var self = this;\n    self.product_data = (this.$product_JSON.length) ? JSON.parse(this.$product_JSON.text()): {};\n    self.selected_sku = null;\n    var gallery_address = this.$el.find(\"[wc-object='productgallery']\").attr('data-id');\n    var skus_by_option = {};\n    var optiontable = [];\n    // Message when no option is selected\n    var required_message = _.template(self.$el.data('required-message'))\n    self.can_order_only = true;\n    if (self.$el.attr('data-show-only-orderable')) {\n        self.can_order_only = self.$el.data('show-only-orderable');\n    }\n\n    this.select_sku = function(skudata){\n        self.$el.find(\".price .current-price\").text(skudata.price);\n        self.$el.find(\".product_style span.style\").text(skudata.sku);\n        self.$order_form.find(\"input[name='sku']\").val(skudata.sku);\n        self.$order_form.find(\"input[name='content_type']\").val(skudata.content_type);\n        self.$order_form.find(\"input[name='object_id']\").val(skudata.object_id);\n\n        if(skudata.can_order){\n            // enable add to cart or preorder, depending on stock availablility\n            if(skudata.in_stock){\n                self.$order_form.find(\".add_to_cart\").removeClass('disabled');\n                self.$order_form.find(\".add_to_cart input[type='submit']\").attr('disabled', null);\n                self.$order_form.find(\".add_to_cart_preorder\").addClass('disabled').removeClass(\"active\");\n                self.$order_form.find(\".add_to_cart_preorder input[type='submit']\").attr('disabled', 'disabled');\n            }else{\n                self.$order_form.find(\".add_to_cart\").addClass('disabled').removeClass(\"active\");\n                self.$order_form.find(\".add_to_cart input[type='submit']\").attr('disabled', 'disabled');\n                self.$order_form.find(\".add_to_cart_preorder\").removeClass('disabled').addClass('active');\n                self.$order_form.find(\".add_to_cart_preorder input[type='submit']\").attr('disabled', null);\n            }\n        }else{ // otherwise disable both add to cart and preorder\n            self.$order_form.find(\".add_to_cart\").addClass('disabled');\n            self.$order_form.find(\".add_to_cart input[type='submit']\").attr('disabled', 'disabled');\n            self.$order_form.find(\".add_to_cart_preorder\").addClass('disabled');\n            self.$order_form.find(\".add_to_cart_preorder input[type='submit']\").attr('disabled', 'disabled');\n        }\n\n        self.selected_sku = skudata;\n\n        sender(\"sku_selected\", skudata);\n        sender(\"analytics-impression\", {\"impression\":\"productDetail\",\"data\":[{\n            \"id\": self.product_data.style_number,\n            \"name\": self.product_data.name,\n            \"variant\": skudata[\"sku\"],\n            \"variant_text\": _.filter(\n                    [skudata.option1,skudata.option2,skudata.option3],\n                    function(o){ return o != \"\"; }).join(\" \"),\n            \"skudata\":skudata\n        }]});\n    };\n\n    this.select_notify_sku = function(skudata){\n        //console.log(\"prefilling notify forms for\",skudata);\n        // The link needs a popup to prefill sku/ctype/obj_id, so we magic the url params\n        var $notify = self.$el.find(\"a[data-notify-href]\")\n        var notify_href = $notify.data(\"notify-href\") + \"?sku=\"+skudata.sku+\"&content_type=\"+skudata.content_type+\"&object_id=\"+skudata.object_id+\"&url=\"+window.location.pathname;\n        $notify.attr('href', notify_href);\n        self.$instock_notification_form.attr(\"href\",notify_href);\n    }\n\n    this.update_form = function() {\n        //console.log(\"updating form\");\n        if (typeof gallery_address === 'undefined') {\n            gallery_address = self.$el.find(\"[wc-object='\"+self.$el.attr('data-gallery')+\"']\").attr('data-id') || \"\";\n        }\n        var selection = self.get_selection();\n\n        // Identify based upon current selection, how many SKUs we can\n        // order, or notify availability on.\n        // Use this information to toggle appropriate UX buttons\n        var filtered_path = [];\n        var notifiable_path = [];\n        var can_order_on_path = false;\n        var notifiable = false;\n        for(var o1 in skus_by_option){\n            if(selection.option1 != o1 && selection.option1 != \"\") continue;\n            for(var o2 in skus_by_option[o1]){\n                if(selection.option2 != o2 && selection.option2 != \"\") continue;\n                for(var o3 in skus_by_option[o1][o2]){\n                    if(selection.option3 != o3 && selection.option3 != \"\") continue;\n                    var osku = skus_by_option[o1][o2][o3];\n                    filtered_path.push(osku);\n                    if(osku.can_order){ can_order_on_path = true; }\n                    else{  // CONSIDER: check availability date?\n                        notifiable = true;\n                    }\n                 }\n            }\n        }\n        //console.log(orderable_path);\n        //console.log(\"Can Order on path:\",can_order_on_path,\" -- Notifiable:\",notifiable);\n\n        // identify first qualifying sku\n        var skudata = (filtered_path.length > 0)?filtered_path[0]:null;\n\n        // if we have orderable products, but have not narrowed to one, just show add-to-cart\n        if(can_order_on_path && filtered_path.length > 0){\n            //console.log(\"activating add to carts\");\n            self.$order_form.find(\".add_to_cart\").addClass('active');\n            self.$order_form.find(\".add_to_cart_preorder\").removeClass('active');\n            self.$instock_notification_form.removeClass(\"active\");\n            if(!notifiable){\n                self.$el.find(\".notify_popup_link\").removeClass(\"active\");\n            }\n        }\n\n        if(can_order_on_path && notifiable){\n            //console.log(\"showing notify link\");\n            // Show notify link to popup\n            self.select_notify_sku(skudata);\n            self.$el.find(\".notify_popup_link\").addClass(\"active\");\n            self.$instock_notification_form.removeClass(\"active\");\n        }\n\n        if(!can_order_on_path){\n            //console.log(\"hiding add to carts and notify link, showing notify button\");\n            // hide add-to-cart and notify popup link\n            self.$el.find(\".notify_popup_link\").removeClass(\"active\");\n            self.$order_form.find(\".add_to_cart\").removeClass('active');\n            self.$order_form.find(\".add_to_cart_preorder\").removeClass('active');\n\n            // Show Notify When Available Button\n            if(notifiable){\n                self.select_notify_sku(skudata);\n                self.$instock_notification_form.addClass(\"active\");\n            }else{\n                //console.log(\"No viable SKUs on this path!\",filtered_path);\n            }\n        }\n\n        // Have we filtered to an individual SKU?\n        // If so, is it orderable?\n        if(filtered_path.length == 1) {\n            if(selection.option1 in skus_by_option &&\n                    selection.option2 in skus_by_option[selection.option1] &&\n                    selection.option3 in skus_by_option[selection.option1][selection.option2] &&\n                    skus_by_option[selection.option1][selection.option2][selection.option3] !== undefined){\n                //console.log(\"selecting sku \"+skudata.sku);\n                self.select_sku(skudata);\n            }\n        }\n\n        // Notify gallery on new selection\n        sender(gallery_address, {\n          name:'update_product_image',\n            option: {\n                'option1': selection.option1,\n                'option2': selection.option2,\n                'option3': selection.option3\n            }\n        });\n    };\n\n    this.get_selection = function() {\n        var retval = {};\n        _.each([1,2,3], function(v) {\n            retval['option'+v] = self.$product_options.find(\"select.product_option\"+v).val();\n            if (typeof retval['option'+v] === 'undefined') {\n                retval['option'+v] = '';\n            }\n        });\n        //console.log(\"getting selection\",retval)\n        return retval;\n    };\n\n    this.options_by_selection = function(which_option, partial_selection, can_order_only) {\n        // options by selection\n        if (typeof can_order_only === 'undefined') {\n            can_order_only = true;\n        }\n        var rv = _(self.product_data.product_options).filter(function(opt) {\n            var included = true;\n            _.each(partial_selection, function(v, k) {\n                if (typeof opt[k] !== 'undefined' && partial_selection[k] !== '') {\n                    if (opt[k] !== v || (can_order_only && opt.can_order === false))  {\n                        included = false;\n                    }\n                }\n            });\n            return included;\n        }).map(function(v) {\n            return v[which_option];\n        }).uniq();\n        return rv.value();\n    };\n\n    this.collect_options = function() {\n        _.each(self.product_data.product_options, function(val, key) {\n            var k1 = val.option1;\n            var k2 = val.option2;\n            var k3 = val.option3;\n            if (typeof skus_by_option[k1] === 'undefined') {\n                skus_by_option[k1] = {}\n            }\n            if (typeof skus_by_option[k1][k2] === 'undefined') {\n                skus_by_option[k1][k2] = {}\n            }\n            skus_by_option[k1][k2][k3] = val;\n            optiontable.push({\"option1\":k1, \"option2\":k2, \"option3\":k3});\n        });\n    };\n    this.collect_options();\n\n    this.populate_options = function(option_name, register_onchange) {\n        //console.log(\"populating options for \"+option_name);\n        if (typeof register_onchange === 'undefined') {\n            register_onchange=true;\n        }\n        var selection = self.get_selection();\n        var selected = selection[option_name];\n        delete(selection[option_name]);\n        if ($(\"select.product_\"+option_name).length === 0) {\n            return;\n        }\n        var option_choices = self.options_by_selection(option_name, selection, self.can_order_only);\n        var $option_select = self.$product_options.find(\"select.product_\" + option_name);\n        $option_select.empty();\n        var option_label = _(self.product_data.options).filter(function(v) { return v.key == option_name }).first();\n        $option_select.append(\"<option value=''>Choose \" + option_label.title + \"...</option>\");\n        _.each(option_choices, function(val) {\n            var av = \"<option value='\"+val+\"'\";\n            if (val == selected) {\n                av += \" selected='selected'\";\n            }\n            av += \">\" + val + \"</option>\";\n            $option_select.append(av);\n        });\n\n        if (register_onchange) {\n            //$(\"select.product_\"+option_name).on(\"change\", self.update_form);\n            $(\"select.product_\"+option_name).on(\"change\", function(){\n                // repopulate options on new selection\n                var select = this;\n                var after_element = false;\n                $(select).closest('form').find('select').each(function(i) {\n                    if (after_element == true) {\n                        self.populate_options(this.name, false);\n                    }\n                    if (select == this) after_element = true;\n                });\n\n                // then update the product form\n                sender('update_product_form', {\n                    option1: $(\"select.product_option1\").val(),\n                    option2: $(\"select.product_option2\").val(),\n                    option3: $(\"select.product_option3\").val()\n                });\n\n            });\n        }\n    };\n\n    this.populate_options(\"option1\");\n    this.populate_options(\"option2\");\n    this.populate_options(\"option3\");\n\n    this.update_product_form = function(msg) {\n        //console.log(\"updating product form\");\n        $(\"select.product_option1\").val(msg.payload.option1);\n        $(\"select.product_option2\").val(msg.payload.option2);\n        $(\"select.product_option3\").val(msg.payload.option3);\n        self.update_form();\n    };\n\n    this.register('update_product_form', this.update_product_form, this);\n\n\n    $(document).off('submit', 'form.add-to-cart');\n    $(document).on('submit', 'form.add-to-cart', function () {\n        var $this = $(this)\n        //Check if value is  \"\". If option is unavailable  value is undefined\n        if ($this.find('[name=\"option3\"]').val() == \"\") {\n             var option_error = _(self.product_data.options).filter(function(v) { return v.key == \"option3\" }).first()\n        }\n        if ($this.find('[name=\"option2\"]').val() == \"\") {\n             option_error = _(self.product_data.options).filter(function(v) { return v.key == \"option2\" }).first()\n        }\n        if ($this.find('[name=\"option1\"]').val() == \"\") {\n            option_error = _(self.product_data.options).filter(function(v) { return v.key == \"option1\" }).first()\n        }\n\n        if (typeof option_error !== \"undefined\") {\n            alert(required_message({name:option_error.title}));\n            return false;\n        }\n\n        var $loading = $($('script[data-template=\"loading\"]', html_element).text());\n        var $submit_btn = $('input[type=\"submit\"]:visible', this);\n\n        var post_data = {\n                \"name\":self.product_data.name,\n                \"style_number\": self.product_data.style_number,\n                \"price\": Number(self.selected_sku.price.replace(/[^.\\d]/,'')),\n                \"skudata\":self.selected_sku,\n        };\n        _.map($(this).serializeArray(),function(v){\n            return post_data[v.name] = v.value;\n        });\n        post_data.id = post_data.sku\n        post_data.category = self.product_data.category\n        console.log(\"addToCart action \",post_data)\n        sender(\"analytics-action\",{\"action\":\"addToCart\",\"data\":[post_data]});\n\n        $.ajax({\n            url: $(this).attr('action'),\n            type: $(this).attr('method'),\n            data: $(this).serialize(),\n            //dataType: \"json\",\n            success: function (data) {\n                // Show Submit button\n                self.$order_form.find(\".add_to_cart_col.active\").html($submit_btn.css(\"visibility\",\"visible\"));\n\n                $('#general-modal').foundation('reveal', 'close');\n                sender('cart_updated',{added:post_data,result:data})\n            },\n            error: function (xhr, status, err) {\n                try { console.log(\"ERROR\", err);} catch(e){\n                  //skip\n                }\n                // Show Submit button\n                self.$order_form.find(\".add_to_cart_col.active\").html($submit_btn.css(\"visibility\",\"visible\"));\n            }\n        });\n\n        // Hide submit button\n        $submit_btn.css(\"visibility\", \"hidden\");\n        setTimeout(function() {\n            self.$order_form.find(\".add_to_cart_col.active\").append($loading)\n        },125);\n\n        return false;\n    });\n\n}, {\n    initialize: function(){\n        var self = this;\n        if( this.product_data.name == undefined ){ return; }\n\n        //console.log(\"intializing product wc-object\",self.product_data);\n        // Send generic product impression for style\n        sender(\"analytics-impression\", {\"impression\":\"productDetail\",\"data\":[{\n            \"id\":self.product_data.style_number || self.product_data.slug,\n            \"name\":self.product_data.name,\n            \"category\":self.product_data.category,\n            \"category_path\":self.product_data.category_path,\n            \"url\": document.location.protocol +\n                    '//' + document.location.host +\n                    self.product_data.url,\n            \"image\": (self.product_data.image != undefined && self.product_data.image.indexOf(\"://\") < 0) ?\n                    document.location.protocol +'//' + document.location.host +\n                   self.product_data.image : self.product_data.image,\n            \"brand\": self.product_data.brand,\n            \"price\": Number(self.product_data.base_price.replace(/[^.0-9]/,''))\n        }]});\n    }\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: Product,\n        factory: new WebCubeObjectFactory(Product, \"product\", [[]])\n    }\n}\n\n\n","var utils = require(\"webcube-base\");\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar Product = require(\"webcube-product\");\n\n/**\n * To work as a 'bindable', the first parameter should be the html_element,\n * and all other arguments should be added as wc-arguments attribute on the\n * attribute.\n */\nvar ButtonSelector = WebCubeObject.extend(\n  function (html_element) {\n    WebCubeObject.call(this);\n\n    var self = this;\n    self.$select = $(html_element);\n    self.select_name = self.$select.attr(\"name\");\n    // Get the latest product object from the document_binding,\n    // fix, in case we've added many\n    var p = self.$select.parents('[wc-object=\"product\"]')[0];\n    self.product = null;\n    if (typeof p === \"undefined\") {\n      console.log(\"Product doesnt exist\");\n    } else {\n      self.product = p.webcube_object;\n    }\n\n    self.$sibling_selectors = self.$select\n      .parents(\"form\")\n      .find(\"select:not([name=\" + self.select_name + \"])\");\n    self.$button_list = null;\n\n    // Generate initial (all) buttons\n    self.generate_options = function (html_element) {\n      var $html = $(\n        '<ul class=\"button-selector\" data-name=\"' + self.select_name + '\"></ul>'\n      );\n      var options = self.product.options_by_selection(self.select_name, {});\n\n      for (var i = 0; i < options.length; i++) {\n        $html.append(\n          '<li class=\"button tiny\" data-value=\"' +\n            options[i] +\n            '\" data-selector=\"' +\n            self.select_name +\n            '\">' +\n            options[i] +\n            \"</li>\"\n        );\n      }\n      self.$select.addClass(\"button-selector-initialized\").after($html);\n    };\n\n    self.init_handlers = function () {\n      // Add click event handler\n      self.$button_list = self.$select.siblings(\n        \".button-selector[data-name=\" + self.select_name + \"]\"\n      );\n      self.$button_list.on(\"click\", \"li.button\", function () {\n        var $li = $(this);\n\n        if ($li.hasClass(\"disabled\")) {\n          return false;\n        }\n\n        if ($li.hasClass(\"active\")) {\n          self.$select.val(\"\");\n          $li.removeClass(\"active\");\n        } else {\n          self.$select.val($li.data(\"value\"));\n          $li.addClass(\"active\");\n          $li.siblings(\"li.button\").removeClass(\"active\");\n        }\n        self.$select.trigger(\"change\");\n      });\n\n      //self.$sibling_selectors.change(function() {\n      //});\n    };\n\n    this.update_option_availability = function (avail_options) {};\n\n    this.generate_options(html_element);\n\n    self.updateButton = function (msg) {\n      var selection = {};\n      var options = [];\n\n      self.$sibling_selectors.each(function () {\n        var $cur_sel = $(this);\n        selection[$cur_sel.attr(\"name\")] = $cur_sel.val();\n      });\n      options = self.product.options_by_selection(self.select_name, selection);\n\n      // now that we have the list of avaiable options,\n      // update the button list\n\n      self.$button_list.find(\"li.button\").each(function () {\n        var $li = $(this);\n        if (options.indexOf($li.data(\"value\").toString()) > -1) {\n          $li.removeClass(\"disabled\");\n        } else {\n          $li.addClass(\"disabled\");\n        }\n      });\n    };\n  },\n  {\n    initialize: function () {\n      this.init_handlers();\n      this.register(\"update_product_form\", this.updateButton);\n    },\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: ButtonSelector,\n    factory: new WebCubeObjectFactory(\n      ButtonSelector,\n      \"webcube-button-selector\",\n      [[]]\n    ),\n  };\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require('lodash');\n\nvar Checkout = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n    var self = this;\n\n    self.step_summary_info = null;\n\n    var steps = _($(html_element).find(\".step\"));\n    // Update visible step Id Numbers based upon what is active\n    // TODO proces incoming cart steup updates and display appropriate numbers\n    // template cart_pgoress_template, add elemnt to .cart-progress-wrap, with context {steps:[{n:1,name:update-basket}...]}\n    //\n    self.$el = $(html_element);\n    if($(\"#cart_progress_template\").length > 0){\n        self.progress_template = _.template($(\"#cart_progress_template\").text());\n    }else{\n        self.progress_template = null;\n    }\n\n    self.update = function(steps){\n        if(self.progress_template == null){ return; }\n        //console.log(\"updating steps with \",steps);\n        var new_content = self.progress_template({\"step\":steps});\n        if($(\".cart-progress-wrap .cart_progress\").length > 0){\n            $(\".cart-progress-wrap .cart_progress\").replaceWith(new_content);\n        }else{\n            //console.log(\"appending cart progress\",steps,new_content);\n            $(\".cart-progress-wrap\").append(new_content);\n        }\n    }\n\n    self.track_current_step = function(step_name){\n        var old_step = self.$el.data(\"current_step\");\n        $(\"body\").removeClass(\"current_step_\"+old_step);\n        $(\"body\").addClass(\"current_step_\"+step_name);\n        self.$el.removeClass(\"step-\"+old_step);\n        self.$el.data(\"current_step\",step_name);\n        self.$el.addClass(\"step-\"+step_name);\n    }\n\n    this.register('select-step', function(msg){\n        self.track_current_step(msg.payload.step_name);\n    });\n\n    this.register(\"cart_step_status\",function(msg){\n        //console.log(\"received step summary info\",msg.payload);\n        self.step_summary_info = msg.payload;\n\n        var steps = {};\n        for(var i=0;i<msg.payload.length; i++){\n            var s = msg.payload[i];\n            steps[s.key] = s;\n            if(s.status == \"current\"){\n                self.track_current_step(s.key);\n            }\n        }\n        self.update(steps);\n    });\n\n    self.update_step_numbers = function(){\n         self.$el.find(\".active_step\").each(function(i,step){\n            $(\".step_num\",step).html(i);\n        });\n    }\n\n    this.register(\"update_step_numbers\",function(msg){\n        self.update_step_numbers();\n    });\n\n    self.init = function(){\n        // Admin checkout does not have foundation, so verify it is on the body\n        var $body = $(\"body\");\n        if($body.foundation != undefined){\n            $body.foundation();\n        }\n\n        self.update_step_numbers();\n        // consider how do we get the initial step position?\n    }\n\n    // self.init();\n}, {\n    get_step_summary: function(){\n        return this.step_summary_info;\n    },\n    initialize: function(){\n        this.init();\n    }\n});\n\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: Checkout,\n        factory: new WebCubeObjectFactory(Checkout, \"checkout\", [[]])\n    }\n}\n\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require('lodash');\n\n\nfunction csrfSafeMethod(method) {\n    // these HTTP methods do not require CSRF protection\n    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));\n}\n\n// IMPORTANT NOTE: currently this is instantiated twice (once for mobile, one for desktop)\n// So don't assume a singleton\n\n// registers for update_cart_summary and updates our own HTML\n// with data from the cart summary.\nvar BasketSummary = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    var self = this;\n    self.cart_info_template = this.$el.data(\"cart-info-url\");\n    self.cart_template = null;\n    self.csrf = null;\n\n    this.init_template = function(){\n        try{\n            if($(\".basket_summary_template\",self.$el).length > 0){\n                self.cart_template = _.template($(\".basket_summary_template\",self.$el).text())\n            }\n        }catch(error){\n            console.error(error);\n        }\n    };\n\n    this.register_view_cart = function() {\n        var btn = this.$el.find('a.back_to_cart');\n        btn.on('click', function() {\n            sender(\"select-step\",{step_name:\"update-items\"});\n        });\n    };\n\n    this.register_forms = function(){\n        var $form = self.$el.find(\"form\");\n        $form.on('submit', function (e) {\n            var form_action = $form.attr('action')\n\n            $.ajax({\n                url: $(this).attr('action'),\n                type: $(this).attr('method'),\n                data: $(this).serialize(),\n                beforeSend: function (xhr, settings) {\n                    if (!csrfSafeMethod(settings.type) && !this.crossDomain) {\n                        xhr.setRequestHeader(\"X-CSRFToken\", self.csrf);\n                    }\n                },\n                success: function(data){\n                    self.handle_update_cart_summary(data);\n                },\n                error: function (xhr, err) {\n                    alert(\"Error Encountered: \" + xhr.statusText);\n                }\n            });\n\n            return false;\n        });\n    }\n\n    this.handle_update_cart_summary = function(data){\n        //console.log(\"Basket Summary Received Data\",data);\n        self.csrf = data.csrf_token;\n        if(self.cart_template == null){\n            this.$el.html(data.cart_summary);\n        }else{\n            $(\".basket_summary_container\",self.$el).html(self.cart_template(data));\n            WebCube.document_binding.applyBindingsAndInit($(\".basket_summary_container\",self.$el)[0]);\n        }\n        self.register_forms();\n    };\n\n    this.load_initial_cart_data = function(){\n        try{\n            var initial = JSON.parse($(\".initial_cart_data\",self.$el).text());\n            var csrf = $(\".initial_cart_data\",self.$el).data(\"csrf\");\n            self.handle_update_cart_summary({cart:initial,csrf_token:csrf});\n            sender(\"current_cart\",initial);\n        }catch(SyntaxError){\n            console.error(\"Unable to load initial cart data for basket summary\");\n        }\n    }\n\n    this.register('update_cart_summary', function(msg){ self.handle_update_cart_summary(msg.payload.data); });\n\n}, {\n    initialize: function(){\n        this.init_template();\n        this.register_view_cart();\n        this.register_forms();\n        this.load_initial_cart_data();\n    }\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: BasketSummary,\n        factory: new WebCubeObjectFactory(BasketSummary, \"basket-summary\", [[]])\n    }\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\nvar CheckoutSuccess = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n    var $el = $(html_element);\n\n    if (typeof($el.data('first-time')) !== \"undefined\") {\n        localStorage['cart_count'] = 0;\n        sender(\"update-cart-count\", {cart_count:0})\n    }\n}, {});\n\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: CheckoutSuccess,\n        factory: new WebCubeObjectFactory(CheckoutSuccess, \"checkout-success\", [[]])\n    }\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require('lodash');\nvar extra_utils = require('webcube-utils');\n\n// the CheckoutStep is loaded for every step.  Each step has its own\n// name, stored in data-key, which we use.\nvar CheckoutStep = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n    var self = this;\n    this.$el = $(html_element);\n    this.step_name = this.$el.attr('data-key');\n    this.url = this.$el.attr('data-submit-url');\n    this.cart_data = null;\n\n    this.register(this.step_name + \"_contents\", function (msg) {\n        if (typeof msg.payload.contents !== 'undefined') {\n            var $new_content = $(msg.payload.contents.trim());\n        } else {\n            $new_content = $(\"<div></div>\");\n        }\n\n        // fully remove DOM elements and destroy web cube objects and unbind to prevent duplicate handlers\n        var $body = self.$el.find(\".step_body\")\n        $body.find(\"[wc-object]\").each(function (index) {\n            if (this.webcube_object != undefined && this.webcube_object.destroy != undefined) {\n                //console.log(\"Destroying a \"+this.webcube_object.wc_type+ \" (\"+this.webcube_object.mailbox+\")\");\n                this.webcube_object.destroy()\n                WebCube.document_binding.unbind(this.webcube_object);\n                delete this.webcube_object;\n            }\n        });\n        $body.children().remove();\n\n        $body.html($new_content);\n\n        if (typeof msg.payload.digest !== 'undefined') {\n            self.$el.find(\".step_digest\").html(msg.payload.digest);\n        }\n        self.register_forms();\n\n        WebCube.document_binding.applyBindingsAndInit($(\".step_body\", self.$el)[0]);\n\n    });\n\n    this.track_step = function () {\n        // If we have access to google analytics, track each step here.\n        if (typeof (window.ga) != \"undefined\") {\n            window.ga('set', 'page', this.url);\n            window.ga('send', 'pageview');\n        }\n        // broadcast analytics event\n        sender(\"analytics-action\", {\n            \"action\": \"checkoutStep\",\n            \"data\": {\n                \"step\": self.step_name,\n                \"cart\": self.cart_data\n            }\n        });\n    };\n\n    this.register(\"select-step\", function (msg) {\n        // TODO if step is not loaded, we need to tirgger the load here\n        // Example: go to ship info, then refresh,and try to go back to edit cart\n        if (msg.payload.step_name == self.step_name || msg.payload.show_all === true) {\n            self.show();\n        } else {\n            self.hide();\n        }\n    }, this);\n\n    this.register(\"reload-step\", function (msg) {\n        if (msg.payload.step_name == self.step_name) {\n            self.populate_form();\n            self.show();\n        }\n    }, this);\n\n    this.register(this.step_name + \"_visibility\", function (msg) {\n        if (msg.payload.visible === true) {\n            self.show();\n        }\n    }, this);\n\n    this.show = function () {\n        self.$el.removeClass('complete_step');\n        if (self.$el.hasClass('inactive_step')) {\n            self.$el.removeClass('inactive_step');\n            self.$el.addClass('active_step');\n            sender(\"update_step_numbers\", {});\n        }\n        if (typeof self.$el !== \"undefined\") {\n            $('html, body').animate({\n                scrollTop: self.$el.offset().top - $(\".slideUp, .topNav\").height()\n            }, 150);\n        }\n        if (self.$el.find('.step_body form').length == 0) {\n            self.populate_form();\n        }\n        self.$el.addClass('current');\n        self.track_step();\n    }\n\n    this.hide = function () {\n        self.$el.removeClass('current');\n        self.$el.addClass('complete_step');\n    };\n\n    this.populate_form = function (skip_cart) {\n        skip_cart = typeof skip_cart !== 'undefined' ? skip_cart : false;\n        $.ajax(self.url, {\n            success: function (data, stat) {\n                sender(data.current_step + \"_contents\", { contents: data.step_html });\n\n                if (typeof (data.all_digests) !== 'undefined') {\n                    for (var stepk in data.all_digests) {\n                        if (stepk == data.current_step) { continue; }\n                        sender(stepk + \"_contents\", { digest: data.all_digests[stepk] });\n                    }\n                }\n\n                if (typeof (data.cart_summary) !== 'undefined') {\n                    sender('update_cart_summary', {\n                        summary: data.cart_summary,\n                        data: data\n                    });\n                    return false;\n                }\n            },\n            data: {\n                skip_cart: skip_cart\n            },\n            statusCode: {\n                404: function (resp, stat) {\n                    var o = resp.responseJSON;\n                    alert(\"Please complete current step\");\n                    sender(\"select-step\", { step_name: o.current_step });\n                    return false;\n                }\n            }\n        });\n    }\n\n    this.register(\"submit-step\", function (msg) {\n        if (msg.payload.step_name == self.step_name) {\n            self.$el.find(\"form.form_continue_checkout\").submit();\n        }\n    });\n\n    this.handle_checkout_form_submit = function (evt) {\n        var $this = $(this);\n        if ($this.data(\"no-ajax-submit\")) {\n            //console.log(\"cancelling ajax submit\");\n            return false;\n        }\n        var ajax_param = {\n            data: $this.serialize(),\n            method: $this.attr('method'),\n            success: self.submit_form_success,\n            error: function (data, stat) {\n                alert(\"There has been an error - please reload the page.\");\n                return false;\n            }\n        };\n        $.ajax(self.url, ajax_param);\n        self.$el.find(\"form input[type=submit]\").attr(\"disabled\", 1);\n        return false;\n    }\n\n    this.submit_form_success = function (data, stat) {\n        var cont = true;\n        if (data.checkout_success) {\n            window.location = data.checkout_success;\n            return;\n        }\n        if (data.cart == undefined && data.errors == undefined) { // empty cart\n            window.location = data.next;\n            return;\n        }\n        if (data.errors != undefined) {\n            console.log(\"errors\", data);\n            var error_list = \"\";\n            for (var i = 0; i < data.errors.length; i++) {\n                error_list += \"<li>\" + data.errors[i] + \"</li>\";\n            }\n            $(\".step_body\", self.$el).prepend(\n                '<ul class=\"errorlist\">' + error_list + \"</ul>\"\n            );\n            cont = false;\n        }\n        self.cart_data = data.cart;\n\n        sender('update_cart_summary', {\n            summary: data.cart_summary,\n            data: data\n        });\n\n        // Handle errors\n        if (\n            typeof data.step_errors !== 'undefined' &&\n            data.step_errors !== null &&\n            data.step_errors.length !== 0\n        ) {\n            cont = false;\n        }\n\n        // Handle notices\n        if (typeof data.compute_costs_notifications !== 'undefined') {\n            var notices = \"<div>\";\n            _.each(data.compute_costs_notifications, function (e) {\n                notices += '<div class=\"warning\">' + e + \"</div>\";\n            });\n            notices += '</div>';\n            extra_utils.modal(notices);\n        }\n\n\n        if (data.continue_editing === true) {\n            cont = false;\n        }\n\n        if (cont === true) {\n            // this step should populate the next step, then it should\n            // tell the next step to show.\n            sender(data.next_step + \"_contents\", { contents: data.next_step_html });\n            self.hide();\n        }\n\n        sender(\"cart_step_status\", data.step_summary_info);\n\n        sender(\"current_cart\", data.cart);\n\n        if (cont) {\n            sender(data.next_step + \"_visibility\", { visible: true });\n        }\n\n        sender(data.current_step + \"_contents\", {\n            contents: data.step_html,\n            digest: data.digest_html,\n            cart: data.cart\n        });\n\n        return false;\n    }\n\n}, {\n    initialize: function () {\n        //console.log(\"registering checkout forms for \",this.wc_type);\n        this.register_forms();\n    },\n    register_forms: function () {\n        var self = this;\n\n        var $forms = self.$el.find(\"form\").not('.unmanaged_form');\n        var $edit = self.$el.find(\".step_edit a\");\n        $forms.off('submit');\n        $edit.off('click');\n\n        $edit.on('click', function (evt) {\n            sender(\"select-step\", { step_name: self.step_name });\n            return false;\n        });\n\n        //console.log(\"Registering \",self.step_name,\" form submit handler\");\n        $forms.on('submit', self.handle_checkout_form_submit);\n        self.$el.find(\"form input[type=submit]\").removeAttr(\"disabled\");\n    }\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: CheckoutStep,\n        factory: new WebCubeObjectFactory(CheckoutStep, \"checkout-step\", [[]])\n    }\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require('lodash');\nvar CheckoutStep = require('webcube-checkoutstep').cls;\n\nvar BillingInfo = WebCubeObject.extend(function (html_element) {\n    CheckoutStep.call(this, html_element);\n    this.prefilled = {};\n    var self = this;\n    self.$el = $(html_element);\n\n    this.copy_ship_address = function(){\n        _.each(self.elements, function(d) {\n            if (d.name !== 'payload' && d.name != 'csrfmiddlewaretoken' && d.name != 'bill_address') {\n                var key = d.name;\n                key = key.replace('bill', 'ship');\n                if (typeof self.$checkbox.data(key) !== 'undefined') {\n                    var value = decodeURIComponent(self.$checkbox.data(key));\n                    var input = self.$payment_forms.find(\"input[name='\"+d.name+\"']\");\n                    var select = self.$payment_forms.find(\"select[name='\"+d.name+\"']\");\n                    var textarea = self.$payment_forms.find(\"textarea[name='\"+d.name+\"']\");\n                    if(self.prefilled != undefined){\n                        self.prefilled[d.name] = input.val() || select.val() || textarea.val() || '';\n                    }\n                    self.$payment_forms.find(\"input[name='\"+d.name+\"']\").val(value);\n                    self.$payment_forms.find(\"select[name='\"+d.name+\"']\").val(value);\n                    self.$payment_forms.find(\"textarea[name='\"+d.name+\"']\").val(value);\n                }\n            }\n        });\n    }\n\n    this.clear_bill_address = function(){\n        _.each(self.elements, function(d) {\n            if (d.name !== 'payload' && d.name != 'csrfmiddlewaretoken' && d.name != 'bill_address') {\n                self.$payment_forms.find(\"input[name='\"+d.name+\"']\").val('');\n                self.$payment_forms.find(\"select[name='\"+d.name+\"']\").val('');\n                self.$payment_forms.find(\"textarea[name='\"+d.name+\"']\").val('');\n            }\n        });\n    }\n\n    this.checkbox_changed = function(){\n        if (self.$checkbox.is(\":checked\")) {\n            self.copy_ship_address();\n        } else {\n            self.clear_bill_address();\n        }\n    }\n\n}, {\n    initialize: function(){\n        CheckoutStep.prototype.initialize.call(this);\n    },\n    register_actions: function() {\n        var self = this;\n\n            // assign these items here, as they can be reloaded via Ajax\n        self.$payment_forms = self.$el.find(\"form\").not(\"#form_payment_step\");\n        self.$payment_step_form = self.$el.find(\"form#form_payment_step\");\n        self.elements = self.$payment_forms.serializeArray();\n        self.$checkbox = $(\"#id_preset_bill_address_same_as_ship\");\n\n        // Assign handlers\n        self.$checkbox.on('change', self.checkbox_changed);\n        self.$payment_step_form.find(\"#id_method\").on('change', function() {\n            self.$payment_step_form.submit();\n        });\n\n        if( self.$checkbox.data(\"default-to-ship\") ){\n            self.$checkbox.prop('checked',true);\n            self.copy_ship_address();\n        }else{\n          // skip\n        }\n    },\n    register_forms: function() {\n        CheckoutStep.prototype.register_forms.call(this);\n        this.register_actions();\n    }\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: BillingInfo,\n        factory: new WebCubeObjectFactory(\n            BillingInfo,\n            \"step-payment\",\n            [[]]\n        )\n    }\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require('lodash');\nvar CheckoutStep = require('webcube-checkoutstep').cls;\n\nvar ShippingInfo = WebCubeObject.extend(function (html_element) { \n    CheckoutStep.call(this, html_element);\n    \n    this.address_data = null;\n    var self = this;\n    self.$el = $(html_element);\n    self.$address_dropdown = null;\n    self.$form = null;\n\n    this.load_address_data = function(){\n        var json_text = $('.ship_address_prefill script[type=\"application/json\"]',self.$el).text();\n        if(json_text != \"\"){\n            try{\n                this.address_data = JSON.parse(json_text);\n            }catch(SyntaxError){\n                return;\n            }\n        }\n    } \n\n    this.fill_address = function(id){\n        var a = null;\n        for(var i =0; i< self.address_data.length; i++){\n            if(self.address_data[i].id == id){\n                a = self.address_data[i];\n                break;\n            }\n        }\n        \n        var elements = self.$form.serializeArray();\n\n        if(a == null){\n            _.each(elements, function(d){\n                if(d.name != \"csrfmiddlewaretoken\" && d.name != \"ship_address\" && d.name != 'ship_state' && d.name != 'ship_country'){\n                    self.$form.find(\"input[name='\"+d.name+\"']\").val('');\n                    self.$form.find(\"select[name='\"+d.name+\"']\").val('');\n                    self.$form.find(\"textarea[name='\"+d.name+\"']\").val('');\n                }\n            });    \n        }else{\n            _.each(elements, function(d) { \n                if (typeof a[d.name] !== 'undefined') { \n                    var value = a[d.name];\n                    self.$form.find(\"input[name='\"+d.name+\"']\").val(value);\n                    self.$form.find(\"select[name='\"+d.name+\"']\").val(value);\n                    self.$form.find(\"textarea[name='\"+d.name+\"']\").val(value);\n                }\n            });\n        }\n   } \n}, {\n    initialize: function(){\n        CheckoutStep.prototype.initialize.call(this);\n    },\n    register_actions: function() { \n        var self = this;\n        this.$address_dropdown = this.$el.find(\"select#id_ship_address\");\n        this.$form = this.$el.find(\"form\");\n        this.load_address_data();\n        this.$address_dropdown.off('change');\n        this.$address_dropdown.on('change', function() {\n            var $selected = $(this).find('option:selected');\n            var id = $selected.val();\n            self.fill_address(id);\n        });\n    },\n    register_forms: function() { \n        CheckoutStep.prototype.register_forms.call(this);\n        //console.log(\"registering shipping form actions\");\n        this.register_actions();\n    }\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: ShippingInfo,\n        factory: new WebCubeObjectFactory(\n            ShippingInfo, \n            \"step-shipping-info\", \n            [[]]\n        )\n    }\n}\n","var utils = require(\"webcube-base\");\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require(\"lodash\");\nvar $ = require(\"jquery\");\nvar CheckoutStep = require(\"webcube-checkoutstep\").cls;\n\nvar UpdateItems = WebCubeObject.extend(\n  function (html_element) {\n    CheckoutStep.call(this, html_element);\n    var step_name = this.$el.attr(\"data-key\");\n    var self = this;\n\n    this.register(\"cart_updated\", function (msg) {\n      if (msg.payload.added.skip_cart) {\n        var skip_cart = true;\n        this.populate_form(skip_cart);\n      } else {\n        this.populate_form();\n      }\n    });\n  },\n  {\n    initialize: function () {\n      //console.log(\"registering checkout forms for \",this.wc_type);\n      this.register_forms();\n    },\n    register_actions: function () {\n      var self = this;\n      var timer = null;\n      self.$form = self.$el.find(\"form\").not(\".unmanaged_form\").first();\n      self.$el.find(\"input.quantity\").off(\"change\");\n      self.$el.find(\"a.remove\").off(\"click\");\n\n      this.$el.find(\"input.quantity\").on(\"change\", function () {\n        window.clearTimeout(timer);\n        var that = this;\n        timer = window.setTimeout(function () {\n          self.$form.submit();\n          $(that).prop(\"disabled\", true);\n        }, 500);\n      });\n\n      this.$el.find(\".remove-cartitem\").on(\"click\", function () {\n        $(this).siblings(\"input\").val(true);\n        self.$form.submit();\n      });\n    },\n\n    register_forms: function () {\n      CheckoutStep.prototype.register_forms.call(this);\n      this.register_actions();\n    },\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: UpdateItems,\n    factory: new WebCubeObjectFactory(UpdateItems, \"step-update-items\", [[]]),\n  };\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\nvar CountryStateAutofill = WebCubeObject.extend(function (html_element) {\n        var $html_element = $(html_element);\n\n        function updateStateOptions(country) {\n            // NOTE: ajax urls should be pulled from HTML data attributes to ensure proper mapping\n            $.getJSON('/countries/ajax/region-codes/' + country)\n                .then(function (json) {\n\n                    var $target = $('[data-autofill=state]')\n\n                    var attrs = {\n                        id: $target.attr('id') ? $target.attr('id') : \"\",\n                        name: $target.attr('name') ? $target.attr('name') : \"\",\n                        class: $target.attr('class') ? $target.attr('class') : \"\",\n                        dataautofill: $target.attr('data-autofill') ? $target.attr('data-autofill') : \"\"\n                    }\n\n                    var child_text = '';\n                    if (json.type == 'text') {\n                        child_text = '<input type=\"text\" id=\"' + attrs.id + '\" name=\"' + attrs.name + '\" class=\"' + attrs.class + '\" data-autofill=\"' + attrs.dataautofill + '\"/>';\n                    }\n                    else {\n                        child_text = '<select  id=\"' + attrs.id + '\" name=\"' + attrs.name + '\" class=\"' + attrs.class + '\" data-autofill=\"' + attrs.dataautofill + '\">' + json.html + '</select>';\n                    }\n\n                    var dest_val = $target.val();\n\n                    var $new_content = $(child_text)\n                    $target.replaceWith($new_content);\n\n                    //var $new_target = $($target.selector);\n                    if (dest_val) $new_content.val(dest_val);\n\n                    window.$target = $target;\n                    window.$new_content = $new_content;\n\n                });\n        }\n\n\n        $html_element.change(function(e) {\n            updateStateOptions(this.value);\n        });\n\n        var src_val = $html_element.val();\n        if (!src_val) return;\n\n        updateStateOptions(src_val);\n    }, {}\n);\n\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: CountryStateAutofill,\n        factory: new WebCubeObjectFactory(\n            CountryStateAutofill,\n            \"countrystate-autofill\",\n            [[]]\n        )\n    }\n}\n\n","import { template } from \"lodash\";\n\nvar utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\n\nvar DealerLocatorMap = function(element, default_location){\n    // todo add google init here\n    var map = $(element).find('map');\n    var self = this;\n\n    var mapOptions = {\n        zoom: 12,\n        center: default_location\n    };\n    this.mapWindowContent = template($(\"#dealerlocation-map-window\").text())\n\n    this.gMap = new google.maps.Map(document.getElementById(\"map_holder\"), mapOptions);\n\n    this.bounds = new google.maps.LatLngBounds();\n    this.markers = [];\n    this.infowindows = [];\n\n};\nDealerLocatorMap.prototype.addLocation = function (location_obj) {\n    var marker = new google.maps.Marker({\n        map: this.gMap,\n        position: new google.maps.LatLng(\n            location_obj.lat,\n            location_obj.lng),\n        title: location_obj.name\n    });\n\n    var infowindow = new google.maps.InfoWindow({\n        content: this.mapWindowContent(location_obj)\n    });\n\n    this.bounds.extend(marker.position);\n    this.markers.push({\"id\":location_obj.id,\"marker\":marker});\n    this.infowindows.push({\"id\":location_obj.id, \"window\": infowindow, \"marker\": marker});\n\n    var self = this;\n\n\n    google.maps.event.addListener(\n        marker,\n        'click',\n        function() {\n            sender('location_clicked',location_obj);\n        }\n    );\n\n};\nDealerLocatorMap.prototype.fitMarkers = function () {\n    this.gMap.fitBounds(this.bounds);\n    if (this.gMap.getZoom() > 15) {\n        this.gMap.setZoom(15);\n    }\n};\nDealerLocatorMap.prototype.clearLocations = function () {\n    for (var i = 0; i < this.markers.length; i++) {\n        this.markers[i].marker.setMap(null);\n    }\n    this.markers = [];\n    this.infowindows = [];\n    this.bounds = new google.maps.LatLngBounds();\n};\nDealerLocatorMap.prototype.locationClicked = function (location_obj){\n    for (var info_window_index = 0; info_window_index < this.infowindows.length; info_window_index++) {\n        if (this.infowindows[info_window_index].id == location_obj.id) {\n            this.infowindows[info_window_index].window.open(this.gMap, this.infowindows[info_window_index].marker);\n        } else {\n            this.infowindows[info_window_index].window.close();\n        }\n\n    }\n\n};\n\n\nvar DealerLocatorForm = function(element) {\n    var self =  this;\n    this.form = $(element).find(\"#form_find_dealer\");\n    this.dealerListItemTemplate = template($(\"#dealerlocation-item-template\").text());\n\n    $(this.form).submit(function(event){\n        self.searchLocation($(\"#form_find_dealer_address\",self.form).val())\n    });\n};\nDealerLocatorForm.prototype.searchLocation = function (address, radius, limit) {\n\n        var default_radius = radius !== undefined ? radius : 20;\n        var default_limit = limit !== undefined ? limit : 20;\n        if (typeof address === 'object') {\n            sender('fetch_locations', {\n                \"lat\":address.lat,\n                \"lng\":address.lng,\n                \"radius\":default_radius,\n                \"limit\":default_limit,\n                \"formated_address\" : \"\"\n            })\n        } else {\n            var geoCoder = new google.maps.Geocoder();\n            geoCoder.geocode(\n                {\n                    'address': address\n                },\n                function (results, stat) {\n                    if (results.length >= 1) {\n                        $(\"#form_find_dealer_address\", self.form).val(results[0].formatted_address);\n                        sender('fetch_locations', {\n                            \"lat\": results[0].geometry.location.lat(),\n                            \"lng\": results[0].geometry.location.lng(),\n                            \"radius\": default_radius,\n                            \"limit\": default_limit,\n                            \"formated_address\": results[0].formatted_address\n                        })\n                    } else {\n                        alert(\"Could not find your address!\");\n                    }\n                }\n            );\n        }\n        return false;\n};\nDealerLocatorForm.prototype.addLocation = function (location_obj) {\n    var html = this.dealerListItemTemplate(location_obj)\n    $(\"div.locations ul\").append(html);\n    $(\"div.locations ul li\").removeClass('last').last().addClass('last');\n    $(\"div.locations ul li\").last().on('click', function() {\n        sender('location_clicked', location_obj);\n    });\n};\nDealerLocatorForm.prototype.clearLocations= function () {\n    $(\"div.locations ul\").empty();\n};\nDealerLocatorForm.prototype.locationClicked= function (location_obj) {};\n\n\nvar DealerLocator = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n\n    // Default lat and lng in case user location isnt available\n    var default_location = {\n        lat: 32.7153292,\n        lng: -117.15725509999999\n    }\n\n    if (this.$el.data('lat') && this.$el.data('lng')) {\n        default_location = {\n            lat: this.$el.data('lat'),\n            lng: this.$el.data('lng')\n        }\n    }\n\n    // allow page to set a different radius and limit\n    var default_radius = 20;\n    var default_limit = 20;\n    if (this.$el.data('radius')) {\n        default_radius = this.$el.data('radius');\n    }\n    if (this.$el.data('limit')) {\n        default_limit = this.$el.data('limit');\n    }\n\n    // allow page to skip geolocation request\n    var use_default_location = false;\n    if (this.$el.data('use-default-location') && this.$el.data('use-default-location').lower() == 'true') {\n        use_default_location = true;\n    }\n\n\n    var self = this;\n    var map, dealerLocatorForm;\n\n    var initialize_maps = function() {\n        map = new DealerLocatorMap(self.$el,default_location);\n        dealerLocatorForm = new DealerLocatorForm(self.$el, default_location);\n        var urlParameters = stringToObject();\n        var new_radius = default_radius;\n        var new_limit = default_limit;\n        if (urlParameters.radius) {\n            try { new_radius = parseFloat(urlParameters.radius); } catch(e){\n              //skip\n            }\n        }\n        if (urlParameters.limit) {\n            try { new_limit = parseFloat(urlParameters.limit); } catch(e){\n              //skip\n            }\n        }\n        if (urlParameters.address) {\n            dealerLocatorForm.searchLocation(urlParameters.address, new_radius, new_limit)\n        } else {\n            if (!use_default_location && navigator.geolocation) {\n                navigator.geolocation.getCurrentPosition(function(position) {\n                    var pos = {\n                        lat: position.coords.latitude,\n                        lng: position.coords.longitude\n                    };\n                    dealerLocatorForm.searchLocation(pos, new_radius, new_limit);\n                }, function() {\n                    dealerLocatorForm.searchLocation(default_location, new_radius, new_limit);\n                });\n            } else {\n                // Browser doesn't support Geolocation\n                dealerLocatorForm.searchLocation(default_location, new_radius, new_limit)\n            }\n        }\n    };\n    var api_key = this.$el.data('api-key')\n    //var other_params = \"sensor=true\" // sensor no longer required\n    var other_params = \"\"\n    if (api_key) {\n        other_params += \"&key=\"+api_key\n    }\n    google.load(\"maps\", \"3.36\", {other_params: other_params, callback:initialize_maps});\n\n    this.register('fetch_locations', function(msg) {\n        map.gMap.setCenter(msg.payload);\n        var params = \"?lt=\"+msg.payload.lat+\"&ln=\"+msg.payload.lng+\"&radius=\"+msg.payload.radius+\"&limit=\"+msg.payload.limit;\n        var url = \"/api/v1/dealerlocator/dealerlocation/\"+params;\n        $.get(url, function(results) {\n            map.clearLocations();\n            dealerLocatorForm.clearLocations();\n            if (results.objects.length > 0) {\n                $(results.objects).each(function (i, v) {\n                    map.addLocation(results['objects'][i]);\n                    dealerLocatorForm.addLocation(results['objects'][i]);\n                });\n                map.fitMarkers();\n            }\n        });\n    }, this);\n\n    this.register('location_clicked', function(msg){\n        map.locationClicked(msg.payload);\n        dealerLocatorForm.locationClicked(msg.payload);\n    }, this)\n\n\n    var stringToObject = function(search_string, seperator) {\n        var _obj = {},\n            _search_string = search_string !== undefined ? search_string : window.location.search.substr(1),\n            _seperator = seperator !== undefined ? seperator : '&',\n            _search_array = _search_string.split(_seperator);\n\n        for (var i in _search_array) {\n          var split = _search_array[i].split('=');\n          _obj[split[0]] = split[1];\n        }\n        return _obj;\n    }\n\n}, {});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: DealerLocator,\n        factory: new WebCubeObjectFactory(DealerLocator, \"dealer-locator\", [[]])\n    }\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require('lodash');\n\nvar DebugUtil = WebCubeObject.extend(function (html_element) { \n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    var self = this;\n\n    console.log(\"Debug Active\");  \n\n    if(typeof window.localStorage !== \"undefined\"){\n        if(window.localStorage[\"debug_messages\"] === \"true\"){\n            window.debug_listener = function(e){\n                console.log(\"WebCube Event:\",e);\n            }\n        }\n    } \n\n}, {});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: DebugUtil,\n        factory: new WebCubeObjectFactory(\n            DebugUtil, \n            \"debug\", \n            [[]]\n        )\n    }\n}\n","module.exports = function (content_target, html_element, next_url, prev_url, max_pages, content_added_callback) {\n    var listing_target = content_target,\n        next_data_url = \"\", // replaced when loading more\n        prev_data_url = \"\", // replaced when loading more\n        next_data_cache,\n        prev_data_cache,\n        last_scroll = 0,\n        is_loading = 0, // simple lock to prevent loading when loading\n        forever_endless = false;\n\n\n    if (next_url !== undefined) {\n        next_data_url = next_url;\n    }\n    if (prev_url !== undefined) {\n        prev_data_url = prev_url;\n    }\n\n    return {\n        loadFollowing: function (force) {\n            var that = this;\n            max_pages--;\n\n            if (next_data_url == \"\") {\n                $('div.viewmore').hide();\n            } else {\n                $('div.viewmore').show();\n                if (max_pages > 0 | force==true | that.forever_endless) {\n                    if (force) that.forever_endless = true;\n\n                    is_loading = 1; // note: this will break when the server doesn't respond\n\n                    function showFollowing(data) {\n                        is_loading = 0;\n                        $(listing_target + \":last\", html_element).after(data.content);\n                        next_data_url = data.next_url;\n                        next_data_cache = false;\n                        content_added_callback($(listing_target));\n                        that.cacheNextData();\n                        if (force) {\n                            $(window).scroll();\n                        }\n                    }\n\n                    if (next_data_cache) {\n                        showFollowing(next_data_cache);\n                    } else {\n                        $.getJSON(next_data_url + \"&format=json\", function (data) {\n                            showFollowing(data);\n                        });\n\n                    }\n                }\n            }\n        },\n\n        loadPrevious: function () {\n            var that = this;\n            if (prev_data_url == \"\") {\n                $('div.pagination').show();\n            } else {\n                is_loading = 1; // note: this will break when the server doesn't respond\n                $('div.pagination').hide();\n\n                function showPrevious(data) {\n                    is_loading = 0;\n                    $(listing_target+\":first\",html_element).before(data.content);\n                    var item_height = $(listing_target+\":first\",html_element).height();\n                    window.scrollTo(0, $(window).scrollTop() + item_height); // adjust scroll\n\n                    prev_data_url = data.prev_url;\n                    prev_data_cache = false;\n                    that.cachePreviousData();\n                    content_added_callback($(listing_target));\n                }\n\n                if (prev_data_cache) {\n                    showPrevious(prev_data_cache);\n                } else {\n                    $.getJSON(prev_data_url+\"&format=json\", function (data) {\n                        showPrevious(data);\n                    });\n                }\n            }\n        },\n\n        mostlyVisible: function (element) {\n            // if ca 25% of element is visible\n            var scroll_pos = $(window).scrollTop();\n            var window_height = $(window).height();\n            var el_top = $(element).offset().top;\n            var el_height = $(element).height();\n            var el_bottom = el_top + el_height;\n            return ((el_bottom - el_height * 0.25 > scroll_pos) &&\n            (el_top < (scroll_pos + 0.5 * window_height)));\n        },\n\n        initPaginator: function () {\n\n            console.log(max_pages);\n\n            var self = this;\n            $(window).scroll(function () {\n                // handle scroll events to update content\n                var scroll_pos = $(window).scrollTop();\n                if (scroll_pos >= 0.9 * ($(document).height() - $(window).height())) {\n                    if (is_loading == 0) self.loadFollowing();\n                }\n                if (scroll_pos <= 0.9 * $(\"#header\").height()) {\n                    if (is_loading == 0) self.loadPrevious();\n                }\n                // Adjust the URL based on the top item shown\n                // for reasonable amounts of items\n                if (Math.abs(scroll_pos - last_scroll) > $(window).height() * 0.1) {\n                    last_scroll = scroll_pos;\n                    $(listing_target).each(function (index) {\n                        if (self.mostlyVisible(this)) {\n                            history.replaceState(null, null, $(this).attr(\"data-url\"));\n                            return (false);\n                        }\n                    });\n                }\n            });\n\n            //// if we have enough room, load the next batch\n            if ($(\"#scrollingcontent\").length && $(window).height() > $(\"#scrollingcontent\").height()) {\n                if (next_data_url) {\n                    self.loadFollowing();\n                }\n            }\n\n            //// scroll down to hide empty room and make room for lead previous\n            //var head_height = $(\".top-bar\").height();\n            //window.scrollTo(0, head_height);\n            this.cachePreviousData();\n            this.cacheNextData();\n        },\n\n        cacheNextData : function () {\n            if (next_data_url && !is_loading) {\n                $.getJSON(next_data_url+\"&format=json\", function (data) {\n                    next_data_cache = data;\n                });\n            }\n        },\n\n        cachePreviousData : function () {\n            if (prev_data_url && !is_loading) {\n                $.getJSON(prev_data_url+\"&format=json\", function (data) {\n                    prev_data_cache = data;\n                });\n            }\n        }\n    };\n};\n\n\n\n\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar EndlessScroll = require('./endless.js')\n\n\nvar WebcubeEndlessScroll = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n\n    var next = $('link[rel=next]').attr('href'),\n        previous = $('link[rel=prev]').attr('href'),\n        listing_target = '.product-list',\n        max_pages = Number($(html_element).attr('data-max-pages'));\n\n    var scroll = EndlessScroll(listing_target, html_element, next, previous, max_pages, function (content_added) {\n        sender('ajax_content_added', {\n            'html_element': content_added\n        });\n    });\n    $('.viewmore', html_element).click(function () {\n        scroll.loadFollowing(true);\n        return false;\n    });\n    scroll.initPaginator();\n}, {});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: WebcubeEndlessScroll,\n        factory: new WebCubeObjectFactory(WebcubeEndlessScroll, \"endless-scroll\", [[]])\n    }\n}\n\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nrequire('jquery.cookie');\n\nvar FooterCallout = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n\n    var self = this;\n    self.$callout = $(html_element);\n    self.$close_button = self.$callout.find('.close');\n    self.delay = self.$callout.data('delay') ? self.$callout.data('delay') : 1000;\n    self.cookie_name = self.$callout.data('cookie-name') ? self.$callout.data('cookie-name') : 'webcube.footercallout';\n    self.cookie_duration = self.$callout.data('cookie-duration') ? self.$callout.data('cookie-duration') : 30;\n    self.cookie_path = self.$callout.data('cookie-path') ? self.$callout.data('cookie-path') : '/';\n    self.active_class = self.$callout.data('active-class') ? self.$callout.data('active-class') : 'active';\n    self.is_disabled = self.$callout.data('disabled') ? self.$callout.data('disabled') : false;\n\n    // Show Footer Callout\n    if (!$.cookie(self.cookie_name) && self.is_disabled !== true) {\n        triggerFooterCallout();\n    }\n\n    // close footer callout with close button\n    self.$close_button.click(function(e){\n        e.preventDefault();\n\n        if (!$.cookie(self.cookie_name) && self.is_disabled !== true) {\n            // Set cookie on close\n            $.cookie(self.cookie_name, 1, {\n                path: self.cookie_path,\n                expires: self.cookie_duration\n            });\n        }\n\n        self.$callout.removeClass(self.active_class);\n\n    });\n\n    function displayFooterCallout() {\n        setTimeout(function(){\n            self.$callout.addClass(self.active_class);\n        },self.delay);\n    }\n\n    function triggerFooterCallout() {\n        // animate footer callout in after page loads\n        if (document.readyState == 'complete') {\n            displayFooterCallout();\n        }\n        else {\n            $(window).load(function(){\n                displayFooterCallout();\n            });    \n        }\n    }\n\n}, {});\n\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: FooterCallout,\n        factory: new WebCubeObjectFactory(FooterCallout, \"footer-callout\", [[]])\n    };\n}\n","var utils = require('webcube-base');\nvar _ = require('lodash');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\n\nvar WebcubeFormAjax = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n    var self = this;\n    this.$el = $(html_element);\n    self.replaceHTML = self.$el.data('replace-html');\n    self.template_popup = self.$el.data(\"template_popup\");\n\n    if (!this.$el.attr('data-initialized') == true) {\n    $(this.$el).on('submit', function () {\n        $.ajax({\n            url: $(this).attr('action'),\n            type: $(this).attr('method'),\n            data: $(this).serialize(),\n            //dataType: \"json\",\n            success: function (data) {\n\n                var resp_type = typeof(data);\n                var resp_content = \"\";\n                var resp_has_errors = false;\n\n                if ( self.template_popup != null){\n                    var t = _.template($(self.template_popup).text());\n                    $(\"#general-modal\").html(t(data));\n                    $('#general-modal').foundation('reveal','open');\n                    return;\n                }\n\n                if (resp_type == \"object\") {\n                    if (\"errors\" in data) {\n                        resp_has_errors = true;\n                        for (var key in data.errors) {\n                            for (var i in data.errors[key]) {\n                                resp_content += '<strong>'+key+'</strong>: <small>'+data.errors[key][i]+'</small>';\n                            }\n                        }\n                    } else {\n                        resp_content = data.message;\n                    }\n                }\n                if (resp_type === \"string\") {\n                    resp_content = data;\n                }\n\n                if (self.replaceHTML != undefined && !resp_has_errors) {\n                    if (resp_type == 'object') {\n                        self.$el.removeClass('has_errors');\n                        self.$el.find('.errors').html(\"\");\n                        if (resp_has_errors) {\n                            self.$el.find('.errors').html(resp_content);\n                            self.$el.addClass('has_errors');\n                        } else {\n                            self.$el.html('<div class=\"success\">'+resp_content+'</div>')\n                        }\n                    }\n                    if (resp_type == 'string') {\n                        if(self.replaceHTML == true){\n                            self.$el.html(resp_content);\n                        }else{\n                            t = $(self.replaceHTML)\n                            if(t.length){\n                                t.html(resp_content);\n                                WebCube.document_binding.applyBindingsAndInit(t[0]);\n                            }\n                        }\n                    }\n                }\n                else {\n                    //console.log('Opening form result in overlay:');\n                    if (resp_type === 'object') {\n                        if (resp_has_errors) {\n                            $('#general-modal').html('<div class=\"errors\">'+resp_content+'</div>');\n                        }\n                        else {\n                            $('#general-modal').html('<div class=\"success\">'+resp_content+'</div>');\n                        }\n                    }\n                    if (resp_type === 'string') {\n                        $('#general-modal').html(resp_content);\n                    }\n                    $('#general-modal').foundation('reveal','open');\n                }\n\n            },\n            error: function (xhr, status, err) {\n                alert(\"Something went wrong, please try again.\");\n            }\n        });\n        return false;\n    });\n    this.$el.attr('data-initialized', true);\n    }\n\n\n}, {});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: WebcubeFormAjax,\n        factory: new WebCubeObjectFactory(WebcubeFormAjax, \"form-ajax\", [[]])\n    }\n}\n\n","/*\n     _ _      _       _\n ___| (_) ___| | __  (_)___\n/ __| | |/ __| |/ /  | / __|\n\\__ \\ | | (__|   < _ | \\__ \\\n|___/_|_|\\___|_|\\_(_)/ |___/\n                   |__/\n\n Version: 1.5.2\n  Author: Ken Wheeler\n Website: http://kenwheeler.github.io\n    Docs: http://kenwheeler.github.io/slick\n    Repo: http://github.com/kenwheeler/slick\n  Issues: http://github.com/kenwheeler/slick/issues\n\n */\n/* global window, document, define, jQuery, setInterval, clearInterval */\n(function(factory) {\n    'use strict';\n    if (typeof define === 'function' && define.amd) {\n        define(['jquery'], factory);\n    } else if (typeof exports !== 'undefined') {\n        module.exports = factory(require('jquery'));\n    } else {\n        factory(jQuery);\n    }\n\n}(function($) {\n    'use strict';\n    var Slick = window.Slick || {};\n\n    Slick = (function() {\n\n        var instanceUid = 0;\n\n        function Slick(element, settings) {\n\n            var _ = this,\n                dataSettings, responsiveSettings, breakpoint;\n\n            _.defaults = {\n                accessibility: true,\n                adaptiveHeight: false,\n                appendArrows: $(element),\n                appendDots: $(element),\n                arrows: true,\n                asNavFor: null,\n                prevArrow: '<button type=\"button\" data-role=\"none\" class=\"slick-prev\" aria-label=\"previous\">Previous</button>',\n                nextArrow: '<button type=\"button\" data-role=\"none\" class=\"slick-next\" aria-label=\"next\">Next</button>',\n                autoplay: false,\n                autoplaySpeed: 3000,\n                centerMode: false,\n                centerPadding: '50px',\n                cssEase: 'ease',\n                customPaging: function(slider, i) {\n                    return '<button type=\"button\" data-role=\"none\">' + (i + 1) + '</button>';\n                },\n                dots: false,\n                dotsClass: 'slick-dots',\n                draggable: true,\n                easing: 'linear',\n                edgeFriction: 0.35,\n                fade: false,\n                focusOnSelect: false,\n                infinite: true,\n                initialSlide: 0,\n                lazyLoad: 'ondemand',\n                mobileFirst: false,\n                pauseOnHover: true,\n                pauseOnDotsHover: false,\n                respondTo: 'window',\n                responsive: null,\n                rows: 1,\n                rtl: false,\n                slide: '',\n                slidesPerRow: 1,\n                slidesToShow: 1,\n                slidesToScroll: 1,\n                speed: 500,\n                swipe: true,\n                swipeToSlide: false,\n                touchMove: true,\n                touchThreshold: 5,\n                useCSS: true,\n                variableWidth: false,\n                vertical: false,\n                verticalSwiping: false,\n                waitForAnimate: true\n            };\n\n            _.initials = {\n                animating: false,\n                dragging: false,\n                autoPlayTimer: null,\n                currentDirection: 0,\n                currentLeft: null,\n                currentSlide: 0,\n                direction: 1,\n                $dots: null,\n                listWidth: null,\n                listHeight: null,\n                loadIndex: 0,\n                $nextArrow: null,\n                $prevArrow: null,\n                slideCount: null,\n                slideWidth: null,\n                $slideTrack: null,\n                $slides: null,\n                sliding: false,\n                slideOffset: 0,\n                swipeLeft: null,\n                $list: null,\n                touchObject: {},\n                transformsEnabled: false\n            };\n\n            $.extend(_, _.initials);\n\n            _.activeBreakpoint = null;\n            _.animType = null;\n            _.animProp = null;\n            _.breakpoints = [];\n            _.breakpointSettings = [];\n            _.cssTransitions = false;\n            _.hidden = 'hidden';\n            _.paused = false;\n            _.positionProp = null;\n            _.respondTo = null;\n            _.rowCount = 1;\n            _.shouldClick = true;\n            _.$slider = $(element);\n            _.$slidesCache = null;\n            _.transformType = null;\n            _.transitionType = null;\n            _.visibilityChange = 'visibilitychange';\n            _.windowWidth = 0;\n            _.windowTimer = null;\n\n            dataSettings = $(element).data('slick') || {};\n\n            _.options = $.extend({}, _.defaults, dataSettings, settings);\n\n            _.currentSlide = _.options.initialSlide;\n\n            _.originalSettings = _.options;\n            responsiveSettings = _.options.responsive || null;\n\n            if (responsiveSettings && responsiveSettings.length > -1) {\n                _.respondTo = _.options.respondTo || 'window';\n                for (breakpoint in responsiveSettings) {\n                    if (responsiveSettings.hasOwnProperty(breakpoint)) {\n                        _.breakpoints.push(responsiveSettings[\n                            breakpoint].breakpoint);\n                        _.breakpointSettings[responsiveSettings[\n                                breakpoint].breakpoint] =\n                            responsiveSettings[breakpoint].settings;\n                    }\n                }\n                _.breakpoints.sort(function(a, b) {\n                    if (_.options.mobileFirst === true) {\n                        return a - b;\n                    } else {\n                        return b - a;\n                    }\n                });\n            }\n\n            if (typeof document.mozHidden !== 'undefined') {\n                _.hidden = 'mozHidden';\n                _.visibilityChange = 'mozvisibilitychange';\n            } else if (typeof document.webkitHidden !== 'undefined') {\n                _.hidden = 'webkitHidden';\n                _.visibilityChange = 'webkitvisibilitychange';\n            }\n\n            _.autoPlay = $.proxy(_.autoPlay, _);\n            _.autoPlayClear = $.proxy(_.autoPlayClear, _);\n            _.changeSlide = $.proxy(_.changeSlide, _);\n            _.clickHandler = $.proxy(_.clickHandler, _);\n            _.selectHandler = $.proxy(_.selectHandler, _);\n            _.setPosition = $.proxy(_.setPosition, _);\n            _.swipeHandler = $.proxy(_.swipeHandler, _);\n            _.dragHandler = $.proxy(_.dragHandler, _);\n            _.keyHandler = $.proxy(_.keyHandler, _);\n            _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);\n\n            _.instanceUid = instanceUid++;\n\n            // A simple way to check for HTML strings\n            // Strict HTML recognition (must start with <)\n            // Extracted from jQuery v1.11 source\n            _.htmlExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*)$/;\n\n            _.init();\n\n            _.checkResponsive(true);\n\n        }\n\n        return Slick;\n\n    }());\n\n    Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {\n\n        var _ = this;\n\n        if (typeof(index) === 'boolean') {\n            addBefore = index;\n            index = null;\n        } else if (index < 0 || (index >= _.slideCount)) {\n            return false;\n        }\n\n        _.unload();\n\n        if (typeof(index) === 'number') {\n            if (index === 0 && _.$slides.length === 0) {\n                $(markup).appendTo(_.$slideTrack);\n            } else if (addBefore) {\n                $(markup).insertBefore(_.$slides.eq(index));\n            } else {\n                $(markup).insertAfter(_.$slides.eq(index));\n            }\n        } else {\n            if (addBefore === true) {\n                $(markup).prependTo(_.$slideTrack);\n            } else {\n                $(markup).appendTo(_.$slideTrack);\n            }\n        }\n\n        _.$slides = _.$slideTrack.children(this.options.slide);\n\n        _.$slideTrack.children(this.options.slide).detach();\n\n        _.$slideTrack.append(_.$slides);\n\n        _.$slides.each(function(index, element) {\n            $(element).attr('data-slick-index', index);\n        });\n\n        _.$slidesCache = _.$slides;\n\n        _.reinit();\n\n    };\n\n    Slick.prototype.animateHeight = function() {\n        var _ = this;\n        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n            _.$list.animate({\n                height: targetHeight\n            }, _.options.speed);\n        }\n    };\n\n    Slick.prototype.animateSlide = function(targetLeft, callback) {\n\n        var animProps = {},\n            _ = this;\n\n        _.animateHeight();\n\n        if (_.options.rtl === true && _.options.vertical === false) {\n            targetLeft = -targetLeft;\n        }\n        if (_.transformsEnabled === false) {\n            if (_.options.vertical === false) {\n                _.$slideTrack.animate({\n                    left: targetLeft\n                }, _.options.speed, _.options.easing, callback);\n            } else {\n                _.$slideTrack.animate({\n                    top: targetLeft\n                }, _.options.speed, _.options.easing, callback);\n            }\n\n        } else {\n\n            if (_.cssTransitions === false) {\n                if (_.options.rtl === true) {\n                    _.currentLeft = -(_.currentLeft);\n                }\n                $({\n                    animStart: _.currentLeft\n                }).animate({\n                    animStart: targetLeft\n                }, {\n                    duration: _.options.speed,\n                    easing: _.options.easing,\n                    step: function(now) {\n                        now = Math.ceil(now);\n                        if (_.options.vertical === false) {\n                            animProps[_.animType] = 'translate(' +\n                                now + 'px, 0px)';\n                            _.$slideTrack.css(animProps);\n                        } else {\n                            animProps[_.animType] = 'translate(0px,' +\n                                now + 'px)';\n                            _.$slideTrack.css(animProps);\n                        }\n                    },\n                    complete: function() {\n                        if (callback) {\n                            callback.call();\n                        }\n                    }\n                });\n\n            } else {\n\n                _.applyTransition();\n                targetLeft = Math.ceil(targetLeft);\n\n                if (_.options.vertical === false) {\n                    animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';\n                } else {\n                    animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';\n                }\n                _.$slideTrack.css(animProps);\n\n                if (callback) {\n                    setTimeout(function() {\n\n                        _.disableTransition();\n\n                        callback.call();\n                    }, _.options.speed);\n                }\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.asNavFor = function(index) {\n        var _ = this,\n            asNavFor = _.options.asNavFor !== null ? $(_.options.asNavFor).slick('getSlick') : null;\n        if (asNavFor !== null) asNavFor.slideHandler(index, true);\n    };\n\n    Slick.prototype.applyTransition = function(slide) {\n\n        var _ = this,\n            transition = {};\n\n        if (_.options.fade === false) {\n            transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;\n        } else {\n            transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;\n        }\n\n        if (_.options.fade === false) {\n            _.$slideTrack.css(transition);\n        } else {\n            _.$slides.eq(slide).css(transition);\n        }\n\n    };\n\n    Slick.prototype.autoPlay = function() {\n\n        var _ = this;\n\n        if (_.autoPlayTimer) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n        if (_.slideCount > _.options.slidesToShow && _.paused !== true) {\n            _.autoPlayTimer = setInterval(_.autoPlayIterator,\n                _.options.autoplaySpeed);\n        }\n\n    };\n\n    Slick.prototype.autoPlayClear = function() {\n\n        var _ = this;\n        if (_.autoPlayTimer) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n    };\n\n    Slick.prototype.autoPlayIterator = function() {\n\n        var _ = this;\n\n        if (_.options.infinite === false) {\n\n            if (_.direction === 1) {\n\n                if ((_.currentSlide + 1) === _.slideCount -\n                    1) {\n                    _.direction = 0;\n                }\n\n                _.slideHandler(_.currentSlide + _.options.slidesToScroll);\n\n            } else {\n\n                if ((_.currentSlide - 1 === 0)) {\n\n                    _.direction = 1;\n\n                }\n\n                _.slideHandler(_.currentSlide - _.options.slidesToScroll);\n\n            }\n\n        } else {\n\n            _.slideHandler(_.currentSlide + _.options.slidesToScroll);\n\n        }\n\n    };\n\n    Slick.prototype.buildArrows = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$prevArrow = $(_.options.prevArrow);\n            _.$nextArrow = $(_.options.nextArrow);\n\n            if (_.htmlExpr.test(_.options.prevArrow)) {\n                _.$prevArrow.appendTo(_.options.appendArrows);\n            }\n\n            if (_.htmlExpr.test(_.options.nextArrow)) {\n                _.$nextArrow.appendTo(_.options.appendArrows);\n            }\n\n            if (_.options.infinite !== true) {\n                _.$prevArrow.addClass('slick-disabled');\n            }\n\n        }\n\n    };\n\n    Slick.prototype.buildDots = function() {\n\n        var _ = this,\n            i, dotString;\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            dotString = '<ul class=\"' + _.options.dotsClass + '\">';\n\n            for (i = 0; i <= _.getDotCount(); i += 1) {\n                dotString += '<li>' + _.options.customPaging.call(this, _, i) + '</li>';\n            }\n\n            dotString += '</ul>';\n\n            _.$dots = $(dotString).appendTo(\n                _.options.appendDots);\n\n            _.$dots.find('li').first().addClass('slick-active').attr('aria-hidden', 'false');\n\n        }\n\n    };\n\n    Slick.prototype.buildOut = function() {\n\n        var _ = this;\n\n        _.$slides = _.$slider.children(\n            ':not(.slick-cloned)').addClass(\n            'slick-slide');\n        _.slideCount = _.$slides.length;\n\n        _.$slides.each(function(index, element) {\n            $(element).attr('data-slick-index', index);\n        });\n\n        _.$slidesCache = _.$slides;\n\n        _.$slider.addClass('slick-slider');\n\n        _.$slideTrack = (_.slideCount === 0) ?\n            $('<div class=\"slick-track\"/>').appendTo(_.$slider) :\n            _.$slides.wrapAll('<div class=\"slick-track\"/>').parent();\n\n        _.$list = _.$slideTrack.wrap(\n            '<div aria-live=\"polite\" class=\"slick-list\"/>').parent();\n        _.$slideTrack.css('opacity', 0);\n\n        if (_.options.centerMode === true || _.options.swipeToSlide === true) {\n            _.options.slidesToScroll = 1;\n        }\n\n        $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');\n\n        _.setupInfinite();\n\n        _.buildArrows();\n\n        _.buildDots();\n\n        _.updateDots();\n\n        if (_.options.accessibility === true) {\n            _.$list.prop('tabIndex', 0);\n        }\n\n        _.setSlideClasses(typeof this.currentSlide === 'number' ? this.currentSlide : 0);\n\n        if (_.options.draggable === true) {\n            _.$list.addClass('draggable');\n        }\n\n    };\n\n    Slick.prototype.buildRows = function() {\n\n        var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;\n\n        newSlides = document.createDocumentFragment();\n        originalSlides = _.$slider.children();\n\n        if(_.options.rows > 1) {\n            slidesPerSection = _.options.slidesPerRow * _.options.rows;\n            numOfSlides = Math.ceil(\n                originalSlides.length / slidesPerSection\n            );\n\n            for(a = 0; a < numOfSlides; a++){\n                var slide = document.createElement('div');\n                for(b = 0; b < _.options.rows; b++) {\n                    var row = document.createElement('div');\n                    for(c = 0; c < _.options.slidesPerRow; c++) {\n                        var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));\n                        if (originalSlides.get(target)) {\n                            row.appendChild(originalSlides.get(target));\n                        }\n                    }\n                    slide.appendChild(row);\n                }\n                newSlides.appendChild(slide);\n            };\n            _.$slider.html(newSlides);\n            _.$slider.children().children().children()\n                .width((100 / _.options.slidesPerRow) + \"%\")\n                .css({'display': 'inline-block'});\n        };\n\n    };\n\n    Slick.prototype.checkResponsive = function(initial) {\n\n        var _ = this,\n            breakpoint, targetBreakpoint, respondToWidth;\n        var sliderWidth = _.$slider.width();\n        var windowWidth = window.innerWidth || $(window).width();\n        if (_.respondTo === 'window') {\n            respondToWidth = windowWidth;\n        } else if (_.respondTo === 'slider') {\n            respondToWidth = sliderWidth;\n        } else if (_.respondTo === 'min') {\n            respondToWidth = Math.min(windowWidth, sliderWidth);\n        }\n\n        if (_.originalSettings.responsive && _.originalSettings\n            .responsive.length > -1 && _.originalSettings.responsive !== null) {\n\n            targetBreakpoint = null;\n\n            for (breakpoint in _.breakpoints) {\n                if (_.breakpoints.hasOwnProperty(breakpoint)) {\n                    if (_.originalSettings.mobileFirst === false) {\n                        if (respondToWidth < _.breakpoints[breakpoint]) {\n                            targetBreakpoint = _.breakpoints[breakpoint];\n                        }\n                    } else {\n                        if (respondToWidth > _.breakpoints[breakpoint]) {\n                            targetBreakpoint = _.breakpoints[breakpoint];\n                        }\n                    }\n                }\n            }\n\n            if (targetBreakpoint !== null) {\n                if (_.activeBreakpoint !== null) {\n                    if (targetBreakpoint !== _.activeBreakpoint) {\n                        _.activeBreakpoint =\n                            targetBreakpoint;\n                        if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n                            _.unslick();\n                        } else {\n                            _.options = $.extend({}, _.originalSettings,\n                                _.breakpointSettings[\n                                    targetBreakpoint]);\n                            if (initial === true)\n                                _.currentSlide = _.options.initialSlide;\n                            _.refresh();\n                        }\n                        _.$slider.trigger('breakpoint', [_, targetBreakpoint]);\n                    }\n                } else {\n                    _.activeBreakpoint = targetBreakpoint;\n                    if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n                        _.unslick();\n                    } else {\n                        _.options = $.extend({}, _.originalSettings,\n                            _.breakpointSettings[\n                                targetBreakpoint]);\n                        if (initial === true)\n                            _.currentSlide = _.options.initialSlide;\n                        _.refresh();\n                    }\n                    _.$slider.trigger('breakpoint', [_, targetBreakpoint]);\n                }\n            } else {\n                if (_.activeBreakpoint !== null) {\n                    _.activeBreakpoint = null;\n                    _.options = _.originalSettings;\n                    if (initial === true)\n                        _.currentSlide = _.options.initialSlide;\n                    _.refresh();\n                    _.$slider.trigger('breakpoint', [_, targetBreakpoint]);\n                }\n            }\n\n        }\n\n    };\n\n    Slick.prototype.changeSlide = function(event, dontAnimate) {\n\n        var _ = this,\n            $target = $(event.target),\n            indexOffset, slideOffset, unevenOffset;\n\n        // If target is a link, prevent default action.\n        $target.is('a') && event.preventDefault();\n\n        unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);\n        indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;\n\n        switch (event.data.message) {\n\n            case 'previous':\n                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;\n                if (_.slideCount > _.options.slidesToShow) {\n                    _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);\n                }\n                break;\n\n            case 'next':\n                slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;\n                if (_.slideCount > _.options.slidesToShow) {\n                    _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);\n                }\n                break;\n\n            case 'index':\n                var index = event.data.index === 0 ? 0 :\n                    event.data.index || $(event.target).parent().index() * _.options.slidesToScroll;\n\n                _.slideHandler(_.checkNavigable(index), false, dontAnimate);\n                break;\n\n            default:\n                return;\n        }\n\n    };\n\n    Slick.prototype.checkNavigable = function(index) {\n\n        var _ = this,\n            navigables, prevNavigable;\n\n        navigables = _.getNavigableIndexes();\n        prevNavigable = 0;\n        if (index > navigables[navigables.length - 1]) {\n            index = navigables[navigables.length - 1];\n        } else {\n            for (var n in navigables) {\n                if (index < navigables[n]) {\n                    index = prevNavigable;\n                    break;\n                }\n                prevNavigable = navigables[n];\n            }\n        }\n\n        return index;\n    };\n\n    Slick.prototype.cleanUpEvents = function() {\n\n        var _ = this;\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n            $('li', _.$dots).off('click.slick', _.changeSlide);\n        }\n\n        if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.options.autoplay === true) {\n            $('li', _.$dots)\n                .off('mouseenter.slick', $.proxy(_.setPaused, _, true))\n                .off('mouseleave.slick', $.proxy(_.setPaused, _, false));\n        }\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n            _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);\n            _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);\n        }\n\n        _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);\n        _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);\n        _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);\n        _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);\n\n        _.$list.off('click.slick', _.clickHandler);\n\n        $(document).off(_.visibilityChange, _.visibility);\n\n        _.$list.off('mouseenter.slick', $.proxy(_.setPaused, _, true));\n        _.$list.off('mouseleave.slick', $.proxy(_.setPaused, _, false));\n\n        if (_.options.accessibility === true) {\n            _.$list.off('keydown.slick', _.keyHandler);\n        }\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().off('click.slick', _.selectHandler);\n        }\n\n        $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);\n\n        $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);\n\n        $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);\n\n        $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);\n        $(document).off('ready.slick.slick-' + _.instanceUid, _.setPosition);\n    };\n\n    Slick.prototype.cleanUpRows = function() {\n\n        var _ = this, originalSlides;\n\n        if(_.options.rows > 1) {\n            originalSlides = _.$slides.children().children();\n            originalSlides.removeAttr('style');\n            _.$slider.html(originalSlides);\n        }\n\n    };\n\n    Slick.prototype.clickHandler = function(event) {\n\n        var _ = this;\n\n        if (_.shouldClick === false) {\n            event.stopImmediatePropagation();\n            event.stopPropagation();\n            event.preventDefault();\n        }\n\n    };\n\n    Slick.prototype.destroy = function() {\n\n        var _ = this;\n\n        _.autoPlayClear();\n\n        _.touchObject = {};\n\n        _.cleanUpEvents();\n\n        $('.slick-cloned', _.$slider).detach();\n\n        if (_.$dots) {\n            _.$dots.remove();\n        }\n        if (_.$prevArrow && (typeof _.options.prevArrow !== 'object')) {\n            _.$prevArrow.remove();\n        }\n        if (_.$nextArrow && (typeof _.options.nextArrow !== 'object')) {\n            _.$nextArrow.remove();\n        }\n\n        if (_.$slides) {\n            _.$slides.removeClass('slick-slide slick-active slick-center slick-visible')\n                .removeAttr('aria-hidden')\n                .removeAttr('data-slick-index')\n                .css({\n                    position: '',\n                    left: '',\n                    top: '',\n                    zIndex: '',\n                    opacity: '',\n                    width: ''\n                });\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slideTrack.detach();\n\n            _.$list.detach();\n\n            _.$slider.append(_.$slides);\n        }\n\n        _.cleanUpRows();\n\n        _.$slider.removeClass('slick-slider');\n        _.$slider.removeClass('slick-initialized');\n\n    };\n\n    Slick.prototype.disableTransition = function(slide) {\n\n        var _ = this,\n            transition = {};\n\n        transition[_.transitionType] = '';\n\n        if (_.options.fade === false) {\n            _.$slideTrack.css(transition);\n        } else {\n            _.$slides.eq(slide).css(transition);\n        }\n\n    };\n\n    Slick.prototype.fadeSlide = function(slideIndex, callback) {\n\n        var _ = this;\n\n        if (_.cssTransitions === false) {\n\n            _.$slides.eq(slideIndex).css({\n                zIndex: 1000\n            });\n\n            _.$slides.eq(slideIndex).animate({\n                opacity: 1\n            }, _.options.speed, _.options.easing, callback);\n\n        } else {\n\n            _.applyTransition(slideIndex);\n\n            _.$slides.eq(slideIndex).css({\n                opacity: 1,\n                zIndex: 1000\n            });\n\n            if (callback) {\n                setTimeout(function() {\n\n                    _.disableTransition(slideIndex);\n\n                    callback.call();\n                }, _.options.speed);\n            }\n\n        }\n\n    };\n\n    Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {\n\n        var _ = this;\n\n        if (filter !== null) {\n\n            _.unload();\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slidesCache.filter(filter).appendTo(_.$slideTrack);\n\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {\n\n        var _ = this;\n        return _.currentSlide;\n\n    };\n\n    Slick.prototype.getDotCount = function() {\n\n        var _ = this;\n\n        var breakPoint = 0;\n        var counter = 0;\n        var pagerQty = 0;\n\n        if (_.options.infinite === true) {\n            while (breakPoint < _.slideCount) {\n                ++pagerQty;\n                breakPoint = counter + _.options.slidesToShow;\n                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n            }\n        } else if (_.options.centerMode === true) {\n            pagerQty = _.slideCount;\n        } else {\n            while (breakPoint < _.slideCount) {\n                ++pagerQty;\n                breakPoint = counter + _.options.slidesToShow;\n                counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n            }\n        }\n\n        return pagerQty - 1;\n\n    };\n\n    Slick.prototype.getLeft = function(slideIndex) {\n\n        var _ = this,\n            targetLeft,\n            verticalHeight,\n            verticalOffset = 0,\n            targetSlide;\n\n        _.slideOffset = 0;\n        verticalHeight = _.$slides.first().outerHeight();\n\n        if (_.options.infinite === true) {\n            if (_.slideCount > _.options.slidesToShow) {\n                _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;\n                verticalOffset = (verticalHeight * _.options.slidesToShow) * -1;\n            }\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {\n                    if (slideIndex > _.slideCount) {\n                        _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;\n                        verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;\n                    } else {\n                        _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;\n                        verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;\n                    }\n                }\n            }\n        } else {\n            if (slideIndex + _.options.slidesToShow > _.slideCount) {\n                _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;\n                verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;\n            }\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            _.slideOffset = 0;\n            verticalOffset = 0;\n        }\n\n        if (_.options.centerMode === true && _.options.infinite === true) {\n            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;\n        } else if (_.options.centerMode === true) {\n            _.slideOffset = 0;\n            _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);\n        }\n\n        if (_.options.vertical === false) {\n            targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;\n        } else {\n            targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;\n        }\n\n        if (_.options.variableWidth === true) {\n\n            if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n            } else {\n                targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);\n            }\n\n            targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n\n            if (_.options.centerMode === true) {\n                if (_.options.infinite === false) {\n                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n                } else {\n                    targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);\n                }\n                targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n                targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;\n            }\n        }\n\n        return targetLeft;\n\n    };\n\n    Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {\n\n        var _ = this;\n\n        return _.options[option];\n\n    };\n\n    Slick.prototype.getNavigableIndexes = function() {\n\n        var _ = this,\n            breakPoint = 0,\n            counter = 0,\n            indexes = [],\n            max;\n\n        if (_.options.infinite === false) {\n            max = _.slideCount - _.options.slidesToShow + 1;\n            if (_.options.centerMode === true) max = _.slideCount;\n        } else {\n            breakPoint = _.options.slidesToScroll * -1;\n            counter = _.options.slidesToScroll * -1;\n            max = _.slideCount * 2;\n        }\n\n        while (breakPoint < max) {\n            indexes.push(breakPoint);\n            breakPoint = counter + _.options.slidesToScroll;\n            counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n        }\n\n        return indexes;\n\n    };\n\n    Slick.prototype.getSlick = function() {\n\n        return this;\n\n    };\n\n    Slick.prototype.getSlideCount = function() {\n\n        var _ = this,\n            slidesTraversed, swipedSlide, centerOffset;\n\n        centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;\n\n        if (_.options.swipeToSlide === true) {\n            _.$slideTrack.find('.slick-slide').each(function(index, slide) {\n                if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {\n                    swipedSlide = slide;\n                    return false;\n                }\n            });\n\n            slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;\n\n            return slidesTraversed;\n\n        } else {\n            return _.options.slidesToScroll;\n        }\n\n    };\n\n    Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'index',\n                index: parseInt(slide)\n            }\n        }, dontAnimate);\n\n    };\n\n    Slick.prototype.init = function() {\n\n        var _ = this;\n\n        if (!$(_.$slider).hasClass('slick-initialized')) {\n\n            $(_.$slider).addClass('slick-initialized');\n            _.buildRows();\n            _.buildOut();\n            _.setProps();\n            _.startLoad();\n            _.loadSlider();\n            _.initializeEvents();\n            _.updateArrows();\n            _.updateDots();\n        }\n\n        _.$slider.trigger('init', [_]);\n\n    };\n\n    Slick.prototype.initArrowEvents = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n            _.$prevArrow.on('click.slick', {\n                message: 'previous'\n            }, _.changeSlide);\n            _.$nextArrow.on('click.slick', {\n                message: 'next'\n            }, _.changeSlide);\n        }\n\n    };\n\n    Slick.prototype.initDotEvents = function() {\n\n        var _ = this;\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n            $('li', _.$dots).on('click.slick', {\n                message: 'index'\n            }, _.changeSlide);\n        }\n\n        if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.options.autoplay === true) {\n            $('li', _.$dots)\n                .on('mouseenter.slick', $.proxy(_.setPaused, _, true))\n                .on('mouseleave.slick', $.proxy(_.setPaused, _, false));\n        }\n\n    };\n\n    Slick.prototype.initializeEvents = function() {\n\n        var _ = this;\n\n        _.initArrowEvents();\n\n        _.initDotEvents();\n\n        _.$list.on('touchstart.slick mousedown.slick', {\n            action: 'start'\n        }, _.swipeHandler);\n        _.$list.on('touchmove.slick mousemove.slick', {\n            action: 'move'\n        }, _.swipeHandler);\n        _.$list.on('touchend.slick mouseup.slick', {\n            action: 'end'\n        }, _.swipeHandler);\n        _.$list.on('touchcancel.slick mouseleave.slick', {\n            action: 'end'\n        }, _.swipeHandler);\n\n        _.$list.on('click.slick', _.clickHandler);\n\n        $(document).on(_.visibilityChange, $.proxy(_.visibility, _));\n\n        _.$list.on('mouseenter.slick', $.proxy(_.setPaused, _, true));\n        _.$list.on('mouseleave.slick', $.proxy(_.setPaused, _, false));\n\n        if (_.options.accessibility === true) {\n            _.$list.on('keydown.slick', _.keyHandler);\n        }\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n        }\n\n        $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));\n\n        $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));\n\n        $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);\n\n        $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);\n        $(document).on('ready.slick.slick-' + _.instanceUid, _.setPosition);\n\n    };\n\n    Slick.prototype.initUI = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$prevArrow.show();\n            _.$nextArrow.show();\n\n        }\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$dots.show();\n\n        }\n\n        if (_.options.autoplay === true) {\n\n            _.autoPlay();\n\n        }\n\n    };\n\n    Slick.prototype.keyHandler = function(event) {\n\n        var _ = this;\n\n        if (event.keyCode === 37 && _.options.accessibility === true) {\n            _.changeSlide({\n                data: {\n                    message: 'previous'\n                }\n            });\n        } else if (event.keyCode === 39 && _.options.accessibility === true) {\n            _.changeSlide({\n                data: {\n                    message: 'next'\n                }\n            });\n        }\n\n    };\n\n    Slick.prototype.lazyLoad = function() {\n\n        var _ = this,\n            loadRange, cloneRange, rangeStart, rangeEnd;\n\n        function loadImages(imagesScope) {\n            $('img[data-lazy]', imagesScope).each(function() {\n                var image = $(this),\n                    imageSource = $(this).attr('data-lazy'),\n                    imageToLoad = document.createElement('img');\n\n                imageToLoad.onload = function() {\n                    image.animate({\n                        opacity: 1\n                    }, 200);\n                };\n                imageToLoad.src = imageSource;\n\n                image\n                    .css({\n                        opacity: 0\n                    })\n                    .attr('src', imageSource)\n                    .removeAttr('data-lazy')\n                    .removeClass('slick-loading');\n            });\n        }\n\n        if (_.options.centerMode === true) {\n            if (_.options.infinite === true) {\n                rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);\n                rangeEnd = rangeStart + _.options.slidesToShow + 2;\n            } else {\n                rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));\n                rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;\n            }\n        } else {\n            rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;\n            rangeEnd = rangeStart + _.options.slidesToShow;\n            if (_.options.fade === true) {\n                if (rangeStart > 0) rangeStart--;\n                if (rangeEnd <= _.slideCount) rangeEnd++;\n            }\n        }\n\n        loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);\n        loadImages(loadRange);\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            cloneRange = _.$slider.find('.slick-slide');\n            loadImages(cloneRange);\n        } else\n        if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {\n            cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);\n            loadImages(cloneRange);\n        } else if (_.currentSlide === 0) {\n            cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);\n            loadImages(cloneRange);\n        }\n\n    };\n\n    Slick.prototype.loadSlider = function() {\n\n        var _ = this;\n\n        _.setPosition();\n\n        _.$slideTrack.css({\n            opacity: 1\n        });\n\n        _.$slider.removeClass('slick-loading');\n\n        _.initUI();\n\n        if (_.options.lazyLoad === 'progressive') {\n            _.progressiveLazyLoad();\n        }\n\n    };\n\n    Slick.prototype.next = Slick.prototype.slickNext = function() {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'next'\n            }\n        });\n\n    };\n\n    Slick.prototype.orientationChange = function() {\n\n        var _ = this;\n\n        _.checkResponsive();\n        _.setPosition();\n\n    };\n\n    Slick.prototype.pause = Slick.prototype.slickPause = function() {\n\n        var _ = this;\n\n        _.autoPlayClear();\n        _.paused = true;\n\n    };\n\n    Slick.prototype.play = Slick.prototype.slickPlay = function() {\n\n        var _ = this;\n\n        _.paused = false;\n        _.autoPlay();\n\n    };\n\n    Slick.prototype.postSlide = function(index) {\n\n        var _ = this;\n\n        _.$slider.trigger('afterChange', [_, index]);\n\n        _.animating = false;\n\n        _.setPosition();\n\n        _.swipeLeft = null;\n\n        if (_.options.autoplay === true && _.paused === false) {\n            _.autoPlay();\n        }\n\n    };\n\n    Slick.prototype.prev = Slick.prototype.slickPrev = function() {\n\n        var _ = this;\n\n        _.changeSlide({\n            data: {\n                message: 'previous'\n            }\n        });\n\n    };\n\n    Slick.prototype.preventDefault = function(e) {\n        e.preventDefault();\n    };\n\n    Slick.prototype.progressiveLazyLoad = function() {\n\n        var _ = this,\n            imgCount, targetImage;\n\n        imgCount = $('img[data-lazy]', _.$slider).length;\n\n        if (imgCount > 0) {\n            targetImage = $('img[data-lazy]', _.$slider).first();\n            targetImage.attr('src', targetImage.attr('data-lazy')).removeClass('slick-loading').load(function() {\n                    targetImage.removeAttr('data-lazy');\n                    _.progressiveLazyLoad();\n\n                    if (_.options.adaptiveHeight === true) {\n                        _.setPosition();\n                    }\n                })\n                .error(function() {\n                    targetImage.removeAttr('data-lazy');\n                    _.progressiveLazyLoad();\n                });\n        }\n\n    };\n\n    Slick.prototype.refresh = function() {\n\n        var _ = this,\n            currentSlide = _.currentSlide;\n\n        _.destroy();\n\n        $.extend(_, _.initials);\n\n        _.init();\n\n        _.changeSlide({\n            data: {\n                message: 'index',\n                index: currentSlide\n            }\n        }, false);\n\n    };\n\n    Slick.prototype.reinit = function() {\n\n        var _ = this;\n\n        _.$slides = _.$slideTrack.children(_.options.slide).addClass(\n            'slick-slide');\n\n        _.slideCount = _.$slides.length;\n\n        if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {\n            _.currentSlide = _.currentSlide - _.options.slidesToScroll;\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            _.currentSlide = 0;\n        }\n\n        _.setProps();\n\n        _.setupInfinite();\n\n        _.buildArrows();\n\n        _.updateArrows();\n\n        _.initArrowEvents();\n\n        _.buildDots();\n\n        _.updateDots();\n\n        _.initDotEvents();\n\n        if (_.options.focusOnSelect === true) {\n            $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n        }\n\n        _.setSlideClasses(0);\n\n        _.setPosition();\n\n        _.$slider.trigger('reInit', [_]);\n\n    };\n\n    Slick.prototype.resize = function() {\n\n        var _ = this;\n\n        if ($(window).width() !== _.windowWidth) {\n            clearTimeout(_.windowDelay);\n            _.windowDelay = window.setTimeout(function() {\n                _.windowWidth = $(window).width();\n                _.checkResponsive();\n                _.setPosition();\n            }, 50);\n        }\n    };\n\n    Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {\n\n        var _ = this;\n\n        if (typeof(index) === 'boolean') {\n            removeBefore = index;\n            index = removeBefore === true ? 0 : _.slideCount - 1;\n        } else {\n            index = removeBefore === true ? --index : index;\n        }\n\n        if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {\n            return false;\n        }\n\n        _.unload();\n\n        if (removeAll === true) {\n            _.$slideTrack.children().remove();\n        } else {\n            _.$slideTrack.children(this.options.slide).eq(index).remove();\n        }\n\n        _.$slides = _.$slideTrack.children(this.options.slide);\n\n        _.$slideTrack.children(this.options.slide).detach();\n\n        _.$slideTrack.append(_.$slides);\n\n        _.$slidesCache = _.$slides;\n\n        _.reinit();\n\n    };\n\n    Slick.prototype.setCSS = function(position) {\n\n        var _ = this,\n            positionProps = {},\n            x, y;\n\n        if (_.options.rtl === true) {\n            position = -position;\n        }\n        x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';\n        y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';\n\n        positionProps[_.positionProp] = position;\n\n        if (_.transformsEnabled === false) {\n            _.$slideTrack.css(positionProps);\n        } else {\n            positionProps = {};\n            if (_.cssTransitions === false) {\n                positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';\n                _.$slideTrack.css(positionProps);\n            } else {\n                positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';\n                _.$slideTrack.css(positionProps);\n            }\n        }\n\n    };\n\n    Slick.prototype.setDimensions = function() {\n\n        var _ = this;\n\n        if (_.options.vertical === false) {\n            if (_.options.centerMode === true) {\n                _.$list.css({\n                    padding: ('0px ' + _.options.centerPadding)\n                });\n            }\n        } else {\n            _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);\n            if (_.options.centerMode === true) {\n                _.$list.css({\n                    padding: (_.options.centerPadding + ' 0px')\n                });\n            }\n        }\n\n        _.listWidth = _.$list.width();\n        _.listHeight = _.$list.height();\n\n\n        if (_.options.vertical === false && _.options.variableWidth === false) {\n            _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);\n            _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));\n\n        } else if (_.options.variableWidth === true) {\n            _.$slideTrack.width(5000 * _.slideCount);\n        } else {\n            _.slideWidth = Math.ceil(_.listWidth);\n            _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));\n        }\n\n        var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();\n        if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);\n\n    };\n\n    Slick.prototype.setFade = function() {\n\n        var _ = this,\n            targetLeft;\n\n        _.$slides.each(function(index, element) {\n            targetLeft = (_.slideWidth * index) * -1;\n            if (_.options.rtl === true) {\n                $(element).css({\n                    position: 'relative',\n                    right: targetLeft,\n                    top: 0,\n                    zIndex: 800,\n                    opacity: 0\n                });\n            } else {\n                $(element).css({\n                    position: 'relative',\n                    left: targetLeft,\n                    top: 0,\n                    zIndex: 800,\n                    opacity: 0\n                });\n            }\n        });\n\n        _.$slides.eq(_.currentSlide).css({\n            zIndex: 900,\n            opacity: 1\n        });\n\n    };\n\n    Slick.prototype.setHeight = function() {\n\n        var _ = this;\n\n        if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n            var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n            _.$list.css('height', targetHeight);\n        }\n\n    };\n\n    Slick.prototype.setOption = Slick.prototype.slickSetOption = function(option, value, refresh) {\n\n        var _ = this;\n        _.options[option] = value;\n\n        if (refresh === true) {\n            _.unload();\n            _.reinit();\n        }\n\n    };\n\n    Slick.prototype.setPosition = function() {\n\n        var _ = this;\n\n        _.setDimensions();\n\n        _.setHeight();\n\n        if (_.options.fade === false) {\n            _.setCSS(_.getLeft(_.currentSlide));\n        } else {\n            _.setFade();\n        }\n\n        _.$slider.trigger('setPosition', [_]);\n\n    };\n\n    Slick.prototype.setProps = function() {\n\n        var _ = this,\n            bodyStyle = document.body.style;\n\n        _.positionProp = _.options.vertical === true ? 'top' : 'left';\n\n        if (_.positionProp === 'top') {\n            _.$slider.addClass('slick-vertical');\n        } else {\n            _.$slider.removeClass('slick-vertical');\n        }\n\n        if (bodyStyle.WebkitTransition !== undefined ||\n            bodyStyle.MozTransition !== undefined ||\n            bodyStyle.msTransition !== undefined) {\n            if (_.options.useCSS === true) {\n                _.cssTransitions = true;\n            }\n        }\n\n        if (bodyStyle.OTransform !== undefined) {\n            _.animType = 'OTransform';\n            _.transformType = '-o-transform';\n            _.transitionType = 'OTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.MozTransform !== undefined) {\n            _.animType = 'MozTransform';\n            _.transformType = '-moz-transform';\n            _.transitionType = 'MozTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.webkitTransform !== undefined) {\n            _.animType = 'webkitTransform';\n            _.transformType = '-webkit-transform';\n            _.transitionType = 'webkitTransition';\n            if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n        }\n        if (bodyStyle.msTransform !== undefined) {\n            _.animType = 'msTransform';\n            _.transformType = '-ms-transform';\n            _.transitionType = 'msTransition';\n            if (bodyStyle.msTransform === undefined) _.animType = false;\n        }\n        if (bodyStyle.transform !== undefined && _.animType !== false) {\n            _.animType = 'transform';\n            _.transformType = 'transform';\n            _.transitionType = 'transition';\n        }\n        _.transformsEnabled = (_.animType !== null && _.animType !== false);\n\n    };\n\n\n    Slick.prototype.setSlideClasses = function(index) {\n\n        var _ = this,\n            centerOffset, allSlides, indexOffset, remainder;\n\n        _.$slider.find('.slick-slide').removeClass('slick-active').attr('aria-hidden', 'true').removeClass('slick-center');\n        allSlides = _.$slider.find('.slick-slide');\n\n        if (_.options.centerMode === true) {\n\n            centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n            if (_.options.infinite === true) {\n\n                if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {\n                    _.$slides.slice(index - centerOffset, index + centerOffset + 1).addClass('slick-active').attr('aria-hidden', 'false');\n                } else {\n                    indexOffset = _.options.slidesToShow + index;\n                    allSlides.slice(indexOffset - centerOffset + 1, indexOffset + centerOffset + 2).addClass('slick-active').attr('aria-hidden', 'false');\n                }\n\n                if (index === 0) {\n                    allSlides.eq(allSlides.length - 1 - _.options.slidesToShow).addClass('slick-center');\n                } else if (index === _.slideCount - 1) {\n                    allSlides.eq(_.options.slidesToShow).addClass('slick-center');\n                }\n\n            }\n\n            _.$slides.eq(index).addClass('slick-center');\n\n        } else {\n\n            if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {\n                _.$slides.slice(index, index + _.options.slidesToShow).addClass('slick-active').attr('aria-hidden', 'false');\n            } else if (allSlides.length <= _.options.slidesToShow) {\n                allSlides.addClass('slick-active').attr('aria-hidden', 'false');\n            } else {\n                remainder = _.slideCount % _.options.slidesToShow;\n                indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;\n                if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {\n                    allSlides.slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder).addClass('slick-active').attr('aria-hidden', 'false');\n                } else {\n                    allSlides.slice(indexOffset, indexOffset + _.options.slidesToShow).addClass('slick-active').attr('aria-hidden', 'false');\n                }\n            }\n\n        }\n\n        if (_.options.lazyLoad === 'ondemand') {\n            _.lazyLoad();\n        }\n\n    };\n\n    Slick.prototype.setupInfinite = function() {\n\n        var _ = this,\n            i, slideIndex, infiniteCount;\n\n        if (_.options.fade === true) {\n            _.options.centerMode = false;\n        }\n\n        if (_.options.infinite === true && _.options.fade === false) {\n\n            slideIndex = null;\n\n            if (_.slideCount > _.options.slidesToShow) {\n\n                if (_.options.centerMode === true) {\n                    infiniteCount = _.options.slidesToShow + 1;\n                } else {\n                    infiniteCount = _.options.slidesToShow;\n                }\n\n                for (i = _.slideCount; i > (_.slideCount -\n                        infiniteCount); i -= 1) {\n                    slideIndex = i - 1;\n                    $(_.$slides[slideIndex]).clone(true).attr('id', '')\n                        .attr('data-slick-index', slideIndex - _.slideCount)\n                        .prependTo(_.$slideTrack).addClass('slick-cloned');\n                }\n                for (i = 0; i < infiniteCount; i += 1) {\n                    slideIndex = i;\n                    $(_.$slides[slideIndex]).clone(true).attr('id', '')\n                        .attr('data-slick-index', slideIndex + _.slideCount)\n                        .appendTo(_.$slideTrack).addClass('slick-cloned');\n                }\n                _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {\n                    $(this).attr('id', '');\n                });\n\n            }\n\n        }\n\n    };\n\n    Slick.prototype.setPaused = function(paused) {\n\n        var _ = this;\n\n        if (_.options.autoplay === true && _.options.pauseOnHover === true) {\n            _.paused = paused;\n            if (!paused) {\n                _.autoPlay();\n            } else {\n                _.autoPlayClear();\n            }\n        }\n    };\n\n    Slick.prototype.selectHandler = function(event) {\n\n        var _ = this;\n\n        var targetElement = $(event.target).is('.slick-slide') ?\n            $(event.target) :\n            $(event.target).parents('.slick-slide');\n\n        var index = parseInt(targetElement.attr('data-slick-index'));\n\n        if (!index) index = 0;\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            _.$slider.find('.slick-slide').removeClass('slick-active').attr('aria-hidden', 'true');\n            _.$slides.eq(index).addClass('slick-active').attr(\"aria-hidden\", \"false\");\n            if (_.options.centerMode === true) {\n                _.$slider.find('.slick-slide').removeClass('slick-center');\n                _.$slides.eq(index).addClass('slick-center');\n            }\n            _.asNavFor(index);\n            return;\n        }\n        _.slideHandler(index);\n\n    };\n\n    Slick.prototype.slideHandler = function(index, sync, dontAnimate) {\n\n        var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,\n            _ = this;\n\n        sync = sync || false;\n\n        if (_.animating === true && _.options.waitForAnimate === true) {\n            return;\n        }\n\n        if (_.options.fade === true && _.currentSlide === index) {\n            return;\n        }\n\n        if (_.slideCount <= _.options.slidesToShow) {\n            return;\n        }\n\n        if (sync === false) {\n            _.asNavFor(index);\n        }\n\n        targetSlide = index;\n        targetLeft = _.getLeft(targetSlide);\n        slideLeft = _.getLeft(_.currentSlide);\n\n        _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;\n\n        if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {\n            if (_.options.fade === false) {\n                targetSlide = _.currentSlide;\n                if (dontAnimate !== true) {\n                    _.animateSlide(slideLeft, function() {\n                        _.postSlide(targetSlide);\n                    });\n                } else {\n                    _.postSlide(targetSlide);\n                }\n            }\n            return;\n        } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {\n            if (_.options.fade === false) {\n                targetSlide = _.currentSlide;\n                if (dontAnimate !== true) {\n                    _.animateSlide(slideLeft, function() {\n                        _.postSlide(targetSlide);\n                    });\n                } else {\n                    _.postSlide(targetSlide);\n                }\n            }\n            return;\n        }\n\n        if (_.options.autoplay === true) {\n            clearInterval(_.autoPlayTimer);\n        }\n\n        if (targetSlide < 0) {\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);\n            } else {\n                animSlide = _.slideCount + targetSlide;\n            }\n        } else if (targetSlide >= _.slideCount) {\n            if (_.slideCount % _.options.slidesToScroll !== 0) {\n                animSlide = 0;\n            } else {\n                animSlide = targetSlide - _.slideCount;\n            }\n        } else {\n            animSlide = targetSlide;\n        }\n\n        _.animating = true;\n\n        _.$slider.trigger(\"beforeChange\", [_, _.currentSlide, animSlide]);\n\n        oldSlide = _.currentSlide;\n        _.currentSlide = animSlide;\n\n        _.setSlideClasses(_.currentSlide);\n\n        _.updateDots();\n        _.updateArrows();\n\n        if (_.options.fade === true) {\n            if (dontAnimate !== true) {\n                _.fadeSlide(animSlide, function() {\n                    _.postSlide(animSlide);\n                });\n            } else {\n                _.postSlide(animSlide);\n            }\n            _.animateHeight();\n            return;\n        }\n\n        if (dontAnimate !== true) {\n            _.animateSlide(targetLeft, function() {\n                _.postSlide(animSlide);\n            });\n        } else {\n            _.postSlide(animSlide);\n        }\n\n    };\n\n    Slick.prototype.startLoad = function() {\n\n        var _ = this;\n\n        if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$prevArrow.hide();\n            _.$nextArrow.hide();\n\n        }\n\n        if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n\n            _.$dots.hide();\n\n        }\n\n        _.$slider.addClass('slick-loading');\n\n    };\n\n    Slick.prototype.swipeDirection = function() {\n\n        var xDist, yDist, r, swipeAngle, _ = this;\n\n        xDist = _.touchObject.startX - _.touchObject.curX;\n        yDist = _.touchObject.startY - _.touchObject.curY;\n        r = Math.atan2(yDist, xDist);\n\n        swipeAngle = Math.round(r * 180 / Math.PI);\n        if (swipeAngle < 0) {\n            swipeAngle = 360 - Math.abs(swipeAngle);\n        }\n\n        if ((swipeAngle <= 45) && (swipeAngle >= 0)) {\n            return (_.options.rtl === false ? 'left' : 'right');\n        }\n        if ((swipeAngle <= 360) && (swipeAngle >= 315)) {\n            return (_.options.rtl === false ? 'left' : 'right');\n        }\n        if ((swipeAngle >= 135) && (swipeAngle <= 225)) {\n            return (_.options.rtl === false ? 'right' : 'left');\n        }\n        if (_.options.verticalSwiping === true) {\n            if ((swipeAngle >= 35) && (swipeAngle <= 135)) {\n                return 'left';\n            } else {\n                return 'right';\n            }\n        }\n\n        return 'vertical';\n\n    };\n\n    Slick.prototype.swipeEnd = function(event) {\n\n        var _ = this,\n            slideCount;\n\n        _.dragging = false;\n\n        _.shouldClick = (_.touchObject.swipeLength > 10) ? false : true;\n\n        if (_.touchObject.curX === undefined) {\n            return false;\n        }\n\n        if (_.touchObject.edgeHit === true) {\n            _.$slider.trigger(\"edge\", [_, _.swipeDirection()]);\n        }\n\n        if (_.touchObject.swipeLength >= _.touchObject.minSwipe) {\n\n            switch (_.swipeDirection()) {\n                case 'left':\n                    slideCount = _.options.swipeToSlide ? _.checkNavigable(_.currentSlide + _.getSlideCount()) : _.currentSlide + _.getSlideCount();\n                    _.slideHandler(slideCount);\n                    _.currentDirection = 0;\n                    _.touchObject = {};\n                    _.$slider.trigger(\"swipe\", [_, \"left\"]);\n                    break;\n\n                case 'right':\n                    slideCount = _.options.swipeToSlide ? _.checkNavigable(_.currentSlide - _.getSlideCount()) : _.currentSlide - _.getSlideCount();\n                    _.slideHandler(slideCount);\n                    _.currentDirection = 1;\n                    _.touchObject = {};\n                    _.$slider.trigger(\"swipe\", [_, \"right\"]);\n                    break;\n            }\n        } else {\n            if (_.touchObject.startX !== _.touchObject.curX) {\n                _.slideHandler(_.currentSlide);\n                _.touchObject = {};\n            }\n        }\n\n    };\n\n    Slick.prototype.swipeHandler = function(event) {\n\n        var _ = this;\n\n        if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {\n            return;\n        } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {\n            return;\n        }\n\n        _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?\n            event.originalEvent.touches.length : 1;\n\n        _.touchObject.minSwipe = _.listWidth / _.options\n            .touchThreshold;\n\n        if (_.options.verticalSwiping === true) {\n            _.touchObject.minSwipe = _.listHeight / _.options\n                .touchThreshold;\n        }\n\n        switch (event.data.action) {\n\n            case 'start':\n                _.swipeStart(event);\n                break;\n\n            case 'move':\n                _.swipeMove(event);\n                break;\n\n            case 'end':\n                _.swipeEnd(event);\n                break;\n\n        }\n\n    };\n\n    Slick.prototype.swipeMove = function(event) {\n\n        var _ = this,\n            edgeWasHit = false,\n            curLeft, swipeDirection, swipeLength, positionOffset, touches;\n\n        touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;\n\n        if (!_.dragging || touches && touches.length !== 1) {\n            return false;\n        }\n\n        curLeft = _.getLeft(_.currentSlide);\n\n        _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;\n        _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;\n\n        _.touchObject.swipeLength = Math.round(Math.sqrt(\n            Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));\n\n        if (_.options.verticalSwiping === true) {\n            _.touchObject.swipeLength = Math.round(Math.sqrt(\n                Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));\n        }\n\n        swipeDirection = _.swipeDirection();\n\n        if (swipeDirection === 'vertical') {\n            return;\n        }\n\n        if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {\n            event.preventDefault();\n        }\n\n        positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);\n        if (_.options.verticalSwiping === true) {\n            positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;\n        }\n\n\n        swipeLength = _.touchObject.swipeLength;\n\n        _.touchObject.edgeHit = false;\n\n        if (_.options.infinite === false) {\n            if ((_.currentSlide === 0 && swipeDirection === \"right\") || (_.currentSlide >= _.getDotCount() && swipeDirection === \"left\")) {\n                swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;\n                _.touchObject.edgeHit = true;\n            }\n        }\n\n        if (_.options.vertical === false) {\n            _.swipeLeft = curLeft + swipeLength * positionOffset;\n        } else {\n            _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;\n        }\n        if (_.options.verticalSwiping === true) {\n            _.swipeLeft = curLeft + swipeLength * positionOffset;\n        }\n\n        if (_.options.fade === true || _.options.touchMove === false) {\n            return false;\n        }\n\n        if (_.animating === true) {\n            _.swipeLeft = null;\n            return false;\n        }\n\n        _.setCSS(_.swipeLeft);\n\n    };\n\n    Slick.prototype.swipeStart = function(event) {\n\n        var _ = this,\n            touches;\n\n        if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {\n            _.touchObject = {};\n            return false;\n        }\n\n        if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {\n            touches = event.originalEvent.touches[0];\n        }\n\n        _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;\n        _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;\n\n        _.dragging = true;\n\n    };\n\n    Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {\n\n        var _ = this;\n\n        if (_.$slidesCache !== null) {\n\n            _.unload();\n\n            _.$slideTrack.children(this.options.slide).detach();\n\n            _.$slidesCache.appendTo(_.$slideTrack);\n\n            _.reinit();\n\n        }\n\n    };\n\n    Slick.prototype.unload = function() {\n\n        var _ = this;\n\n        $('.slick-cloned', _.$slider).remove();\n        if (_.$dots) {\n            _.$dots.remove();\n        }\n        if (_.$prevArrow && (typeof _.options.prevArrow !== 'object')) {\n            _.$prevArrow.remove();\n        }\n        if (_.$nextArrow && (typeof _.options.nextArrow !== 'object')) {\n            _.$nextArrow.remove();\n        }\n        _.$slides.removeClass('slick-slide slick-active slick-visible').attr(\"aria-hidden\", \"true\").css('width', '');\n\n    };\n\n    Slick.prototype.unslick = function() {\n\n        var _ = this;\n        _.destroy();\n\n    };\n\n    Slick.prototype.updateArrows = function() {\n\n        var _ = this,\n            centerOffset;\n\n        centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n        if (_.options.arrows === true && _.options.infinite !==\n            true && _.slideCount > _.options.slidesToShow) {\n            _.$prevArrow.removeClass('slick-disabled');\n            _.$nextArrow.removeClass('slick-disabled');\n            if (_.currentSlide === 0) {\n                _.$prevArrow.addClass('slick-disabled');\n                _.$nextArrow.removeClass('slick-disabled');\n            } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {\n                _.$nextArrow.addClass('slick-disabled');\n                _.$prevArrow.removeClass('slick-disabled');\n            } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {\n                _.$nextArrow.addClass('slick-disabled');\n                _.$prevArrow.removeClass('slick-disabled');\n            }\n        }\n\n    };\n\n    Slick.prototype.updateDots = function() {\n\n        var _ = this;\n\n        if (_.$dots !== null) {\n\n            _.$dots.find('li').removeClass('slick-active').attr(\"aria-hidden\", \"true\");\n            _.$dots.find('li').eq(Math.floor(_.currentSlide / _.options.slidesToScroll)).addClass('slick-active').attr(\"aria-hidden\", \"false\");\n\n        }\n\n    };\n\n    Slick.prototype.visibility = function() {\n\n        var _ = this;\n\n        if (document[_.hidden]) {\n            _.paused = true;\n            _.autoPlayClear();\n        } else {\n            if (_.options.autoplay === true) {\n                _.paused = false;\n                _.autoPlay();\n            }\n        }\n\n    };\n\n    $.fn.slick = function() {\n        var _ = this,\n            opt = arguments[0],\n            args = Array.prototype.slice.call(arguments, 1),\n            l = _.length,\n            i = 0,\n            ret;\n        for (i; i < l; i++) {\n            if (typeof opt == 'object' || typeof opt == 'undefined')\n                _[i].slick = new Slick(_[i], opt);\n            else\n                ret = _[i].slick[opt].apply(_[i].slick, args);\n            if (typeof ret != 'undefined') return ret;\n        }\n        return _;\n    };\n\n}));\n","var utils = require(\"webcube-base\");\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar $ = require(\"jquery\");\n$.slick = require(\"slick-carousel\");\n\n/**\n * To work as a 'bindable', the first parameter should be the html_element,\n * and all other arguments should be added as wc-arguments attribute on the\n * attribute.\n */\nfunction Gallery(html_element, display_slick_params, thumbnails_slick_params) {\n  WebCubeObject.call(this);\n  this.$el = $(html_element).find(\".display\");\n  this.$thumbs = $(html_element).find(\".thumbnails\");\n  this.slideCount = this.$el.children().length;\n  this.sender = sender;\n\n  // Order of slick settings and how they are overwritten\n  //\n  // 1. Default settings (in this.display_settings)\n  // 2. Calling parameters (display_slick_params)\n  // 3. Page variable options (<div wc-object=\"gallery\" ... data-options=\"my_settings\"></div>\n  //    where my_settings is a global variable (usually hard coded in that page)\n  //\n  //    eg: <script>\n  //          my_settings = { arrows: true, dots: false }\n  //        </script>\n  //\n\n  // default display slick settings\n  this.display_settings = {\n    dots: false,\n  };\n  // get some settings from html or use defaults\n  var display_page_settings = this.$el.data(\"options\");\n  if (display_page_settings) {\n    display_page_settings = window[display_page_settings]\n      ? window[display_page_settings]\n      : {};\n  }\n  $.extend(this.display_settings, display_slick_params, display_page_settings);\n\n  this.$el.slick(this.display_settings);\n\n  if (this.$thumbs) {\n    this.thumbnails_settings = {\n      slidesToShow: 4,\n      slidesToScroll: 4,\n      dots: false,\n      responsive: [\n        {\n          breakpoint: 640,\n          settings: {\n            slidesToShow: 3,\n            slidesToScroll: 3,\n            dots: true,\n            arrows: false,\n          },\n        },\n      ],\n    };\n\n    // get some settings from html or use defaults\n    var thumbnails_page_settings = this.$el.data(\"thumbnails-options\");\n    if (thumbnails_page_settings) {\n      thumbnails_page_settings = window[thumbnails_page_settings]\n        ? window[thumbnails_page_settings]\n        : {};\n    }\n    $.extend(\n      this.thumbnails_settings,\n      thumbnails_slick_params,\n      thumbnails_page_settings\n    );\n\n    this.$thumbs.slick(this.thumbnails_settings);\n  }\n\n  var self = this;\n  this.$thumbs.find(\"a:not(.video) img\").on(\"click\", function () {\n    var idx = $(this).data(\"index\");\n    self.sender.bind(this)(self.mailbox, {\n      message: \"goto\",\n      item: idx - 1,\n    });\n  });\n\n  this.currentSlide = this.$el.slick(\"slickCurrentSlide\");\n\n  this.gotoSlide = function (item) {\n    this.$el.slick(\"slickGoTo\", item);\n  }.bind(this);\n\n  this.nextSlide = function () {\n    this.$el.slick(\"slickNext\");\n  }.bind(this);\n\n  this.previousSlide = function () {\n    this.$el.slick(\"slickPrev\");\n  }.bind(this);\n\n  this.$el.on(\n    \"beforeChange\",\n    function (evt, slick, currentSlide, nextSlide) {\n      this.currentSlide = nextSlide;\n    }.bind(this)\n  );\n}\n\nvar GalleryCls = WebCubeObject.extend(Gallery, {\n  dispatch: function (msg) {\n    var element = this.$el;\n    this.gotoSlide(msg.payload.item);\n  },\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: GalleryCls,\n    factory: new WebCubeObjectFactory(GalleryCls, \"gallery\", [\n      [\".display\", \".thumbnails\"],\n    ]),\n  };\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\n\nvar WebcubeGeneralModal = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n    this.html_element = html_element;\n\n    $(document).on('opened.fndtn.reveal', '[data-reveal]', this.init);\n\n    $(document).on('closed.fndtn.reveal', '[data-reveal]', this.closed);\n});\n\nWebcubeGeneralModal.prototype.closed = function(e){\n    if (e.namespace !== 'fndtn.reveal') return;\n    $(this).find(\"[wc-object]\").each(function(index){\n        if (this.webcube_object) {\n            this.webcube_object.destroy()\n        }\n    })\n};\n\nWebcubeGeneralModal.prototype.init = function(e){\n    //    constructor gets called when modal revealed.\n    if (e.namespace !== 'fndtn.reveal') return;\n    WebCube.document_binding.applyBindingsAndInit(this);\n    var self = this;\n    $(this).on('submit', 'form:not(.no-submit-handling)', function() {\n        $.ajax({\n            url     : $(this).attr('action'),\n            type    : $(this).attr('method'),\n            data    : $(this).serialize(),\n            //dataType: \"json\",\n            success : function( data ) {\n                var partial_selector = $(self).attr('partial-selector');\n                if (partial_selector) {\n                    $(self).html($(partial_selector, data));\n                }\n                else {\n                    $(self).html(data);\n                }\n            },\n            //error   : function( xhr, status, err ) {\n                //alert(xhr.responseJSON.error);\n            //}\n        });\n        return false;\n    });\n};\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: WebcubeGeneralModal,\n        factory: new WebCubeObjectFactory(WebcubeGeneralModal, \"general-modal\", [[]])\n    }\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar Product = require(\"webcube-product\");\n\n\n/**\n * To work as a 'bindable', the first parameter should be the html_element,\n * and all other arguments should be added as wc-arguments attribute on the\n * attribute.\n */\nvar GraphicOptionSelector = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n\n    var self = this;\n    self.$select = $(html_element);\n    self.select_name = self.$select.attr('name');\n    self.selected_value = self.$select.val();\n    self.allow_deselect = typeof(self.$select.data(\"allow-deselect\")) != \"undefined\";\n    self.graphicoptions_selector = self.$select.data('graphicoptions');\n    self.label_selector = self.$select.data('label');\n    // Get the latest product object from the document_binding,\n    // fix, in case we've added many\n    var p = self.$select.parents('[wc-object=\"product\"]')[0];\n    self.product = null;\n    if (typeof p === \"undefined\") {\n        console.log('Product doesnt exist');\n    } else {\n        self.product = p.webcube_object;\n    }\n\n    self.$sibling_selectors = self.$select.parents('form').find('select:not([name='+self.select_name+'])');\n    self.$button_list = null;\n\n\n    self.init_handlers = function() {\n\n      if (self.label_selector) {\n          self.$label = $(self.label_selector);\n          // TODO: this looks anywhere on the page, so the selector should be an\n          // unique id. Ideally, html_element wouldn't be attached to a <select>\n          // but instead to a container so we can restrict $label to be within the\n          // container\n      }\n      else { \n          self.$label = null;\n      }\n\n      // Add click event handler\n      self.$button_list = self.$select.siblings(self.graphicoptions_selector);\n      self.$button_list.on('click','li.button', function(e) {\n        e.preventDefault();\n        e.stopPropagation();\n\n        var $li = $(this);\n\n        if ($li.hasClass('disabled')) { return false; }\n\n        if ($li.hasClass('active')) {\n          if(self.allow_deselect){\n              self.$select.val('');\n              if (self.$label) { self.$label.text('');}\n              $li.removeClass('active');\n          } \n        }\n        else {\n          self.$select.val($li.data('value'));\n          if (self.$label) { self.$label.text($li.data('value'));}\n          $li.addClass('active');\n          $li.siblings('li.button').removeClass('active');\n        }\n        self.$select.trigger('change');\n\n      });\n\n      if (self.$button_list.length) {\n          self.$select.addClass('graphicoption-selector-initialized');\n      }\n\n      // select the initially chosen option from <select>\n      self.$selected_button = self.$button_list.find(\".button[data-value='\"+self.selected_value+\"']\");\n      if (self.$selected_button.length) {\n          self.$button_list.find('.button').removeClass('active');\n          self.$selected_button.addClass('active');\n      }\n\n\n    }\n\n\n    self.updateButton = function (msg) {\n        var selection = {};\n        var options = [];\n\n        self.$sibling_selectors.each(function () {\n            var $cur_sel = $(this);\n            selection[$cur_sel.attr('name')] = $cur_sel.val();\n        });\n        options = self.product.options_by_selection(self.select_name, selection);\n\n        // now that we have the list of avaiable options,\n        // update the button list\n\n        self.$button_list.find('li.button').each(function () {\n            var $li = $(this);\n            if (options.indexOf($li.data('value').toString()) > -1) {\n                $li.removeClass('disabled');\n            } else {\n                $li.addClass('disabled');\n            }\n        })\n    };\n\n\n}, {\n    initialize: function() {\n        this.init_handlers();\n        this.register('update_product_form', this.updateButton);\n    }\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: GraphicOptionSelector,\n        factory: new WebCubeObjectFactory(GraphicOptionSelector, \"graphicoption-selector\", [[]])\n    };\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\nvar HideFAQAccordion = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n\n    var faq_length = 3;\n    if (this.$el.data(\"faq_length\")) {\n        faq_length = parseInt(this.$el.data(\"faq_length\"));\n    }\n\n    if ($('.faq-schema .accordion li').length < (faq_length + 1)) {\n        $('#showMoreFAQItems').hide();\n    }\n    $('.faq-schema .accordion li').each(function(i) {\n        if (i > (faq_length - 1)) {\n            $(this).hide();\n        }\n    });\n    $('#showMoreFAQItems').click(function(e){\n        e.preventDefault();\n        $(this).hide();\n        $('.faq-schema .accordion li').each(function() {\n            $(this).show();\n        });\n    });\n\n}, {});\n\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: HideFAQAccordion,\n        factory: new WebCubeObjectFactory(HideFAQAccordion, \"hide-faq-accordion\", [[]])\n    };\n}\n","/*!\n * Lazy Load - jQuery plugin for lazy loading images\n *\n * Copyright (c) 2007-2015 Mika Tuupola\n *\n * Licensed under the MIT license:\n *   http://www.opensource.org/licenses/mit-license.php\n *\n * Project home:\n *   http://www.appelsiini.net/projects/lazyload\n *\n * Version:  1.9.7\n *\n */\n\n(function($, window, document, undefined) {\n    var $window = $(window);\n\n    $.fn.lazyload = function(options) {\n        var elements = this;\n        var $container;\n        var settings = {\n            threshold       : 0,\n            failure_limit   : 0,\n            event           : \"scroll\",\n            effect          : \"show\",\n            container       : window,\n            data_attribute  : \"original\",\n            skip_invisible  : false,\n            appear          : null,\n            load            : null,\n            placeholder     : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC\"\n        };\n\n        function update() {\n            var counter = 0;\n\n            elements.each(function() {\n                var $this = $(this);\n                if (settings.skip_invisible && !$this.is(\":visible\")) {\n                    return;\n                }\n                if ($.abovethetop(this, settings) ||\n                    $.leftofbegin(this, settings)) {\n                        /* Nothing. */\n                } else if (!$.belowthefold(this, settings) &&\n                    !$.rightoffold(this, settings)) {\n                        $this.trigger(\"appear\");\n                        /* if we found an image we'll load, reset the counter */\n                        counter = 0;\n                } else {\n                    if (++counter > settings.failure_limit) {\n                        return false;\n                    }\n                }\n            });\n\n        }\n\n        if(options) {\n            /* Maintain BC for a couple of versions. */\n            if (undefined !== options.failurelimit) {\n                options.failure_limit = options.failurelimit;\n                delete options.failurelimit;\n            }\n            if (undefined !== options.effectspeed) {\n                options.effect_speed = options.effectspeed;\n                delete options.effectspeed;\n            }\n\n            $.extend(settings, options);\n        }\n\n        /* Cache container as jQuery as object. */\n        $container = (settings.container === undefined ||\n                      settings.container === window) ? $window : $(settings.container);\n\n        /* Fire one scroll event per scroll. Not one scroll event per image. */\n        if (0 === settings.event.indexOf(\"scroll\")) {\n            $container.bind(settings.event, function() {\n                return update();\n            });\n        }\n\n        this.each(function() {\n            var self = this;\n            var $self = $(self);\n\n            self.loaded = false;\n\n            /* If no src attribute given use data:uri. */\n            if ($self.attr(\"src\") === undefined || $self.attr(\"src\") === false) {\n                if ($self.is(\"img\")) {\n                    $self.attr(\"src\", settings.placeholder);\n                }\n            }\n\n            /* When appear is triggered load original image. */\n            $self.one(\"appear\", function() {\n                if (!this.loaded) {\n                    if (settings.appear) {\n                        var elements_left = elements.length;\n                        settings.appear.call(self, elements_left, settings);\n                    }\n                    $(\"<img />\")\n                        .bind(\"load\", function() {\n\n                            var original = $self.attr(\"data-\" + settings.data_attribute);\n                            $self.hide();\n                            if ($self.is(\"img\")) {\n                                $self.attr(\"src\", original);\n                            } else {\n                                $self.css(\"background-image\", \"url('\" + original + \"')\");\n                            }\n                            $self[settings.effect](settings.effect_speed);\n\n                            self.loaded = true;\n\n                            /* Remove image from array so it is not looped next time. */\n                            var temp = $.grep(elements, function(element) {\n                                return !element.loaded;\n                            });\n                            elements = $(temp);\n\n                            if (settings.load) {\n                                var elements_left = elements.length;\n                                settings.load.call(self, elements_left, settings);\n                            }\n                        })\n                        .attr(\"src\", $self.attr(\"data-\" + settings.data_attribute));\n                }\n            });\n\n            /* When wanted event is triggered load original image */\n            /* by triggering appear.                              */\n            if (0 !== settings.event.indexOf(\"scroll\")) {\n                $self.bind(settings.event, function() {\n                    if (!self.loaded) {\n                        $self.trigger(\"appear\");\n                    }\n                });\n            }\n        });\n\n        /* Check if something appears when window is resized. */\n        $window.bind(\"resize\", function() {\n            update();\n        });\n\n        /* With IOS5 force loading images when navigating with back button. */\n        /* Non optimal workaround. */\n        if ((/(?:iphone|ipod|ipad).*os 5/gi).test(navigator.appVersion)) {\n            $window.bind(\"pageshow\", function(event) {\n                if (event.originalEvent && event.originalEvent.persisted) {\n                    elements.each(function() {\n                        $(this).trigger(\"appear\");\n                    });\n                }\n            });\n        }\n\n        /* Force initial check if images should appear. */\n        $(document).ready(function() {\n            update();\n        });\n\n        return this;\n    };\n\n    /* Convenience methods in jQuery namespace.           */\n    /* Use as  $.belowthefold(element, {threshold : 100, container : window}) */\n\n    $.belowthefold = function(element, settings) {\n        var fold;\n\n        if (settings.container === undefined || settings.container === window) {\n            fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop();\n        } else {\n            fold = $(settings.container).offset().top + $(settings.container).height();\n        }\n\n        return fold <= $(element).offset().top - settings.threshold;\n    };\n\n    $.rightoffold = function(element, settings) {\n        var fold;\n\n        if (settings.container === undefined || settings.container === window) {\n            fold = $window.width() + $window.scrollLeft();\n        } else {\n            fold = $(settings.container).offset().left + $(settings.container).width();\n        }\n\n        return fold <= $(element).offset().left - settings.threshold;\n    };\n\n    $.abovethetop = function(element, settings) {\n        var fold;\n\n        if (settings.container === undefined || settings.container === window) {\n            fold = $window.scrollTop();\n        } else {\n            fold = $(settings.container).offset().top;\n        }\n\n        return fold >= $(element).offset().top + settings.threshold  + $(element).height();\n    };\n\n    $.leftofbegin = function(element, settings) {\n        var fold;\n\n        if (settings.container === undefined || settings.container === window) {\n            fold = $window.scrollLeft();\n        } else {\n            fold = $(settings.container).offset().left;\n        }\n\n        return fold >= $(element).offset().left + settings.threshold + $(element).width();\n    };\n\n    $.inviewport = function(element, settings) {\n         return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) &&\n                !$.belowthefold(element, settings) && !$.abovethetop(element, settings);\n     };\n\n    /* Custom selectors for your convenience.   */\n    /* Use as $(\"img:below-the-fold\").something() or */\n    /* $(\"img\").filter(\":below-the-fold\").something() which is faster */\n\n    $.extend($.expr[\":\"], {\n        \"below-the-fold\" : function(a) { return $.belowthefold(a, {threshold : 0}); },\n        \"above-the-top\"  : function(a) { return !$.belowthefold(a, {threshold : 0}); },\n        \"right-of-screen\": function(a) { return $.rightoffold(a, {threshold : 0}); },\n        \"left-of-screen\" : function(a) { return !$.rightoffold(a, {threshold : 0}); },\n        \"in-viewport\"    : function(a) { return $.inviewport(a, {threshold : 0}); },\n        /* Maintain BC for couple of versions. */\n        \"above-the-fold\" : function(a) { return !$.belowthefold(a, {threshold : 0}); },\n        \"right-of-fold\"  : function(a) { return $.rightoffold(a, {threshold : 0}); },\n        \"left-of-fold\"   : function(a) { return !$.rightoffold(a, {threshold : 0}); }\n    });\n\n})(jQuery, window, document);\n","var utils = require(\"webcube-base\");\nvar $ = require(\"jquery\");\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\nrequire(\"jquery-lazyload/jquery.lazyload\");\n\nvar Lazyload = WebCubeObject.extend(function (html_element) {\n  WebCubeObject.call(this);\n  $(\".lazy\", html_element).lazyload({\n    threshold: 700,\n  });\n  this.register(\n    \"ajax_content_added\",\n    function (msg) {\n      $(\".lazy\", msg.payload.html_element).lazyload({\n        threshold: 700,\n      });\n    },\n    this\n  );\n\n  // LazyLoad video code from Google\n  var lazyVideos = [].slice.call(document.querySelectorAll(\"video.lazy\"));\n\n  if (\"IntersectionObserver\" in window) {\n    var lazyVideoObserver = new IntersectionObserver(function (\n      entries,\n      observer\n    ) {\n      entries.forEach(function (video) {\n        if (video.isIntersecting) {\n          for (var source in video.target.children) {\n            var videoSource = video.target.children[source];\n            if (\n              typeof videoSource.tagName === \"string\" &&\n              videoSource.tagName === \"SOURCE\"\n            ) {\n              videoSource.src = videoSource.dataset.src;\n            }\n          }\n\n          video.target.load();\n          video.target.classList.remove(\"lazy\");\n          lazyVideoObserver.unobserve(video.target);\n        }\n      });\n    });\n\n    lazyVideos.forEach(function (lazyVideo) {\n      lazyVideoObserver.observe(lazyVideo);\n    });\n  }\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: Lazyload,\n    factory: new WebCubeObjectFactory(Lazyload, \"lazyload\", [[]]),\n  };\n}\n","var utils = require(\"webcube-base\");\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require(\"lodash\");\nvar $ = require(\"jquery\");\n\nvar ListingTracker = WebCubeObject.extend(\n  function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    var self = this;\n    this.tracked = false;\n    try {\n      var pdata = $(\"script.product_data\", this.$el).text();\n      this.product_data = JSON.parse(pdata);\n    } catch (SyntaxError) {\n      this.product_data = null;\n    }\n\n    self.init = function () {\n      if (!IntersectionObserver) {\n        return;\n      } // not available\n      // https://developers.google.com/tag-manager/enhanced-ecommerce#product-impressions\n      // https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver\n      if (!self.product_data) {\n        return;\n      }\n      this.intersectionObserver = new IntersectionObserver(function (entries) {\n        if (entries[0].intersectionRatio <= 0) return;\n        if (self.tracked) {\n          return;\n        }\n        self.tracked = true;\n        sender(\"analytics-impression\", {\n          impression: \"product_listing\",\n          data: [self.product_data],\n        });\n      });\n      // start observing\n      this.intersectionObserver.observe(html_element);\n    };\n  },\n  {\n    initialize: function () {\n      this.init();\n    },\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: ListingTracker,\n    factory: new WebCubeObjectFactory(ListingTracker, \"listing-tracker\", [[]]),\n  };\n}\n","var utils = require(\"webcube-base\");\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar $ = require(\"jquery\");\n$.slick = require(\"slick-carousel\");\n\n/**\n * To work as a 'bindable', the first parameter should be the html_element,\n * and all other arguments should be added as wc-arguments attribute on the\n * attribute.\n */\nfunction Lookbook(html_element, display_slick_params) {\n  WebCubeObject.call(this);\n  var self = this;\n  self.$lookbook = $(html_element);\n  self.$slider = self.$lookbook.find(\".lb-slider\");\n  self.$products = self.$lookbook.find(\".lb-plist-wrap\");\n  self.sender = sender;\n\n  var updateCurrentProducts = function () {\n    self.$products.addClass(\"empty\");\n    self.$products.find(\".products-target\").html(\"\");\n    if ($(\".slick-active .products .lb-plist__item\").length > 0) {\n      self.$products\n        .find(\".products-target\")\n        .html($(\".slick-active .products\").html());\n      self.$products.removeClass(\"empty\");\n    }\n  };\n\n  // Order of slick settings and how they are overwritten\n  //\n  // 1. Default settings (in self.display_settings)\n  // 2. Calling parameters (display_slick_params)\n  // 3. Page variable options (<div wc-object=\"lookbook\" ... data-options=\"my_settings\"></div>\n  //    where my_settings is a global variable (usually hard coded in that page)\n  //\n  //    eg: <script>\n  //          my_settings = { arrows: true, dots: false }\n  //        </script>\n  //\n\n  // default display slick settings\n  self.display_settings = {\n    arrows: true,\n    dots: false,\n    prevArrow: $(\".lb-arrows .slick-prev\"),\n    nextArrow: $(\".lb-arrows .slick-next\"),\n    adaptiveHeight: true,\n  };\n  // get some settings from html or use defaults\n  var display_page_settings = self.$slider.data(\"options\");\n  if (display_page_settings) {\n    display_page_settings = window[display_page_settings]\n      ? window[display_page_settings]\n      : {};\n  }\n  $.extend(self.display_settings, display_slick_params, display_page_settings);\n\n  self.$slider.on(\"init\", function (event, slick) {\n    self.$lookbook.addClass(\"initialized\");\n    // we use this to initially hide arrows and constrain the height of the slider\n  });\n  self.$slider.slick(self.display_settings);\n\n  self.sync_width = function () {\n    var $cur_slider = self.$slider.find(\".slick-active\");\n    self.$slider.width(\"100%\");\n    var cur_w = $cur_slider.find(\"img\").width();\n    var cur_h = $cur_slider.find(\"img\").height();\n    var wrapper_w = $(\".lb-wrap\").width();\n    if (cur_w <= wrapper_w) {\n      $(\".lb-plist-wrap,.lb-arrows\").width(cur_w);\n    } else {\n      $(\".lb-plist-wrap,.lb-arrows\").width(\"100%\");\n    }\n    $(\".lb-arrows .slick-prev, .lb-arrows .slick-next\").css({\n      top: cur_h / 2,\n    });\n  };\n  $(window).on(\"resize\", self.sync_width);\n  self.sync_width();\n\n  if (self.$products) {\n    self.$slider.on(\n      \"afterChange\",\n      function (event, slick, currentSlide, nextSlide) {\n        updateCurrentProducts();\n      }\n    );\n    updateCurrentProducts();\n  }\n\n  // Lookbook slide indicator\n  self.slider_length = self.$slider.find(\".slick-track > div\").length - 2;\n  self.slider_curr = self.$slider.slick(\"slickCurrentSlide\") + 1;\n  self.$lookbook.find(\".lb-indicator .current\").html(self.slider_curr);\n  self.$lookbook.find(\".lb-indicator .total\").html(self.slider_length);\n  // On before slide change\n  self.$slider.on(\n    \"beforeChange\",\n    function (event, slick, currentSlide, nextSlide) {\n      $(\".lb-indicator .current\").html(nextSlide + 1);\n    }\n  );\n}\n\nvar LookbookCls = WebCubeObject.extend(Lookbook, {\n  dispatch: function (msg) {\n    var element = this.$slider;\n    this.gotoSlide(msg.payload.item);\n  },\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: LookbookCls,\n    factory: new WebCubeObjectFactory(LookbookCls, \"lookbook\", [\n      [\".lb-slider\", \".lb-plist-wrap\"],\n    ]),\n  };\n}\n","var utils = require('webcube-base');\nvar _ = require('lodash');\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\n\nvar WebcubeMailtoForm = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n    var self = this;\n    this.$el = $(html_element);\n\n    this.build_mailto = function(){\n        var param = {\n                \"subject\":$(\"[name=subject]\",self.$el).val(),\n                \"body\":$(\"[name=body]\",self.$el).val()\n        }\n        var url = \"mailto:\" + $(\"[name=to]\",self.$el).val() + \n                  \"?subject=\" + encodeURI($(\"[name=subject]\",self.$el).val()) +\n                  \"&body=\" + encodeURI($(\"[name=body]\",self.$el).val());\n        console.log(\"rebuilding mailto: \"+ url);\n        $(\"a.button\",self.$el).attr(\"href\",url);\n    }\n\n    $(\"input\",this.$el).change(function () {\n        self.build_mailto();\n    });\n\n}, {\n    initialize: function(){\n        var self = this;\n        self.build_mailto();\n    }\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: WebcubeMailtoForm,\n        factory: new WebCubeObjectFactory(WebcubeMailtoForm, \"mailto-form\", [[]])\n    }\n}\n\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar _ = require('lodash');\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\n\nvar MessageTemplate = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n\n    var self = this;\n    self.$el = $(html_element);\n    self.message = self.$el.data(\"message\") || null;\n    self.template_html = self.$el.find('script[type=\"html/template\"]').text() || null;\n    self.template = null;\n\n    self.load_template = function(){\n        try{\n            self.template = _.template(self.template_html);\n        }catch(e){\n            console.error(\"Unable to parse message template\",e);\n        }\n    }\n\n    self.register_event = function(){\n        self.register(self.message,self.handle_event);\n    }\n\n    self.handle_event = function(msg){\n        self.update(msg.payload);\n    }\n\n    self.load_initial = function(){\n        var initial = null;\n\n        self.$el.find('script[type=\"application/json\"].initial_data').each(function(){\n            try{\n                initial = JSON.parse($(this).text());\n            }catch(SyntaxError){\n                console.error(\"Unable to parse initial data for message handler\",self);\n            }\n        });\n\n        if(initial != null){\n            self.update(initial);\n        }\n    }   \n \n    self.update = function(context){\n        if(self.template != null){\n            try{\n                var html = self.template(context);\n                self.$el.html( html );\n                self.$el.foundation();\n                // CONSIDER do we run document_binding? \n            }catch(e){\n                console.error(\"Error rendering message template\",self,context,e);\n            }\n        }\n    }\n\n},{\n    initialize: function(){\n        var self = this;\n        if(self.template_html != null && self.message != null){\n            self.load_template();\n            self.register_event();\n            self.load_initial();\n        }else{\n            console.error(\"No template specified for message template\",self);\n        }\n    }\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: MessageTemplate,\n        factory: new WebCubeObjectFactory(MessageTemplate, \"message-template\", [[]])\n    };\n}\n","var $ = require(\"jquery\");\nvar _ = require(\"lodash\");\nvar utils = require(\"webcube-base\");\nvar WebCubeObject = utils.Object;\n\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\nvar receiver = utils.MessageHandler;\nvar send = utils.MessageSender;\n\nfunction csrfSafeMethod(method) {\n  // these HTTP methods do not require CSRF protection\n  return /^(GET|HEAD|OPTIONS|TRACE)$/.test(method);\n}\n\nvar MiniCart = WebCubeObject.extend(\n  function (html_element) {\n    WebCubeObject.call(this);\n    this.subfolder = $(\"body\").attr(\"data-subfolder\");\n    var self = this;\n    self.submitting = {};\n\n    $(document).on(\"open.fndtn.offcanvas\", \"[data-offcanvas]\", function (e) {\n      if (e.namespace !== \"fndtn.offcanvas\") return;\n      self.disable_buttons();\n      self.update();\n    });\n\n    this.disable_buttons = function () {\n      $(\"#mobile-cart input\").attr(\"disabled\", \"disabled\");\n      $(\"#mobile-cart .minicart_payments\").html(\"\");\n    };\n\n    this.register(\n      \"cart_updated\",\n      function (msg) {\n        // This breaks the minicart toggle button... replacing with click event\n        //$('.off-canvas-wrap').foundation('offcanvas', 'show', 'offcanvas-overlap-left');\n        $(\".right-off-canvas-toggle:first\").click();\n      },\n      this\n    );\n\n    this.register(\"update-items_contents\", function (msg) {\n      var items_count = 0;\n      // If no cart is present, just return\n      if (typeof msg.payload.cart === \"undefined\") {\n        return;\n      }\n      var items = msg.payload.cart.items;\n      for (var i in items) {\n        items_count += items[i].quantity;\n      }\n      self.updateCartCount(items_count);\n    });\n\n    this.register(\"update-cart-count\", function (msg) {\n      self.updateCartCount(msg.payload.cart_count);\n    });\n\n    this.updateCartCount();\n  },\n  {\n    update: function () {\n      var cart_template = _.template($(\"#minicart-template\").text());\n      var self = this;\n      var csrf = null;\n\n      var updateMinicart = function (data) {\n        if (csrf == null) {\n          csrf = data.csrf_token;\n        }\n        var items_count = 0;\n        if (typeof data !== \"undefined\") {\n          for (var i in data.items) {\n            items_count += data.items[i].quantity;\n          }\n        }\n        self.updateCartCount(items_count);\n\n        var html_element = cart_template(data);\n        var timer = null;\n        $(\"#mobile-cart\").html(html_element);\n\n        self.$el = $(\"#mobile-cart\");\n\n        var $form = self.$el.find(\"form\");\n\n        $form.on(\"submit\", function (e) {\n          // Check if this.name = addcoupon\n          // IF so, change checkforms value to addcoupon\n\n          var form_action = $form.attr(\"action\");\n          var reload_after_response = $(e.target).data(\"reload\");\n\n          if (self.submitting[form_action] == 1) {\n            console.log(\"already submittting, ignoring request\");\n            return false;\n          }\n          self.submitting[form_action] = 1;\n\n          $.ajax({\n            url: $(this).attr(\"action\"),\n            type: $(this).attr(\"method\"),\n            beforeSend: function (xhr, settings) {\n              if (!csrfSafeMethod(settings.type) && !this.crossDomain) {\n                xhr.setRequestHeader(\"X-CSRFToken\", csrf);\n              }\n            },\n            data: $(this).serialize(),\n            success: function (data) {\n              self.submitting[form_action] = 0;\n              if (reload_after_response) {\n                console.log(\"reloading after response\");\n                self.update();\n                return;\n              }\n              var data_result = {\n                items: [],\n                item_count: 0,\n                totals: [],\n                extra: {},\n              };\n              if (typeof data.cart !== \"undefined\") {\n                data_result = data.cart; // empty cart returns undefined\n                data_result.csrf_token = data.csrf_token;\n              } else if (typeof data.id !== \"undefined\") {\n                data_result = data;\n              }\n              try {\n                data_result.step_errors = data.step_errors;\n              } catch (err) {\n                //skip\n              }\n              data_result.csrf_token = data.csrf_token;\n              updateMinicart(data_result);\n              if (data.step_completed == true) {\n                var url = self.$el.data(\"cart-url\");\n                if (url != undefined) {\n                  window.location = url;\n                } else {\n                  console.error(\n                    \"no data-cart-url on basket to identify cart url\"\n                  );\n                }\n              }\n            },\n            error: function (xhr, err) {\n              self.submitting[form_action] = 0;\n              alert(xhr.responseJSON.error);\n            },\n          });\n          return false;\n        });\n\n        self.$el.find(\".btn-quantity\").on(\"click\", function (e) {\n          var $parent = $(this).parent();\n          var current_quantity = Number($parent.find(\"input\").val());\n\n          if ($(this).hasClass(\"increment\")) {\n            current_quantity += 1;\n            $parent.find(\"input.quantity\").val(current_quantity);\n            $parent.find(\".line-item-quantity .number\").text(current_quantity);\n          } else if ($(this).hasClass(\"decrement\")) {\n            if (current_quantity > 0) {\n              current_quantity -= 1;\n              $parent.find(\"input.quantity\").val(current_quantity);\n              $parent\n                .find(\".line-item-quantity m.number\")\n                .text(current_quantity);\n            } else {\n              return;\n            }\n          }\n          $(this).closest(\"form\").submit();\n        });\n\n        $form.find(\"input.quantity\").on(\"change\", function () {\n          var self = this;\n          window.clearTimeout(timer);\n          timer = window.setTimeout(function () {\n            $(self).closest(\"form\").submit();\n          }, 500);\n        });\n\n        $form.find(\"a.remove\").on(\"click\", function () {\n          $(this).find(\"input\").val(true);\n          //var data = {\"id\":,\"quantity\":};\n          //sender(\"analytics-action\",{\"action\":\"removeFromCart\",\"data\":data});\n          $(this).closest(\"form\").submit();\n        });\n\n        WebCube.document_binding.applyBindingsAndInit(self.$el[0]);\n\n        send(\"minicart_updated\", {\n          data: data,\n        });\n      };\n\n      $.getJSON(this.subfolder + \"/cart/ajax/cart-info/\", {}, updateMinicart);\n    },\n    updateCartCount: function (cart_count) {\n      var self = this;\n      if (typeof cart_count !== \"undefined\") {\n        localStorage[\"cart_count\"] = cart_count;\n        self.updateCartCount();\n      } else if (typeof localStorage[\"cart_count\"] !== \"undefined\") {\n        cart_count = localStorage[\"cart_count\"];\n        $(\".cart-count, #cart-count\").text(cart_count != 0 ? cart_count : \"0\");\n      }\n    },\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  // TODO verify if we should have the cart?\n  module.exports = {\n    cls: MiniCart,\n    factory: new WebCubeObjectFactory(MiniCart, \"minicart\", [[]]),\n  };\n}\n",";(function () {\n\t'use strict';\n\n\t/**\n\t * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.\n\t *\n\t * @codingstandard ftlabs-jsv2\n\t * @copyright The Financial Times Limited [All Rights Reserved]\n\t * @license MIT License (see LICENSE.txt)\n\t */\n\n\t/*jslint browser:true, node:true*/\n\t/*global define, Event, Node*/\n\n\n\t/**\n\t * Instantiate fast-clicking listeners on the specified layer.\n\t *\n\t * @constructor\n\t * @param {Element} layer The layer to listen on\n\t * @param {Object} [options={}] The options to override the defaults\n\t */\n\tfunction FastClick(layer, options) {\n\t\tvar oldOnClick;\n\n\t\toptions = options || {};\n\n\t\t/**\n\t\t * Whether a click is currently being tracked.\n\t\t *\n\t\t * @type boolean\n\t\t */\n\t\tthis.trackingClick = false;\n\n\n\t\t/**\n\t\t * Timestamp for when click tracking started.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.trackingClickStart = 0;\n\n\n\t\t/**\n\t\t * The element being tracked for a click.\n\t\t *\n\t\t * @type EventTarget\n\t\t */\n\t\tthis.targetElement = null;\n\n\n\t\t/**\n\t\t * X-coordinate of touch start event.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchStartX = 0;\n\n\n\t\t/**\n\t\t * Y-coordinate of touch start event.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchStartY = 0;\n\n\n\t\t/**\n\t\t * ID of the last touch, retrieved from Touch.identifier.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.lastTouchIdentifier = 0;\n\n\n\t\t/**\n\t\t * Touchmove boundary, beyond which a click will be cancelled.\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.touchBoundary = options.touchBoundary || 10;\n\n\n\t\t/**\n\t\t * The FastClick layer.\n\t\t *\n\t\t * @type Element\n\t\t */\n\t\tthis.layer = layer;\n\n\t\t/**\n\t\t * The minimum time between tap(touchstart and touchend) events\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.tapDelay = options.tapDelay || 200;\n\n\t\t/**\n\t\t * The maximum time for a tap\n\t\t *\n\t\t * @type number\n\t\t */\n\t\tthis.tapTimeout = options.tapTimeout || 700;\n\n\t\tif (FastClick.notNeeded(layer)) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Some old versions of Android don't have Function.prototype.bind\n\t\tfunction bind(method, context) {\n\t\t\treturn function() { return method.apply(context, arguments); };\n\t\t}\n\n\n\t\tvar methods = ['onMouse', 'onClick', 'onTouchStart', 'onTouchMove', 'onTouchEnd', 'onTouchCancel'];\n\t\tvar context = this;\n\t\tfor (var i = 0, l = methods.length; i < l; i++) {\n\t\t\tcontext[methods[i]] = bind(context[methods[i]], context);\n\t\t}\n\n\t\t// Set up event handlers as required\n\t\tif (deviceIsAndroid) {\n\t\t\tlayer.addEventListener('mouseover', this.onMouse, true);\n\t\t\tlayer.addEventListener('mousedown', this.onMouse, true);\n\t\t\tlayer.addEventListener('mouseup', this.onMouse, true);\n\t\t}\n\n\t\tlayer.addEventListener('click', this.onClick, true);\n\t\tlayer.addEventListener('touchstart', this.onTouchStart, false);\n\t\tlayer.addEventListener('touchmove', this.onTouchMove, false);\n\t\tlayer.addEventListener('touchend', this.onTouchEnd, false);\n\t\tlayer.addEventListener('touchcancel', this.onTouchCancel, false);\n\n\t\t// Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t// which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick\n\t\t// layer when they are cancelled.\n\t\tif (!Event.prototype.stopImmediatePropagation) {\n\t\t\tlayer.removeEventListener = function(type, callback, capture) {\n\t\t\t\tvar rmv = Node.prototype.removeEventListener;\n\t\t\t\tif (type === 'click') {\n\t\t\t\t\trmv.call(layer, type, callback.hijacked || callback, capture);\n\t\t\t\t} else {\n\t\t\t\t\trmv.call(layer, type, callback, capture);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tlayer.addEventListener = function(type, callback, capture) {\n\t\t\t\tvar adv = Node.prototype.addEventListener;\n\t\t\t\tif (type === 'click') {\n\t\t\t\t\tadv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) {\n\t\t\t\t\t\tif (!event.propagationStopped) {\n\t\t\t\t\t\t\tcallback(event);\n\t\t\t\t\t\t}\n\t\t\t\t\t}), capture);\n\t\t\t\t} else {\n\t\t\t\t\tadv.call(layer, type, callback, capture);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t// If a handler is already declared in the element's onclick attribute, it will be fired before\n\t\t// FastClick's onClick handler. Fix this by pulling out the user-defined handler function and\n\t\t// adding it as listener.\n\t\tif (typeof layer.onclick === 'function') {\n\n\t\t\t// Android browser on at least 3.2 requires a new reference to the function in layer.onclick\n\t\t\t// - the old one won't work if passed to addEventListener directly.\n\t\t\toldOnClick = layer.onclick;\n\t\t\tlayer.addEventListener('click', function(event) {\n\t\t\t\toldOnClick(event);\n\t\t\t}, false);\n\t\t\tlayer.onclick = null;\n\t\t}\n\t}\n\n\t/**\n\t* Windows Phone 8.1 fakes user agent string to look like Android and iPhone.\n\t*\n\t* @type boolean\n\t*/\n\tvar deviceIsWindowsPhone = navigator.userAgent.indexOf(\"Windows Phone\") >= 0;\n\n\t/**\n\t * Android requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0 && !deviceIsWindowsPhone;\n\n\n\t/**\n\t * iOS requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent) && !deviceIsWindowsPhone;\n\n\n\t/**\n\t * iOS 4 requires an exception for select elements.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOS4 = deviceIsIOS && (/OS 4_\\d(_\\d)?/).test(navigator.userAgent);\n\n\n\t/**\n\t * iOS 6.0-7.* requires the target element to be manually derived\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsIOSWithBadTarget = deviceIsIOS && (/OS [6-7]_\\d/).test(navigator.userAgent);\n\n\t/**\n\t * BlackBerry requires exceptions.\n\t *\n\t * @type boolean\n\t */\n\tvar deviceIsBlackBerry10 = navigator.userAgent.indexOf('BB10') > 0;\n\n\t/**\n\t * Determine whether a given element requires a native click.\n\t *\n\t * @param {EventTarget|Element} target Target DOM element\n\t * @returns {boolean} Returns true if the element needs a native click\n\t */\n\tFastClick.prototype.needsClick = function(target) {\n\t\tswitch (target.nodeName.toLowerCase()) {\n\n\t\t// Don't send a synthetic click to disabled inputs (issue #62)\n\t\tcase 'button':\n\t\tcase 'select':\n\t\tcase 'textarea':\n\t\t\tif (target.disabled) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'input':\n\n\t\t\t// File inputs need real clicks on iOS 6 due to a browser bug (issue #68)\n\t\t\tif ((deviceIsIOS && target.type === 'file') || target.disabled) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'label':\n\t\tcase 'iframe': // iOS8 homescreen apps can prevent events bubbling into frames\n\t\tcase 'video':\n\t\t\treturn true;\n\t\t}\n\n\t\treturn (/\\bneedsclick\\b/).test(target.className);\n\t};\n\n\n\t/**\n\t * Determine whether a given element requires a call to focus to simulate click into element.\n\t *\n\t * @param {EventTarget|Element} target Target DOM element\n\t * @returns {boolean} Returns true if the element requires a call to focus to simulate native click.\n\t */\n\tFastClick.prototype.needsFocus = function(target) {\n\t\tswitch (target.nodeName.toLowerCase()) {\n\t\tcase 'textarea':\n\t\t\treturn true;\n\t\tcase 'select':\n\t\t\treturn !deviceIsAndroid;\n\t\tcase 'input':\n\t\t\tswitch (target.type) {\n\t\t\tcase 'button':\n\t\t\tcase 'checkbox':\n\t\t\tcase 'file':\n\t\t\tcase 'image':\n\t\t\tcase 'radio':\n\t\t\tcase 'submit':\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// No point in attempting to focus disabled inputs\n\t\t\treturn !target.disabled && !target.readOnly;\n\t\tdefault:\n\t\t\treturn (/\\bneedsfocus\\b/).test(target.className);\n\t\t}\n\t};\n\n\n\t/**\n\t * Send a click event to the specified element.\n\t *\n\t * @param {EventTarget|Element} targetElement\n\t * @param {Event} event\n\t */\n\tFastClick.prototype.sendClick = function(targetElement, event) {\n\t\tvar clickEvent, touch;\n\n\t\t// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)\n\t\tif (document.activeElement && document.activeElement !== targetElement) {\n\t\t\tdocument.activeElement.blur();\n\t\t}\n\n\t\ttouch = event.changedTouches[0];\n\n\t\t// Synthesise a click event, with an extra attribute so it can be tracked\n\t\tclickEvent = document.createEvent('MouseEvents');\n\t\tclickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);\n\t\tclickEvent.forwardedTouchEvent = true;\n\t\ttargetElement.dispatchEvent(clickEvent);\n\t};\n\n\tFastClick.prototype.determineEventType = function(targetElement) {\n\n\t\t//Issue #159: Android Chrome Select Box does not open with a synthetic click event\n\t\tif (deviceIsAndroid && targetElement.tagName.toLowerCase() === 'select') {\n\t\t\treturn 'mousedown';\n\t\t}\n\n\t\treturn 'click';\n\t};\n\n\n\t/**\n\t * @param {EventTarget|Element} targetElement\n\t */\n\tFastClick.prototype.focus = function(targetElement) {\n\t\tvar length;\n\n\t\t// Issue #160: on iOS 7, some input elements (e.g. date datetime month) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724.\n\t\tif (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') {\n\t\t\tlength = targetElement.value.length;\n\t\t\ttargetElement.setSelectionRange(length, length);\n\t\t} else {\n\t\t\ttargetElement.focus();\n\t\t}\n\t};\n\n\n\t/**\n\t * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it.\n\t *\n\t * @param {EventTarget|Element} targetElement\n\t */\n\tFastClick.prototype.updateScrollParent = function(targetElement) {\n\t\tvar scrollParent, parentElement;\n\n\t\tscrollParent = targetElement.fastClickScrollParent;\n\n\t\t// Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the\n\t\t// target element was moved to another parent.\n\t\tif (!scrollParent || !scrollParent.contains(targetElement)) {\n\t\t\tparentElement = targetElement;\n\t\t\tdo {\n\t\t\t\tif (parentElement.scrollHeight > parentElement.offsetHeight) {\n\t\t\t\t\tscrollParent = parentElement;\n\t\t\t\t\ttargetElement.fastClickScrollParent = parentElement;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tparentElement = parentElement.parentElement;\n\t\t\t} while (parentElement);\n\t\t}\n\n\t\t// Always update the scroll top tracker if possible.\n\t\tif (scrollParent) {\n\t\t\tscrollParent.fastClickLastScrollTop = scrollParent.scrollTop;\n\t\t}\n\t};\n\n\n\t/**\n\t * @param {EventTarget} targetElement\n\t * @returns {Element|EventTarget}\n\t */\n\tFastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) {\n\n\t\t// On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node.\n\t\tif (eventTarget.nodeType === Node.TEXT_NODE) {\n\t\t\treturn eventTarget.parentNode;\n\t\t}\n\n\t\treturn eventTarget;\n\t};\n\n\n\t/**\n\t * On touch start, record the position and scroll offset.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchStart = function(event) {\n\t\tvar targetElement, touch, selection;\n\n\t\t// Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).\n\t\tif (event.targetTouches.length > 1) {\n\t\t\treturn true;\n\t\t}\n\n\t\ttargetElement = this.getTargetElementFromEventTarget(event.target);\n\t\ttouch = event.targetTouches[0];\n\n\t\tif (deviceIsIOS) {\n\n\t\t\t// Only trusted events will deselect text on iOS (issue #49)\n\t\t\tselection = window.getSelection();\n\t\t\tif (selection.rangeCount && !selection.isCollapsed) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (!deviceIsIOS4) {\n\n\t\t\t\t// Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23):\n\t\t\t\t// when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched\n\t\t\t\t// with the same identifier as the touch event that previously triggered the click that triggered the alert.\n\t\t\t\t// Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an\n\t\t\t\t// immediately preceeding touch event (issue #52), so this fix is unavailable on that platform.\n\t\t\t\t// Issue 120: touch.identifier is 0 when Chrome dev tools 'Emulate touch events' is set with an iOS device UA string,\n\t\t\t\t// which causes all touch events to be ignored. As this block only applies to iOS, and iOS identifiers are always long,\n\t\t\t\t// random integers, it's safe to to continue if the identifier is 0 here.\n\t\t\t\tif (touch.identifier && touch.identifier === this.lastTouchIdentifier) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthis.lastTouchIdentifier = touch.identifier;\n\n\t\t\t\t// If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and:\n\t\t\t\t// 1) the user does a fling scroll on the scrollable layer\n\t\t\t\t// 2) the user stops the fling scroll with another tap\n\t\t\t\t// then the event.target of the last 'touchend' event will be the element that was under the user's finger\n\t\t\t\t// when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check\n\t\t\t\t// is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42).\n\t\t\t\tthis.updateScrollParent(targetElement);\n\t\t\t}\n\t\t}\n\n\t\tthis.trackingClick = true;\n\t\tthis.trackingClickStart = event.timeStamp;\n\t\tthis.targetElement = targetElement;\n\n\t\tthis.touchStartX = touch.pageX;\n\t\tthis.touchStartY = touch.pageY;\n\n\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Based on a touchmove event object, check whether the touch has moved past a boundary since it started.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.touchHasMoved = function(event) {\n\t\tvar touch = event.changedTouches[0], boundary = this.touchBoundary;\n\n\t\tif (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * Update the last position.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchMove = function(event) {\n\t\tif (!this.trackingClick) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// If the touch has moved, cancel the click tracking\n\t\tif (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) {\n\t\t\tthis.trackingClick = false;\n\t\t\tthis.targetElement = null;\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Attempt to find the labelled control for the given label element.\n\t *\n\t * @param {EventTarget|HTMLLabelElement} labelElement\n\t * @returns {Element|null}\n\t */\n\tFastClick.prototype.findControl = function(labelElement) {\n\n\t\t// Fast path for newer browsers supporting the HTML5 control attribute\n\t\tif (labelElement.control !== undefined) {\n\t\t\treturn labelElement.control;\n\t\t}\n\n\t\t// All browsers under test that support touch events also support the HTML5 htmlFor attribute\n\t\tif (labelElement.htmlFor) {\n\t\t\treturn document.getElementById(labelElement.htmlFor);\n\t\t}\n\n\t\t// If no for attribute exists, attempt to retrieve the first labellable descendant element\n\t\t// the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label\n\t\treturn labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea');\n\t};\n\n\n\t/**\n\t * On touch end, determine whether to send a click event at once.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onTouchEnd = function(event) {\n\t\tvar forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement;\n\n\t\tif (!this.trackingClick) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Prevent phantom clicks on fast double-tap (issue #36)\n\t\tif ((event.timeStamp - this.lastClickTime) < this.tapDelay) {\n\t\t\tthis.cancelNextClick = true;\n\t\t\treturn true;\n\t\t}\n\n\t\tif ((event.timeStamp - this.trackingClickStart) > this.tapTimeout) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Reset to prevent wrong click cancel on input (issue #156).\n\t\tthis.cancelNextClick = false;\n\n\t\tthis.lastClickTime = event.timeStamp;\n\n\t\ttrackingClickStart = this.trackingClickStart;\n\t\tthis.trackingClick = false;\n\t\tthis.trackingClickStart = 0;\n\n\t\t// On some iOS devices, the targetElement supplied with the event is invalid if the layer\n\t\t// is performing a transition or scroll, and has to be re-detected manually. Note that\n\t\t// for this to function correctly, it must be called *after* the event target is checked!\n\t\t// See issue #57; also filed as rdar://13048589 .\n\t\tif (deviceIsIOSWithBadTarget) {\n\t\t\ttouch = event.changedTouches[0];\n\n\t\t\t// In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null\n\t\t\ttargetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement;\n\t\t\ttargetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent;\n\t\t}\n\n\t\ttargetTagName = targetElement.tagName.toLowerCase();\n\t\tif (targetTagName === 'label') {\n\t\t\tforElement = this.findControl(targetElement);\n\t\t\tif (forElement) {\n\t\t\t\tthis.focus(targetElement);\n\t\t\t\tif (deviceIsAndroid) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\ttargetElement = forElement;\n\t\t\t}\n\t\t} else if (this.needsFocus(targetElement)) {\n\n\t\t\t// Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through.\n\t\t\t// Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37).\n\t\t\tif ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.focus(targetElement);\n\t\t\tthis.sendClick(targetElement, event);\n\n\t\t\t// Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.\n\t\t\t// Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others)\n\t\t\tif (!deviceIsIOS || targetTagName !== 'select') {\n\t\t\t\tthis.targetElement = null;\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\n\t\tif (deviceIsIOS && !deviceIsIOS4) {\n\n\t\t\t// Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled\n\t\t\t// and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).\n\t\t\tscrollParent = targetElement.fastClickScrollParent;\n\t\t\tif (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Prevent the actual click from going though - unless the target node is marked as requiring\n\t\t// real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.\n\t\tif (!this.needsClick(targetElement)) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.sendClick(targetElement, event);\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * On touch cancel, stop tracking the click.\n\t *\n\t * @returns {void}\n\t */\n\tFastClick.prototype.onTouchCancel = function() {\n\t\tthis.trackingClick = false;\n\t\tthis.targetElement = null;\n\t};\n\n\n\t/**\n\t * Determine mouse events which should be permitted.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onMouse = function(event) {\n\n\t\t// If a target element was never set (because a touch event was never fired) allow the event\n\t\tif (!this.targetElement) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (event.forwardedTouchEvent) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Programmatically generated events targeting a specific element should be permitted\n\t\tif (!event.cancelable) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Derive and check the target element to see whether the mouse event needs to be permitted;\n\t\t// unless explicitly enabled, prevent non-touch click events from triggering actions,\n\t\t// to prevent ghost/doubleclicks.\n\t\tif (!this.needsClick(this.targetElement) || this.cancelNextClick) {\n\n\t\t\t// Prevent any user-added listeners declared on FastClick element from being fired.\n\t\t\tif (event.stopImmediatePropagation) {\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t} else {\n\n\t\t\t\t// Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t\t\tevent.propagationStopped = true;\n\t\t\t}\n\n\t\t\t// Cancel the event\n\t\t\tevent.stopPropagation();\n\t\t\tevent.preventDefault();\n\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the mouse event is permitted, return true for the action to go through.\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * On actual clicks, determine whether this is a touch-generated click, a click action occurring\n\t * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or\n\t * an actual click which should be permitted.\n\t *\n\t * @param {Event} event\n\t * @returns {boolean}\n\t */\n\tFastClick.prototype.onClick = function(event) {\n\t\tvar permitted;\n\n\t\t// It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early.\n\t\tif (this.trackingClick) {\n\t\t\tthis.targetElement = null;\n\t\t\tthis.trackingClick = false;\n\t\t\treturn true;\n\t\t}\n\n\t\t// Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target.\n\t\tif (event.target.type === 'submit' && event.detail === 0) {\n\t\t\treturn true;\n\t\t}\n\n\t\tpermitted = this.onMouse(event);\n\n\t\t// Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through.\n\t\tif (!permitted) {\n\t\t\tthis.targetElement = null;\n\t\t}\n\n\t\t// If clicks are permitted, return true for the action to go through.\n\t\treturn permitted;\n\t};\n\n\n\t/**\n\t * Remove all FastClick's event listeners.\n\t *\n\t * @returns {void}\n\t */\n\tFastClick.prototype.destroy = function() {\n\t\tvar layer = this.layer;\n\n\t\tif (deviceIsAndroid) {\n\t\t\tlayer.removeEventListener('mouseover', this.onMouse, true);\n\t\t\tlayer.removeEventListener('mousedown', this.onMouse, true);\n\t\t\tlayer.removeEventListener('mouseup', this.onMouse, true);\n\t\t}\n\n\t\tlayer.removeEventListener('click', this.onClick, true);\n\t\tlayer.removeEventListener('touchstart', this.onTouchStart, false);\n\t\tlayer.removeEventListener('touchmove', this.onTouchMove, false);\n\t\tlayer.removeEventListener('touchend', this.onTouchEnd, false);\n\t\tlayer.removeEventListener('touchcancel', this.onTouchCancel, false);\n\t};\n\n\n\t/**\n\t * Check whether FastClick is needed.\n\t *\n\t * @param {Element} layer The layer to listen on\n\t */\n\tFastClick.notNeeded = function(layer) {\n\t\tvar metaViewport;\n\t\tvar chromeVersion;\n\t\tvar blackberryVersion;\n\t\tvar firefoxVersion;\n\n\t\t// Devices that don't support touch don't need FastClick\n\t\tif (typeof window.ontouchstart === 'undefined') {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Chrome version - zero for other browsers\n\t\tchromeVersion = +(/Chrome\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\t\tif (chromeVersion) {\n\n\t\t\tif (deviceIsAndroid) {\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\n\t\t\t\tif (metaViewport) {\n\t\t\t\t\t// Chrome on Android with user-scalable=\"no\" doesn't need FastClick (issue #89)\n\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// Chrome 32 and above with width=device-width or less don't need FastClick\n\t\t\t\t\tif (chromeVersion > 31 && document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Chrome desktop doesn't need FastClick (issue #15)\n\t\t\t} else {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\tif (deviceIsBlackBerry10) {\n\t\t\tblackberryVersion = navigator.userAgent.match(/Version\\/([0-9]*)\\.([0-9]*)/);\n\n\t\t\t// BlackBerry 10.3+ does not require Fastclick library.\n\t\t\t// https://github.com/ftlabs/fastclick/issues/251\n\t\t\tif (blackberryVersion[1] >= 10 && blackberryVersion[2] >= 3) {\n\t\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\n\t\t\t\tif (metaViewport) {\n\t\t\t\t\t// user-scalable=no eliminates click delay.\n\t\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\t// width=device-width (or less than device-width) eliminates click delay.\n\t\t\t\t\tif (document.documentElement.scrollWidth <= window.outerWidth) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// IE10 with -ms-touch-action: none or manipulation, which disables double-tap-to-zoom (issue #97)\n\t\tif (layer.style.msTouchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Firefox version - zero for other browsers\n\t\tfirefoxVersion = +(/Firefox\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\t\tif (firefoxVersion >= 27) {\n\t\t\t// Firefox 27+ does not have tap delay if the content is not zoomable - https://bugzilla.mozilla.org/show_bug.cgi?id=922896\n\n\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\t\t\tif (metaViewport && (metaViewport.content.indexOf('user-scalable=no') !== -1 || document.documentElement.scrollWidth <= window.outerWidth)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// IE11: prefixed -ms-touch-action is no longer supported and it's recomended to use non-prefixed version\n\t\t// http://msdn.microsoft.com/en-us/library/windows/apps/Hh767313.aspx\n\t\tif (layer.style.touchAction === 'none' || layer.style.touchAction === 'manipulation') {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\n\t/**\n\t * Factory method for creating a FastClick object\n\t *\n\t * @param {Element} layer The layer to listen on\n\t * @param {Object} [options={}] The options to override the defaults\n\t */\n\tFastClick.attach = function(layer, options) {\n\t\treturn new FastClick(layer, options);\n\t};\n\n\n\tif (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine(function() {\n\t\t\treturn FastClick;\n\t\t});\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = FastClick.attach;\n\t\tmodule.exports.FastClick = FastClick;\n\t} else {\n\t\twindow.FastClick = FastClick;\n\t}\n}());\n","/*\n * Foundation Responsive Library\n * http://foundation.zurb.com\n * Copyright 2014, ZURB\n * Free to use under the MIT license.\n * http://www.opensource.org/licenses/mit-license.php\n*/\n\n(function ($, window, document, undefined) {\n  'use strict';\n\n  var header_helpers = function (class_array) {\n    var i = class_array.length;\n    var head = $('head');\n\n    while (i--) {\n      if(head.has('.' + class_array[i]).length === 0) {\n        head.append('<meta class=\"' + class_array[i] + '\" />');\n      }\n    }\n  };\n\n  header_helpers([\n    'foundation-mq-small',\n    'foundation-mq-medium',\n    'foundation-mq-large',\n    'foundation-mq-xlarge',\n    'foundation-mq-xxlarge',\n    'foundation-data-attribute-namespace']);\n\n  // Enable FastClick if present\n\n  $(function() {\n    if (typeof FastClick !== 'undefined') {\n      // Don't attach to body if undefined\n      if (typeof document.body !== 'undefined') {\n        FastClick.attach(document.body);\n      }\n    }\n  });\n\n  // private Fast Selector wrapper,\n  // returns jQuery object. Only use where\n  // getElementById is not available.\n  var S = function (selector, context) {\n    if (typeof selector === 'string') {\n      if (context) {\n        var cont;\n        if (context.jquery) {\n          cont = context[0];\n          if (!cont) return context;\n        } else {\n          cont = context;\n        }\n        return $(cont.querySelectorAll(selector));\n      }\n\n      return $(document.querySelectorAll(selector));\n    }\n\n    return $(selector, context);\n  };\n\n  // Namespace functions.\n\n  var attr_name = function (init) {\n    var arr = [];\n    if (!init) arr.push('data');\n    if (this.namespace.length > 0) arr.push(this.namespace);\n    arr.push(this.name);\n\n    return arr.join('-');\n  };\n\n  var add_namespace = function (str) {\n    var parts = str.split('-'),\n        i = parts.length,\n        arr = [];\n\n    while (i--) {\n      if (i !== 0) {\n        arr.push(parts[i]);\n      } else {\n        if (this.namespace.length > 0) {\n          arr.push(this.namespace, parts[i]);\n        } else {\n          arr.push(parts[i]);\n        }\n      }\n    }\n\n    return arr.reverse().join('-');\n  };\n\n  // Event binding and data-options updating.\n\n  var bindings = function (method, options) {\n    var self = this,\n        should_bind_events = !S(this).data(this.attr_name(true));\n\n\n    if (S(this.scope).is('[' + this.attr_name() +']')) {\n      S(this.scope).data(this.attr_name(true) + '-init', $.extend({}, this.settings, (options || method), this.data_options(S(this.scope))));\n\n      if (should_bind_events) {\n        this.events(this.scope);\n      }\n\n    } else {\n      S('[' + this.attr_name() +']', this.scope).each(function () {\n        var should_bind_events = !S(this).data(self.attr_name(true) + '-init');\n        S(this).data(self.attr_name(true) + '-init', $.extend({}, self.settings, (options || method), self.data_options(S(this))));\n\n        if (should_bind_events) {\n          self.events(this);\n        }\n      });\n    }\n    // # Patch to fix #5043 to move this *after* the if/else clause in order for Backbone and similar frameworks to have improved control over event binding and data-options updating.\n    if (typeof method === 'string') {\n      return this[method].call(this, options);\n    }\n\n  };\n\n  var single_image_loaded = function (image, callback) {\n    function loaded () {\n      callback(image[0]);\n    }\n\n    function bindLoad () {\n      this.one('load', loaded);\n\n      if (/MSIE (\\d+\\.\\d+);/.test(navigator.userAgent)) {\n        var src = this.attr( 'src' ),\n            param = src.match( /\\?/ ) ? '&' : '?';\n\n        param += 'random=' + (new Date()).getTime();\n        this.attr('src', src + param);\n      }\n    }\n\n    if (!image.attr('src')) {\n      loaded();\n      return;\n    }\n\n    if (image[0].complete || image[0].readyState === 4) {\n      loaded();\n    } else {\n      bindLoad.call(image);\n    }\n  };\n\n  /*\n    https://github.com/paulirish/matchMedia.js\n  */\n\n  window.matchMedia = window.matchMedia || (function( doc ) {\n\n    'use strict';\n\n    var bool,\n        docElem = doc.documentElement,\n        refNode = docElem.firstElementChild || docElem.firstChild,\n        // fakeBody required for <FF4 when executed in <head>\n        fakeBody = doc.createElement( 'body' ),\n        div = doc.createElement( 'div' );\n\n    div.id = 'mq-test-1';\n    div.style.cssText = 'position:absolute;top:-100em';\n    fakeBody.style.background = 'none';\n    fakeBody.appendChild(div);\n\n    return function (q) {\n\n      div.innerHTML = '&shy;<style media=\"' + q + '\"> #mq-test-1 { width: 42px; }</style>';\n\n      docElem.insertBefore( fakeBody, refNode );\n      bool = div.offsetWidth === 42;\n      docElem.removeChild( fakeBody );\n\n      return {\n        matches: bool,\n        media: q\n      };\n\n    };\n\n  }( document ));\n\n  /*\n   * jquery.requestAnimationFrame\n   * https://github.com/gnarf37/jquery-requestAnimationFrame\n   * Requires jQuery 1.8+\n   *\n   * Copyright (c) 2012 Corey Frang\n   * Licensed under the MIT license.\n   */\n\n  (function($) {\n\n  // requestAnimationFrame polyfill adapted from Erik Möller\n  // fixes from Paul Irish and Tino Zijdel\n  // http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n  // http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n\n  var animating,\n      lastTime = 0,\n      vendors = ['webkit', 'moz'],\n      requestAnimationFrame = window.requestAnimationFrame,\n      cancelAnimationFrame = window.cancelAnimationFrame,\n      jqueryFxAvailable = 'undefined' !== typeof jQuery.fx;\n\n  for (; lastTime < vendors.length && !requestAnimationFrame; lastTime++) {\n    requestAnimationFrame = window[ vendors[lastTime] + 'RequestAnimationFrame' ];\n    cancelAnimationFrame = cancelAnimationFrame ||\n      window[ vendors[lastTime] + 'CancelAnimationFrame' ] ||\n      window[ vendors[lastTime] + 'CancelRequestAnimationFrame' ];\n  }\n\n  function raf() {\n    if (animating) {\n      requestAnimationFrame(raf);\n\n      if (jqueryFxAvailable) {\n        jQuery.fx.tick();\n      }\n    }\n  }\n\n  if (requestAnimationFrame) {\n    // use rAF\n    window.requestAnimationFrame = requestAnimationFrame;\n    window.cancelAnimationFrame = cancelAnimationFrame;\n\n    if (jqueryFxAvailable) {\n      jQuery.fx.timer = function (timer) {\n        if (timer() && jQuery.timers.push(timer) && !animating) {\n          animating = true;\n          raf();\n        }\n      };\n\n      jQuery.fx.stop = function () {\n        animating = false;\n      };\n    }\n  } else {\n    // polyfill\n    window.requestAnimationFrame = function (callback) {\n      var currTime = new Date().getTime(),\n        timeToCall = Math.max(0, 16 - (currTime - lastTime)),\n        id = window.setTimeout(function () {\n          callback(currTime + timeToCall);\n        }, timeToCall);\n      lastTime = currTime + timeToCall;\n      return id;\n    };\n\n    window.cancelAnimationFrame = function (id) {\n      clearTimeout(id);\n    };\n\n  }\n\n  }( jQuery ));\n\n\n  function removeQuotes (string) {\n    if (typeof string === 'string' || string instanceof String) {\n      string = string.replace(/^['\\\\/\"]+|(;\\s?})+|['\\\\/\"]+$/g, '');\n    }\n\n    return string;\n  }\n\n  window.Foundation = {\n    name : 'Foundation',\n\n    version : '{{VERSION}}',\n\n    media_queries : {\n      small : S('.foundation-mq-small').css('font-family').replace(/^[\\/\\\\'\"]+|(;\\s?})+|[\\/\\\\'\"]+$/g, ''),\n      medium : S('.foundation-mq-medium').css('font-family').replace(/^[\\/\\\\'\"]+|(;\\s?})+|[\\/\\\\'\"]+$/g, ''),\n      large : S('.foundation-mq-large').css('font-family').replace(/^[\\/\\\\'\"]+|(;\\s?})+|[\\/\\\\'\"]+$/g, ''),\n      xlarge: S('.foundation-mq-xlarge').css('font-family').replace(/^[\\/\\\\'\"]+|(;\\s?})+|[\\/\\\\'\"]+$/g, ''),\n      xxlarge: S('.foundation-mq-xxlarge').css('font-family').replace(/^[\\/\\\\'\"]+|(;\\s?})+|[\\/\\\\'\"]+$/g, '')\n    },\n\n    stylesheet : $('<style></style>').appendTo('head')[0].sheet,\n\n    global: {\n      namespace: undefined\n    },\n\n    init : function (scope, libraries, method, options, response) {\n      var args = [scope, method, options, response],\n          responses = [];\n\n      // check RTL\n      this.rtl = /rtl/i.test(S('html').attr('dir'));\n\n      // set foundation global scope\n      this.scope = scope || this.scope;\n\n      this.set_namespace();\n\n      if (libraries && typeof libraries === 'string' && !/reflow/i.test(libraries)) {\n        if (this.libs.hasOwnProperty(libraries)) {\n          responses.push(this.init_lib(libraries, args));\n        }\n      } else {\n        for (var lib in this.libs) {\n          responses.push(this.init_lib(lib, libraries));\n        }\n      }\n\n      S(window).load(function(){\n        S(window)\n          .trigger('resize.fndtn.clearing')\n          .trigger('resize.fndtn.dropdown')\n          .trigger('resize.fndtn.equalizer')\n          .trigger('resize.fndtn.interchange')\n          .trigger('resize.fndtn.joyride')\n          .trigger('resize.fndtn.magellan')\n          .trigger('resize.fndtn.topbar')\n          .trigger('resize.fndtn.slider');\n      });\n\n      return scope;\n    },\n\n    init_lib : function (lib, args) {\n      if (this.libs.hasOwnProperty(lib)) {\n        this.patch(this.libs[lib]);\n\n        if (args && args.hasOwnProperty(lib)) {\n            if (typeof this.libs[lib].settings !== 'undefined') {\n                $.extend(true, this.libs[lib].settings, args[lib]);\n            }\n            else if (typeof this.libs[lib].defaults !== 'undefined') {\n                $.extend(true, this.libs[lib].defaults, args[lib]);\n            }\n          return this.libs[lib].init.apply(this.libs[lib], [this.scope, args[lib]]);\n        }\n\n        args = args instanceof Array ? args : new Array(args);    // PATCH: added this line\n        return this.libs[lib].init.apply(this.libs[lib], args);\n      }\n\n      return function () {};\n    },\n\n    patch : function (lib) {\n      lib.scope = this.scope;\n      lib.namespace = this.global.namespace;\n      lib.rtl = this.rtl;\n      lib['data_options'] = this.utils.data_options;\n      lib['attr_name'] = attr_name;\n      lib['add_namespace'] = add_namespace;\n      lib['bindings'] = bindings;\n      lib['S'] = this.utils.S;\n    },\n\n    inherit : function (scope, methods) {\n      var methods_arr = methods.split(' '),\n          i = methods_arr.length;\n\n      while (i--) {\n        if (this.utils.hasOwnProperty(methods_arr[i])) {\n          scope[methods_arr[i]] = this.utils[methods_arr[i]];\n        }\n      }\n    },\n\n    set_namespace: function () {\n\n      // Description:\n      //    Don't bother reading the namespace out of the meta tag\n      //    if the namespace has been set globally in javascript\n      //\n      // Example:\n      //    Foundation.global.namespace = 'my-namespace';\n      // or make it an empty string:\n      //    Foundation.global.namespace = '';\n      //\n      //\n\n      // If the namespace has not been set (is undefined), try to read it out of the meta element.\n      // Otherwise use the globally defined namespace, even if it's empty ('')\n      var namespace = ( this.global.namespace === undefined ) ? $('.foundation-data-attribute-namespace').css('font-family') : this.global.namespace;\n\n      // Finally, if the namsepace is either undefined or false, set it to an empty string.\n      // Otherwise use the namespace value.\n      this.global.namespace = ( namespace === undefined || /false/i.test(namespace) ) ? '' : namespace;\n    },\n\n    libs : {},\n\n    // methods that can be inherited in libraries\n    utils : {\n\n      // Description:\n      //    Fast Selector wrapper returns jQuery object. Only use where getElementById\n      //    is not available.\n      //\n      // Arguments:\n      //    Selector (String): CSS selector describing the element(s) to be\n      //    returned as a jQuery object.\n      //\n      //    Scope (String): CSS selector describing the area to be searched. Default\n      //    is document.\n      //\n      // Returns:\n      //    Element (jQuery Object): jQuery object containing elements matching the\n      //    selector within the scope.\n      S : S,\n\n      // Description:\n      //    Executes a function a max of once every n milliseconds\n      //\n      // Arguments:\n      //    Func (Function): Function to be throttled.\n      //\n      //    Delay (Integer): Function execution threshold in milliseconds.\n      //\n      // Returns:\n      //    Lazy_function (Function): Function with throttling applied.\n      throttle : function (func, delay) {\n        var timer = null;\n\n        return function () {\n          var context = this, args = arguments;\n\n          if (timer == null) {\n            timer = setTimeout(function () {\n              func.apply(context, args);\n              timer = null;\n            }, delay);\n          }\n        };\n      },\n\n      // Description:\n      //    Executes a function when it stops being invoked for n seconds\n      //    Modified version of _.debounce() http://underscorejs.org\n      //\n      // Arguments:\n      //    Func (Function): Function to be debounced.\n      //\n      //    Delay (Integer): Function execution threshold in milliseconds.\n      //\n      //    Immediate (Bool): Whether the function should be called at the beginning\n      //    of the delay instead of the end. Default is false.\n      //\n      // Returns:\n      //    Lazy_function (Function): Function with debouncing applied.\n      debounce : function (func, delay, immediate) {\n        var timeout, result;\n        return function () {\n          var context = this, args = arguments;\n          var later = function () {\n            timeout = null;\n            if (!immediate) result = func.apply(context, args);\n          };\n          var callNow = immediate && !timeout;\n          clearTimeout(timeout);\n          timeout = setTimeout(later, delay);\n          if (callNow) result = func.apply(context, args);\n          return result;\n        };\n      },\n\n      // Description:\n      //    Parses data-options attribute\n      //\n      // Arguments:\n      //    El (jQuery Object): Element to be parsed.\n      //\n      // Returns:\n      //    Options (Javascript Object): Contents of the element's data-options\n      //    attribute.\n      data_options : function (el, data_attr_name) {\n        data_attr_name = data_attr_name || 'options';\n        var opts = {}, ii, p, opts_arr,\n            data_options = function (el) {\n              var namespace = Foundation.global.namespace;\n\n              if (namespace.length > 0) {\n                return el.data(namespace + '-' + data_attr_name);\n              }\n\n              return el.data(data_attr_name);\n            };\n\n        var cached_options = data_options(el);\n\n        if (typeof cached_options === 'object') {\n          return cached_options;\n        }\n\n        opts_arr = (cached_options || ':').split(';');\n        ii = opts_arr.length;\n\n        function isNumber (o) {\n          return ! isNaN (o-0) && o !== null && o !== '' && o !== false && o !== true;\n        }\n\n        function trim (str) {\n          if (typeof str === 'string') return $.trim(str);\n          return str;\n        }\n\n        while (ii--) {\n          p = opts_arr[ii].split(':');\n          p = [p[0], p.slice(1).join(':')];\n\n          if (/true/i.test(p[1])) p[1] = true;\n          if (/false/i.test(p[1])) p[1] = false;\n          if (isNumber(p[1])) {\n            if (p[1].indexOf('.') === -1) {\n              p[1] = parseInt(p[1], 10);\n            } else {\n              p[1] = parseFloat(p[1]);\n            }\n          }\n\n          if (p.length === 2 && p[0].length > 0) {\n            opts[trim(p[0])] = trim(p[1]);\n          }\n        }\n\n        return opts;\n      },\n\n      // Description:\n      //    Adds JS-recognizable media queries\n      //\n      // Arguments:\n      //    Media (String): Key string for the media query to be stored as in\n      //    Foundation.media_queries\n      //\n      //    Class (String): Class name for the generated <meta> tag\n      register_media : function (media, media_class) {\n        if(Foundation.media_queries[media] === undefined) {\n          $('head').append('<meta class=\"' + media_class + '\"/>');\n          Foundation.media_queries[media] = removeQuotes($('.' + media_class).css('font-family'));\n        }\n      },\n\n      // Description:\n      //    Add custom CSS within a JS-defined media query\n      //\n      // Arguments:\n      //    Rule (String): CSS rule to be appended to the document.\n      //\n      //    Media (String): Optional media query string for the CSS rule to be\n      //    nested under.\n      add_custom_rule : function (rule, media) {\n        if (media === undefined && Foundation.stylesheet) {\n          Foundation.stylesheet.insertRule(rule, Foundation.stylesheet.cssRules.length);\n        } else {\n          var query = Foundation.media_queries[media];\n\n          if (query !== undefined) {\n            Foundation.stylesheet.insertRule('@media ' +\n              Foundation.media_queries[media] + '{ ' + rule + ' }');\n          }\n        }\n      },\n\n      // Description:\n      //    Performs a callback function when an image is fully loaded\n      //\n      // Arguments:\n      //    Image (jQuery Object): Image(s) to check if loaded.\n      //\n      //    Callback (Function): Function to execute when image is fully loaded.\n      image_loaded : function (images, callback) {\n        var self = this,\n            unloaded = images.length;\n\n        if (unloaded === 0) {\n          callback(images);\n        }\n\n        images.each(function () {\n          single_image_loaded(self.S(this), function () {\n            unloaded -= 1;\n            if (unloaded === 0) {\n              callback(images);\n            }\n          });\n        });\n      },\n\n      // Description:\n      //    Returns a random, alphanumeric string\n      //\n      // Arguments:\n      //    Length (Integer): Length of string to be generated. Defaults to random\n      //    integer.\n      //\n      // Returns:\n      //    Rand (String): Pseudo-random, alphanumeric string.\n      random_str : function () {\n        if (!this.fidx) this.fidx = 0;\n        this.prefix = this.prefix || [(this.name || 'F'), (+new Date).toString(36)].join('-');\n\n        return this.prefix + (this.fidx++).toString(36);\n      }\n    }\n  };\n\n  $.fn.foundation = function () {\n    var args = Array.prototype.slice.call(arguments, 0);\n\n    return this.each(function () {\n      Foundation.init.apply(Foundation, [this].concat(args));\n      return this;\n    });\n  };\n\n}(jQuery, window, window.document));\n",";(function ($, window, document, undefined) {\n  'use strict';\n\n  Foundation.libs.abide = {\n    name : 'abide',\n\n    version : '{{VERSION}}',\n\n    settings : {\n      live_validate : true,\n      validate_on_blur: true,\n      focus_on_invalid : true,\n      error_labels: true, // labels with a for=\"inputId\" will recieve an `error` class\n      error_class: 'error',\n      timeout : 1000,\n      patterns : {\n        alpha: /^[a-zA-Z]+$/,\n        alpha_numeric : /^[a-zA-Z0-9]+$/,\n        integer: /^[-+]?\\d+$/,\n        number: /^[-+]?\\d*(?:[\\.\\,]\\d+)?$/,\n\n        // amex, visa, diners\n        card : /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$/,\n        cvv : /^([0-9]){3,4}$/,\n\n        // http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#valid-e-mail-address\n        email : /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/,\n\n        url: /^(https?|ftp|file|ssh):\\/\\/(((([a-zA-Z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-zA-Z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-zA-Z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-zA-Z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-zA-Z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-zA-Z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-zA-Z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-zA-Z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-zA-Z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-zA-Z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-zA-Z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-zA-Z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-zA-Z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/,\n        // abc.de\n        domain: /^([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,6}$/,\n\n        datetime: /^([0-2][0-9]{3})\\-([0-1][0-9])\\-([0-3][0-9])T([0-5][0-9])\\:([0-5][0-9])\\:([0-5][0-9])(Z|([\\-\\+]([0-1][0-9])\\:00))$/,\n        // YYYY-MM-DD\n        date: /(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))$/,\n        // HH:MM:SS\n        time : /^(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}$/,\n        dateISO: /^\\d{4}[\\/\\-]\\d{1,2}[\\/\\-]\\d{1,2}$/,\n        // MM/DD/YYYY\n        month_day_year : /^(0[1-9]|1[012])[- \\/.](0[1-9]|[12][0-9]|3[01])[- \\/.]\\d{4}$/,\n        // DD/MM/YYYY\n        day_month_year : /^(0[1-9]|[12][0-9]|3[01])[- \\/.](0[1-9]|1[012])[- \\/.]\\d{4}$/,\n\n        // #FFF or #FFFFFF\n        color: /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/\n      },\n      validators : {\n        equalTo: function(el, required, parent) {\n          var from  = document.getElementById(el.getAttribute(this.add_namespace('data-equalto'))).value,\n              to    = el.value,\n              valid = (from === to);\n\n          return valid;\n        }\n      }\n    },\n\n    timer : null,\n\n    init : function (scope, method, options) {\n      this.bindings(method, options);\n    },\n\n    events : function (scope) {\n      var self = this,\n          form = self.S(scope).attr('novalidate', 'novalidate'),\n          settings = form.data(this.attr_name(true) + '-init') || {};\n\n      this.invalid_attr = this.add_namespace('data-invalid');\n\n      form\n        .off('.abide')\n        .on('submit.fndtn.abide validate.fndtn.abide', function (e) {\n          var is_ajax = /ajax/i.test(self.S(this).attr(self.attr_name()));\n          return self.validate(self.S(this).find('input, textarea, select').get(), e, is_ajax);\n        })\n        .on('reset', function() {\n          return self.reset($(this));\n        })\n        .find('input, textarea, select')\n          .off('.abide')\n          .on('blur.fndtn.abide change.fndtn.abide', function (e) {\n            if (settings.validate_on_blur === true) {\n              self.validate([this], e);\n            }\n          })\n          .on('keydown.fndtn.abide', function (e) {\n            if (settings.live_validate === true && e.which != 9) {\n              clearTimeout(self.timer);\n              self.timer = setTimeout(function () {\n                self.validate([this], e);\n              }.bind(this), settings.timeout);\n            }\n          });\n    },\n\n    reset : function (form) {\n      form.removeAttr(this.invalid_attr);\n      $(this.invalid_attr, form).removeAttr(this.invalid_attr);\n      $('.' + this.settings.error_class, form).not('small').removeClass(this.settings.error_class);\n    },\n\n    validate : function (els, e, is_ajax) {\n      var validations = this.parse_patterns(els),\n          validation_count = validations.length,\n          form = this.S(els[0]).closest('form'),\n          submit_event = /submit/.test(e.type);\n\n      // Has to count up to make sure the focus gets applied to the top error\n      for (var i=0; i < validation_count; i++) {\n        if (!validations[i] && (submit_event || is_ajax)) {\n          if (this.settings.focus_on_invalid) els[i].focus();\n          form.trigger('invalid').trigger('invalid.fndtn.abide');\n          this.S(els[i]).closest('form').attr(this.invalid_attr, '');\n          return false;\n        }\n      }\n\n      if (submit_event || is_ajax) {\n        form.trigger('valid').trigger('valid.fndtn.abide');\n      }\n\n      form.removeAttr(this.invalid_attr);\n\n      if (is_ajax) return false;\n\n      return true;\n    },\n\n    parse_patterns : function (els) {\n      var i = els.length,\n          el_patterns = [];\n\n      while (i--) {\n        el_patterns.push(this.pattern(els[i]));\n      }\n\n      return this.check_validation_and_apply_styles(el_patterns);\n    },\n\n    pattern : function (el) {\n      var type = el.getAttribute('type'),\n          required = typeof el.getAttribute('required') === 'string';\n\n      var pattern = el.getAttribute('pattern') || '';\n\n      if (this.settings.patterns.hasOwnProperty(pattern) && pattern.length > 0) {\n        return [el, this.settings.patterns[pattern], required];\n      } else if (pattern.length > 0) {\n        return [el, new RegExp(pattern), required];\n      }\n\n      if (this.settings.patterns.hasOwnProperty(type)) {\n        return [el, this.settings.patterns[type], required];\n      }\n\n      pattern = /.*/;\n\n      return [el, pattern, required];\n    },\n\n    check_validation_and_apply_styles : function (el_patterns) {\n      var i = el_patterns.length,\n          validations = [],\n          form = this.S(el_patterns[0][0]).closest('[data-' + this.attr_name(true) + ']'),\n          settings = form.data(this.attr_name(true) + '-init') || {};\n      while (i--) {\n        var el = el_patterns[i][0],\n            required = el_patterns[i][2],\n            value = el.value.trim(),\n            direct_parent = this.S(el).parent(),\n            validator = el.getAttribute(this.add_namespace('data-abide-validator')),\n            is_radio = el.type === \"radio\",\n            is_checkbox = el.type === \"checkbox\",\n            label = this.S('label[for=\"' + el.getAttribute('id') + '\"]'),\n            valid_length = (required) ? (el.value.length > 0) : true,\n            el_validations = [];\n\n        var parent, valid;\n\n        // support old way to do equalTo validations\n        if(el.getAttribute(this.add_namespace('data-equalto'))) { validator = \"equalTo\" }\n\n        if (!direct_parent.is('label')) {\n          parent = direct_parent;\n        } else {\n          parent = direct_parent.parent();\n        }\n\n        if (validator) {\n          valid = this.settings.validators[validator].apply(this, [el, required, parent]);\n          el_validations.push(valid);\n        }\n\n        if (is_radio && required) {\n          el_validations.push(this.valid_radio(el, required));\n        } else if (is_checkbox && required) {\n          el_validations.push(this.valid_checkbox(el, required));\n        } else {\n\n          if (el_patterns[i][1].test(value) && valid_length ||\n            !required && el.value.length < 1 || $(el).attr('disabled')) {\n            el_validations.push(true);\n          } else {\n            el_validations.push(false);\n          }\n\n          el_validations = [el_validations.every(function(valid){return valid;})];\n\n          if(el_validations[0]){\n            this.S(el).removeAttr(this.invalid_attr);\n            el.setAttribute('aria-invalid', 'false');\n            el.removeAttribute('aria-describedby');\n            parent.removeClass(this.settings.error_class);\n            if (label.length > 0 && this.settings.error_labels) {\n              label.removeClass(this.settings.error_class).removeAttr('role');\n            }\n            $(el).triggerHandler('valid');\n          } else {\n            this.S(el).attr(this.invalid_attr, '');\n            el.setAttribute('aria-invalid', 'true');\n\n            // Try to find the error associated with the input\n            var errorElem = parent.find('small.'+this.settings.error_class, 'span.'+this.settings.error_class);\n            var errorID = errorElem.length > 0 ? errorElem[0].id : \"\";\n            if (errorID.length > 0) el.setAttribute('aria-describedby', errorID);\n\n            // el.setAttribute('aria-describedby', $(el).find('.error')[0].id);\n            parent.addClass(this.settings.error_class);\n            if (label.length > 0 && this.settings.error_labels) {\n              label.addClass(this.settings.error_class).attr('role', 'alert');\n            }\n            $(el).triggerHandler('invalid');\n          }\n        }\n        validations.push(el_validations[0]);\n      }\n      validations = [validations.every(function(valid){return valid;})];\n      return validations;\n    },\n\n    valid_checkbox : function(el, required) {\n      var el = this.S(el),\n          valid = (el.is(':checked') || !required);\n\n      if (valid) {\n        el.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class);\n      } else {\n        el.attr(this.invalid_attr, '').parent().addClass(this.settings.error_class);\n      }\n\n      return valid;\n    },\n\n    valid_radio : function (el, required) {\n      var name = el.getAttribute('name'),\n          group = this.S(el).closest('[data-' + this.attr_name(true) + ']').find(\"[name='\"+name+\"']\"),\n          count = group.length,\n          valid = false;\n\n      // Has to count up to make sure the focus gets applied to the top error\n      for (var i=0; i < count; i++) {\n        if (group[i].checked) valid = true;\n      }\n\n      // Has to count up to make sure the focus gets applied to the top error\n      for (var i=0; i < count; i++) {\n        if (valid) {\n          this.S(group[i]).removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class);\n        } else {\n          this.S(group[i]).attr(this.invalid_attr, '').parent().addClass(this.settings.error_class);\n        }\n      }\n\n      return valid;\n    },\n\n    valid_equal: function(el, required, parent) {\n      var from  = document.getElementById(el.getAttribute(this.add_namespace('data-equalto'))).value,\n          to    = el.value,\n          valid = (from === to);\n\n      if (valid) {\n        this.S(el).removeAttr(this.invalid_attr);\n        parent.removeClass(this.settings.error_class);\n        if (label.length > 0 && settings.error_labels) label.removeClass(this.settings.error_class);\n      } else {\n        this.S(el).attr(this.invalid_attr, '');\n        parent.addClass(this.settings.error_class);\n        if (label.length > 0 && settings.error_labels) label.addClass(this.settings.error_class);\n      }\n\n      return valid;\n    },\n\n    valid_oneof: function(el, required, parent, doNotValidateOthers) {\n      var el = this.S(el),\n        others = this.S('[' + this.add_namespace('data-oneof') + ']'),\n        valid = others.filter(':checked').length > 0;\n\n      if (valid) {\n        el.removeAttr(this.invalid_attr).parent().removeClass(this.settings.error_class);\n      } else {\n        el.attr(this.invalid_attr, '').parent().addClass(this.settings.error_class);\n      }\n\n      if (!doNotValidateOthers) {\n        var _this = this;\n        others.each(function() {\n          _this.valid_oneof.call(_this, this, null, null, true);\n        });\n      }\n\n      return valid;\n    }\n  };\n}(jQuery, window, window.document));\n",";(function ($, window, document, undefined) {\n  'use strict';\n\n  Foundation.libs.accordion = {\n    name : 'accordion',\n\n    version : '{{VERSION}}',\n\n    settings : {\n      content_class: 'content',\n      active_class: 'active',\n      multi_expand: false,\n      toggleable: true,\n      callback : function () {}\n    },\n\n    init : function (scope, method, options) {\n      this.bindings(method, options);\n    },\n\n    events : function () {\n      var self = this;\n      var S = this.S;\n      S(this.scope)\n      .off('.fndtn.accordion')\n      .on('click.fndtn.accordion', '[' + this.attr_name() + '] > .accordion-navigation > a', function (e) {\n        var accordion = S(this).closest('[' + self.attr_name() + ']'),\n            groupSelector = self.attr_name() + '=' + accordion.attr(self.attr_name()),\n            settings = accordion.data(self.attr_name(true) + '-init') || self.settings,\n            target = S('#' + this.href.split('#')[1]),\n            aunts = $('> .accordion-navigation', accordion),\n            siblings = aunts.children('.content'),\n            active_content = siblings.filter('.' + settings.active_class);\n        e.preventDefault();\n\n        if (accordion.attr(self.attr_name())) {\n          siblings = siblings.add('[' + groupSelector + '] .accordion-navigation > .content');\n          aunts = aunts.add('[' + groupSelector + '] .accordion-navigation');\n        }\n\n        if (settings.toggleable && target.is(active_content)) {\n          target.parent('.accordion-navigation').toggleClass(settings.active_class, false);\n          target.toggleClass(settings.active_class, false);\n          settings.callback(target);\n          target.triggerHandler('toggled', [accordion]);\n          accordion.triggerHandler('toggled', [target]);\n          return;\n        }\n\n        if (!settings.multi_expand) {\n          siblings.removeClass(settings.active_class);\n          aunts.removeClass(settings.active_class);\n        }\n\n        target.addClass(settings.active_class).parent().addClass(settings.active_class);\n        settings.callback(target);\n        target.triggerHandler('toggled', [accordion]);\n        accordion.triggerHandler('toggled', [target]);\n      });\n    },\n\n    off : function () {},\n\n    reflow : function () {}\n  };\n}(jQuery, window, window.document));\n",";(function ($, window, document, undefined) {\n  'use strict';\n\n  Foundation.libs.alert = {\n    name : 'alert',\n\n    version : '{{VERSION}}',\n\n    settings : {\n      callback: function (){}\n    },\n\n    init : function (scope, method, options) {\n      this.bindings(method, options);\n    },\n\n    events : function () {\n      var self = this,\n          S = this.S;\n\n      $(this.scope).off('.alert').on('click.fndtn.alert', '[' + this.attr_name() + '] .close', function (e) {\n          var alertBox = S(this).closest('[' + self.attr_name() + ']'),\n              settings = alertBox.data(self.attr_name(true) + '-init') || self.settings;\n\n        e.preventDefault();\n        if (Modernizr.csstransitions) {\n          alertBox.addClass('alert-close');\n          alertBox.on('transitionend webkitTransitionEnd oTransitionEnd', function(e) {\n            S(this).trigger('close').trigger('close.fndtn.alert').remove();\n            settings.callback();\n          });\n        } else {\n          alertBox.fadeOut(300, function () {\n            S(this).trigger('close').trigger('close.fndtn.alert').remove();\n            settings.callback();\n          });\n        }\n      });\n    },\n\n    reflow : function () {}\n  };\n}(jQuery, window, window.document));\n",";(function ($, window, document, undefined) {\n  'use strict';\n\n  Foundation.libs.clearing = {\n    name : 'clearing',\n\n    version: '{{VERSION}}',\n\n    settings : {\n      templates : {\n        viewing : '<a href=\"#\" class=\"clearing-close\">&times;</a>' +\n          '<div class=\"visible-img\" style=\"display: none\"><div class=\"clearing-touch-label\"></div><img src=\"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D\" alt=\"\" />' +\n          '<p class=\"clearing-caption\"></p><a href=\"#\" class=\"clearing-main-prev\"><span></span></a>' +\n          '<a href=\"#\" class=\"clearing-main-next\"><span></span></a></div>'\n      },\n\n      // comma delimited list of selectors that, on click, will close clearing,\n      // add 'div.clearing-blackout, div.visible-img' to close on background click\n      close_selectors : '.clearing-close, div.clearing-blackout', \n\n      // Default to the entire li element.\n      open_selectors : '',\n\n      // Image will be skipped in carousel.\n      skip_selector : '',\n\n      touch_label : '',\n\n      // event initializers and locks\n      init : false,\n      locked : false\n    },\n\n    init : function (scope, method, options) {\n      var self = this;\n      Foundation.inherit(this, 'throttle image_loaded');\n\n      this.bindings(method, options);\n\n      if (self.S(this.scope).is('[' + this.attr_name() + ']')) {\n        this.assemble(self.S('li', this.scope));\n      } else {\n        self.S('[' + this.attr_name() + ']', this.scope).each(function () {\n          self.assemble(self.S('li', this));\n        });\n      }\n    },\n\n    events : function (scope) {\n      var self = this,\n          S = self.S,\n          $scroll_container = $('.scroll-container');\n\n      if ($scroll_container.length > 0) {\n        this.scope = $scroll_container;\n      }\n\n      S(this.scope)\n        .off('.clearing')\n        .on('click.fndtn.clearing', 'ul[' + this.attr_name() + '] li ' + this.settings.open_selectors,\n          function (e, current, target) {\n            var current = current || S(this),\n                target = target || current,\n                next = current.next('li'),\n                settings = current.closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init'),\n                image = S(e.target);\n\n            e.preventDefault();\n\n            if (!settings) {\n              self.init();\n              settings = current.closest('[' + self.attr_name() + ']').data(self.attr_name(true) + '-init');\n            }\n\n            // if clearing is open and the current image is\n            // clicked, go to the next image in sequence\n            if (target.hasClass('visible') &&\n              current[0] === target[0] &&\n              next.length > 0 && self.is_open(current)) {\n              target = next;\n              image = S('img', target);\n            }\n\n            // set current and target to the clicked li if not otherwise defined.\n            self.open(image, current, target);\n            self.update_paddles(target);\n          })\n\n        .on('click.fndtn.clearing', '.clearing-main-next',\n          function (e) { self.nav(e, 'next') })\n        .on('click.fndtn.clearing', '.clearing-main-prev',\n          function (e) { self.nav(e, 'prev') })\n        .on('click.fndtn.clearing', this.settings.close_selectors,\n          function (e) { Foundation.libs.clearing.close(e, this) });\n\n      $(document).on('keydown.fndtn.clearing',\n          function (e) { self.keydown(e) });\n\n      S(window).off('.clearing').on('resize.fndtn.clearing',\n        function () { self.resize() });\n\n      this.swipe_events(scope);\n    },\n\n    swipe_events : function (scope) {\n      var self = this,\n      S = self.S;\n\n      S(this.scope)\n        .on('touchstart.fndtn.clearing', '.visible-img', function(e) {\n          if (!e.touches) { e = e.originalEvent; }\n          var data = {\n                start_page_x: e.touches[0].pageX,\n                start_page_y: e.touches[0].pageY,\n                start_time: (new Date()).getTime(),\n                delta_x: 0,\n                is_scrolling: undefined\n              };\n\n          S(this).data('swipe-transition', data);\n          e.stopPropagation();\n        })\n        .on('touchmove.fndtn.clearing', '.visible-img', function(e) {\n          if (!e.touches) { e = e.originalEvent; }\n          // Ignore pinch/zoom events\n          if(e.touches.length > 1 || e.scale && e.scale !== 1) return;\n\n          var data = S(this).data('swipe-transition');\n\n          if (typeof data === 'undefined') {\n            data = {};\n          }\n\n          data.delta_x = e.touches[0].pageX - data.start_page_x;\n\n          if (Foundation.rtl) {\n            data.delta_x = -data.delta_x;\n          }\n\n          if (typeof data.is_scrolling === 'undefined') {\n            data.is_scrolling = !!( data.is_scrolling || Math.abs(data.delta_x) < Math.abs(e.touches[0].pageY - data.start_page_y) );\n          }\n\n          if (!data.is_scrolling && !data.active) {\n            e.preventDefault();\n            var direction = (data.delta_x < 0) ? 'next' : 'prev';\n            data.active = true;\n            self.nav(e, direction);\n          }\n        })\n        .on('touchend.fndtn.clearing', '.visible-img', function(e) {\n          S(this).data('swipe-transition', {});\n          e.stopPropagation();\n        });\n    },\n\n    assemble : function ($li) {\n      var $el = $li.parent();\n\n      if ($el.parent().hasClass('carousel')) {\n        return;\n      }\n      \n      $el.after('<div id=\"foundationClearingHolder\"></div>');\n\n      var grid = $el.detach(),\n          grid_outerHTML = '';\n\n      if (grid[0] == null) {\n        return;\n      } else {\n        grid_outerHTML = grid[0].outerHTML;\n      }\n      \n      var holder = this.S('#foundationClearingHolder'),\n          settings = $el.data(this.attr_name(true) + '-init'),\n          data = {\n            grid: '<div class=\"carousel\">' + grid_outerHTML + '</div>',\n            viewing: settings.templates.viewing\n          },\n          wrapper = '<div class=\"clearing-assembled\"><div>' + data.viewing +\n            data.grid + '</div></div>',\n          touch_label = this.settings.touch_label;\n\n      if (Modernizr.touch) {\n        wrapper = $(wrapper).find('.clearing-touch-label').html(touch_label).end();\n      }\n\n      holder.after(wrapper).remove();\n    },\n\n    open : function ($image, current, target) {\n      var self = this,\n          body = $(document.body),\n          root = target.closest('.clearing-assembled'),\n          container = self.S('div', root).first(),\n          visible_image = self.S('.visible-img', container),\n          image = self.S('img', visible_image).not($image),\n          label = self.S('.clearing-touch-label', container),\n          error = false;\n\n      // Event to disable scrolling on touch devices when Clearing is activated\n      $('body').on('touchmove',function(e){\n        e.preventDefault();\n      });\n\n      image.error(function () {\n        error = true;\n      });\n\n      function startLoad() {\n        setTimeout(function () {\n          this.image_loaded(image, function () {\n            if (image.outerWidth() === 1 && !error) {\n              startLoad.call(this);\n            } else {\n              cb.call(this, image);\n            }\n          }.bind(this));\n        }.bind(this), 100);\n      }\n\n      function cb (image) {\n        var $image = $(image);\n        $image.css('visibility', 'visible');\n        // toggle the gallery\n        body.css('overflow', 'hidden');\n        root.addClass('clearing-blackout');\n        container.addClass('clearing-container');\n        visible_image.show();\n        this.fix_height(target)\n          .caption(self.S('.clearing-caption', visible_image), self.S('img', target))\n          .center_and_label(image, label)\n          .shift(current, target, function () {\n            target.closest('li').siblings().removeClass('visible');\n            target.closest('li').addClass('visible');\n          });\n        visible_image.trigger('opened.fndtn.clearing')\n      }\n\n      if (!this.locked()) {\n        visible_image.trigger('open.fndtn.clearing');\n        // set the image to the selected thumbnail\n        image\n          .attr('src', this.load($image))\n          .css('visibility', 'hidden');\n\n        startLoad.call(this);\n      }\n    },\n\n    close : function (e, el) {\n      e.preventDefault();\n\n      var root = (function (target) {\n            if (/blackout/.test(target.selector)) {\n              return target;\n            } else {\n              return target.closest('.clearing-blackout');\n            }\n          }($(el))),\n          body = $(document.body), container, visible_image;\n\n      if (el === e.target && root) {\n        body.css('overflow', '');\n        container = $('div', root).first();\n        visible_image = $('.visible-img', container);\n        visible_image.trigger('close.fndtn.clearing');\n        this.settings.prev_index = 0;\n        $('ul[' + this.attr_name() + ']', root)\n          .attr('style', '').closest('.clearing-blackout')\n          .removeClass('clearing-blackout');\n        container.removeClass('clearing-container');\n        visible_image.hide();\n        visible_image.trigger('closed.fndtn.clearing');        \n      }\n\n      // Event to re-enable scrolling on touch devices\n      $('body').off('touchmove');\n\n      return false;\n    },\n\n    is_open : function (current) {\n      return current.parent().prop('style').length > 0;\n    },\n\n    keydown : function (e) {\n      var clearing = $('.clearing-blackout ul[' + this.attr_name() + ']'),\n          NEXT_KEY = this.rtl ? 37 : 39,\n          PREV_KEY = this.rtl ? 39 : 37,\n          ESC_KEY = 27;\n\n      if (e.which === NEXT_KEY) this.go(clearing, 'next');\n      if (e.which === PREV_KEY) this.go(clearing, 'prev');\n      if (e.which === ESC_KEY) this.S('a.clearing-close').trigger('click').trigger('click.fndtn.clearing');\n    },\n\n    nav : function (e, direction) {\n      var clearing = $('ul[' + this.attr_name() + ']', '.clearing-blackout');\n\n      e.preventDefault();\n      this.go(clearing, direction);\n    },\n\n    resize : function () {\n      var image = $('img', '.clearing-blackout .visible-img'),\n          label = $('.clearing-touch-label', '.clearing-blackout');\n\n      if (image.length) {\n        this.center_and_label(image, label);\n        image.trigger('resized.fndtn.clearing')\n      }\n    },\n\n    // visual adjustments\n    fix_height : function (target) {\n      var lis = target.parent().children(),\n          self = this;\n\n      lis.each(function () {\n        var li = self.S(this),\n            image = li.find('img');\n\n        if (li.height() > image.outerHeight()) {\n          li.addClass('fix-height');\n        }\n      })\n      .closest('ul')\n      .width(lis.length * 100 + '%');\n\n      return this;\n    },\n\n    update_paddles : function (target) {\n      target = target.closest('li');\n      var visible_image = target\n        .closest('.carousel')\n        .siblings('.visible-img');\n\n      if (target.next().length > 0) {\n        this.S('.clearing-main-next', visible_image).removeClass('disabled');\n      } else {\n        this.S('.clearing-main-next', visible_image).addClass('disabled');\n      }\n\n      if (target.prev().length > 0) {\n        this.S('.clearing-main-prev', visible_image).removeClass('disabled');\n      } else {\n        this.S('.clearing-main-prev', visible_image).addClass('disabled');\n      }\n    },\n\n    center_and_label : function (target, label) {\n      if (!this.rtl) {\n        target.css({\n          marginLeft : -(target.outerWidth() / 2),\n          marginTop : -(target.outerHeight() / 2)\n        });\n\n        if (label.length > 0) {\n          label.css({\n            marginLeft : -(label.outerWidth() / 2),\n            marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10\n          });\n        }\n      } else {\n        target.css({\n          marginRight : -(target.outerWidth() / 2),\n          marginTop : -(target.outerHeight() / 2),\n          left: 'auto',\n          right: '50%'\n        });\n\n        if (label.length > 0) {\n          label.css({\n            marginRight : -(label.outerWidth() / 2),\n            marginTop : -(target.outerHeight() / 2)-label.outerHeight()-10,\n            left: 'auto',\n            right: '50%'\n          });\n        }\n      }\n      return this;\n    },\n\n    // image loading and preloading\n\n    load : function ($image) {\n      var href;\n\n      if ($image[0].nodeName === 'A') {\n        href = $image.attr('href');\n      } else {\n        href = $image.parent().attr('href');\n      }\n\n      this.preload($image);\n\n      if (href) return href;\n      return $image.attr('src');\n    },\n\n    preload : function ($image) {\n      this\n        .img($image.closest('li').next())\n        .img($image.closest('li').prev());\n    },\n\n    img : function (img) {\n      if (img.length) {\n        var new_img = new Image(),\n            new_a = this.S('a', img);\n\n        if (new_a.length) {\n          new_img.src = new_a.attr('href');\n        } else {\n          new_img.src = this.S('img', img).attr('src');\n        }\n      }\n      return this;\n    },\n\n    // image caption\n\n    caption : function (container, $image) {\n      var caption = $image.attr('data-caption');\n\n      if (caption) {\n        container\n          .html(caption)\n          .show();\n      } else {\n        container\n          .text('')\n          .hide();\n      }\n      return this;\n    }, \n\n    // directional methods\n\n    go : function ($ul, direction) {\n      var current = this.S('.visible', $ul),\n          target = current[direction]();\n\n      // Check for skip selector.\n      if (this.settings.skip_selector && target.find(this.settings.skip_selector).length != 0) {\n        target = target[direction]();\n      }\n\n      if (target.length) {\n        this.S('img', target)\n          .trigger('click', [current, target]).trigger('click.fndtn.clearing', [current, target])\n          .trigger('change.fndtn.clearing');\n      }\n    },\n\n    shift : function (current, target, callback) {\n      var clearing = target.parent(),\n          old_index = this.settings.prev_index || target.index(),\n          direction = this.direction(clearing, current, target),\n          dir = this.rtl ? 'right' : 'left',\n          left = parseInt(clearing.css('left'), 10),\n          width = target.outerWidth(),\n          skip_shift;\n\n      var dir_obj = {};\n\n      // we use jQuery animate instead of CSS transitions because we\n      // need a callback to unlock the next animation\n      // needs support for RTL **\n      if (target.index() !== old_index && !/skip/.test(direction)){\n        if (/left/.test(direction)) {\n          this.lock();\n          dir_obj[dir] = left + width;\n          clearing.animate(dir_obj, 300, this.unlock());\n        } else if (/right/.test(direction)) {\n          this.lock();\n          dir_obj[dir] = left - width;\n          clearing.animate(dir_obj, 300, this.unlock());\n        }\n      } else if (/skip/.test(direction)) {\n        // the target image is not adjacent to the current image, so\n        // do we scroll right or not\n        skip_shift = target.index() - this.settings.up_count;\n        this.lock();\n\n        if (skip_shift > 0) {\n          dir_obj[dir] = -(skip_shift * width);\n          clearing.animate(dir_obj, 300, this.unlock());\n        } else {\n          dir_obj[dir] = 0;\n          clearing.animate(dir_obj, 300, this.unlock());\n        }\n      }\n\n      callback();\n    },\n\n    direction : function ($el, current, target) {\n      var lis = this.S('li', $el),\n          li_width = lis.outerWidth() + (lis.outerWidth() / 4),\n          up_count = Math.floor(this.S('.clearing-container').outerWidth() / li_width) - 1,\n          target_index = lis.index(target),\n          response;\n\n      this.settings.up_count = up_count;\n\n      if (this.adjacent(this.settings.prev_index, target_index)) {\n        if ((target_index > up_count) && target_index > this.settings.prev_index) {\n          response = 'right';\n        } else if ((target_index > up_count - 1) && target_index <= this.settings.prev_index) {\n          response = 'left';\n        } else {\n          response = false;\n        }\n      } else {\n        response = 'skip';\n      }\n\n      this.settings.prev_index = target_index;\n\n      return response;\n    },\n\n    adjacent : function (current_index, target_index) {\n      for (var i = target_index + 1; i >= target_index - 1; i--) {\n        if (i === current_index) return true;\n      }\n      return false;\n    },\n\n    // lock management\n\n    lock : function () {\n      this.settings.locked = true;\n    },\n\n    unlock : function () {\n      this.settings.locked = false;\n    },\n\n    locked : function () {\n      return this.settings.locked;\n    },\n\n    off : function () {\n      this.S(this.scope).off('.fndtn.clearing');\n      this.S(window).off('.fndtn.clearing');\n    },\n\n    reflow : function () {\n      this.init();\n    }\n  };\n\n}(jQuery, window, window.document));\n",";(function ($, window, document, undefined) {\n  'use strict';\n\n  Foundation.libs.dropdown = {\n    name : 'dropdown',\n\n    version : '{{VERSION}}',\n\n    settings : {\n      active_class: 'open',\n      disabled_class: 'disabled',\n      mega_class: 'mega',\n      align: 'bottom',\n      is_hover: false,\n      opened: function(){},\n      closed: function(){}\n    },\n\n    init : function (scope, method, options) {\n      Foundation.inherit(this, 'throttle');\n\n      this.bindings(method, options);\n    },\n\n    events : function (scope) {\n      var self = this,\n          S = self.S;\n\n      S(this.scope)\n        .off('.dropdown')\n        .on('click.fndtn.dropdown', '[' + this.attr_name() + ']', function (e) {\n          var settings = S(this).data(self.attr_name(true) + '-init') || self.settings;\n          if (!settings.is_hover || Modernizr.touch) {\n            e.preventDefault();\n            if (S(this).parent('[data-reveal-id]')) {\n              e.stopPropagation();\n            }\n            self.toggle($(this));\n          }\n        })\n        .on('mouseenter.fndtn.dropdown', '[' + this.attr_name() + '], [' + this.attr_name() + '-content]', function (e) {\n          var $this = S(this),\n              dropdown,\n              target;\n\n          clearTimeout(self.timeout);\n\n          if ($this.data(self.data_attr())) {\n            dropdown = S('#' + $this.data(self.data_attr()));\n            target = $this;\n          } else {\n            dropdown = $this;\n            target = S('[' + self.attr_name() + '=\"' + dropdown.attr('id') + '\"]');\n          }\n\n          var settings = target.data(self.attr_name(true) + '-init') || self.settings;\n\n          if(S(e.currentTarget).data(self.data_attr()) && settings.is_hover) {\n            self.closeall.call(self);\n          }\n\n          if (settings.is_hover) self.open.apply(self, [dropdown, target]);\n        })\n        .on('mouseleave.fndtn.dropdown', '[' + this.attr_name() + '], [' + this.attr_name() + '-content]', function (e) {\n          var $this = S(this);\n          self.timeout = setTimeout(function () {\n            if ($this.data(self.data_attr())) {\n              var settings = $this.data(self.data_attr(true) + '-init') || self.settings;\n              if (settings.is_hover) self.close.call(self, S('#' + $this.data(self.data_attr())));\n            } else {\n              var target   = S('[' + self.attr_name() + '=\"' + S(this).attr('id') + '\"]'),\n                  settings = target.data(self.attr_name(true) + '-init') || self.settings;\n              if (settings.is_hover) self.close.call(self, $this);\n            }\n          }.bind(this), 150);\n        })\n        .on('click.fndtn.dropdown', function (e) {\n          var parent = S(e.target).closest('[' + self.attr_name() + '-content]');\n\n          if (S(e.target).closest('[' + self.attr_name() + ']').length > 0) {\n            return;\n          }\n          if (!(S(e.target).data('revealId')) &&\n            (parent.length > 0 && (S(e.target).is('[' + self.attr_name() + '-content]') ||\n              $.contains(parent.first()[0], e.target)))) {\n            e.stopPropagation();\n            return;\n          }\n\n          self.close.call(self, S('[' + self.attr_name() + '-content]'));\n        })\n        .on('opened.fndtn.dropdown', '[' + self.attr_name() + '-content]', function () {\n            self.settings.opened.call(this);\n        })\n        .on('closed.fndtn.dropdown', '[' + self.attr_name() + '-content]', function () {\n            self.settings.closed.call(this);\n        });\n\n      S(window)\n        .off('.dropdown')\n        .on('resize.fndtn.dropdown', self.throttle(function () {\n          self.resize.call(self);\n        }, 50));\n\n      this.resize();\n    },\n\n    close: function (dropdown) {\n      var self = this;\n      dropdown.each(function () {\n        var original_target = $('[' + self.attr_name() + '=' + dropdown[0].id + ']') || $('aria-controls=' + dropdown[0].id+ ']');\n        original_target.attr('aria-expanded', 'false');\n        if (self.S(this).hasClass(self.settings.active_class)) {\n          self.S(this)\n            .css(Foundation.rtl ? 'right':'left', '-99999px')\n            .attr('aria-hidden', 'true')\n            .removeClass(self.settings.active_class)\n            .prev('[' + self.attr_name() + ']')\n            .removeClass(self.settings.active_class)\n            .removeData('target');\n\n          self.S(this).trigger('closed').trigger('closed.fndtn.dropdown', [dropdown]);\n        }\n      });\n      dropdown.removeClass('f-open-' + this.attr_name(true));\n    },\n\n    closeall: function() {\n      var self = this;\n      $.each(self.S('.f-open-' + this.attr_name(true)), function() {\n        self.close.call(self, self.S(this));\n      });\n    },\n\n    open: function (dropdown, target) {\n        this\n          .css(dropdown\n            .addClass(this.settings.active_class), target);\n        dropdown.prev('[' + this.attr_name() + ']').addClass(this.settings.active_class);\n        dropdown.data('target', target.get(0)).trigger('opened').trigger('opened.fndtn.dropdown', [dropdown, target]);\n        dropdown.attr('aria-hidden', 'false');\n        target.attr('aria-expanded', 'true');\n        dropdown.focus();\n        dropdown.addClass('f-open-' + this.attr_name(true));\n    },\n\n    data_attr: function () {\n      if (this.namespace.length > 0) {\n        return this.namespace + '-' + this.name;\n      }\n\n      return this.name;\n    },\n\n    toggle : function (target) {\n      if (target.hasClass(this.settings.disabled_class)) {\n        return;\n      }\n      var dropdown = this.S('#' + target.data(this.data_attr()));\n      if (dropdown.length === 0) {\n        // No dropdown found, not continuing\n        return;\n      }\n\n      this.close.call(this, this.S('[' + this.attr_name() + '-content]').not(dropdown));\n\n      if (dropdown.hasClass(this.settings.active_class)) {\n        this.close.call(this, dropdown);\n        if (dropdown.data('target') !== target.get(0))\n          this.open.call(this, dropdown, target);\n      } else {\n        this.open.call(this, dropdown, target);\n      }\n    },\n\n    resize : function () {\n      var dropdown = this.S('[' + this.attr_name() + '-content].open'),\n          target = this.S('[' + this.attr_name() + '=\"' + dropdown.attr('id') + '\"]');\n\n      if (dropdown.length && target.length) {\n        this.css(dropdown, target);\n      }\n    },\n\n    css : function (dropdown, target) {\n      var left_offset = Math.max((target.width() - dropdown.width()) / 2, 8),\n          settings = target.data(this.attr_name(true) + '-init') || this.settings;\n\n      this.clear_idx();\n\n      if (this.small()) {\n        var p = this.dirs.bottom.call(dropdown, target, settings);\n\n        dropdown.attr('style', '').removeClass('drop-left drop-right drop-top').css({\n          position : 'absolute',\n          width: '95%',\n          'max-width': 'none',\n          top: p.top\n        });\n\n        dropdown.css(Foundation.rtl ? 'right':'left', left_offset);\n      } else {\n\n        this.style(dropdown, target, settings);\n      }\n\n      return dropdown;\n    },\n\n    style : function (dropdown, target, settings) {\n      var css = $.extend({position: 'absolute'},\n        this.dirs[settings.align].call(dropdown, target, settings));\n\n      dropdown.attr('style', '').css(css);\n    },\n\n    // return CSS property object\n    // `this` is the dropdown\n    dirs : {\n      // Calculate target offset\n      _base : function (t) {\n        var o_p = this.offsetParent(),\n            o = o_p.offset(),\n            p = t.offset();\n\n        p.top -= o.top;\n        p.left -= o.left;\n        \n        //set some flags on the p object to pass along\n\t\tp.missRight = false;\n\t\tp.missTop = false;\n\t\tp.missLeft = false;\n\t\tp.leftRightFlag = false;\n\t\t\n\t\t//lets see if the panel will be off the screen\n\t\t//get the actual width of the page and store it\n\t\tvar actualBodyWidth;\n\t\tif (document.getElementsByClassName('row')[0]) {\n\t\t\tactualBodyWidth = document.getElementsByClassName('row')[0].clientWidth;\n\t\t} else {\n\t\t\tactualBodyWidth = window.outerWidth;\n\t\t}\n\t\tvar actualMarginWidth = (window.outerWidth - actualBodyWidth) / 2;\n\t\tvar actualBoundary = actualBodyWidth;\n\t\t\n\t\tif (!this.hasClass('mega')) {\n\t\t\t//miss top\n\t\t\tif (t.offset().top <= this.outerHeight()) {\n\t\t\t\tp.missTop = true;\n\t\t\t\tactualBoundary = window.outerWidth - actualMarginWidth;\n\t\t\t\tp.leftRightFlag = true;\n\t\t\t}\n\t\t\t\n\t\t\t//miss right\n\t\t\tif (t.offset().left + this.outerWidth() > t.offset().left + actualMarginWidth && t.offset().left - actualMarginWidth > this.outerWidth()) {\n\t\t\t\t\tp.missRight = true;\n\t\t\t\t\tp.missLeft = false;\n\t\t\t}\n\t\t\t\n\t\t\t//miss left\n\t\t\tif (t.offset().left - this.outerWidth() <= 0) {\n\t\t\t\t\tp.missLeft = true;\n\t\t\t\t\tp.missRight = false;\n\t\t\t}\n\t\t}\n\n        return p;\n      },\n      top: function (t, s) {\n        var self = Foundation.libs.dropdown,\n            p = self.dirs._base.call(this, t);\n\n        this.addClass('drop-top');\n        \n        if (p.missTop == true) {\n\t\t\tp.top = p.top + t.outerHeight() + this.outerHeight();\n\t\t\tthis.removeClass('drop-top');\n\t\t}\n\t\t\n\t\tif (p.missRight == true) {\n\t\t\tp.left = p.left - this.outerWidth() + t.outerWidth();\n\t\t}\n\n        if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) {\n          self.adjust_pip(this,t,s,p);\n        }\n\n        if (Foundation.rtl) {\n          return {left: p.left - this.outerWidth() + t.outerWidth(),\n            top: p.top - this.outerHeight()};\n        }\n\n        return {left: p.left, top: p.top - this.outerHeight()};\n      },\n      bottom: function (t,s) {\n        var self = Foundation.libs.dropdown,\n            p = self.dirs._base.call(this, t);\n\n\t\tif (p.missRight == true) {\n\t\t\tp.left = p.left - this.outerWidth() + t.outerWidth();\n\t\t}\n\n        if (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) {\n          self.adjust_pip(this,t,s,p);\n        }\n\n        if (self.rtl) {\n          return {left: p.left - this.outerWidth() + t.outerWidth(), top: p.top + t.outerHeight()};\n        }\n\n        return {left: p.left, top: p.top + t.outerHeight()};\n      },\n      left: function (t, s) {\n        var p = Foundation.libs.dropdown.dirs._base.call(this, t);\n\n        this.addClass('drop-left');\n        \n        if (p.missLeft == true) {\n\t\t\tp.left =  p.left + this.outerWidth();\n\t\t\tp.top = p.top + t.outerHeight();\n\t\t\tthis.removeClass('drop-left');\n\t\t}\n\n        return {left: p.left - this.outerWidth(), top: p.top};\n      },\n      right: function (t, s) {\n        var p = Foundation.libs.dropdown.dirs._base.call(this, t);\n\n        this.addClass('drop-right');\n        \n        if (p.missRight == true) {\n\t\t\tp.left = p.left - this.outerWidth();\n\t\t\tp.top = p.top + t.outerHeight();\n\t\t\tthis.removeClass('drop-right');\n\t\t} else {\n\t\t\tp.triggeredRight = true;\n\t\t}\n\t\t\n\t\tvar self = Foundation.libs.dropdown;\n\t\tif (t.outerWidth() < this.outerWidth() || self.small() || this.hasClass(s.mega_menu)) {\n\t\t  self.adjust_pip(this,t,s,p);\n\t\t}\n\n        return {left: p.left + t.outerWidth(), top: p.top};\n      }\n    },\n\n    // Insert rule to style psuedo elements\n    adjust_pip : function (dropdown,target,settings,position) {\n      var sheet = Foundation.stylesheet,\n          pip_offset_base = 8;\n\n      if (dropdown.hasClass(settings.mega_class)) {\n        pip_offset_base = position.left + (target.outerWidth()/2) - 8;\n      }\n      else if (this.small()) {\n        pip_offset_base += position.left - 8;\n      }\n\n      this.rule_idx = sheet.cssRules.length;\n\n      //default\n\t  var sel_before = '.f-dropdown.open:before',\n\t  \t  sel_after  = '.f-dropdown.open:after',\n\t \t  css_before = 'left: ' + pip_offset_base + 'px;',\n\t  \t  css_after  = 'left: ' + (pip_offset_base - 1) + 'px;';\n\t  \t  \n\t  if (position.missRight == true) {\n\t\t  pip_offset_base = dropdown.outerWidth() - 23;\n\t\t  sel_before = '.f-dropdown.open:before',\n\t  \t  sel_after  = '.f-dropdown.open:after',\n\t \t  css_before = 'left: ' + pip_offset_base + 'px;',\n\t  \t  css_after  = 'left: ' + (pip_offset_base - 1) + 'px;';\n\t  }\n\t  \n\t  //just a case where right is fired, but its not missing right\n\t  if (position.triggeredRight == true) {\n\t\t  sel_before = '.f-dropdown.open:before',\n\t  \t  sel_after  = '.f-dropdown.open:after',\n\t \t  css_before = 'left:-12px;',\n\t  \t  css_after  = 'left:-14px;';\n\t  }\n\n      if (sheet.insertRule) {\n        sheet.insertRule([sel_before, '{', css_before, '}'].join(' '), this.rule_idx);\n        sheet.insertRule([sel_after, '{', css_after, '}'].join(' '), this.rule_idx + 1);\n      } else {\n        sheet.addRule(sel_before, css_before, this.rule_idx);\n        sheet.addRule(sel_after, css_after, this.rule_idx + 1);\n      }\n    },\n\n    // Remove old dropdown rule index\n    clear_idx : function () {\n      var sheet = Foundation.stylesheet;\n\n      if (typeof this.rule_idx !== 'undefined') {\n        sheet.deleteRule(this.rule_idx);\n        sheet.deleteRule(this.rule_idx);\n        delete this.rule_idx;\n      }\n    },\n\n    small : function () {\n      return matchMedia(Foundation.media_queries.small).matches &&\n        !matchMedia(Foundation.media_queries.medium).matches;\n    },\n\n    off: function () {\n      this.S(this.scope).off('.fndtn.dropdown');\n      this.S('html, body').off('.fndtn.dropdown');\n      this.S(window).off('.fndtn.dropdown');\n      this.S('[data-dropdown-content]').off('.fndtn.dropdown');\n    },\n\n    reflow : function () {}\n  };\n}(jQuery, window, window.document));\n",";(function ($, window, document, undefined) {\n  'use strict';\n\n  Foundation.libs.equalizer = {\n    name : 'equalizer',\n\n    version : '{{VERSION}}',\n\n    settings : {\n      use_tallest: true,\n      before_height_change: $.noop,\n      after_height_change: $.noop,\n      equalize_on_stack: false\n    },\n\n    init : function (scope, method, options) {\n      Foundation.inherit(this, 'image_loaded');\n      this.bindings(method, options);\n      this.reflow();\n    },\n\n    events : function () {\n      this.S(window).off('.equalizer').on('resize.fndtn.equalizer', function(e){\n        this.reflow();\n      }.bind(this));\n    },\n\n    equalize: function(equalizer) {\n      var isStacked = false,\n          vals = equalizer.find('[' + this.attr_name() + '-watch]:visible'),\n          settings = equalizer.data(this.attr_name(true)+'-init');\n\n      if (vals.length === 0) return;\n      var firstTopOffset = vals.first().offset().top;\n      settings.before_height_change();\n      equalizer.trigger('before-height-change').trigger('before-height-change.fndth.equalizer');\n      vals.height('inherit');\n      vals.each(function(){\n        var el = $(this);\n        if (el.offset().top !== firstTopOffset) {\n          isStacked = true;\n        }\n      });\n\n      if (settings.equalize_on_stack === false) {\n        if (isStacked) return;\n      };\n\n      var heights = vals.map(function(){ return $(this).outerHeight(false) }).get();\n\n      if (settings.use_tallest) {\n        var max = Math.max.apply(null, heights);\n        vals.css('height', max);\n      } else {\n        var min = Math.min.apply(null, heights);\n        vals.css('height', min);\n      }\n      settings.after_height_change();\n      equalizer.trigger('after-height-change').trigger('after-height-change.fndtn.equalizer');\n    },\n\n    reflow : function () {\n      var self = this;\n\n      this.S('[' + this.attr_name() + ']', this.scope).each(function(){\n        var $eq_target = $(this);\n        self.image_loaded(self.S('img', this), function(){\n          self.equalize($eq_target)\n        });\n      });\n    }\n  };\n})(jQuery, window, window.document);\n\n",";(function ($, window, document, undefined) {\n  'use strict';\n\n  Foundation.libs.interchange = {\n    name : 'interchange',\n\n    version : '{{VERSION}}',\n\n    cache : {},\n\n    images_loaded : false,\n    nodes_loaded : false,\n\n    settings : {\n      load_attr : 'interchange',\n\n      named_queries : {\n        'default' : 'only screen',\n        small : Foundation.media_queries.small,\n        medium : Foundation.media_queries.medium,\n        large : Foundation.media_queries.large,\n        xlarge : Foundation.media_queries.xlarge,\n        xxlarge: Foundation.media_queries.xxlarge,\n        landscape : 'only screen and (orientation: landscape)',\n        portrait : 'only screen and (orientation: portrait)',\n        retina : 'only screen and (-webkit-min-device-pixel-ratio: 2),' +\n          'only screen and (min--moz-device-pixel-ratio: 2),' +\n          'only screen and (-o-min-device-pixel-ratio: 2/1),' +\n          'only screen and (min-device-pixel-ratio: 2),' +\n          'only screen and (min-resolution: 192dpi),' +\n          'only screen and (min-resolution: 2dppx)'\n      },\n\n      directives : {\n        replace: function (el, path, trigger) {\n          // The trigger argument, if called within the directive, fires\n          // an event named after the directive on the element, passing\n          // any parameters along to the event that you pass to trigger.\n          //\n          // ex. trigger(), trigger([a, b, c]), or trigger(a, b, c)\n          //\n          // This allows you to bind a callback like so:\n          // $('#interchangeContainer').on('replace', function (e, a, b, c) {\n          //   console.log($(this).html(), a, b, c);\n          // });\n\n          if (/IMG/.test(el[0].nodeName)) {\n            var orig_path = el[0].src;\n\n            if (new RegExp(path, 'i').test(orig_path)) return;\n\n            el[0].src = path;\n\n            return trigger(el[0].src);\n          }\n          var last_path = el.data(this.data_attr + '-last-path'),\n              self = this;\n\n          if (last_path == path) return;\n\n          if (/\\.(gif|jpg|jpeg|tiff|png)([?#].*)?/i.test(path)) {\n            $(el).css('background-image', 'url('+path+')');\n            el.data('interchange-last-path', path);\n            return trigger(path);\n          }\n\n          return $.get(path, function (response) {\n            el.html(response);\n            el.data(self.data_attr + '-last-path', path);\n            trigger();\n          });\n\n        }\n      }\n    },\n\n    init : function (scope, method, options) {\n      Foundation.inherit(this, 'throttle random_str');\n\n      this.data_attr = this.set_data_attr();\n      $.extend(true, this.settings, method, options);\n      this.bindings(method, options);\n      this.load('images');\n      this.load('nodes');\n    },\n\n    get_media_hash : function() {\n        var mediaHash='';\n        for (var queryName in this.settings.named_queries ) {\n            mediaHash += matchMedia(this.settings.named_queries[queryName]).matches.toString();\n        }\n        return mediaHash;\n    },\n\n    events : function () {\n      var self = this, prevMediaHash;\n\n      $(window)\n        .off('.interchange')\n        .on('resize.fndtn.interchange', self.throttle(function () {\n            var currMediaHash = self.get_media_hash();\n            if (currMediaHash !== prevMediaHash) {\n                self.resize();\n            }\n            prevMediaHash = currMediaHash;\n        }, 50));\n\n      return this;\n    },\n\n    resize : function () {\n      var cache = this.cache;\n\n      if(!this.images_loaded || !this.nodes_loaded) {\n        setTimeout($.proxy(this.resize, this), 50);\n        return;\n      }\n\n      for (var uuid in cache) {\n        if (cache.hasOwnProperty(uuid)) {\n          var passed = this.results(uuid, cache[uuid]);\n\n          if (passed) {\n            this.settings.directives[passed\n              .scenario[1]].call(this, passed.el, passed.scenario[0], function () {\n                if (arguments[0] instanceof Array) { \n                  var args = arguments[0];\n                } else { \n                  var args = Array.prototype.slice.call(arguments, 0);\n                }\n\n                passed.el.trigger(passed.scenario[1], args);\n              });\n          }\n        }\n      }\n\n    },\n\n    results : function (uuid, scenarios) {\n      var count = scenarios.length;\n\n      if (count > 0) {\n        var el = this.S('[' + this.add_namespace('data-uuid') + '=\"' + uuid + '\"]');\n\n        while (count--) {\n          var mq, rule = scenarios[count][2];\n          if (this.settings.named_queries.hasOwnProperty(rule)) {\n            mq = matchMedia(this.settings.named_queries[rule]);\n          } else {\n            mq = matchMedia(rule);\n          }\n          if (mq.matches) {\n            return {el: el, scenario: scenarios[count]};\n          }\n        }\n      }\n\n      return false;\n    },\n\n    load : function (type, force_update) {\n      if (typeof this['cached_' + type] === 'undefined' || force_update) {\n        this['update_' + type]();\n      }\n\n      return this['cached_' + type];\n    },\n\n    update_images : function () {\n      var images = this.S('img[' + this.data_attr + ']'),\n          count = images.length,\n          i = count,\n          loaded_count = 0,\n          data_attr = this.data_attr;\n\n      this.cache = {};\n      this.cached_images = [];\n      this.images_loaded = (count === 0);\n\n      while (i--) {\n        loaded_count++;\n        if (images[i]) {\n          var str = images[i].getAttribute(data_attr) || '';\n\n          if (str.length > 0) {\n            this.cached_images.push(images[i]);\n          }\n        }\n\n        if (loaded_count === count) {\n          this.images_loaded = true;\n          this.enhance('images');\n        }\n      }\n\n      return this;\n    },\n\n    update_nodes : function () {\n      var nodes = this.S('[' + this.data_attr + ']').not('img'),\n          count = nodes.length,\n          i = count,\n          loaded_count = 0,\n          data_attr = this.data_attr;\n\n      this.cached_nodes = [];\n      this.nodes_loaded = (count === 0);\n\n\n      while (i--) {\n        loaded_count++;\n        var str = nodes[i].getAttribute(data_attr) || '';\n\n        if (str.length > 0) {\n          this.cached_nodes.push(nodes[i]);\n        }\n\n        if(loaded_count === count) {\n          this.nodes_loaded = true;\n          this.enhance('nodes');\n        }\n      }\n\n      return this;\n    },\n\n    enhance : function (type) {\n      var i = this['cached_' + type].length;\n\n      while (i--) {\n        this.object($(this['cached_' + type][i]));\n      }\n\n      return $(window).trigger('resize').trigger('resize.fndtn.interchange');\n    },\n\n    convert_directive : function (directive) {\n\n      var trimmed = this.trim(directive);\n\n      if (trimmed.length > 0) {\n        return trimmed;\n      }\n\n      return 'replace';\n    },\n\n    parse_scenario : function (scenario) {\n      // This logic had to be made more complex since some users were using commas in the url path\n      // So we cannot simply just split on a comma\n      var directive_match = scenario[0].match(/(.+),\\s*(\\w+)\\s*$/),\n      media_query         = scenario[1];\n\n      if (directive_match) {\n        var path  = directive_match[1],\n        directive = directive_match[2];\n      }\n      else {\n        var cached_split = scenario[0].split(/,\\s*$/),\n        path             = cached_split[0],\n        directive        = '';               \n      }\n\n      return [this.trim(path), this.convert_directive(directive), this.trim(media_query)];\n    },\n\n    object : function(el) {\n      var raw_arr = this.parse_data_attr(el),\n          scenarios = [], \n          i = raw_arr.length;\n\n      if (i > 0) {\n        while (i--) {\n          var split = raw_arr[i].split(/\\((.*?)(\\))$/);\n\n          if (split.length > 1) {\n            var params = this.parse_scenario(split);\n            scenarios.push(params);\n          }\n        }\n      }\n\n      return this.store(el, scenarios);\n    },\n\n    store : function (el, scenarios) {\n      var uuid = this.random_str(),\n          current_uuid = el.data(this.add_namespace('uuid', true));\n\n      if (this.cache[current_uuid]) return this.cache[current_uuid];\n\n      el.attr(this.add_namespace('data-uuid'), uuid);\n\n      return this.cache[uuid] = scenarios;\n    },\n\n    trim : function(str) {\n\n      if (typeof str === 'string') {\n        return $.trim(str);\n      }\n\n      return str;\n    },\n\n    set_data_attr: function (init) {\n      if (init) {\n        if (this.namespace.length > 0) {\n          return this.namespace + '-' + this.settings.load_attr;\n        }\n\n        return this.settings.load_attr;\n      }\n\n      if (this.namespace.length > 0) {\n        return 'data-' + this.namespace + '-' + this.settings.load_attr;\n      }\n\n      return 'data-' + this.settings.load_attr;\n    },\n\n    parse_data_attr : function (el) {\n      var raw = el.attr(this.attr_name()).split(/\\[(.*?)\\]/),\n          i = raw.length, \n          output = [];\n\n      while (i--) {\n        if (raw[i].replace(/[\\W\\d]+/, '').length > 4) {\n          output.push(raw[i]);\n        }\n      }\n\n      return output;\n    },\n\n    reflow : function () {\n      this.load('images', true);\n      this.load('nodes', true);\n    }\n\n  };\n\n}(jQuery, window, window.document));\n",";(function ($, window, document, undefined) {\n  'use strict';\n\n  var Modernizr = Modernizr || false;\n\n  Foundation.libs.joyride = {\n    name : 'joyride',\n\n    version : '{{VERSION}}',\n\n    defaults : {\n      expose                   : false,     // turn on or off the expose feature\n      modal                    : true,      // Whether to cover page with modal during the tour\n      keyboard                 : true,      // enable left, right and esc keystrokes\n      tip_location             : 'bottom',  // 'top' or 'bottom' in relation to parent\n      nub_position             : 'auto',    // override on a per tooltip bases\n      scroll_speed             : 1500,      // Page scrolling speed in milliseconds, 0 = no scroll animation\n      scroll_animation         : 'linear',  // supports 'swing' and 'linear', extend with jQuery UI.\n      timer                    : 0,         // 0 = no timer , all other numbers = timer in milliseconds\n      start_timer_on_click     : true,      // true or false - true requires clicking the first button start the timer\n      start_offset             : 0,         // the index of the tooltip you want to start on (index of the li)\n      next_button              : true,      // true or false to control whether a next button is used\n      prev_button              : true,      // true or false to control whether a prev button is used\n      tip_animation            : 'fade',    // 'pop' or 'fade' in each tip\n      pause_after              : [],        // array of indexes where to pause the tour after\n      exposed                  : [],        // array of expose elements\n      tip_animation_fade_speed : 300,       // when tipAnimation = 'fade' this is speed in milliseconds for the transition\n      cookie_monster           : false,     // true or false to control whether cookies are used\n      cookie_name              : 'joyride', // Name the cookie you'll use\n      cookie_domain            : false,     // Will this cookie be attached to a domain, ie. '.notableapp.com'\n      cookie_expires           : 365,       // set when you would like the cookie to expire.\n      tip_container            : 'body',    // Where will the tip be attached\n      abort_on_close           : true,      // When true, the close event will not fire any callback\n      tip_location_patterns    : {\n        top: ['bottom'],\n        bottom: [], // bottom should not need to be repositioned\n        left: ['right', 'top', 'bottom'],\n        right: ['left', 'top', 'bottom']\n      },\n      post_ride_callback     : function (){},    // A method to call once the tour closes (canceled or complete)\n      post_step_callback     : function (){},    // A method to call after each step\n      pre_step_callback      : function (){},    // A method to call before each step\n      pre_ride_callback      : function (){},    // A method to call before the tour starts (passed index, tip, and cloned exposed element)\n      post_expose_callback   : function (){},    // A method to call after an element has been exposed\n      template : { // HTML segments for tip layout\n        link          : '<a href=\"#close\" class=\"joyride-close-tip\">&times;</a>',\n        timer         : '<div class=\"joyride-timer-indicator-wrap\"><span class=\"joyride-timer-indicator\"></span></div>',\n        tip           : '<div class=\"joyride-tip-guide\"><span class=\"joyride-nub\"></span></div>',\n        wrapper       : '<div class=\"joyride-content-wrapper\"></div>',\n        button        : '<a href=\"#\" class=\"small button joyride-next-tip\"></a>',\n        prev_button   : '<a href=\"#\" class=\"small button joyride-prev-tip\"></a>',\n        modal         : '<div class=\"joyride-modal-bg\"></div>',\n        expose        : '<div class=\"joyride-expose-wrapper\"></div>',\n        expose_cover  : '<div class=\"joyride-expose-cover\"></div>'\n      },\n      expose_add_class : '' // One or more space-separated class names to be added to exposed element\n    },\n\n    init : function (scope, method, options) {\n      Foundation.inherit(this, 'throttle random_str');\n\n      this.settings = this.settings || $.extend({}, this.defaults, (options || method));\n\n      this.bindings(method, options)\n    },\n\n    go_next : function() {\n      if (this.settings.$li.next().length < 1) {\n        this.end();\n      } else if (this.settings.timer > 0) {\n        clearTimeout(this.settings.automate);\n        this.hide();\n        this.show();\n        this.startTimer();\n      } else {\n        this.hide();\n        this.show();\n      }\n    },\n\n    go_prev : function() {\n      if (this.settings.$li.prev().length < 1) {\n        // Do nothing if there are no prev element\n      } else if (this.settings.timer > 0) {\n        clearTimeout(this.settings.automate);\n        this.hide();\n        this.show(null, true);\n        this.startTimer();\n      } else {\n        this.hide();\n        this.show(null, true);\n      }\n    },\n\n    events : function () {\n      var self = this;\n\n      $(this.scope)\n        .off('.joyride')\n        .on('click.fndtn.joyride', '.joyride-next-tip, .joyride-modal-bg', function (e) {\n          e.preventDefault();\n          this.go_next()\n        }.bind(this))\n        .on('click.fndtn.joyride', '.joyride-prev-tip', function (e) {\n          e.preventDefault();\n          this.go_prev();\n        }.bind(this))\n\n        .on('click.fndtn.joyride', '.joyride-close-tip', function (e) {\n          e.preventDefault();\n          this.end(this.settings.abort_on_close);\n        }.bind(this))\n\n        .on('keyup.fndtn.joyride', function(e) {\n          // Don't do anything if keystrokes are disabled\n          // or if the joyride is not being shown\n          if (!this.settings.keyboard || !this.settings.riding) return;\n\n          switch (e.which) {\n            case 39: // right arrow\n              e.preventDefault();\n              this.go_next();\n              break;\n            case 37: // left arrow\n              e.preventDefault();\n              this.go_prev();\n              break;\n            case 27: // escape\n              e.preventDefault();\n              this.end(this.settings.abort_on_close);\n          }\n        }.bind(this));\n\n      $(window)\n        .off('.joyride')\n        .on('resize.fndtn.joyride', self.throttle(function () {\n          if ($('[' + self.attr_name() + ']').length > 0 && self.settings.$next_tip && self.settings.riding) {\n            if (self.settings.exposed.length > 0) {\n              var $els = $(self.settings.exposed);\n\n              $els.each(function () {\n                var $this = $(this);\n                self.un_expose($this);\n                self.expose($this);\n              });\n            }\n\n            if (self.is_phone()) {\n              self.pos_phone();\n            } else {\n              self.pos_default(false);\n            }\n          }\n        }, 100));\n    },\n\n    start : function () {\n      var self = this,\n          $this = $('[' + this.attr_name() + ']', this.scope),\n          integer_settings = ['timer', 'scrollSpeed', 'startOffset', 'tipAnimationFadeSpeed', 'cookieExpires'],\n          int_settings_count = integer_settings.length;\n\n      if (!$this.length > 0) return;\n\n      if (!this.settings.init) this.events();\n\n      this.settings = $this.data(this.attr_name(true) + '-init');\n\n      // non configureable settings\n      this.settings.$content_el = $this;\n      this.settings.$body = $(this.settings.tip_container);\n      this.settings.body_offset = $(this.settings.tip_container).position();\n      this.settings.$tip_content = this.settings.$content_el.find('> li');\n      this.settings.paused = false;\n      this.settings.attempts = 0;\n      this.settings.riding = true;\n\n      // can we create cookies?\n      if (typeof $.cookie !== 'function') {\n        this.settings.cookie_monster = false;\n      }\n\n      // generate the tips and insert into dom.\n      if (!this.settings.cookie_monster || this.settings.cookie_monster && !$.cookie(this.settings.cookie_name)) {\n        this.settings.$tip_content.each(function (index) {\n          var $this = $(this);\n          this.settings = $.extend({}, self.defaults, self.data_options($this));\n\n          // Make sure that settings parsed from data_options are integers where necessary\n          var i = int_settings_count;\n          while (i--) {\n            self.settings[integer_settings[i]] = parseInt(self.settings[integer_settings[i]], 10);\n          }\n          self.create({$li : $this, index : index});\n        });\n\n        // show first tip\n        if (!this.settings.start_timer_on_click && this.settings.timer > 0) {\n          this.show('init');\n          this.startTimer();\n        } else {\n          this.show('init');\n        }\n\n      }\n    },\n\n    resume : function () {\n      this.set_li();\n      this.show();\n    },\n\n    tip_template : function (opts) {\n      var $blank, content;\n\n      opts.tip_class = opts.tip_class || '';\n\n      $blank = $(this.settings.template.tip).addClass(opts.tip_class);\n      content = $.trim($(opts.li).html()) +\n        this.prev_button_text(opts.prev_button_text, opts.index) +\n        this.button_text(opts.button_text) +\n        this.settings.template.link +\n        this.timer_instance(opts.index);\n\n      $blank.append($(this.settings.template.wrapper));\n      $blank.first().attr(this.add_namespace('data-index'), opts.index);\n      $('.joyride-content-wrapper', $blank).append(content);\n\n      return $blank[0];\n    },\n\n    timer_instance : function (index) {\n      var txt;\n\n      if ((index === 0 && this.settings.start_timer_on_click && this.settings.timer > 0) || this.settings.timer === 0) {\n        txt = '';\n      } else {\n        txt = $(this.settings.template.timer)[0].outerHTML;\n      }\n      return txt;\n    },\n\n    button_text : function (txt) {\n      if (this.settings.tip_settings.next_button) {\n        txt = $.trim(txt) || 'Next';\n        txt = $(this.settings.template.button).append(txt)[0].outerHTML;\n      } else {\n        txt = '';\n      }\n      return txt;\n    },\n\n    prev_button_text : function (txt, idx) {\n      if (this.settings.tip_settings.prev_button) {\n        txt = $.trim(txt) || 'Previous';\n\n        // Add the disabled class to the button if it's the first element\n        if (idx == 0)\n          txt = $(this.settings.template.prev_button).append(txt).addClass('disabled')[0].outerHTML;\n        else\n          txt = $(this.settings.template.prev_button).append(txt)[0].outerHTML;\n      } else {\n        txt = '';\n      }\n      return txt;\n    },\n\n    create : function (opts) {\n      this.settings.tip_settings = $.extend({}, this.settings, this.data_options(opts.$li));\n      var buttonText = opts.$li.attr(this.add_namespace('data-button'))\n        || opts.$li.attr(this.add_namespace('data-text')),\n          prevButtonText = opts.$li.attr(this.add_namespace('data-button-prev'))\n        || opts.$li.attr(this.add_namespace('data-prev-text')),\n        tipClass = opts.$li.attr('class'),\n        $tip_content = $(this.tip_template({\n          tip_class : tipClass,\n          index : opts.index,\n          button_text : buttonText,\n          prev_button_text : prevButtonText,\n          li : opts.$li\n        }));\n\n      $(this.settings.tip_container).append($tip_content);\n    },\n\n    show : function (init, is_prev) {\n      var $timer = null;\n\n      // are we paused?\n      if (this.settings.$li === undefined\n        || ($.inArray(this.settings.$li.index(), this.settings.pause_after) === -1)) {\n\n        // don't go to the next li if the tour was paused\n        if (this.settings.paused) {\n          this.settings.paused = false;\n        } else {\n          this.set_li(init, is_prev);\n        }\n\n        this.settings.attempts = 0;\n\n        if (this.settings.$li.length && this.settings.$target.length > 0) {\n          if (init) { //run when we first start\n            this.settings.pre_ride_callback(this.settings.$li.index(), this.settings.$next_tip);\n            if (this.settings.modal) {\n              this.show_modal();\n            }\n          }\n\n          this.settings.pre_step_callback(this.settings.$li.index(), this.settings.$next_tip);\n\n          if (this.settings.modal && this.settings.expose) {\n            this.expose();\n          }\n\n          this.settings.tip_settings = $.extend({}, this.settings, this.data_options(this.settings.$li));\n\n          this.settings.timer = parseInt(this.settings.timer, 10);\n\n          this.settings.tip_settings.tip_location_pattern = this.settings.tip_location_patterns[this.settings.tip_settings.tip_location];\n\n          // scroll if not modal\n          if (!/body/i.test(this.settings.$target.selector)) {\n            this.scroll_to();\n          }\n\n          if (this.is_phone()) {\n            this.pos_phone(true);\n          } else {\n            this.pos_default(true);\n          }\n\n          $timer = this.settings.$next_tip.find('.joyride-timer-indicator');\n\n          if (/pop/i.test(this.settings.tip_animation)) {\n\n            $timer.width(0);\n\n            if (this.settings.timer > 0) {\n\n              this.settings.$next_tip.show();\n\n              setTimeout(function () {\n                $timer.animate({\n                  width: $timer.parent().width()\n                }, this.settings.timer, 'linear');\n              }.bind(this), this.settings.tip_animation_fade_speed);\n\n            } else {\n              this.settings.$next_tip.show();\n\n            }\n\n\n          } else if (/fade/i.test(this.settings.tip_animation)) {\n\n            $timer.width(0);\n\n            if (this.settings.timer > 0) {\n\n              this.settings.$next_tip\n                .fadeIn(this.settings.tip_animation_fade_speed)\n                .show();\n\n              setTimeout(function () {\n                $timer.animate({\n                  width: $timer.parent().width()\n                }, this.settings.timer, 'linear');\n              }.bind(this), this.settings.tip_animation_fade_speed);\n\n            } else {\n              this.settings.$next_tip.fadeIn(this.settings.tip_animation_fade_speed);\n            }\n          }\n\n          this.settings.$current_tip = this.settings.$next_tip;\n\n        // skip non-existant targets\n        } else if (this.settings.$li && this.settings.$target.length < 1) {\n\n          this.show(init, is_prev);\n\n        } else {\n\n          this.end();\n\n        }\n      } else {\n\n        this.settings.paused = true;\n\n      }\n\n    },\n\n    is_phone : function () {\n      return matchMedia(Foundation.media_queries.small).matches &&\n        !matchMedia(Foundation.media_queries.medium).matches;\n    },\n\n    hide : function () {\n      if (this.settings.modal && this.settings.expose) {\n        this.un_expose();\n      }\n\n      if (!this.settings.modal) {\n        $('.joyride-modal-bg').hide();\n      }\n\n      // Prevent scroll bouncing...wait to remove from layout\n      this.settings.$current_tip.css('visibility', 'hidden');\n      setTimeout($.proxy(function() {\n        this.hide();\n        this.css('visibility', 'visible');\n      }, this.settings.$current_tip), 0);\n      this.settings.post_step_callback(this.settings.$li.index(),\n        this.settings.$current_tip);\n    },\n\n    set_li : function (init, is_prev) {\n      if (init) {\n        this.settings.$li = this.settings.$tip_content.eq(this.settings.start_offset);\n        this.set_next_tip();\n        this.settings.$current_tip = this.settings.$next_tip;\n      } else {\n        if (is_prev)\n          this.settings.$li = this.settings.$li.prev();\n        else\n          this.settings.$li = this.settings.$li.next();\n        this.set_next_tip();\n      }\n\n      this.set_target();\n    },\n\n    set_next_tip : function () {\n      this.settings.$next_tip = $('.joyride-tip-guide').eq(this.settings.$li.index());\n      this.settings.$next_tip.data('closed', '');\n    },\n\n    set_target : function () {\n      var cl = this.settings.$li.attr(this.add_namespace('data-class')),\n          id = this.settings.$li.attr(this.add_namespace('data-id')),\n          $sel = function () {\n            if (id) {\n              return $(document.getElementById(id));\n            } else if (cl) {\n              return $('.' + cl).first();\n            } else {\n              return $('body');\n            }\n          };\n\n      this.settings.$target = $sel();\n    },\n\n    scroll_to : function () {\n      var window_half, tipOffset;\n\n      window_half = $(window).height() / 2;\n      tipOffset = Math.ceil(this.settings.$target.offset().top - window_half + this.settings.$next_tip.outerHeight());\n\n      if (tipOffset != 0) {\n        $('html, body').stop().animate({\n          scrollTop: tipOffset\n        }, this.settings.scroll_speed, 'swing');\n      }\n    },\n\n    paused : function () {\n      return ($.inArray((this.settings.$li.index() + 1), this.settings.pause_after) === -1);\n    },\n\n    restart : function () {\n      this.hide();\n      this.settings.$li = undefined;\n      this.show('init');\n    },\n\n    pos_default : function (init) {\n      var $nub = this.settings.$next_tip.find('.joyride-nub'),\n          nub_width = Math.ceil($nub.outerWidth() / 2),\n          nub_height = Math.ceil($nub.outerHeight() / 2),\n          toggle = init || false;\n\n      // tip must not be \"display: none\" to calculate position\n      if (toggle) {\n        this.settings.$next_tip.css('visibility', 'hidden');\n        this.settings.$next_tip.show();\n      }\n\n      if (!/body/i.test(this.settings.$target.selector)) {\n      \t  var topAdjustment = this.settings.tip_settings.tipAdjustmentY ? parseInt(this.settings.tip_settings.tipAdjustmentY) : 0,\n\t\t\t        leftAdjustment = this.settings.tip_settings.tipAdjustmentX ? parseInt(this.settings.tip_settings.tipAdjustmentX) : 0;\n\n          if (this.bottom()) {\n            if (this.rtl) {\n              this.settings.$next_tip.css({\n                top: (this.settings.$target.offset().top + nub_height + this.settings.$target.outerHeight() + topAdjustment),\n                left: this.settings.$target.offset().left + this.settings.$target.outerWidth() - this.settings.$next_tip.outerWidth() + leftAdjustment});\n            } else {\n              this.settings.$next_tip.css({\n                top: (this.settings.$target.offset().top + nub_height + this.settings.$target.outerHeight() + topAdjustment),\n                left: this.settings.$target.offset().left + leftAdjustment});\n            }\n\n            this.nub_position($nub, this.settings.tip_settings.nub_position, 'top');\n\n          } else if (this.top()) {\n            if (this.rtl) {\n              this.settings.$next_tip.css({\n                top: (this.settings.$target.offset().top - this.settings.$next_tip.outerHeight() - nub_height + topAdjustment),\n                left: this.settings.$target.offset().left + this.settings.$target.outerWidth() - this.settings.$next_tip.outerWidth()});\n            } else {\n              this.settings.$next_tip.css({\n                top: (this.settings.$target.offset().top - this.settings.$next_tip.outerHeight() - nub_height + topAdjustment),\n                left: this.settings.$target.offset().left + leftAdjustment});\n            }\n\n            this.nub_position($nub, this.settings.tip_settings.nub_position, 'bottom');\n\n          } else if (this.right()) {\n\n            this.settings.$next_tip.css({\n              top: this.settings.$target.offset().top + topAdjustment,\n              left: (this.settings.$target.outerWidth() + this.settings.$target.offset().left + nub_width + leftAdjustment)});\n\n            this.nub_position($nub, this.settings.tip_settings.nub_position, 'left');\n\n          } else if (this.left()) {\n\n            this.settings.$next_tip.css({\n              top: this.settings.$target.offset().top + topAdjustment,\n              left: (this.settings.$target.offset().left - this.settings.$next_tip.outerWidth() - nub_width + leftAdjustment)});\n\n            this.nub_position($nub, this.settings.tip_settings.nub_position, 'right');\n\n          }\n\n          if (!this.visible(this.corners(this.settings.$next_tip)) && this.settings.attempts < this.settings.tip_settings.tip_location_pattern.length) {\n\n            $nub.removeClass('bottom')\n              .removeClass('top')\n              .removeClass('right')\n              .removeClass('left');\n\n            this.settings.tip_settings.tip_location = this.settings.tip_settings.tip_location_pattern[this.settings.attempts];\n\n            this.settings.attempts++;\n\n            this.pos_default();\n\n          }\n\n      } else if (this.settings.$li.length) {\n\n        this.pos_modal($nub);\n\n      }\n\n      if (toggle) {\n        this.settings.$next_tip.hide();\n        this.settings.$next_tip.css('visibility', 'visible');\n      }\n\n    },\n\n    pos_phone : function (init) {\n      var tip_height = this.settings.$next_tip.outerHeight(),\n          tip_offset = this.settings.$next_tip.offset(),\n          target_height = this.settings.$target.outerHeight(),\n          $nub = $('.joyride-nub', this.settings.$next_tip),\n          nub_height = Math.ceil($nub.outerHeight() / 2),\n          toggle = init || false;\n\n      $nub.removeClass('bottom')\n        .removeClass('top')\n        .removeClass('right')\n        .removeClass('left');\n\n      if (toggle) {\n        this.settings.$next_tip.css('visibility', 'hidden');\n        this.settings.$next_tip.show();\n      }\n\n      if (!/body/i.test(this.settings.$target.selector)) {\n\n        if (this.top()) {\n\n            this.settings.$next_tip.offset({top: this.settings.$target.offset().top - tip_height - nub_height});\n            $nub.addClass('bottom');\n\n        } else {\n\n          this.settings.$next_tip.offset({top: this.settings.$target.offset().top + target_height + nub_height});\n          $nub.addClass('top');\n\n        }\n\n      } else if (this.settings.$li.length) {\n        this.pos_modal($nub);\n      }\n\n      if (toggle) {\n        this.settings.$next_tip.hide();\n        this.settings.$next_tip.css('visibility', 'visible');\n      }\n    },\n\n    pos_modal : function ($nub) {\n      this.center();\n      $nub.hide();\n\n      this.show_modal();\n    },\n\n    show_modal : function () {\n      if (!this.settings.$next_tip.data('closed')) {\n        var joyridemodalbg =  $('.joyride-modal-bg');\n        if (joyridemodalbg.length < 1) {\n          $('body').append(this.settings.template.modal).show();\n        }\n\n        if (/pop/i.test(this.settings.tip_animation)) {\n            joyridemodalbg.show();\n        } else {\n            joyridemodalbg.fadeIn(this.settings.tip_animation_fade_speed);\n        }\n      }\n    },\n\n    expose : function () {\n      var expose,\n          exposeCover,\n          el,\n          origCSS,\n          origClasses,\n          randId = 'expose-' + this.random_str(6);\n\n      if (arguments.length > 0 && arguments[0] instanceof $) {\n        el = arguments[0];\n      } else if(this.settings.$target && !/body/i.test(this.settings.$target.selector)){\n        el = this.settings.$target;\n      }  else {\n        return false;\n      }\n\n      if(el.length < 1){\n        if(window.console){\n          console.error('element not valid', el);\n        }\n        return false;\n      }\n\n      expose = $(this.settings.template.expose);\n      this.settings.$body.append(expose);\n      expose.css({\n        top: el.offset().top,\n        left: el.offset().left,\n        width: el.outerWidth(true),\n        height: el.outerHeight(true)\n      });\n\n      exposeCover = $(this.settings.template.expose_cover);\n\n      origCSS = {\n        zIndex: el.css('z-index'),\n        position: el.css('position')\n      };\n\n      origClasses = el.attr('class') == null ? '' : el.attr('class');\n\n      el.css('z-index',parseInt(expose.css('z-index'))+1);\n\n      if (origCSS.position == 'static') {\n        el.css('position','relative');\n      }\n\n      el.data('expose-css',origCSS);\n      el.data('orig-class', origClasses);\n      el.attr('class', origClasses + ' ' + this.settings.expose_add_class);\n\n      exposeCover.css({\n        top: el.offset().top,\n        left: el.offset().left,\n        width: el.outerWidth(true),\n        height: el.outerHeight(true)\n      });\n\n      if (this.settings.modal) this.show_modal();\n\n      this.settings.$body.append(exposeCover);\n      expose.addClass(randId);\n      exposeCover.addClass(randId);\n      el.data('expose', randId);\n      this.settings.post_expose_callback(this.settings.$li.index(), this.settings.$next_tip, el);\n      this.add_exposed(el);\n    },\n\n    un_expose : function () {\n      var exposeId,\n          el,\n          expose ,\n          origCSS,\n          origClasses,\n          clearAll = false;\n\n      if (arguments.length > 0 && arguments[0] instanceof $) {\n        el = arguments[0];\n      } else if(this.settings.$target && !/body/i.test(this.settings.$target.selector)){\n        el = this.settings.$target;\n      }  else {\n        return false;\n      }\n\n      if(el.length < 1){\n        if (window.console) {\n          console.error('element not valid', el);\n        }\n        return false;\n      }\n\n      exposeId = el.data('expose');\n      expose = $('.' + exposeId);\n\n      if (arguments.length > 1) {\n        clearAll = arguments[1];\n      }\n\n      if (clearAll === true) {\n        $('.joyride-expose-wrapper,.joyride-expose-cover').remove();\n      } else {\n        expose.remove();\n      }\n\n      origCSS = el.data('expose-css');\n\n      if (origCSS.zIndex == 'auto') {\n        el.css('z-index', '');\n      } else {\n        el.css('z-index', origCSS.zIndex);\n      }\n\n      if (origCSS.position != el.css('position')) {\n        if(origCSS.position == 'static') {// this is default, no need to set it.\n          el.css('position', '');\n        } else {\n          el.css('position', origCSS.position);\n        }\n      }\n\n      origClasses = el.data('orig-class');\n      el.attr('class', origClasses);\n      el.removeData('orig-classes');\n\n      el.removeData('expose');\n      el.removeData('expose-z-index');\n      this.remove_exposed(el);\n    },\n\n    add_exposed: function(el){\n      this.settings.exposed = this.settings.exposed || [];\n      if (el instanceof $ || typeof el === 'object') {\n        this.settings.exposed.push(el[0]);\n      } else if (typeof el == 'string') {\n        this.settings.exposed.push(el);\n      }\n    },\n\n    remove_exposed: function(el){\n      var search, i;\n      if (el instanceof $) {\n        search = el[0]\n      } else if (typeof el == 'string'){\n        search = el;\n      }\n\n      this.settings.exposed = this.settings.exposed || [];\n      i = this.settings.exposed.length;\n\n      while (i--) {\n        if (this.settings.exposed[i] == search) {\n          this.settings.exposed.splice(i, 1);\n          return;\n        }\n      }\n    },\n\n    center : function () {\n      var $w = $(window);\n\n      this.settings.$next_tip.css({\n        top : ((($w.height() - this.settings.$next_tip.outerHeight()) / 2) + $w.scrollTop()),\n        left : ((($w.width() - this.settings.$next_tip.outerWidth()) / 2) + $w.scrollLeft())\n      });\n\n      return true;\n    },\n\n    bottom : function () {\n      return /bottom/i.test(this.settings.tip_settings.tip_location);\n    },\n\n    top : function () {\n      return /top/i.test(this.settings.tip_settings.tip_location);\n    },\n\n    right : function () {\n      return /right/i.test(this.settings.tip_settings.tip_location);\n    },\n\n    left : function () {\n      return /left/i.test(this.settings.tip_settings.tip_location);\n    },\n\n    corners : function (el) {\n      var w = $(window),\n          window_half = w.height() / 2,\n          //using this to calculate since scroll may not have finished yet.\n          tipOffset = Math.ceil(this.settings.$target.offset().top - window_half + this.settings.$next_tip.outerHeight()),\n          right = w.width() + w.scrollLeft(),\n          offsetBottom =  w.height() + tipOffset,\n          bottom = w.height() + w.scrollTop(),\n          top = w.scrollTop();\n\n      if (tipOffset < top) {\n        if (tipOffset < 0) {\n          top = 0;\n        } else {\n          top = tipOffset;\n        }\n      }\n\n      if (offsetBottom > bottom) {\n        bottom = offsetBottom;\n      }\n\n      return [\n        el.offset().top < top,\n        right < el.offset().left + el.outerWidth(),\n        bottom < el.offset().top + el.outerHeight(),\n        w.scrollLeft() > el.offset().left\n      ];\n    },\n\n    visible : function (hidden_corners) {\n      var i = hidden_corners.length;\n\n      while (i--) {\n        if (hidden_corners[i]) return false;\n      }\n\n      return true;\n    },\n\n    nub_position : function (nub, pos, def) {\n      if (pos === 'auto') {\n        nub.addClass(def);\n      } else {\n        nub.addClass(pos);\n      }\n    },\n\n    startTimer : function () {\n      if (this.settings.$li.length) {\n        this.settings.automate = setTimeout(function () {\n          this.hide();\n          this.show();\n          this.startTimer();\n        }.bind(this), this.settings.timer);\n      } else {\n        clearTimeout(this.settings.automate);\n      }\n    },\n\n    end : function (abort) {\n      if (this.settings.cookie_monster) {\n        $.cookie(this.settings.cookie_name, 'ridden', { expires: this.settings.cookie_expires, domain: this.settings.cookie_domain });\n      }\n\n      if (this.settings.timer > 0) {\n        clearTimeout(this.settings.automate);\n      }\n\n      if (this.settings.modal && this.settings.expose) {\n        this.un_expose();\n      }\n\n      // Unplug keystrokes listener\n      $(this.scope).off('keyup.joyride')\n\n      this.settings.$next_tip.data('closed', true);\n      this.settings.riding = false;\n\n      $('.joyride-modal-bg').hide();\n      this.settings.$current_tip.hide();\n\n      if (typeof abort === 'undefined' || abort === false) {\n        this.settings.post_step_callback(this.settings.$li.index(), this.settings.$current_tip);\n        this.settings.post_ride_callback(this.settings.$li.index(), this.settings.$current_tip);\n      }\n\n      $('.joyride-tip-guide').remove();\n    },\n\n    off : function () {\n      $(this.scope).off('.joyride');\n      $(window).off('.joyride');\n      $('.joyride-close-tip, .joyride-next-tip, .joyride-modal-bg').off('.joyride');\n      $('.joyride-tip-guide, .joyride-modal-bg').remove();\n      clearTimeout(this.settings.automate);\n      this.settings = {};\n    },\n\n    reflow : function () {}\n  };\n}(jQuery, window, window.document));\n",";(function ($, window, document, undefined) {\n  'use strict';\n\n  Foundation.libs['magellan-expedition'] = {\n    name : 'magellan-expedition',\n\n    version : '{{VERSION}}',\n\n    settings : {\n      active_class: 'active',\n      threshold: 0, // pixels from the top of the expedition for it to become fixes\n      destination_threshold: 20, // pixels from the top of destination for it to be considered active\n      throttle_delay: 30, // calculation throttling to increase framerate\n      fixed_top: 0, // top distance in pixels assigend to the fixed element on scroll\n      offset_by_height: true // whether to offset the destination by the expedition height. Usually you want this to be true, unless your expedition is on the side.\n    },\n\n    init : function (scope, method, options) {\n      Foundation.inherit(this, 'throttle');\n      this.bindings(method, options);\n    },\n\n    events : function () {\n      var self = this,\n          S = self.S,\n          settings = self.settings;\n\n      // initialize expedition offset\n      self.set_expedition_position();\n\n      S(self.scope)\n        .off('.magellan')\n        .on('click.fndtn.magellan', '[' + self.add_namespace('data-magellan-arrival') + '] a[href^=\"#\"]', function (e) {\n          e.preventDefault();\n          var expedition = $(this).closest('[' + self.attr_name() + ']'),\n              settings = expedition.data('magellan-expedition-init'),\n              hash = this.hash.split('#').join(''),\n              target = $('a[name=\"'+hash+'\"]');\n\n          if (target.length === 0) {\n            target = $('#'+hash);\n\n          }\n\n\n          // Account for expedition height if fixed position\n          var scroll_top = target.offset().top - settings.destination_threshold + 1;\n          if (settings.offset_by_height) {\n            scroll_top = scroll_top - expedition.outerHeight();\n          }\n\n          $('html, body').stop().animate({\n            'scrollTop': scroll_top\n          }, 700, 'swing', function () {\n            if(history.pushState) {\n              history.pushState(null, null, '#'+hash);\n            }\n            else {\n              location.hash = '#'+hash;\n            }\n          });\n        })\n        .on('scroll.fndtn.magellan', self.throttle(this.check_for_arrivals.bind(this), settings.throttle_delay));\n\n      $(window)\n        .on('resize.fndtn.magellan', self.throttle(this.set_expedition_position.bind(this), settings.throttle_delay));\n    },\n\n    check_for_arrivals : function() {\n      var self = this;\n      self.update_arrivals();\n      self.update_expedition_positions();\n    },\n\n    set_expedition_position : function() {\n      var self = this;\n      $('[' + this.attr_name() + '=fixed]', self.scope).each(function(idx, el) {\n        var expedition = $(this),\n            settings = expedition.data('magellan-expedition-init'),\n            styles = expedition.attr('styles'), // save styles\n            top_offset, fixed_top;\n\n        expedition.attr('style', '');\n        top_offset = expedition.offset().top + settings.threshold;\n\n        //set fixed-top by attribute\n        fixed_top = parseInt(expedition.data('magellan-fixed-top'));\n        if(!isNaN(fixed_top))\n            self.settings.fixed_top = fixed_top;\n\n        expedition.data(self.data_attr('magellan-top-offset'), top_offset);\n        expedition.attr('style', styles);\n      });\n    },\n\n    update_expedition_positions : function() {\n      var self = this,\n          window_top_offset = $(window).scrollTop();\n\n      $('[' + this.attr_name() + '=fixed]', self.scope).each(function() {\n        var expedition = $(this),\n            settings = expedition.data('magellan-expedition-init'),\n            styles = expedition.attr('style'), // save styles\n            top_offset = expedition.data('magellan-top-offset');\n\n        //scroll to the top distance\n        if (window_top_offset+self.settings.fixed_top >= top_offset) {\n          // Placeholder allows height calculations to be consistent even when\n          // appearing to switch between fixed/non-fixed placement\n          var placeholder = expedition.prev('[' + self.add_namespace('data-magellan-expedition-clone') + ']');\n          if (placeholder.length === 0) {\n            placeholder = expedition.clone();\n            placeholder.removeAttr(self.attr_name());\n            placeholder.attr(self.add_namespace('data-magellan-expedition-clone'),'');\n            expedition.before(placeholder);\n          }\n          expedition.css({position:'fixed', top: settings.fixed_top}).addClass('fixed');\n        } else {\n          expedition.prev('[' + self.add_namespace('data-magellan-expedition-clone') + ']').remove();\n          expedition.attr('style',styles).css('position','').css('top','').removeClass('fixed');\n        }\n      });\n    },\n\n    update_arrivals : function() {\n      var self = this,\n          window_top_offset = $(window).scrollTop();\n\n      $('[' + this.attr_name() + ']', self.scope).each(function() {\n        var expedition = $(this),\n            settings = expedition.data(self.attr_name(true) + '-init'),\n            offsets = self.offsets(expedition, window_top_offset),\n            arrivals = expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']'),\n            active_item = false;\n        offsets.each(function(idx, item) {\n          if (item.viewport_offset >= item.top_offset) {\n            var arrivals = expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']');\n            arrivals.not(item.arrival).removeClass(settings.active_class);\n            item.arrival.addClass(settings.active_class);\n            active_item = true;\n            return true;\n          }\n        });\n\n        if (!active_item) arrivals.removeClass(settings.active_class);\n      });\n    },\n\n    offsets : function(expedition, window_offset) {\n      var self = this,\n          settings = expedition.data(self.attr_name(true) + '-init'),\n          viewport_offset = window_offset;\n\n      return expedition.find('[' + self.add_namespace('data-magellan-arrival') + ']').map(function(idx, el) {\n        var name = $(this).data(self.data_attr('magellan-arrival')),\n            dest = $('[' + self.add_namespace('data-magellan-destination') + '=' + name + ']');\n        if (dest.length > 0) {\n          var top_offset = dest.offset().top - settings.destination_threshold;\n          if (settings.offset_by_height) {\n            top_offset = top_offset - expedition.outerHeight();\n          }\n          top_offset = Math.floor(top_offset);\n          return {\n            destination : dest,\n            arrival : $(this),\n            top_offset : top_offset,\n            viewport_offset : viewport_offset\n          }\n        }\n      }).sort(function(a, b) {\n        if (a.top_offset < b.top_offset) return -1;\n        if (a.top_offset > b.top_offset) return 1;\n        return 0;\n      });\n    },\n\n    data_attr: function (str) {\n      if (this.namespace.length > 0) {\n        return this.namespace + '-' + str;\n      }\n\n      return str;\n    },\n\n    off : function () {\n      this.S(this.scope).off('.magellan');\n      this.S(window).off('.magellan');\n    },\n\n    reflow : function () {\n      var self = this;\n      // remove placeholder expeditions used for height calculation purposes\n      $('[' + self.add_namespace('data-magellan-expedition-clone') + ']', self.scope).remove();\n    }\n  };\n}(jQuery, window, window.document));\n",";(function ($, window, document, undefined) {\n  'use strict';\n\n  Foundation.libs.offcanvas = {\n    name : 'offcanvas',\n\n    version : '{{VERSION}}',\n\n    settings : {\n      open_method: 'move',\n      close_on_click: false\n    },\n\n    init : function (scope, method, options) {\n      this.bindings(method, options);\n    },\n\n    events : function () {\n      var self = this,\n          S = self.S,\n          move_class = '',\n          right_postfix = '',\n          left_postfix = '';\n\n      if (this.settings.open_method === 'move') {\n        move_class = 'move-';\n        right_postfix = 'right';\n        left_postfix = 'left';\n      } else if (this.settings.open_method === 'overlap_single') {\n        move_class = 'offcanvas-overlap-';\n        right_postfix = 'right';\n        left_postfix = 'left';\n      } else if (this.settings.open_method === 'overlap') {\n        move_class = 'offcanvas-overlap';\n      }\n\n      S(this.scope).off('.offcanvas')\n        .on('click.fndtn.offcanvas', '.left-off-canvas-toggle', function (e) {\n          self.click_toggle_class(e, move_class + right_postfix);\n          if (self.settings.open_method !== 'overlap'){\n            S('.left-submenu').removeClass(move_class + right_postfix);\n          }\n          $('.left-off-canvas-toggle').attr('aria-expanded', 'true');\n        })\n        .on('click.fndtn.offcanvas', '.left-off-canvas-menu a', function (e) {\n          var settings = self.get_settings(e);\n          var parent = S(this).parent();\n\n          if(settings.close_on_click && !parent.hasClass('has-submenu') && !parent.hasClass('back')){\n            self.hide.call(self, move_class + right_postfix, self.get_wrapper(e));\n            parent.parent().removeClass(move_class + right_postfix);\n          }else if(S(this).parent().hasClass('has-submenu')){\n            e.preventDefault();\n            S(this).siblings('.left-submenu').toggleClass(move_class + right_postfix);\n          }else if(parent.hasClass('back')){\n            e.preventDefault();\n            parent.parent().removeClass(move_class + right_postfix);\n          }\n          $('.left-off-canvas-toggle').attr('aria-expanded', 'true');\n        })\n        .on('click.fndtn.offcanvas', '.right-off-canvas-toggle', function (e) {\n          self.click_toggle_class(e, move_class + left_postfix);\n          if (self.settings.open_method !== 'overlap'){\n            S('.right-submenu').removeClass(move_class + left_postfix);\n          }\n          $('.right-off-canvas-toggle').attr('aria-expanded', 'true');\n        })\n        .on('click.fndtn.offcanvas', '.right-off-canvas-menu a', function (e) {\n          var settings = self.get_settings(e);\n          var parent = S(this).parent();\n\n          if(settings.close_on_click && !parent.hasClass('has-submenu') && !parent.hasClass('back')){\n            self.hide.call(self, move_class + left_postfix, self.get_wrapper(e));\n            parent.parent().removeClass(move_class + left_postfix);\n          }else if(S(this).parent().hasClass('has-submenu')){\n            e.preventDefault();\n            S(this).siblings('.right-submenu').toggleClass(move_class + left_postfix);\n          }else if(parent.hasClass('back')){\n            e.preventDefault();\n            parent.parent().removeClass(move_class + left_postfix);\n          }\n          $('.right-off-canvas-toggle').attr('aria-expanded', 'true');\n        })\n        .on('click.fndtn.offcanvas', '.exit-off-canvas', function (e) {\n          self.click_remove_class(e, move_class + left_postfix);\n          S('.right-submenu').removeClass(move_class + left_postfix);\n          if (right_postfix){\n            self.click_remove_class(e, move_class + right_postfix);\n            S('.left-submenu').removeClass(move_class + left_postfix);\n          }\n          $('.right-off-canvas-toggle').attr('aria-expanded', 'true');\n        })\n        .on('click.fndtn.offcanvas', '.exit-off-canvas', function (e) {\n          self.click_remove_class(e, move_class + left_postfix);\n          $('.left-off-canvas-toggle').attr('aria-expanded', 'false');\n          if (right_postfix) {\n            self.click_remove_class(e, move_class + right_postfix);\n            $('.right-off-canvas-toggle').attr('aria-expanded', 'false');\n          }\n        });\n    },\n\n    toggle: function(class_name, $off_canvas) {\n      $off_canvas = $off_canvas || this.get_wrapper();\n      if ($off_canvas.is('.' + class_name)) {\n        this.hide(class_name, $off_canvas);\n      } else {\n        this.show(class_name, $off_canvas);\n      }\n    },\n\n    show: function(class_name, $off_canvas) {\n      $off_canvas = $off_canvas || this.get_wrapper();\n      $off_canvas.trigger('open').trigger('open.fndtn.offcanvas');\n      $off_canvas.addClass(class_name);\n    },\n\n    hide: function(class_name, $off_canvas) {\n      $off_canvas = $off_canvas || this.get_wrapper();\n      $off_canvas.trigger('close').trigger('close.fndtn.offcanvas');\n      $off_canvas.removeClass(class_name);\n    },\n\n    click_toggle_class: function(e, class_name) {\n      e.preventDefault();\n      var $off_canvas = this.get_wrapper(e);\n      this.toggle(class_name, $off_canvas);\n    },\n\n    click_remove_class: function(e, class_name) {\n      e.preventDefault();\n      var $off_canvas = this.get_wrapper(e);\n      this.hide(class_name, $off_canvas);\n    },\n\n    get_settings: function(e) {\n      var offcanvas  = this.S(e.target).closest('[' + this.attr_name() + ']');\n      return offcanvas.data(this.attr_name(true) + '-init') || this.settings;\n    },\n\n    get_wrapper: function(e) {\n      var $off_canvas = this.S(e ? e.target : this.scope).closest('.off-canvas-wrap');\n\n      if ($off_canvas.length === 0) {\n        $off_canvas = this.S('.off-canvas-wrap');\n      }\n      return $off_canvas;\n    },\n\n    reflow : function () {}\n  };\n}(jQuery, window, window.document));\n",";(function ($, window, document, undefined) {\n  'use strict';\n\n  var noop = function() {};\n\n  var Orbit = function(el, settings) {\n    // Don't reinitialize plugin\n    if (el.hasClass(settings.slides_container_class)) {\n      return this;\n    }\n\n    var self = this,\n        container,\n        slides_container = el,\n        number_container,\n        bullets_container,\n        timer_container,\n        idx = 0,\n        animate,\n        timer,\n        locked = false,\n        adjust_height_after = false;\n\n\n    self.slides = function() {\n      return slides_container.children(settings.slide_selector);\n    };\n\n    self.slides().first().addClass(settings.active_slide_class);\n\n    self.update_slide_number = function(index) {\n      if (settings.slide_number) {\n        number_container.find('span:first').text(parseInt(index)+1);\n        number_container.find('span:last').text(self.slides().length);\n      }\n      if (settings.bullets) {\n        bullets_container.children().removeClass(settings.bullets_active_class);\n        $(bullets_container.children().get(index)).addClass(settings.bullets_active_class);\n      }\n    };\n\n    self.update_active_link = function(index) {\n      var link = $('[data-orbit-link=\"'+self.slides().eq(index).attr('data-orbit-slide')+'\"]');\n      link.siblings().removeClass(settings.bullets_active_class);\n      link.addClass(settings.bullets_active_class);\n    };\n\n    self.build_markup = function() {\n      slides_container.wrap('<div class=\"'+settings.container_class+'\"></div>');\n      container = slides_container.parent();\n      slides_container.addClass(settings.slides_container_class);\n\n      if (settings.stack_on_small) {\n        container.addClass(settings.stack_on_small_class);\n      }\n\n      if (settings.navigation_arrows) {\n        container.append($('<a href=\"#\"><span></span></a>').addClass(settings.prev_class));\n        container.append($('<a href=\"#\"><span></span></a>').addClass(settings.next_class));\n      }\n\n      if (settings.timer) {\n        timer_container = $('<div>').addClass(settings.timer_container_class);\n        timer_container.append('<span>');\n        timer_container.append($('<div>').addClass(settings.timer_progress_class));\n        timer_container.addClass(settings.timer_paused_class);\n        container.append(timer_container);\n      }\n\n      if (settings.slide_number) {\n        number_container = $('<div>').addClass(settings.slide_number_class);\n        number_container.append('<span></span> ' + settings.slide_number_text + ' <span></span>');\n        container.append(number_container);\n      }\n\n      if (settings.bullets) {\n        bullets_container = $('<ol>').addClass(settings.bullets_container_class);\n        container.append(bullets_container);\n        bullets_container.wrap('<div class=\"orbit-bullets-container\"></div>');\n        self.slides().each(function(idx, el) {\n          var bullet = $('<li>').attr('data-orbit-slide', idx).on('click', self.link_bullet);;\n          bullets_container.append(bullet);\n        });\n      }\n\n    };\n\n    self._goto = function(next_idx, start_timer) {\n      // if (locked) {return false;}\n      if (next_idx === idx) {return false;}\n      if (typeof timer === 'object') {timer.restart();}\n      var slides = self.slides();\n\n      var dir = 'next';\n      locked = true;\n      if (next_idx < idx) {dir = 'prev';}\n      if (next_idx >= slides.length) {\n        if (!settings.circular) return false;\n        next_idx = 0;\n      } else if (next_idx < 0) {\n        if (!settings.circular) return false;\n        next_idx = slides.length - 1;\n      }\n\n      var current = $(slides.get(idx));\n      var next = $(slides.get(next_idx));\n\n      current.css('zIndex', 2);\n      current.removeClass(settings.active_slide_class);\n      next.css('zIndex', 4).addClass(settings.active_slide_class);\n\n      slides_container.trigger('before-slide-change.fndtn.orbit');\n      settings.before_slide_change();\n      self.update_active_link(next_idx);\n\n      var callback = function() {\n        var unlock = function() {\n          idx = next_idx;\n          locked = false;\n          if (start_timer === true) {timer = self.create_timer(); timer.start();}\n          self.update_slide_number(idx);\n          slides_container.trigger('after-slide-change.fndtn.orbit',[{slide_number: idx, total_slides: slides.length}]);\n          settings.after_slide_change(idx, slides.length);\n        };\n        if (slides_container.height() != next.height() && settings.variable_height) {\n          slides_container.animate({'height': next.height()}, 250, 'linear', unlock);\n        } else {\n          unlock();\n        }\n      };\n\n      if (slides.length === 1) {callback(); return false;}\n\n      var start_animation = function() {\n        if (dir === 'next') {animate.next(current, next, callback);}\n        if (dir === 'prev') {animate.prev(current, next, callback);}\n      };\n\n      if (next.height() > slides_container.height() && settings.variable_height) {\n        slides_container.animate({'height': next.height()}, 250, 'linear', start_animation);\n      } else {\n        start_animation();\n      }\n    };\n\n    self.next = function(e) {\n      e.stopImmediatePropagation();\n      e.preventDefault();\n      self._goto(idx + 1);\n    };\n\n    self.prev = function(e) {\n      e.stopImmediatePropagation();\n      e.preventDefault();\n      self._goto(idx - 1);\n    };\n\n    self.link_custom = function(e) {\n      e.preventDefault();\n      var link = $(this).attr('data-orbit-link');\n      if ((typeof link === 'string') && (link = $.trim(link)) != '') {\n        var slide = container.find('[data-orbit-slide='+link+']');\n        if (slide.index() != -1) {self._goto(slide.index());}\n      }\n    };\n\n    self.link_bullet = function(e) {\n      var index = $(this).attr('data-orbit-slide');\n      if ((typeof index === 'string') && (index = $.trim(index)) != '') {\n        if(isNaN(parseInt(index)))\n        {\n          var slide = container.find('[data-orbit-slide='+index+']');\n          if (slide.index() != -1) {self._goto(slide.index() + 1);}\n        }\n        else\n        {\n          self._goto(parseInt(index));\n        }\n      }\n\n    }\n\n    self.timer_callback = function() {\n      self._goto(idx + 1, true);\n    }\n\n    self.compute_dimensions = function() {\n      var current = $(self.slides().get(idx));\n      var h = current.height();\n      if (!settings.variable_height) {\n        self.slides().each(function(){\n          if ($(this).height() > h) { h = $(this).height(); }\n        });\n      }\n      slides_container.height(h);\n    };\n\n    self.create_timer = function() {\n      var t = new Timer(\n        container.find('.'+settings.timer_container_class),\n        settings,\n        self.timer_callback\n      );\n      return t;\n    };\n\n    self.stop_timer = function() {\n      if (typeof timer === 'object') timer.stop();\n    };\n\n    self.toggle_timer = function() {\n      var t = container.find('.'+settings.timer_container_class);\n      if (t.hasClass(settings.timer_paused_class)) {\n        if (typeof timer === 'undefined') {timer = self.create_timer();}\n        timer.start();\n      }\n      else {\n        if (typeof timer === 'object') {timer.stop();}\n      }\n    };\n\n    self.init = function() {\n      self.build_markup();\n      if (settings.timer) {\n        timer = self.create_timer();\n        Foundation.utils.image_loaded(this.slides().children('img'), timer.start);\n      }\n      animate = new FadeAnimation(settings, slides_container);\n      if (settings.animation === 'slide')\n        animate = new SlideAnimation(settings, slides_container);\n\n      container.on('click', '.'+settings.next_class, self.next);\n      container.on('click', '.'+settings.prev_class, self.prev);\n\n      if (settings.next_on_click) {\n        container.on('click', '.'+settings.slides_container_class+' [data-orbit-slide]', self.link_bullet);\n      }\n\n      container.on('click', self.toggle_timer);\n      if (settings.swipe) {\n        container.on('touchstart.fndtn.orbit', function(e) {\n          if (!e.touches) {e = e.originalEvent;}\n          var data = {\n            start_page_x: e.touches[0].pageX,\n            start_page_y: e.touches[0].pageY,\n            start_time: (new Date()).getTime(),\n            delta_x: 0,\n            is_scrolling: undefined\n          };\n          container.data('swipe-transition', data);\n          e.stopPropagation();\n        })\n        .on('touchmove.fndtn.orbit', function(e) {\n          if (!e.touches) { e = e.originalEvent; }\n          // Ignore pinch/zoom events\n          if(e.touches.length > 1 || e.scale && e.scale !== 1) return;\n\n          var data = container.data('swipe-transition');\n          if (typeof data === 'undefined') {data = {};}\n\n          data.delta_x = e.touches[0].pageX - data.start_page_x;\n\n          if ( typeof data.is_scrolling === 'undefined') {\n            data.is_scrolling = !!( data.is_scrolling || Math.abs(data.delta_x) < Math.abs(e.touches[0].pageY - data.start_page_y) );\n          }\n\n          if (!data.is_scrolling && !data.active) {\n            e.preventDefault();\n            var direction = (data.delta_x < 0) ? (idx+1) : (idx-1);\n            data.active = true;\n            self._goto(direction);\n          }\n        })\n        .on('touchend.fndtn.orbit', function(e) {\n          container.data('swipe-transition', {});\n          e.stopPropagation();\n        })\n      }\n      container.on('mouseenter.fndtn.orbit', function(e) {\n        if (settings.timer && settings.pause_on_hover) {\n          self.stop_timer();\n        }\n      })\n      .on('mouseleave.fndtn.orbit', function(e) {\n        if (settings.timer && settings.resume_on_mouseout) {\n          timer.start();\n        }\n      });\n\n      $(document).on('click', '[data-orbit-link]', self.link_custom);\n      $(window).on('load resize', self.compute_dimensions);\n      Foundation.utils.image_loaded(this.slides().children('img'), self.compute_dimensions);\n      Foundation.utils.image_loaded(this.slides().children('img'), function() {\n        container.prev('.'+settings.preloader_class).css('display', 'none');\n        self.update_slide_number(0);\n        self.update_active_link(0);\n        slides_container.trigger('ready.fndtn.orbit');\n      });\n    };\n\n    self.init();\n  };\n\n  var Timer = function(el, settings, callback) {\n    var self = this,\n        duration = settings.timer_speed,\n        progress = el.find('.'+settings.timer_progress_class),\n        start,\n        timeout,\n        left = -1;\n\n    this.update_progress = function(w) {\n      var new_progress = progress.clone();\n      new_progress.attr('style', '');\n      new_progress.css('width', w+'%');\n      progress.replaceWith(new_progress);\n      progress = new_progress;\n    };\n\n    this.restart = function() {\n      clearTimeout(timeout);\n      el.addClass(settings.timer_paused_class);\n      left = -1;\n      self.update_progress(0);\n    };\n\n    this.start = function() {\n      if (!el.hasClass(settings.timer_paused_class)) {return true;}\n      left = (left === -1) ? duration : left;\n      el.removeClass(settings.timer_paused_class);\n      start = new Date().getTime();\n      progress.animate({'width': '100%'}, left, 'linear');\n      timeout = setTimeout(function() {\n        self.restart();\n        callback();\n      }, left);\n      el.trigger('timer-started.fndtn.orbit')\n    };\n\n    this.stop = function() {\n      if (el.hasClass(settings.timer_paused_class)) {return true;}\n      clearTimeout(timeout);\n      el.addClass(settings.timer_paused_class);\n      var end = new Date().getTime();\n      left = left - (end - start);\n      var w = 100 - ((left / duration) * 100);\n      self.update_progress(w);\n      el.trigger('timer-stopped.fndtn.orbit');\n    };\n  };\n\n  var SlideAnimation = function(settings, container) {\n    var duration = settings.animation_speed;\n    var is_rtl = ($('html[dir=rtl]').length === 1);\n    var margin = is_rtl ? 'marginRight' : 'marginLeft';\n    var animMargin = {};\n    animMargin[margin] = '0%';\n\n    this.next = function(current, next, callback) {\n      current.animate({marginLeft:'-100%'}, duration);\n      next.animate(animMargin, duration, function() {\n        current.css(margin, '100%');\n        callback();\n      });\n    };\n\n    this.prev = function(current, prev, callback) {\n      current.animate({marginLeft:'100%'}, duration);\n      prev.css(margin, '-100%');\n      prev.animate(animMargin, duration, function() {\n        current.css(margin, '100%');\n        callback();\n      });\n    };\n  };\n\n  var FadeAnimation = function(settings, container) {\n    var duration = settings.animation_speed;\n    var is_rtl = ($('html[dir=rtl]').length === 1);\n    var margin = is_rtl ? 'marginRight' : 'marginLeft';\n\n    this.next = function(current, next, callback) {\n      next.css({'margin':'0%', 'opacity':'0.01'});\n      next.animate({'opacity':'1'}, duration, 'linear', function() {\n        current.css('margin', '100%');\n        callback();\n      });\n    };\n\n    this.prev = function(current, prev, callback) {\n      prev.css({'margin':'0%', 'opacity':'0.01'});\n      prev.animate({'opacity':'1'}, duration, 'linear', function() {\n        current.css('margin', '100%');\n        callback();\n      });\n    };\n  };\n\n\n  Foundation.libs = Foundation.libs || {};\n\n  Foundation.libs.orbit = {\n    name: 'orbit',\n\n    version: '{{VERSION}}',\n\n    settings: {\n      animation: 'slide',\n      timer_speed: 10000,\n      pause_on_hover: true,\n      resume_on_mouseout: false,\n      next_on_click: true,\n      animation_speed: 500,\n      stack_on_small: false,\n      navigation_arrows: true,\n      slide_number: true,\n      slide_number_text: 'of',\n      container_class: 'orbit-container',\n      stack_on_small_class: 'orbit-stack-on-small',\n      next_class: 'orbit-next',\n      prev_class: 'orbit-prev',\n      timer_container_class: 'orbit-timer',\n      timer_paused_class: 'paused',\n      timer_progress_class: 'orbit-progress',\n      slides_container_class: 'orbit-slides-container',\n      preloader_class: 'preloader',\n      slide_selector: '*',\n      bullets_container_class: 'orbit-bullets',\n      bullets_active_class: 'active',\n      slide_number_class: 'orbit-slide-number',\n      caption_class: 'orbit-caption',\n      active_slide_class: 'active',\n      orbit_transition_class: 'orbit-transitioning',\n      bullets: true,\n      circular: true,\n      timer: true,\n      variable_height: false,\n      swipe: true,\n      before_slide_change: noop,\n      after_slide_change: noop\n    },\n\n    init : function (scope, method, options) {\n      var self = this;\n      this.bindings(method, options);\n    },\n\n    events : function (instance) {\n      var orbit_instance = new Orbit(this.S(instance), this.S(instance).data('orbit-init'));\n      this.S(instance).data(this.name + '-instance', orbit_instance);\n    },\n\n    reflow : function () {\n      var self = this;\n\n      if (self.S(self.scope).is('[data-orbit]')) {\n        var $el = self.S(self.scope);\n        var instance = $el.data(self.name + '-instance');\n        instance.compute_dimensions();\n      } else {\n        self.S('[data-orbit]', self.scope).each(function(idx, el) {\n          var $el = self.S(el);\n          var opts = self.data_options($el);\n          var instance = $el.data(self.name + '-instance');\n          instance.compute_dimensions();\n        });\n      }\n    }\n  };\n\n\n}(jQuery, window, window.document));\n",";(function ($, window, document, undefined) {\n  'use strict';\n\n  Foundation.libs.reveal = {\n    name : 'reveal',\n\n    version : '{{VERSION}}',\n\n    locked : false,\n\n    settings : {\n      animation: 'fadeAndPop',\n      animation_speed: 250,\n      close_on_background_click: true,\n      close_on_esc: true,\n      dismiss_modal_class: 'close-reveal-modal',\n      bg_class: 'reveal-modal-bg',\n      root_element: 'body',\n      open: function(){},\n      opened: function(){},\n      close: function(){},\n      closed: function(){},\n      bg : $('.reveal-modal-bg'),\n      css : {\n        open : {\n          'opacity': 0,\n          'visibility': 'visible',\n          'display' : 'block'\n        },\n        close : {\n          'opacity': 1,\n          'visibility': 'hidden',\n          'display': 'none'\n        }\n      }\n    },\n\n    init : function (scope, method, options) {\n      $.extend(true, this.settings, method, options);\n      this.bindings(method, options);\n    },\n\n    events : function (scope) {\n      var self = this,\n          S = self.S;\n\n      S(this.scope)\n        .off('.reveal')\n        .on('click.fndtn.reveal', '[' + this.add_namespace('data-reveal-id') + ']:not([disabled])', function (e) {\n          e.preventDefault();\n        \n          if (!self.locked) {\n            var element = S(this),\n                ajax = element.data(self.data_attr('reveal-ajax'));\n\n            self.locked = true;\n\n            if (typeof ajax === 'undefined') {\n              self.open.call(self, element);\n            } else {\n              var url = ajax === true ? element.attr('href') : ajax;\n\n              self.open.call(self, element, {url: url});\n            }\n          }\n        });\n\n      S(document)\n        .on('click.fndtn.reveal', this.close_targets(), function (e) {\n\n          e.preventDefault();\n\n          if (!self.locked) {\n            var settings = S('[' + self.attr_name() + '].open').data(self.attr_name(true) + '-init') || self.settings,\n                bg_clicked = S(e.target)[0] === S('.' + settings.bg_class)[0];\n\n            if (bg_clicked) {\n              if (settings.close_on_background_click) {\n                e.stopPropagation();\n              } else {\n                return;\n              }\n            }\n\n            self.locked = true;\n            self.close.call(self, bg_clicked ? S('[' + self.attr_name() + '].open') : S(this).closest('[' + self.attr_name() + ']'));\n          }\n        });\n\n      if(S('[' + self.attr_name() + ']', this.scope).length > 0) {\n        S(this.scope)\n          // .off('.reveal')\n          .on('open.fndtn.reveal', this.settings.open)\n          .on('opened.fndtn.reveal', this.settings.opened)\n          .on('opened.fndtn.reveal', this.open_video)\n          .on('close.fndtn.reveal', this.settings.close)\n          .on('closed.fndtn.reveal', this.settings.closed)\n          .on('closed.fndtn.reveal', this.close_video);\n      } else {\n        S(this.scope)\n          // .off('.reveal')\n          .on('open.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.open)\n          .on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.opened)\n          .on('opened.fndtn.reveal', '[' + self.attr_name() + ']', this.open_video)\n          .on('close.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.close)\n          .on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.settings.closed)\n          .on('closed.fndtn.reveal', '[' + self.attr_name() + ']', this.close_video);\n      }\n\n      return true;\n    },\n\n    // PATCH #3: turning on key up capture only when a reveal window is open\n    key_up_on : function (scope) {\n      var self = this;\n\n      // PATCH #1: fixing multiple keyup event trigger from single key press\n      self.S('body').off('keyup.fndtn.reveal').on('keyup.fndtn.reveal', function ( event ) {\n        var open_modal = self.S('[' + self.attr_name() + '].open'),\n            settings = open_modal.data(self.attr_name(true) + '-init') || self.settings ;\n        // PATCH #2: making sure that the close event can be called only while unlocked,\n        //           so that multiple keyup.fndtn.reveal events don't prevent clean closing of the reveal window.\n        if ( settings && event.which === 27  && settings.close_on_esc && !self.locked) { // 27 is the keycode for the Escape key\n          self.close.call(self, open_modal);\n        }\n      });\n\n      return true;\n    },\n\n    // PATCH #3: turning on key up capture only when a reveal window is open\n    key_up_off : function (scope) {\n      this.S('body').off('keyup.fndtn.reveal');\n      return true;\n    },\n\n\n    open : function (target, ajax_settings) {\n      var self = this,\n          modal;\n\n      if (target) {\n        if (typeof target.selector !== 'undefined') {\n          // Find the named node; only use the first one found, since the rest of the code assumes there's only one node\n          modal = self.S('#' + target.data(self.data_attr('reveal-id'))).first();\n        } else {\n          modal = self.S(this.scope);\n\n          ajax_settings = target;\n        }\n      } else {\n        modal = self.S(this.scope);\n      }\n\n      var settings = modal.data(self.attr_name(true) + '-init');\n      settings = settings || this.settings;\n\n\n      if (modal.hasClass('open') && target.attr('data-reveal-id') == modal.attr('id')) {\n        return self.close(modal);\n      }\n\n      if (!modal.hasClass('open')) {\n        var open_modal = self.S('[' + self.attr_name() + '].open');\n\n        if (typeof modal.data('css-top') === 'undefined') {\n          modal.data('css-top', parseInt(modal.css('top'), 10))\n            .data('offset', this.cache_offset(modal));\n        }\n\n        this.key_up_on(modal);    // PATCH #3: turning on key up capture only when a reveal window is open\n        modal.trigger('open').trigger('open.fndtn.reveal');\n\n        if (open_modal.length < 1) {\n          this.toggle_bg(modal, true);\n        }\n\n        if (typeof ajax_settings === 'string') {\n          ajax_settings = {\n            url: ajax_settings\n          };\n        }\n\n        if (typeof ajax_settings === 'undefined' || !ajax_settings.url) {\n          if (open_modal.length > 0) {\n            this.hide(open_modal, settings.css.close);\n          }\n\n          this.show(modal, settings.css.open);\n        } else {\n          var old_success = typeof ajax_settings.success !== 'undefined' ? ajax_settings.success : null;\n\n          $.extend(ajax_settings, {\n            success: function (data, textStatus, jqXHR) {\n              if ( $.isFunction(old_success) ) {\n                var result = old_success(data, textStatus, jqXHR);\n                if (typeof result == 'string') data = result;\n              }\n\n              modal.html(data);\n              self.S(modal).foundation('section', 'reflow');\n              self.S(modal).children().foundation();\n\n              if (open_modal.length > 0) {\n                self.hide(open_modal, settings.css.close);\n              }\n              self.show(modal, settings.css.open);\n            }\n          });\n\n          $.ajax(ajax_settings);\n        }\n      }\n      self.S(window).trigger('resize');\n    },\n\n    close : function (modal) {\n      var modal = modal && modal.length ? modal : this.S(this.scope),\n          open_modals = this.S('[' + this.attr_name() + '].open'),\n          settings = modal.data(this.attr_name(true) + '-init') || this.settings;\n\n      if (open_modals.length > 0) {\n        this.locked = true;\n        this.key_up_off(modal);   // PATCH #3: turning on key up capture only when a reveal window is open\n        modal.trigger('close').trigger('close.fndtn.reveal');\n        this.toggle_bg(modal, false);\n        this.hide(open_modals, settings.css.close, settings);\n      }\n    },\n\n    close_targets : function () {\n      var base = '.' + this.settings.dismiss_modal_class;\n\n      if (this.settings.close_on_background_click) {\n        return base + ', .' + this.settings.bg_class;\n      }\n\n      return base;\n    },\n\n    toggle_bg : function (modal, state) {\n      if (this.S('.' + this.settings.bg_class).length === 0) {\n        this.settings.bg = $('<div />', {'class': this.settings.bg_class})\n          .appendTo('body').hide();\n      }\n\n      var visible = this.settings.bg.filter(':visible').length > 0;\n      if ( state != visible ) {\n        if ( state == undefined ? visible : !state ) {\n          this.hide(this.settings.bg);\n        } else {\n          this.show(this.settings.bg);\n        }\n      }\n    },\n\n    show : function (el, css) {\n      // is modal\n      if (css) {\n        var settings = el.data(this.attr_name(true) + '-init') || this.settings,\n            root_element = settings.root_element;\n\n        if (el.parent(root_element).length === 0) {\n          var placeholder = el.wrap('<div style=\"display: none;\" />').parent();\n\n          el.on('closed.fndtn.reveal.wrapped', function() {\n            el.detach().appendTo(placeholder);\n            el.unwrap().unbind('closed.fndtn.reveal.wrapped');\n          });\n\n          el.detach().appendTo(root_element);\n        }\n\n        var animData = getAnimationData(settings.animation);\n        if (!animData.animate) {\n          this.locked = false;\n        }\n        if (animData.pop) {\n          css.top = $(window).scrollTop() - el.data('offset') + 'px';\n          var end_css = {\n            top: $(window).scrollTop() + el.data('css-top') + 'px',\n            opacity: 1\n          };\n\n          return setTimeout(function () {\n            return el\n              .css(css)\n              .animate(end_css, settings.animation_speed, 'linear', function () {\n                this.locked = false;\n                el.trigger('opened').trigger('opened.fndtn.reveal');\n              }.bind(this))\n              .addClass('open');\n          }.bind(this), settings.animation_speed / 2);\n        }\n\n        if (animData.fade) {\n          css.top = $(window).scrollTop() + el.data('css-top') + 'px';\n          var end_css = {opacity: 1};\n\n          return setTimeout(function () {\n            return el\n              .css(css)\n              .animate(end_css, settings.animation_speed, 'linear', function () {\n                this.locked = false;\n                el.trigger('opened').trigger('opened.fndtn.reveal');\n              }.bind(this))\n              .addClass('open');\n          }.bind(this), settings.animation_speed / 2);\n        }\n\n        return el.css(css).show().css({opacity: 1}).addClass('open').trigger('opened').trigger('opened.fndtn.reveal');\n      }\n\n      var settings = this.settings;\n\n      // should we animate the background?\n      if (getAnimationData(settings.animation).fade) {\n        return el.fadeIn(settings.animation_speed / 2);\n      }\n\n      this.locked = false;\n\n      return el.show();\n    },\n\n    hide : function (el, css) {\n      // is modal\n      if (css) {\n        var settings = el.data(this.attr_name(true) + '-init');\n        settings = settings || this.settings;\n\n        var animData = getAnimationData(settings.animation);\n        if (!animData.animate) {\n          this.locked = false;\n        }\n        if (animData.pop) {\n          var end_css = {\n            top: - $(window).scrollTop() - el.data('offset') + 'px',\n            opacity: 0\n          };\n\n          return setTimeout(function () {\n            return el\n              .animate(end_css, settings.animation_speed, 'linear', function () {\n                this.locked = false;\n                el.css(css).trigger('closed').trigger('closed.fndtn.reveal');\n              }.bind(this))\n              .removeClass('open');\n          }.bind(this), settings.animation_speed / 2);\n        }\n\n        if (animData.fade) {\n          var end_css = {opacity: 0};\n\n          return setTimeout(function () {\n            return el\n              .animate(end_css, settings.animation_speed, 'linear', function () {\n                this.locked = false;\n                el.css(css).trigger('closed').trigger('closed.fndtn.reveal');\n              }.bind(this))\n              .removeClass('open');\n          }.bind(this), settings.animation_speed / 2);\n        }\n\n        return el.hide().css(css).removeClass('open').trigger('closed').trigger('closed.fndtn.reveal');\n      }\n\n      var settings = this.settings;\n\n      // should we animate the background?\n      if (getAnimationData(settings.animation).fade) {\n        return el.fadeOut(settings.animation_speed / 2);\n      }\n\n      return el.hide();\n    },\n\n    close_video : function (e) {\n      var video = $('.flex-video', e.target),\n          iframe = $('iframe', video);\n\n      if (iframe.length > 0) {\n        iframe.attr('data-src', iframe[0].src);\n        iframe.attr('src', iframe.attr('src'));\n        video.hide();\n      }\n    },\n\n    open_video : function (e) {\n      var video = $('.flex-video', e.target),\n          iframe = video.find('iframe');\n\n      if (iframe.length > 0) {\n        var data_src = iframe.attr('data-src');\n        if (typeof data_src === 'string') {\n          iframe[0].src = iframe.attr('data-src');\n        } else {\n          var src = iframe[0].src;\n          iframe[0].src = undefined;\n          iframe[0].src = src;\n        }\n        video.show();\n      }\n    },\n\n    data_attr: function (str) {\n      if (this.namespace.length > 0) {\n        return this.namespace + '-' + str;\n      }\n\n      return str;\n    },\n\n    cache_offset : function (modal) {\n      var offset = modal.show().height() + parseInt(modal.css('top'), 10);\n\n      modal.hide();\n\n      return offset;\n    },\n\n    off : function () {\n      $(this.scope).off('.fndtn.reveal');\n    },\n\n    reflow : function () {}\n  };\n\n  /*\n   * getAnimationData('popAndFade') // {animate: true,  pop: true,  fade: true}\n   * getAnimationData('fade')       // {animate: true,  pop: false, fade: true}\n   * getAnimationData('pop')        // {animate: true,  pop: true,  fade: false}\n   * getAnimationData('foo')        // {animate: false, pop: false, fade: false}\n   * getAnimationData(null)         // {animate: false, pop: false, fade: false}\n   */\n  function getAnimationData(str) {\n    var fade = /fade/i.test(str);\n    var pop = /pop/i.test(str);\n    return {\n      animate: fade || pop,\n      pop: pop,\n      fade: fade\n    };\n  }\n}(jQuery, window, window.document));\n",";(function ($, window, document, undefined) {\n  'use strict';\n\n  Foundation.libs.slider = {\n    name : 'slider',\n\n    version : '{{VERSION}}',\n\n    settings: {\n      start: 0,\n      end: 100,\n      step: 1,\n      precision: null,\n      initial: null,\n      display_selector: '',\n      vertical: false,\n      trigger_input_change: false,\n      on_change: function(){}\n    },\n\n    cache : {},\n\n    init : function (scope, method, options) {\n      Foundation.inherit(this,'throttle');\n      this.bindings(method, options);\n      this.reflow();\n    },\n\n    events : function() {\n      var self = this;\n\n      $(this.scope)\n        .off('.slider')\n        .on('mousedown.fndtn.slider touchstart.fndtn.slider pointerdown.fndtn.slider',\n        '[' + self.attr_name() + ']:not(.disabled, [disabled]) .range-slider-handle', function(e) {\n          if (!self.cache.active) {\n            e.preventDefault();\n            self.set_active_slider($(e.target));\n          }\n        })\n        .on('mousemove.fndtn.slider touchmove.fndtn.slider pointermove.fndtn.slider', function(e) {\n          if (!!self.cache.active) {\n            e.preventDefault();\n            if ($.data(self.cache.active[0], 'settings').vertical) {\n              var scroll_offset = 0;\n              if (!e.pageY) {\n                scroll_offset = window.scrollY;\n              }\n              self.calculate_position(self.cache.active, (e.pageY || \n                                                          e.originalEvent.clientY || \n                                                          e.originalEvent.touches[0].clientY || \n                                                          e.currentPoint.y) \n                                                          + scroll_offset);\n            } else {\n              self.calculate_position(self.cache.active, e.pageX || \n                                                         e.originalEvent.clientX || \n                                                         e.originalEvent.touches[0].clientX || \n                                                         e.currentPoint.x);\n            }\n          }\n        })\n        .on('mouseup.fndtn.slider touchend.fndtn.slider pointerup.fndtn.slider', function(e) {\n          self.remove_active_slider();\n        })\n        .on('change.fndtn.slider', function(e) {\n          self.settings.on_change();\n        });\n\n      self.S(window)\n        .on('resize.fndtn.slider', self.throttle(function(e) {\n          self.reflow();\n        }, 300));\n    },\n\n    set_active_slider : function($handle) {\n      this.cache.active = $handle;\n    },\n\n    remove_active_slider : function() {\n      this.cache.active = null;\n    },\n\n    calculate_position : function($handle, cursor_x) {\n      var self = this,\n          settings = $.data($handle[0], 'settings'),\n          handle_l = $.data($handle[0], 'handle_l'),\n          handle_o = $.data($handle[0], 'handle_o'),\n          bar_l = $.data($handle[0], 'bar_l'),\n          bar_o = $.data($handle[0], 'bar_o');\n\n      requestAnimationFrame(function(){\n        var pct;\n\n        if (Foundation.rtl && !settings.vertical) {\n          pct = self.limit_to(((bar_o+bar_l-cursor_x)/bar_l),0,1);\n        } else {\n          pct = self.limit_to(((cursor_x-bar_o)/bar_l),0,1);\n        }\n\n        pct = settings.vertical ? 1-pct : pct;\n\n        var norm = self.normalized_value(pct, settings.start, settings.end, settings.step, settings.precision);\n\n        self.set_ui($handle, norm);\n      });\n    },\n\n    set_ui : function($handle, value) {\n      var settings = $.data($handle[0], 'settings'),\n          handle_l = $.data($handle[0], 'handle_l'),\n          bar_l = $.data($handle[0], 'bar_l'),\n          norm_pct = this.normalized_percentage(value, settings.start, settings.end),\n          handle_offset = norm_pct*(bar_l-handle_l)-1,\n          progress_bar_length = norm_pct*100,\n          $handle_parent = $handle.parent(),\n          $hidden_inputs = $handle.parent().children('input[type=hidden]');\n\n      if (Foundation.rtl && !settings.vertical) {\n        handle_offset = -handle_offset;\n      }\n\n      handle_offset = settings.vertical ? -handle_offset + bar_l - handle_l + 1 : handle_offset;\n      this.set_translate($handle, handle_offset, settings.vertical);\n\n      if (settings.vertical) {\n        $handle.siblings('.range-slider-active-segment').css('height', progress_bar_length + '%');\n      } else {\n        $handle.siblings('.range-slider-active-segment').css('width', progress_bar_length + '%');\n      }\n\n      $handle_parent.attr(this.attr_name(), value).trigger('change').trigger('change.fndtn.slider');\n\n      $hidden_inputs.val(value);\n      if (settings.trigger_input_change) {\n          $hidden_inputs.trigger('change');\n      }\n\n      if (!$handle[0].hasAttribute('aria-valuemin')) {\n        $handle.attr({\n          'aria-valuemin': settings.start,\n          'aria-valuemax': settings.end\n        });\n      }\n      $handle.attr('aria-valuenow', value);\n\n      if (settings.display_selector != '') {\n        $(settings.display_selector).each(function(){\n          if (this.hasOwnProperty('value')) {\n            $(this).val(value);\n          } else {\n            $(this).text(value);\n          }\n        });\n      }\n\n    },\n\n    normalized_percentage : function(val, start, end) {\n      return Math.min(1, (val - start)/(end - start));\n    },\n\n    normalized_value : function(val, start, end, step, precision) {\n      var range = end - start,\n          point = val*range,\n          mod = (point-(point%step)) / step,\n          rem = point % step,\n          round = ( rem >= step*0.5 ? step : 0);\n      return ((mod*step + round) + start).toFixed(precision);\n    },\n\n    set_translate : function(ele, offset, vertical) {\n      if (vertical) {\n        $(ele)\n          .css('-webkit-transform', 'translateY('+offset+'px)')\n          .css('-moz-transform', 'translateY('+offset+'px)')\n          .css('-ms-transform', 'translateY('+offset+'px)')\n          .css('-o-transform', 'translateY('+offset+'px)')\n          .css('transform', 'translateY('+offset+'px)');\n      } else {\n        $(ele)\n          .css('-webkit-transform', 'translateX('+offset+'px)')\n          .css('-moz-transform', 'translateX('+offset+'px)')\n          .css('-ms-transform', 'translateX('+offset+'px)')\n          .css('-o-transform', 'translateX('+offset+'px)')\n          .css('transform', 'translateX('+offset+'px)');\n      }\n    },\n\n    limit_to : function(val, min, max) {\n      return Math.min(Math.max(val, min), max);\n    },\n\n\n\n    initialize_settings : function(handle) {\n      var settings = $.extend({}, this.settings, this.data_options($(handle).parent())),\n          decimal_places_match_result;\n\n      if (settings.precision === null) {\n        decimal_places_match_result = ('' + settings.step).match(/\\.([\\d]*)/);\n        settings.precision = decimal_places_match_result && decimal_places_match_result[1] ? decimal_places_match_result[1].length : 0;\n      }\n\n      if (settings.vertical) {\n        $.data(handle, 'bar_o', $(handle).parent().offset().top);\n        $.data(handle, 'bar_l', $(handle).parent().outerHeight());\n        $.data(handle, 'handle_o', $(handle).offset().top);\n        $.data(handle, 'handle_l', $(handle).outerHeight());\n      } else {\n        $.data(handle, 'bar_o', $(handle).parent().offset().left);\n        $.data(handle, 'bar_l', $(handle).parent().outerWidth());\n        $.data(handle, 'handle_o', $(handle).offset().left);\n        $.data(handle, 'handle_l', $(handle).outerWidth());\n      }\n\n      $.data(handle, 'bar', $(handle).parent());\n      $.data(handle, 'settings', settings);\n    },\n\n    set_initial_position : function($ele) {\n      var settings = $.data($ele.children('.range-slider-handle')[0], 'settings'),\n          initial = ((typeof settings.initial == 'number' && !isNaN(settings.initial)) ? settings.initial : Math.floor((settings.end-settings.start)*0.5/settings.step)*settings.step+settings.start),\n          $handle = $ele.children('.range-slider-handle');\n      this.set_ui($handle, initial);\n    },\n\n    set_value : function(value) {\n      var self = this;\n      $('[' + self.attr_name() + ']', this.scope).each(function(){\n        $(this).attr(self.attr_name(), value);\n      });\n      if (!!$(this.scope).attr(self.attr_name())) {\n        $(this.scope).attr(self.attr_name(), value);\n      }\n      self.reflow();\n    },\n\n    reflow : function() {\n      var self = this;\n      self.S('[' + this.attr_name() + ']').each(function() {\n        var handle = $(this).children('.range-slider-handle')[0],\n            val = $(this).attr(self.attr_name());\n        self.initialize_settings(handle);\n\n        if (val) {\n          self.set_ui($(handle), parseFloat(val));\n        } else {\n          self.set_initial_position($(this));\n        }\n      });\n    }\n  };\n\n}(jQuery, window, window.document));\n",";(function ($, window, document, undefined) {\n  'use strict';\n\n  Foundation.libs.tab = {\n    name : 'tab',\n\n    version : '{{VERSION}}',\n\n    settings : {\n      active_class: 'active',\n      callback : function () {},\n      deep_linking: false,\n      scroll_to_content: true,\n      is_hover: false\n    },\n\n    default_tab_hashes: [],\n\n    init : function (scope, method, options) {\n      var self = this,\n          S = this.S;\n\n      this.bindings(method, options);\n      this.handle_location_hash_change();\n\n      // Store the default active tabs which will be referenced when the\n      // location hash is absent, as in the case of navigating the tabs and\n      // returning to the first viewing via the browser Back button.\n      S('[' + this.attr_name() + '] > .active > a', this.scope).each(function () {\n        self.default_tab_hashes.push(this.hash);\n      });\n    },\n\n    events : function () {\n      var self = this,\n          S = this.S;\n\n      var usual_tab_behavior =  function (e) {\n          var settings = S(this).closest('[' + self.attr_name() +']').data(self.attr_name(true) + '-init');\n          if (!settings.is_hover || Modernizr.touch) {\n            e.preventDefault();\n            e.stopPropagation();\n            self.toggle_active_tab(S(this).parent());\n          }\n        };\n\n      S(this.scope)\n        .off('.tab')\n        // Click event: tab title\n        .on('focus.fndtn.tab', '[' + this.attr_name() + '] > * > a', usual_tab_behavior )\n        .on('click.fndtn.tab', '[' + this.attr_name() + '] > * > a', usual_tab_behavior )\n        // Hover event: tab title\n        .on('mouseenter.fndtn.tab', '[' + this.attr_name() + '] > * > a', function (e) {\n          var settings = S(this).closest('[' + self.attr_name() +']').data(self.attr_name(true) + '-init');\n          if (settings.is_hover) self.toggle_active_tab(S(this).parent());\n        });\n\n      // Location hash change event\n      S(window).on('hashchange.fndtn.tab', function (e) {\n        e.preventDefault();\n        self.handle_location_hash_change();\n      });\n    },\n\n    handle_location_hash_change : function () {\n\n      var self = this,\n          S = this.S;\n\n      S('[' + this.attr_name() + ']', this.scope).each(function () {\n        var settings = S(this).data(self.attr_name(true) + '-init');\n        if (settings.deep_linking) {\n          // Match the location hash to a label\n          var hash;\n          if (settings.scroll_to_content) {\n            hash = self.scope.location.hash;\n          } else {\n            // prefix the hash to prevent anchor scrolling\n            hash = self.scope.location.hash.replace('fndtn-', '');\n          }\n          if (hash != '') {\n            // Check whether the location hash references a tab content div or\n            // another element on the page (inside or outside the tab content div)\n            var hash_element = S(hash);\n            if (hash_element.hasClass('content') && hash_element.parent().hasClass('tabs-content')) {\n              // Tab content div\n              self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=' + hash + ']').parent());\n            } else {\n              // Not the tab content div. If inside the tab content, find the\n              // containing tab and toggle it as active.\n              var hash_tab_container_id = hash_element.closest('.content').attr('id');\n              if (hash_tab_container_id != undefined) {\n                self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=#' + hash_tab_container_id + ']').parent(), hash);\n              }\n            }\n          } else {\n            // Reference the default tab hashes which were initialized in the init function\n            for (var ind = 0; ind < self.default_tab_hashes.length; ind++) {\n              self.toggle_active_tab($('[' + self.attr_name() + '] > * > a[href=' + self.default_tab_hashes[ind] + ']').parent());\n            }\n          }\n        }\n       });\n     },\n\n    toggle_active_tab: function (tab, location_hash) {\n      var S = this.S,\n          tabs = tab.closest('[' + this.attr_name() + ']'),\n          tab_link = tab.find('a'),\n          anchor = tab.children('a').first(),\n          target_hash = '#' + anchor.attr('href').split('#')[1],\n          target = S(target_hash),\n          siblings = tab.siblings(),\n          settings = tabs.data(this.attr_name(true) + '-init'),\n          interpret_keyup_action = function(e) {\n            // Light modification of Heydon Pickering's Practical ARIA Examples: http://heydonworks.com/practical_aria_examples/js/a11y.js\n\n            // define current, previous and next (possible) tabs\n\n            var $original = $(this);\n            var $prev = $(this).parents('li').prev().children('[role=\"tab\"]');\n            var $next = $(this).parents('li').next().children('[role=\"tab\"]');\n            var $target;\n\n            // find the direction (prev or next)\n\n            switch (e.keyCode) {\n              case 37:\n                $target = $prev;\n                break;\n              case 39:\n                $target = $next;\n                break;\n              default:\n                $target = false\n                  break;\n            }\n\n            if ($target.length) {\n              $original.attr({\n                'tabindex' : '-1',\n                'aria-selected' : null\n              });\n              $target.attr({\n                'tabindex' : '0',\n                'aria-selected' : true\n              }).focus();\n            }\n\n            // Hide panels\n\n            $('[role=\"tabpanel\"]')\n              .attr('aria-hidden', 'true');\n\n            // Show panel which corresponds to target\n\n            $('#' + $(document.activeElement).attr('href').substring(1))\n              .attr('aria-hidden', null);\n\n          };\n\n      // allow usage of data-tab-content attribute instead of href\n      if (S(this).data(this.data_attr('tab-content'))) {\n        target_hash = '#' + S(this).data(this.data_attr('tab-content')).split('#')[1];\n        target = S(target_hash);\n      }\n\n      if (settings.deep_linking) {\n\n        if (settings.scroll_to_content) {\n          // retain current hash to scroll to content\n          window.location.hash = location_hash || target_hash;\n          if (location_hash == undefined || location_hash == target_hash) {\n            tab.parent()[0].scrollIntoView();\n          } else {\n            S(target_hash)[0].scrollIntoView();\n          }\n        } else {\n          // prefix the hashes so that the browser doesn't scroll down\n          if (location_hash != undefined) {\n            window.location.hash = 'fndtn-' + location_hash.replace('#', '');\n          } else {\n            window.location.hash = 'fndtn-' + target_hash.replace('#', '');\n          }\n        }\n      }\n\n      // WARNING: The activation and deactivation of the tab content must\n      // occur after the deep linking in order to properly refresh the browser\n      // window (notably in Chrome).\n      // Clean up multiple attr instances to done once\n      tab.addClass(settings.active_class).triggerHandler('opened');\n      tab_link.attr({'aria-selected': 'true',  tabindex: 0});\n      siblings.removeClass(settings.active_class)\n      siblings.find('a').attr({'aria-selected': 'false',  tabindex: -1});\n      target.siblings().removeClass(settings.active_class).attr({'aria-hidden': 'true',  tabindex: -1});\n      target.addClass(settings.active_class).attr('aria-hidden', 'false').removeAttr('tabindex');\n      settings.callback(tab);\n      target.triggerHandler('toggled', [tab]);\n      tabs.triggerHandler('toggled', [target]);\n\n      tab_link.off('keydown').on('keydown', interpret_keyup_action );\n    },\n\n    data_attr: function (str) {\n      if (this.namespace.length > 0) {\n        return this.namespace + '-' + str;\n      }\n\n      return str;\n    },\n\n    off : function () {},\n\n    reflow : function () {}\n  };\n}(jQuery, window, window.document));\n",";(function ($, window, document, undefined) {\n  'use strict';\n\n  Foundation.libs.tooltip = {\n    name : 'tooltip',\n\n    version : '{{VERSION}}',\n\n    settings : {\n      additional_inheritable_classes : [],\n      tooltip_class : '.tooltip',\n      append_to: 'body',\n      touch_close_text: 'Tap To Close',\n      disable_for_touch: false,\n      hover_delay: 200,\n      show_on : 'all',\n      tip_template : function (selector, content) {\n        return '<span data-selector=\"' + selector + '\" id=\"' + selector + '\" class=\"'\n          + Foundation.libs.tooltip.settings.tooltip_class.substring(1)\n          + '\" role=\"tooltip\">' + content + '<span class=\"nub\"></span></span>';\n      }\n    },\n\n    cache : {},\n\n    init : function (scope, method, options) {\n      Foundation.inherit(this, 'random_str');\n      this.bindings(method, options);\n    },\n\n    should_show: function (target, tip) {\n      var settings = $.extend({}, this.settings, this.data_options(target));\n\n      if (settings.show_on === 'all') {\n        return true;\n      } else if (this.small() && settings.show_on === 'small') {\n        return true;\n      } else if (this.medium() && settings.show_on === 'medium') {\n        return true;\n      } else if (this.large() && settings.show_on === 'large') {\n        return true;\n      }\n      return false;\n    },\n\n    medium : function () {\n      return matchMedia(Foundation.media_queries['medium']).matches;\n    },\n\n    large : function () {\n      return matchMedia(Foundation.media_queries['large']).matches;\n    },\n\n    events : function (instance) {\n      var self = this,\n          S = self.S;\n\n      self.create(this.S(instance));\n\n      $(this.scope)\n        .off('.tooltip')\n        .on('mouseenter.fndtn.tooltip mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip',\n          '[' + this.attr_name() + ']', function (e) {\n          var $this = S(this),\n              settings = $.extend({}, self.settings, self.data_options($this)),\n              is_touch = false;\n\n          if (Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type) && S(e.target).is('a')) {\n            return false;\n          }\n\n          if (/mouse/i.test(e.type) && self.ie_touch(e)) return false;\n\n          if ($this.hasClass('open')) {\n            if (Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) e.preventDefault();\n            self.hide($this);\n          } else {\n            if (settings.disable_for_touch && Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) {\n              return;\n            } else if(!settings.disable_for_touch && Modernizr.touch && /touchstart|MSPointerDown/i.test(e.type)) {\n              e.preventDefault();\n              S(settings.tooltip_class + '.open').hide();\n              is_touch = true;\n            }\n\n            if (/enter|over/i.test(e.type)) {\n              this.timer = setTimeout(function () {\n                var tip = self.showTip($this);\n              }.bind(this), self.settings.hover_delay);\n            } else if (e.type === 'mouseout' || e.type === 'mouseleave') {\n              clearTimeout(this.timer);\n              self.hide($this);\n            } else {\n              self.showTip($this);\n            }\n          }\n        })\n        .on('mouseleave.fndtn.tooltip touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip', '[' + this.attr_name() + '].open', function (e) {\n          if (/mouse/i.test(e.type) && self.ie_touch(e)) return false;\n\n          if($(this).data('tooltip-open-event-type') == 'touch' && e.type == 'mouseleave') {\n            return;\n          }\n          else if($(this).data('tooltip-open-event-type') == 'mouse' && /MSPointerDown|touchstart/i.test(e.type)) {\n            self.convert_to_touch($(this));\n          } else {\n            self.hide($(this));\n          }\n        })\n        .on('DOMNodeRemoved DOMAttrModified', '[' + this.attr_name() + ']:not(a)', function (e) {\n          self.hide(S(this));\n        });\n    },\n\n    ie_touch : function (e) {\n      // How do I distinguish between IE11 and Windows Phone 8?????\n      return false;\n    },\n\n    showTip : function ($target) {\n      var $tip = this.getTip($target);\n      if (this.should_show($target, $tip)){\n        return this.show($target);\n      }\n      return;\n    },\n\n    getTip : function ($target) {\n      var selector = this.selector($target),\n          settings = $.extend({}, this.settings, this.data_options($target)),\n          tip = null;\n\n      if (selector) {\n        tip = this.S('span[data-selector=\"' + selector + '\"]' + settings.tooltip_class);\n      }\n\n      return (typeof tip === 'object') ? tip : false;\n    },\n\n    selector : function ($target) {\n      var id = $target.attr('id'),\n          dataSelector = $target.attr(this.attr_name()) || $target.attr('data-selector');\n\n      if ((id && id.length < 1 || !id) && typeof dataSelector != 'string') {\n        dataSelector = this.random_str(6);\n        $target\n          .attr('data-selector', dataSelector)\n          .attr('aria-describedby', dataSelector);\n      }\n\n      return (id && id.length > 0) ? id : dataSelector;\n    },\n\n    create : function ($target) {\n      var self = this,\n          settings = $.extend({}, this.settings, this.data_options($target)),\n          tip_template = this.settings.tip_template;\n\n      if (typeof settings.tip_template === 'string' && window.hasOwnProperty(settings.tip_template)) {\n        tip_template = window[settings.tip_template];\n      }\n\n      var $tip = $(tip_template(this.selector($target), $('<div></div>').html($target.attr('title')).html())),\n          classes = this.inheritable_classes($target);\n\n      $tip.addClass(classes).appendTo(settings.append_to);\n\n      if (Modernizr.touch) {\n        $tip.append('<span class=\"tap-to-close\">'+settings.touch_close_text+'</span>');\n        $tip.on('touchstart.fndtn.tooltip MSPointerDown.fndtn.tooltip', function(e) {\n          self.hide($target);\n        });\n      }\n\n      $target.removeAttr('title').attr('title','');\n    },\n\n    reposition : function (target, tip, classes) {\n      var width, nub, nubHeight, nubWidth, column, objPos;\n\n      tip.css('visibility', 'hidden').show();\n\n      width = target.data('width');\n      nub = tip.children('.nub');\n      nubHeight = nub.outerHeight();\n      nubWidth = nub.outerHeight();\n\n      if (this.small()) {\n        tip.css({'width' : '100%' });\n      } else {\n        tip.css({'width' : (width) ? width : 'auto'});\n      }\n\n      objPos = function (obj, top, right, bottom, left, width) {\n        return obj.css({\n          'top' : (top) ? top : 'auto',\n          'bottom' : (bottom) ? bottom : 'auto',\n          'left' : (left) ? left : 'auto',\n          'right' : (right) ? right : 'auto'\n        }).end();\n      };\n\n      objPos(tip, (target.offset().top + target.outerHeight() + 10), 'auto', 'auto', target.offset().left);\n\n      if (this.small()) {\n        objPos(tip, (target.offset().top + target.outerHeight() + 10), 'auto', 'auto', 12.5, $(this.scope).width());\n        tip.addClass('tip-override');\n        objPos(nub, -nubHeight, 'auto', 'auto', target.offset().left);\n      } else {\n        var left = target.offset().left;\n        if (Foundation.rtl) {\n          nub.addClass('rtl');\n          left = target.offset().left + target.outerWidth() - tip.outerWidth();\n        }\n        objPos(tip, (target.offset().top + target.outerHeight() + 10), 'auto', 'auto', left);\n        tip.removeClass('tip-override');\n        if (classes && classes.indexOf('tip-top') > -1) {\n          if (Foundation.rtl) nub.addClass('rtl');\n          objPos(tip, (target.offset().top - tip.outerHeight()), 'auto', 'auto', left)\n            .removeClass('tip-override');\n        } else if (classes && classes.indexOf('tip-left') > -1) {\n          objPos(tip, (target.offset().top + (target.outerHeight() / 2) - (tip.outerHeight() / 2)), 'auto', 'auto', (target.offset().left - tip.outerWidth() - nubHeight))\n            .removeClass('tip-override');\n          nub.removeClass('rtl');\n        } else if (classes && classes.indexOf('tip-right') > -1) {\n          objPos(tip, (target.offset().top + (target.outerHeight() / 2) - (tip.outerHeight() / 2)), 'auto', 'auto', (target.offset().left + target.outerWidth() + nubHeight))\n            .removeClass('tip-override');\n          nub.removeClass('rtl');\n        }\n      }\n\n      tip.css('visibility', 'visible').hide();\n    },\n\n    small : function () {\n      return matchMedia(Foundation.media_queries.small).matches &&\n        !matchMedia(Foundation.media_queries.medium).matches;\n    },\n\n    inheritable_classes : function ($target) {\n      var settings = $.extend({}, this.settings, this.data_options($target)),\n          inheritables = ['tip-top', 'tip-left', 'tip-bottom', 'tip-right', 'radius', 'round'].concat(settings.additional_inheritable_classes),\n          classes = $target.attr('class'),\n          filtered = classes ? $.map(classes.split(' '), function (el, i) {\n            if ($.inArray(el, inheritables) !== -1) {\n              return el;\n            }\n          }).join(' ') : '';\n\n      return $.trim(filtered);\n    },\n\n    convert_to_touch : function($target) {\n      var self = this,\n          $tip = self.getTip($target),\n          settings = $.extend({}, self.settings, self.data_options($target));\n\n      if ($tip.find('.tap-to-close').length === 0) {\n        $tip.append('<span class=\"tap-to-close\">'+settings.touch_close_text+'</span>');\n        $tip.on('click.fndtn.tooltip.tapclose touchstart.fndtn.tooltip.tapclose MSPointerDown.fndtn.tooltip.tapclose', function(e) {\n          self.hide($target);\n        });\n      }\n\n      $target.data('tooltip-open-event-type', 'touch');\n    },\n\n    show : function ($target) {\n      var $tip = this.getTip($target);\n\n      if ($target.data('tooltip-open-event-type') == 'touch') {\n        this.convert_to_touch($target);\n      }\n\n      this.reposition($target, $tip, $target.attr('class'));\n      $target.addClass('open');\n      $tip.fadeIn(150);\n    },\n\n    hide : function ($target) {\n      var $tip = this.getTip($target);\n\n      $tip.fadeOut(150, function() {\n        $tip.find('.tap-to-close').remove();\n        $tip.off('click.fndtn.tooltip.tapclose MSPointerDown.fndtn.tapclose');\n        $target.removeClass('open');\n      });\n    },\n\n    off : function () {\n      var self = this;\n      this.S(this.scope).off('.fndtn.tooltip');\n      this.S(this.settings.tooltip_class).each(function (i) {\n        $('[' + self.attr_name() + ']').eq(i).attr('title', $(this).text());\n      }).remove();\n    },\n\n    reflow : function () {}\n  };\n}(jQuery, window, window.document));\n",";(function ($, window, document, undefined) {\n  'use strict';\n\n  Foundation.libs.topbar = {\n    name : 'topbar',\n\n    version: '{{VERSION}}',\n\n    settings : {\n      index : 0,\n      sticky_class : 'sticky',\n      custom_back_text: true,\n      back_text: 'Back',\n      mobile_show_parent_link: true,\n      is_hover: true,\n      scrolltop : true, // jump to top when sticky nav menu toggle is clicked\n      sticky_on : 'all'\n    },\n\n    init : function (section, method, options) {\n      Foundation.inherit(this, 'add_custom_rule register_media throttle');\n      var self = this;\n\n      self.register_media('topbar', 'foundation-mq-topbar');\n\n      this.bindings(method, options);\n\n      self.S('[' + this.attr_name() + ']', this.scope).each(function () {\n        var topbar = $(this),\n            settings = topbar.data(self.attr_name(true) + '-init'),\n            section = self.S('section, .top-bar-section', this);\n        topbar.data('index', 0);\n        var topbarContainer = topbar.parent();\n        if (topbarContainer.hasClass('fixed') || self.is_sticky(topbar, topbarContainer, settings) ) {\n          self.settings.sticky_class = settings.sticky_class;\n          self.settings.sticky_topbar = topbar;\n          topbar.data('height', topbarContainer.outerHeight());\n          topbar.data('stickyoffset', topbarContainer.offset().top);\n        } else {\n          topbar.data('height', topbar.outerHeight());\n        }\n\n        if (!settings.assembled) {\n          self.assemble(topbar);\n        }\n\n        if (settings.is_hover) {\n          self.S('.has-dropdown', topbar).addClass('not-click');\n        } else {\n          self.S('.has-dropdown', topbar).removeClass('not-click');\n        }\n\n        // Pad body when sticky (scrolled) or fixed.\n        self.add_custom_rule('.f-topbar-fixed { padding-top: ' + topbar.data('height') + 'px }');\n\n        if (topbarContainer.hasClass('fixed')) {\n          self.S('body').addClass('f-topbar-fixed');\n        }\n      });\n\n    },\n\n    is_sticky: function (topbar, topbarContainer, settings) {\n      var sticky = topbarContainer.hasClass(settings.sticky_class);\n\n      if (sticky && settings.sticky_on === 'all') {\n        return true;\n      } else if (sticky && this.small() && settings.sticky_on === 'small') {\n        return (matchMedia(Foundation.media_queries.small).matches && !matchMedia(Foundation.media_queries.medium).matches &&\n            !matchMedia(Foundation.media_queries.large).matches);\n        //return true;\n      } else if (sticky && this.medium() && settings.sticky_on === 'medium') {\n        return (matchMedia(Foundation.media_queries.small).matches && matchMedia(Foundation.media_queries.medium).matches &&\n            !matchMedia(Foundation.media_queries.large).matches);\n        //return true;\n      } else if(sticky && this.large() && settings.sticky_on === 'large') {\n        return (matchMedia(Foundation.media_queries.small).matches && matchMedia(Foundation.media_queries.medium).matches &&\n            matchMedia(Foundation.media_queries.large).matches);\n        //return true;\n      }\n\n      return false;\n    },\n\n    toggle: function (toggleEl) {\n      var self = this,\n          topbar;\n\n      if (toggleEl) {\n        topbar = self.S(toggleEl).closest('[' + this.attr_name() + ']');\n      } else {\n        topbar = self.S('[' + this.attr_name() + ']');\n      }\n\n      var settings = topbar.data(this.attr_name(true) + '-init');\n\n      var section = self.S('section, .top-bar-section', topbar);\n\n      if (self.breakpoint()) {\n        if (!self.rtl) {\n          section.css({left: '0%'});\n          $('>.name', section).css({left: '100%'});\n        } else {\n          section.css({right: '0%'});\n          $('>.name', section).css({right: '100%'});\n        }\n\n        self.S('li.moved', section).removeClass('moved');\n        topbar.data('index', 0);\n\n        topbar\n          .toggleClass('expanded')\n          .css('height', '');\n      }\n\n      if (settings.scrolltop) {\n        if (!topbar.hasClass('expanded')) {\n          if (topbar.hasClass('fixed')) {\n            topbar.parent().addClass('fixed');\n            topbar.removeClass('fixed');\n            self.S('body').addClass('f-topbar-fixed');\n          }\n        } else if (topbar.parent().hasClass('fixed')) {\n          if (settings.scrolltop) {\n            topbar.parent().removeClass('fixed');\n            topbar.addClass('fixed');\n            self.S('body').removeClass('f-topbar-fixed');\n\n            window.scrollTo(0,0);\n          } else {\n            topbar.parent().removeClass('expanded');\n          }\n        }\n      } else {\n        if (self.is_sticky(topbar, topbar.parent(), settings)) {\n          topbar.parent().addClass('fixed');\n        }\n\n        if (topbar.parent().hasClass('fixed')) {\n          if (!topbar.hasClass('expanded')) {\n            topbar.removeClass('fixed');\n            topbar.parent().removeClass('expanded');\n            self.update_sticky_positioning();\n          } else {\n            topbar.addClass('fixed');\n            topbar.parent().addClass('expanded');\n            self.S('body').addClass('f-topbar-fixed');\n          }\n        }\n      }\n    },\n\n    timer : null,\n\n    events : function (bar) {\n      var self = this,\n          S = this.S;\n\n      S(this.scope)\n        .off('.topbar')\n        .on('click.fndtn.topbar', '[' + this.attr_name() + '] .toggle-topbar', function (e) {\n          e.preventDefault();\n          self.toggle(this);\n        })\n        .on('click.fndtn.topbar','.top-bar .top-bar-section li a[href^=\"#\"],[' + this.attr_name() + '] .top-bar-section li a[href^=\"#\"]',function (e) {\n            var li = $(this).closest('li');\n            if(self.breakpoint() && !li.hasClass('back') && !li.hasClass('has-dropdown'))\n            {\n            self.toggle();\n            }\n        })\n        .on('click.fndtn.topbar', '[' + this.attr_name() + '] li.has-dropdown', function (e) {\n          var li = S(this),\n              target = S(e.target),\n              topbar = li.closest('[' + self.attr_name() + ']'),\n              settings = topbar.data(self.attr_name(true) + '-init');\n\n          if(target.data('revealId')) {\n            self.toggle();\n            return;\n          }\n\n          if (self.breakpoint()) return;\n          if (settings.is_hover && !Modernizr.touch) return;\n\n          e.stopImmediatePropagation();\n\n          if (li.hasClass('hover')) {\n            li\n              .removeClass('hover')\n              .find('li')\n              .removeClass('hover');\n\n            li.parents('li.hover')\n              .removeClass('hover');\n          } else {\n            li.addClass('hover');\n\n            $(li).siblings().removeClass('hover');\n\n            if (target[0].nodeName === 'A' && target.parent().hasClass('has-dropdown')) {\n              e.preventDefault();\n            }\n          }\n        })\n        .on('click.fndtn.topbar', '[' + this.attr_name() + '] .has-dropdown>a', function (e) {\n          if (self.breakpoint()) {\n\n            e.preventDefault();\n\n            var $this = S(this),\n                topbar = $this.closest('[' + self.attr_name() + ']'),\n                section = topbar.find('section, .top-bar-section'),\n                dropdownHeight = $this.next('.dropdown').outerHeight(),\n                $selectedLi = $this.closest('li');\n\n            topbar.data('index', topbar.data('index') + 1);\n            $selectedLi.addClass('moved');\n\n            if (!self.rtl) {\n              section.css({left: -(100 * topbar.data('index')) + '%'});\n              section.find('>.name').css({left: 100 * topbar.data('index') + '%'});\n            } else {\n              section.css({right: -(100 * topbar.data('index')) + '%'});\n              section.find('>.name').css({right: 100 * topbar.data('index') + '%'});\n            }\n\n            topbar.css('height', $this.siblings('ul').outerHeight(true) + topbar.data('height'));\n          }\n        });\n\n      S(window).off('.topbar').on('resize.fndtn.topbar', self.throttle(function() {\n          self.resize.call(self);\n      }, 50)).trigger('resize').trigger('resize.fndtn.topbar').load(function(){\n          // Ensure that the offset is calculated after all of the pages resources have loaded\n          S(this).trigger('resize.fndtn.topbar');\n      });\n\n      S('body').off('.topbar').on('click.fndtn.topbar', function (e) {\n        var parent = S(e.target).closest('li').closest('li.hover');\n\n        if (parent.length > 0) {\n          return;\n        }\n\n        S('[' + self.attr_name() + '] li.hover').removeClass('hover');\n      });\n\n      // Go up a level on Click\n      S(this.scope).on('click.fndtn.topbar', '[' + this.attr_name() + '] .has-dropdown .back', function (e) {\n        e.preventDefault();\n\n        var $this = S(this),\n            topbar = $this.closest('[' + self.attr_name() + ']'),\n            section = topbar.find('section, .top-bar-section'),\n            settings = topbar.data(self.attr_name(true) + '-init'),\n            $movedLi = $this.closest('li.moved'),\n            $previousLevelUl = $movedLi.parent();\n\n        topbar.data('index', topbar.data('index') - 1);\n\n        if (!self.rtl) {\n          section.css({left: -(100 * topbar.data('index')) + '%'});\n          section.find('>.name').css({left: 100 * topbar.data('index') + '%'});\n        } else {\n          section.css({right: -(100 * topbar.data('index')) + '%'});\n          section.find('>.name').css({right: 100 * topbar.data('index') + '%'});\n        }\n\n        if (topbar.data('index') === 0) {\n          topbar.css('height', '');\n        } else {\n          topbar.css('height', $previousLevelUl.outerHeight(true) + topbar.data('height'));\n        }\n\n        setTimeout(function () {\n          $movedLi.removeClass('moved');\n        }, 300);\n      });\n\n      // Show dropdown menus when their items are focused\n      S(this.scope).find('.dropdown a')\n        .focus(function() {\n          $(this).parents('.has-dropdown').addClass('hover');\n        })\n        .blur(function() {\n          $(this).parents('.has-dropdown').removeClass('hover');\n        });\n    },\n\n    resize : function () {\n      var self = this;\n      self.S('[' + this.attr_name() + ']').each(function () {\n        var topbar = self.S(this),\n            settings = topbar.data(self.attr_name(true) + '-init');\n\n        var stickyContainer = topbar.parent('.' + self.settings.sticky_class);\n        var stickyOffset;\n\n        if (!self.breakpoint()) {\n          var doToggle = topbar.hasClass('expanded');\n          topbar\n            .css('height', '')\n            .removeClass('expanded')\n            .find('li')\n            .removeClass('hover');\n\n            if(doToggle) {\n              self.toggle(topbar);\n            }\n        }\n\n        if(self.is_sticky(topbar, stickyContainer, settings)) {\n          if(stickyContainer.hasClass('fixed')) {\n            // Remove the fixed to allow for correct calculation of the offset.\n            stickyContainer.removeClass('fixed');\n\n            stickyOffset = stickyContainer.offset().top;\n            if(self.S(document.body).hasClass('f-topbar-fixed')) {\n              stickyOffset -= topbar.data('height');\n            }\n\n            topbar.data('stickyoffset', stickyOffset);\n            stickyContainer.addClass('fixed');\n          } else {\n            stickyOffset = stickyContainer.offset().top;\n            topbar.data('stickyoffset', stickyOffset);\n          }\n        }\n\n      });\n    },\n\n    breakpoint : function () {\n      return !matchMedia(Foundation.media_queries['topbar']).matches;\n    },\n\n    small : function () {\n      return matchMedia(Foundation.media_queries['small']).matches;\n    },\n\n    medium : function () {\n      return matchMedia(Foundation.media_queries['medium']).matches;\n    },\n\n    large : function () {\n      return matchMedia(Foundation.media_queries['large']).matches;\n    },\n\n    assemble : function (topbar) {\n      var self = this,\n          settings = topbar.data(this.attr_name(true) + '-init'),\n          section = self.S('section, .top-bar-section', topbar);\n\n      // Pull element out of the DOM for manipulation\n      section.detach();\n\n      self.S('.has-dropdown>a', section).each(function () {\n        var $link = self.S(this),\n            $dropdown = $link.siblings('.dropdown'),\n            url = $link.attr('href'),\n            $titleLi;\n\n\n        if (!$dropdown.find('.title.back').length) {\n\n          if (settings.mobile_show_parent_link == true && url) {\n            $titleLi = $('<li class=\"title back js-generated\"><h5><a href=\"javascript:void(0)\"></a></h5></li><li class=\"parent-link show-for-small-only\"><a class=\"parent-link js-generated\" href=\"' + url + '\">' + $link.html() +'</a></li>');\n          } else {\n            $titleLi = $('<li class=\"title back js-generated\"><h5><a href=\"javascript:void(0)\"></a></h5>');\n          }\n\n          // Copy link to subnav\n          if (settings.custom_back_text == true) {\n            $('h5>a', $titleLi).html(settings.back_text);\n          } else {\n            $('h5>a', $titleLi).html('&laquo; ' + $link.html());\n          }\n          $dropdown.prepend($titleLi);\n        }\n      });\n\n      // Put element back in the DOM\n      section.appendTo(topbar);\n\n      // check for sticky\n      this.sticky();\n\n      this.assembled(topbar);\n    },\n\n    assembled : function (topbar) {\n      topbar.data(this.attr_name(true), $.extend({}, topbar.data(this.attr_name(true)), {assembled: true}));\n    },\n\n    height : function (ul) {\n      var total = 0,\n          self = this;\n\n      $('> li', ul).each(function () {\n        total += self.S(this).outerHeight(true);\n      });\n\n      return total;\n    },\n\n    sticky : function () {\n      var self = this;\n\n      this.S(window).on('scroll', function() {\n        self.update_sticky_positioning();\n      });\n    },\n\n    update_sticky_positioning: function() {\n      var klass = '.' + this.settings.sticky_class,\n          $window = this.S(window),\n          self = this;\n\n      if (self.settings.sticky_topbar && self.is_sticky(this.settings.sticky_topbar,this.settings.sticky_topbar.parent(), this.settings)) {\n        var distance = this.settings.sticky_topbar.data('stickyoffset');\n        if (!self.S(klass).hasClass('expanded')) {\n          if ($window.scrollTop() > (distance)) {\n            if (!self.S(klass).hasClass('fixed')) {\n              self.S(klass).addClass('fixed');\n              self.S('body').addClass('f-topbar-fixed');\n            }\n          } else if ($window.scrollTop() <= distance) {\n            if (self.S(klass).hasClass('fixed')) {\n              self.S(klass).removeClass('fixed');\n              self.S('body').removeClass('f-topbar-fixed');\n            }\n          }\n        }\n      }\n    },\n\n    off : function () {\n      this.S(this.scope).off('.fndtn.topbar');\n      this.S(window).off('.fndtn.topbar');\n    },\n\n    reflow : function () {}\n  };\n}(jQuery, window, window.document));\n","// Require All of Foundation modules Here\nrequire(\"fastclick\");\nrequire(\"zurb-foundation-5/js/foundation/foundation\");\nrequire(\"zurb-foundation-5/js/foundation/foundation.abide\");\nrequire(\"zurb-foundation-5/js/foundation/foundation.accordion\");\nrequire(\"zurb-foundation-5/js/foundation/foundation.alert\");\nrequire(\"zurb-foundation-5/js/foundation/foundation.clearing\");\nrequire(\"zurb-foundation-5/js/foundation/foundation.dropdown\");\nrequire(\"zurb-foundation-5/js/foundation/foundation.equalizer\");\nrequire(\"zurb-foundation-5/js/foundation/foundation.interchange\");\nrequire(\"zurb-foundation-5/js/foundation/foundation.joyride\");\nrequire(\"zurb-foundation-5/js/foundation/foundation.magellan\");\nrequire(\"zurb-foundation-5/js/foundation/foundation.offcanvas\");\nrequire(\"zurb-foundation-5/js/foundation/foundation.orbit\");\nrequire(\"zurb-foundation-5/js/foundation/foundation.reveal\");\nrequire(\"zurb-foundation-5/js/foundation/foundation.slider\");\nrequire(\"zurb-foundation-5/js/foundation/foundation.tab\");\nrequire(\"zurb-foundation-5/js/foundation/foundation.tooltip\");\nrequire(\"zurb-foundation-5/js/foundation/foundation.topbar\");\n\n// And Webcube Base\nvar utils = require(\"webcube-base\");\n\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\nvar Navigation = WebCubeObject.extend(function (html_element) {\n  WebCubeObject.call(this);\n  var self = this;\n\n  $(\".slideUp\").addClass(\"active\");\n\n  if ($(\"body\").hasClass(\"cart\")) {\n    $(\".right-off-canvas-toggle\").removeClass(\"right-off-canvas-toggle\");\n  }\n  // Initialize Navigation for Foundation\n  $(document).foundation({\n    offcanvas: {\n      // Sets method in which offcanvas opens.\n      // [ move | overlap_single | overlap ]\n      open_method: \"overlap_single\",\n      close_on_click: false,\n    },\n  });\n\n  var scrollPos = $(this).scrollTop() || 0,\n    scrollHeight = 50,\n    timeOutTime = 40;\n  self.navbarHeight = $(\".slideUp\").outerHeight();\n  var mq = window.matchMedia(\"(max-width: 640px)\");\n  if (mq.matches) {\n    scrollHeight = 25;\n    timeOutTime = 20;\n  }\n\n  // Initialize Sticky nav\n  $(window).scroll(function () {\n    var currentPos = $(this).scrollTop();\n    self.navbarHeight = $(\".slideUp\").outerHeight();\n    if (currentPos + 80 < scrollPos || currentPos === 0) {\n      var copyPos = currentPos;\n      setTimeout(function () {\n        var lastPos = $(this).scrollTop();\n        if (copyPos - lastPos > scrollHeight || currentPos === 0) {\n          $(\".slideUp\").css({\n            transform: \"translateY(0)\",\n            \"-webkit-transform\": \"translateY(0)\",\n          });\n          $(\".slideUp\").addClass(\"active\");\n          scrollPos = currentPos;\n        }\n      }, timeOutTime);\n    } else if (currentPos - 80 > scrollPos) {\n      $(\".slideUp\").css({\n        transform: \"translateY(-\" + self.navbarHeight + \"px)\",\n        \"-webkit-transform\": \"translateY(-\" + self.navbarHeight + \"px)\",\n      });\n      $(\".slideUp\").removeClass(\"active\");\n      scrollPos = currentPos;\n    }\n  });\n\n  this.update_navbar_height = function (msg) {\n    //console.log('navbar height;',msg)\n    self.navbarHeight = $(\".slideUp\").outerHeight();\n  };\n  this.register(\"update_slideup_height\", this.update_navbar_height, this);\n}, {});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: Navigation,\n    factory: new WebCubeObjectFactory(Navigation, \"navigation\", [[]]),\n  };\n}\n","var utils = require('webcube-base'); var sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require('lodash');\n\n\n\nvar OneClickAdd = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    var self = this;\n\n\n    self.get_post_data = function() {\n        var o ={};\n        o.sku = String(self.$el.data(\"sku\"));\n        o.url = self.$el.data(\"url\");\n        o.content_type = self.$el.data(\"content_type\");\n        o.object_id = self.$el.data(\"object_id\");\n        o.quantity = self.$el.data(\"quantity\");\n        o.price = self.$el.data(\"price\");\n        o.style_number  = self.$el.data('sku'); // style = sku for one-click add\n        o.name = self.$el.data('name');\n        return o;\n    }\n\n    self.add_to_cart = function(){\n        var post_data = self.get_post_data();\n        // name, price, style_number\n        sender('analytics-action',{'action':'addToCart','data':[post_data]});\n\n        $.ajax({\n            url: self.$el.data('action'),\n            type: \"post\",\n            data: post_data,\n            success: function (data) {\n                sender('cart_updated',{added:post_data,result:data});\n                self.$el.prop(\"disabled\",false);\n            },\n            error: function (xhr, status, err) {\n                try { console.log(\"ERROR\", err);} catch(e){\n                  //skip\n                }\n                self.$el.prop(\"disabled\",false);\n            }\n        });\n    }\n\n    self.do_init = function(){\n        self.$el.click(function (e) {\n            e.preventDefault();\n            self.$el.prop(\"disabled\",true);\n            self.add_to_cart();\n        });\n    }\n\n\n}, {\n    initialize: function(){\n        this.do_init();\n    }\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: OneClickAdd,\n        factory: new WebCubeObjectFactory(OneClickAdd, \"one-click-add\", [[]])\n    }\n}\n\n\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\n\nvar WebcubeOverlay = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n\n    var self = this;\n    self.$link = $(html_element);\n    self.overlay_id = self.$link.data('overlay-id') ? self.$link.data('overlay-id') : 'general-modal';\n    self.partial_selector = self.$link.data('partial-selector') ? self.$link.data('partial-selector') : null;\n    self.reload_on_close = self.$link.data('reload-on-close') ? true : false;\n    \n    if(self.$link.data('reveal-id')){\n        console.warn(\"Binding reveal and wc-overlay on the same element may cause a race condition\") \n    }\n\n    self.$link.on('click',function(e) {\n        e.preventDefault();\n\n        var url = self.$link.attr('href') ? self.$link.attr('href') : null;\n\n        if (url) {\n            if (self.partial_selector) {\n                var html = $.get(url, function(data){\n                    var $modal = $('#'+self.overlay_id);\n                    $modal.html($(self.partial_selector, data));\n                    if ($modal.find('a.close-reveal-modal').length === 0) {\n                        $modal.append('<a class=\"close-reveal-modal\" arial-label=\"Close\">&times;</a>');\n                    }\n                    $modal.foundation('reveal', 'open');\n                    $modal.attr('partial-selector', self.partial_selector);\n                    $(document).on('closed.fndtn.reveal', '#'+self.overlay_id+'[data-reveal]', self.closed);\n                });\n            }\n            else {\n                console.log(\"opening \"+url+\" in \"+self.overlay_id);\n                $('#'+self.overlay_id).foundation('reveal', 'open', url);\n                $(document).on('closed.fndtn.reveal', '#'+self.overlay_id+'[data-reveal]', self.closed);\n            }\n        }\n        else {\n            $('#'+self.overlay_id).foundation('reveal', 'open');\n        }\n    });\n\n    self.closed = function(e){\n        if (e.namespace !== 'fndtn.reveal') return;\n\n        $(this).find(\"[wc-object]\").each(function(index){\n            if(this.webcube_object != undefined){\n                this.webcube_object.destroy()\n            }\n        });\n\n        $(this).html('').removeAttr('partial-selector');\n       \n        if(self.reload_on_close){\n            window.location.reload();\n        } \n    };\n\n});\n\n\nWebcubeOverlay.prototype.init = function(e){\n};\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: WebcubeOverlay,\n        factory: new WebCubeObjectFactory(WebcubeOverlay, \"overlay\", [[]])\n    }\n}\n","var utils = require(\"webcube-base\");\nvar $ = require(\"jquery\");\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\nvar ProductAnalytics = WebCubeObject.extend(function (html_element) {\n  WebCubeObject.call(this);\n  var self = this;\n  self.$element = $(html_element);\n  self.skus_tracked = {};\n  self.styles_tracked = {};\n  self.product_data = {\n    category: self.$element.attr(\"data-product-category\"),\n    price: self.$element.attr(\"data-product-price\"),\n    style: self.$element.attr(\"data-product-style\"),\n  };\n\n  // Google Remarketing\n  this.track_google_remarketing = function (skudata) {\n    var conversion_params = {\n      google_conversion_id: Number(\n        self.$element.attr(\"data-adwords-conversion-id\")\n      ),\n      google_custom_params: {\n        ecomm_prodid: skudata.sku,\n        ecomm_pagetype: \"product\",\n        ecomm_totalvalue: Number(skudata.price.replace(\"$\", \"\")),\n        ecomm_category: self.product_data.category,\n      },\n      google_remarketing_only: true,\n    };\n    window.google_trackConversion(conversion_params);\n  };\n\n  // Facebook Pixel\n  this.track_facebook_product_pixel = function (skudata) {\n    if (window.fbq) {\n      window.fbq(\"track\", \"ViewContent\", {\n        content_ids: [skudata.sku],\n        content_type: \"product\",\n        value: skudata.price.replace(\"$\", \"\"),\n        currency: \"USD\",\n      });\n    }\n  };\n  this.track_facebook_group_pixel = function (product_data) {\n    if (window.fbq) {\n      window.fbq(\"track\", \"ViewContent\", {\n        content_ids: [product_data.style],\n        content_type: \"product_group\",\n        value: product_data.price.replace(\"$\", \"\"),\n        currency: \"USD\",\n      });\n    }\n  };\n\n  this.track_product_view = function (style) {\n    if (style in self.styles_tracked) {\n      return;\n    } else {\n      self.styles_tracked[style] = true;\n    }\n    if (\n      self.$element.attr(\"data-facebook\") &&\n      self.$element.attr(\"data-facebook-product-type\") == \"product_group\"\n    ) {\n      self.track_facebook_group_pixel(self.product_data);\n    }\n  };\n\n  this.track_sku_change = function (msg) {\n    //console.log(\"#### Tracking sku selected: \",msg);\n\n    var sku = msg.payload.sku;\n    if (sku) {\n      if (sku in self.skus_tracked) {\n        return;\n      } else {\n        self.skus_tracked[msg.payload.sku] = true;\n      }\n    }\n\n    if (self.$element.attr(\"data-remarketing\")) {\n      self.track_google_remarketing(msg.payload);\n    }\n\n    if (\n      self.$element.attr(\"data-facebook\") &&\n      self.$element.attr(\"data-facebook-product-type\") == \"product_id\"\n    ) {\n      self.track_facebook_product_pixel(msg.payload);\n    }\n  };\n  this.register(\"sku_selected\", this.track_sku_change, this);\n  this.track_product_view();\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: ProductAnalytics,\n    factory: new WebCubeObjectFactory(ProductAnalytics, \"product-analytics\", [\n      [],\n    ]),\n  };\n}\n","var base = require(\"webcube-base\");\nvar sender = base.MessageSender;\nvar WebCubeObject = base.Object;\nvar WebCubeObjectFactory = base.ObjectFactory;\nvar $ = require(\"jquery\");\nvar Gallery = require(\"webcube-gallery\");\nvar Product = require(\"webcube-product\");\nvar utils = require(\"webcube-utils\");\nvar _ = require(\"lodash\");\n\n$.slick = require(\"slick-carousel\");\n\n/**\n * To work as a 'bindable', the first parameter should be the html_element,\n * and all other arguments should be added as wc-arguments attribute on the\n * attribute.\n */\nvar ProductGallery = WebCubeObject.extend(\n  function (html_element) {\n    Gallery.cls.call(this, html_element, { dots: false, arrows: false });\n    var self = this;\n    var index_by_option = {};\n    self.no_autoselect_first = false;\n    _.each(this.$thumbs.find(\"img\"), function (v) {\n      v = $(v);\n      var o1 = v.attr(\"data-option1\");\n      var o2 = v.attr(\"data-option2\");\n      var o3 = v.attr(\"data-option3\");\n      var idx = v.attr(\"data-index\");\n      if (typeof index_by_option[o1] === \"undefined\") {\n        index_by_option[o1] = {};\n      }\n      if (typeof index_by_option[o1][o2] === \"undefined\") {\n        index_by_option[o1][o2] = {};\n      }\n      if (typeof index_by_option[o1][o2][o3] === \"undefined\") {\n        index_by_option[o1][o2][o3] = parseInt(idx, 10) - 1;\n      }\n    });\n\n    this.getCurrentSlideOptions = function () {\n      var v = this.$thumbs.find('img[data-index=\"' + this.currentSlide + '\"]');\n      if (typeof v === \"undefined\") {\n        return null;\n      }\n\n      var o1 = v.attr(\"data-option1\");\n      var o2 = v.attr(\"data-option2\");\n      var o3 = v.attr(\"data-option3\");\n      return { option1: o1, option2: o2, option3: o3 };\n    };\n\n    this.getSlideByOption = function (option_dict) {\n      var option1, option2, option3;\n      if (option_dict.option3 != \"\") {\n        option3 = option_dict.option3;\n      } else {\n        option3 = \"\";\n      }\n      if (option_dict.option2 != \"\") {\n        option2 = option_dict.option2;\n      } else {\n        option2 = \"\";\n      }\n      if (option_dict.option1 != \"\") {\n        option1 = option_dict.option1;\n      } else {\n        option1 = \"\";\n      }\n\n      //console.log(\"Slide #\",this.currentSlide,\"Current\",this.getCurrentSlideOptions(),\" Desired\",option_dict);\n\n      // rank by match quality - if we have a better match, change.\n      // but if no better match, don't bother\n      var scored = _.map(this.$thumbs.find(\"img\"), function (v) {\n        v = $(v);\n        if (\n          option_dict.product_id != undefined &&\n          v.data(\"product-id\") != option_dict.product_id\n        ) {\n          return null;\n        }\n        var m = 0;\n        if (v.data(\"option1\") == option1) {\n          m += 1;\n        }\n        if (v.data(\"option2\") == option2) {\n          m += 1;\n        }\n        if (v.data(\"option3\") == option3) {\n          m += 1;\n        }\n        return {\n          i: v.data(\"index\"),\n          m: m,\n          opt: [\n            v.data(\"option1\"),\n            v.data(\"option2\"),\n            v.data(\"option3\"),\n            v.data(\"product-id\"),\n          ],\n        };\n      });\n      //console.log(\"Scored slides for current match: \",scored);\n\n      var current = _.filter(scored, { i: this.currentSlide + 1 })[0];\n\n      if (\n        current != undefined &&\n        _.filter(scored, function (o) {\n          return o != null && o.m > current.m;\n        }).length == 0\n      ) {\n        //console.log(\"Skipping due to no better matches\");\n        return null;\n      }\n\n      var ideal = _.sortBy(\n        _.sortBy(\n          _.filter(scored, function (o) {\n            return o != null && o.m > 0;\n          }),\n          \"-m\"\n        ),\n        \"i\"\n      );\n      // [\"m\",\"i\"] does not seem to dual sort\n\n      //console.log(option1,option2,option3,ideal);\n\n      if (\n        ideal.length > 0 &&\n        (current == undefined || ideal[0].i != current.i)\n      ) {\n        return ideal[0].i - 1;\n      } else {\n        return null;\n      }\n      // subtract 1 because that is what slick operates on\n\n      // TODO: this code is unreachable\n      // try {\n      //   return index_by_option[option1][option2][option3];\n      // } catch (err) {\n      //   try {\n      //     return index_by_option[option1][option2][\"\"];\n      //   } catch (err2) {\n      //     try {\n      //       return index_by_option[option1][\"\"][\"\"];\n      //     } catch (err3) {\n      //       var first_opt1 = null;\n      //       for (var k in index_by_option) {\n      //         first_opt1 = k;\n      //         break;\n      //       }\n      //       return index_by_option[first_opt1][\"\"][\"\"];\n      //     }\n      //   }\n      // }\n    };\n\n    $(html_element).attr(\"data-id\", this.id);\n    this.$thumbs.find(\" img\").on(\"click\", function () {\n      var which = $(this);\n      sender(\"update_product_form\", {\n        option1: which.attr(\"data-option1\"),\n        option2: which.attr(\"data-option2\"),\n        option3: which.attr(\"data-option3\"),\n      });\n    });\n\n    this.preselect_from_url = function () {\n      // if hash passed to the URL, we click the first element\n      // that matches data-option1 value\n      var url_param = utils.getJsonFromUrl();\n      var select_value = \"\";\n      var select_option = \"option1\";\n\n      //console.log(url_param);\n\n      if (url_param.option1 != undefined) {\n        select_value = url_param.option1;\n        select_option = \"option1\";\n      } else if (url_param.option2 != undefined) {\n        select_value = url_param.option2;\n        select_option = \"option2\";\n      } else if (url_param.option3 != undefined) {\n        select_value = url_param.option3;\n        select_option = \"option3\";\n      } else {\n        select_value = decodeURIComponent(\n          window.location.hash.replace(\"#\", \"\")\n        );\n      }\n\n      if (select_value == \"\") {\n        // fallback for quickshop scenario\n        if ($(\".quickshop-modal\").length > 0) {\n          select_value = $(\".quickshop-modal\").data(\"selected-option\");\n        }\n      }\n      //console.log(\"Product Gallery Auto Select Running for \"+select_value);\n      if (select_value != \"\") {\n        //console.log(\"selecting \"+select_option + \" '\" + select_value + \"'\");\n        //$('.thumbnails .slick-slide img[data-'+select_option+'=\"'+select_value+'\"]').first().click();\n\n        $(\".thumbnails .slick-slide img\")\n          .filter(function (i, el) {\n            var opt = $(el).data(select_option);\n            if (opt) {\n              return (\n                opt.replace(/[^0-9a-zA-Z]/g, \"\").toLowerCase() ==\n                select_value.replace(/[^0-9a-zA-Z]/g, \"\").toLowerCase()\n              );\n            }\n            return false;\n          })\n          .first()\n          .click();\n      } else if (!self.no_autoselect_first) {\n        $(\".thumbnails .slick-slide img\").first().click();\n        var opt = $(\".thumbnails .slick-slide img\").first().data(\"option1\");\n        if ($(\".button-selector\")) {\n          $('.button-selector > li[data-value=\"' + opt + '\"]').addClass(\n            \"active\"\n          );\n        }\n      }\n    };\n\n    this.update_product_image = function (msg) {\n      var s = self.getSlideByOption(msg.payload.option);\n      if (s != null) {\n        this.gotoSlide(s);\n      }\n    };\n  },\n  {\n    initialize: function () {\n      this.preselect_from_url();\n      this.register(\"update_product_image\", this.update_product_image, this);\n    },\n    dispatch: function (msg) {\n      if (\n        typeof msg.payload.name !== \"undefined\" &&\n        msg.payload.name === \"update_product_image\"\n      ) {\n        var s = this.getSlideByOption(msg.payload.option);\n        if (s != null) {\n          this.gotoSlide(s);\n        }\n      } else {\n        Gallery.cls.prototype.dispatch.call(this, msg);\n      }\n    },\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: ProductGallery,\n    factory: new WebCubeObjectFactory(ProductGallery, \"productgallery\", [\n      [\".display\", \".thumbnails\"],\n    ]),\n  };\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require('lodash');\n\n\nvar ProductModel = function (product_data, selected_options) {\n    this.data = product_data;\n    this.selected_options = (selected_options == null) ? [null, null, null] : selected_options;\n    this.config = {};\n    var self = this;\n\n    this.index_options = function (sku_list) {\n        if (sku_list == null) {\n            sku_list = self.data.product_options.filter(function(po){ return po.can_order });\n        }\n        var options = [];\n        options.push(_.uniq(_.map(sku_list, \"option1\")));\n        options.push(_.uniq(_.map(sku_list, \"option2\")));\n        options.push(_.uniq(_.map(sku_list, \"option3\")));\n        return options;\n    };\n\n    this.filter_skus = function (selected_options) {\n        return _.filter(self.data.product_options, function (po) {\n            if(!po.can_order){ return false }\n            return (po.option1 == selected_options[0] || selected_options[0] == null) &&\n                (po.option2 == selected_options[1] || selected_options[1] == null) &&\n                (po.option3 == selected_options[2] || selected_options[2] == null);\n        });\n    };\n\n    this.options_by_selection = function (which_option, partial_selection, can_order_only) {\n        // options by selection\n        if (typeof can_order_only === 'undefined') {\n            can_order_only = true;\n        }\n        var rv = _(self.data.product_options).filter(function (opt) {\n            var included = ( can_order_only && opt.can_order );\n            _.each(partial_selection, function (v, k) {\n                if (typeof opt[k] !== 'undefined' && partial_selection[k] != '') {\n                    if (opt[k] != v || (can_order_only && opt.can_order == false)) {\n                        included = false;\n                    }\n                }\n            });\n            return included;\n        }).map(function (v) {\n            return v[which_option];\n        }).uniq();\n        return rv.value();\n    };\n\n    // The options to display in drop downs based upon how much selection has been made\n    this.selectable_options = function () {\n\n        var options = self.index_options();\n        var selectable_options = [];\n        var partial_selection = {};\n\n        // we make an object with only applicable selections;\n        // otherwise options_by_selection() returns an empty array\n        for (var i = 0; i < self.selected_options.length; i++) {\n            if (self.selected_options[i] !== null) {\n                partial_selection[\"option\" + (i + 1)] = self.selected_options[i];\n            }\n        }\n\n        selectable_options = [\n            // for each option, we only limit them if it wasn't already selected\n            self.selected_options[0] ? options[0] : self.options_by_selection(\"option1\", partial_selection, true),\n            self.selected_options[1] ? options[1] : self.options_by_selection(\"option2\", partial_selection, true),\n            self.selected_options[2] ? options[2] : self.options_by_selection(\"option3\", partial_selection, true)\n        ];\n        return selectable_options;\n    };\n\n    // Based on configuration, the selectable options are checked against all options (index_options)\n    // to determine which should be rendered\n    this.renderable_options = function () {\n        var all_options = self.index_options();\n        var sel_options = self.selectable_options();\n        var renderable_options = [];\n        for (var i = 0; i < all_options.length; i++) {\n            var opt_group = [];\n            for (var j = 0; j < all_options[i].length; j++) {\n                var o = {\n                    \"value\": all_options[i][j],\n                    \"selectable\": false\n                }\n                if (sel_options[i].indexOf(all_options[i][j]) !== -1) {\n                    o[\"selectable\"] = true;\n                }\n                if (o[\"selectable\"] === true || self.config.show_disabled)\n                    opt_group.push(o);\n            }\n            renderable_options.push(opt_group);\n        }\n        return renderable_options;\n    };\n\n    this.filtered_options = function () {\n        return self.index_options(self.filter_skus(self.selected_options));\n    };\n\n    this.selected_skus = function () {\n        return self.filter_skus(self.selected_options);\n    };\n\n\n    this.orderable_selected_skus = function () {\n        return _.filter(self.filter_skus(self.selected_options),\n            function (po) {\n                return po.can_order;\n            });\n    };\n\n}\n\nvar ProductOptionForm = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n    var self = this;\n    self.element = html_element;\n    self.template = _.template($('script[type=\"html/template\"]', html_element).text());\n    self.product_data = JSON.parse($('script[type=\"application/json\"]', html_element).text());\n    self.model = new ProductModel(self.product_data);\n\n    var default_options = {\n        \"show_disabled\": false,\n        \"button_selector_options\": null\n    }\n    var el_options = $(self.element).data('options');\n    self.config = $.extend(default_options, el_options ? el_options : {});\n\n    self.update_config = function () {\n        self.model.config = self.config;\n    }\n\n    self.update_options = function () {\n        var selected_options = [null, null, null];\n        for (var i = 1; i <= 3; i++) {\n            var v = $(\".product_option\" + i, self.element).val();\n            if (v == undefined || v == \"\") {\n                continue;\n            }\n            selected_options[i - 1] = v;\n        }\n        self.model.selected_options = selected_options;\n\n        sender(\"update_product_image\", {\n            option: {\n                'product_id': self.model.data.id,\n                'option1': selected_options[0],\n                'option2': selected_options[1],\n                'option3': selected_options[2]\n            }\n        });\n\n    }\n\n    self.button_selector_update = function (selector_name) {\n        $(\".button-selector[data-name=\" + selector_name + \"] [data-selector=\" + selector_name + \"]\", self.element).on('click', function () {\n            var $btn = $(this);\n            var $sel = $('select[name=' + selector_name + ']', self.element);\n            if ($sel.val() !== $btn.data('value')) {\n                $sel.val($btn.data('value')).change();\n            } else {\n                $sel.val('').change();\n            }\n        });\n    }\n\n    self.render = function () {\n        var cx = {model: self.model, data: self.product_data}\n        cx.selected_skus = cx.model.selected_skus();\n        cx.selected_sku = (cx.selected_skus.length == 1) ? cx.selected_skus[0] : null;\n\n        if( cx.selected_sku == null ){\n          // Our selection is not valid, we should clear it and update\n        }\n        //console.log(cx);\n\n        var form_cont = $(\".form_container\", self.element).html(\n            self.template(cx)\n        );\n\n    }\n\n    self.rig = function () {\n        //console.log(\"rigging\");\n        $(\".form_container [trigger_render]\", self.element).change(self.update);\n\n        if (self.config.button_selector_options) {\n            $(\".button-selector\", self.element).each(function () {\n                self.button_selector_update($(this).data('name'));\n            });\n        }\n    }\n\n    this.update_product_form = function (msg) {\n        console.log(\"updating product form\");\n        $(\"select.product_option1\").val(msg.payload.option1);\n        $(\"select.product_option2\").val(msg.payload.option2);\n        $(\"select.product_option3\").val(msg.payload.option3);\n        self.update_options();\n    };\n\n    this.register('update_product_form', this.update_product_form, this);\n\n    $(document).off('submit', 'form.add-to-cart');\n    $(document).on('submit', 'form.add-to-cart', function () {\n        var $this = $(this);\n\n\n        var err = null;\n        $('.product_option select').each(function(idx){\n            if ($(this).val() === \"\") {\n                err = $(this).data('required-message');\n            }\n        });\n        if (err) {\n            alert(err);\n            return false;\n        }\n\n        var $loading = $($('script[data-template=\"loading\"]', html_element).text());\n        var $submit_btn = $('input[type=\"submit\"]:visible', this);\n\n        var post_data = {};\n        _.map($(this).serializeArray(), function (v) {\n            return post_data[v.name] = v.value;\n        });\n\n        $.ajax({\n            url: $(this).attr('action'),\n            type: $(this).attr('method'),\n            data: $(this).serialize(),\n            //dataType: \"json\",\n            success: function (data) {\n                // Show Submit button\n                $(\".add_to_cart_col.active\").html($submit_btn.css(\"visibility\", \"visible\"));\n\n                $('#general-modal').foundation('reveal', 'close');\n                sender('cart_updated', {added: post_data, result: data})\n            },\n            error: function (xhr, status, err) {\n                try {\n                    console.log(\"ERROR\", err);\n                } catch (e) {\n                    // pass\n                }\n                // Show Submit button\n                $(\".add_to_cart_col.active\").html($submit_btn.css(\"visibility\", \"visible\"));\n            }\n        });\n\n        // Hide submit button\n        $submit_btn.css(\"visibility\", \"hidden\");\n        setTimeout(function () {\n            $(\".add_to_cart_col.active\").append($loading)\n        }, 125);\n\n        return false;\n    });\n\n    self.update = function () {\n        self.update_config();\n        self.update_options();\n        if( self.model.selected_skus().length == 0 ){\n            alert(\"Sorry, this option is not available\");\n            $(this).val(null)\n        }else{\n            self.render();\n            self.rig();\n\n        }\n    }\n\n    self.update();\n\n}, {});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: ProductOptionForm,\n        factory: new WebCubeObjectFactory(ProductOptionForm, \"productoption_form\", [[]]),\n        model: ProductModel\n    }\n}\n\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar ProductOptionForm = require(\"webcube-productoption_form\");\nvar _ = require('lodash');\n\nvar ProductGroup = WebCubeObject.extend(function(html_element) {\n/*\n * Checks the productgroup form for individual product forms and\n * handle submission checks. It does not take care of individual\n * products' form/image/button handling.\n */\n    WebCubeObject.call(this);\n    var self = this;\n    self.el = html_element;\n    self.$form = $('form', self.el);\n\n    // TODO: consider if we want to calculate and add product prices for a total\n\n    self.$form.on('submit', function(e) {\n        var $f = $(this);\n        var form_errors = [];\n        $f.find('[wc-object=productoption_form]').each(function() { // TODO: consider handling simpleproducts as well\n\n            var $subform = $(this); // not a real <form> element, but a subsection of that represents a product\n\n            // Validation 1: If an option (option1,2,3) was changed for a product, assume product is desired, and make sure all options are chosen\n            var is_subform_selected = false; // used to track if product was touched\n            var subform_empty_selects = []; // track any selects that were left empty (for error handling)\n\n            var $subform_selects = $subform.find('.product_option select').each(function() {\n                var $sel = $(this);\n                if ($sel.val()) {\n                   is_subform_selected = true;\n                }\n                else {\n                    subform_empty_selects.push($sel.data('title'));\n                }\n            });\n\n            if (is_subform_selected && subform_empty_selects.length !== 0) {\n                var error_msg = 'Please fix the following errors for '+$subform.data('product-name')+':\\n\\n';\n                for (var i = 0; i<subform_empty_selects.length; i++) {\n                    error_msg += \" - select a \"+subform_empty_selects[i]+\"\\n\";\n                }\n                form_errors.push(error_msg);\n            }\n\n\n            // Validation 2: If a product isn't used, empty any relevant fields to prevent server error. This clears fields like\n            //              quantity which have a value by default\n            if (!is_subform_selected) {\n                var subform_req_fields = {\n                    \"content_type\":null,\n                    \"object_id\": null,\n                    \"sku\": null,\n                    \"quantity\": null,\n                    \"url\": null\n                }\n                $.each(subform_req_fields, function(k,v) {\n                    var $field = $subform.find('[name='+k+']')\n                    if ($field.length) {\n                        $field.val('');\n                    }\n                })\n\n            }\n        })\n        console.log('form_errors:',form_errors.join(\"\\n\\n\"));\n\n        if (form_errors.length) {\n            alert(form_errors.join(\"\\n\\n\\n\"));\n            return false;\n        }\n\n        $f.find('input[type=\"submit\"]').attr('disabled','disabled');\n\n        var post_data = {};\n        _.map($(this).serializeArray(),function(v){ return post_data[v.name] = v.value; });\n\n        $.ajax({\n            url: $(this).attr('action'),\n            type: $(this).attr('method'),\n            data: $(this).serialize(),\n            //dataType: \"json\",\n            success: function (data) {\n                $f.find('input[type=\"submit\"]').attr('disabled',null);\n                $('#general-modal').foundation('reveal', 'close');\n                sender('cart_updated',{added:post_data,result:data})\n            },\n            error: function (xhr, status, err) {\n                try {\n                    console.log(\"ERROR\", err);\n                    if(xhr.responseJSON.error){\n                        alert(xhr.responseJSON.error);\n                    }\n                } catch(e){\n                  //skip\n                }\n                $f.find('input[type=\"submit\"]').attr('disabled',null);\n            }\n        });\n        return false;\n    });\n\n}, {});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: ProductGroup,\n        factory: new WebCubeObjectFactory(ProductGroup, \"productgroup\", [[]])\n    }\n}\n","var _ = require('lodash');\nvar utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\nvar PromoBanner = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n\n    var self=this;\n    var $el = $(html_element);\n    var dest = $el.attr(\"data-url\") ? $el.attr(\"data-url\") : \"/banners/\";\n    var template_sel = $el.attr(\"data-template\") ? $el.attr(\"data-template\") : \"#promo-banner-template\";\n    var $tpl = $(template_sel);\n    var id = $el.attr(\"data-banner-id\") ? $el.attr(\"data-banner-id\") : null;\n    self.close_btn = $el.attr(\"data-close\") ? $('<a class=\"close-btn\">&times;</a>') : null;\n    self.cookie_name = $el.data('cookie-name') ? $el.data('cookie-name') : 'webcube.promobanner';\n    self.cookie_duration = $el.data('cookie-duration') ? $el.data('cookie-duration') : 30;\n    self.cookie_path = $el.data('cookie-path') ? $el.data('cookie-path') : '/';\n    //console.log(dest)\n\n\n    if (!$tpl.length) {\n        console.log('WC: Promo banner template not found. Selector \"'+template_sel+'\" did not match any elements.');\n        return false;\n    }\n\n    if (self.close_btn) {\n      $el.append(self.close_btn);\n      self.close_btn.click(function(e){\n          e.preventDefault();\n          if (!$.cookie(self.cookie_name)) {\n              // Set cookie on close\n              $.cookie(self.cookie_name, 1, {\n                  path: self.cookie_path,\n                  expires: self.cookie_duration\n              });\n          }\n          $el.addClass('hide');\n      });\n    }\n\n    $.ajax({\n      url: dest,\n      dataType: \"html\",\n      complete: function(req) {\n          $el.addClass('loaded');\n          if (id) {\n              $('body').addClass('promo-banner-'+id+'-loaded')\n          }\n      },\n      success: function(data, textStatus, req) {\n          console.log(\"ajax loaded\", textStatus, req)\n          if (textStatus === \"success\" && req.status === 200){\n              var promobanner_template = _.template($tpl.text())\n              try{\n                data = {'banners':JSON.parse(req.responseText)}\n              }catch(error){\n                console.log(\"Error loading promo banners:\",error);\n                data = {'banners':[]};\n              }\n              if (data.banners.length !== 0) {\n                  if ($.cookie(self.cookie_name)) {\n                    $el.addClass('hide');\n                  } else {\n                    var parsedhtml = promobanner_template(data);\n                    $el.html(parsedhtml);\n                    if (self.close_btn) {\n                      $el.append(self.close_btn);\n                      self.close_btn.click(function(e){\n                          e.preventDefault();\n                          if (!$.cookie(self.cookie_name)) {\n                              // Set cookie on close\n                              $.cookie(self.cookie_name, 1, {\n                                  path: self.cookie_path,\n                                  expires: self.cookie_duration\n                              });\n                          }\n                          $el.addClass('hide');\n                      });\n                    }\n                    var new_height = $el.height();\n                    $el.find(\".promo-banner\").hide().delay(0).foundation('equalizer').slideDown(\"fast\", function() {\n                        $el.find(\".promo-banner\").foundation('equalizer');\n                        sender('update_slideup_height', {\n                            sender: 'promo-banner',\n                            action: \"expand\",\n                            height: new_height\n                        });\n                    });\n                    if (id) {\n                        $('body').addClass('promo-banner-'+id+'-active')\n                    }\n                  }\n              }\n              else {\n                  // TODO: in the future, we want to hide other elements using a promotion manager of some sort,\n                  // probably relying on signals instead\n                  $('.promobanner-hide').removeClass('promobanner-hide');\n                  if ($.cookie(self.cookie_name)) {\n                    $el.addClass('hide');\n                  }\n              }\n          }\n      }\n    });\n\n    this.hide_when_scrolled = function(msg) {\n        console.log('promo-banner: hide_when_scrolled', msg);\n        sender('update_slideup_height', {\n            sender: 'promo-banner',\n            action: \"shrink\",\n            height: $el.height()\n        });\n        $el.addClass('hide');\n    };\n    this.register('header_scroll_down', this.hide_when_scrolled, this);\n\n    this.show_when_scrolltop = function(msg) {\n        console.log('promo-banner: show_when_scrolltop', msg);\n        sender('update_slideup_height', {\n            sender: 'promo-banner',\n            action: \"expand\",\n            height: $el.height()\n        });\n        $el.removeClass('hide');\n    };\n    this.register('header_scroll_top', this.show_when_scrolltop, this);\n}, {});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: PromoBanner,\n        factory: new WebCubeObjectFactory(PromoBanner, \"webcube-promo-banner\", [[]])\n    };\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\nvar webcubeProduct = require('webcube-product');\n\nvar QuickShop = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n\n    $(document).on('opened.fndtn.reveal', '[data-reveal]', function (e) {\n        if (e.namespace !== 'fndtn.reveal') return;\n\n        WebCube.document_binding.applyBindingsAndInit(this);\n\n        var modal = $(this);\n        if (modal.hasClass('quickshop-modal')) {\n\n          $('.wc-slick').slick({\n            dots: true,\n            slidesToShow: 4,\n            slidesToScroll: 4,\n            adaptiveHeight: true,\n            autoplay: false,\n            responsive: [\n              {\n                breakpoint: 600,\n                settings: {\n                  slidesToShow: 2,\n                  slidesToScroll: 2\n                }\n              },\n              {\n                breakpoint: 1000,\n                settings: {\n                  slidesToShow: 3,\n                  slidesToScroll: 3\n                }\n              }\n            ]\n          });\n        }\n    });\n\n});\n\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: QuickShop,\n        factory: new WebCubeObjectFactory(QuickShop, \"quick-shop\", [[]])\n    };\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\nvar Rating = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n\n    this.$el= $(html_element);\n    this.avg_rating = this.$el.data('avg');\n    this.total = (this.$el.data('total')) ? this.$el.data('total') : 5;\n\n    this.html = '<span class=\"average\">';\n    for (var i=0; i<this.avg_rating; i++) {\n      this.html += '<i class=\"fi-star\"></i>';\n    }\n    this.html += '</span>';\n\n    this.html += '<span class=\"total\">';\n    for (var j=0; j<this.total; j++) {\n      this.html += '<i class=\"fi-star\"></i>';\n    }\n    this.html += '</span>';\n\n    //console.log('initialize rating...');\n    //console.log(this.avg_rating+\"/\"+this.total);\n    this.$el.html(this.html).addClass('wc-rating');\n\n}, {});\n\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: Rating,\n        factory: new WebCubeObjectFactory(Rating, \"rating\", [[]])\n    };\n}\n","var utils = require(\"webcube-base\");\nvar $ = require(\"jquery\");\nvar _ = require(\"lodash\");\n\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\nvar webcubeProduct = require(\"webcube-product\");\n\nvar MAX_RECENT_VIEWED_PRODUCTS = 4,\n  MAX_RECENT_VIEWED_CATEGORIES = 4;\n\nvar WebCubeRecentlyViewed = WebCubeObject.extend(function (html_element) {\n  WebCubeObject.call(this);\n\n  var recent_products_template = _.template(\n    $('[data-template=\"recent-products\"]', html_element).text()\n  );\n  var recent_categories_template = _.template(\n    $('[data-template=\"recent-categories\"]', html_element).text()\n  );\n\n  var recently_viewed = this.loadInformationFromLocalStorage();\n\n  try {\n    var current_product = JSON.parse($('[data-type=\"product\"]').text());\n    recently_viewed = this.addCurrentProductToLocalStorage(\n      recently_viewed,\n      current_product\n    );\n  } catch (err) {\n    // skip\n  }\n\n  try {\n    var current_category = JSON.parse($('[data-type=\"category\"]').text());\n    recently_viewed = this.addCurrentCategoryToLocalStorage(\n      recently_viewed,\n      current_category\n    );\n  } catch (err) {\n    // skip\n  }\n\n  if (recently_viewed.products.length == 0) {\n    $(\".recently_viewed_title\", html_element).hide();\n  }\n\n  this.renderRecentlyVisitedProducts(\n    recently_viewed.products,\n    recent_products_template,\n    $(\"#recent-products\", html_element),\n    current_product\n  );\n  this.renderRecentlyVisitedCategories(\n    recently_viewed.categories,\n    recent_categories_template,\n    $(\"#recent-categories\", html_element),\n    current_category\n  );\n\n  //    Last step\n  this.saveInformationToLocalStorage(recently_viewed);\n});\n\nWebCubeRecentlyViewed.prototype.loadInformationFromLocalStorage = function () {\n  var recently_viewed = {\n    products: [],\n    categories: [],\n    searches: [],\n    max: { products: 4, categories: 4, searches: 4 },\n  };\n\n  // Load information from localstorage\n  if (typeof localStorage[\"recently_viewed\"] !== \"undefined\") {\n    recently_viewed = JSON.parse(localStorage[\"recently_viewed\"]);\n  }\n  return recently_viewed;\n};\n\nWebCubeRecentlyViewed.prototype.saveInformationToLocalStorage = function (\n  recently_view\n) {\n  localStorage[\"recently_viewed\"] = JSON.stringify(recently_view);\n};\n\nWebCubeRecentlyViewed.prototype.renderRecentlyVisitedProducts = function (\n  products,\n  recent_products_template,\n  target,\n  current_product\n) {\n  var products_to_render = products;\n  if (typeof current_product != \"undefined\")\n    products_to_render = _.filter(products, function (item) {\n      return item.id != current_product.id;\n    });\n\n  var i_rendered = 0;\n  if (products_to_render.length > 0) {\n    for (var i = products_to_render.length - 1; i >= 0; i--) {\n      var html_element = recent_products_template(products_to_render[i]);\n      target.append(html_element);\n      i_rendered++;\n\n      if (i_rendered >= MAX_RECENT_VIEWED_PRODUCTS) {\n        target.show();\n        return;\n      }\n    }\n    target.show();\n  }\n};\n\nWebCubeRecentlyViewed.prototype.renderRecentlyVisitedCategories = function (\n  categories,\n  recent_categories_template,\n  target,\n  current_category\n) {\n  var categories_to_render = categories;\n  if (typeof current_category != \"undefined\")\n    categories_to_render = _.filter(categories, function (item) {\n      return item.id != current_category.id;\n    });\n  var i_rendered = 0;\n  if (categories_to_render.length > 0) {\n    for (var i = categories_to_render.length - 1; i >= 0; i--) {\n      var html_element = recent_categories_template(categories_to_render[i]);\n      $(\"ul\", target).append(html_element);\n      i_rendered++;\n\n      if (i_rendered >= MAX_RECENT_VIEWED_CATEGORIES) {\n        target.show();\n        return;\n      }\n    }\n    target.show();\n  }\n};\n\nWebCubeRecentlyViewed.prototype.addCurrentProductToLocalStorage = function (\n  recently_viewed,\n  current_product\n) {\n  //    check if current_product is in recently viewed. If not, add\n  for (var i = 0; i < recently_viewed.products.length; i++) {\n    if (recently_viewed.products[i].id === current_product.id) {\n      recently_viewed.products.splice(i, 1);\n    }\n  }\n\n  recently_viewed.products.push(current_product);\n\n  if (recently_viewed.products.length > 10) {\n    recently_viewed.products.shift();\n  }\n\n  return recently_viewed;\n};\n\nWebCubeRecentlyViewed.prototype.addCurrentCategoryToLocalStorage = function (\n  recently_viewed,\n  current_category\n) {\n  //    check if current_category is in recently viewed. If not, add\n  for (var i = 0; i < recently_viewed.categories.length; i++) {\n    if (recently_viewed.categories[i].id === current_category.id) {\n      recently_viewed.categories.splice(i, 1);\n    }\n  }\n\n  recently_viewed.categories.push(current_category);\n\n  if (recently_viewed.categories.length > 10) {\n    recently_viewed.categories.shift();\n  }\n\n  return recently_viewed;\n};\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: WebCubeRecentlyViewed,\n    factory: new WebCubeObjectFactory(\n      WebCubeRecentlyViewed,\n      \"recently-viewed\",\n      [[]]\n    ),\n  };\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\nvar Slider = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n\n    var $html_el = $(html_element);\n\n    $html_el.addClass(\"wc-slick\");\n\n    var self=this;\n    var default_options = {\n        responsive: true,\n        dots: true,\n        autoplay: true,\n        autoplaySpeed:8000,\n        wcLazyLoad: false\n    };\n\n    // If custom options have been defined on the data-slick attribute,\n    // we update our default options and composite the two, giving priority\n    // to the custom option\n    var opts = default_options;\n    // set data- defined options here\n    var custom_delay = $html_el.data(\"delay\");\n    if(!isNaN(custom_delay)){\n        opts.autoplaySpeed = Number(custom_delay)*1000;\n    }\n    // parse custom options, and extend base options\n    try{\n        var custom_opts = $html_el.data(\"slick\");\n        if (typeof(custom_opts) !== \"object\") {\n            JSON.parse(custom_opts);\n        }\n        $.extend(opts,custom_opts);\n    }catch(SyntaxError){ /* ignore if we get an exception*/  }\n    // and restore to element data-slick attribute\n    $html_el.attr(\"data-slick\",JSON.stringify(opts));\n    // and initialize the gallery\n    if ($html_el.children().length > 1) {\n      this._slick = $html_el.slick();\n      this._slick.on('init', function(event, slick, currentSlide, nextSlide) {\n        $html_el.removeClass(\"slider-pre-init\");\n      })\n\n      $html_el.on('beforeChange', function(event, slick, currentSlide, nextSlide) {\n        var $currentVideo = $(\"video\", $html_el.find('.slick-slide[data-slick-index=\"'+currentSlide+'\"]'));\n        if ($currentVideo.length > 0) {\n          $currentVideo[0].pause();\n        }\n\n        var $nextVideo = $(\"video\", $html_el.find('.slick-slide[data-slick-index=\"'+nextSlide+'\"]'));\n        if ($nextVideo.length > 0) {\n          $nextVideo[0].load();\n        }\n      });\n\n      if (custom_opts[\"wcLazyLoad\"]) {\n        $html_el.on('beforeChange', function(event, slick, currentSlide, nextSlide) {\n          $(\".lazy\", $html_el).lazyload({\n            threshold : 700\n          });\n        });\n      }\n    }\n\n    $(\".slick-prev\", $html_el).attr(\"aria-label\", \"Go to previous slides\");\n    $(\".slick-next\", $html_el).attr(\"aria-label\", \"Go to next slides\");\n\n}, {});\n\n\nSlider._doc = {\n    title:\"Web Cube Slider\",\n    description:\"Turns the surrounded contents into a slide-able content section with touch controls\",\n    data_params: {\n        \"delay\":{type:\"integer\",desc:\"millisecond delay between slides\"},\n        \"slick\":{type:\"json-string\",desc:\"custom options for slick-slider (see http://kenwheeler.github.io/slick/)\"}\n    }\n};\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: Slider,\n        factory: new WebCubeObjectFactory(Slider, \"slider\", [[]])\n    };\n}\n","var $ = require(\"jquery\");\nvar _ = require(\"lodash\");\nvar utils = require(\"webcube-base\");\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\n/* Checks for presence of cookie webcube.staffuser=1 */\n\nvar StaffToolbar = WebCubeObject.extend(\n  function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    var self = this;\n\n    /* only load staff tooblar if this flag is present */\n    this.check_staff_flag = function () {\n      var cookie_values = document.cookie.split(\";\");\n      for (var i = 0; i < cookie_values.length; i++) {\n        var kv = cookie_values[i].replace(/^ /, \"\").split(\"=\");\n        if (kv[0] == \"webcube.staffuser\" && kv[1] == \"1\") {\n          return true;\n        }\n      }\n      return false;\n    };\n\n    this.gather_meta = function () {\n      var meta = {\n        meta: [],\n        opengraph: [],\n        schema: [],\n        hreflang: [],\n        title: [],\n        canonical: [],\n        h1tags: [],\n      };\n\n      meta.title.push({ name: \"Title\", value: $(\"head title\").text() });\n\n      $(\"head meta\").each(function (i, m) {\n        var $m = $(m);\n        if ($m.attr(\"name\") != null) {\n          meta.meta.push({\n            name: $(m).attr(\"name\"),\n            value: $(m).attr(\"content\"),\n          });\n        } else if ($m.attr(\"property\") != null) {\n          meta.opengraph.push({\n            name: $(m).attr(\"property\"),\n            value: $(m).attr(\"content\"),\n          });\n        }\n      });\n      $('link[rel=\"canonical\"]').each(function (i, m) {\n        meta.canonical.push({ name: \"canonical\", value: $(m).attr(\"href\") });\n      });\n      $('link[rel=\"alternate\"]').each(function (i, m) {\n        meta.hreflang.push({\n          name: \"alternate(\" + $(m).attr(\"hreflang\"),\n          value: $(m).attr(\"href\"),\n        });\n      });\n      $(\"[itemtype]\").each(function (i, m) {\n        var $m = $(m);\n        var itemtype = $(m).attr(\"itemtype\");\n        $(\"[itemprop]\", m).each(function (i, p) {\n          var prop = $(p).attr(\"itemprop\");\n          meta.schema.push({ name: itemtype + \".\" + prop, value: $(p).text() });\n        });\n      });\n\n      $(\"h1\").each(function (i, m) {\n        meta.h1tags.push({ name: \"h1\", value: $(m).text() });\n      });\n      return meta;\n    };\n\n    this.show_info_window = function () {\n      var cx = {\n        meta: self.gather_meta(),\n        path: window.location,\n      };\n      // Retrieve current page info with Ajax request\n      // and pass to template\n      $(\"#general-modal\").html(self.info_template(cx));\n      $(\"#general-modal\").foundation(\"reveal\", \"open\");\n    };\n\n    this.configure_buttons = function () {\n      $(\".edit_button\", self.$el).on(\"click\", function (e) {\n        if ($(\"body\").hasClass(\"admin_links_added\")) {\n          $(\".admin_edit\").toggle();\n          $(\"body\").toggleClass(\"hide_admin_links\");\n        } else {\n          self.augment_edit_tags();\n        }\n      });\n      $(\".info_button\", self.$el).on(\"click\", self.show_info_window);\n    };\n\n    this.activate_toolbar = function (data) {\n      $(self.$el).prepend(data);\n      self.configure_buttons();\n      $(\"body\").addClass(\"stafftoolbar\");\n      self.button_template = _.template($(\"#staff-edit-template\").text());\n      self.info_template = _.template($(\"#staff-info-template\").text());\n    };\n  },\n  /* Public Functions */\n  {\n    // Keep this public so we can initialize externally\n    initialize: function () {\n      if (this.check_staff_flag()) {\n        var self = this;\n        $.ajax({\n          url: \"/admin/stafftoolbar/\", // NOTE: requires update on custom patterns (e.g. /us/admin/)\n          success: function (data, textStatus) {\n            self.activate_toolbar(data);\n          },\n          dataType: \"html\",\n        }).fail(function () {\n          /* no acton */\n        });\n      }\n    },\n    reveal_wc_objects: function () {\n      var style_str =\n        \"position:absolute;top:0px;left:0px;padding:1px;\" +\n        \"background-color: black; color: white; border:1px solid black;\";\n      $(\"[wc-object]\").each(function (e) {\n        $(this).parent();\n        $(this).append(\n          '<div style=\"' +\n            style_str +\n            '\">' +\n            $(this).attr(\"wc-object\").replace(\" \", \"<br/>\") +\n            \"</div>\"\n        );\n      });\n    },\n    augment_edit_tags: function () {\n      console.log(\"Adding edit tags\");\n      var self = this;\n\n      // find all elements with data ahref, and update them\n      $(\"[data-ahref]\").each(function () {\n        var ahref = $(this).data(\"ahref\");\n        var add_edit = $(this).data(\"type\") ? \"add\" : \"edit\";\n        $(this).append(\n          self.button_template({ add_edit: add_edit, ahref: ahref })\n        );\n      });\n\n      // seek for comment tag versions also\n      // parse out add ahref and create add tab as sibling\n      // from: http://stackoverflow.com/questions/1623734/selecting-html-comments-with-jquery\n      $(\"*\")\n        .not(\"iframe\")\n        .contents()\n        .filter(function () {\n          return this.nodeType == document.COMMENT_NODE;\n        })\n        .each(function () {\n          var $el = $(this);\n          var terms = this.data.trim().split(\" \");\n          if (terms[0] == \"wc_widget_add\" || terms[0] == \"wc_widget_edit\") {\n            for (var i = 1; i < terms.length; i++) {\n              var ahref = /data-ahref=\"(\\S+)\"/.exec(terms[i]);\n              var add_edit = \"edit\";\n              if (terms[0] == \"wc_widget_add\") {\n                add_edit = \"add\";\n              }\n              if (ahref) {\n                // if the edit button comes before an <li>, we add the admin_edit tag inside the li\n                // to avoid staggering all the edit buttons inside the parent <ul>\n                if (\n                  add_edit === \"edit\" &&\n                  $el.parent(\"ul\").length === 1 &&\n                  $el.next(\"li\").length === 1\n                ) {\n                  $(\n                    self.button_template({\n                      add_edit: add_edit,\n                      ahref: ahref[1],\n                    })\n                  ).prependTo($el.next(\"li\"));\n                } else {\n                  $(this).after(\n                    self.button_template({\n                      add_edit: add_edit,\n                      ahref: ahref[1],\n                    })\n                  );\n                }\n                break;\n              }\n            }\n          }\n        });\n\n      console.log(\"adding click handler\");\n\n      $(\".admin_edit\").on(\"click\", function (e) {\n        console.log(\"handling click on \" + e);\n        self.edit_link($(this).data(\"ahref\"));\n      });\n\n      $(\"body\").addClass(\"admin_links_added\");\n    },\n    edit_link: function (ahref) {\n      var url = \"/admin/stafftools/\" + ahref + \"/\";\n      console.log(\"opening \" + url);\n      var win = window.open(\n        url,\n        \"Edit\",\n        \"height=600,width=800,resizable=yes,scrollbars=yes\"\n      );\n      win.focus();\n      return false;\n    },\n  }\n);\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: StaffToolbar,\n    factory: new WebCubeObjectFactory(StaffToolbar, \"stafftoolbar\", [[]]),\n  };\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar _ = require('lodash');\n\nvar UpsellAtCheckout = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n    this.$el = $(html_element);\n    var self = this;\n\n\n    this.handle_step_selection = function (msg) {\n        self.show_cross_sell();\n\n        // if (msg.payload.step_name == \"update-items\") {\n        //     self.show_cross_sell();\n        // }\n    }\n\n    this.register(\"select-step\", this.handle_step_selection);\n\n    this.scrollToTop = function () {\n        $(\".mobile-basket-summary .toggle\").click();\n        $('html,body').animate({ scrollTop: 0 });\n    }\n\n    this.show_cross_sell = function () {\n        $(\"#upsells\").load($(\"#upsells\").data(\"cross_sell_url\"), function () {\n            if ($(\"#upsells\").length > 0) {\n                WebCube.document_binding.applyBindingsAndInit($(\"#upsells\")[0]);\n                $(\"#upsells form\").submit(function (e) {\n                    var post_data = {};\n                    _.map($(this).serializeArray(), function (v) { return post_data[v.name] = v.value; });\n\n                    $.ajax({\n                        url: $(this).attr('action'),\n                        type: $(this).attr('method'),\n                        data: $(this).serialize(),\n                        success: function (data) {\n                            sender('cart_updated', { added: post_data, result: data });\n                            console.log(data);\n\n                            if (data[\"next_step\"] == \"shipping-method\") {\n                                sender(\"select-step\", { step_name: \"shipping-method\" });\n                            } else {\n                                sender(\"select-step\", { step_name: \"review\" });\n                            }\n                            self.scrollToTop();\n                        },\n                        error: function (xhr, status, err) {\n                            try { console.log(\"ERROR\", err); } catch (e) {\n                              //skip\n                             }\n                            alert(err);\n                            // send error?\n                        }\n                    });\n                    return false;\n                });\n            }\n        });\n        /*\n        $.getJSON($(\"#upsells\").data(\"cross_sell_url\"),function(data){\n            console.log(data);\n            $(\"#upsells\").load(data.urls[0],null,function(){\n                WebCube.document_binding.applyBindings($(\"#upsells\")[0]);\n            });\n        });\n        */\n    }\n\n}, {\n    initialize: function () {\n        this.show_cross_sell();\n\n        // if ($(\".co-step,.current\").data(\"key\") == \"update-items\") {\n        //     this.show_cross_sell();\n        // }\n    }\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: UpsellAtCheckout,\n        factory: new WebCubeObjectFactory(\n            UpsellAtCheckout,\n            \"upsells\",\n            [[]]\n        )\n    }\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\nvar WebcubeVideo = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n\n    // TODO . Get it from html_element attribute\n    //WebCube.embedVideo('#media', {% if object.video %}$('#media').attr('data-nonembed'){% else %}$('#media').attr('data-webcube-video'){% endif %} });\n\n    var options = {};\n\n    var youtubeEmbedUrl = 'https://www.youtube.com/embed/';\n    // Check for CookieYes Consent object\n    if (window.getCkyConsent) {\n        const consent = window.getCkyConsent();\n        if (!consent.categories.analytics) {\n            youtubeEmbedUrl = 'https://www.youtube-nocookie.com/embed/';\n        }\n    } else {\n        youtubeEmbedUrl = 'https://www.youtube-nocookie.com/embed/';\n    }\n\n    var self = this,\n        wlp = window.location.protocol,\n        defaults = {\n            width: '100%',\n            height: 400,\n            extra_params: $(html_element).data('params') ? $(html_element).data('params'): '',\n            callback: null\n        },\n\n        settings = $.extend({}, defaults, options),\n\n        rx = {\n            youtube: {\n                regex: /.*youtu(\\.be|be.com|be-nocookie.com)\\/(watch(.*)v=|embed\\/)/,\n                embed: youtubeEmbedUrl,\n            },\n            vimeo: {\n                regex: /.*vimeo\\.com\\//,\n                embed: 'https://player.vimeo.com/video/'\n            },\n            webcube: { // TODO:check config for webcube_regex, won't always live at '/videos/'\n                regex: /.*/, // finds first decimal\n                embed: window.location.origin\n            }\n        },\n        parseUrl = function (url) {\n            var video = {\n                type: 'webcube',\n                url: url,\n                id: null,\n                embed_url: '/videos/embed/'\n            };\n\n            // check service\n            for (var regex in rx) {\n                if (url.match(rx[regex].regex) !== null) {\n                    video['type'] = regex;\n                    break;\n                }\n            }\n\n            video.id = video.url.replace(rx[video.type].regex, '').replace(/&.*|\\/$/, '');\n            video.embed_url = [rx[video.type].embed, video.id].join('');\n            if (video.type === 'webcube') {\n                video.embed_url = video.url;\n            }\n            return video;\n        },\n        renderIframe = function (_selector, video, settings) {\n            //var iframeID = WebCube.Util.generateID();\n            var no_cover = (video.cover == \"\" || typeof video.cover === \"undefined\");\n            var no_overlay = (video.has_overlay == \"\" || typeof video.has_overlay === \"undefined\");\n\n            if (!no_cover)\n                video.embed_url += \"?autoplay=1\";\n\n            if (settings.extra_params)\n                video.embed_url += settings.extra_params;\n\n            var iframe = ['<iframe frameborder=\"0\" allowfullscreen src=\"', video.embed_url, '\" width=\"',\n                settings.width, '\" height=\"', settings.height,\n                '\" allow=\"autoplay; fullscreen\" title=\"Video\"></iframe>'].join('');\n\n            if (no_cover) {\n                $(html_element).addClass(\"flex-video\");\n                $(html_element).addClass(\"widescreen\");\n                $(html_element).append(iframe);\n            } else {\n                if (no_overlay) {\n                    $(html_element).addClass(\"flex-video\");\n                    $(html_element).addClass(\"widescreen\");\n                    var $cover = $('<img src=\"'+video.cover+'\" />');\n                    $(html_element).append($cover);\n                    var $target = $cover;\n                }\n                else {\n                    $target = $(html_element);\n                }\n\n\n                $target.click(function(){\n                    if (typeof($(html_element).data('reveal-id')) !== \"undefined\") {\n                        $('#video-container .container').html(iframe);\n                        $(document).on('closed.fndtn.reveal', '[data-reveal]', function () {\n                          var modal = $(this);\n                          modal.find(\".container\").html(\"\");\n                        });\n                    } else {\n                        if ($(this).attr('data-has-overlay') === \"true\") {\n                            $(this).addClass(\"video_active\").find('.video_wrap').addClass(\"flex-video widescreen\").append(iframe);\n                        }\n                        else {\n                            $(this).replaceWith(iframe);\n                        }\n                    }\n                });\n            }\n            if (typeof settings.callback === 'function') {\n                settings.callback(iframe);\n            }\n        };\n\n\n    var _url = $(html_element).attr('data-webcube-video'),\n        video = parseUrl(_url);\n\n    video.cover = $(html_element).attr('data-cover-photo');\n    video.has_overlay = $(html_element).attr('data-has-overlay');\n    video.preload = $(html_element).attr('data-preload');\n\n    if (video.type === 'webcube') {\n        var preload_attr = ' preload=\"none\"';\n        if (video.preload && video.preload.toLowerCase() == 'true') {\n            preload_attr = ' preload=\"auto\"';\n        }\n        $(html_element).append(['<video width=\"100%\" controls src=\"', video.url, '\" poster=\"' + video.cover + '\"', preload_attr + '>'].join(''));\n    } else {\n        renderIframe($(this), video, settings);\n    }\n\n\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: WebcubeVideo,\n        factory: new WebCubeObjectFactory(WebcubeVideo, \"video\", [[]])\n    }\n}\n","var utils = require('webcube-base');\nvar sender = utils.MessageSender;\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\n\n// This was created to not mess up other websites on 4.4.\n// Remove the poster image from the javascript so it could be lazyloaded\n\nvar WebcubeVideoLazy = WebCubeObject.extend(function (html_element) {\n    WebCubeObject.call(this);\n    var options = {};\n\n    var autoplay = 'autoplay;';\n    if ($(html_element).data(\"noautoplay\") == true) {\n        autoplay = '';\n    }\n\n    var youtubeEmbedUrl = 'https://www.youtube.com/embed/';\n    // Check for CookieYes Consent object\n    if (window.getCkyConsent) {\n        const consent = window.getCkyConsent();\n        if (!consent.categories.analytics) {\n            youtubeEmbedUrl = 'https://www.youtube-nocookie.com/embed/';\n        }\n    } else {\n        youtubeEmbedUrl = 'https://www.youtube-nocookie.com/embed/';\n    }\n\n    var self = this,\n        wlp = window.location.protocol,\n        defaults = {\n            width: '100%',\n            height: 400,\n            extra_params: $(html_element).data('params') ? $(html_element).data('params'): '',\n            callback: null\n        },\n\n        settings = $.extend({}, defaults, options),\n\n        rx = {\n            youtube: {\n                regex: /.*youtu(\\.be|be.com|be-nocookie.com)\\/(watch(.*)v=|embed\\/)/,\n                embed: youtubeEmbedUrl,\n            },\n            vimeo: {\n                regex: /.*vimeo\\.com\\//,\n                embed: 'https://player.vimeo.com/video/'\n            },\n            webcube: { // TODO:check config for webcube_regex, won't always live at '/videos/'\n                regex: /.*/, // finds first decimal\n                embed: window.location.origin\n            }\n        },\n        parseUrl = function (url) {\n            var video = {\n                type: 'webcube',\n                url: url,\n                id: null,\n                embed_url: '/videos/embed/'\n            };\n\n            // check service\n            for (var regex in rx) {\n                if (url.match(rx[regex].regex) !== null) {\n                    video['type'] = regex;\n                    break;\n                }\n            }\n\n            video.id = video.url.replace(rx[video.type].regex, '').replace(/&.*|\\/$/, '');\n            video.embed_url = [rx[video.type].embed, video.id].join('');\n            if (video.type === 'webcube') {\n                video.embed_url = video.url;\n            }\n            return video;\n        },\n        renderIframe = function (_selector, video, settings) {\n            //var iframeID = WebCube.Util.generateID();\n            var no_cover = (video.cover == \"\" || typeof video.cover === \"undefined\");\n            var no_overlay = (video.has_overlay == \"\" || typeof video.has_overlay === \"undefined\");\n\n            if (!no_cover) {\n                if((video.url.match(/\\?/g) || []).length > 1){\n                    video.embed_url += \"&autoplay=1\";\n                } else {\n                    video.embed_url += \"?autoplay=1\";\n                }\n            }\n\n            if (settings.extra_params) {\n                video.embed_url += settings.extra_params;\n            }\n\n            var iframe = ['<iframe frameborder=\"0\" allowfullscreen src=\"', video.embed_url, '\" width=\"',\n                settings.width, '\" height=\"', settings.height,\n                '\" allow=\"fullscreen; ', autoplay, '\" title=\"Video\"></iframe>'].join('');\n\n            var $target = null;\n            if (no_cover) {\n                $(html_element).addClass(\"flex-video\");\n                $(html_element).addClass(\"widescreen\");\n                $(html_element).append(iframe);\n            } else {\n                if (no_overlay) {\n                    $(html_element).addClass(\"flex-video\");\n                    $(html_element).addClass(\"widescreen\");\n                    var $cover = $('.cover_overlay',html_element);\n                    $target = $cover;\n                }\n                else {\n                    $target = $(html_element);\n                }\n            }\n            // allow overwriting target in the template\n            if ($(html_element).attr('data-target')) {\n                $target = $(html_element).find($(html_element).attr('data-target'));\n            }\n\n            $(document).on('closed.fndtn.reveal', '[data-reveal]', function () {\n                var modal = $(this);\n                modal.find(\"iframe\").attr(\"src\", \"\");\n                modal.find(\"iframe\").attr(\"src\", video.embed_url);\n            });\n\n            if ($target) {\n                $target.click(function(){\n                    if (typeof($(html_element).data('reveal-id')) !== \"undefined\") {\n                        $('#video-container .container').html(iframe);\n                        $(document).on('closed.fndtn.reveal', '[data-reveal]', function () {\n                          var modal = $(this);\n                          modal.find(\".container\").html(\"\");\n                        });\n                    } else {\n                        if ($(this).attr('data-has-overlay') === \"true\") {\n                            $(this).addClass(\"video_active\").find('.video_wrap').addClass(\"flex-video widescreen\").append(iframe);\n                        }\n                        else {\n                            $('.video_wrap',html_element).replaceWith(iframe);\n                            $(html_element).append(\"<a id='closeBtn'>&#215;</a>\")\n                            $('#closeBtn',html_element).click(function(){\n                                $('iframe',html_element).replaceWith('<div class=\"video_wrap\"></div>');\n                                $(this).remove();\n                            })\n                        }\n                    }\n                });\n            }\n            if (typeof settings.callback === 'function') {\n                settings.callback(iframe);\n            }\n        };\n    if ($(html_element).attr('data-mobile-video-url') && window.innerWidth < 641) {\n        var mobile_video_url = $(html_element).attr('data-mobile-video-url');\n        var looping_video = $(html_element).find('video');\n        looping_video.attr('src',mobile_video_url);\n        looping_video.load();\n    }\n    var _url = $(html_element).attr('data-webcube-video'),\n        video = parseUrl(_url);\n\n    video.cover = $(html_element).attr('data-cover-photo');\n    video.has_overlay = $(html_element).attr('data-has-overlay');\n    video.preload = $(html_element).attr('data-preload');\n\n    if (video.type === 'webcube') {\n        var preload_attr = ' preload=\"none\"';\n        if (video.preload && video.preload.toLowerCase() == 'true') {\n            preload_attr = ' preload=\"auto\"';\n        }\n        $(html_element).append(['<video width=\"100%\" controls src=\"', video.url, '\" poster=\"' + video.cover + '\"', preload_attr + '>'].join(''));\n    } else {\n        renderIframe($(this), video, settings);\n    }\n\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n    module.exports = {\n        cls: WebcubeVideoLazy,\n        factory: new WebCubeObjectFactory(WebcubeVideoLazy, \"lazyvideo\", [[]])\n    }\n}\n","/**\n * Attention Developers!\n * This file is automatically generated (and overwritten).\n **/\n\nvar { DocumentBinding, MessageHandler, MessageSender } = require(\"webcube-base\");\nvar factory = null;\nvar document_binding = new DocumentBinding(window.document);\n\nconst WebCube = window.WebCube\nWebCube.document_binding = document_binding;\nWebCube.messaging = {};\nWebCube.messaging.handler = MessageHandler;\nWebCube.messaging.sender = MessageSender;\n\n/** Add webcube_binding: true to your package to be added **/\n\ntry {\n  factory = require(\"webcube-user-cookies\").factory;\n  if (!factory) console.error(\"NO factory for webcube-user-cookies\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-user-cookies\", err);\n}\n\ntry {\n  factory = require(\"webcube-bulkorder\").factory;\n  if (!factory) console.error(\"NO factory for webcube-bulkorder\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-bulkorder\", err);\n}\n\ntry {\n  factory = require(\"webcube-bulkorder-replacements\").factory;\n  if (!factory) console.error(\"NO factory for webcube-bulkorder-replacements\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-bulkorder-replacements\", err);\n}\n\ntry {\n  factory = require(\"klaviyo_form\").factory;\n  if (!factory) console.error(\"NO factory for klaviyo_form\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for klaviyo_form\", err);\n}\n\ntry {\n  factory = require(\"klaviyo_tracker\").factory;\n  if (!factory) console.error(\"NO factory for klaviyo_tracker\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for klaviyo_tracker\", err);\n}\n\ntry {\n  factory = require(\"webcube-amazonpay\").factory;\n  if (!factory) console.error(\"NO factory for webcube-amazonpay\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-amazonpay\", err);\n}\n\ntry {\n  factory = require(\"webcube-amazonpayview\").factory;\n  if (!factory) console.error(\"NO factory for webcube-amazonpayview\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-amazonpayview\", err);\n}\n\ntry {\n  factory = require(\"webcube-braintree\").factory;\n  if (!factory) console.error(\"NO factory for webcube-braintree\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-braintree\", err);\n}\n\ntry {\n  factory = require(\"webcube-braintree-applepay\").factory;\n  if (!factory) console.error(\"NO factory for webcube-braintree-applepay\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-braintree-applepay\", err);\n}\n\ntry {\n  factory = require(\"webcube-orbital-applepay\").factory;\n  if (!factory) console.error(\"NO factory for webcube-orbital-applepay\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-orbital-applepay\", err);\n}\n\ntry {\n  factory = require(\"webcube-orbital-hpf\").factory;\n  if (!factory) console.error(\"NO factory for webcube-orbital-hpf\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-orbital-hpf\", err);\n}\n\ntry {\n  factory = require(\"webcube-paypal\").factory;\n  if (!factory) console.error(\"NO factory for webcube-paypal\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-paypal\", err);\n}\n\ntry {\n  factory = require(\"webcube-stripe\").factory;\n  if (!factory) console.error(\"NO factory for webcube-stripe\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-stripe\", err);\n}\n\ntry {\n  factory = require(\"webcube-stripe-paymentrequest\").factory;\n  if (!factory) console.error(\"NO factory for webcube-stripe-paymentrequest\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-stripe-paymentrequest\", err);\n}\n\ntry {\n  factory = require(\"tag_manager_datalayer\").factory;\n  if (!factory) console.error(\"NO factory for tag_manager_datalayer\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for tag_manager_datalayer\", err);\n}\n\ntry {\n  factory = require(\"webcube-admin-basketsummary\").factory;\n  if (!factory) console.error(\"NO factory for webcube-admin-basketsummary\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-admin-basketsummary\", err);\n}\n\ntry {\n  factory = require(\"webcube-back-to-top\").factory;\n  if (!factory) console.error(\"NO factory for webcube-back-to-top\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-back-to-top\", err);\n}\n\ntry {\n  factory = require(\"button-selector\").factory;\n  if (!factory) console.error(\"NO factory for button-selector\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for button-selector\", err);\n}\n\ntry {\n  factory = require(\"webcube-checkout\").factory;\n  if (!factory) console.error(\"NO factory for webcube-checkout\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-checkout\", err);\n}\n\ntry {\n  factory = require(\"webcube-checkout-basketsummary\").factory;\n  if (!factory) console.error(\"NO factory for webcube-checkout-basketsummary\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-checkout-basketsummary\", err);\n}\n\ntry {\n  factory = require(\"webcube-checkout-success\").factory;\n  if (!factory) console.error(\"NO factory for webcube-checkout-success\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-checkout-success\", err);\n}\n\ntry {\n  factory = require(\"webcube-checkoutstep\").factory;\n  if (!factory) console.error(\"NO factory for webcube-checkoutstep\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-checkoutstep\", err);\n}\n\ntry {\n  factory = require(\"webcube-checkoutstep-billing\").factory;\n  if (!factory) console.error(\"NO factory for webcube-checkoutstep-billing\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-checkoutstep-billing\", err);\n}\n\ntry {\n  factory = require(\"webcube-checkoutstep-shipping\").factory;\n  if (!factory) console.error(\"NO factory for webcube-checkoutstep-shipping\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-checkoutstep-shipping\", err);\n}\n\ntry {\n  factory = require(\"webcube-checkoutstep-updateitems\").factory;\n  if (!factory) console.error(\"NO factory for webcube-checkoutstep-updateitems\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-checkoutstep-updateitems\", err);\n}\n\ntry {\n  factory = require(\"webcube-countrystate-autofill\").factory;\n  if (!factory) console.error(\"NO factory for webcube-countrystate-autofill\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-countrystate-autofill\", err);\n}\n\ntry {\n  factory = require(\"webcube-dealerlocator\").factory;\n  if (!factory) console.error(\"NO factory for webcube-dealerlocator\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-dealerlocator\", err);\n}\n\ntry {\n  factory = require(\"webcube-debug\").factory;\n  if (!factory) console.error(\"NO factory for webcube-debug\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-debug\", err);\n}\n\ntry {\n  factory = require(\"webcube-endless-scroll\").factory;\n  if (!factory) console.error(\"NO factory for webcube-endless-scroll\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-endless-scroll\", err);\n}\n\ntry {\n  factory = require(\"webcube-footer-callout\").factory;\n  if (!factory) console.error(\"NO factory for webcube-footer-callout\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-footer-callout\", err);\n}\n\ntry {\n  factory = require(\"webcube-form-ajax\").factory;\n  if (!factory) console.error(\"NO factory for webcube-form-ajax\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-form-ajax\", err);\n}\n\ntry {\n  factory = require(\"webcube-gallery\").factory;\n  if (!factory) console.error(\"NO factory for webcube-gallery\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-gallery\", err);\n}\n\ntry {\n  factory = require(\"webcube-general-modal\").factory;\n  if (!factory) console.error(\"NO factory for webcube-general-modal\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-general-modal\", err);\n}\n\ntry {\n  factory = require(\"graphicoption-selector\").factory;\n  if (!factory) console.error(\"NO factory for graphicoption-selector\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for graphicoption-selector\", err);\n}\n\ntry {\n  factory = require(\"webcube-hide-faq-accordion\").factory;\n  if (!factory) console.error(\"NO factory for webcube-hide-faq-accordion\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-hide-faq-accordion\", err);\n}\n\ntry {\n  factory = require(\"webcube-lazyload\").factory;\n  if (!factory) console.error(\"NO factory for webcube-lazyload\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-lazyload\", err);\n}\n\ntry {\n  factory = require(\"webcube-listing-tracker\").factory;\n  if (!factory) console.error(\"NO factory for webcube-listing-tracker\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-listing-tracker\", err);\n}\n\ntry {\n  factory = require(\"webcube-lookbook\").factory;\n  if (!factory) console.error(\"NO factory for webcube-lookbook\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-lookbook\", err);\n}\n\ntry {\n  factory = require(\"webcube-mailto-summary\").factory;\n  if (!factory) console.error(\"NO factory for webcube-mailto-summary\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-mailto-summary\", err);\n}\n\ntry {\n  factory = require(\"webcube-message-template\").factory;\n  if (!factory) console.error(\"NO factory for webcube-message-template\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-message-template\", err);\n}\n\ntry {\n  factory = require(\"webcube-minicart\").factory;\n  if (!factory) console.error(\"NO factory for webcube-minicart\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-minicart\", err);\n}\n\ntry {\n  factory = require(\"webcube-navigation\").factory;\n  if (!factory) console.error(\"NO factory for webcube-navigation\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-navigation\", err);\n}\n\ntry {\n  factory = require(\"webcube-oneclickadd\").factory;\n  if (!factory) console.error(\"NO factory for webcube-oneclickadd\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-oneclickadd\", err);\n}\n\ntry {\n  factory = require(\"webcube-overlay\").factory;\n  if (!factory) console.error(\"NO factory for webcube-overlay\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-overlay\", err);\n}\n\ntry {\n  factory = require(\"webcube-product\").factory;\n  if (!factory) console.error(\"NO factory for webcube-product\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-product\", err);\n}\n\ntry {\n  factory = require(\"webcube-product-analytics\").factory;\n  if (!factory) console.error(\"NO factory for webcube-product-analytics\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-product-analytics\", err);\n}\n\ntry {\n  factory = require(\"webcube-productgallery\").factory;\n  if (!factory) console.error(\"NO factory for webcube-productgallery\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-productgallery\", err);\n}\n\ntry {\n  factory = require(\"webcube-productgroup\").factory;\n  if (!factory) console.error(\"NO factory for webcube-productgroup\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-productgroup\", err);\n}\n\ntry {\n  factory = require(\"webcube-productoption_form\").factory;\n  if (!factory) console.error(\"NO factory for webcube-productoption_form\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-productoption_form\", err);\n}\n\ntry {\n  factory = require(\"webcube-promo-banner\").factory;\n  if (!factory) console.error(\"NO factory for webcube-promo-banner\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-promo-banner\", err);\n}\n\ntry {\n  factory = require(\"webcube-quickshop\").factory;\n  if (!factory) console.error(\"NO factory for webcube-quickshop\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-quickshop\", err);\n}\n\ntry {\n  factory = require(\"webcube-rating\").factory;\n  if (!factory) console.error(\"NO factory for webcube-rating\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-rating\", err);\n}\n\ntry {\n  factory = require(\"webcube-recentlyviewed\").factory;\n  if (!factory) console.error(\"NO factory for webcube-recentlyviewed\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-recentlyviewed\", err);\n}\n\ntry {\n  factory = require(\"webcube-slider\").factory;\n  if (!factory) console.error(\"NO factory for webcube-slider\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-slider\", err);\n}\n\ntry {\n  factory = require(\"webcube-stafftoolbar\").factory;\n  if (!factory) console.error(\"NO factory for webcube-stafftoolbar\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-stafftoolbar\", err);\n}\n\ntry {\n  factory = require(\"webcube-upsell\").factory;\n  if (!factory) console.error(\"NO factory for webcube-upsell\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-upsell\", err);\n}\n\ntry {\n  factory = require(\"webcube-video\").factory;\n  if (!factory) console.error(\"NO factory for webcube-video\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-video\", err);\n}\n\ntry {\n  factory = require(\"webcube-videolazy\").factory;\n  if (!factory) console.error(\"NO factory for webcube-videolazy\");\n  document_binding.registerFactory(factory);\n} catch (err) {\n  console.error(\"Unable to register factory for webcube-videolazy\", err);\n}\n\n\nmodule.exports = document_binding;\n","var $ = require(\"jquery\");\nvar _ = require(\"lodash\");\nvar utils = require(\"webcube-base\");\nvar WebCubeObject = utils.Object;\nvar WebCubeObjectFactory = utils.ObjectFactory;\nvar receiver = utils.MessageHandler;\nvar sender = utils.MessageSender;\n\nfunction Logger() {\n  var webcube_objects = arguments;\n  WebCubeObject.call(this);\n  this.$el = $(\n    '<div id=\"' +\n      this.id +\n      '\" class=\"wc-logger hide\"><pre>WebCube Message Logger Started</pre></div>'\n  );\n\n  $(\"body\").on(\n    \"keyup\",\n    function (e) {\n      //if (e.keyCode === 192) {\n      //    sender(this.mailbox, \"toggle\");\n      //}\n    }.bind(this)\n  );\n\n  $(\"body\").append(this.$el);\n  // i want to get messages for anyone and log them.\n  var modules = webcube_objects || [];\n  var o = null;\n  for (var i = 0; i < modules.length; i++) {\n    o = modules[i];\n    if (o === null || typeof o === \"undefined\") {\n      this.logger(\"Attempting to listen on unregistered object type #\" + i);\n      continue;\n    }\n    if (typeof o.mailbox !== \"undefined\") {\n      receiver.add(o.mailbox, this.logger, this);\n    }\n  }\n\n  var self = this;\n  this.add_module = function (module) {\n    receiver.add(module.mailbox, self.logger, self);\n  };\n}\n\nWebCubeObject.extend(Logger, {\n  dispatch: function (msg) {\n    if (msg.payload == \"toggle\") {\n      this.$el.toggleClass(\"hide\");\n    }\n  },\n  logger: function (msg) {\n    var now = new Date();\n    var timestamp =\n      now.getFullYear() +\n      \"-\" +\n      (now.getMonth() + 1) +\n      \"-\" +\n      now.getDate() +\n      \" \" +\n      now.getHours() +\n      \":\" +\n      now.getMinutes() +\n      \":\" +\n      now.getSeconds();\n\n    this.$el.append(\n      \"<pre>\" + timestamp + \"\\t\" + typeof msg !== \"string\"\n        ? JSON.stringify(msg)\n        : msg + \"</pre>\"\n    );\n  },\n});\n\nif (typeof module !== \"undefined\" && typeof module.exports !== \"undefined\") {\n  module.exports = {\n    cls: Logger,\n    factory: new WebCubeObjectFactory(Logger, \"logger\", [[]]),\n  };\n}\n","require('./globals.js');\nvar document_binding = require('./bootstrap.js');\nvar utils = require('webcube-base');\nvar Logger = require(\"webcube-logger\");\n\n$(function() {\n    var bindings = document_binding.applyBindingsAndInit();\n\n    WebCube.Logger = Logger.factory.build([bindings]);\n\n    utils.MessageHandler.add(\"ajax_content_added\", function(msg){\n        $(msg.payload.html_element).each(function(){\n            WebCube.document_binding.applyBindingsAndInit(this);\n        });\n    });\n\n    // Run on-ready handlers that were initialzied before script load\n    if( typeof(window._orc ) != \"undefined\" ){\n        for(var f in window._orc){ window._orc[f](); }\n    }\n\n    // Auto-enable debug listner if we have a local storage var set\n    if(localStorage != undefined && localStorage['webcube_debug'] == \"on\"){\n        window.debug_listener= function(obj){ console.log(obj.details.address,obj); }\n    }\n\n});\n\n\n","// Main entry point for Eizo theme\nimport \"@/js/main.js\"; // Import core WebCube logic\n\n// jQuery Cookie plugin - provides base $.cookie() function\n// Copyright (c) 2006 Klaus Hartl (stilbuero.de)\njQuery.cookie = function(name, value, options) {\n    if (typeof value != 'undefined') { // name and value given, set cookie\n        options = options || {};\n        if (value === null) {\n            value = '';\n            options.expires = -1;\n        }\n        var expires = '';\n        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {\n            var date;\n            if (typeof options.expires == 'number') {\n                date = new Date();\n                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));\n            } else {\n                date = options.expires;\n            }\n            expires = '; expires=' + date.toUTCString();\n        }\n        var path = options.path ? '; path=' + (options.path) : '';\n        var domain = options.domain ? '; domain=' + (options.domain) : '';\n        var secure = options.secure ? '; secure' : '';\n        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');\n    } else { // only name given, get cookie\n        var cookieValue = null;\n        if (document.cookie && document.cookie != '') {\n            var cookies = document.cookie.split(';');\n            for (var i = 0; i < cookies.length; i++) {\n                var cookie = jQuery.trim(cookies[i]);\n                if (cookie.substring(0, name.length + 1) == (name + '=')) {\n                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));\n                    break;\n                }\n            }\n        }\n        return cookieValue;\n    }\n};\n\n// JSON Cookie jQuery plugin - extends jQuery with JSON cookie methods\n// Dependencies: jQuery, jQuery Cookie (loaded above)\n(function ($) {\n    var isObject = function (x) {\n        return (typeof x === 'object') && !(x instanceof Array) && (x !== null);\n    };\n\n    $.extend({\n        getJSONCookie: function (cookieName) {\n            var cookieData = $.cookie(cookieName);\n            return cookieData ? JSON.parse(cookieData) : {};\n        },\n        setJSONCookie: function (cookieName, data, options) {\n            var cookieData = '';\n\n            options = $.extend({\n                expires: 90,\n                path: '/'\n            }, options);\n\n            if (!isObject(data)) {\n                throw new Error('JSONCookie data must be an object');\n            }\n\n            cookieData = JSON.stringify(data);\n\n            return $.cookie(cookieName, cookieData, options);\n        },\n        removeJSONCookie: function (cookieName) {\n            return $.cookie(cookieName, null);\n        },\n        JSONCookie: function (cookieName, data, options) {\n            if (data) {\n                $.setJSONCookie(cookieName, data, options);\n            }\n            return $.getJSONCookie(cookieName);\n        }\n    });\n})(jQuery);\n\n// Eizo-specific initialization\n// Foundation and jQuery are loaded globally via script tags\n\n// The theme bundle is loaded as an async module while foundation.min.js is a\n// plain script at the end of the body, so there is no guaranteed order between\n// them. Waiting for Foundation rather than skipping when it is absent is what\n// keeps the nav dropdowns working when the bundle wins that race.\nfunction whenFoundationReady(callback) {\n    if (window.Foundation) {\n        callback();\n        return;\n    }\n    var waited = 0;\n    var timer = setInterval(function () {\n        if (window.Foundation) {\n            clearInterval(timer);\n            callback();\n        } else if ((waited += 50) >= 5000) {\n            clearInterval(timer);\n        }\n    }, 50);\n}\n\n// Center main navigation dropdowns on desktop\nfunction setDropDownPos() {\n    if (window.matchMedia('(min-width: 1025px)').matches) {\n        jQuery('.nav_global .nav_global_dropdown:not(.two_col_dropdown)').each(function(i,e){\n            var global_padding = jQuery('.nav_global').offset().left;\n            var item_offset = jQuery(this).parent().offset().left;\n            jQuery(this).css('padding-left',global_padding).css('padding-right',global_padding).css('left',-item_offset);\n        });\n    }\n}\n\n// Initialize Foundation components when DOM is ready\njQuery(document).ready(function($){\n    whenFoundationReady(function () {\n        // Initialize reveal modals\n        $('.reveal').each(function (i, e) {\n            if (Foundation.Reveal) {\n                var modal = new Foundation.Reveal($(e));\n                $(modal).foundation();\n            }\n        });\n\n        if (window.matchMedia('(max-width: 767px)').matches) {\n            // Initialize foundation (mobile footer accordions)\n            $(document).foundation();\n        } else if (Foundation.AccordionMenu) {\n            // Initialize just nav accordion menus — this is what opens the\n            // top-level dropdowns, so nothing below can rely on it being here\n            var primary = new Foundation.AccordionMenu($('#global_nav'));\n            var secondary = new Foundation.AccordionMenu($('#secondary_nav'));\n            $(secondary).foundation();\n            $(primary).foundation();\n        }\n    });\n\n    setDropDownPos();\n\n    // Hamburger menu toggle\n    $('.hamburger').click(function(){\n        if ($(this).hasClass('is-active')) {\n            $('#global_nav').slideUp(250);\n            $('#secondary_nav').slideUp(250);\n            $(this).removeClass('is-active');\n        } else {\n            $(this).addClass('is-active');\n            $('#global_nav').slideDown(250);\n            $('#secondary_nav').slideDown(250);\n        }\n    });\n\n    // Allow top level nav to be accessed\n    if (window.matchMedia('(min-width: 1025px)').matches) {\n        $('.has_subnav > a').click(function (event) {\n            var href = $(this).attr('href');\n            if (href && href !== \"#\") {\n                window.location.href = href;\n            } else {\n                // a placeholder link: let the dropdown handle the click rather\n                // than following the anchor and putting a # in the URL\n                event.preventDefault();\n            }\n        });\n    }\n\n    // OR landing page slider\n    if ($.fn.slick) {\n        $('.or-slider').slick({\n            dots: true,\n            arrows: false,\n            autoplay: true,\n            autoplaySpeed: 5000,\n        });\n    }\n\n    // IP region detection\n    var o = $.getJSONCookie(\"eizo-ip-region\");\n    if(o.iso2 === undefined){\n        var lookup_url = \"/country-from-ip/\";\n        if( ! (window.localStorage === undefined ) &&\n            ! (window.localStorage[\"ip-address-debug\"] === undefined ) ){\n            lookup_url += \"?ip_address=\" + window.localStorage[\"ip-address-debug\"];\n        }\n        $.getJSON(lookup_url,function(data){\n            $.setJSONCookie(\"eizo-ip-region\",data);\n            console.log(data);\n            if(data.iso2 != \"US\" && data.iso2 != \"CA\"){\n                var iso_q = '.region_selector a[data-iso=\"' + data.iso2 +'\"]';\n\n                setTimeout(function(){\n                    $('.location_slideup').removeClass('is_hidden');\n                },3000);\n\n                if($(iso_q).length){\n                    console.log(\"Notify user maybe they are looking for \"+$(iso_q).text()+\" and link to \"+$(iso_q).attr(\"href\"));\n                    $('.location_slideup > .row').html('<img src=\"//cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.8.0/flags/4x3/'+data.iso2.toLowerCase()+'.svg\" alt=\"\" class=\"flag\"> Looking for <a href=\"'+$(iso_q).attr(\"href\")+'\">EIZO '+$.trim($(iso_q).text())+'</a>?');\n                } else {\n                    console.log(\"Looking for Eizo Global?\");\n                    $('.location_slideup > .row').html('Looking for <a href=\"http://eizoglobal.com/\">EIZO Global</a>?');\n                }\n\n                setTimeout(function(){\n                    $('.location_slideup').addClass('is_hidden');\n                },18000);\n            }\n        });\n    }\n});\n\n// Handle window resize\njQuery(window).resize(function() {\n    var $ = jQuery;\n    // Always show navigation on desktop\n    if (window.matchMedia('(min-width: 1025px)').matches) {\n        $('#global_nav').show();\n        $('#secondary_nav').show();\n    }\n    setDropDownPos();\n\n});\n\n// Video modal events\njQuery(document).on('open.zf.reveal', function () {\n    var modal = jQuery(this);\n    var iframe = modal[0].activeElement.querySelector('iframe');\n    if (iframe) {\n        var newSrc = jQuery(iframe).attr(\"data-src\");\n        iframe.src = newSrc += \"&autoplay=1\";\n    }\n});\n\njQuery(document).on('closed.zf.reveal', function () {\n    var page = jQuery(this);\n    var iframe = page.find('.reveal iframe');\n    iframe.each(function(i, e){\n        jQuery(e).removeAttr(\"src\");\n    });\n});"],"names":["window","ua","timer","dummySrc","fixRespimg","img","source","sizes","picture","findPictureImgs","i","imgs","onResize","mq","init","document","undefined","eminpx","alwaysCheckWDescriptor","evalId","pf","isSupportTestReady","noop","image","getImgAttr","setImgAttr","removeImgAttr","docElem","types","cfg","srcAttr","srcsetAttr","supportAbort","curSrcProp","regWDesc","regSize","setOptions","baseStyle","fsCss","isVwDirty","cssCache","sizeLengthCache","DPR","units","anchor","alreadyRun","regexLeadingSpaces","regexLeadingCommasOrSpaces","regexLeadingNotSpaces","regexTrailingCommas","regexNonNegativeInteger","regexFloatingPoint","on","obj","evt","fn","capture","memoize","cache","input","isSpace","c","evalCSS","regLength","replace","args","index","string","buildStr","css","length","parsedLength","setResolution","candidate","sizesattr","picturefill","opt","elements","plen","options","detectTypeSupport","type","typeUri","updateMetrics","chooseLowRes","lowerValue","higherValue","dprValue","isCached","bonusFactor","tooMuch","bonus","meanDensity","applyBestCandidate","srcSetCandidates","matchingSet","evaluated","ascendingSort","a","setSrcToCur","src","set","getCandidateForSrc","candidates","getAllSourceElements","len","srcset","sources","parseSrcset","collectCharacters","regEx","chars","match","pos","inputLength","url","descriptors","currentDescriptor","state","parseDescriptors","pError","w","d","h","desc","lastChar","value","intVal","floatVal","tokenize","parseSizes","strValue","regexCssLengthWithUnits","regexCssCalc","unparsedSizesList","unparsedSizesListLength","unparsedSize","lastComponentValue","size","parseComponentValues","str","chrctr","component","componentArray","listArray","parenDepth","inComment","pushComponent","pushComponentArray","isValidNonNegativeSourceSizeValue","s","image2","width2","width1","test","width","context","sel","media","sourceSizeValue","sourceSizeStr","body","div","originalHTMLCSS","originalBodyCSS","sourceSizeListStr","winningLength","j","bestCandidate","curSrc","curCan","candidateSrc","abortCurSrc","imageData","dpr","origWidth","supportsType","sets","element","parent","srcsetAttribute","imageSet","isWDescripor","srcsetParsed","hasPicture","extreme","isDomReady","regReady","run","readyState","timerId","debounce","func","wait","timeout","timestamp","later","last","lastClientWidth","name","module","$","__CJS__import__0__.default","__CJS__import__0__","utils","hashBased","query","result","part","eq","key","val","from","to","content","modal_content","__CJS__import__2__.default","__CJS__import__2__","_","WebCubeDocumentBinding","doc","object_registry","factory","v","modules","object_name","object_names","k","o","hr","hr2","pubfuncs","f","new_bindings","wc_object","t","registeredHandlers","addHandler","target","callback","addFunction","ev","removeHandler","sender","i_obj","exports","send","msg","max","nil","REGEX","validate","uuid","parse","byteToHex","unsafeStringify","arr","offset","stringify","getRandomValues","rnds8","rng","_state","v1","buf","bytes","isV6","optionsKeys","v1Bytes","_a","now","rnds","updateV1State","msecs","nsecs","clockseq","node","tl","tmh","n","v1ToV6","v6Bytes","_v1ToV6","md5","words","uint8ToUint32","md5Bytes","wordsToMd5","uint32ToUint8","getOutputLength","inputLength8","x","xpad","b","olda","oldb","oldc","oldd","md5ff","md5gg","md5hh","md5ii","safeAdd","output","y","lsw","bitRotateLeft","num","cnt","md5cmn","q","stringToBytes","DNS","URL","v35","version","hash","namespace","valueBytes","namespaceBytes","v3","randomUUID","native","v4","z","ROTL","sha1","K","H","newBytes","l","N","M","W","e","T","v5","v6","v6ToV1","_v6ToV1","v7","v7Bytes","updateV7State","seq","handler","__CJS__import__1__.default","__CJS__import__1__","WebCubeObject","additional_handlers","message_name","topic","ChildConstructor","childPrototype","WebCubeObjectFactory","klass","klass_param_list","param_list","fConstructor","self","pl","fNewConstr","main","DocumentBinding","MessageHandler","MessageSender","WebcubeObject","ObjectFactory","require$$0","pluses","encode","config","decode","stringifyCookieValue","parseCookieValue","read","converter","days","cookies","parts","cookie","UserCookies","html_element","userEmail","data","request","error","BulkOrderForm","total","qty","price","subtotal","freeship","freeship_percent","html","prior","row_sku","BulkOrderReplacements","$el","bulkorder_replacements","item","KlaviyoForm","$form","$success","event_name","event","_learnq","KlaviyoTracker","cart","email","_items","_item_names","_has_no_discount_sku","prod_url","img_url","started_checkout_data","SANDBOX_URL","LIVE_URL","BUTTON_CONTAINER_ID","BLACKLIST_USERAGENTS","AmazonPay","element_id","loginOptions","blacklisted","AmazonPayView","disabled","method","orderReference","orderRef","BRAINTREE_CLIENT_SCRIPT","BRAINTREE_HFIELDS_SCRIPT","BRAINTREE_FRAUD_SCRIPT","BRAINTREE_FIELD_MAP","Braintree","incomplete","err","clientInstance","dataCollectorInstance","hostedFieldsInstance","message","payload","field","styles","BRAINTREE_APPLEPAY_SCRIPT","BraintreeApplePayButton","clientErr","applePayErr","applePayInstance","promise","canMakePaymentsWithActiveCard","ship_addr","validationError","merchantSession","addr","prefix","tokenizeErr","payer_data","ajax_param","xhr","settings","stat","APPLEPAY_SCRIPT","OrbitalApplePayButton","token","ORBITAL_HPF_SCRIPT_SANDBOX","ORBITAL_HPF_SCRIPT_PROD","OrbitalPayments","HANDLE_PAY_ERRORS","scrollX","scrollY","SCRIPT_URL","Paypal","resolve","reject","actions","STRIPE_CLIENT_SCRIPT","StripePayments","style","StripePaymentRequestButton","TagManagerDataLayer","userSessionId","userEmailSha1","dataLayerName","new_items","removed","o1","product_list","wc_cart","products","cart_info","step","cart_data","BasketSummary","state_open","$sidecart","$sidecart_sub","$basket_summary_header","btn","BackToTop","Product","gallery_address","skus_by_option","required_message","skudata","$notify","notify_href","selection","filtered_path","can_order_on_path","notifiable","o2","o3","osku","retval","which_option","partial_selection","can_order_only","rv","included","k1","k2","k3","option_name","register_onchange","selected","option_choices","$option_select","option_label","av","select","after_element","$this","option_error","$loading","$submit_btn","post_data","status","ButtonSelector","p","$html","$li","avail_options","$cur_sel","Checkout","steps","new_content","step_name","old_step","$body","csrfSafeMethod","initial","csrf","CheckoutSuccess","extra_utils","CheckoutStep","$new_content","skip_cart","stepk","resp","cont","error_list","notices","$forms","$edit","BillingInfo","textarea","ShippingInfo","json_text","id","$selected","__CJS__import__3__.default","__CJS__import__3__","UpdateItems","that","CountryStateAutofill","$html_element","updateStateOptions","country","json","$target","attrs","child_text","dest_val","src_val","DealerLocatorMap","default_location","mapOptions","template","location_obj","marker","infowindow","info_window_index","DealerLocatorForm","address","radius","limit","default_radius","default_limit","geoCoder","results","DealerLocator","use_default_location","map","dealerLocatorForm","initialize_maps","urlParameters","stringToObject","new_radius","new_limit","position","api_key","other_params","params","search_string","seperator","_obj","_search_string","_seperator","_search_array","split","DebugUtil","content_target","next_url","prev_url","max_pages","content_added_callback","listing_target","next_data_url","prev_data_url","next_data_cache","prev_data_cache","last_scroll","is_loading","force","showFollowing","showPrevious","item_height","scroll_pos","window_height","el_top","el_height","el_bottom","EndlessScroll","WebcubeEndlessScroll","next","previous","scroll","content_added","FooterCallout","triggerFooterCallout","displayFooterCallout","WebcubeFormAjax","resp_type","resp_content","resp_has_errors","Slick","instanceUid","dataSettings","responsiveSettings","breakpoint","slider","markup","addBefore","targetHeight","targetLeft","animProps","asNavFor","slide","transition","dotString","newSlides","numOfSlides","originalSlides","slidesPerSection","row","targetBreakpoint","respondToWidth","sliderWidth","windowWidth","dontAnimate","indexOffset","slideOffset","unevenOffset","navigables","prevNavigable","slideIndex","filter","breakPoint","counter","pagerQty","verticalHeight","verticalOffset","targetSlide","option","indexes","slidesTraversed","swipedSlide","centerOffset","loadRange","cloneRange","rangeStart","rangeEnd","loadImages","imagesScope","imageSource","imageToLoad","imgCount","targetImage","currentSlide","removeBefore","removeAll","positionProps","refresh","bodyStyle","allSlides","remainder","infiniteCount","paused","targetElement","sync","animSlide","slideLeft","xDist","yDist","r","swipeAngle","slideCount","curLeft","swipeDirection","swipeLength","positionOffset","touches","ret","Gallery","display_slick_params","thumbnails_slick_params","display_page_settings","thumbnails_page_settings","idx","slick","nextSlide","GalleryCls","WebcubeGeneralModal","partial_selector","GraphicOptionSelector","HideFAQAccordion","faq_length","$window","$container","update","$self","elements_left","original","temp","fold","Lazyload","lazyVideos","lazyVideoObserver","entries","observer","video","videoSource","lazyVideo","ListingTracker","pdata","Lookbook","updateCurrentProducts","$cur_slider","cur_w","cur_h","wrapper_w","LookbookCls","WebcubeMailtoForm","MessageTemplate","MiniCart","items_count","items","cart_template","updateMinicart","form_action","reload_after_response","data_result","$parent","current_quantity","cart_count","FastClick","layer","oldOnClick","bind","methods","deviceIsAndroid","rmv","adv","deviceIsWindowsPhone","deviceIsIOS","deviceIsIOS4","deviceIsIOSWithBadTarget","deviceIsBlackBerry10","clickEvent","touch","scrollParent","parentElement","eventTarget","boundary","labelElement","forElement","trackingClickStart","targetTagName","permitted","metaViewport","chromeVersion","blackberryVersion","firefoxVersion","header_helpers","class_array","head","S","selector","attr_name","add_namespace","bindings","should_bind_events","single_image_loaded","loaded","bindLoad","param","bool","refNode","fakeBody","animating","lastTime","vendors","requestAnimationFrame","cancelAnimationFrame","jqueryFxAvailable","raf","currTime","timeToCall","removeQuotes","scope","libraries","response","responses","lib","methods_arr","delay","immediate","callNow","el","data_attr_name","opts","ii","opts_arr","data_options","cached_options","isNumber","trim","media_class","rule","images","unloaded","required","valid","form","is_ajax","els","validations","validation_count","submit_event","el_patterns","pattern","direct_parent","validator","is_radio","is_checkbox","label","valid_length","el_validations","errorElem","errorID","group","count","doNotValidateOthers","others","_this","accordion","groupSelector","aunts","siblings","active_content","alertBox","$scroll_container","current","direction","grid","grid_outerHTML","holder","wrapper","touch_label","$image","root","container","visible_image","startLoad","cb","clearing","NEXT_KEY","PREV_KEY","ESC_KEY","lis","li","href","new_img","new_a","caption","$ul","old_index","dir","left","skip_shift","dir_obj","li_width","up_count","target_index","current_index","dropdown","original_target","left_offset","o_p","actualBodyWidth","actualMarginWidth","sheet","pip_offset_base","sel_before","sel_after","css_before","css_after","equalizer","isStacked","vals","firstTopOffset","heights","min","$eq_target","path","trigger","orig_path","last_path","mediaHash","queryName","prevMediaHash","currMediaHash","passed","scenarios","force_update","loaded_count","data_attr","nodes","directive","trimmed","scenario","directive_match","media_query","cached_split","raw_arr","current_uuid","raw","$els","integer_settings","int_settings_count","$blank","txt","buttonText","prevButtonText","tipClass","$tip_content","is_prev","$timer","cl","$sel","window_half","tipOffset","$nub","nub_width","nub_height","toggle","topAdjustment","leftAdjustment","tip_height","target_height","joyridemodalbg","expose","exposeCover","origCSS","origClasses","randId","exposeId","clearAll","search","$w","right","offsetBottom","bottom","top","hidden_corners","nub","def","abort","expedition","scroll_top","top_offset","fixed_top","window_top_offset","placeholder","offsets","arrivals","active_item","window_offset","viewport_offset","dest","move_class","right_postfix","left_postfix","class_name","$off_canvas","offcanvas","Orbit","slides_container","number_container","bullets_container","timer_container","animate","link","bullet","next_idx","start_timer","slides","unlock","start_animation","Timer","FadeAnimation","SlideAnimation","duration","progress","start","new_progress","end","is_rtl","margin","animMargin","prev","instance","orbit_instance","ajax","bg_clicked","open_modal","ajax_settings","modal","old_success","textStatus","jqXHR","open_modals","base","visible","root_element","animData","getAnimationData","end_css","iframe","data_src","fade","pop","scroll_offset","$handle","cursor_x","bar_l","bar_o","pct","norm","handle_l","norm_pct","handle_offset","progress_bar_length","$handle_parent","$hidden_inputs","precision","range","point","mod","rem","round","ele","vertical","handle","decimal_places_match_result","$ele","usual_tab_behavior","hash_element","hash_tab_container_id","ind","tab","location_hash","tabs","tab_link","target_hash","interpret_keyup_action","$original","$prev","$next","tip","$tip","dataSelector","tip_template","classes","nubHeight","objPos","inheritables","filtered","section","topbar","topbarContainer","sticky","toggleEl","bar","$selectedLi","$movedLi","$previousLevelUl","stickyContainer","stickyOffset","doToggle","$link","$dropdown","$titleLi","ul","distance","__CJS__import__18__.default","__CJS__import__18__","Navigation","scrollPos","scrollHeight","timeOutTime","currentPos","copyPos","lastPos","OneClickAdd","WebcubeOverlay","$modal","ProductAnalytics","conversion_params","product_data","sku","__CJS__import__4__.default","__CJS__import__4__","__CJS__import__5__.default","__CJS__import__5__","__CJS__import__6__.default","__CJS__import__6__","ProductGallery","index_by_option","option_dict","option1","option2","option3","scored","m","ideal","which","url_param","select_value","select_option","ProductModel","selected_options","sku_list","po","selectable_options","all_options","sel_options","renderable_options","opt_group","ProductOptionForm","default_options","el_options","selector_name","$btn","cx","ProductGroup","$f","form_errors","$subform","is_subform_selected","subform_empty_selects","error_msg","subform_req_fields","$field","PromoBanner","template_sel","$tpl","req","promobanner_template","parsedhtml","new_height","QuickShop","Rating","MAX_RECENT_VIEWED_PRODUCTS","MAX_RECENT_VIEWED_CATEGORIES","WebCubeRecentlyViewed","recent_products_template","recent_categories_template","recently_viewed","current_product","current_category","recently_view","products_to_render","i_rendered","categories","categories_to_render","Slider","$html_el","custom_delay","custom_opts","$currentVideo","$nextVideo","StaffToolbar","cookie_values","kv","meta","$m","itemtype","prop","style_str","ahref","add_edit","terms","win","UpsellAtCheckout","WebcubeVideo","youtubeEmbedUrl","defaults","rx","parseUrl","regex","renderIframe","_selector","no_cover","no_overlay","$cover","_url","preload_attr","WebcubeVideoLazy","autoplay","mobile_video_url","looping_video","document_binding","WebCube","__CJS__import__7__.default","__CJS__import__7__","__CJS__import__8__.default","__CJS__import__8__","__CJS__import__9__.default","__CJS__import__9__","__CJS__import__10__.default","__CJS__import__10__","__CJS__import__11__.default","__CJS__import__11__","__CJS__import__12__.default","__CJS__import__12__","__CJS__import__13__.default","__CJS__import__13__","__CJS__import__14__.default","__CJS__import__14__","__CJS__import__15__.default","__CJS__import__15__","__CJS__import__16__.default","__CJS__import__16__","__CJS__import__17__.default","__CJS__import__17__","__CJS__import__19__.default","__CJS__import__19__","__CJS__import__20__.default","__CJS__import__20__","__CJS__import__21__.default","__CJS__import__21__","__CJS__import__22__.default","__CJS__import__22__","__CJS__import__23__.default","__CJS__import__23__","__CJS__import__24__.default","__CJS__import__24__","__CJS__import__25__.default","__CJS__import__25__","__CJS__import__26__.default","__CJS__import__26__","__CJS__import__27__.default","__CJS__import__27__","__CJS__import__28__.default","__CJS__import__28__","__CJS__import__29__.default","__CJS__import__29__","__CJS__import__30__.default","__CJS__import__30__","__CJS__import__31__.default","__CJS__import__31__","__CJS__import__32__.default","__CJS__import__32__","__CJS__import__33__.default","__CJS__import__33__","__CJS__import__34__.default","__CJS__import__34__","__CJS__import__35__.default","__CJS__import__35__","__CJS__import__36__.default","__CJS__import__36__","__CJS__import__37__.default","__CJS__import__37__","__CJS__import__38__.default","__CJS__import__38__","__CJS__import__39__.default","__CJS__import__39__","__CJS__import__40__.default","__CJS__import__40__","__CJS__import__41__.default","__CJS__import__41__","__CJS__import__42__.default","__CJS__import__42__","__CJS__import__43__.default","__CJS__import__43__","__CJS__import__44__.default","__CJS__import__44__","__CJS__import__45__.default","__CJS__import__45__","__CJS__import__46__.default","__CJS__import__46__","__CJS__import__47__.default","__CJS__import__47__","__CJS__import__48__.default","__CJS__import__48__","__CJS__import__49__.default","__CJS__import__49__","__CJS__import__50__.default","__CJS__import__50__","__CJS__import__51__.default","__CJS__import__51__","__CJS__import__52__.default","__CJS__import__52__","__CJS__import__53__.default","__CJS__import__53__","__CJS__import__54__.default","__CJS__import__54__","__CJS__import__55__.default","__CJS__import__55__","__CJS__import__56__.default","__CJS__import__56__","__CJS__import__57__.default","__CJS__import__57__","__CJS__import__58__.default","__CJS__import__58__","receiver","Logger","webcube_objects","expires","date","domain","secure","cookieValue","isObject","cookieName","cookieData","whenFoundationReady","waited","setDropDownPos","global_padding","item_offset","primary","secondary","lookup_url","iso_q","newSrc","page"],"mappings":"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","x_google_ignoreList":[0,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,29,32,34,65,70,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94]}