/* Modernizr 2.8.3 (Custom Build) | MIT & BSD * Build: http://modernizr.com/download/#-fontface-csstransforms-csstransforms3d-touch-cssclasses-teststyles-testprop-testallprops-prefixes-domprefixes-cssclassprefix:supports! */ ;window.Modernizr=function(a,b,c){function z(a){j.cssText=a}function A(a,b){return z(m.join(a+";")+(b||""))}function B(a,b){return typeof a===b}function C(a,b){return!!~(""+a).indexOf(b)}function D(a,b){for(var d in a){var e=a[d];if(!C(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function E(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:B(f,"function")?f.bind(d||b):f}return!1}function F(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+o.join(d+" ")+d).split(" ");return B(b,"string")||B(b,"undefined")?D(e,b):(e=(a+" "+p.join(d+" ")+d).split(" "),E(e,b,c))}var d="2.8.3",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m=" -webkit- -moz- -o- -ms- ".split(" "),n="Webkit Moz O ms",o=n.split(" "),p=n.toLowerCase().split(" "),q={},r={},s={},t=[],u=t.slice,v,w=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},x={}.hasOwnProperty,y;!B(x,"undefined")&&!B(x.call,"undefined")?y=function(a,b){return x.call(a,b)}:y=function(a,b){return b in a&&B(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=u.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(u.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(u.call(arguments)))};return e}),q.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:w(["@media (",m.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},q.csstransforms=function(){return!!F("transform")},q.csstransforms3d=function(){var a=!!F("perspective");return a&&"webkitPerspective"in g.style&&w("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},q.fontface=function(){var a;return w('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a};for(var G in q)y(q,G)&&(v=G.toLowerCase(),e[v]=q[G](),t.push((e[v]?"":"no-")+v));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)y(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" supports-"+(b?"":"no-")+a),e[a]=b}return e},z(""),i=k=null,e._version=d,e._prefixes=m,e._domPrefixes=p,e._cssomPrefixes=o,e.testProp=function(a){return D([a])},e.testAllProps=F,e.testStyles=w,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" supports-js supports-"+t.join(" supports-"):""),e}(this,this.document); /* FastClick: polyfill to remove click delays on browsers with touch UIs. @version 1.0.3 @codingstandard ftlabs-jsv2 @copyright The Financial Times Limited [All Rights Reserved] @license MIT License (see LICENSE.txt) */ (function(){"use strict";function e(t,r){function s(e,t){return function(){return e.apply(t,arguments)}}var i;r=r||{};this.trackingClick=false;this.trackingClickStart=0;this.targetElement=null;this.touchStartX=0;this.touchStartY=0;this.lastTouchIdentifier=0;this.touchBoundary=r.touchBoundary||10;this.layer=t;this.tapDelay=r.tapDelay||200;this.tapTimeout=r.tapTimeout||700;if(e.notNeeded(t)){return}var o=["onMouse","onClick","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel"];var u=this;for(var a=0,f=o.length;a<f;a++){u[o[a]]=s(u[o[a]],u)}if(n){t.addEventListener("mouseover",this.onMouse,true);t.addEventListener("mousedown",this.onMouse,true);t.addEventListener("mouseup",this.onMouse,true)}t.addEventListener("click",this.onClick,true);t.addEventListener("touchstart",this.onTouchStart,false);t.addEventListener("touchmove",this.onTouchMove,false);t.addEventListener("touchend",this.onTouchEnd,false);t.addEventListener("touchcancel",this.onTouchCancel,false);if(!Event.prototype.stopImmediatePropagation){t.removeEventListener=function(e,n,r){var i=Node.prototype.removeEventListener;if(e==="click"){i.call(t,e,n.hijacked||n,r)}else{i.call(t,e,n,r)}};t.addEventListener=function(e,n,r){var i=Node.prototype.addEventListener;if(e==="click"){i.call(t,e,n.hijacked||(n.hijacked=function(e){if(!e.propagationStopped){n(e)}}),r)}else{i.call(t,e,n,r)}}}if(typeof t.onclick==="function"){i=t.onclick;t.addEventListener("click",function(e){i(e)},false);t.onclick=null}}var t=navigator.userAgent.indexOf("Windows Phone")>=0;var n=navigator.userAgent.indexOf("Android")>0&&!t;var r=/iP(ad|hone|od)/.test(navigator.userAgent)&&!t;var i=r&&/OS 4_\d(_\d)?/.test(navigator.userAgent);var s=r&&/OS ([6-9]|\d{2})_\d/.test(navigator.userAgent);var o=navigator.userAgent.indexOf("BB10")>0;e.prototype.needsClick=function(e){switch(e.nodeName.toLowerCase()){case"button":case"select":case"textarea":if(e.disabled){return true}break;case"input":if(r&&e.type==="file"||e.disabled){return true}break;case"label":case"iframe":case"video":return true}return/\bneedsclick\b/.test(e.className)};e.prototype.needsFocus=function(e){switch(e.nodeName.toLowerCase()){case"textarea":return true;case"select":return!n;case"input":switch(e.type){case"button":case"checkbox":case"file":case"image":case"radio":case"submit":return false}return!e.disabled&&!e.readOnly;default:return/\bneedsfocus\b/.test(e.className)}};e.prototype.sendClick=function(e,t){var n,r;if(document.activeElement&&document.activeElement!==e){document.activeElement.blur()}r=t.changedTouches[0];n=document.createEvent("MouseEvents");n.initMouseEvent(this.determineEventType(e),true,true,window,1,r.screenX,r.screenY,r.clientX,r.clientY,false,false,false,false,0,null);n.forwardedTouchEvent=true;e.dispatchEvent(n)};e.prototype.determineEventType=function(e){if(n&&e.tagName.toLowerCase()==="select"){return"mousedown"}return"click"};e.prototype.focus=function(e){var t;if(r&&e.setSelectionRange&&e.type.indexOf("date")!==0&&e.type!=="time"&&e.type!=="month"){t=e.value.length;e.setSelectionRange(t,t)}else{e.focus()}};e.prototype.updateScrollParent=function(e){var t,n;t=e.fastClickScrollParent;if(!t||!t.contains(e)){n=e;do{if(n.scrollHeight>n.offsetHeight){t=n;e.fastClickScrollParent=n;break}n=n.parentElement}while(n)}if(t){t.fastClickLastScrollTop=t.scrollTop}};e.prototype.getTargetElementFromEventTarget=function(e){if(e.nodeType===Node.TEXT_NODE){return e.parentNode}return e};e.prototype.onTouchStart=function(e){var t,n,s;if(e.targetTouches.length>1){return true}t=this.getTargetElementFromEventTarget(e.target);n=e.targetTouches[0];if(r){s=window.getSelection();if(s.rangeCount&&!s.isCollapsed){return true}if(!i){if(n.identifier&&n.identifier===this.lastTouchIdentifier){e.preventDefault();return false}this.lastTouchIdentifier=n.identifier;this.updateScrollParent(t)}}this.trackingClick=true;this.trackingClickStart=e.timeStamp;this.targetElement=t;this.touchStartX=n.pageX;this.touchStartY=n.pageY;if(e.timeStamp-this.lastClickTime<this.tapDelay){e.preventDefault()}return true};e.prototype.touchHasMoved=function(e){var t=e.changedTouches[0],n=this.touchBoundary;if(Math.abs(t.pageX-this.touchStartX)>n||Math.abs(t.pageY-this.touchStartY)>n){return true}return false};e.prototype.onTouchMove=function(e){if(!this.trackingClick){return true}if(this.targetElement!==this.getTargetElementFromEventTarget(e.target)||this.touchHasMoved(e)){this.trackingClick=false;this.targetElement=null}return true};e.prototype.findControl=function(e){if(e.control!==undefined){return e.control}if(e.htmlFor){return document.getElementById(e.htmlFor)}return e.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea")};e.prototype.onTouchEnd=function(e){var t,o,u,a,f,l=this.targetElement;if(!this.trackingClick){return true}if(e.timeStamp-this.lastClickTime<this.tapDelay){this.cancelNextClick=true;return true}if(e.timeStamp-this.trackingClickStart>this.tapTimeout){return true}this.cancelNextClick=false;this.lastClickTime=e.timeStamp;o=this.trackingClickStart;this.trackingClick=false;this.trackingClickStart=0;if(s){f=e.changedTouches[0];l=document.elementFromPoint(f.pageX-window.pageXOffset,f.pageY-window.pageYOffset)||l;l.fastClickScrollParent=this.targetElement.fastClickScrollParent}u=l.tagName.toLowerCase();if(u==="label"){t=this.findControl(l);if(t){this.focus(l);if(n){return false}l=t}}else if(this.needsFocus(l)){if(e.timeStamp-o>100||r&&window.top!==window&&u==="input"){this.targetElement=null;return false}this.focus(l);this.sendClick(l,e);if(!r||u!=="select"){this.targetElement=null;e.preventDefault()}return false}if(r&&!i){a=l.fastClickScrollParent;if(a&&a.fastClickLastScrollTop!==a.scrollTop){return true}}if(!this.needsClick(l)){e.preventDefault();this.sendClick(l,e)}return false};e.prototype.onTouchCancel=function(){this.trackingClick=false;this.targetElement=null};e.prototype.onMouse=function(e){if(!this.targetElement){return true}if(e.forwardedTouchEvent){return true}if(!e.cancelable){return true}if(!this.needsClick(this.targetElement)||this.cancelNextClick){if(e.stopImmediatePropagation){e.stopImmediatePropagation()}else{e.propagationStopped=true}e.stopPropagation();e.preventDefault();return false}return true};e.prototype.onClick=function(e){var t;if(this.trackingClick){this.targetElement=null;this.trackingClick=false;return true}if(e.target.type==="submit"&&e.detail===0){return true}t=this.onMouse(e);if(!t){this.targetElement=null}return t};e.prototype.destroy=function(){var e=this.layer;if(n){e.removeEventListener("mouseover",this.onMouse,true);e.removeEventListener("mousedown",this.onMouse,true);e.removeEventListener("mouseup",this.onMouse,true)}e.removeEventListener("click",this.onClick,true);e.removeEventListener("touchstart",this.onTouchStart,false);e.removeEventListener("touchmove",this.onTouchMove,false);e.removeEventListener("touchend",this.onTouchEnd,false);e.removeEventListener("touchcancel",this.onTouchCancel,false)};e.notNeeded=function(e){var t;var r;var i;if(typeof window.ontouchstart==="undefined"){return true}r=+(/Chrome\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1];if(r){if(n){t=document.querySelector("meta[name=viewport]");if(t){if(t.content.indexOf("user-scalable=no")!==-1){return true}if(r>31&&document.documentElement.scrollWidth<=window.outerWidth){return true}}}else{return true}}if(o){i=navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/);if(i[1]>=10&&i[2]>=3){t=document.querySelector("meta[name=viewport]");if(t){if(t.content.indexOf("user-scalable=no")!==-1){return true}if(document.documentElement.scrollWidth<=window.outerWidth){return true}}}}if(e.style.msTouchAction==="none"){return true}if(e.style.touchAction==="none"){return true}return false};e.attach=function(t,n){return new e(t,n)};if(typeof define=="function"&&typeof define.amd=="object"&&define.amd){define(function(){return e})}else if(typeof module!=="undefined"&&module.exports){module.exports=e.attach;module.exports.FastClick=e}else{window.FastClick=e}})(); /* Jonathan Snook - MIT License - https://github.com/snookca/prepareTransition */ (function(a){a.fn.prepareTransition=function(){return this.each(function(){var b=a(this);b.one("TransitionEnd webkitTransitionEnd transitionend oTransitionEnd",function(){b.removeClass("is-transitioning")});var c=["transition-duration","-moz-transition-duration","-webkit-transition-duration","-o-transition-duration"];var d=0;a.each(c,function(a,c){d=parseFloat(b.css(c))||d});if(d!=0){b.addClass("is-transitioning");b[0].offsetWidth}})}})(jQuery); /* replaceUrlParam - http://stackoverflow.com/questions/7171099/how-to-replace-url-parameter-with-javascript-jquery */ function replaceUrlParam(e,r,a){var n=new RegExp("("+r+"=).*?(&|$)"),c=e;return c=e.search(n)>=0?e.replace(n,"$1"+a+"$2"):c+(c.indexOf("?")>0?"&":"?")+r+"="+a}; /*! Lity - v1.6.6 - 2016-04-22 * http://sorgalla.com/lity/ * Copyright (c) 2016 Jan Sorgalla; Licensed MIT */ !function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(c){return b(a,c)}):"object"==typeof module&&"object"==typeof module.exports?module.exports=b(a,require("jquery")):a.lity=b(a,a.jQuery||a.Zepto)}("undefined"!=typeof window?window:this,function(a,b){"use strict";function c(){o[p>0?"addClass":"removeClass"]("lity-active")}function d(a){var c=b.Deferred();return w?(a.one(w,c.resolve),setTimeout(c.resolve,500)):c.resolve(),c.promise()}function e(a,c,d){if(1===arguments.length)return b.extend({},a);if("string"==typeof c){if("undefined"==typeof d)return"undefined"==typeof a[c]?null:a[c];a[c]=d}else b.extend(a,c);return this}function f(a){for(var b,c=decodeURI(a).split("&"),d={},e=0,f=c.length;f>e;e++)c[e]&&(b=c[e].split("="),d[b[0]]=b[1]);return d}function g(a,c){return a+(a.indexOf("?")>-1?"&":"?")+b.param(c)}function h(a){return b('<span class="lity-error"/>').append(a)}function i(a){if(!q.test(a))return!1;var c=b('<img src="'+a+'">'),d=b.Deferred(),e=function(){d.reject(h("Failed loading image"))};return c.on("load",function(){return 0===this.naturalWidth?e():void d.resolve(c)}).on("error",e),d.promise()}function j(a){var c;try{c=b(a)}catch(d){return!1}if(!c.length)return!1;var e=b('<span style="display:none !important" class="lity-inline-placeholder"/>');return c.after(e).on("lity:ready",function(a,b){b.one("lity:remove",function(){e.before(c.addClass("lity-hide")).remove()})})}function k(a){var c,d=a;return c=r.exec(a),c&&(d=g("https://www.youtube"+(c[2]||"")+".com/embed/"+c[4],b.extend({autoplay:1},f(c[5]||"")))),c=s.exec(a),c&&(d=g("https://player.vimeo.com/video/"+c[3],b.extend({autoplay:1},f(c[4]||"")))),c=t.exec(a),c&&(d=g("https://www.google."+c[3]+"/maps?"+c[6],{output:c[6].indexOf("layer=c")>0?"svembed":"embed"})),'<div class="lity-iframe-container"><iframe frameborder="0" allowfullscreen src="'+d+'"></iframe></div>'}function l(a){function f(a){27===a.keyCode&&k()}function g(){var a=m.documentElement.clientHeight?m.documentElement.clientHeight:Math.round(n.height());q.css("max-height",Math.floor(a)+"px").trigger("lity:resize",[o])}function h(a,c){o&&(q=b(c),n.on("resize",g),g(),o.find(".lity-loader").each(function(){var a=b(this);d(a).always(function(){a.remove()})}),o.removeClass("lity-loading").find(".lity-content").empty().append(q),q.removeClass("lity-hide").trigger("lity:ready",[o,a]),t.resolve())}function i(a,d,e,g){t=b.Deferred(),p++,c(),o=b(e.template).addClass("lity-loading").appendTo("body"),e.esc&&n.on("keyup",f),setTimeout(function(){o.addClass("lity-opened lity-"+a).on("click","[data-lity-close]",function(a){b(a.target).is("[data-lity-close]")&&k()}).trigger("lity:open",[o,g]),b.when(d).always(b.proxy(h,null,g))},0)}function j(a,c,d){var e,f,g=b.extend({},u,s);if(c=b.extend({},v,r,c),c.handler&&g[c.handler])f=g[c.handler](a,l),e=c.handler;else{var h={};b.each(["inline","iframe"],function(a,b){g[b]&&(h[b]=g[b]),delete g[b]});var j=function(b,c){return c?(f=c(a,l),f?(e=b,!1):void 0):!0};b.each(g,j),e||b.each(h,j)}return f&&b.when(k()).done(b.proxy(i,null,e,f,c,d)),!!f}function k(){if(o){var a=b.Deferred();return t.done(function(){p--,c(),n.off("resize",g).off("keyup",f),q.trigger("lity:close",[o]),o.removeClass("lity-opened").addClass("lity-closed");var b=o,e=q;o=null,q=null,d(e.add(b)).always(function(){e.trigger("lity:remove",[b]),b.remove(),a.resolve()})}),a.promise()}}function l(a){if(!a.preventDefault)return l.open(a);var c=b(this),d=c.data("lity-target")||c.attr("href")||c.attr("src");if(d){var e=c.data("lity-options")||c.data("lity");j(d,e,c)&&(c.blur(),a.preventDefault())}}var o,q,r={},s={},t=b.Deferred().resolve();return l.handlers=b.proxy(e,l,s),l.options=b.proxy(e,l,r),l.open=function(a,b,c){return j(a,b,c),l},l.close=function(){return k(),l},l.options(a)}var m=a.document,n=b(a),o=b("html"),p=0,q=/(^data:image\/)|(\.(png|jpe?g|gif|svg|webp|bmp|ico|tiff?)(\?\S*)?$)/i,r=/(youtube(-nocookie)?\.com|youtu\.be)\/(watch\?v=|v\/|u\/|embed\/?)?([\w-]{11})(.*)?/i,s=/(vimeo(pro)?.com)\/(?:[^\d]+)?(\d+)\??(.*)?$/,t=/((maps|www)\.)?google\.([^\/\?]+)\/?((maps\/?)?\?)(.*)/i,u={image:i,inline:j,iframe:k},v={esc:!0,handler:null,template:'<div class="lity" tabindex="-1"><div class="lity-wrap" data-lity-close><div class="lity-loader">Loading...</div><div class="lity-container"><div class="lity-content"></div><button class="lity-close" type="button" title="Close (Esc)" data-lity-close>×</button></div></div></div>'},w=function(){var a=m.createElement("div"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return b[c];return!1}();return l.version="1.6.6",l.handlers=b.proxy(e,l,u),l.options=b.proxy(e,l,v),b(m).on("click","[data-lity]",l()),l}); /*============================================================================ Money Format - Shopify.format money is defined in option_selection.js. If that file is not included, it is redefined here. ==============================================================================*/ if ((typeof Shopify) === 'undefined') { Shopify = {}; } if (!Shopify.formatMoney) { Shopify.formatMoney = function(cents, format) { var value = '', placeholderRegex = /\{\{\s*(\w+)\s*\}\}/, formatString = (format || this.money_format); if (typeof cents == 'string') { cents = cents.replace('.',''); } function defaultOption(opt, def) { return (typeof opt == 'undefined' ? def : opt); } function formatWithDelimiters(number, precision, thousands, decimal) { precision = defaultOption(precision, 2); thousands = defaultOption(thousands, ','); decimal = defaultOption(decimal, '.'); if (isNaN(number) || number == null) { return 0; } number = (number/100.0).toFixed(precision); var parts = number.split('.'), dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + thousands), cents = parts[1] ? (decimal + parts[1]) : ''; return dollars + cents; } switch(formatString.match(placeholderRegex)[1]) { case 'amount': value = formatWithDelimiters(cents, 2); break; case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; } return formatString.replace(placeholderRegex, value); }; } // Timber functions window.timber = window.timber || {}; timber.cacheSelectors = function () { timber.cache = { // General $html : $('html'), $body : $(document.body), // Navigation $navigation : $('#AccessibleNav'), $mobileSubNavToggle : $('.mobile-nav__toggle'), // Collection Pages $changeView : $('.change-view'), // Product Page $productImage : $('#ProductPhotoImg'), $thumbImages : $('#ProductThumbs').find('a.product-single__thumbnail'), // Customer Pages $recoverPasswordLink : $('#RecoverPassword'), $hideRecoverPasswordLink : $('#HideRecoverPasswordLink'), $recoverPasswordForm : $('#RecoverPasswordForm'), $customerLoginForm : $('#CustomerLoginForm'), $passwordResetSuccess : $('#ResetSuccess') }; }; timber.init = function () { FastClick.attach(document.body); timber.cacheSelectors(); timber.accessibleNav(); timber.drawersInit(); timber.mobileNavToggle(); timber.productImageSwitch(); timber.responsiveVideos(); timber.collectionViews(); timber.loginForms(); }; timber.accessibleNav = function () { var $nav = timber.cache.$navigation, $allLinks = $nav.find('a'), $topLevel = $nav.children('li').find('a'), $parents = $nav.find('.site-nav--has-dropdown'), $subMenuLinks = $nav.find('.site-nav__dropdown').find('a'), activeClass = 'nav-hover', focusClass = 'nav-focus'; // Mouseenter $parents.on('mouseenter touchstart', function(evt) { var $el = $(this); if (!$el.hasClass(activeClass)) { evt.preventDefault(); } showDropdown($el); }); // Mouseout $parents.on('mouseleave', function() { hideDropdown($(this)); }); $subMenuLinks.on('touchstart', function(evt) { // Prevent touchstart on body from firing instead of link evt.stopImmediatePropagation(); }); $allLinks.focus(function() { handleFocus($(this)); }); $allLinks.blur(function() { removeFocus($topLevel); }); // accessibleNav private methods function handleFocus ($el) { var $subMenu = $el.next('ul'), hasSubMenu = $subMenu.hasClass('sub-nav') ? true : false, isSubItem = $('.site-nav__dropdown').has($el).length, $newFocus = null; // Add focus class for top level items, or keep menu shown if (!isSubItem) { removeFocus($topLevel); addFocus($el); } else { $newFocus = $el.closest('.site-nav--has-dropdown').find('a'); addFocus($newFocus); } } function showDropdown ($el) { $el.addClass(activeClass); setTimeout(function() { timber.cache.$body.on('touchstart', function() { hideDropdown($el); }); }, 250); } function hideDropdown ($el) { $el.removeClass(activeClass); timber.cache.$body.off('touchstart'); } function addFocus ($el) { $el.addClass(focusClass); } function removeFocus ($el) { $el.removeClass(focusClass); } }; timber.drawersInit = function () { timber.LeftDrawer = new timber.Drawers('NavDrawer', 'left'); }; timber.mobileNavToggle = function () { timber.cache.$mobileSubNavToggle.on('click', function() { $(this).parent().toggleClass('mobile-nav--expanded'); }); }; timber.getHash = function () { return window.location.hash; }; timber.productPage = function (options) { var moneyFormat = options.money_format, variant = options.variant, selector = options.selector; // Selectors var $productImage = $('#ProductPhotoImg'), $addToCart = $('#AddToCart'), $productPrice = $('#ProductPrice'), $comparePrice = $('#ComparePrice'), $quantityElements = $('.quantity-selector, label + .js-qty'), $addToCartText = $('#AddToCartText'); if (variant) { // Update variant image, if one is set if (variant.featured_image) { var newImg = variant.featured_image, el = $productImage[0]; Shopify.Image.switchImage(newImg, el, timber.switchImage); } // Select a valid variant if available if (variant.available) { // Available, enable the submit button, change text, show quantity elements $addToCart.removeClass('disabled').prop('disabled', false); $addToCartText.html("Add to Cart"); $quantityElements.show(); } else { // Sold out, disable the submit button, change text, hide quantity elements $addToCart.addClass('disabled').prop('disabled', true); $addToCartText.html("Sold Out"); $quantityElements.hide(); } // Regardless of stock, update the product price $productPrice.html( Shopify.formatMoney(variant.price, moneyFormat) ); // Also update and show the product's compare price if necessary if (variant.compare_at_price > variant.price) { $comparePrice .html("" + ' ' + Shopify.formatMoney(variant.compare_at_price, moneyFormat)) .show(); } else { $comparePrice.hide(); } } else { // The variant doesn't exist, disable submit button. // This may be an error or notice that a specific variant is not available. // To only show available variants, implement linked product options: // - http://docs.shopify.com/manual/configuration/store-customization/advanced-navigation/linked-product-options $addToCart.addClass('disabled').prop('disabled', true); $addToCartText.html("Unavailable"); $quantityElements.hide(); } }; timber.productImageSwitch = function () { if (timber.cache.$thumbImages.length) { // Switch the main image with one of the thumbnails // Note: this does not change the variant selected, just the image timber.cache.$thumbImages.on('click', function(evt) { evt.preventDefault(); var newImage = $(this).attr('href'); timber.switchImage(newImage, null, timber.cache.$productImage); }); } }; timber.switchImage = function (src, imgObject, el) { // Make sure element is a jquery object var $el = $(el); $el.attr('src', src); }; timber.responsiveVideos = function () { var $iframeVideo = $('iframe[src*="youtube.com/embed"], iframe[src*="player.vimeo"]'); var $iframeReset = $iframeVideo.add('iframe#admin_bar_iframe'); $iframeVideo.each(function () { // Add wrapper to make video responsive $(this).wrap('<div class="video-wrapper"></div>'); }); $iframeReset.each(function () { // Re-set the src attribute on each iframe after page load // for Chrome's "incorrect iFrame content on 'back'" bug. // https://code.google.com/p/chromium/issues/detail?id=395791 // Need to specifically target video and admin bar this.src = this.src; }); }; timber.collectionViews = function () { if (timber.cache.$changeView.length) { timber.cache.$changeView.on('click', function() { var view = $(this).data('view'), url = document.URL, hasParams = url.indexOf('?') > -1; if (hasParams) { window.location = replaceUrlParam(url, 'view', view); } else { window.location = url + '?view=' + view; } }); } }; timber.loginForms = function() { function showRecoverPasswordForm() { timber.cache.$recoverPasswordForm.show(); timber.cache.$customerLoginForm.hide(); } function hideRecoverPasswordForm() { timber.cache.$recoverPasswordForm.hide(); timber.cache.$customerLoginForm.show(); } timber.cache.$recoverPasswordLink.on('click', function(evt) { evt.preventDefault(); showRecoverPasswordForm(); }); timber.cache.$hideRecoverPasswordLink.on('click', function(evt) { evt.preventDefault(); hideRecoverPasswordForm(); }); // Allow deep linking to recover password form if (timber.getHash() == '#recover') { showRecoverPasswordForm(); } }; timber.resetPasswordSuccess = function() { timber.cache.$passwordResetSuccess.show(); }; /*============================================================================ Drawer modules - Docs http://shopify.github.io/Timber/#drawers ==============================================================================*/ timber.Drawers = (function () { var Drawer = function (id, position, options) { var defaults = { close: '.js-drawer-close', open: '.js-drawer-open-' + position, openClass: 'js-drawer-open', dirOpenClass: 'js-drawer-open-' + position }; this.$nodes = { parent: $('body, html'), page: $('#PageContainer'), moved: $('.is-moved-by-drawer') }; this.config = $.extend(defaults, options); this.position = position; this.$drawer = $('#' + id); if (!this.$drawer.length) { return false; } this.drawerIsOpen = false; this.init(); }; Drawer.prototype.init = function () { $(this.config.open).on('click', $.proxy(this.open, this)); this.$drawer.find(this.config.close).on('click', $.proxy(this.close, this)); }; Drawer.prototype.open = function (evt) { // Keep track if drawer was opened from a click, or called by another function var externalCall = false; // Prevent following href if link is clicked if (evt) { evt.preventDefault(); } else { externalCall = true; } // Without this, the drawer opens, the click event bubbles up to $nodes.page // which closes the drawer. if (evt && evt.stopPropagation) { evt.stopPropagation(); // save the source of the click, we'll focus to this on close this.$activeSource = $(evt.currentTarget); } if (this.drawerIsOpen && !externalCall) { return this.close(); } // Notify the drawer is going to open timber.cache.$body.trigger('beforeDrawerOpen.timber', this); // Add is-transitioning class to moved elements on open so drawer can have // transition for close animation this.$nodes.moved.addClass('is-transitioning'); this.$drawer.prepareTransition(); this.$nodes.parent.addClass(this.config.openClass + ' ' + this.config.dirOpenClass); this.drawerIsOpen = true; // Set focus on drawer this.trapFocus(this.$drawer, 'drawer_focus'); // Run function when draw opens if set if (this.config.onDrawerOpen && typeof(this.config.onDrawerOpen) == 'function') { if (!externalCall) { this.config.onDrawerOpen(); } } if (this.$activeSource && this.$activeSource.attr('aria-expanded')) { this.$activeSource.attr('aria-expanded', 'true'); } // Lock scrolling on mobile this.$nodes.page.on('touchmove.drawer', function () { return false; }); this.$nodes.page.on('click.drawer', $.proxy(function () { this.close(); return false; }, this)); // Notify the drawer has opened timber.cache.$body.trigger('afterDrawerOpen.timber', this); }; Drawer.prototype.close = function () { if (!this.drawerIsOpen) { // don't close a closed drawer return; } // Notify the drawer is going to close timber.cache.$body.trigger('beforeDrawerClose.timber', this); // deselect any focused form elements $(document.activeElement).trigger('blur'); // Ensure closing transition is applied to moved elements, like the nav this.$nodes.moved.prepareTransition({ disableExisting: true }); this.$drawer.prepareTransition({ disableExisting: true }); this.$nodes.parent.removeClass(this.config.dirOpenClass + ' ' + this.config.openClass); this.drawerIsOpen = false; // Remove focus on drawer this.removeTrapFocus(this.$drawer, 'drawer_focus'); this.$nodes.page.off('.drawer'); // Notify the drawer is closed now timber.cache.$body.trigger('afterDrawerClose.timber', this); }; Drawer.prototype.trapFocus = function ($container, eventNamespace) { var eventName = eventNamespace ? 'focusin.' + eventNamespace : 'focusin'; $container.attr('tabindex', '-1'); $container.focus(); $(document).on(eventName, function (evt) { if ($container[0] !== evt.target && !$container.has(evt.target).length) { $container.focus(); } }); }; Drawer.prototype.removeTrapFocus = function ($container, eventNamespace) { var eventName = eventNamespace ? 'focusin.' + eventNamespace : 'focusin'; $container.removeAttr('tabindex'); $(document).off(eventName); }; return Drawer; })(); // Initialize Timber's JS on docready $(timber.init); var lightbox = lity(); $(".product-video").click(function(event) { event.preventDefault(); lightbox('//www.youtube.com/watch?v=' + $(this).attr('data-youtube')); }); var getQueryString = function ( field, url ) { var href = url ? url : window.location.href; var reg = new RegExp( '[?&]' + field + '=([^&#]*)', 'i' ); var string = reg.exec(href); return string ? string[1] : null; }; function setCookie(cname,cvalue,exdays) { if (exdays == 0) { var expires = "expires=0"; } else { var d = new Date(); d.setTime(d.getTime() + (exdays*24*60*60*1000)); var expires = "expires=" + d.toGMTString(); } document.cookie = cname+"="+cvalue+"; "+expires + "; path=/; domain=.nurtureright.com"; } function getCookie(cname) { var name = cname + "="; var ca = document.cookie.split(';'); for(var i=0; i<ca.length; i++) { var c = ca[i]; while (c.charAt(0)==' ') { c = c.substring(1); } if (c.indexOf(name) == 0) { return c.substring(name.length, c.length); } } return ""; } function setNewsletterCookie() { if (getCookie("newsletter") == "") { setCookie("newsletter","1",10*365); } } function exitIntent() { "use strict"; var _delayTimer = null; setTimeout(attach, 2000); function attach() { if (isDisabled()) { return; } document.documentElement.addEventListener('mouseleave', handleMouseleave); } function handleMouseleave(e) { if (e.clientY > 20) { return; } _delayTimer = setTimeout(fire, 0); } function isDisabled() { // Only show if not subscribed already, and not on on the same page as the welcome mat, and only once per day return (getCookie("newsletter") != "") || (getCookie("exit-intent-popup-showed") != "") || (typeof welcomeMatShowed !== 'undefined'); } function fire() { if (isDisabled()) { return; } exitIntentPopup(); setCookie("exit-intent-popup-showed","1",1); document.documentElement.removeEventListener('mouseleave', handleMouseleave); } } function welcomeMat() { // Disabled for Static Website return false; welcomeMatHeadline = "Join Our Community"; welcomeMatSubheadline = "Enhance Your Parenting Experience!"; welcomeMatEmail = "Your email address"; welcomeMatYes = "Join Now"; welcomeMatNo = "No Thanks"; welcomeMatListId = "230911864e"; welcomeMatPromo = "901f3b6eb5"; welcomeMatInterest = ""; attach(); function attach() { if (isDisabled()) { return; } $("body").prepend( ' \ <div class="full-wrapper" id="welcome-mat" style="display: none;"> \ <div class="background-wrapper"> \ <div class="img-background"> \ <div class="bg-wrapper"> \ <img src="//cdn.shopify.com/s/files/1/1390/9939/t/2/assets/bg.jpg?8951157341119931830" class="background-image role-element leadstyle-background-image"> \ </div> \ </div> \ </div> \ <div class="grid content-container"> \ <div class="grid__item text-center"> \ <div style="max-width: 500px; margin: 0 auto;"> \ <h1>' + welcomeMatHeadline + '</h1> \ <p>' + welcomeMatSubheadline + '</p> \ <!--<div class="_form_13"></div><script src="https://ol.activehosted.com/f/embed.php?id=13" type="text/javascript" charset="utf-8"></script>--> \ <form method="POST" action="https://ol.activehosted.com/proc.php" id="_form_13_" class="_form _form_13 _inline-form _dark" novalidate> \ <input type="hidden" name="u" value="13" /> \ <input type="hidden" name="f" value="13" /> \ <input type="hidden" name="s" /> \ <input type="hidden" name="c" value="0" /> \ <input type="hidden" name="m" value="0" /> \ <input type="hidden" name="act" value="sub" /> \ <input type="hidden" name="v" value="2" /> \ <div class="_form-content"> \ <div class="_form_element _x84338950 _full_width " > \ <label class="_form-label"></label> \ <div class="_field-wrapper"> \ <input type="text" name="email" placeholder="Your email address" required/> \ </div> \ </div> \ <div class="_form_element _field9 _full_width " > \ <label class="_form-label"></label> \ <div class="_field-wrapper"> \ <input type="text" name="field[9]" value="'+ getQueryString("welcomeMat") +'" placeholder="Welcome Mat" /> \ </div> \ </div> \ <div class="_button-wrapper _full_width"> \ <button id="_form_13_submit" class="_submit" type="submit"> \ ' + welcomeMatYes + ' \ </button> \ </div> \ <div class="_clear-element"> \ </div> \ </div> \ <div class="_form-thank-you" style="display:none;"></div> \ </form> \ <input type="button" value="' + welcomeMatNo + '" class="btn btn--secondary" style="width: 49%; float: right;"> \ </div> \ </div> \ <div class="bottom"> \ <span aria-hidden="true" class="icon ci-icon-down"></span> \ </div> \ </div> \ </div> \ '); welcomeMatShowed = true; $( window ).resize(function() { $("#welcome-mat").height($(window).height()); }); $("#welcome-mat").show().height($(window).height()); window.scrollTo(0 , 0); $("#welcome-mat .btn--secondary, #welcome-mat .ci-icon-down").click(function(){ $("#welcome-mat").slideUp("slow", function() { $(this).remove(); window.scrollTo(0 , 0); }); }); $(window).scroll(function() { var wH = $(window).height(), wS = $(this).scrollTop(); if ((wS > (wH)) && $("#welcome-mat").length) { $("#welcome-mat").remove(); window.scrollTo( wS - wH , 0); } }); setCookie("welcome-mat-showed","1",30); } function isDisabled() { if (getQueryString("welcomeMat") == "amazonGiveaway") { welcomeMatHeadline = "Join Our VIP Club"; welcomeMatSubheadline = "And Double Your Chances To Win!"; welcomeMatPromo = "4cd493a075"; return false; } else if (getQueryString("welcomeMat") == "bow-tiger") { welcomeMatHeadline = '<img src="//cdn.shopify.com/s/files/1/1390/9939/t/2/assets/bow-tiger-logo-white.png?8951157341119931830" class="bow-tiger_white_logo"><span class="is_now">is now...</span><img src="//cdn.shopify.com/s/files/1/1390/9939/t/2/assets/logo-white.png?8951157341119931830" class="nurture-right_white_logo"><br>Join Our Community'; welcomeMatPromo = "00ca8fe726"; return false; } else if (getQueryString("welcomeMat") == "a10off") { welcomeMatHeadline = '<img src="//cdn.shopify.com/s/files/1/1390/9939/t/2/assets/logo-white.png?8951157341119931830" class="nurture-right_white_logo"><br>Take 10% Off Your First Order'; welcomeMatHeadline = 'Take 10% Off Your First Order'; welcomeMatSubheadline = "Tell us where to email your coupon code:"; welcomeMatYes = "Get Coupon"; welcomeMatPromo = "8c2f52c43b"; welcomeMatInterest = "8c80ebfc66"; return false; } else if (getQueryString("welcomeMat") == "b10off") { welcomeMatHeadline = 'Take 10% Off Your First Order'; welcomeMatSubheadline = "Tell us where to email your coupon code:"; welcomeMatYes = "Get Coupon"; welcomeMatPromo = "d65c7fe671"; welcomeMatInterest = "8c80ebfc66"; return false; } else if (getQueryString("welcomeMat") == "c10off") { welcomeMatHeadline = 'Take 10% Off Your First Order'; welcomeMatSubheadline = "Tell us where to email your coupon code:"; welcomeMatYes = "Get Coupon"; welcomeMatPromo = "4d61eb2431"; welcomeMatInterest = "8c80ebfc66"; return false; } else if (getQueryString("welcomeMat") == "d10off") { welcomeMatHeadline = 'Take 10% Off Your First Order'; welcomeMatSubheadline = "Tell us where to email your coupon code:"; welcomeMatYes = "Get Coupon"; welcomeMatPromo = "8beac76e95"; welcomeMatInterest = "8c80ebfc66"; return false; } else if (getQueryString("welcomeMat") == "susan10off") { welcomeMatHeadline = 'Take 10% Off Your First Order'; welcomeMatSubheadline = "Tell us where to email your coupon code:"; welcomeMatYes = "Get Coupon"; welcomeMatPromo = "aa7ba5511a"; welcomeMatInterest = "8c80ebfc66"; return false; } return (getCookie("newsletter") != "") || (getCookie("welcome-mat-showed") != ""); } } if (!$("body").hasClass("landing-page")) { // Disabled for Static Website //exitIntent(); //welcomeMat(); } if (typeof acceptsMarketing !== 'undefined') { setNewsletterCookie(); } if (getQueryString("n") == "1") { setNewsletterCookie(); } $(".header-join-our-community a").click(function(event) { event.preventDefault(); exitIntentPopup(); }); function exitIntentPopup() { $('#exit-intent-popup').find('input[name=EMAIL]').removeClass('error'); $('#exit-intent-popup').find('.response').hide(); $('#exit-intent-popup').find('#mc-embedded-subscribe, .mc-field-group, h3, h3 + p').show(); lightbox("#exit-intent-popup"); } $(document).ready( function () { $( 'form.mc-embedded-subscribe-form' ).each(function() { var $form = $(this); if ( $form.length > 0 ) { $form.find('input[type="submit"], button[type="submit"]').bind('click', function ( event ) { if ( event ) event.preventDefault(); $form.find('input[name=EMAIL]').removeClass('error'); if ( validateEmail($form.find('input[name=EMAIL]').val()) ) { register($form); } else { $form.find('input[name=EMAIL]').addClass('error'); } }); } }); }); function validateEmail(email) { var re = /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/; return re.test(email); } function register($form) { $.ajax({ type: $form.attr('method'), url: $form.attr('action'), data: $form.serialize(), cache : false, dataType : 'json', contentType: "application/json; charset=utf-8", error : function(err) { alert("Could not connect to the registration server. Please try again later."); }, success : function(data) { data.msg = data.msg.replace(/\. /g, '. <br>'); if ((data.result != "success") && (!data.msg.includes("is already subscribed to list"))) { // Something went wrong, do something to notify the user. maybe alert(data.msg); $form.find('#mce-error-response').html(data.msg).show(); $form.find('#mce-success-response').hide(); } else { // It worked, carry on... setNewsletterCookie(); if ($form.attr('id') == 'welcome-mat-form') { $("#welcome-mat").slideUp("slow", function() { $(this).remove(); window.scrollTo(0 , 0); }); } else if ($form.attr('id') == 'email_signup_download_pdf') { window.location = "/pages/thank-you-for-joining"; } else if ($form.attr('id') == 'giftcard_email_signup') { window.location = "/pages/thank-you-gift-card"; } else { $form.find('#mce-success-response').html(data.msg).show(); $form.find('#mce-error-response').hide(); $form.find('#mc-embedded-subscribe, .mc-field-group, #mce-EMAIL, .input-group').hide(); $form.parent().parent().find('h3, h3 + p, .site-footer__logo').hide(); } //alert(data.msg); } } }); } window._form_callback = function(id) { setNewsletterCookie(); //alert('setNewsletterCookie'); if ($("#welcome-mat")) { $("#welcome-mat ._form, #welcome-mat input.btn.btn--secondary").hide(); $("#welcome-mat").slideUp("slow", function() { $(this).remove(); window.scrollTo(0 , 0); }); } }; window.cfields = {"9":"welcome_mat"}; window._show_thank_you = function(id, message, trackcmp_url) { var form = document.getElementById('_form_' + id + '_'), thank_you = form.querySelector('._form-thank-you'); form.querySelector('._form-content').style.display = 'none'; thank_you.innerHTML = message; thank_you.style.display = 'block'; if (typeof(trackcmp_url) != 'undefined' && trackcmp_url) { // Site tracking URL to use after inline form submission. _load_script(trackcmp_url); } if (typeof window._form_callback !== 'undefined') window._form_callback(id); }; window._show_error = function(id, message, html) { var form = document.getElementById('_form_' + id + '_'), err = document.createElement('div'), button = form.querySelector('button'), old_error = form.querySelector('._form_error'); if (old_error) old_error.parentNode.removeChild(old_error); err.innerHTML = message; err.className = '_error-inner _form_error _no_arrow'; var wrapper = document.createElement('div'); wrapper.className = '_form-inner'; wrapper.appendChild(err); button.parentNode.insertBefore(wrapper, button); document.querySelector('[id^="_form"][id$="_submit"]').disabled = false; if (html) { var div = document.createElement('div'); div.className = '_error-html'; div.innerHTML = html; err.appendChild(div); } }; window._load_script = function(url, callback) { var head = document.querySelector('head'), script = document.createElement('script'), r = false; script.type = 'text/javascript'; script.charset = 'utf-8'; script.src = url; if (callback) { script.onload = script.onreadystatechange = function() { if (!r && (!this.readyState || this.readyState == 'complete')) { r = true; callback(); } }; } head.appendChild(script); }; (function() { if (window.location.search.search("excludeform") !== -1) return false; var getCookie = function(name) { var match = document.cookie.match(new RegExp('(^|; )' + name + '=([^;]+)')); return match ? match[2] : null; } var setCookie = function(name, value) { var now = new Date(); var time = now.getTime(); var expireTime = time + 1000 * 60 * 60 * 24 * 365; now.setTime(expireTime); document.cookie = name + '=' + value + '; expires=' + now + ';path=/'; } var addEvent = function(element, event, func) { if (element.addEventListener) { element.addEventListener(event, func); } else { var oldFunc = element['on' + event]; element['on' + event] = function() { oldFunc.apply(this, arguments); func.apply(this, arguments); }; } } var _removed = false; var form_to_submit = document.getElementById('_form_13_'); var allInputs = form_to_submit.querySelectorAll('input, select, textarea'), tooltips = [], submitted = false; var getUrlParam = function(name) { var regexStr = '[\?&]' + name + '=([^&#]*)'; var results = new RegExp(regexStr, 'i').exec(window.location.href); return results != undefined ? decodeURIComponent(results[1]) : false; }; for (var i = 0; i < allInputs.length; i++) { var regexStr = "field\\[(\\d+)\\]"; var results = new RegExp(regexStr).exec(allInputs[i].name); if (results != undefined) { allInputs[i].dataset.name = window.cfields[results[1]]; } else { allInputs[i].dataset.name = allInputs[i].name; } var fieldVal = getUrlParam(allInputs[i].dataset.name); if (fieldVal) { if (allInputs[i].type == "radio" || allInputs[i].type == "checkbox") { if (allInputs[i].value == fieldVal) { allInputs[i].checked = true; } } else { allInputs[i].value = fieldVal; } } } var remove_tooltips = function() { for (var i = 0; i < tooltips.length; i++) { tooltips[i].tip.parentNode.removeChild(tooltips[i].tip); } tooltips = []; }; var remove_tooltip = function(elem) { for (var i = 0; i < tooltips.length; i++) { if (tooltips[i].elem === elem) { tooltips[i].tip.parentNode.removeChild(tooltips[i].tip); tooltips.splice(i, 1); return; } } }; var create_tooltip = function(elem, text) { var tooltip = document.createElement('div'), arrow = document.createElement('div'), inner = document.createElement('div'), new_tooltip = {}; if (elem.type != 'radio' && elem.type != 'checkbox') { tooltip.className = '_error'; arrow.className = '_error-arrow'; inner.className = '_error-inner'; inner.innerHTML = text; tooltip.appendChild(arrow); tooltip.appendChild(inner); elem.parentNode.appendChild(tooltip); } else { tooltip.className = '_error-inner _no_arrow'; tooltip.innerHTML = text; elem.parentNode.insertBefore(tooltip, elem); new_tooltip.no_arrow = true; } new_tooltip.tip = tooltip; new_tooltip.elem = elem; tooltips.push(new_tooltip); return new_tooltip; }; var resize_tooltip = function(tooltip) { var rect = tooltip.elem.getBoundingClientRect(); var doc = document.documentElement, scrollPosition = rect.top - ((window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)); if (scrollPosition < 40) { tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, '') + ' _below'; } else { tooltip.tip.className = tooltip.tip.className.replace(/ ?(_above|_below) ?/g, '') + ' _above'; } }; var resize_tooltips = function() { if (_removed) return; for (var i = 0; i < tooltips.length; i++) { if (!tooltips[i].no_arrow) resize_tooltip(tooltips[i]); } }; var validate_field = function(elem, remove) { var tooltip = null, value = elem.value, no_error = true; remove ? remove_tooltip(elem) : false; if (elem.type != 'checkbox') elem.className = elem.className.replace(/ ?_has_error ?/g, ''); if (elem.getAttribute('required') !== null) { if (elem.type == 'radio' || (elem.type == 'checkbox' && /any/.test(elem.className))) { var elems = form_to_submit.elements[elem.name]; if (!(elems instanceof NodeList || elems instanceof HTMLCollection) || elems.length <= 1) { no_error = elem.checked; } else { no_error = false; for (var i = 0; i < elems.length; i++) { if (elems[i].checked) no_error = true; } } if (!no_error) { tooltip = create_tooltip(elem, "Please select an option."); } } else if (elem.type =='checkbox') { var elems = form_to_submit.elements[elem.name], found = false, err = []; no_error = true; for (var i = 0; i < elems.length; i++) { if (elems[i].getAttribute('required') === null) continue; if (!found && elems[i] !== elem) return true; found = true; elems[i].className = elems[i].className.replace(/ ?_has_error ?/g, ''); if (!elems[i].checked) { no_error = false; elems[i].className = elems[i].className + ' _has_error'; err.push("Checking %s is required".replace("%s", elems[i].value)); } } if (!no_error) { tooltip = create_tooltip(elem, err.join('<br/>')); } } else if (elem.tagName == 'SELECT') { var selected = true; if (elem.multiple) { selected = false; for (var i = 0; i < elem.options.length; i++) { if (elem.options[i].selected) { selected = true; break; } } } else { for (var i = 0; i < elem.options.length; i++) { if (elem.options[i].selected && !elem.options[i].value) { selected = false; } } } if (!selected) { elem.className = elem.className + ' _has_error'; no_error = false; tooltip = create_tooltip(elem, "Please select an option."); } } else if (value === undefined || value === null || value === '') { elem.className = elem.className + ' _has_error'; no_error = false; tooltip = create_tooltip(elem, "This field is required."); } } if (no_error && elem.name == 'email') { if (!value.match(/^[\+_a-z0-9-'&=]+(\.[\+_a-z0-9-']+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/i)) { elem.className = elem.className + ' _has_error'; no_error = false; tooltip = create_tooltip(elem, "Enter a valid email address."); } } if (no_error && /date_field/.test(elem.className)) { if (!value.match(/^\d\d\d\d-\d\d-\d\d$/)) { elem.className = elem.className + ' _has_error'; no_error = false; tooltip = create_tooltip(elem, "Enter a valid date."); } } tooltip ? resize_tooltip(tooltip) : false; return no_error; }; var needs_validate = function(el) { return el.name == 'email' || el.getAttribute('required') !== null; }; var validate_form = function(e) { var err = form_to_submit.querySelector('._form_error'), no_error = true; if (!submitted) { submitted = true; for (var i = 0, len = allInputs.length; i < len; i++) { var input = allInputs[i]; if (needs_validate(input)) { if (input.type == 'text') { addEvent(input, 'blur', function() { this.value = this.value.trim(); validate_field(this, true); }); addEvent(input, 'input', function() { validate_field(this, true); }); } else if (input.type == 'radio' || input.type == 'checkbox') { (function(el) { var radios = form_to_submit.elements[el.name]; for (var i = 0; i < radios.length; i++) { addEvent(radios[i], 'click', function() { validate_field(el, true); }); } })(input); } else if (input.tagName == 'SELECT') { addEvent(input, 'change', function() { validate_field(this, true); }); } } } } remove_tooltips(); for (var i = 0, len = allInputs.length; i < len; i++) { var elem = allInputs[i]; if (needs_validate(elem)) { if (elem.tagName.toLowerCase() !== "select") { elem.value = elem.value.trim(); } validate_field(elem) ? true : no_error = false; } } if (!no_error && e) { e.preventDefault(); } resize_tooltips(); return no_error; }; addEvent(window, 'resize', resize_tooltips); addEvent(window, 'scroll', resize_tooltips); window._old_serialize = null; if (typeof serialize !== 'undefined') window._old_serialize = window.serialize; _load_script("//d3rxaij56vjege.cloudfront.net/form-serialize/0.3/serialize.min.js", function() { window._form_serialize = window.serialize; if (window._old_serialize) window.serialize = window._old_serialize; }); var form_submit = function(e) { e.preventDefault(); if (validate_form()) { // use this trick to get the submit button & disable it using plain javascript document.querySelector('[id^="_form"][id$="_submit"]').disabled = true; var serialized = _form_serialize(document.getElementById('_form_13_')); var err = form_to_submit.querySelector('._form_error'); err ? err.parentNode.removeChild(err) : false; _load_script('https://ol.activehosted.com/proc.php?' + serialized + '&jsonp=true'); } return false; }; addEvent(form_to_submit, 'submit', form_submit); })();