diff --git a/index.html b/index.html index 1ea5d050..0c6c7b26 100644 --- a/index.html +++ b/index.html @@ -11,8 +11,8 @@ Volusion AngularJS Method Theme - - + + @@ -45,9 +45,9 @@ - + - + diff --git a/scripts/5c6891e8.scripts.js b/scripts/5c6891e8.scripts.js deleted file mode 100644 index 7886c719..00000000 --- a/scripts/5c6891e8.scripts.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";angular.module("config",[]).constant("ENV",{name:"samplestore",host:"",apiEndpoint:"/api/v1"}),angular.module("Volusion.templates",[]),angular.module("Volusion.services",[]),angular.module("Volusion.controllers",[]),angular.module("methodApp",["ngAnimate","ngCookies","ngResource","ngSanitize","ngTouch","ui.bootstrap","pascalprecht.translate","snap","textAngular","ui.router","ngRoute","config","seo","angulartics","Volusion.toolboxCommon","Volusion.controllers","Volusion.services","Volusion.templates"]).config(["$locationProvider","translateProvider","vnAppConfigProvider","ENV",function(a,b,c,d){a.html5Mode(!0),c.setApiPath(d.host,d.apiEndpoint);var e={urlPrefix:c.getPrefix(),region:c.getRegion(),lang:c.getLang(),country:c.getCountry(),disableTranslations:c.getTranslations()};b.configure(e)}]).run(["snapRemote","$rootScope","$window","themeSettings","vnCart","translate","vnModalService","vnViewPortWatch",function(a,b,c,d,e,f,g,h){b.defaultProductImage="/images/theme/tcp-no-image.jpg",e.init(),f.addParts("message"),h.setBreakpoints([{name:"Non-Desktop",mediaQuery:"screen and (max-width: 991px)",onMatch:function(){b.isInDesktopMode=!1,b.$emit("enterNonDesktop")},onUnmatch:function(){a.close(),b.isInDesktopMode=!0,b.$emit("exitNonDesktop")}}]),b.$on("$stateChangeStart",function(b,d,e,f){c.scrollTo(0,0),-1===f.name.indexOf(".cart")&&a.close()}),b.$on("$stateChangeSuccess",function(a,c){b.currentState=c.name}),b.$on("VN_HTTP_500_ERROR",function(){g.showError("views/server-error.html")})}]),angular.module("Volusion.controllers").controller("MainCtrl",["$scope","$rootScope","$location","$window","$timeout","vnApi","themeSettings","vnSiteConfig","vnImagePreloader",function(a,b,c,d,e,f,g,h,i){b.seo={},h.getConfig().then(function(b){a.config=b.data}),g.getThemeSettings().then(function(b){a.themeSettings=b;var c=[];angular.forEach(a.themeSettings.pages.home.slider.slides,function(a){c.push(a.imageUrl)}),i.preloadImages(c)})}]),angular.module("Volusion.controllers").controller("HomeCtrl",["$scope","$filter","vnApi",function(a,b,c){c.Product().get({filter:"featured",pageSize:4}).$promise.then(function(b){a.featuredProducts=b.data}),a.getImagePath=function(a){var c=b("vnProductImageFilter")(a);return""===c?"/images/theme/tcp-no-image.jpg":c}}]),angular.module("Volusion.controllers").controller("PageCtrl",["$rootScope","$scope","article",function(a,b,c){b.article=c.data,a.seo=angular.extend(a.seo||{},b.article.seo)}]),angular.module("Volusion.controllers").controller("HeaderCtrl",["$rootScope","$scope","$timeout","$filter","translate","vnCart","vnContentManager","vnAppConfig","vnSearchManager","snapRemote","$state",function(a,b,c,d,e,f,g,h,i,j,k){b.showSearchMobile=!0,b.showSearchDesktop=!1,b.searchLocal=i.getSearchText()||"",e.addParts("common"),e.addParts("header"),b.getCartItemsCount=function(){return f.getCartItemsCount()},a.gotoSoftAdd=function(){k.go(a.currentState+".cart")},a.snapToggle=function(b){a.isInDesktopMode?j.toggle(b):j.getSnapper().then(function(a){b===a.state().state?a.close():a.expand(b)})},a.openLeftNav=function(){a.exitCartState(),j.getSnapper().then(function(a){a.open("left")})},b.$watch(function(){return g.getHeaderState()},function(a){b.headerState=a},!0),b.$watch(function(){return g.getCheckoutHeaderState()},function(a){b.checkoutHeaderState=a},!0)}]),angular.module("methodApp").controller("ThemeSettingsCtrl",["$scope","$http","$location","vnContentManager",function(a,b,c,d){var e,f;if(d.hideAppHeader(),d.hideAppFooter(),c.absUrl().indexOf("127.0.0.1")>=0||c.absUrl().indexOf("localhost")>=0)f="dev",e="/settings/themeSettings.json",a.debug=!0;else{f="prod";var g=c.search();e="/api/v1/themes/"+g.themeName+"/versions/"+g.themeVersion+"/settings"}b.get(e).success(function(b){a.settings="dev"===f?b:b.data}),a.addSlide=function(){a.settings.pages.home.slider.slides.push({headline:"",subHeadline:"",imageUrl:"",linksTo:""})},a.save=function(){"dev"===f?(console.info("would be saved if you were in production"),window.alert("would be saved if you were in production, but since you're not:=, simply copy the debug output to your themeSettings.json file manually.")):b.put(e,a.settings).success(function(){console.log("successfully saved")})},a.$on("$destroy",function(){d.showAppHeader(),d.showAppFooter()})}]),angular.module("Volusion.templates",[]).run(["$templateCache",function(a){a.put("views/about.html","

This is the about view.

"),a.put("views/article.html",'

'),a.put("views/category.html",'

'),a.put("views/contact.html","

This is the contact view.

"),a.put("views/home.html",'
Featured
'),a.put("views/partials/footer.html",'
'),a.put("views/partials/header.html",'
'),a.put("views/partials/mobile-menu.html",'
'),a.put("views/partials/product-descriptions.html",'
Description
Features
Tech Specs
Extended Info
'),a.put("views/partials/product-tile.html",'
{{product.name}}
{{product.pricing.regularPrice | currency}} {{product.pricing.salePrice | currency}}
'),a.put("views/partials/shopping-cart.html",'

Your Cart
Your cart is empty
{{ item.pricing.unitPrice | currency }}
{{ option.optionText }}

{{ item.pricing.subtotal | vnCurrency }}

Add gift wrap for {{ item.giftWrap.price | currency }}
{{255 - item.giftWrap.message.length}}
'),a.put("views/partials/social-sharing.html"," "),a.put("views/product.html",'

Reg Now
Not in stock
Reviews
Be the first to review!
This product has received out of stars based on customer reviews
people found the following review helpful
out of By
Was this review helpful for you? Yes No
'), -a.put("views/search.html",'
'),a.put("views/server-error.html",'
'),a.put("views/style-guide.html",'

Hello, world!

This is a template for a simple marketing or informational website. It includes a large callout called a jumbotron and three supporting pieces of content. Use it as a starting point to create something more unique.

Learn More »

200x200
Well done! You successfully read this important alert message.
Heads up! This alert needs your attention, but it\'s not super important.
Warning! Best check yo self, you\'re not looking too good.
Oh snap! Change a few things up and try submitting again.
60% Complete
40% Complete (success)
20% Complete
60% Complete (warning)
80% Complete (danger)
35% Complete (success)
20% Complete (warning)
10% Complete (danger)
  • Cras justo odio
  • Dapibus ac facilisis in
  • Morbi leo risus
  • Porta ac consectetur ac
  • Vestibulum at eros

Panel title

Panel content

Panel title

Panel content

Panel title

Panel content

Panel title

Panel content

Panel title

Panel content

Panel title

Panel content

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed diam eget risus varius blandit sit amet non magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Aenean lacinia bibendum nulla sed consectetur.

'),a.put("views/theme-settings.html",'

Theme Settings

General

Header Content

Footer Content

Home

Content

Display Featured Products

Content Tiles

Display Content Tiles
{{$index}}

Home Page Slideshow

Display Slide Show

Slide {{$index + 1}}   
Category
TODO

Debug

We\'ve detected you\'re running locally, so only you see this debug window. Watch your theme settings json model change in real time.

')}]); \ No newline at end of file diff --git a/scripts/28ceb405.vendor.js b/scripts/96bbc025.vendor.js similarity index 71% rename from scripts/28ceb405.vendor.js rename to scripts/96bbc025.vendor.js index 391e37ce..c86d7a91 100644 --- a/scripts/28ceb405.vendor.js +++ b/scripts/96bbc025.vendor.js @@ -19,16 +19,17 @@ return a?(i=a,this):a},this.useMissingTranslationHandlerLog=function(){return th }else f=l?m(a):ed({},a);return l&&(Hc.call(a,"index")&&(f.index=a.index),Hc.call(a,"input")&&(f.input=a.input)),b?(d.push(a),e.push(f),(l?Ya:hd)(a,function(a,g){f[g]=u(a,b,c,d,e)}),n&&(k(d),k(e)),f):f}function W(a,b){return Ea(a)?Nc(a):{}}function Y(a,b,c){if("function"!=typeof a)return Zb;if("undefined"==typeof b||!("prototype"in a))return a;var d=a.__bindData__;if("undefined"==typeof d&&(Xc.funcNames&&(d=!a.name),d=d||!Xc.funcDecomp,!d)){var e=Fc.call(a);Xc.funcNames||(d=!B.test(e)),d||(d=F.test(e),Yc(a,d))}if(d===!1||d!==!0&&1&d[1])return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)};case 4:return function(c,d,e,f){return a.call(b,c,d,e,f)}}return Ib(a,b)}function Z(a){function b(){var a=i?g:this;if(e){var o=m(e);Ic.apply(o,arguments)}if((f||k)&&(o||(o=m(arguments)),f&&Ic.apply(o,f),k&&o.length=t&&f===b,j=[];if(i){var k=g(d);k?(f=c,d=k):i=!1}for(;++e-1:void 0});return e.pop(),f.pop(),s&&(k(e),k(f)),g}function ca(a,b,c,d,e){(Zc(b)?Ya:hd)(b,function(b,f){var g,h,i=b,j=a[f];if(b&&((h=Zc(b))||id(b))){for(var k=d.length;k--;)if(g=d[k]==b){j=e[k];break}if(!g){var l;c&&(i=c(j,b),(l="undefined"!=typeof i)&&(j=i)),l||(j=h?Zc(j)?j:[]:id(j)?j:{}),d.push(b),e.push(j),l||ca(j,b,c,d,e)}}else c&&(i=c(j,b),"undefined"==typeof i&&(i=b)),"undefined"!=typeof i&&(j=i);a[f]=j})}function da(a,b){return a+Ec(Vc()*(b-a+1))}function ea(a,d,e){var f=-1,h=ia(),j=a?a.length:0,m=[],n=!d&&j>=t&&h===b,o=e||n?i():m;if(n){var p=g(o);h=c,o=p}for(;++f3&&"function"==typeof b[c-2])var d=Y(b[--c-1],b[c--],2);else c>2&&"function"==typeof b[c-1]&&(d=b[--c]);for(var e=m(arguments,1,c),f=-1,g=i(),h=i();++fc?Sc(0,f+c):c)||0,Zc(a)?g=e(a,b,c)>-1:"number"==typeof f?g=(Ja(a)?a.indexOf(b,c):e(a,b,c))>-1:hd(a,function(a){return++d>=c?!(g=a===b):void 0}),g}function Ua(a,b,c){var e=!0;b=d.createCallback(b,c,3);var f=-1,g=a?a.length:0;if("number"==typeof g)for(;++fg&&(g=j)}else b=null==b&&Ja(a)?e:d.createCallback(b,c,3),Ya(a,function(a,c,d){var e=b(a,c,d);e>f&&(f=e,g=a)});return g}function bb(a,b,c){var f=1/0,g=f;if("function"!=typeof b&&c&&c[b]===a&&(b=null),null==b&&Zc(a))for(var h=-1,i=a.length;++hj&&(g=j)}else b=null==b&&Ja(a)?e:d.createCallback(b,c,3),Ya(a,function(a,c,d){var e=b(a,c,d);f>e&&(f=e,g=a)});return g}function cb(a,b,c,e){if(!a)return c;var f=arguments.length<3;b=d.createCallback(b,e,4);var g=-1,h=a.length;if("number"==typeof h)for(f&&(c=a[++g]);++gd?Sc(0,e+d):d||0}else if(d){var f=Ab(a,c);return a[f]===c?f:-1}return b(a,c,d)}function sb(a,b,c){var e=0,f=a?a.length:0;if("number"!=typeof b&&null!=b){var g=f;for(b=d.createCallback(b,c,3);g--&&b(a[g],g,a);)e++}else e=null==b||c?1:b||e;return m(a,0,Tc(Sc(0,f-e),f))}function tb(){for(var a=[],d=-1,e=arguments.length,f=i(),h=ia(),j=h===b,m=i();++d=t&&g(d?a[d]:m)))}var o=a[0],p=-1,q=o?o.length:0,r=[];a:for(;++pc?Sc(0,d+c):Tc(c,d-1))+1);d--;)if(a[d]===b)return d;return-1}function wb(a){for(var b=arguments,c=0,d=b.length,e=a?a.length:0;++cf;){var h=f+g>>>1;c(a[h])1?arguments:arguments[0],b=-1,c=a?ab(md(a,"length")):0,d=nc(0>c?0:c);++b2?ga(a,17,m(arguments,2),null,b):ga(a,1,null,null,b)}function Jb(a){for(var b=arguments.length>1?_(arguments,!0,!1,1):ua(a),c=-1,d=b.length;++c2?ga(b,19,m(arguments,2),null,a):ga(b,3,null,null,a)}function Lb(){for(var a=arguments,b=a.length;b--;)if(!Da(a[b]))throw new wc;return function(){for(var b=arguments,c=a.length;c--;)b=[a[c].apply(this,b)];return b[0]}}function Mb(a,b){return b="number"==typeof b?b:+b||a.length,ga(a,4,null,null,null,b)}function Nb(a,b,c){var d,e,f,g,h,i,j,k=0,l=!1,m=!0;if(!Da(a))throw new wc;if(b=Sc(0,b)||0,c===!0){var n=!0;m=!1}else Ea(c)&&(n=c.leading,l="maxWait"in c&&(Sc(b,c.maxWait)||0),m="trailing"in c?c.trailing:m);var p=function(){var c=b-(od()-g);if(0>=c){e&&Dc(e);var l=j;e=i=j=o,l&&(k=od(),f=a.apply(h,d),i||e||(d=h=null))}else i=Jc(p,c)},q=function(){i&&Dc(i),e=i=j=o,(m||l!==b)&&(k=od(),f=a.apply(h,d),i||e||(d=h=null))};return function(){if(d=arguments,g=od(),h=this,j=m&&(i||!n),l===!1)var c=n&&!i;else{e||n||(k=g);var o=l-(g-k),r=0>=o;r?(e&&(e=Dc(e)),k=g,f=a.apply(h,d)):e||(e=Jc(q,o))}return r&&i?i=Dc(i):i||b===l||(i=Jc(p,b)),c&&(r=!0,f=a.apply(h,d)),!r||i||e||(d=h=null),f}}function Ob(a){if(!Da(a))throw new wc;var b=m(arguments,1);return Jc(function(){a.apply(o,b)},1)}function Pb(a,b){if(!Da(a))throw new wc;var c=m(arguments,2);return Jc(function(){a.apply(o,c)},b)}function Qb(a,b){if(!Da(a))throw new wc;var c=function(){var d=c.cache,e=b?b.apply(this,arguments):s+arguments[0];return Hc.call(d,e)?d[e]:d[e]=a.apply(this,arguments)};return c.cache={},c}function Rb(a){var b,c;if(!Da(a))throw new wc;return function(){return b?c:(b=!0,c=a.apply(this,arguments),a=null,c)}}function Sb(a){return ga(a,16,m(arguments,1))}function Tb(a){return ga(a,32,null,m(arguments,1))}function Ub(a,b,c){var d=!0,e=!0;if(!Da(a))throw new wc;return c===!1?d=!1:Ea(c)&&(d="leading"in c?c.leading:d,e="trailing"in c?c.trailing:e),T.leading=d,T.maxWait=b,T.trailing=e,Nb(a,b,T)}function Vb(a,b){return ga(b,16,[a])}function Wb(a){return function(){return a}}function Xb(a,b,c){var d=typeof a;if(null==a||"function"==d)return Y(a,b,c);if("object"!=d)return bc(a);var e=_c(a),f=e[0],g=a[f];return 1!=e.length||g!==g||Ea(g)?function(b){for(var c=e.length,d=!1;c--&&(d=ba(b[e[c]],a[e[c]],null,!0)););return d}:function(a){var b=a[f];return g===b&&(0!==g||1/g==1/b)}}function Yb(a){return null==a?"":vc(a).replace(dd,ha)}function Zb(a){return a}function $b(a,b,c){var e=!0,f=b&&ua(b);b&&(c||f.length)||(null==c&&(c=b),g=p,b=a,a=d,f=ua(b)),c===!1?e=!1:Ea(c)&&"chain"in c&&(e=c.chain);var g=a,h=Da(g);Ya(f,function(c){var d=a[c]=b[c];h&&(g.prototype[c]=function(){var b=this.__chain__,c=this.__wrapped__,f=[c];Ic.apply(f,arguments);var h=d.apply(a,f);if(e||b){if(c===h&&Ea(h))return this;h=new g(h),h.__chain__=b}return h})})}function _b(){return a._=zc,this}function ac(){}function bc(a){return function(b){return b[a]}}function cc(a,b,c){var d=null==a,e=null==b;if(null==c&&("boolean"==typeof a&&e?(c=a,a=1):e||"boolean"!=typeof b||(c=b,e=!0)),d&&e&&(b=1),a=+a||0,e?(b=a,a=0):b=+b||0,c||a%1||b%1){var f=Vc();return Tc(a+f*(b-a+parseFloat("1e-"+((f+"").length-1))),b)}return da(a,b)}function dc(a,b){if(a){var c=a[b];return Da(c)?a[b]():c}}function ec(a,b,c){var e=d.templateSettings;a=vc(a||""),c=fd({},c,e);var f,g=fd({},c.imports,e.imports),i=_c(g),j=Ra(g),k=0,l=c.interpolate||E,m="__p += '",n=uc((c.escape||E).source+"|"+l.source+"|"+(l===C?z:E).source+"|"+(c.evaluate||E).source+"|$","g");a.replace(n,function(b,c,d,e,g,i){return d||(d=e),m+=a.slice(k,i).replace(G,h),c&&(m+="' +\n__e("+c+") +\n'"),g&&(f=!0,m+="';\n"+g+";\n__p += '"),d&&(m+="' +\n((__t = ("+d+")) == null ? '' : __t) +\n'"),k=i+b.length,b}),m+="';\n";var p=c.variable,q=p;q||(p="obj",m="with ("+p+") {\n"+m+"\n}\n"),m=(f?m.replace(w,""):m).replace(x,"$1").replace(y,"$1;"),m="function("+p+") {\n"+(q?"":p+" || ("+p+" = {});\n")+"var __t, __p = '', __e = _.escape"+(f?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+m+"return __p\n}";var r="\n/*\n//# sourceURL="+(c.sourceURL||"/lodash/template/source["+I++ +"]")+"\n*/";try{var s=qc(i,"return "+m+r).apply(o,j)}catch(t){throw t.source=m,t}return b?s(b):(s.source=m,s)}function fc(a,b,c){a=(a=+a)>-1?a:0;var d=-1,e=nc(a);for(b=Y(b,c,1);++d/g,evaluate:/<%([\s\S]+?)%>/g,interpolate:C,variable:"",imports:{_:d}},Nc||(W=function(){function b(){}return function(c){if(Ea(c)){b.prototype=c;var d=new b;b.prototype=null}return d||a.Object()}}());var Yc=Mc?function(a,b){U.value=b,Mc(a,"__bindData__",U)}:ac,Zc=Oc||function(a){return a&&"object"==typeof a&&"number"==typeof a.length&&Ac.call(a)==K||!1},$c=function(a){var b,c=a,d=[];if(!c)return d;if(!V[typeof a])return d;for(b in c)Hc.call(c,b)&&d.push(b);return d},_c=Rc?function(a){return Ea(a)?Rc(a):[]}:$c,ad={"&":"&","<":"<",">":">",'"':""","'":"'"},bd=wa(ad),cd=uc("("+_c(bd).join("|")+")","g"),dd=uc("["+_c(ad).join("")+"]","g"),ed=function(a,b,c){var d,e=a,f=e;if(!e)return f;var g=arguments,h=0,i="number"==typeof c?2:g.length;if(i>3&&"function"==typeof g[i-2])var j=Y(g[--i-1],g[i--],2);else i>2&&"function"==typeof g[i-1]&&(j=g[--i]);for(;++h/g,D=RegExp("^["+v+"]*0+(?=.$)"),E=/($^)/,F=/\bthis\b/,G=/['\n\r\t\u2028\u2029\\]/g,H=["Array","Boolean","Date","Function","Math","Number","Object","RegExp","String","_","attachEvent","clearTimeout","isFinite","isNaN","parseInt","setTimeout"],I=0,J="[object Arguments]",K="[object Array]",L="[object Boolean]",M="[object Date]",N="[object Function]",O="[object Number]",P="[object Object]",Q="[object RegExp]",R="[object String]",S={};S[N]=!1,S[J]=S[K]=S[L]=S[M]=S[O]=S[P]=S[Q]=S[R]=!0;var T={leading:!1,maxWait:0,trailing:!1},U={configurable:!1,enumerable:!1,value:null,writable:!1},V={"boolean":!1,"function":!0,object:!0,number:!1,string:!1,undefined:!1},W={"\\":"\\","'":"'","\n":"n","\r":"r"," ":"t","\u2028":"u2028","\u2029":"u2029"},X=V[typeof window]&&window||this,Y=V[typeof exports]&&exports&&!exports.nodeType&&exports,Z=V[typeof module]&&module&&!module.nodeType&&module,$=Z&&Z.exports===Y&&Y,_=V[typeof global]&&global;!_||_.global!==_&&_.window!==_||(X=_);var aa=n();"function"==typeof define&&"object"==typeof define.amd&&define.amd?define(function(){return aa}):Y&&Z&&($?(Z.exports=aa)._=aa:Y._=aa),a.constant("lodash",aa)}]),function(a,b,c){"use strict";function d(){function a(a,b,d){return function(e,f,g){var h=g.$normalize(b);c[h]&&!g[h]&&e.$watch(g[a],function(a){d&&(a=!a),f.attr(b,a)})}}var c={ariaHidden:!0,ariaChecked:!0,ariaDisabled:!0,ariaRequired:!0,ariaInvalid:!0,ariaMultiline:!0,ariaValue:!0,tabindex:!0,bindKeypress:!0};this.config=function(a){c=b.extend(c,a)},this.$get=function(){return{config:function(a){return c[a]},$$watchExpr:a}}}var e=b.module("ngAria",["ng"]).provider("$aria",d);e.directive("ngShow",["$aria",function(a){return a.$$watchExpr("ngShow","aria-hidden",!0)}]).directive("ngHide",["$aria",function(a){return a.$$watchExpr("ngHide","aria-hidden",!1)}]).directive("ngModel",["$aria",function(a){function b(b,c,d){return a.config(c)&&!d.attr(b)}function c(a,b){return!b.attr("role")&&b.attr("type")===a&&"INPUT"!==b[0].nodeName}function d(a,b){var c=a.type,d=a.role;return"checkbox"===(c||d)||"menuitemcheckbox"===d?"checkbox":"radio"===(c||d)||"menuitemradio"===d?"radio":"range"===c||"progressbar"===d||"slider"===d?"range":"textbox"===(c||d)||"TEXTAREA"===b[0].nodeName?"multiline":""}return{restrict:"A",require:"?ngModel",priority:200,link:function(e,f,g,h){function i(){return h.$modelValue}function j(){return m?(m=!1,function(a){var b=g.value==h.$viewValue;f.attr("aria-checked",b),f.attr("tabindex",0-!b)}):function(a){f.attr("aria-checked",g.value==h.$viewValue)}}function k(a){f.attr("aria-checked",!h.$isEmpty(h.$viewValue))}var l=d(g,f),m=b("tabindex","tabindex",f);switch(l){case"radio":case"checkbox":c(l,f)&&f.attr("role",l),b("aria-checked","ariaChecked",f)&&e.$watch(i,"radio"===l?j():k);break;case"range":c(l,f)&&f.attr("role","slider"),a.config("ariaValue")&&(g.min&&!f.attr("aria-valuemin")&&f.attr("aria-valuemin",g.min),g.max&&!f.attr("aria-valuemax")&&f.attr("aria-valuemax",g.max),f.attr("aria-valuenow")||e.$watch(i,function(a){f.attr("aria-valuenow",a)}));break;case"multiline":b("aria-multiline","ariaMultiline",f)&&f.attr("aria-multiline",!0)}m&&f.attr("tabindex",0),h.$validators.required&&b("aria-required","ariaRequired",f)&&e.$watch(function(){return h.$error.required},function(a){f.attr("aria-required",!!a)}),b("aria-invalid","ariaInvalid",f)&&e.$watch(function(){return h.$invalid},function(a){f.attr("aria-invalid",!!a)})}}}]).directive("ngDisabled",["$aria",function(a){return a.$$watchExpr("ngDisabled","aria-disabled")}]).directive("ngMessages",function(){return{restrict:"A",require:"?ngMessages",link:function(a,b,c,d){b.attr("aria-live")||b.attr("aria-live","assertive")}}}).directive("ngClick",["$aria","$parse",function(a,b){return{restrict:"A",compile:function(c,d){var e=b(d.ngClick,null,!0);return function(b,c,d){function f(a,b){return-1!==b.indexOf(a[0].nodeName)?!0:void 0}var g=["BUTTON","A","INPUT","TEXTAREA"];c.attr("role")||f(c,g)||c.attr("role","button"),a.config("tabindex")&&!c.attr("tabindex")&&c.attr("tabindex",0),!a.config("bindKeypress")||d.ngKeypress||f(c,g)||c.on("keypress",function(a){function c(){e(b,{$event:a})}(32===a.keyCode||13===a.keyCode)&&b.$apply(c)})}}}}]).directive("ngDblclick",["$aria",function(a){return function(b,c,d){a.config("tabindex")&&!c.attr("tabindex")&&c.attr("tabindex",0)}}])}(window,window.angular),function(a,b,c){"use strict";function d(a,c){return b.equals(a.length,c.length)?a>c:a.length>c.length}function e(a){var b=a.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/);if(!b||4!==b.length)throw new Error("Invalid state ref '"+a+"'");return{state:b[1],paramExpr:b[3]||null}}function f(){var a={prefixStateName:null,template:"bootstrap3",templateUrl:null,includeAbstract:!1};this.setOptions=function(c){b.extend(a,c)},this.$get=["$state","$stateParams","$rootScope",function(b,f,g){var h=g;g.$on("$viewContentLoaded",function(a){d(a.targetScope.$id,h.$id)&&(h=a.targetScope)});var i=function(a){var b=a.parent||(/^(.+)\.[^.]+$/.exec(a.name)||[])[1];return b},j=function(c,d){for(var g,i,j=e(d),k=0,l=c.length;l>k;k+=1)if(c[k].name===j.state)return;g=b.get(j.state),g["abstract"]&&!a.includeAbstract||g.ncyBreadcrumb&&g.ncyBreadcrumb.skip||(j.paramExpr&&(i=h.$eval(j.paramExpr)),g.ncyBreadcrumbLink=b.href(j.state,i||f||{}),c.unshift(g))},k=function(a){var c=e(a),d=b.get(c.state);if(d.ncyBreadcrumb&&d.ncyBreadcrumb.parent){var f="function"==typeof d.ncyBreadcrumb.parent,g=f?d.ncyBreadcrumb.parent(h):d.ncyBreadcrumb.parent;if(g)return g}return i(d)};return{getTemplate:function(b){return a.templateUrl?null:b[a.template]?b[a.template]:a.template},getTemplateUrl:function(){return a.templateUrl},getStatesChain:function(c){for(var d=[],e=b.$current.self.name;e;e=k(e))if(j(d,e),c&&d.length)return d;return a.prefixStateName&&j(d,a.prefixStateName),d},getLastStep:function(){var a=this.getStatesChain(!0);return a.length?a[0]:c},$getLastViewScope:function(){return h}}}]}function g(a,c,d){var e={bootstrap2:'',bootstrap3:''};return{restrict:"AE",replace:!0,scope:{},template:c.getTemplate(e),templateUrl:c.getTemplateUrl(),link:{post:function(e){var f=[],g=function(){k(f);var d=c.$getLastViewScope();e.steps=c.getStatesChain(),b.forEach(e.steps,function(b){if(b.ncyBreadcrumb&&b.ncyBreadcrumb.label){var c=a(b.ncyBreadcrumb.label);b.ncyBreadcrumbLabel=c(d),j(f,c,d,b); -}else b.ncyBreadcrumbLabel=b.name})};d.$on("$viewContentLoaded",function(){g()}),g()}}}}function h(a,b,c){return{restrict:"A",scope:{},template:"{{ncyBreadcrumbLabel}}",compile:function(d,e){var f=d.attr(e.$attr.ncyBreadcrumbLast);return f&&d.html(f),{post:function(d){var e=[],f=function(){k(e);var c=b.$getLastViewScope(),f=b.getLastStep();if(f)if(d.ncyBreadcrumbLink=f.ncyBreadcrumbLink,f.ncyBreadcrumb&&f.ncyBreadcrumb.label){var g=a(f.ncyBreadcrumb.label);d.ncyBreadcrumbLabel=g(c),j(e,g,c,d)}else d.ncyBreadcrumbLabel=f.name};c.$on("$viewContentLoaded",function(){f()}),f()}}}}}var i=function(a){if(a.expressions)return a.expressions;var c=[];return b.forEach(a.parts,function(a){b.isFunction(a)&&c.push(a.exp)}),c},j=function(a,c,d,e){b.forEach(i(c),function(b){var f=d.$watch(b,function(){e.ncyBreadcrumbLabel=c(d)});a.push(f)})},k=function(a){b.forEach(a,function(a){a()}),a=[]};g.$inject=["$interpolate","$breadcrumb","$rootScope"],h.$inject=["$interpolate","$breadcrumb","$rootScope"],b.module("ncy-angular-breadcrumb",["ui.router.state"]).provider("$breadcrumb",f).directive("ncyBreadcrumb",g).directive("ncyBreadcrumbLast",h)}(window,window.angular),angular.module("Volusion.toolboxCommon.templates",[]),angular.module("Volusion.toolboxCommon",["ngCookies","ngSanitize","pascalprecht.translate","ui.bootstrap","Volusion.toolboxCommon.templates","ngLodash","ngAria","ncy-angular-breadcrumb"]).config(["$httpProvider","$translateProvider",function(a,b){"use strict";a.interceptors.push("vnHttpResponseInterceptor");var c={"VN-CAROUSEL-TITLE":"Inline Images:","VN-IMAGE-TITLE":"Image:","VN-RATING-TITLE":"Rating:"},d={"VN-CAROUSEL-TITLE":"Imágenes","VN-IMAGE-TITLE":"Imáge:","VN-RATING-TITLE":"Clasificación"};b.translations("en",c).translations("es",d).preferredLanguage("en")}]).run(["$rootScope","$window","vnCacheBustFilter","$state",function(a,b,c,d){"use strict";a.isInDesktopMode=!0,a.overridesCSS=c("/styles/overrides.css"),a.$on("$routeChangeError",function(a,c,d,e){404===e.status&&b.location.replace("/404.html")}),a.$on("$stateChangeError",function(a,b){a.preventDefault(),d.go(-1!==b.name.indexOf("my-account")?"my-account-login":"home")})}]),angular.module("Volusion.toolboxCommon").service("vnAccountSession",[function(){return this.create=function(a){this.id=a},this.destroy=function(){this.id=null},this}]),angular.module("Volusion.toolboxCommon").constant("VN_AUTH_EVENTS",{loginSuccess:"vn-auth-login-success",logoutSuccess:"vn-auth-logout-success",loginFailed:"vn-auth-login-failed",sessionTimeout:"vn-auth-session-timeout",notAuthenticated:"vn-auth-not-authenticated",notAuthorized:"vn-auth-not-authorized"}),angular.module("Volusion.toolboxCommon").factory("vnAuthService",["$http","$rootScope","$q","$cookies","vnAppConfig","vnAccountSession","VN_AUTH_EVENTS","vnUser",function(a,b,c,d,e,f,g,h){function i(c){return a({method:"POST",url:e.getLoginUrl(),headers:{"Content-Type":"application/x-www-form-urlencoded"},transformRequest:function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(encodeURIComponent(c)+"="+encodeURIComponent(a[c]));return b.join("&")},data:c,withCredentials:!0}).success(function(a){return f.create(a.CustomerId),d.CustomerId=a.CustomerId,b.$emit(g.loginSuccess,a.CustomerId)})["catch"](function(a){return b.$emit(g.loginFailed,a)})}function j(){return!!f.id}function k(){f.destroy(),d.CustomerID="",d.ASPSESSIONIDSACSCDRC="",b.$emit(g.logoutSuccess)}function l(b){return a({method:"POST",url:e.getForgotPasswordUrl(),headers:{"Content-Type":"application/x-www-form-urlencoded"},transformRequest:function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(encodeURIComponent(c)+"="+encodeURIComponent(a[c]));return b.join("&")},data:{Email:b},withCredentials:!0})}function m(){var a=c.defer();return d.CustomerID&&d.ASPSESSIONIDSACSCDRC?(h.getCurrentUser().then(function(){f.create(d.CustomerId),h.setAnonymous(!1),b.$emit(g.loginSuccess,d.CustomerID),a.resolve()},function(){a.resolve()}),a.promise):!0}return{login:i,loginFromCookie:m,isAuthenticated:j,logout:k,forgotPassword:l}}]),angular.module("Volusion.toolboxCommon").directive("vnAddressDisplay",function(){"use strict";return{restrict:"AE",replace:!0,scope:{address:"=",showEditButton:"=",onClick:"&",shipping:"@"},templateUrl:"address/address-display.tpl.html",link:function(a){a.isLocationUS=!0,a.shippingValue="true"===a.shipping?!0:!1,a.$watch("address.country",function(b){b&&(a.isLocationUS="United States"===b)})}}}),angular.module("Volusion.toolboxCommon").directive("vnAddressDisplayActions",function(){return{restrict:"A",scope:{address:"=",onMakePreferredClicked:"&",onDeleteClicked:"&",onEditClicked:"&",shipping:"@"},templateUrl:"address/vn-address-display-actions.tpl.html"}}),angular.module("Volusion.toolboxCommon").directive("vnAddressPicker",["$rootScope","vnAddressUtilities",function(a,b){return{restrict:"AE",replace:!0,scope:{addressCopied:"=",addressList:"=",backToText:"@",copyAddressHandler:"&",copyAddressText:"@",countries:"=",newAddressTitle:"@",onAddressSelected:"&",saveAddress:"&",selectAddressTitle:"@",showCopyAddress:"=",shipping:"@"},templateUrl:"address/vn-address-picker.tpl.html",link:function(c){c.openAddressPicker=!0,c.state="ADDRESSLIST",c.setPreferredAddress=function(a){b.setPreferredAddress(c.addressList,a)},c.createNewAddress=function(){c.state="NEWADDRESS",c.newAddress=b.createEmptyAddress(),c.showCopyAddress&&a.$emit("vnAddressPicker.addAddressClicked")},c.selectAddress=function(){c.onAddressSelected(),c.openAddressPicker=!1}}}}]),angular.module("Volusion.toolboxCommon").factory("vnAddressUtilities",["lodash",function(a){return{createEmptyAddress:function(){return{address1:"",address2:"",city:"",companyName:"",country:"United States",firstName:"",lastName:"",phoneNumber:"",postalCode:"",preferred:!0,residential:!0,state:""}},setPreferredAddress:function(b,c){a.forEach(b,function(a,b){a.preferred=c===b})},getPreferredAddress:function(b){return a.find(b,function(a){return a.preferred})||b[0]},removeAddressFromList:function(b,c){return a.reject(b,function(a){return a.id===c.id})}}}]),angular.module("Volusion.toolboxCommon").controller("vnAppMessageCtrl",["vnAppMessageService",function(a){var b=this;b.alerts=a.getMessages(),b.closeAlert=function(b){a.removeMessage(b)}}]),angular.module("Volusion.toolboxCommon").directive("vnAppMessage",function(){return{restrict:"EA",controller:"vnAppMessageCtrl",controllerAs:"appMessagesCtrl",templateUrl:"app-messages/vnAppMessage.tpl.html"}}),angular.module("Volusion.toolboxCommon").service("vnAppMessageService",[function(){var a={},b=[];return a.addMessage=function(a){var c={id:Date.now(),type:a.type||"warning",text:a.text};b.push(c)},a.getMessages=function(){return b},a.removeMessage=function(a){angular.forEach(b,function(c,d){c&&c.id===a&&b.splice(d,1)})},a}]),angular.module("Volusion.toolboxCommon").controller("BillingAddressViewsCtrl",["$scope","$rootScope","vnAddressUtilities","vnCheckout","vnUser",function(a,b,c,d,e){var f=1,g=-1,h=this;h.state=null,h.showCopyAddress=!0,h.useShippingAddress=!1,h.init=function(){h.checkout=d.get(),h.user=e.getUser(),h.user.anonymous?(h.billingAddress=c.createEmptyAddress(),h.state="EDITADDRESS"):e.getBillingAddresses().then(function(a){a&&a.length?(h.billingAddress=c.getPreferredAddress(a),h.onAfterAddressSave()):(h.billingAddress=c.createEmptyAddress(),h.state="EDITADDRESS")}),d.getCountries().then(function(a){h.countries=a.data})},h.editBillingAddress=function(){!h.user.anonymous&&h.user.billingAddresses&&h.user.billingAddresses.length?(h.state="PICKADDRESS",d.setHasOpenDrawer(f,!0)):h.state="EDITADDRESS"},h.onAddressSelected=function(){h.useShippingAddress=!1,h.billingAddress=c.getPreferredAddress(h.user.billingAddresses),h.onAfterAddressSave(),d.setHasOpenDrawer(f,!1)},h.onAddressAdded=function(a){h.billingAddress=a,h.addAddressToBillingAddresses(h.billingAddress),h.onAfterAddressSave()},h.saveBillingAddress=function(){"EDITADDRESS"===h.state&&h.addAddressToBillingAddresses(h.billingAddress),h.onAfterAddressSave()},h.copyShippingAddress=function(){if(h.user.anonymous)h.useShippingAddress?(angular.copy(h.checkout.cart.shippingAddress,h.billingAddress),h.saveBillingAddress()):h.state="EDITADDRESS";else{h.useShippingAddress=!0;var a=c.createEmptyAddress();angular.copy(h.checkout.cart.shippingAddress,a),h.addAddressToBillingAddresses(a,!0),h.billingAddress=c.getPreferredAddress(h.user.billingAddresses),h.saveBillingAddress()}},h.setShippingAddressFalse=function(){h.state="EDITADDRESS",h.useShippingAddress=!1,d.setBillToValidity(!1)},h.addAddressToBillingAddresses=function(a,b){var d;if(h.user.anonymous)h.user.billingAddresses=[],d=h.user.billingAddresses.push(a),c.setPreferredAddress(h.user.billingAddresses,d-1);else if(b){if(-1===g)e.setBillingAddress(a).then(function(b){a.id=b}),d=h.user.billingAddresses.push(a),g=d-1;else{var f=h.user.billingAddresses[g];angular.extend(f,a),e.updateBillingAddress(f)}c.setPreferredAddress(h.user.billingAddresses,g)}else h.useShippingAddress=!1,e.setBillingAddress(a).then(function(b){a.id=b}),d=h.user.billingAddresses.push(a),c.setPreferredAddress(h.user.billingAddresses,d-1)},h.onAfterAddressSave=function(){d.setBillToValidity(!0),d.setBillingAddress(h.billingAddress),d.updateCart(),h.state="VIEWADDRESS"},b.$on("vnPayment.validate",function(){"VIEWADDRESS"===h.state&&(d.setBillToValidity(!0),b.$emit("vnPayment.validate.continue"))}),b.$on("vnAddressPicker.addAddressClicked",function(){h.useShippingAddress=!1}),a.$watch(function(){return h.useShippingAddress},function(a){var c=angular.noop;a?c=b.$on("checkout.shippingaddress.changed",function(){h.useShippingAddress&&h.copyShippingAddress()}):c()})}]),angular.module("Volusion.toolboxCommon").directive("vnBusyAnimation",function(){"use strict";return{templateUrl:"busy-animation/vnBusyAnimation.tpl.html",transclude:!0,restrict:"A",scope:{},link:function(a,b,c){a.show=!1,a["class"]=c.vnBusyAnimationClass,a.size=c.vnBusyAnimationSize||"40px",c.$observe("vnBusyAnimationShow",function(b){a.show="true"===b})}}}),angular.module("Volusion.toolboxCommon").filter("vnCacheBust",["vnTokenGenerator",function(a){function b(b){if(!b||!b.trim())return b;var c=b.indexOf("?")>-1?"&":"?";return b+c+"_="+a.getCacheBustingToken()}return function(a){return b(a)}}]),angular.module("Volusion.toolboxCommon").factory("vnTokenGenerator",function(){function a(){return(new Date).valueOf()}return{getCacheBustingToken:a}}),angular.module("Volusion.toolboxCommon").service("CheckoutService",function(){this.sharedMethods={}}).controller("CheckoutCtrl",["$rootScope","vnViewPortWatch","$scope","vnCart","vnCheckout","vnContentManager","CheckoutService","$window",function(a,b,c,d,e,f,g,h){e.initCart().promise.then(function(){e.setUser()});var i={"default":"Place Order",loading:"Placing Order"};c.placeOrderBtnText=i["default"],g.sharedMethods.nextCheckoutStep=function(){c.nextStep()},f.showCheckoutAppHeader(),f.showCheckoutAppFooter(),c.checkout=e.get(),c.isEditable=function(a){return c.checkout.currentStep===a?"edit":"show"},c.getShipToValid=function(){return!c.checkout.shipToValid},c.getShipMethodValid=function(){return!c.checkout.shipMethodValid},c.getCreditCardValid=function(){return!c.checkout.creditCardValid},c.getBillingAddressValid=function(){return!c.checkout.billToValid},c.setStep=function(a){e.setStep(a)},c.nextStep=function(){e.nextStep()},c.prevStep=function(){e.prevStep()},c.buildShippingStepLabel=function(){return'Continue '},c.nextShippingStep=function(){c.checkout.shipToValid&&c.checkout.shipMethodValid&&e.nextStep()},c.nextBillingStep=function(){e.setBillToValidity(!1),e.setCreditCardValidity(!1),a.$emit("vnPayment.validate")},c.placeOrder=function(){e.placeOrder(),c.placeOrderBtnText=i.loading,a.$emit("checkout.stepThreeLoading");var b=a.$on("checkout.orderPlaced",function(){c.placeOrderBtnText=i["default"],a.$emit("checkout.stopLoading"),b()})},b.setBreakpoints([{name:"Non-Desktop",mediaQuery:"screen and (max-width:991px)",onUnmatch:function(){c.isInDesktopMode=!0},onMatch:function(){c.isInDesktopMode=!1}}]),a.$on("vnPayment.validate.continue",function(){c.checkout.creditCardValid&&c.checkout.billToValid&&e.nextStep()}),a.$on("checkout.stepChanged",function(){h.scrollTo(0,0)}),c.$on("$destroy",function(){f.showAppHeader(),f.showAppFooter()}),c.$on("vnShipTo.edit",function(a){c.hideShippingMethods=!0,a.stopPropagation()}),c.$on("vnShipTo.edit.done",function(a){c.hideShippingMethods=!1,a.stopPropagation()}),c.stepOneLoading=!1,c.stepTwoLoading=!1,c.stepThreeLoading=!1,a.$on("checkout.stepOneLoading",function(){c.stepOneLoading=!0}),a.$on("checkout.stepTwoLoading",function(){c.stepTwoLoading=!0}),a.$on("checkout.stepThreeLoading",function(){c.stepThreeLoading=!0}),a.$on("checkout.stopLoading",function(){c.stepOneLoading=!1,c.stepTwoLoading=!1,c.stepThreeLoading=!1})}]),angular.module("Volusion.toolboxCommon").directive("vnAddressEditor",["$rootScope","lodash",function(a,b){return{restrict:"EA",scope:{address:"=",countries:"=",onSave:"&",onDirty:"&",showSaveButton:"@",saveText:"@",showCancelButton:"@",cancelText:"@",onCancel:"&",shipping:"@"},templateUrl:"checkout/vn-address-editor.html",link:function(c){var d=null,e=null;c.frmAddress.$setPristine(),c.saveText=c.saveText||"Continue",c.cancelText=c.cancelText||"Cancel",c.showSaveButtonValue="false"===c.showSaveButton?!1:!0,c.showCancelButtonValue="true"===c.showCancelButton?!0:!1,c.shippingValue="true"===c.shipping?!0:!1,c.isLocationUS=!0,c.previousCountry=null,c.setCountryToOther=function(){if(c.previousCountry&&"United States"===c.previousCountry.name){var a=b.reject(c.countries,{name:"United States"});if(!a.length)return void c.setCountryToUS();c.previousCountry=null,c.frmAddress.$setDirty()}c.address.selectedCountry=c.previousCountry,c.address.country=c.address.selectedCountry?c.address.selectedCountry.name:"",c.isLocationUS=!1},c.setCountryToUS=function(){c.previousCountry=c.address.selectedCountry,c.address.selectedCountry=b.find(c.countries,{name:"United States"}),c.isLocationUS=!0,c.frmAddress.$setPristine()},c.onCountryChanged=function(a){a&&(c.previousCountry=a,c.address.country=a.name,"United States"===a.name?c.setCountryToUS():c.setCountryToOther(),c.address.selectedState={},e&&e!==a.name&&c.frmAddress.$setDirty())},c.onStateChanged=function(a){c.address.state=a.code,d&&d!==a.code&&c.frmAddress.$setDirty()},c.saveAddress=function(){if(c.address.country=c.address.selectedCountry?c.address.selectedCountry.name:"",c.frmAddress)if(c.isLocationUS?c.address.selectedState&&c.address.selectedState.code&&""!==c.address.state?(c.frmAddress.inputUSState.$setValidity("state",!0),c.frmAddress.inputUSStateLabel.$setValidity("state",!0),c.stateEmpty="valid"):(c.frmAddress.inputUSState.$setValidity("state",!1),c.frmAddress.inputUSStateLabel.$setValidity("state",!1),c.stateEmpty=void 0):""===c.address.country?(c.frmAddress.inputWorldwideCountry.$setValidity("country",!1),c.frmAddress.inputWorldwideCountryLabel.$setValidity("country",!1),c.stateEmpty=void 0):(c.frmAddress.inputWorldwideCountry.$setValidity("country",!0),c.frmAddress.inputWorldwideCountryLabel.$setValidity("country",!0),c.stateEmpty="valid"),c.frmAddress.$valid)c.address.preferred=!0,c.address.residential=angular.isDefined(c.address.residential)?c.address.residential:!0,c.frmAddress.$setPristine(),c.onSave();else for(var a in c.frmAddress)c.frmAddress.hasOwnProperty(a)&&a.indexOf("$")<0&&(c.frmAddress[a].$setDirty(),c.frmAddress[a].$setTouched())};var f=c.$watch("countries",function(){"undefined"!=typeof c.countries&&c.countries.length>0&&(c.setCountryToUS(),f())}),g=c.$watch("address.country",function(a){if(a&&c.countries){var d=b.find(c.countries,{name:a});d&&(e=d.name,c.onCountryChanged(d),g())}}),h=c.$watch("address.state",function(a){a&&c.address.selectedCountry&&c.address.selectedCountry.states&&(c.address.selectedState=b.find(c.address.selectedCountry.states,{code:a})||{},d=c.address.selectedState.code||"",h())}),i=c.$watch("frmAddress.$dirty",function(a){a&&(b.isFunction(c.onDirty)&&c.onDirty(),i())}),j=a.$on("vnPayment.validate",function(){c.saveAddress(),a.$emit("vnPayment.validate.continue")});c.$on("$destroy",function(){j()})}}}]),angular.module("Volusion.toolboxCommon").provider("vnAppConfig",[function(){function a(){this.AppConfig=function(){return this},this.getApiHost=function(){return b},this.getApiUrl=function(){return c},this.getLoginUrl=function(){return b+"/ajax_receiver.asp?system=login"},this.getForgotPasswordUrl=function(){return b+"/ajax_receiver.asp?system=forgotpassword"}}var b,c,d="us",e=!1,f="en",g="us",h="";this.setApiPath=function(a,d){b=a,c=a+d},this.getApiPath=function(){return c},this.getCountry=function(){return d},this.getIsLocalEnv=function(){return""!==b},this.getLang=function(){return f},this.getPrefix=function(){return h},this.getRegion=function(){return g},this.getTranslations=function(){return e},this.setCountry=function(a){d=a},this.setLang=function(a){f=a},this.setPrefix=function(a){h=a},this.setRegion=function(a){g=a},this.setTranslations=function(a){e=a},this.$get=function(){return new a}}]),angular.module("Volusion.toolboxCommon").service("vnSiteConfig",["vnApi","$q",function(a,b){var c={};return c.getConfig=function(){var c=b.defer();return a.Configuration().get().$promise.then(function(a){c.resolve(a)}),c.promise},c}]),angular.module("Volusion.toolboxCommon").controller("CategoryCtrl",["$q","$scope","$rootScope","$stateParams","$location","$route","vnApi","vnProductParams","vnAppRoute","vnContentManager",function(a,b,c,d,e,f,g,h,i,j){"use strict";b.checkForFacetFilters=function(){return h.getFacetString()?!0:void 0},b.clearAllFilters=function(){h.resetParams(),h.addCategory(b.category.id),b.queryProducts(),b.isMobileAndVisible&&b.toggleSearch()},b.dismissMobileFilters=function(){b.toggleSearch()},b.getCategory=function(a){g.Category().get({slug:a}).$promise.then(function(a){b.category=a.data,h.addCategory(a.data.id),b.queryProducts()})},b.queryProducts=function(){var a=h.getParamsObject();g.Product().get(a).$promise.then(function(a){b.products=a.data,b.facets=a.facets,b.categoryList=a.categories,b.cursor=a.cursor,b.checkFacetsAndCategories(a.categories,a.facets)})},b.toggleSearch=function(){return b.mobileDisplay?(b.mobileDisplay=!1,b.isMobileAndVisible=!1,b.isMobileAndHidden=!0,void j.showAppFooter()):(b.mobileDisplay=!0,b.isMobileAndVisible=!0,b.isMobileAndHidden=!1,void j.hideAppFooter())},b.$on("$destroy",function(){h.resetParams()}),b.$on("$viewContentLoaded",function(){i.setRouteStrategy("category"),b.getCategory(d.slug)})}]),angular.module("Volusion.toolboxCommon").controller("FooterCtrl",["$scope","vnContentManager",function(a,b){"use strict";a.$watch(function(){return b.getFooterState()},function(b){a.footerState=b},!0),a.$watch(function(){return b.getCheckoutFooterState()},function(b){a.checkoutFooterState=b},!0)}]),angular.module("Volusion.toolboxCommon").controller("OptionsCtrl",["$rootScope","$scope",function(a,b){"use strict";function c(a){var b=[];if(!a)return b;for(var c=0;c0)for(var e=0;e-1&&b.product.optionSKUs[e].quantityInStock>0){b.isItemAvailable=!0;break}}else b.isItemAvailable=b.product.availability.allowBackOrders||null===b.product.availability.quantityInStock||b.product.availability.quantityInStock>0;b.$on("VN_PRODUCT_SELECTED",function(a,c,d){for(var e=0,f=0;f-1&&(b.isItemAvailable=b.product.optionSKUs[i].quantityInStock>0)})}]),angular.module("Volusion.toolboxCommon").controller("ProductCtrl",["$rootScope","$scope","vnApi","$location","$stateParams","$filter","$anchorScroll","$translate","vnCart","vnAppMessageService","vnProduct",function(a,b,c,d,e,f,g,h,i,j,k){"use strict";function l(){null===k.getProductImage()&&k.setProductNoImage(["/images/theme/tcp-no-image.jpg","/images/theme/tcp-no-image.jpg","/images/theme/tcp-no-image.jpg"]),b.cartItem.options=b.cartItem.options||[],b.itemSelectionsNotInStock=k.findAvailability(),m()}function m(){var a="";b.popoverText="",b.buttonDisabled=!1;var c=k.findRequiredOptionsAreSelected();if(c.length>0){for(var d=0;d0||!k.findOptionAvailability(b.product.optionSelection.key)||(b.buttonWait=!0,i.saveCart(b.cartItem).then(function(){a.gotoSoftAdd(),b.cartItem.qty=0})["finally"](function(){b.modifyQty(1),b.buttonWait=!1}))},b.modifyQty=function(a){b.cartItem.qty+=a,k.setQuantityInStock(a)},b.postValidateQty=function(){""===b.cartItem.qty&&(b.cartItem.qty=1)},b.getImagePath=function(a){var b=f("vnProductImageFilter")(a);return""===b?"/images/theme/tcp-no-image.jpg":b},b.$watch("product.optionSelection",function(a){function c(){b.cartItem.code=b.product.code,b.cartItem.id=b.product.id}function d(){return a.isValid?((void 0===b.cartItem.qty||0===b.cartItem.qty)&&(b.cartItem.qty=1),void(a.quantityInStock-=b.cartItem.qty)):(b.cartItem.qty=1,a.quantityInStock=0,void(b.product.optionSelection.quantityInStock=0))}void 0!==a&&(c(),d(),k.setProductImage(a.option.selected),m(),b.isAddToCartButtonEnabled=a.isValid&&b.cartItem.qty>0)})}]),angular.module("Volusion.toolboxCommon").controller("SearchCtrl",["$rootScope","$scope","$stateParams","$location","$window","$filter","vnApi","vnProductParams","vnContentManager","themeSettings","vnAppRoute",function(a,b,c,d,e,f,g,h,i,j,k){"use strict";b.searchLocal=h.getSearchText(),b.searchTerms=c.q,b.clearAllFilters=function(){h.resetParams(),h.setSort("relevance"),h.updateSearch(c.q),b.minPrice="",b.maxPrice="",b.queryProducts()},b.dismissMobileFilters=function(){b.toggleSearch()},b.initParams=function(){h.setPageSize(j.getPageSize()),c.q?(h.updateSearch(c.q),b.searchTerms=c.q,b.queryProducts()):(b.searchTerms=d.search("q","All Products"),b.queryProducts())},b.queryProducts=function(){var a=h.getParamsObject();g.Product().get(a).$promise.then(function(a){b.products=a.data,b.facets=a.facets,b.categoryList=a.categories,b.cursor=a.cursor,b.checkFacetsAndCategories(a.categories,a.facets),b.searchTerms=h.getSearchText()||"All Products"})},b.searchByPrice=function(a){13===a.which&&(h.setMinPrice(b.minPrice),h.setMaxPrice(b.maxPrice),b.queryProducts())},b.toggleSearch=function(){return b.mobileDisplay?(b.mobileDisplay=!1,b.isMobileAndVisible=!1,b.isMobileAndHidden=!0,void i.showAppFooter()):(b.mobileDisplay=!0,b.isMobileAndVisible=!0,void(b.isMobileAndHidden=i.hideAppFooter()))},b.$on("$destroy",function(){h.resetParams()}),b.$on("$viewContentLoaded",function(){b.initParams(),k.setRouteStrategy("search"),h.preLoadData(c)})}]),angular.module("Volusion.toolboxCommon").controller("ShoppingCartCtrl",["$rootScope","$scope","$timeout","$filter","$window","translate","vnCart","notifications",function(a,b,c,d,e,f,g,h){"use strict";function i(a,c){b.loading=a?!0:!1,g.updateCart().then(function(){void 0!==c&&"function"==typeof c&&c()})}b.cart={},b.cartEmpty=!0,b.calcSubtotal=0,b.coupon={code:"",showApply:!1},b.couponsEmpty=!1,b.loading=!1,b.showGiftOption=!1,b.visualCue=!1,a.isCartOpen=!1,f.addParts("cart"),a.exitCartState=function(){history.back()},b.getCartItemsCount=function(){return g.getCartItemsCount()},b.deleteItem=function(a){b.cart.items=d("filter")(b.cart.items,function(b){return b.id!==a}),i(!0)},b.changeQty=function(a,d,e){a.qty=""===a.qty?1:d,c.cancel(b.debounceUpdateCart),void 0===e?i(!1):b.debounceUpdateCart=c(function(){i(!1)},e)},b.resetGiftOptions=function(){var a=!1;return this.showGiftOption?(b.visualCue=!0,void c(function(){b.visualCue=!1},3e3)):(angular.forEach(b.cart.items,function(b){b.isGiftWrapAvailable&&b.giftWrap.selected&&(b.giftWrap.selected=!1,a=!0)}),void(a&&i(!0)))},b.addGiftWrap=function(){i(!0)},b.addGiftMsg=function(){i(!0)},b.applyCoupon=function(){b.coupon.code.length>0&&(b.cart.discounts=d("filter")(b.cart.discounts,function(a){return a.couponCode!==b.coupon.code}),b.cart.discounts.push({couponCode:b.coupon.code}),i(!0,function(){b.coupon.showApply=!1,b.coupon.code="",0===b.cart.serviceErrors.length&&0===b.cart.warnings.length&&b.togglePromoList(!0)}))},b.deleteCoupon=function(a){b.cart.discounts=d("filter")(b.cart.discounts,function(b){return b.id!==a}),b.couponsEmpty=b.cart.discounts.length>0?!1:!0,i(!0)},a.$on("cartUpdated",function(){if(b.cart=g.getCart(),(b.cart.warnings&&b.cart.warnings.length>0||b.cart.serviceErrors&&b.cart.serviceErrors.length>0)&&(h.displayWarnings(b.cart.warnings),h.displayErrors(b.cart.serviceErrors),a.$emit("vnScroll.cart")),void 0!==b.cart&&(void 0!==b.cart.totals&&(b.calcSubtotal=b.cart.totals.items+b.cart.totals.discounts,b.cartEmpty=b.cart.totals.qty>0?!1:!0),void 0!==b.cart.discounts&&(b.couponsEmpty=b.cart.discounts.length>0?!1:!0),void 0!==b.cart.items))for(var c=0;cg;g++){var i=a.items[g],j=f(i);if(j.length>0){c(a)&&e(a,i),a.options&&a.options.length>0&&d(a.options,c,e);break}}}))}function e(){var a=[],c=function(a){return a.derivesToSKU};return d(b.product.options,c,function(b,c){a.push([b.key,c.key].join(":"))}),a.join("|")}function f(){var a=e(),c={};return c=b.product.optionSKUs.filter(function(b){return b.key===a})[0]}function g(a){if(!a)return!0;for(var b=0,c=a.length;c>b;b++){var d=a[b];if(d.isRequired&&!d.hasOwnProperty("selected"))return!1;if(d.options.length>0&&g(d.options)===!1)return!1}return!0}function h(c,d){var h=f(),i=e(),j=g(b.product.options);a.$broadcast("VN_PRODUCT_SELECTED",angular.extend({},{product:b.product,option:c,item:d,isValid:j},h),i)}b.onOptionChanged=function(a,d){b.currentSelectionText=d.text;var e=a.key,f=b.saveTo.filter(function(a){return a.id===d.id}),g=b.saveTo.filter(function(a){return a.option===e});0!==g.length&&0===f.length&&(b.saveTo=b.saveTo.filter(function(a){return a.option!==e})),0===f.length&&b.saveTo.push({id:d.id,option:e}),c(),h(a,d)},b.onCheckboxClicked=function(a,c){var d=a.key,e=b.saveTo.filter(function(a){return a.id===c.id});0===e.length?b.saveTo.push({id:c.id,option:d}):b.saveTo=b.saveTo.filter(function(a){return a.id!==c.id}),h(a,c)}}]),angular.module("Volusion.toolboxCommon").factory("ProductCollection",["Product",function(a){function b(b){angular.forEach(b.data,function(b){g.push(new a(b))});var c=new Date;f=c.getTime(),i=b.facets,k=b.cursor,j=b.categories}function c(){return g}function d(){return h}function e(){return i}var f,g=[],h=g.length,i={},j={},k={};return{updateCollection:b,getProductCollection:c,productCount:d,lastFacet:e}}]),angular.module("Volusion.toolboxCommon").factory("Product",function(){function a(a){this.id=a.id||null,this.code=a.code||null,this.name=a.name||null,this.url=a.url||null,this.slug=a.slug||null,this.pricing=a.pricing||null,this.avgRating=a.avgRating||null,this.currentImageCollection=a.imageCollection||null,this.cartItem=a.cartItem||null,this.productManufacturer=a.productManufacturer||null,this.availability=a.availability||null,this.photoAltText=a.photoAltText||null,this.shipping=a.shipping||null,this.isTaxable=a.isTaxable||null,this.isGiftWrapAvailable=a.isGiftWrapAvailable||null,this.giftWrap=a.giftWrap||null,this.descriptions=a.descriptions||null,this.pricing=a.pricing}return a}),angular.module("Volusion.toolboxCommon").value("vnApiConfigurations",{}),angular.module("Volusion.toolboxCommon").factory("vnApi",["$q","$resource","vnAppConfig","vnResourceTypes",function(a,b,c,d){"use strict";function e(){return t.resource=d.article,b(c.getApiUrl()+"/articles/:id",{id:"@id"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},query:{method:"GET",withCredentials:!0,isArray:!1,headers:t},remove:{method:"DELETE",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function f(){return t.resource=d.category,b(c.getApiUrl()+"/categories/:id",{id:"@id"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},query:{method:"GET",withCredentials:!0,isArray:!1,headers:t},remove:{method:"DELETE",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function g(){return t.resource=d.cart,b(c.getApiUrl()+"/carts",{},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},update:{method:"PUT",withCredentials:!0,headers:t},query:{method:"GET",withCredentials:!0,isArray:!1,headers:t},remove:{method:"DELETE",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function h(){return t.resource=d.config,b(c.getApiUrl()+"/config",{},{get:{method:"GET",withCredentials:!0,headers:t}})}function i(){return t.resource="countries",b(c.getApiUrl()+"/countries",{},{query:{method:"GET",withCredentials:!0,isArray:!1,headers:t}})}function j(){return t.resource=d.nav,b(c.getApiUrl()+"/navs/:navId",{navId:"@navId"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},query:{method:"GET",withCredentials:!0,isArray:!1,headers:t},remove:{method:"DELETE",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function k(){return t.resource=d.product,b(c.getApiUrl()+"/products/:code",{code:"@code"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},query:{method:"GET",withCredentials:!0,isArray:!1,headers:t},remove:{method:"DELETE",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function l(){return t.resource=d.reviews,b(c.getApiUrl()+"/products/:code/reviews",{code:"@code"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST", -withCredentials:!0,headers:t},query:{method:"GET",withCredentials:!0,isArray:!1,headers:t},remove:{method:"DELETE",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function m(){return t.resource=d.themesettings,b("/settings/themeSettings.json",{},{headers:t})}function n(){return t.resource=d.user,b(c.getApiUrl()+"/users",{},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},update:{method:"PUT",withCredentials:!0,headers:t}})}function o(){return t.resource=d.shippingaddresses,b(c.getApiUrl()+"/users/current/shippingAddresses/:id",{id:"@id"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},update:{method:"PUT",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function p(){return t.resource=d.billingaddresses,b(c.getApiUrl()+"/users/current/billingAddresses/:id",{id:"@id"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},update:{method:"PUT",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function q(){return t.resource=d.paymentprofiles,b(c.getApiUrl()+"/users/current/paymentProfiles/:id",{id:"@id"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},update:{method:"PUT",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function r(){return t.resource=d.orders,b(c.getApiUrl()+"/orders/:id",{id:"@id"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t}})}function s(){return t.resource=d.orders,b(c.getApiUrl()+"/users/current/orders/:id",{id:"@id"},{get:{method:"GET",withCredentials:!0,headers:t},query:{method:"GET",withCredentials:!0,isArray:!1,headers:t},save:{method:"PUT",withCredentials:!0,headers:t}})}var t={resource:""};return{Article:e,BillingAddresses:p,Category:f,Cart:g,Configuration:h,Country:i,CustomerOrders:s,Nav:j,Orders:r,PaymentProfiles:q,Product:k,Review:l,ShippingAddresses:o,ThemeSettings:m,User:n}}]),angular.module("Volusion.toolboxCommon").provider("vnDataEndpoint",function(){"use strict";function a(){this.VnDataEndpoint=function(){return this},this.getApiUrl=function(){return b}}var b="http://www.samplestore.io/api/v1";this.$get=function(){return new a},this.setApiUrl=function(a){b=a}}),angular.module("Volusion.toolboxCommon").value("vnEnvironment",{name:"Production"}),angular.module("Volusion.toolboxCommon").directive("vnScrollToTop",["$timeout",function(a){"use strict";return{restrict:"A",scope:{vnScrollToTop:"="},link:function(b,c){b.$watch("vnScrollToTop",function(b){b&&a(function(){angular.element(c)[0].scrollTop=0})})}}}]),angular.module("Volusion.toolboxCommon").directive("vnSetFocusIf",[function(){"use strict";return{restrict:"A",scope:{vnSetFocusIf:"="},link:function(a,b){a.$watch("vnSetFocusIf",function(a){void 0===a&&b[0].focus()})}}}]),angular.module("Volusion.toolboxCommon").directive("vnAutoGrow",function(){"use strict";return{restrict:"A",link:function(a,b,c){c.$set("ngTrim","false");var d=function(){b.css("height","auto"),b.css("height",b[0].scrollHeight+"px")};a.$watch(c.ngModel,function(){d()}),b.bind("keydown",d)}}}),angular.module("Volusion.toolboxCommon").directive("vnBlock",["vnBem",function(a){return{restrict:"A",controller:function(){this.getBlock=function(){return this.block},this.getModifiers=function(){return this.modifiers}},compile:function(){return{pre:function(b,c,d,e){var f=d.vnBlock,g=d.vnModifiers;a.addClasses(c,{block:f,blockModifiers:g}),e.block=f,e.modifiers=g}}}}}]),angular.module("Volusion.toolboxCommon").directive("vnCarousel",["$rootScope",function(a){"use strict";return{templateUrl:"template/carousel.html",restrict:"EA",replace:!0,scope:{currMode:"@currMode",carouselObjects:"="},link:function(b,c){void 0===b.currMode&&(b.currMode="on"),b.componentId="100001",b.componentName="carousel",b.selected=!1,b.$on("currentComponent.change",function(a,c){c&&c.id&&"off"===b.currMode&&(b.selected=c.id===b.componentId)}),c.on("click",function(c){"off"===b.currMode&&(c.preventDefault(),a.$broadcast("currentComponent.change",{id:b.componentId,name:b.componentName,action:"set"}))}),$(".carousel").carousel({interval:5e3,pause:"hover",wrap:!0}),b.prev=function(){$(".carousel").carousel("prev")},b.next=function(){$(".carousel").carousel("next")}}}}]).run(["$templateCache",function(a){"use strict";a.put("template/carousel.html",'')}]),angular.module("Volusion.toolboxCommon").directive("vnShoppingCart",["$rootScope","$timeout",function(a,b){"use strict";return{restrict:"A",controller:"ShoppingCartCtrl",link:function(c){c.showPromoList=!1;var d=$(".th-cart"),e=$(".th-cart__header"),f=$(".th-cart__footer"),g=$(".th-cart__body");c.fixBodyHeight=function(a){a=void 0===a?0:a,b(function(){g.css({height:"calc(100% - "+(f.outerHeight()+e.outerHeight()+$(".th-cart__brand").outerHeight())+"px)","margin-top":e.outerHeight()+"px"})},a)},c.promoInputKeypress=function(a){13===a.which&&(a.currentTarget.blur(),c.applyCoupon())},c.togglePromoList=function(a){c.showPromoList=void 0!==a?a:!c.showPromoList,b(function(){c.fixBodyHeight()},275)},c.toggleApplyBtn=function(a){a===!1?b(function(){c.coupon.showApply=!c.coupon.showApply,c.togglePromoKeyboardFix()},0):a===!0?(c.coupon.showApply=!0,c.togglePromoKeyboardFix()):(c.coupon.showApply=void 0!==a?a:!c.coupon.showApply,c.togglePromoKeyboardFix()),c.fixBodyHeight()},c.toggleKeyboardFix=function(){f.toggleClass("th-cart__footer--keyboard-fix"),c.fixBodyHeight()},c.togglePromoKeyboardFix=function(){f.toggleClass("th-cart__footer--promo-keyboard-fix"),c.fixBodyHeight()},g.on("focus","input.form-control, textarea",function(){c.toggleKeyboardFix()}).on("blur","input.form-control, textarea",function(){c.toggleKeyboardFix()}),a.$on("enterCartState",function(){d.toggleClass("th-cart--active"),$("body").toggleClass("cart-active")}),a.$on("exitCartState",function(){d.toggleClass("th-cart--active"),$("body").toggleClass("cart-active")}),a.$on("cartUpdated",function(){c.fixBodyHeight()}),a.$on("enterNonDesktop",function(){c.fixBodyHeight()}),a.$on("exitNonDesktop",function(){c.fixBodyHeight()})}}}]),angular.module("Volusion.toolboxCommon").directive("vnCategorySearch",["$rootScope","$routeParams","$location","vnProductParams","vnAppRoute",function(a,b,c,d,e){"use strict";return{templateUrl:"vn-faceted-search/vn-category-search.html",restrict:"AE",scope:{categories:"=",queryProducts:"&"},link:function(a){function f(a){angular.extend(a,{displayStrategy:"categoryDisplayOne"})}function g(a){angular.extend(a,{displayStrategy:"categoryDisplayTwo"})}function h(a){angular.forEach(a,function(a){angular.extend(a,{displayStrategy:"categoryDisplayThree"}),angular.forEach(a.subCategories,function(a){angular.extend(a,{hideSubCatLink:!0})})})}function i(a,b){for(var c=!1,d=b.subCategories.length-1;d>=0;d--)a===b.subCategories[d].slug?(angular.extend(b.subCategories[d],{hideSubCatLink:!0}),c=!0):angular.extend(b.subCategories[d],{hideSubCatLink:!1});return c}function j(){function a(a){return a.replace(/&$/,"")}var b,c,f,g,h="";if(b=d.getFacetString(),c=d.getMinPrice(),f=d.getMaxPrice(),g=d.getCategoryString(),""===g&&""===b&&""===c&&""===f)return"";if(h+="?","search"===e.getRouteStrategy()&&""!==g){var i="categoryId="+g+"&";h+=i}if(""!==b){var j="facetIds="+b+"&";h+=j}if(""!==c){var k="minPrice="+c+"&";h+=k}if(""!==f){var l="maxPrice="+f+"&";h+=l}return h=a(h)}a.updateCategory=function(b){d.addCategory(b.id),a.queryProducts()},a.buildAppUrl=function(b){if("search"===e.getRouteStrategy())d.addCategory(b.id),a.queryProducts();else if("category"===e.getRouteStrategy()){var f=b.url;c.path(f)}},a.$watch(b,function(){a.currentRoute=j()},!0),a.$watch("categories",function(a){a&&a[0]&&("/search"===c.path()?h(a):1===a.length&&b.slug===a[0].slug?f(a[0]):1===a.length&&i(b.slug,a[0])&&g(a[0]))})}}}]),angular.module("Volusion.toolboxCommon").directive("vnElement",["vnBem",function(a){return{require:"^vnBlock",restrict:"A",compile:function(){return function(b,c,d,e){a.addClasses(c,{block:e.getBlock(),blockModifiers:e.getModifiers(),element:d.vnElement,elementModifiers:d.vnModifiers})}}}}]),angular.module("Volusion.toolboxCommon").directive("vnFacetSearch",["$rootScope","$window","vnProductParams",function(a,b,c){"use strict";return{templateUrl:"vn-faceted-search/vn-facet-search.html",restrict:"AE",scope:{facets:"=",queryProducts:"&"},link:function(a){enquire.register("screen and (max-width:767px)",{setup:function(){a.defaultAccordianOpen=!0},unmatch:function(){a.defaultAccordianOpen=!0},match:function(){a.defaultAccordianOpen=!1}}),a.selectProperty=function(a){return c.isFacetSelected(a.id)},a.refineFacetSearch=function(b){c.isFacetSelected(b.id)?c.removeFacet(b.id):c.addFacet(b.id),a.queryProducts()},a.$watch("facets",function(b){a.facets=b})}}}]),angular.module("Volusion.toolboxCommon").directive("vnFacetedSearch",["$window","$location","vnProductParams",function(a,b,c){"use strict";return{templateUrl:"vn-faceted-search/vn-faceted-search.html",restrict:"EA",link:function(a){a.showCategorySearch=!1,a.showFacetSearch=!0,a.showApplyButton=!1,a.checkFacetsAndCategories=function(b,c){a.hasFacetsOrCategories=b&&b.length||c&&c.length?!0:!1};var d,e=b.url();d=/^\/search/,a.onSearchPage=d.test(e),a.$watch("categoryList",function(b){b&&(a.showCategorySearch=!0)}),a.$watch("facets",function(b){b&&(a.showFacetSearch=!0)}),a.$watch(function(){return c.getSort()},function(b){a.currentSort=b}),enquire.register("screen and (max-width:767px)",{setup:function(){a.showApplyButton=!1,a.mobileDisplay=!0,a.showMobileSearch=!1,a.isMobileAndVisible=!1,a.isMobileAndHidden=!0,a.categoryAccordiansOpen=!0,a.priceAccordiansOpen=!0,a.sortAccordianIsOpen=!0},unmatch:function(){a.showApplyButton=!1,a.mobileDisplay=!0,a.showMobileSearch=!1,a.isMobileAndVisible=!1,a.isMobileAndHidden=!0,a.categoryAccordiansOpen=!0,a.priceAccordiansOpen=!0,a.sortAccordianIsOpen=!0},match:function(){a.showApplyButton=!0,a.mobileDisplay=!1,a.showMobileSearch=!0,a.isMobileAndVisible=!1,a.isMobileAndHidden=!0,a.categoryAccordiansOpen=!1,a.priceAccordiansOpen=!1,a.sortAccordianIsOpen=!1}})}}}]),angular.module("Volusion.toolboxCommon").directive("vnImage",["$rootScope",function(a){"use strict";return{templateUrl:"template/image.html",restrict:"EA",replace:!0,scope:{currMode:"@currMode",image:"="},link:function(b,c){void 0===b.currMode&&(b.currMode="on"),b.componentId="100002",b.componentName="image",b.selected=!1,b.$on("currentComponent.change",function(a,c){c&&c.id&&"off"===b.currMode&&(b.selected=c.id===b.componentId)}),c.on("click",function(c){"off"===b.currMode&&(c.preventDefault(),a.$broadcast("currentComponent.change",{id:b.componentId,name:b.componentName,action:"set"}))})}}}]).run(["$templateCache",function(a){"use strict";a.put("template/image.html",'

VN-IMAGE-TITLE

{{ image.alt }}
')}]),angular.module("Volusion.toolboxCommon").directive("vnLabeledRadio",function(){"use strict";return{require:"ngModel",restrict:"A",replace:!0,transclude:!0,templateUrl:"template/labeled-radio.html",scope:{ngModel:"=",name:"@",value:"@",ngValue:"=",ngChecked:"=",ngDisabled:"@",change:"&ngChange"},compile:function(a,b){var c=a.find("input"),d=b.value,e=b.ngValue;"undefined"!=typeof d&&"undefined"==typeof e&&c.removeAttr("data-ng-value")}}}).run(["$templateCache",function(a){"use strict";a.put("template/labeled-radio.html",'')}]),angular.module("Volusion.toolboxCommon").directive("vnLink",["$rootScope",function(a){"use strict";return{templateUrl:"template/link.html",restrict:"EA",transclude:!0,replace:!0,scope:{currMode:"@"},link:function(b,c){void 0===b.currMode&&(b.currMode="on"),b.componentId="100003",b.componentName="link",b.selected=!1,b.$on("currentComponent.change",function(a,c){c&&c.id&&"off"===b.currMode&&(b.selected=c.id===b.componentId)}),c.on("click",function(c){"off"===b.currMode&&(c.preventDefault(),a.$broadcast("currentComponent.change",{id:b.componentId,name:b.componentName,action:"set"}))})}}}]).run(["$templateCache",function(a){"use strict";a.put("template/link.html",'')}]),angular.module("Volusion.toolboxCommon").directive("vnMetaTags",function(){"use strict";return{restrict:"EA",scope:{title:"=",description:"=",keywords:"=",toAppend:"=",robots:"=",socialPageTitle:"=",socialPageUrl:"=",socialImageUrl:"="},link:function(a,b){var c=function(a){"undefined"!=typeof a&&b.append(a)},d=function(a){var c=b.find("title");c.length>0&&c.remove(),a&&b.append(angular.element("").text(a))},e=function(a,c,d){var e=b.find("meta["+d+'="'+a+'"]');e.length>0&&e.remove(),c&&b.append(angular.element("<meta/>").attr(d,a).attr("content",c))},f=function(a){e("description",a,"name")},g=function(a){e("keywords",a,"name")},h=function(a){e("og:title",a,"property")},i=function(a){e("og:url",a,"property")},j=function(a){e("og:image",a,"property")};a.$watch("socialPageTitle",h),a.$watch("socialPageUrl",i),a.$watch("socialImageUrl",j),a.$watch("title",d),a.$watch("description",f),a.$watch("keywords",g),a.$watch("toAppend",c),a.$watch("robots",function(a){"undefined"!=typeof a&&JSON.parse(a)===!0&&(e("robots","index,follow","name"),e("GOOGLEBOT","INDEX,FOLLOW","name"))})}}}),angular.module("Volusion.toolboxCommon").directive("ngEnter",function(){return function(a,b,c){b.bind("keydown keypress",function(b){13===b.which&&(a.$apply(function(){a.$eval(c.ngEnter,{event:b})}),b.preventDefault())})}}),angular.module("Volusion.toolboxCommon").directive("vnPageName",["$rootScope",function(a){"use strict";return{restrict:"A",link:function(b,c){a.$on("$stateChangeStart",function(a,b){c.removeClass(function(a,b){return(b.match(/(^|\s)vn-page-\S+/g)||[]).join(" ")}),c.addClass("vn-page-"+b.name.split(".").join("-"))})}}}]),angular.module("Volusion.toolboxCommon").directive("vnPlaceOrderBtn",[function(){"use strict";return{restrict:"A",templateUrl:"vn-place-order-btn/vn-place-order-btn.html",link:function(a,b){a.placeOrderFixed=!1;var c=$(".th-checkout__step__review");c.on("scroll",function(){(a.placeOrderFixed===!1&&c.scrollTop()>=160||a.placeOrderFixed===!0&&c.scrollTop()<160)&&(a.placeOrderFixed=!a.placeOrderFixed,a.$apply())}),b.on("$destroy",function(){c.off("scroll")})}}}]),angular.module("Volusion.toolboxCommon").directive("vnPriceSearch",["vnProductParams",function(a){return{templateUrl:"vn-faceted-search/vn-price-search.html",restrict:"AE",scope:{queryProducts:"&"},link:function(b){b.$watch(function(){return a.getMinPrice()},function(a){b.minPrice=a}),b.$watch(function(){return a.getMaxPrice()},function(a){b.maxPrice=a}),b.searchByPrice=function(c){a.setMinPrice(b.minPrice),a.setMaxPrice(b.maxPrice),(13===c.which||"click"===c.type)&&b.queryProducts()}}}}]),angular.module("Volusion.toolboxCommon").directive("vnProductOption",function(){return{restrict:"A",replace:!0,controller:"VnProductOptionCtrl",templateUrl:"vn-product-option/index.html",scope:{option:"=",product:"=",saveTo:"="}}}),angular.module("Volusion.toolboxCommon").directive("vnRating",["$rootScope",function(a){"use strict";return{templateUrl:"template/rating.html",restrict:"EA",replace:!0,scope:{currMode:"@currMode",editable:"=",maximum:"=",ratingValue:"="},link:function(b,c,d){function e(a){return b.ratingValue%1===0&&a<b.ratingValue?g:b.ratingValue%1===.5&&b.ratingValue-a>.5?g:b.ratingValue%1===.5&&b.ratingValue-a===.5?i:h}function f(){for(b.stars=[],j=0;k>j;j++)b.stars.push({cssClass:e(j)})}var g=d.filledClass||"fa fa-star",h=d.emptyClass||"fa fa-star-o",i=d.halfFilledClass||"fa fa-star-half-o";b.title="undefined"!=typeof d.title?d.title:"Rating";var j,k=b.maximum||5;void 0===b.currMode&&(b.currMode="on"),(void 0===b.ratingValue||""===b.ratingValue)&&(b.ratingValue=0),b.componentId="100004",b.componentName="rating",b.selected=!1,b.$on("currentComponent.change",function(a,c){c&&c.id&&"off"===b.currMode&&(b.selected=c.id===b.componentId)}),c.on("click",function(c){"off"===b.currMode&&(c.preventDefault(),a.$broadcast("currentComponent.change",{id:b.componentId,name:b.componentName,action:"set"}))}),b.stars=[],b.$watch("ratingValue",function(a,b){(0===b||b)&&f()}),b.toggle=function(a){b.editable&&(b.ratingValue=a+1)}}}}]).run(["$templateCache",function(a){"use strict";a.put("template/rating.html",'<div class="vn-rating"><p class="vn-rating-title" data-ng-bind="title"></p><ul class="rating"><li data-ng-repeat="star in stars" data-ng-click="toggle($index)"><i class=" {{ star.cssClass }} " /></li></ul></div>')}]),angular.module("Volusion.toolboxCommon").directive("vnSortSearch",["vnProductParams","vnSortDefault",function(a,b){"use strict";return{templateUrl:"vn-faceted-search/vn-sort-search.html",restrict:"AE",scope:{queryProducts:"&"},link:function(c){""===a.getSort()&&a.setSort(b),c.sortBy=function(b){a.setSort(b),c.queryProducts()}}}}]),angular.module("Volusion.toolboxCommon").directive("vnShowOnDropdownHover",["$timeout",function(a){return{restrict:"A",link:function(b,c){var d,e=angular.element(c.parent().find("a")[0]);c.bind("mouseenter",function(){c.show(),a.cancel(d)}).bind("mouseleave",function(){d=a(function(){c.hide()},100)}),e.bind("mouseenter",function(){c.show(),a.cancel(d)}).bind("mouseleave",function(){d=a(function(){c.hide()},100)}).bind("click",function(){c.show()}),b.$on("$destroy",function(b){a.cancel(d)})}}}]),angular.module("Volusion.toolboxCommon").directive("vnDropdown",["$window",function(){return{restrict:"E",replace:!0,scope:{availableoptions:"=",optionselect:"=",selectedOption:"=model",placeholder:"@",displayField:"@",selectedField:"@",name:"@",ngRequired:"="},templateUrl:"dropdown/vn-dropdown.tpl.html",link:function(a,b){a.button=angular.element(b).find("button"),a.options=a.availableoptions||[],a.changeOption=function(b){a.selectedOption=a.options[b],"function"==typeof a.optionselect&&a.optionselect(a.selectedOption),a.button.focus()},a.$watch("availableoptions",function(){"undefined"!=typeof a.availableoptions&&a.availableoptions.length>0&&(a.options=a.availableoptions.slice(),angular.forEach(a.options,function(b){b.displayValue=b[a.displayField||"name"],b.selectedDisplayValue=b[a.selectedField||"name"]}))}),a.$watch("selectedOption",function(b){b?a.button.focus():a.button.blur()})}}}]),angular.module("Volusion.toolboxCommon").directive("vnEasyZoom",function(){function a(a){b.standardSrc&&b.zoomSrc&&(a.swap(b.standardSrc,b.zoomSrc),b={})}var b={};return{restrict:"A",replace:!0,templateUrl:"easy-zoom/vnEasyZoom.tpl.html",scope:{ngSrc:"=",ezAdjacent:"=",ezOverlay:"=",ezZoomSrc:"=",alt:"@"},link:function(c,d){var e=d.easyZoom(),f=e.data("easyZoom");c.$watch("ngSrc",function(c){void 0!==c&&(b.standardSrc=c,a(f))}),c.$watch("ezZoomSrc",function(c){void 0!==c&&(b.zoomSrc=c,a(f))}),c.$on("$destroy",function(){f.teardown()})}}}),angular.module("Volusion.toolboxCommon").filter("vnCurrency",["$filter","$locale",function(a,b){"use strict";return function(c,d){var e=a("currency");return 0===c?"Free":"en-us"===b.id&&0>c?e(c,d).replace("(","-").replace(")",""):e(c,d)}}]),angular.module("Volusion.toolboxCommon").filter("vnProductImageFilter",function(){return function(a,b,c){function d(b,c){var d="";if(a.length>=0)for(var e=a.length-1;e>=0;e--){var f=a[e];if(b===f.key){d=f.images[0][c];break}}return d}var e="";if(a&&a.length<=0)e="";else if(1===arguments.length)e=d("default","medium");else{if(3!==arguments.length)throw new Error("vnProductImageFilter was unable to process the arguments supplied.");e=d(b,c)}return e}}),angular.module("Volusion.toolboxCommon").directive("vnFormatNumber",["$filter",function(a){"use strict";return{require:"?ngModel",link:function(b,c,d,e){e&&(e.$formatters.unshift(function(){return a("number")(e.$modelValue)}),e.$parsers.unshift(function(b){var d=b.replace(/[^\d|\-+|\.+]/g,"");return c.val(a("number")(d)),d}))}}}]).directive("vnFormatCcNumber",["$filter",function(a){"use strict";return{require:"?ngModel",link:function(b,c,d,e){e&&(e.$formatters.unshift(function(){var b=c.attr("data-vn-cc-type").toUpperCase();return a("vnCreditCard")(e.$modelValue,b)}),e.$parsers.unshift(function(b){var d="",e=c.attr("data-vn-cc-type").toUpperCase();return d=-1!==b.indexOf("*")&&"AMEX"!==e&&"AMERICAN EXPRESS"!==e&&19===b.length||("AMEX"===e||"AMERICAN EXPRESS"===e)&&18===b.length?b:b.replace(/[^\d]+/g,""),c.val(a("vnCreditCard")(d,e)),d}))}}}]).directive("vnFormatUsPhoneNumber",["$filter",function(a){"use strict";return{require:"?ngModel",link:function(b,c,d,e){e&&(e.$formatters.unshift(function(){return a("vnUsPhone")(e.$modelValue)}),e.$parsers.unshift(function(b){var d=b.replace(/[^\d]+/g,"");return c.val(a("vnUsPhone")(d)),d}))}}}]).directive("vnFormatZip",[function(){"use strict";return{require:"?ngModel",link:function(a,b,c,d){d&&(d.$formatters.unshift(function(){return d.$modelValue}),d.$parsers.unshift(function(a){var c=a.replace(/[^\d|^\-]/g,"");return b.val(c),c}))}}}]).directive("vnFormatQuantity",["$filter",function(a){"use strict";return{require:"?ngModel",link:function(b,c,d,e){e&&(e.$formatters.unshift(function(){return a("number")(e.$modelValue)}),e.$parsers.unshift(function(b){var d="";if(""!==b){b=parseInt(b.toString().replace(/\D/g,"")),(isNaN(b)||0===b)&&(b="");var f=9999999;b>f&&(b=f),d=a("number")(b),(0===parseInt(d)||void 0===parseInt(d))&&(d="")}return e.$setViewValue(b),c.val(d),b}))}}}]),angular.module("Volusion.toolboxCommon").directive("vnLegacyLink",["$window",function(a){return{restrict:"AE",link:function(b,c,d){d.$observe("vnLegacyLink",function(a){c.attr("href",a)}),c.on("click",function(b){b.preventDefault(),a.location.assign(this.href)})}}}]),angular.module("Volusion.toolboxCommon").filter("vnLegacyLinkify",function(){return function(a){var b=angular.element("<div/>").html(a);return angular.forEach(b.find("a"),function(a){var b=angular.element(a);b.attr("target",b.attr("target")||"_self")}),b.html()}}),angular.module("Volusion.toolboxCommon").controller("ForgotPasswordCtrl",["$scope","$state","vnAuthService","vnNotifications","vnModalService",function(a,b,c,d,e){"use strict";a.forgotPassword=function(){c.forgotPassword(a.email).then(function(){b.go("login"),d.displayMsg("success","An email has been sent to reset your password if you have an account.")},function(){e.showError()})}}]),angular.module("Volusion.toolboxCommon").controller("LoginCtrl",function(){"use strict"}),angular.module("Volusion.toolboxCommon").controller("LogoutCtrl",["$rootScope","$state","vnAuthService","VN_AUTH_EVENTS","vnUser",function(a,b,c,d,e){"use strict";a.$on(d.logoutSuccess,function(){b.go("home")}),e.reset(),c.logout()}]),angular.module("Volusion.toolboxCommon").directive("vnLoginLink",["$rootScope","VN_AUTH_EVENTS","vnUser",function(a,b,c){"use strict";return{restrict:"AE",templateUrl:"login/vn-login-link.html",link:function(d){d.loggedIn=!1;var e=function(){c.isLoggedIn().then(function(){d.loggedIn=!0},function(){d.loggedIn=!1})};e(),a.$on(b.loginSuccess,function(){e()}),a.$on(b.logoutSuccess,function(){e()})}}}]),angular.module("Volusion.toolboxCommon").directive("vnLogin",["$rootScope","vnUser","vnAuthService","vnCheckout","vnNotifications","VN_AUTH_EVENTS","$q","$state",function(a,b,c,d,e,f,g,h){return{restrict:"AE",templateUrl:"login/vn-login.html",scope:{allowAnonymous:"@",buttonText:"@",redirectTo:"@"},link:function(i,j,k){i.allowAnonymous=!1,i.loginError=!1,i.clearError=function(){i.loginError=!1},k.$observe("allowAnonymous",function(){k.allowAnonymous&&(i.allowAnonymous=i.$eval(k.allowAnonymous),!i.allowAnonymous&&i.user&&(i.user.anonymous=!1))}),i.buttonText=i.buttonText||"Sign In",i.user=b.getUser(),i.disabledButton=!1,i.updateUser=function(){if(!i.disabledButton)if(i.frmLogin.$valid)if(a.$on(f.loginSuccess,function(){b.getCurrentUser().then(function(){h.go(i.redirectTo)})["catch"](function(a){e.displayErrors(a),i.disabledButton=!1,i.loginError=a.message})}),a.$on(f.loginFailed,function(a,b){i.loginError="Login Failed",i.disabledButton=!1,e.displayErrors(b.Errors||b.data.Errors)}),i.disabledButton=!0,i.user.anonymous){var j={email:i.user.email,password:"",firstName:"",lastName:"",emailOptIn:!1,anonymous:!0,customFields:{},autoLogin:!0};g.all([b.createFrom(j),d.initCart().promise]).then(function(a){b.setId(a[0].data.id),d.setUser(),h.go(i.redirectTo)})["catch"](function(a){e.displayErrors(a),i.disabledButton=!1})}else{var k={CustomerNewOld:"old",Email:i.user.email,Password:i.user.password};c.login(k)}else for(var l in i.frmLogin)i.frmLogin.hasOwnProperty(l)&&l.indexOf("$")<0&&(i.frmLogin[l].$setDirty(),i.frmLogin[l].$setTouched())}}}}]),angular.module("Volusion.toolboxCommon").factory("vnModalService",["$modal",function(a){return{showError:function(b,c){return a.open({templateUrl:b||"modal/vnErrorModal.tpl.html",scope:c})},showMessage:function(b,c){return a.open({templateUrl:b||"modal/vnModalMessage.tpl.html",scope:c})}}}]),angular.module("Volusion.toolboxCommon").controller("BillingAddressesCtrl",["$scope","vnAddressUtilities","vnUser","vnModalService","$state","vnCheckout",function(a,b,c,d,e,f){function g(){c.getBillingAddresses().then(function(a){h.billingAddresses=a,h.loading=!1},function(){h.loading=!1,d.showError().result.then(function(){e.go("my-account")})})}var h=this;h.loading=!0,g(),f.getCountries().then(function(a){h.countries=a.data}),h.state="DISPLAY",h.addressToEdit=null,h.addressToAdd=null,h.pageTitles={"default":"Billing Addresses",add:"Add Address",edit:"Edit Address"},h.pageTitle=h.pageTitles["default"],h.saveEditedAddress=function(){c.updateBillingAddress(h.addressToEdit).then(function(){h.addressToEdit=!1,h.pageTitle=h.pageTitles["default"]}),b.setPreferredAddress(h.billingAddresses,h.indexOfAddressToEdit)},h.saveNewAddress=function(){c.setBillingAddress(h.addressToAdd).then(function(a){h.addressToAdd.id=a,a&&a.data&&a.data.id&&(angular.isArray(h.billingAddresses)?(h.billingAddresses.push(a.data),b.setPreferredAddress(h.billingAddresses,h.billingAddresses.length-1)):(h.billingAddresses=[],h.billingAddresses.push(a.data)),h.addressToAdd=!1,h.pageTitle=h.pageTitles["default"])})},h.addAddress=function(){h.addressToAdd||(h.addressToAdd=b.createEmptyAddress()),h.addressToEdit=!1,h.pageTitle=h.pageTitles.add},h.cancelAddAddress=function(){h.addressToAdd=!1,h.pageTitle=h.pageTitles["default"]},h.editAddress=function(a,b){h.addressToAdd=!1,h.addressToEdit=a,h.pageTitle=h.pageTitles.edit,h.indexOfAddressToEdit=b},h.cancelEditAddress=function(){h.addressToEdit=!1,h.pageTitle=h.pageTitles["default"],g()},h.makeAddressPreferred=function(a){b.setPreferredAddress(h.billingAddresses,a),c.updateBillingAddress(b.getPreferredAddress(h.billingAddresses))},h.deleteAddress=function(e){a.message="Are you sure you want to remove this billing address?",a.addressToDelete=e,a.buttonText="Yes, remove the billing address";var f=d.showMessage("modal/vnAddressDeleteConf.tpl.html",a).result;f.then(function(){c.deleteBillingAddress(e).then(function(){h.billingAddresses=b.removeAddressFromList(h.billingAddresses,e),c.getBillingAddresses()},function(){d.showError()})},angular.noop)}}]),angular.module("Volusion.toolboxCommon").controller("ChangeEmailCtrl",["$scope","$state","vnUser","vnModalService","vnNotifications",function(a,b,c,d,e){"use strict";a.user=angular.copy(c.getUser()),a.user.password="",a.changeButtonDisabled=!0,a.emailDoesNotMatch=!1,a.changeEmail=function(){a.changeButtonDisabled||a.emailDoesNotMatch||(a.user.email=a.user.changeEmail,c.updateUser().then(function(){b.go("my-account"),e.displayMsg("success","Your email was changed")},function(){d.showError()}))},a.checkValidity=function(){return a.frmChangeEmail.$pristine?(a.changeButtonDisabled=!0,void(a.emailDoesNotMatch=!1)):(a.changeButtonDisabled=a.frmChangeEmail.$valid&&a.user.changeEmail===a.user.confirmChangeEmail?!1:!0,void(a.user.changeEmail&&a.user.confirmChangeEmail&&a.user.changeEmail.length&&a.user.confirmChangeEmail.length&&(a.emailDoesNotMatch=a.user.changeEmail===a.user.confirmChangeEmail?!1:!0)))}}]),angular.module("Volusion.toolboxCommon").controller("ChangePasswordCtrl",["$scope","$state","vnUser","vnModalService","vnNotifications",function(a,b,c,d,e){"use strict";a.user=angular.copy(c.getUser()),a.user.password="",a.user.newPassword="",a.user.confirmPassword="",a.changeButtonDisabled=!0,a.passwordDoesNotMatch=!1,a.changePassword=function(){a.changeButtonDisabled||a.passwordDoesNotMatch||(a.user.password=a.user.newPassword,c.updateUser().then(function(){b.go("my-account"),e.displayMsg("success","Your password was changed")},function(){d.showError()}))},a.checkValidity=function(){return a.frmChangePassword.$pristine?(a.changeButtonDisabled=!0,void(a.passwordDoesNotMatch=!1)):(a.changeButtonDisabled=a.frmChangePassword.$valid&&a.user.newPassword===a.user.confirmPassword?!1:!0,void(a.user.newPassword&&a.user.confirmPassword&&a.user.newPassword.length&&a.user.confirmPassword.length&&(a.passwordDoesNotMatch=a.user.newPassword===a.user.confirmPassword?!1:!0)))}}]),angular.module("Volusion.toolboxCommon").controller("ListOrdersCtrl",["$rootScope","$scope","$state","vnUser","vnModalService",function(a,b,c,d,e){var f=this;f.pageSizes=[{value:5,text:"5 Per Page"},{value:10,text:"10 Per Page"}],f.getOrders=function(){f.loading=!0,f.cursor&&f.currentPage===f.cursor.totalPages&&Math.ceil(f.cursor.total/f.selectedPageSize.value)<f.currentPage&&(f.currentPage=Math.ceil(f.cursor.total/f.selectedPageSize.value)),d.getPagedOrders(f.currentPage,f.selectedPageSize.value).then(function(a){f.loading=!1,f.cursor=a.cursor,f.numPages=f.cursor.totalPages,f.orders=a.data.orders;var b=a.cursor.currentPage*a.cursor.pageSize,c=a.cursor.currentPage*a.cursor.pageSize-a.cursor.pageSize+1;f.startIndex=0>c?0:c,f.endIndex=b>a.cursor.total?a.cursor.total:b},function(){f.loading=!1,e.showError().result.then(function(){c.go("my-account")})})},f.init=function(){f.currentPage=1,f.selectedPageSize=f.pageSizes[1],f.maxSize=3,f.getOrders()}}]),angular.module("Volusion.toolboxCommon").controller("MyAccountCtrl",["$rootScope","$scope","vnUser","vnModalService",function(a,b,c,d){"use strict";function e(){b.loading=!0,b.user=c.getUser(),c.getLastThreeOrders().then(function(a){b.orders=a.orders,b.loading=!1},function(){b.loading=!1,d.showError()})}b.loading=!1,b.orders=[],e(),a.$on("$stateChangeStart",function(a,b){"my-account"===b.name&&e()})}]),angular.module("Volusion.toolboxCommon").controller("OrdersDetailCtrl",["vnApi","$stateParams",function(a,b){function c(){d.loading=!0,a.CustomerOrders().get({id:b.id}).$promise.then(function(a){d.order=a.data,d.loading=!1},function(){d.loading=!1})}var d=this;d.order=null,d.loading=!1,c()}]),angular.module("Volusion.toolboxCommon").controller("PaymentProfilesCtrl",["$scope","$state","$q","lodash","vnCreditCardUtilities","vnUser","vnCheckout","vnModalService","vnPciaasIframe","vnCreditCardClass",function(a,b,c,d,e,f,g,h,i,j){ -function k(){var a={method:"Credit Card",preferred:!0,card:{cardType:l.paymentProfileToAdd.card.cardType,cardTypeName:l.paymentProfileToAdd.card.cardTypeName,holdersName:l.user.firstName+" "+l.user.lastName,last4:l.paymentProfileToAdd.card.cardNumber.slice(-4),expMonth:l.paymentProfileToAdd.card.expMonth,expYear:l.paymentProfileToAdd.card.expYear,issueMonth:"",issueYear:"",issueNumber:"",pCIaaSId:l.paymentProfileToAdd.card.pCIaaSId,cardNumber:l.paymentProfileToAdd.card.cardNumber}};g.setCCPaymentProfile(a),f.setPaymentProfile(a).then(function(a){if(l.paymentProfileToAdd.id=a,a&&a.data&&a.data.id){var b=j(a.data.card.cardType);a.data.card.ccCssClass=b["class"],a.data.card.last4=a.data.card.cardNumber.slice(-4),a.data.card.cardTypeName=b.name,angular.isArray(l.paymentProfiles)?(l.paymentProfiles.push(a.data),l.makePaymentProfilePreferred(l.paymentProfiles.length-1)):(l.paymentProfiles=[],l.paymentProfiles.push(a.data)),l.paymentProfileToAdd=!1,l.pageTitle=l.pageTitles["default"]}else h.showError()})}var l=this;l.user=f.getUser(),l.loading=!0,f.getPaymentProfiles().then(function(a){l.paymentProfiles=a,l.loading=!1},function(){l.loading=!1,h.showError().result.then(function(){b.go("my-account")})}),l.state="DISPLAY",l.paymentProfileToAdd=null,l.pageTitles={"default":"Payment Profiles",add:"Add Card",edit:"Edit Card"},l.pageTitle=l.pageTitles["default"],l.saveNewPaymentProfile=function(){l.processCard().then(function(a){l.paymentProfileToAdd.card.pCIaaSError="",angular.isString(a)&&(a=JSON.parse(a)),l.paymentProfileToAdd.card.cardNumber=-1===l.paymentProfileToAdd.card.cardNumber.indexOf("*")?e.maskCardValue(l.paymentProfileToAdd.card.cardNumber):l.paymentProfileToAdd.card.cardNumber,l.paymentProfileToAdd.card.pCIaaSId=a.CardId?a.CardId:l.paymentProfileToAdd.card.pCIaaSId,k()},function(){h.showError()})},l.addPaymentProfile=function(){l.paymentProfileToAdd||(l.paymentProfileToAdd={method:"Credit Card",preferred:!0,card:e.newCard()}),l.pageTitle=l.pageTitles.add},l.cancelAddPaymentProfile=function(){l.paymentProfileToAdd=!1,l.pageTitle=l.pageTitles["default"]},l.makePaymentProfilePreferred=function(a){e.setPreferredPaymentProfile(l.paymentProfiles,a),f.updatePaymentProfile(e.getPreferredPaymentProfile(l.paymentProfiles))},l.deletePaymentProfile=function(b){a.message="Are you sure you want to remove this card?",a.paymentProfileToDelete=b,a.buttonText="Yes, remove the card";var c=h.showMessage("modal/vnPaymentProfileDeleteConf.tpl.html",a).result;c.then(function(){f.deletePaymentProfile(b).then(function(){l.paymentProfiles=e.removePaymentProfileFromList(l.paymentProfiles,b),f.getPaymentProfiles()},function(){h.showError()})},angular.noop)},l.processCard=function(){return c(function(a,b){var c={CVV:"inputCreditCardCVV",HiddenCardID:"hiddenCardID",CardNumber:function(){return l.paymentProfileToAdd.card.cardNumber},CardType:function(){return{Visa:"Visa",MasterCard:"MasterCard","American Express":"Amex",Discover:"Discover"}[l.paymentProfileToAdd.card.cardTypeName]}};i.PCIaaS({settings:{merchantID:"3de067d8d96d407697da4a9559f99681",apiBase:"https://payments-qa.dev.volusion.com/paymentsv1_4"},fields:c,events:{success:a,error:b}}).process(!0)})}}]),angular.module("Volusion.toolboxCommon").controller("ShippingAddressesCtrl",["$scope","$state","vnAddressUtilities","vnUser","vnCheckout","vnModalService",function(a,b,c,d,e,f){function g(){d.getShippingAddresses().then(function(a){h.shippingAddresses=a,h.loading=!1},function(){h.loading=!1,f.showError().result.then(function(){b.go("my-account")})})}var h=this;h.loading=!0,g(),e.getCountries().then(function(a){h.countries=a.data}),h.state="DISPLAY",h.addressToEdit=null,h.addressToAdd=null,h.pageTitles={"default":"Shipping Addresses",add:"Add Address",edit:"Edit Address"},h.pageTitle=h.pageTitles["default"],h.saveEditedAddress=function(){d.updateShippingAddress(h.addressToEdit).then(function(){h.addressToEdit=!1,h.pageTitle=h.pageTitles["default"]}),c.setPreferredAddress(h.shippingAddresses,h.indexOfAddressToEdit)},h.saveNewAddress=function(){d.setShippingAddress(h.addressToAdd).then(function(a){h.addressToAdd.id=a,a&&a.data&&a.data.id&&(angular.isArray(h.shippingAddresses)?(h.shippingAddresses.push(a.data),c.setPreferredAddress(h.shippingAddresses,h.shippingAddresses.length-1)):(h.shippingAddresses=[],h.shippingAddresses.push(a.data)),h.addressToAdd=!1,h.pageTitle=h.pageTitles["default"])})},h.addAddress=function(){h.addressToAdd||(h.addressToAdd=c.createEmptyAddress()),h.addressToEdit=!1,h.pageTitle=h.pageTitles.add},h.cancelAddAddress=function(){h.addressToAdd=!1,h.pageTitle=h.pageTitles["default"]},h.editAddress=function(a,b){h.addressToAdd=!1,h.addressToEdit=a,h.pageTitle=h.pageTitles.edit,h.indexOfAddressToEdit=b},h.cancelEditAddress=function(){h.addressToEdit=!1,h.pageTitle=h.pageTitles["default"],g()},h.makeAddressPreferred=function(a){c.setPreferredAddress(h.shippingAddresses,a),d.updateShippingAddress(c.getPreferredAddress(h.shippingAddresses))},h.deleteAddress=function(b){a.message="Are you sure you want to remove this shipping address?",a.addressToDelete=b,a.buttonText="Yes, remove the shipping address";var e=f.showMessage("modal/vnAddressDeleteConf.tpl.html",a).result;e.then(function(){d.deleteShippingAddress(b).then(function(){h.shippingAddresses=c.removeAddressFromList(h.shippingAddresses,b),d.getShippingAddresses()},function(){f.showError()})},angular.noop)}}]),angular.module("Volusion.toolboxCommon").directive("vnNavMobile",["$rootScope","vnApi",function(a,b){"use strict";return{templateUrl:"nav-menu-mobile/vn-nav-mobile.tpl.html",restrict:"EA",replace:!0,scope:{currMode:"@",categoryList:"="},link:function(c,d){void 0===c.currMode&&(c.currMode="on"),c.componentId="1000051",c.componentName="navbar-mobile",c.selected=!1,c.$on("currentComponent.change",function(a,b){b&&b.id&&"off"===c.currMode&&(c.selected=b.id===c.componentId)}),d.on("click",function(b){"off"===c.currMode&&(b.preventDefault(),a.$broadcast("currentComponent.change",{id:c.componentId,name:c.componentName,action:"set"}))}),b.Nav().get({navId:1}).$promise.then(function(a){c.categories=a.data})}}}]),angular.module("Volusion.toolboxCommon").directive("vnNav",["$rootScope","$window","$timeout","vnApi",function(a,b,c,d){"use strict";return{templateUrl:"nav-menu/vn-nav.tpl.html",restrict:"EA",replace:!0,scope:{currMode:"@",categoryList:"=",useSmartNav:"@"},link:function(e,f){function g(){var a=0,b=0,c=0,d=[];-1!==i.windowWidth&&e.windowWidth>i.windowWidth&&(c=0,i.windowWidth=-1,i.position=0),-1===i.windowWidth&&angular.forEach(angular.element(".nav-top-level-menu-items"),function(d){return 0===a&&(b=angular.element(d).position().top),angular.element(d).position().top!==b?(c=a,!1):void a++}),0!==c||-1!==i.windowWidth?(-1===i.windowWidth?(i.windowWidth=e.windowWidth,i.position=c):c=i.position,e.smartNavMoreCategories=[],angular.forEach(e.smartCategories,function(a,b){b>=c-1?e.smartNavMoreCategories.push(a):d.push(a)}),e.smartNavCategories=d):e.smartNavCategories=e.smartCategories,e.displaySmartNavMoreMenuItem=0!==c}function h(a){e.smartNavCategories=e.smartCategories=a,"true"===e.useSmartNavigation&&c(function(){g()},0)}void 0===e.currMode&&(e.currMode="on"),e.useSmartNavigation=void 0===e.useSmartNav?"true":e.useSmartNav,e.componentId="100005",e.componentName="navbar",e.selected=!1,e.displaySmartNavMoreMenuItem=!1,e.$on("currentComponent.change",function(a,b){b&&b.id&&"off"===e.currMode&&(e.selected=b.id===e.componentId)}),f.on("click",function(b){"off"===e.currMode&&(b.preventDefault(),a.$broadcast("currentComponent.change",{id:e.componentId,name:e.componentName,action:"set"}))});var i={windowWidth:-1,position:0};e.initializeWindowSize=function(){e.windowWidth=b.outerWidth},e.initializeWindowSize(),"true"===e.useSmartNavigation&&angular.element(b).bind("resize",function(){e.initializeWindowSize(),e.$apply(),g()}),void 0!==e.categoryList?h(e.categoryList):d.Nav().get({navId:1}).$promise.then(function(a){h(a.data)})}}}]),angular.module("Volusion.toolboxCommon").directive("vnOrderListView",[function(){return{restrict:"AE",templateUrl:"orders/vn-order-list-view.tpl.html",scope:{orders:"="}}}]),angular.module("Volusion.toolboxCommon").directive("vnOrderTable",[function(){return{restrict:"AE",templateUrl:"orders/vn-order-table.tpl.html",scope:{orders:"="}}}]),angular.module("Volusion.toolboxCommon").directive("vnPaginator",["vnProductParams","themeSettings",function(a,b){return{templateUrl:"pagination/vnPaginator.tpl.html",restrict:"A",scope:{cursor:"=",queryFn:"&"},link:function(c,d,e){a.setPageSize(b.getPageSize()),c.nextPage=function(){c.cursor.currentPage<c.cursor.totalPages&&(a.nextPage(),c.queryFn())},c.prevPage=function(){c.cursor.currentPage>1&&(a.previousPage(),c.queryFn())},c.$watch(e.cursor,function(b){void 0!==b&&(c.currentPage=b.currentPage.toString(),a.setPage(c.currentPage))},!0)}}}]),angular.module("Volusion.toolboxCommon.templates",[]).run(["$templateCache",function(a){a.put("vn-faceted-search/vn-category-search.html",'<div class=vn-category-search__category-items data-ng-repeat="cat in categories" data-ng-class="{ \'-last\': $last }">\n\n <a href data-ng-if="cat.displayStrategy == \'categoryDisplayTwo\' || cat.displayStrategy == \'categoryDisplayThree\' " data-ng-click=buildAppUrl(cat) class=vn-category-search__category-items__category-title data-ng-class="{ \'-noborder\': $last && cat.displayStrategy == \'categoryDisplayOne\' }">\n\n <span data-ng-if="cat.displayStrategy == \'categoryDisplayTwo\' " class="glyphicon glyphicon-chevron-left"></span>\n {{ cat.name }}\n </a>\n <span class=vn-category-search__category-items__category-title data-ng-if="cat.displayStrategy == \'categoryDisplayOne\' ">{{ cat.name }}</span>\n <div class=vn-category-search__category-items__category-item data-ng-repeat="subCat in cat.subCategories" data-ng-class="{ \'-noborder\': $last }">\n\n <span data-ng-if=subCat.hideSubCatLink>{{ subCat.name }}</span>\n <a href data-ng-if=!subCat.hideSubCatLink data-ng-click=buildAppUrl(subCat)>{{ subCat.name }}</a>\n </div>\n</div>'),a.put("vn-faceted-search/vn-facet-search.html",'<div data-accordion-group class=facet-item data-ng-repeat="facet in facets track by $index" data-is-open=defaultAccordianOpen>\n <div data-accordion-heading>\n <div>\n <span>{{ facet.title }}</span>\n <i class="pull-right glyphicon" data-ng-class="{\'glyphicon-chevron-down\': defaultAccordianOpen, \'glyphicon-chevron-right\': !defaultAccordianOpen}"></i>\n </div>\n </div>\n <div data-ng-if="facet.displayType != \'swatches\'" class=facet-properties>\n <label class=facet-property data-ng-repeat="property in facet.properties track by $index" data-ng-class="{ \'-last\': $last }">\n\n <input type=checkbox name=property.name data-ng-checked=selectProperty(property) data-ng-click="refineFacetSearch(property)">\n <span class=name>{{ property.name }}</span>\n <span class=count>{{ property.count }}</span>\n </label>\n </div>\n <div data-ng-if="facet.displayType == \'swatches\'" class="facet-properties clearfix">\n <div data-ng-repeat="property in facet.properties" class=facet-property__swatch data-ng-click=refineFacetSearch(property) data-ng-class="{\'facet-property__swatch--selected\': selectProperty(property)}">\n <div class=facet-property__swatch--color data-ng-style="{\'backgroundColor\': property.color }">\n </div>\n </div>\n </div>\n</div>'),a.put("vn-faceted-search/vn-faceted-search.html",'<div class=vn-faceted-search-header data-ng-show=showApplyButton>\n <button class="btn btn-success __cancel-action" href data-ng-click=dismissMobileFilters()>Apply\n </button>\n \n <button class="btn __clear-action" href data-ng-click=clearAllFilters()>Clear\n </button>\n \n</div>\n<div class=-faceted-search data-ng-show=showFacetSearch>\n <div class=facets>\n <div data-accordion data-close-others=false>\n\n \n <div data-accordion-group class=facet-item__by-category data-is-open=categoryAccordiansOpen data-ng-show="categoryList.length > 0">\n <div data-accordion-heading>\n <div>\n <span>Category</span>\n <i class="pull-right glyphicon" data-ng-class="{\'glyphicon-chevron-down\': categoryAccordiansOpen, \'glyphicon-chevron-right\': !categoryAccordiansOpen}"></i>\n </div>\n </div>\n <div vn-category-search categories=categoryList query-products=queryProducts() data-ng-show=showCategorySearch class=category-search>\n </div>\n </div>\n\n \n <div vn-facet-search facets=facets query-products=queryProducts() data-ng-show="facets.length > 0"></div>\n\n \n <div data-accordion-group class=facet-item__by-price data-is-open=priceAccordiansOpen data-ng-show="facets.length > 0">\n <div data-accordion-heading>\n <div>\n <span>Price</span>\n <i class="pull-right glyphicon" data-ng-class="{\'glyphicon-chevron-down\': priceAccordiansOpen, \'glyphicon-chevron-right\': !priceAccordiansOpen}"></i>\n </div>\n </div>\n <div class=facet-item__by-price__inputs vn-price-search query-products=queryProducts()></div>\n </div>\n </div>\n\n \n <div class=vn-faceted-search-footer data-ng-show=!showApplyButton>\n <button class="btn __clear-action" href data-ng-click=clearAllFilters()>Reset Filters\n </button>\n \n </div>\n\n </div>\n</div>'),a.put("vn-faceted-search/vn-price-search.html",'<input data-ng-model=minPrice data-ng-keypress=searchByPrice($event) placeholder="$">\n to \n<input data-ng-model=maxPrice data-ng-keypress=searchByPrice($event) placeholder="$$">\n<button class="btn btn-default facet-item__by-price__button" type=button ng-click=searchByPrice($event)>Go\n</button>'),a.put("vn-faceted-search/vn-sort-search.html",'<div class=dropdown>\n <button class="btn btn-default dropdown-toggle" type=button id=dropdownMenu1 data-toggle=dropdown>\n Sort by\n <span class=caret></span>\n </button>\n <ul class=dropdown-menu role=menu aria-labelledby=dropdownMenu1>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'relevance\')">Relevance</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'highest price\')">Highest price</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'lowest price\')">Lowest price</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'relevance\')">Popularity</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'newest\')">Newest</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'oldest\')">Oldest</a>\n </li>\n </ul>\n</div>'),a.put("vn-place-order-btn/vn-place-order-btn.html",'<div class=th-checkout__place-order-fixed data-ng-class="{ \'th-checkout__place-order-fixed--active\': placeOrderFixed}" data-ng-if=checkout.steps[2].active>\n <button class="btn btn-primary btn-block btn-lg th-checkout__place-order-fixed__btn" data-ng-click=placeOrder()>\n Place Order\n </button>\n</div>'),a.put("vn-product-option/checkboxes.html",'<label data-vn-block=vn-labeled-checkbox data-vn-modifiers={{option.class}} data-ng-repeat="item in option.items" data-ng-init=item>\n\n <div data-vn-element=checkbox>\n <input type=checkbox data-ng-click="onCheckboxClicked(option, item)">\n </div>\n\n <div data-vn-element=content data-ng-include=" \'vn-product-option/content.html\' "></div>\n</label>'),a.put("vn-product-option/content.html",'<div data-vn-element=color-image>\n <div data-vn-element=color data-ng-show=item.color style="background-color: {{item.color}}"></div>\n <img data-vn-element=image data-ng-show=item.swatchImage data-ng-src={{item.swatchImage}} alt={{item.text}}>\n</div>\n<div data-vn-element=text data-ng-bind=item.text data-ng-controller=OptionsCtrl data-ng-class="{ \'-disabled\': !isItemAvailable }"></div>\n<div data-vn-element=border data-ng-class="{ checked: option.selected === item.key }"></div>'),a.put("vn-product-option/index.html",'<div data-vn-block=vn-product-option>\n\n <label data-vn-element=label data-ng-if=option.label data-ng-bind=option.label></label>\n\n <div data-ng-repeat="inputType in option.inputTypes">\n <div data-vn-element=group data-vn-modifiers="{{inputType.type}} {{option.class}}" data-ng-include=" \'vn-product-option/\' + inputType.type + \'.html\' ">\n </div>\n </div>\n\n <div data-ng-if=option.selected>\n <div data-ng-repeat="option in option.options" data-ng-include=" \'vn-product-option/index.html\' ">\n </div>\n </div>\n\n</div>'),a.put("vn-product-option/radios.html",'<label data-vn-block=vn-labeled-radio data-vn-modifiers={{option.class}} data-ng-repeat="item in option.items" data-ng-init=item data-ng-controller=OptionsCtrl data-ng-class="{ \'-disabled\': !isItemAvailable }">\n\n <div data-vn-element=radio>\n\n <input type=radio name={{option.id}} data-ng-value=item.key data-ng-model=option.selected data-ng-click="onOptionChanged(option, item)">\n </div>\n\n <div data-vn-element=content data-ng-include=" \'vn-product-option/content.html\' "></div>\n\n</label>'),a.put("vn-product-option/select.html",'<div class=dropdown data-vn-element=select data-vn-modifiers="{{ option.class }}" data-ng-attr-size="{{ inputType.size }}">\n\n <button class="btn btn-default dropdown-toggle" type=button id="dropdownMenuOption{{ option.id }}" data-toggle=dropdown>\n {{ currentSelectionText }}\n <span class=caret></span>\n </button>\n <ul class=dropdown-menu role=menu aria-labelledby="dropdownMenuOption{{ option.id }}">\n <li role=presentation data-ng-repeat="item in option.items">\n <a role=menuitem tabindex=-1 href data-ng-click="onOptionChanged(option, item)" data-ng-controller=OptionsCtrl data-ng-class="{ \'-disabled\': !isItemAvailable }">\n {{ item.text }}\n </a>\n </li>\n </ul>\n</div>'),a.put("vn-product-option/text.html",'<div data-ng-if="inputType.rows > 1">\n <textarea data-vn-element=text data-vn-modifiers={{option.class}} data-ng-focus="saveTo=saveTo||{}" data-ng-model=saveTo[option.id] data-ng-maxlength={{inputType.maxlength}} placeholder={{inputType.placeholder}} rows={{inputType.rows}} cols={{inputType.cols}}></textarea>\n</div>\n\n<div data-ng-if="!inputType.rows || inputType.rows < 2">\n <input data-vn-element=text data-vn-modifiers={{option.class}} data-ng-focus="saveTo=saveTo||{}" data-ng-model=saveTo[option.id] data-ng-maxlength={{inputType.maxlength}} placeholder={{inputType.placeholder}}>\n</div>'),a.put("vn-product/vn-product-image.html",'<img data-ng-src="{{ getImagePath(product.imageCollections) }}" class=img-responsive alt="{{ product.name }}">'),a.put("address/address-display.tpl.html",'<div class=row data-ng-show="address.address1 !== \'\'" data-ng-click=onClick()>\n <div class=col-xs-10>\n <div class=th-address__display__addressPart>{{ address.firstName }} {{ address.lastName }}</div>\n <div class=th-address__display__addressPart>{{ address.address1 }}</div>\n <div data-ng-if="address.address2 != \'\'" class=th-address__display__addressPart>{{ address.address2 }}</div>\n <div class=th-address__display__addressPart data-ng-show=isLocationUS>{{ address.city }}, {{ address.state }} {{ address.postalCode }}</div>\n <div class=th-address__display__addressPart data-ng-show=isLocationUS>{{ address.phoneNumber | vnUsPhone }}</div>\n\n <div class=th-address__display__addressPart data-ng-show=!isLocationUS>{{ address.city }}</div>\n <div class=th-address__display__addressPart data-ng-show=!isLocationUS>{{ address.state }} {{ address.postalCode }}</div>\n <div class=th-address__display__addressPart data-ng-show=!isLocationUS>{{ address.country }}</div>\n <div class=th-address__display__addressPart data-ng-show=!isLocationUS>{{ address.phoneNumber }}</div>\n\n <div class=th-address__display__addressPart data-ng-if=shippingValue data-ng-show=address.residential>Type: Residential</div>\n <div class=th-address__display__addressPart data-ng-if=shippingValue data-ng-show=!address.residential>Type: Business</div>\n </div>\n <div class=col-xs-2 ng-show=showEditButton>\n <i class="fa fa-angle-right fa-2x pull-right"></i>\n </div>\n</div>'),a.put("address/vn-address-display-actions.tpl.html",'<div class="container-fluid no-padding">\n <div data-ng-if="shipping==\'true\'" data-vn-address-display data-address=address data-shipping=true></div>\n <div data-ng-if="shipping!=\'true\'" data-vn-address-display data-address=address></div>\n <div class="row th-address__display__actions">\n <div class=col-xs-7>\n <span data-ng-if=!address.preferred>\n <button class="btn btn-default" data-ng-click=onMakePreferredClicked()>Make Preferred\n </button>\n </span>\n <span class=th-address__display__actions__preferred data-ng-if=address.preferred>\n <i class="fa fa-check"></i> Preferred</span>\n </div>\n <div class="col-xs-4 col-xs-offset-1 col-sm-3 col-sm-offset-2 col-md-2 col-md-offset-3">\n <div class=row>\n <div class=col-xs-6>\n <a href data-ng-click=onEditClicked({address:address})><i class="fa fa-pencil"></i></a>\n </div>\n <div class=col-xs-6>\n <a href data-ng-click=onDeleteClicked({address:address})><i class="fa fa-trash-o"></i></a>\n </div>\n </div>\n </div>\n </div>\n</div>'),a.put("address/vn-address-picker.tpl.html",'<div class="th-checkout__step__drawer -left" data-ng-class="{\'-open\': openAddressPicker}">\n\n <div class=th-checkout__step__drawer__body data-ng-show=openAddressPicker data-ng-switch=state data-ng-cloak>\n <a href class=th-checkout__step__drawer__close data-ng-click=selectAddress()>\n <i class="fa fa-close fa-2x"></i>\n </a>\n\n <div class=th-checkout__step__drawer__title>\n <span data-ng-switch-when=ADDRESSLIST>{{:: selectAddressTitle}}</span>\n <span data-ng-switch-when=NEWADDRESS>{{:: newAddressTitle}}</span>\n </div>\n\n <div class=th-address__choose data-ng-switch-when=ADDRESSLIST>\n <div class=th-address__choose__options ng-cloak>\n <label class=th-address__choose__options__option data-ng-repeat="address in addressList" for="address{{ $index }}">\n <div class=styled-optionbox-option>\n <input type=radio id="address{{ $index }}" name=billingAddress data-ng-value=true data-ng-model=address.preferred data-ng-change="setPreferredAddress({{ $index }})">\n\n <div>\n <vn-address-display data-ng-if="shipping==\'true\'" data-address=address data-show-edit-button=allowEdit data-shipping=true></vn-address-display>\n <vn-address-display data-ng-if="shipping!=\'true\'" data-address=address data-show-edit-button=allowEdit></vn-address-display>\n </div>\n </div>\n </label>\n\n <a class=th-address__choose__options__new-option ng-repeat-end data-ng-click=createNewAddress()>\n Enter a different address\n </a>\n </div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn__continue" data-ng-click=selectAddress()>\n Continue <i class="fa fa-angle-right"></i>\n </button>\n </div>\n\n\n <div data-ng-switch-when=NEWADDRESS>\n <div class="th-address__same-as styled-checkbox-option" data-ng-if=showCopyAddress>\n <input type=checkbox id=chkAddressCopy name=chkAddressCopy data-ng-model=addressCopied data-ng-change="copyAddressHandler()">\n <label for=chkAddressCopy>{{:: copyAddressText}}</label>\n </div>\n <div class=th-address__enterAddress>\n <div data-ng-if="shipping==\'true\'" data-vn-address-editor="" address=newAddress countries=countries data-on-dirty=setCopyAddressFalse() data-on-save="saveAddress({newAddress: newAddress})" data-shipping=true></div>\n <div data-ng-if="shipping!=\'true\'" data-vn-address-editor="" address=newAddress countries=countries data-on-dirty=setCopyAddressFalse() data-on-save="saveAddress({newAddress: newAddress})"></div>\n </div>\n </div>\n\n\n <div class=th__back-button>\n <a href=javascript:void(0); data-ng-click=selectAddress()>\n <i class="fa fa-arrow-left"> {{:: backToText}}</i>\n </a>\n </div>\n </div>\n</div>'),a.put("app-messages/vnAppMessage.tpl.html",'<alert class="vn-app-message container-fluid" ng-repeat="alert in appMessagesCtrl.alerts track by alert.id" type="{{ alert.type }}">\n <div class=row>\n <div class=col-xs-8>\n <span class=vn-app-message__text>{{alert.text}}</span>\n </div>\n <div class="col-xs-4 align-right">\n <button class="btn vn-app-message__button th-alert__button" data-ng-click=appMessagesCtrl.closeAlert(alert.id)>Ok</button>\n </div>\n </div>\n</alert>'),a.put("billing-address/billing-address-views.html",'<div class=th-address data-ng-controller="BillingAddressViewsCtrl as vm" data-ng-switch=vm.state data-ng-init=vm.init()>\n <div class="th-checkout__section-heading th-address__heading">\n Billing Address\n </div>\n\n <div class=th-address__display data-ng-switch-when=VIEWADDRESS>\n <vn-address-display data-address=vm.billingAddress data-on-click=vm.editBillingAddress() data-show-edit-button=vm.billingAddress></vn-address-display>\n </div>\n\n <div class="th-address__same-as styled-checkbox-option" data-ng-switch-when=EDITADDRESS ng-cloak>\n <input type=checkbox id=chkBillingAddress name=chkBillingAddress data-ng-model=vm.useShippingAddress data-ng-change="vm.copyShippingAddress()">\n <label for=chkBillingAddress>Billing address same as shipping</label>\n </div>\n <div class=th-address__enterAddress data-ng-switch-when=EDITADDRESS ng-cloak>\n <div data-vn-address-editor="" address=vm.billingAddress countries=vm.countries data-on-dirty=vm.setShippingAddressFalse() data-on-save=vm.saveBillingAddress() data-show-save-button=false></div>\n </div>\n\n <div vn-address-picker data-ng-switch-when=PICKADDRESS data-address-list=vm.user.billingAddresses data-new-address-title="Add Billing Address" data-select-address-title="Choose Billing Address" data-back-to-text="back to Pay With" data-show-copy-address=vm.showCopyAddress data-countries=vm.countries data-on-address-selected=vm.onAddressSelected() data-save-address=vm.onAddressAdded(newAddress) data-address-copied=vm.useShippingAddress data-copy-address-handler=vm.copyShippingAddress() data-copy-address-text="Billing address same as shipping"></div>\n\n</div>'),a.put("busy-animation/vnBusyAnimation.tpl.html",'<ng-transclude></ng-transclude>\n<div class="{{ class }}" title=1 data-ng-if=show>\n <svg version=1.1 id=loader-1 xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink x=0px y=0px ng-attr-width="{{ size }}" ng-attr-height="{{ size }}" viewbox="0 0 50 50" style="enable-background:new 0 0 50 50" xml:space=preserve>\n\n <path fill=#000 d=M25.251,6.461c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615V6.461z>\n <animatetransform attributetype=xml attributename=transform type=rotate from="0 25 25" to="360 25 25" dur=.6s repeatcount="indefinite">\n </path>\n </svg>\n</div>'),a.put("checkout/checkout.html",'<div class=th-checkout>\n <div class=row>\n <div class="th-checkout__loading th-checkout__loading--ship-to" vn-busy-animation vn-busy-animation-size=80px vn-busy-animation-show="{{ stepOneLoading }}" vn-busy-animation-class=th-checkout__loading-inner data-ng-show=checkout.steps[0].active></div>\n\n <div class="th-checkout__loading th-checkout__loading--pay-with" vn-busy-animation vn-busy-animation-size=80px vn-busy-animation-show="{{ stepTwoLoading }}" vn-busy-animation-class=th-checkout__loading-inner data-ng-show=checkout.steps[1].active></div>\n\n <div class="th-checkout__loading th-checkout__loading--review" vn-busy-animation vn-busy-animation-size=80px vn-busy-animation-show="{{ stepThreeLoading }}" vn-busy-animation-class=th-checkout__loading-inner data-ng-show=checkout.steps[2].active></div>\n\n <div class="col-md-4 th-checkout__step th-checkout__step__ship-to" data-ng-show="checkout.steps[0].active || isInDesktopMode" data-ng-class="{ \'-active\' : checkout.steps[0].active, \'-no-scroll\' : checkout.steps[0].hasOpenDrawer }" data-ng-switch=isEditable(1) data-vn-scroll-to-top=checkout.steps[0].hasOpenDrawer data-ng-init="hideShippingMethods = true">\n\n <div class=th-checkout__step__overlay data-ng-class="{ \'-complete\' : checkout.steps[1].active || checkout.steps[2].active}" data-ng-click=setStep(1)></div>\n\n <div class=th-checkout__step__title>\n <div class=th-checkout__step__title__stepNumber data-ng-if=checkout.steps[0].active><span>1</span></div>\n <i class="fa fa-check-circle-o fa-2x" data-ng-if="checkout.steps[1].active || checkout.steps[2].active"></i>\n <div class=th-checkout__step__title__stepName>Ship To</div>\n </div>\n\n <div ng-include=" \'ship-to/ship-to-views.html\' "></div>\n\n <div data-ng-hide=hideShippingMethods ng-include=" \'ship-method/ship-method.html\' "></div>\n\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn-continue" data-ng-hide=hideShippingMethods data-ng-if=checkout.steps[0].active data-ng-click=nextShippingStep() data-ng-bind-html=buildShippingStepLabel()>\n </button>\n </div>\n <div class="col-md-4 th-checkout__step th-checkout__step__pay-with" data-ng-show="checkout.steps[1].active || isInDesktopMode" data-ng-class="{ \'-active\' : checkout.steps[1].active, \'-no-scroll\' : checkout.steps[1].hasOpenDrawer }" data-ng-switch=isEditable(2) data-vn-scroll-to-top=checkout.steps[1].hasOpenDrawer>\n\n <div class=th-checkout__step__overlay data-ng-class="{ \'-complete\' : checkout.steps[2].active}" data-ng-click="checkout.steps[0].active || setStep(2)"></div>\n\n <div class=th-checkout__step__title>\n <div class=th-checkout__step__title__stepNumber data-ng-if="checkout.steps[0].active || checkout.steps[1].active"><span>2</span></div>\n <i class="fa fa-check-circle-o fa-2x" data-ng-if=checkout.steps[2].active></i>\n <div class=th-checkout__step__title__stepName>Pay With</div>\n </div>\n\n <div ng-include=" \'pay-with/credit-card-views.html\' "></div>\n\n <div ng-include=" \'billing-address/billing-address-views.html\' "></div>\n\n <div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn-continue" data-ng-if=checkout.steps[1].active data-ng-click=nextBillingStep()>\n Continue <i class="fa fa-angle-right"></i>\n </button>\n\n <div class=th__back-button data-ng-if=checkout.steps[1].active>\n <a href=javascript:void(0); data-ng-click=prevStep()>\n <i class="fa fa-arrow-left"> back to Ship To</i>\n </a>\n </div>\n\n <br style="clear: both">\n </div>\n\n </div>\n\n <div data-vn-place-order-btn></div>\n\n <div class="col-md-4 th-checkout__step th-checkout__step__review" data-ng-show="checkout.steps[2].active || isInDesktopMode" data-ng-class="{ \'-active\' : checkout.steps[2].active, \'-no-scroll\' : checkout.steps[2].hasOpenDrawer }" data-vn-scroll-to-top=checkout.steps[2].hasOpenDrawer>\n\n <div class=th-checkout__step__overlay data-ng-click="checkout.steps[0].active || checkout.steps[1].active || setStep(3)"></div>\n\n <div class=th-checkout__step__title>\n <div class=th-checkout__step__title__stepNumber><span>3</span></div>\n <div class=th-checkout__step__title__stepName>Review</div>\n </div>\n <div class=th-checkout__thanks__title>\n Total: {{ checkout.cart.totals.grandTotal | currency }}\n </div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn-continue" data-ng-if=checkout.steps[2].active data-ng-click=placeOrder()>\n {{ placeOrderBtnText }}\n </button>\n <div vn-review=checkout.cart></div>\n <div ng-include=" \'review/review-details-2.html\' " ng-if=checkout.steps[2].active></div>\n\n <button class="hidden-md hidden-lg hidden-xl btn btn-primary btn-block btn-lg th-checkout__step__btn-continue" data-ng-if=checkout.steps[2].active data-ng-click=placeOrder()>\n {{ placeOrderBtnText }}\n </button>\n\n <div class=th__back-button>\n <a href=javascript:void(0); data-ng-if=checkout.steps[2].active data-ng-click=prevStep()>\n <i class="fa fa-arrow-left"> back to Pay With</i>\n </a>\n </div>\n\n </div>\n </div>\n</div>'), -a.put("checkout/vn-address-editor.html",'<div class="th-address container-fluid">\n\n <div>\n\n <div class=th-address__location>\n <div class=btn-group>\n <button type=button data-ng-click=setCountryToUS() class="btn btn-default" data-ng-class="{ \'btn-primary\' : isLocationUS }">United States\n </button>\n <button type=button data-ng-click=setCountryToOther() class="btn btn-default" data-ng-class="{ \'btn-primary\': !isLocationUS }">International\n </button>\n </div>\n </div>\n\n <div class=th-address__form-wrapper>\n <form id=frmAddress name=frmAddress novalidate data-ng-submit=updateAddress(address)>\n <div class=row>\n <div class=col-xs-6>\n <div class=form-group>\n <input name=inputUSFirstName class="form-control input-lg immediate-help" id=first-name data-vn-placeholder="First Name" data-ng-model=address.firstName data-vn-first-name-validate required>\n\n <data-vn-popover-first-name>\n\n </div>\n </div>\n <div class=col-xs-6>\n <div class=form-group>\n <input name=inputUSLastName class="form-control input-lg -right immediate-help" id=last-name data-vn-placeholder="Last Name" data-ng-model=address.lastName data-vn-last-name-validate required>\n\n <data-vn-popover-last-name>\n\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputUSAddress1Line class="form-control input-lg immediate-help" id=address-1 data-vn-placeholder="Address Line 1" data-ng-model=address.address1 data-vn-street-validate required>\n\n <data-vn-popover-address>\n\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputUSAddressLine2 class="form-control input-lg" id=address-2 data-vn-placeholder="Address Line 2" data-ng-model="address.address2">\n </div>\n </div>\n </div>\n <div class=row data-ng-show=isLocationUS data-ng-hide=check.useShippingAddress>\n <div class=col-xs-5>\n <div class=form-group>\n <input name=inputUSCity class="form-control input-lg immediate-help" id=city data-vn-placeholder=City data-ng-model=address.city data-vn-city-validate ng-required="isLocationUS">\n\n <data-vn-popover-city>\n\n </div>\n </div>\n <div class=col-xs-3>\n <div class=form-group>\n <div class="th-address__state th-dropdown">\n <vn-dropdown name=inputUSState availableoptions=address.selectedCountry.states placeholder=State optionselect=onStateChanged model=address.selectedState selected-field=code>\n <vn-dropdown>\n </vn-dropdown></vn-dropdown></div>\n </div>\n </div>\n <div class=col-xs-4>\n <div class=form-group>\n <input name=inputUSZip class="form-control input-lg immediate-help" id=zip data-vn-placeholder=Zip data-ng-model=address.postalCode data-vn-zip-validate ng-required="isLocationUS">\n\n <data-vn-popover-zip>\n\n </div>\n </div>\n </div>\n <div class=row data-ng-show=!isLocationUS>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputWorldwideCity class="form-control input-lg immediate-help" id=international-city data-vn-placeholder=City data-ng-model=address.city data-vn-city-validate required>\n\n <data-vn-popover-city></data-vn-popover-city>\n </div>\n </div>\n </div>\n <div class=row data-ng-show=!isLocationUS>\n <div class=col-xs-6>\n <div class=form-group>\n <input name=inputWorldwideRegion class="form-control input-lg immediate-help" id=region data-vn-placeholder=Region data-ng-model=address.state data-vn-region-validate ng-required="!isLocationUS">\n <data-vn-popover-region></data-vn-popover-region>\n </div>\n </div>\n <div class=col-xs-6>\n <div class=form-group>\n <input name=inputWorldwidePostalCode class="form-control input-lg immediate-help" id=postal-code maxlength=15 data-vn-placeholder="Postal code" data-ng-model=address.postalCode data-vn-postal-code-validate ng-required="!isLocationUS">\n <data-vn-popover-postal-code>\n </data-vn-popover-postal-code></div>\n </div>\n </div>\n <div class=row data-ng-show="!isLocationUS ">\n <div class=col-xs-12>\n <div class=form-group>\n <div class="th-address__country th-dropdown">\n\n <vn-dropdown name=inputWorldwideCountry data-availableoptions=countries placeholder=Country optionselect=onCountryChanged model=address.selectedCountry>\n <vn-dropdown>\n\n </vn-dropdown></vn-dropdown></div>\n </div>\n </div>\n </div>\n\n <div class=row data-ng-show=isLocationUS>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputUSPhoneNumber class="form-control input-lg immediate-help" id=phone-number data-vn-placeholder="Phone Number" data-ng-model=address.phoneNumber data-vn-format-us-phone-number data-vn-us-phone-validate required>\n\n <data-vn-popover-us-phone></data-vn-popover-us-phone>\n </div>\n </div>\n </div>\n\n <div class=row data-ng-show=!isLocationUS>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputIntlPhoneNumber class="form-control input-lg immediate-help" maxlength=35 data-vn-placeholder="Phone Number" data-ng-model=address.phoneNumber data-vn-required-field-validate required>\n\n <data-vn-popover-required location=top field="Phone Number"></data-vn-popover-required>\n </div>\n </div>\n </div>\n <div class=row data-ng-if="shipping==\'true\'">\n <div class=col-xs-12>\n <div class=form-group>\n <input type=checkbox name=type class=immediate-help id=residential-1 data-ng-model=address.residential data-ng-true-value=false data-ng-false-value="true">\n <label for=residential-1 role=button tabindex=0>This is a business address</label>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n <div>\n <div class=row data-ng-if=showCancelButtonValue>\n <div class=col-xs-6>\n <button class="btn btn-default btn-block btn-lg" data-ng-click=onCancel()>\n {{cancelText}}\n </button>\n </div>\n <div class=col-xs-6>\n <button class="btn btn-primary btn-block btn-lg" data-ng-click=saveAddress() data-ng-enabled=frmAddress.$valid data-ng-if=showSaveButtonValue>\n {{saveText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n <div class=row data-ng-if=!showCancelButtonValue>\n <div class=col-xs-12>\n <button class="btn btn-primary btn-block btn-lg" data-ng-click=saveAddress() data-ng-enabled=frmAddress.$valid data-ng-if=showSaveButtonValue>\n {{saveText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n </div>\n\n</div>'),a.put("dropdown/vn-dropdown.tpl.html",'<div class="vn-dropdown th-dropdown" dropdown>\n <button id=dropdownButton name="{{name + \'Label\'}}" class="vn-dropdown__trigger form-control btn btn-default btn-lg dropdown-toggle form-control" data-vn-placeholder={{placeholder}} data-ng-model=selectedOption.selectedDisplayValue dropdown-toggle data-toggle=dropdown value={{selectedOption.selectedDisplayValue}}>{{selectedOption.selectedDisplayValue}}<span class=caret></span>\n </button>\n <ul class="vn-dropdown__menu dropdown-menu" role=menu>\n <li role=presentation data-ng-repeat="option in options">\n <a role=menuitem data-ng-click=changeOption($index) href>{{option.displayValue}}</a>\n </li>\n </ul>\n <select name={{name}} class=vn-dropdown__select ng-model=selectedOption ng-options="option.selectedDisplayValue for option in options">\n </select>\n</div>'),a.put("easy-zoom/vnEasyZoom.tpl.html","<div class=easyzoom data-ng-class=\"{ 'easyzoom--adjacent': ezAdjacent, 'easyzoom--overlay': ezOverlay }\">\n <a data-ng-href={{ezZoomSrc}}>\n <img class=img-responsive data-ng-src={{ngSrc}} alt={{alt}}>\n <div class=th-product-view__zoom></div>\n </a>\n</div>"),a.put("login/forgot-password.html",'<div class=th-checkout__login>\n <div class=th-checkout__step__title>\n <div class=th-checkout__step__title__stepName>Forgot Your Password?</div>\n </div>\n <div class=container-fluid>\n <div class=row>\n <div class="col-xs-12 col-xs-offset-0 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4">\n <div class=th-checkout__login__form>\n <form id=frmForgotPassword name=frmForgotPassword novalidate data-ng-submit=forgotPassword()>\n <div class=row>\n <div class=col-xs-12>\n <div class=form-group>\n <input id=inputLoginEmail name=inputLoginEmail class="form-control input-lg immediate-help" data-vn-placeholder="E-mail address" data-ng-model=email data-vn-email-validate required>\n\n <div class="input-help bottom" ng-if=frmLogin.inputLoginEmail.$touched>\n <div class=arrow></div>\n <h4>E-mail must:</h4>\n <ul>\n <li ng-class=emailEmpty>Not be <strong>empty</strong></li>\n <li ng-class=validEmail>Be a <strong>valid</strong> address</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </form>\n <button class="btn btn-primary btn-block btn-lg th-checkout__login__continue" data-ng-disabled=disabledButton data-ng-click=forgotPassword()>\n Reset Password <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>'),a.put("login/login.html",'<div data-vn-app-message=""></div>\n<div data-vn-login data-allow-anonymous=true data-redirect-to=checkout data-button-text=Continue></div>'),a.put("login/my-account-login.html",'<div data-vn-login data-allow-anonymous=false data-redirect-to=my-account data-button-text="Sign In"></div>'),a.put("login/vn-login-link.html","<div>\n <span data-ng-if=!loggedIn>\n <a data-ui-sref=my-account-login data-translate=header.signIn>Sign In</a>\n </span>\n <span data-ng-if=loggedIn>\n <a data-ui-sref=logout data-translate=header.signOut>Sign Out</a>\n </span>\n</div>"),a.put("login/vn-login.html",'<div class=th-checkout__login>\n <div class=th-checkout__step__title>\n <div class=th-checkout__step__title__stepName>Enter your e-mail to get started</div>\n </div>\n <div class=container-fluid>\n <div class=row ng-if=loginError>\n <div class="col-xs-12 col-xs-offset-0 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4">\n <div class=th-checkout__login__error data-ng-click=clearError()>\n Login Failed\n </div>\n </div>\n </div>\n <div class=row>\n <div class="col-xs-12 col-xs-offset-0 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4">\n <div class=th-checkout__login__form>\n <form id=frmLogin name=frmLogin novalidate data-ng-submit=updateUser()>\n <div class=row>\n <div class=col-xs-12>\n <div class=form-group>\n <input id=inputLoginEmail name=inputLoginEmail class="form-control input-lg immediate-help" data-vn-placeholder="E-mail address" data-ng-model=user.email data-vn-email-validate required>\n\n <div class="input-help bottom" ng-if=frmLogin.inputLoginEmail.$touched>\n <div class=arrow></div>\n <h4>E-mail must:</h4>\n <ul>\n <li ng-class=emailEmpty>Not be <strong>empty</strong></li>\n <li ng-class=validEmail>Be a <strong>valid</strong> address</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n\n <div class=row data-ng-if="!user.anonymous || !allowAnonymous">\n <div class=col-xs-12>\n <div class=form-group>\n <input type=password id=inputLoginPassword name=inputLoginPassword class="form-control input-lg immediate-help" data-vn-placeholder=Password data-ng-model=user.password data-ng-enter=updateUser() data-vn-password-validate required>\n </div>\n </div>\n </div>\n </form>\n\n <div class=th-checkout__login__user-type ng-show=allowAnonymous>\n <div class=btn-group>\n <button type=button data-ng-click="user.anonymous = true" class="btn btn-default" data-ng-class="{ \'btn-primary\' : user.anonymous }">I\'m a new customer\n </button>\n <button type=button data-ng-click="user.anonymous = false" class="btn btn-default" data-ng-class="{ \'btn-primary\': !user.anonymous }">I\'ve ordered before\n </button>\n </div>\n </div>\n\n <button class="btn btn-primary btn-block btn-lg th-checkout__login__continue" data-ng-disabled=disabledButton data-ng-click=updateUser()>\n {{buttonText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n <a href ui-sref=forgot-password>Forgot your password?</a>\n </div>\n </div>\n </div>\n</div>'),a.put("modal/vnAddressDeleteConf.tpl.html",'<div class="th-error-wrap clearfix th-modal">\n <a href class=th-modal__close ng-click=$dismiss()>\n <i class="fa fa-times"></i>\n </a>\n <div class=th-error-details>\n <div class="th-error-details__header modal-header">\n <div class=modal-body>\n <div class=th-modal__message>\n {{ :: message }}\n </div>\n\n <div class="th-modal__body row">\n <div class=col-xs-12>\n <div class=th-message-details__section2 vn-address-display="" address=::addressToDelete></div>\n </div>\n </div>\n </div>\n <div class="modal-footer container-fluid">\n <div class=row>\n <div class="col-xs-12 col-sm-6">\n <button class="btn btn-default btn-lg th-modal__button th-modal__button--secondary" ng-click=$dismiss()>Cancel</button>\n </div>\n <div class="col-xs-12 col-sm-6">\n <button class="btn btn-primary btn-lg th-modal__button th-modal__button--primary" ng-click=$close()>{{::buttonText}}</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>'),a.put("modal/vnErrorModal.tpl.html",'<div class=th-error-details>\n <div class="th-error-details__header modal-header">\n <h1>Sorry, something went wrong with the page...</h1>\n\n <div class=modal-body>\n <p class=th-error-details__section1>... but it might just be a small glitch. Try refreshing the page\n to see if that fixes it.</p>\n\n <p class=th-error-details__section2>\n If the problem persists, please try again later.\n </p>\n </div>\n <div class=modal-footer>\n <button class="btn btn-warning" ng-click=$close()>Close</button>\n </div>\n </div>\n</div>'),a.put("modal/vnMessageModal.tpl.html",'<div class="th-error-wrap clearfix">\n <div class=th-error-details>\n <div class="th-error-details__header modal-header">\n <h1>This is a generic app message template</h1>\n <div class=modal-body>\n <p class=th-message-details__section1>It should be over ridden in the calling application</p>\n\n </div>\n <div class=modal-footer>\n <button class="btn btn-warning" ng-click=$dismiss()>Ok</button>\n <button class="btn btn-warning" ng-click=$close()>Cancel</button>\n </div>\n </div>\n </div>\n</div>'),a.put("modal/vnPaymentProfileDeleteConf.tpl.html",'<div class="th-error-wrap clearfix th-modal">\n <a href class=th-modal__close ng-click=$dismiss()>\n <i class="fa fa-times"></i>\n </a>\n <div class=th-error-details>\n <div class="th-error-details__header modal-header">\n <div class=modal-body>\n <div class=th-modal__message>\n {{ :: message }}\n </div>\n\n <div class="th-modal__body row">\n <div class=col-xs-12>\n <span class=th-credit-card__img data-ng-class=::paymentProfileToDelete.card.ccCssClass></span>\n <span>{{ ::paymentProfileToDelete.card.cardNumber.slice(-4) }}</span>\n <span>{{ ::paymentProfileToDelete.card.expMonth }}/{{ ::paymentProfileToDelete.card.expYear }}</span>\n </div>\n </div>\n\n </div>\n <div class="modal-footer container-fluid">\n <div class=row>\n <div class="col-xs-12 col-sm-6">\n <button class="btn btn-default btn-lg th-modal__button th-modal__button--secondary" ng-click=$dismiss()>Cancel</button>\n </div>\n <div class="col-xs-12 col-sm-6">\n <button class="btn btn-primary btn-lg th-modal__button th-modal__button--primary" ng-click=$close()>{{::buttonText}}</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>'),a.put("my-account/billing-addresses.html",'<div class="th-my-account container" data-ng-cloak="">\n\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n {{vm.pageTitle}}\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-7 col-md-7">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <div data-ng-show="!vm.addressToEdit && !vm.addressToAdd" class="th-address__choose animate-show">\n <div class=th-address__choose__options>\n <a href class=th-address__choose__options__new-option data-ng-click=vm.addAddress() ng-repeat-end>\n <i class="fa fa-plus"></i>  Add a Billing Address</a>\n \n <div data-ng-repeat="billingAddress in vm.billingAddresses" class=th-address__choose__options__option>\n <div class=styled-optionbox-option>\n <div vn-address-display-actions="" data-address=billingAddress data-on-make-preferred-clicked=vm.makeAddressPreferred($index) data-on-delete-clicked=vm.deleteAddress(address) data-on-edit-clicked="vm.editAddress(address, $index)"></div>\n </div>\n </div>\n </div>\n </div>\n <div data-ng-show=vm.addressToEdit class="th-address__enterAddress animate-show">\n <div data-vn-address-editor="" data-ng-if=vm.addressToEdit data-countries=vm.countries data-address=vm.addressToEdit data-title="Edit Shipping Address" data-on-save=vm.saveEditedAddress() data-on-cancel=vm.cancelEditAddress() data-show-save-button=true data-save-text=save data-show-cancel-button=true>\n </div>\n </div>\n <div data-ng-show=vm.addressToAdd class="th-address__enterAddress animate-show">\n <div data-vn-address-editor="" data-ng-if=vm.addressToAdd data-countries=vm.countries data-address=vm.addressToAdd data-title="Edit Shipping Address" data-on-save=vm.saveNewAddress() data-on-cancel=vm.cancelAddAddress() data-show-save-button=true data-save-text=add data-show-cancel-button=true>\n </div>\n </div>\n\n </div>\n <div class="col-xs-12 col-sm-5 col-md-4 col-md-offset-1 th-my-account__group">\n <div class=th-my-account__title>More Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.shippingaddresses>Shipping Addresses</a></li>\n <li><a href="" data-ui-sref=my-account.paymentprofiles>Payment Profiles</a></li>\n </ul>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left">  Back to My Account</i>\n </a>\n </div>\n</div>'),a.put("my-account/change-email.html",'<div class="th-my-account container" data-ng-cloak="">\n <div class=th-my-account__title>\n Change Email\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-7 col-md-7">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <form id=frmChangeEmail name=frmChangeEmail novalidate data-ng-submit="">\n <div class=row>\n <div class=col-xs-12>\n <div>\n <input id=changeEmail name=changeEmail class="form-control input-lg immediate-help" data-vn-placeholder="Updated E-mail" data-ng-model=user.changeEmail data-ng-class="{\'ng-invalid\':frmChangeEmail.confirmChangeEmail.$error.match}" data-ng-change=checkValidity() data-vn-email-validate required>\n\n <div class="input-help bottom" ng-if=frmChangeEmail.changeEmail.$touched>\n <div class=arrow></div>\n <h4>E-mail must:</h4>\n <ul>\n <li ng-class=emailEmpty>Not be <strong>empty</strong></li>\n <li ng-class=validEmail>Be a <strong>valid</strong> address</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <input id=confirmChangeEmail name=confirmChangeEmail class="form-control input-lg immediate-help" data-vn-placeholder="Confirm Updated E-mail" data-ng-model=user.confirmChangeEmail data-match=frmChangeEmail.changeEmail data-ng-change=checkValidity() data-vn-email-validate required>\n\n <div class="input-help bottom" ng-if=frmChangeEmail.confirmChangeEmail.$touched>\n <div class=arrow></div>\n <h4>E-mail must:</h4>\n <ul>\n <li ng-class=emailEmpty>Not be <strong>empty</strong></li>\n <li ng-class=validEmail>Be a <strong>valid</strong> address</li>\n </ul>\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <input type=password id=inputPassword name=inputPassword class="form-control input-lg immediate-help" data-vn-placeholder=Password data-ng-model=user.password data-ng-change=checkValidity() data-vn-password-validate required>\n </div>\n </div>\n <div data-ng-show=emailDoesNotMatch class=text-danger>Emails do not match!</div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__login__continue" data-ng-disabled=changeButtonDisabled data-ng-click=changeEmail()>\n Change Password <i class="fa fa-angle-right"></i>\n </button>\n </form>\n </div>\n <div class="col-xs-12 col-sm-5 col-md-4 col-md-offset-1 th-my-account__group">\n <div class=th-my-account__title>More Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.change-password>Change Password</a></li>\n </ul>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left">  Back to My Account</i>\n </a>\n </div>\n\n</div>'),a.put("my-account/change-password.html",'<div class="th-my-account container" data-ng-cloak="">\n <div class=th-my-account__title>\n Change Password\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-7 col-md-7">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <form id=frmChangePassword name=frmChangePassword novalidate data-ng-submit="">\n <div class=row>\n <div class=col-xs-12>\n <input type=password id=inputPassword name=inputPassword class="form-control input-lg immediate-help" data-vn-placeholder="Current Password" data-ng-model=user.password data-ng-change=checkValidity() data-vn-password-validate required>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <input type=password id=inputNewPassword name=inputNewPassword class="form-control input-lg immediate-help" data-vn-placeholder="New Password" data-ng-model=user.newPassword data-ng-change=checkValidity() data-vn-password-validate required>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <input type=password id=inputConfirmPassword name=inputConfirmPassword class="form-control input-lg immediate-help" data-vn-placeholder="Confirm Password" data-ng-model=user.confirmPassword data-ng-change=checkValidity() data-vn-password-validate required>\n </div>\n </div>\n <div data-ng-show=passwordDoesNotMatch class=text-danger>Passwords do not match!</div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__login__continue" data-ng-disabled=changeButtonDisabled data-ng-click=changePassword()>\n Change Password <i class="fa fa-angle-right"></i>\n </button>\n </form>\n </div>\n <div class="col-xs-12 col-sm-5 col-md-4 col-md-offset-1 th-my-account__group">\n <div class=th-my-account__title>More Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.change-email>Change Email Address</a></li>\n </ul>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left">  Back to My Account</i>\n </a>\n </div>\n\n</div>'),a.put("my-account/my-account.html",'<div data-vn-app-message=""></div>\n<div ui-view>\n <div class="container th-my-account">\n <div class=row>\n <div class="col-xs-12 th-my-account__group th-my-account__group--header">\n <div class="th-my-account__title th-my-account__group--header__title">My Account</div>\n <div class=th-my-account__group--header__welcome>\n Hi, {{user.firstName}} (<a href ui-sref=logout>log out</a>)\n </div>\n </div>\n </div>\n\n <div class=row>\n <div class="col-xs-12 th-my-account__group th-my-account__group--orders">\n <div class=th-my-account__title>Orders</div>\n\n <div class=th-my-account__overlay data-ng-if=loading vn-busy-animation vn-busy-animation-show="{{ loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n <div data-ng-if="orders.length == 0">\n <p class=text-muted>\n You haven\'t placed an order with us yet.\n </p>\n </div>\n\n <div data-ng-if="orders.length > 0">\n <div data-vn-order-table="" orders=orders class=hidden-xs></div>\n <div data-vn-order-list-view="" orders=orders class="hidden-sm hidden-md hidden-lg hidden-xl"></div>\n <div class=th-my-account__group__links>\n <a href data-ui-sref=my-account.orders.list>View all Orders</a>\n </div>\n </div>\n </div>\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-6 th-my-account__group th-my-account__group--addresses">\n <div class=th-my-account__title>Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.shippingaddresses>Shipping Addresses</a></li>\n <li><a href="" data-ui-sref=my-account.paymentprofiles>Payment Profiles</a></li>\n <li><a href="" data-ui-sref=my-account.billingaddresses>Billing Addresses</a></li>\n </ul>\n </div>\n <div class="col-xs-12 col-sm-6 th-my-account__group th-my-account__group--email">\n <div class=th-my-account__title>Email & Password</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.change-email>Change Email Address</a></li>\n <li><a href="" data-ui-sref=my-account.change-password>Change Password</a></li>\n </ul>\n </div>\n </div>\n </div>\n</div>'),a.put("my-account/orders.detail.html",'<div class="th-order-detail container">\n <div class=row>\n <div class=col-xs-12>\n\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class="th-order-detail__header row">\n <div class=col-xs-12>\n <div class="th-order-detail__title th-order-detail__header__title">Order Details</div>\n </div>\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-6">\n <div class=th-order-detail__header__order-date>Placed on <span>{{::vm.order.orderDate | date}}</span></div>\n <div class=th-order-detail__header__order-details>\n <span class=th-order-detail__header__order-details__order-number>Order <span>#{{::vm.order.orderId}}</span></span> | <span class=th-order-detail__header__order-details__order-status>{{::vm.order.orderStatus}}</span>\n </div>\n <div class="panel panel-default th-order-detail__items">\n <div class=panel-body>\n <div class="row th-order-detail__items__product" data-ng-repeat="product in vm.order.orderItems">\n <div class="col-xs-3 col-sm-3 col-md-3 th-order-detail__items__product__img">\n <a href ui-sref="product({slug: product.slug})"><img data-ng-src={{product.imageUrl}} width=100%></a>\n </div>\n <div class="col-xs-6 col-sm-6 col-md-6">\n <div class=th-order-detail__items__product__name>\n <a href ui-sref="product({slug: product.slug})">{{::product.productName}}</a>\n </div>\n <div class=th-order-detail__items__product__qty>Qty: {{::product.quantity}}</div>\n <div class=th-order-detail__items__product__options>{{::product.options}}</div>\n </div>\n <div class="col-xs-3 col-sm-3 col-md-3">\n <div class="th-order-detail__items__product__price align-right currency">{{::product.price.subtotal | currency}}</div>\n </div>\n </div>\n </div>\n <div class=panel-footer>\n <div class="row th-order-detail__items__discount" data-ng-repeat="discount in vm.order.discounts">\n <div class=col-xs-8>{{::discount.couponCode}}</div>\n <div class="align-right col-xs-4 currency">-{{::discount.value | currency}}</div>\n </div>\n <div class="row th-order-detail__items__shipping">\n <div class=col-xs-8>Shipping</div>\n <div class="align-right col-xs-4">{{::vm.order.totals.shipping | currency}}</div>\n </div>\n <div class="row th-order-detail__items__tax">\n <div class=col-xs-8>Tax</div>\n <div class="align-right col-xs-4">{{::vm.order.totals.taxTotal | currency}}</div>\n </div>\n <div class="row th-order-detail__items__total">\n <div class=col-xs-8>Total</div>\n <div class="align-right col-xs-4">{{::vm.order.totals.grandTotal | currency}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <div class="col-xs-12 col-sm-6">\n <div class=th-order-detail__paid-with>\n <div class=th-order-detail__title>Paid With</div>\n <div class="panel panel-default th-order-detail__paid-with">\n <div class=panel-body>\n'+" <div class=th-credit-card__img data-ng-class=\"{'th-credit-card__img--visa': vm.order.paymentProfile.paymentMethod == 'Visa', 'th-credit-card__img--amex': vm.order.paymentProfile.paymentMethod == 'American Express', 'th-credit-card__img--discover': vm.order.paymentProfile.paymentMethod == 'Discover', 'th-credit-card__img--mastercard': vm.order.paymentProfile.paymentMethod == 'MasterCard'}\"></div>\n <span class=th-order-detail__paid-with__card-number>{{::vm.order.paymentProfile.PCIaaS_MaskedCardRef}}</span>\n </div>\n </div>\n </div>\n <div class=th-order-detail__shipping>\n <div class=th-order-detail__title>Shipping</div>\n <div class=\"panel panel-default\">\n <div class=panel-body>\n <div class=th-order-detail__shipping__name>{{::vm.order.shippingAddress.firstName}} {{::vm.order.shippingAddress.lastName}}</div>\n <div class=th-order-detail__shipping__address-1>{{::vm.order.shippingAddress.address1}}</div>\n <div class=th-order-detail__shipping__address-2>{{::vm.order.shippingAddress.address2}}</div>\n <div>\n <span class=th-order-detail__shipping__city>{{::vm.order.shippingAddress.city}}</span>,\n <span class=th-order-detail__shipping__state>{{::vm.order.shippingAddress.state}}</span>\n <span class=th-order-detail__shipping__zip>{{::vm.order.shippingAddress.postalCode}}</span>\n </div>\n <div data-ng-if=\"vm.order.trackingDetails.length > 0\">\n <hr>\n <div class=th-order-detail__shipping__tracking-detail data-ng-repeat=\"tracking in vm.order.trackingDetails\">\n <div data-ng-if=\"tracking.shippingGateway != 'OTHER'\">\n <div data-ng-bind-html=tracking.shippingMethodName></div>\n <div>\n Tracking: <span data-ng-if=tracking.trackingUri><a data-ng-href={{::tracking.trackingUri}} target=_blank>{{::tracking.trackingNumber}}</a></span>\n <span data-ng-if=!tracking.trackingUri>{{::tracking.trackingNumber}}</span>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n <div class=th-order-detail__notes data-ng-if=\"vm.order.misc.comment != ''\">\n <div class=th-order-detail__title>Notes</div>\n <div class=\"panel panel-default\">\n <div class=panel-body>\n <div>{{::vm.order.misc.comment || \"No Notes\"}}</div>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n</div>"), -a.put("my-account/orders.html","<div ui-view></div>"),a.put("my-account/orders.list.html",'<div class="th-orders-list container" data-ng-cloak="" data-ng-init=vm.init()>\n <div class=row>\n <div class=col-xs-12>\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n Orders\n </div>\n\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <div data-ng-if="vm.orders.length == 0">\n <p class=text-muted>\n You haven\'t placed an order with us yet.\n </p>\n </div>\n\n <div data-ng-if="vm.orders.length > 0">\n <div class=th-orders-list__page-size>\n <select ng-options="item.text for item in vm.pageSizes" ng-model=vm.selectedPageSize ng-change=vm.getOrders()></select>\n </div>\n\n <div data-vn-order-list-view="" orders=vm.orders class="hidden-sm hidden-md hidden-lg hidden-xl"></div>\n <div data-vn-order-table="" orders=vm.orders class=hidden-xs></div>\n\n <div class="well well-sm th-orders-list__pagination">\n <span>{{vm.startIndex}} - {{vm.endIndex}} of {{vm.cursor.total}}</span>\n <div class=pull-right>\n <pagination total-items=vm.cursor.total ng-model=vm.currentPage class=pagination-sm previous-text=‹ next-text=› items-per-page=vm.selectedPageSize.value ng-change=vm.getOrders() max-size=vm.maxSize></pagination>\n </div>\n </div>\n </div>\n\n\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left">  Back to My Account</i>\n </a>\n </div>\n </div>\n </div>\n</div>'),a.put("my-account/payment-profiles.html",'<div class="th-my-account th-payment-profiles container" data-ng-cloak="">\n\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n {{vm.pageTitle}}\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-6 col-md-6">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n <div data-ng-show="!vm.paymentProfileToEdit && !vm.paymentProfileToAdd" class=animate-show>\n <div class=th-list>\n <div class=th-list__header ng-repeat-end>\n <a class=th-list__header__item href data-ng-click=vm.addPaymentProfile()><i class="fa fa-plus"></i>  Add a\n Credit Card</a>\n </div>\n <div data-ng-repeat="paymentProfile in vm.paymentProfiles" class=th-list__item>\n <div class=styled-optionbox-option>\n <div vn-credit-card-display-actions data-payment-profile=paymentProfile data-on-make-preferred-clicked=vm.makePaymentProfilePreferred($index) data-on-delete-clicked=vm.deletePaymentProfile(paymentProfile) data-on-edit-clicked=vm.editPaymentProfile(paymentProfile)>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div data-ng-show=vm.paymentProfileToAdd class="th-address__enterAddress animate-show">\n <div data-vn-credit-card-editor="" data-ng-if=vm.paymentProfileToAdd data-card=vm.paymentProfileToAdd.card data-title="Edit Shipping Address" data-on-save=vm.saveNewPaymentProfile() data-on-cancel=vm.cancelAddPaymentProfile() data-show-save-button=true data-save-text=add data-show-cancel-button=true>\n </div>\n </div>\n\n </div>\n <div class="col-xs-12 col-sm-5 col-md-4 col-md-offset-1 th-my-account__group">\n <div class=th-my-account__title>More Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.shippingaddresses>Shipping Addresses</a></li>\n <li><a href="" data-ui-sref=my-account.billingaddresses>Billing Addresses</a></li>\n </ul>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left">  Back to My Account</i>\n </a>\n </div>\n\n</div>'),a.put("my-account/shipping-addresses.html",'<div class="th-my-account container" data-ng-cloak="">\n\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n {{vm.pageTitle}}\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-7 col-md-7">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n <div data-ng-show="!vm.addressToEdit && !vm.addressToAdd" class="th-address__choose animate-show">\n <div class=th-address__choose__options>\n <a href data-ng-click=vm.addAddress() class=th-address__choose__options__new-option ng-repeat-end>\n <i class="fa fa-plus"></i>  Add a Shipping Address\n </a>\n <div data-ng-repeat="shippingAddress in vm.shippingAddresses" class=th-address__choose__options__option>\n <div class=styled-optionbox-option>\n <div vn-address-display-actions="" data-address=shippingAddress data-on-make-preferred-clicked=vm.makeAddressPreferred($index) data-on-delete-clicked=vm.deleteAddress(address) data-on-edit-clicked="vm.editAddress(address, $index)" data-shipping=true></div>\n </div>\n </div>\n </div>\n </div>\n <div data-ng-show=vm.addressToEdit class="th-address__enterAddress animate-show">\n <div data-vn-address-editor="" data-ng-if=vm.addressToEdit data-countries=vm.countries data-address=vm.addressToEdit data-title="Edit Shipping Address" data-on-save=vm.saveEditedAddress() data-on-cancel=vm.cancelEditAddress() data-show-save-button=true data-save-text=save data-show-cancel-button=true data-shipping=true>\n </div>\n </div>\n <div data-ng-show=vm.addressToAdd class="th-address__enterAddress animate-show">\n <div data-vn-address-editor="" data-ng-if=vm.addressToAdd data-countries=vm.countries data-address=vm.addressToAdd data-title="Edit Shipping Address" data-on-save=vm.saveNewAddress() data-on-cancel=vm.cancelAddAddress() data-show-save-button=true data-save-text=add data-show-cancel-button=true data-shipping=true>\n </div>\n </div>\n\n </div>\n <div class="col-xs-12 col-sm-5 col-md-4 col-md-offset-1 th-my-account__group">\n <div class=th-my-account__title>More Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.billingaddresses>Billing Addresses</a></li>\n <li><a href="" data-ui-sref=my-account.paymentprofiles>Payment Profiles</a></li>\n </ul>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left">  Back to My Account</i>\n </a>\n </div>\n\n</div>'),a.put("nav-menu-mobile/vn-nav-mobile.tpl.html",'<ul class="nav navbar-nav th-mobile-list">\n <li class="th-mobile-list__item th-mobile-list__item--header">Categories</li>\n <li class="dropdown th-mobile-list__item" ng-repeat="category in categories">\n <a href=# class="dropdown-toggle navbar-link th-dropdown-toggle th-mobile-list__link" ng-if=category.subCategories.length data-toggle=dropdown>\n {{category.name}} <span class="pull-right caret"></span>\n </a>\n <a data-ng-href={{category.url}} class="navbar-link th-dropdown-toggle th-mobile-list__link" ng-if=!category.subCategories.length>\n {{category.name}}\n </a>\n <ul class="dropdown-menu th-mobile-list th-mobile-list--sub" data-ng-if=category.subCategories.length>\n <li>\n <a data-ng-href={{category.url}} class="th-mobile-list__link th-mobile-list__link--sub">\n All {{category.name}}\n </a>\n </li>\n <li data-ng-repeat="subCategory in category.subCategories">\n <a class="th-mobile-list__link th-mobile-list__link--sub" data-ng-href={{subCategory.url}}>{{subCategory.name}}</a>\n </li>\n </ul>\n </li>\n</ul>'),a.put("nav-menu/vn-nav.tpl.html",'<div class="collapse navbar-collapse" id=th-main-menu data-ng-class="!navCollapsed && \'in\'" data-ng-click="navCollapsed=true">\n <ul class="nav navbar-nav">\n <li class="dropdown nav-top-level-menu-items" data-ng-repeat="category in smartNavCategories">\n <a class=navbar-link data-ng-href="{{ category.url }}">\n {{category.name}}\n <span data-ng-if=category.subCategories.length class="caret th-dropdown-toggle"></span>\n </a>\n <ul vn-show-on-dropdown-hover class=dropdown-menu data-ng-if=category.subCategories.length>\n <li data-ng-repeat="subCategory in category.subCategories">\n <a data-ng-href="{{ subCategory.url }}">{{subCategory.name}}</a>\n </li>\n </ul>\n </li>\n <li class=dropdown data-ng-show=displaySmartNavMoreMenuItem>\n <a href=# class=navbar-link data-translate=header.smartNavMoreLinkText>\n More\n <span class="caret th-dropdown-toggle"></span>\n </a>\n <ul vn-show-on-dropdown-hover class=dropdown-menu>\n <li data-ng-repeat="category in smartNavMoreCategories">\n <a class=navbar-link data-ng-href="{{ category.url }}">{{category.name}}</a>\n </li>\n </ul>\n </li>\n </ul>\n </div>'),a.put("orders/vn-order-list-view.tpl.html",'<div class="th-order-list-view container-fluid">\n <a href ui-sref="my-account.orders.detail({id: order.orderId})" class="th-order-list-view__item list-group-item row" data-ng-repeat="order in orders">\n <div class="col-xs-7 th-order-list-view__item-left">\n <div class=th-order-list-view__item__id data-ng-bind=::order.orderId></div>\n <div class=th-order-list-view__item__num-items>\n {{::order.orderItems.length}} Items\n </div>\n <div class=th-order-list-view__item__status data-ng-bind=::order.orderStatus></div>\n </div>\n <div class="col-xs-5 th-order-list-view__item-right">\n <div class=th-order-list-view__item__date data-ng-bind="::order.orderDate | date"></div>\n <div class=th-order-list-view__item__total data-ng-bind="::order.orderTotal | currency"></div>\n </div>\n </a>\n</div>'),a.put("orders/vn-order-table.tpl.html",'<table class="th-orders-table table table-striped table-hover">\n <thead>\n <tr>\n <th>Order #</th>\n <th>Order Date</th>\n <th>Items</th>\n <th>Order Total</th>\n <th>Status</th>\n </tr>\n </thead>\n <tbody>\n <tr data-ng-repeat="order in orders">\n <td><a href ui-sref="my-account.orders.detail({id: order.orderId})">{{ ::order.orderId }}</a></td>\n <td data-ng-bind="::order.orderDate | date"></td>\n <td data-ng-bind=::order.orderItems.length></td>\n <td data-ng-bind="::order.orderTotal | currency"></td>\n <td data-ng-bind=::order.orderStatus></td>\n </tr>\n </tbody>\n</table>'),a.put("pagination/vnPaginator.tpl.html",'<ul class=pager data-ng-if="cursor.totalPages > 1">\n <li data-ng-class="{disabled: cursor.currentPage == 1}">\n <a href data-ng-click=prevPage()><span class="glyphicon glyphicon-chevron-left"></span></a></li>\n <li data-ng-class="{disabled: cursor.currentPage == cursor.totalPages}">\n <a href data-ng-click=nextPage()><span class="glyphicon glyphicon-chevron-right"></span></a></li>\n</ul>\n\n <div class=pager>\n Page {{ cursor.currentPage }} of {{ cursor.totalPages }}\n </div>'),a.put("pay-with/credit-card-views.html",'<div data-ng-controller="CreditCardViewsCtrl as cc" data-ng-init=cc.init() data-ng-switch=cc.state>\n\n <div data-vn-credit-card-display data-ng-switch-when=VALIDCARDENTERED data-card=cc.card data-on-dirty=cc.setCardValidFalse() data-on-save=cc.saveCreditCard() data-on-click=cc.toggleChange() data-state=cc.displayCardState>\n </div>\n\n <div data-vn-credit-card-editor data-ng-switch-when=ENTERCARD data-card=cc.card data-on-dirty=cc.setCardValidFalse() data-show-save-button=false data-on-save=cc.saveCreditCard()>\n </div>\n\n <div data-vn-credit-card-picker data-ng-switch-when=PICKCARD data-state=cc.pickCardState data-card=cc.card data-card-list=cc.user.paymentProfiles data-on-select="" data-open-credit-cards=true data-close-picker=cc.closePicker() data-choose-picker=cc.choosePicker() data-enter-card=cc.enterCard() data-set-payment-profile=cc.setPaymentProfile(id) data-selected-index=cc.selectedIndex data-on-dirty-card=cc.setCardValidFalse() data-on-save-card=cc.saveCreditCard()>\n </div>\n\n</div>'),a.put("pay-with/vn-credit-card-display-action.html",'<div class="container-fluid vn-credit-card-display-action no-padding">\n <div class=row>\n <div class=col-xs-6>\n <span class=th-credit-card__img data-ng-class=paymentProfile.card.ccCssClass></span>\n   <span>{{ paymentProfile.card.cardNumber.slice(-4) }}</span>\n </div>\n <div class="col-xs-6 align-right">\n <span>{{ paymentProfile.card.expMonth }}/{{ paymentProfile.card.expYear }}</span>\n </div>\n </div>\n\n <div class="row th-address__display__actions">\n <div class="col-xs-6 th-address__display__actions__preferred">\n <span data-ng-if=!paymentProfile.preferred>\n <button class="btn btn-default" data-ng-click=onMakePreferredClicked()>Make Preferred</button>\n </span>\n <span data-ng-if=paymentProfile.preferred><i class="fa fa-check"></i> Preferred</span>\n </div>\n <div class="col-xs-6 align-right">\n <a href data-ng-click="onDeleteClicked({paymentProfile: paymentProfile})">\n <i class="fa fa-trash-o"></i>\n </a>\n </div>\n </div>\n</div>'),a.put("pay-with/vn-credit-card-display.html",'<div class=th-credit-card__display data-ng-class="{ \'-verify-CVV\' : state == \'CVV\'}">\n <div class=row data-ng-class="{\'clickable\': !readonlyVal}" data-ng-cloak data-ng-click=onClick()>\n <div class=col-xs-10>\n <span class=th-credit-card__img data-ng-class=card.ccCssClass></span>\n <span class=th-credit-card__display__last4>{{ card.cardNumber.slice(-4) }}</span>\n <span class=th-credit-card__display__exp>{{card.expMonth }}/{{card.expYear }}</span>\n </div>\n <div class=col-xs-2 data-ng-show=showArrowVal>\n <i class="fa fa-angle-right fa-2x pull-right"></i>\n </div>\n </div>\n <form id=frmCVV name=frmCVV novalidate ng-show="state==\'CVV\'">\n <hr>\n <div class=form-group>\n <div class=row>\n <div class="col-xs-7 th-credit-card__display__verifyCVV">\n <label class=th-credit-card__display__verifyCVV__label>Please verify your card</label>\n </div>\n <div class="col-xs-4 col-sm-2 th-credit-card__display__verifyCVV">\n <input id=inputCreditCardCVV name=inputCreditCardCVV class="form-control input-lg immediate-help" data-vn-placeholder=CVV data-ng-model=card.CVV data-vn-cvv-validate data-vn-cc-type="{{ card.cardTypeName }}" required>\n <input type=hidden data-ng-model=card.pCIaaSId id=hiddenCardID value="{{ card.pCIaaSId }}" name="hiddenCardID">\n <div class="input-help top" ng-if=frmCVV.inputCreditCardCVV.$touched>\n <div class=arrow></div>\n <h4>CVV must:</h4>\n <ul>\n <li ng-class=cvvValidFormat>Be <strong>{{ cvvLength }} digits</strong> long</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </form>\n</div>'),a.put("pay-with/vn-credit-card-editor.html",'<div>\n <div class="credit-card-error -aligned" ng-if=card.pCIaaSError ng-click="card.pCIaaSError = \'\'">\n <div class=row>{{card.pCIaaSError}}</div>\n </div>\n <div class="th-credit-card -aligned" ng-cloak>\n <div class=th-credit-card__strip></div>\n\n <form id=frmCreditCard name=frmCreditCard novalidate data-ng-submit=updateCreditCard()>\n <div class=row>\n <div class=col-xs-9>\n <div class=form-group>\n <input id=inputCreditCardNumber name=inputCreditCardNumber class="form-control input-lg immediate-help" data-vn-placeholder="Credit card number" data-ng-model=card.cardNumber data-vn-format-cc-number data-vn-cc-validate data-vn-cc-type="{{ card.cardTypeName }}" required>\n <div class="input-help top-left" ng-if=frmCreditCard.inputCreditCardNumber.$touched>\n <div class=arrow></div>\n <h4>Credit card must:</h4>\n <ul>\n <li ng-class=creditCardValid>Be <strong>valid</strong> credit card number</li>\n </ul>\n </div>\n </div>\n <input type=hidden data-ng-hide=true id=hiddenCardType name=hiddenCardType value="{{ card.cardTypeName }}">\n <input type=hidden data-ng-model=card.pCIaaSId id=hiddenCardID value="{{ card.pCIaaSId }}" name="hiddenCardID">\n\n </div>\n <div class=col-xs-3>\n <div class=form-group>\n <input id=inputCreditCardCVV name=inputCreditCardCVV class="form-control input-lg immediate-help" data-vn-placeholder=CVV data-ng-model=card.CVV data-ng-focus=setCCImage() data-ng-blur="setCCImage(\'reset\');" data-vn-cvv-validate data-vn-cc-type="{{ card.cardTypeName }}" required>\n\n <div class="input-help top" ng-if=frmCreditCard.inputCreditCardCVV.$touched>\n <div class=arrow></div>\n <h4>CVV must:</h4>\n <ul>\n <li ng-class=cvvValidFormat>Be <strong>{{ cvvLength }} digits</strong> long</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n\n <div class=row>\n <div class=col-xs-4>\n <div class=form-group>\n <div class="th-credit-card__exp-month th-dropdown" dropdown>\n <button id=inputCreditCardExpMonth name=inputCreditCardExpMonth class="btn btn-default btn-lg dropdown-toggle form-control immediate-help" type=button data-toggle=dropdown dropdown-togle aria-haspopup=true role=button aria-expanded=false data-ng-class="{ \'ng-invalid\': card.expMonth === \'\' || expDateInvalid === undefined, \'ng-valid\': expDateInvalid === \'valid\' }" data-vn-placeholder=MM data-ng-model=card.expMonth value="{{ card.expMonth }}">\n\n {{ card.expMonth }}<span class=caret></span>\n </button>\n <div class="input-help top-left -dropdown" ng-if=frmCreditCard.inputCreditCardExpMonth.$touched>\n <div class=arrow></div>\n <h4>Expiration date must:</h4>\n <ul>\n <li ng-class=expDateInvalid>Be <strong>future</strong> date</li>\n </ul>\n </div>\n <ul class=dropdown-menu role=menu aria-labelledby=inputCreditCardExpMonth>\n <li ng-repeat="month in months track by $index">\n <a role=menuitem tabindex=-1 href data-ng-click="onExpMonthChanged(month, \'inputCreditCardExpMonth\');">\n\n {{ month.label }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class=col-xs-4>\n <div class=form-group>\n <div class="th-credit-card__exp-year th-dropdown" dropdown>\n <button id=inputCreditCardExpYear name=inputCreditCardExpYear class="btn btn-default btn-lg dropdown-toggle form-control immediate-help" type=button data-toggle=dropdown dropdown-toggle aria-haspopup=true role=button aria-expanded=false data-ng-class="{ \'ng-invalid\': card.expYear === \'\' || expDateInvalid === undefined }" data-vn-placeholder=YY data-ng-model=card.expYear value="{{ card.expYear }}">\n\n {{ card.expYear }}<span class=caret></span>\n </button>\n <div class="input-help top-left -dropdown" ng-if=frmCreditCard.inputCreditCardExpYear.$touched>\n <div class=arrow></div>\n <h4>Expiration date must:</h4>\n <ul>\n <li ng-class=expDateInvalid>Be <strong>future</strong> date</li>\n </ul>\n </div>\n <ul class=dropdown-menu role=menu aria-labelledby=inputCreditCardExpYear>\n <li ng-repeat="year in rangeYears() track by $index">\n <a role=menuitem tabindex=-1 href data-ng-click="onExpYearChanged(year, \'inputCreditCardExpYear\');">\n\n {{ year }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class=col-xs-4>\n <div class=form-group>\n <span class=th-credit-card__img data-ng-class=card.ccCssClass></span>\n </div>\n </div>\n </div>\n\n </form>\n </div>\n <div class=container-fluid>\n <div class=row data-ng-if=showCancelButtonValue>\n <div class=col-xs-6>\n <button class="btn btn-default btn-block btn-lg th-checkout__step__cancel" data-ng-click=onCancel()>\n {{cancelText}}\n </button>\n </div>\n <div class=col-xs-6>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn__continue" data-ng-click=saveCard() data-ng-enabled=frmAddress.$valid data-ng-if=showSaveButtonValue>\n {{saveText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n <div class=row data-ng-if=!showCancelButtonValue>\n <div class=col-xs-12>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn__continue" data-ng-click=saveCard() data-ng-enabled=frmAddress.$valid data-ng-if=showSaveButtonValue>\n {{saveText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n </div>\n</div>'),a.put("pay-with/vn-credit-card-picker.html",'<div ng-cloak>\n\n <div class="th-checkout__step__drawer -left" data-ng-class="{\'-open\': openCreditCards}">\n\n <div class=th-checkout__step__drawer__body data-ng-show=openCreditCards data-ng-cloak data-ng-switch=state>\n\n <div data-ng-switch-when=PICK>\n <a href class=th-checkout__step__drawer__close data-ng-click=closePicker()>\n <i class="fa fa-close fa-2x"></i>\n </a>\n\n <div class=th-checkout__step__drawer__title>Choose credit card</div>\n\n <div class=th-credit-card__choose>\n <div class=th-credit-card__choose__options ng-cloak>\n <label class=th-credit-card__choose__options__option data-ng-repeat="profile in cardList" data-ng-class="{\'-first\' : $index === 0}" for="profile{{ $index }}">\n <div class=styled-optionbox-option>\n <input type=radio id="profile{{ $index }}" name=profile data-ng-value=true data-ng-model=profile.preferred data-ng-class="{\'-inactive\' : !profile.preferred, \'-selected\' : profile.preferred}" data-ng-change="setIndex({{ $index }})">\n\n <div>\n <span class=th-credit-card__img data-ng-class=getCssClass(profile)></span>\n <span class=th-credit-card__display__last4>{{ profile.card.last4 }}</span>\n <span class=th-credit-card__display__exp>{{ profile.card.expMonth }}/{{ profile.card.expYear }}</span>\n </div>\n </div>\n </label>\n\n <a href class=th-credit-card__choose__options__new-option ng-repeat-end ng-cloak data-ng-click=addCard()>\n Enter a different card\n </a>\n </div>\n\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn__continue" data-ng-click=choosePicker()>\n Continue <i class="fa fa-angle-right"></i>\n </button>\n </div>\n\n <div class=th__back-button>\n <a href=javascript:void(0); data-ng-click=closePicker()>\n <i class="fa fa-arrow-left"> back</i>\n </a>\n </div>\n </div>\n\n <div data-ng-switch-when=ENTER>\n <div class=th-checkout__step__drawer__title>Add credit card</div>\n <div data-vn-credit-card-editor data-card=card data-on-dirty=onDirtyCard() data-on-save=onSaveCard() data-show-save-button=true>\n </div>\n <div class=th__back-button>\n <a href=javascript:void(0); data-ng-click=goBackFromEnter()>\n <i class="fa fa-arrow-left"> back</i>\n </a>\n </div>\n </div>\n\n </div>\n </div>\n\n</div>'),a.put("popover/vn-popover.tpl.html",'<div class="input-help {{ ::location }}">\n <div class=arrow></div>\n <h4>{{ ::title }}</h4>\n</div>'),a.put("product-image/vn-product-image.tpl.html",'<img data-ng-src="{{ getImagePath(product.imageCollections) }}" class=img-responsive alt="{{ product.name }}">'),a.put("product-search/vnSearchForm.tpl.html",'<div class=th-search role=search>\n <div data-ng-show=showSearch class=th-search__popout>\n <form class=form-inline role=search name=frmSearch data-ng-submit=doSearch() novalidate>\n <div class=form-group>\n <input data-ng-model=searchTerm class=th-search__popout--input placeholder=Search...>\n <button type=button data-ng-click=doSearch() class="btn btn-xs btn-primary th-search__popout--submit">Go!\n </button>\n </div>\n </form>\n </div>\n\n <a id=search-toggle data-ng-click="showSearch = !showSearch" ng-show=allowCollapse type=button class=th-search__trigger data-ng-class="{ \'-position\' : !showSearch }">\n <span class="glyphicon glyphicon-search"></span>\n </a>\n</div>'),a.put("review/review-details-2.html",'<div data-ng-controller=ReviewDetailsCtrl>\n\n <div class=th-checkout__thanks__title>Ship To</div>\n <div class="th-address__display -readonly" data-ng-if=shippingAddress>\n <div vn-address-display data-address=shippingAddress></div>\n </div>\n\n <div class=th-checkout__thanks__title>Shipping Method</div>\n <div class=th-checkout__ship-method>\n <div class=th-checkout__ship-method__display data-ng-if=shippingMethod>\n <div class=th-checkout__ship-method__display__name data-ng-bind-html=shippingMethod.name></div>\n <div class=th-checkout__ship-method__display__price>{{ shippingMethod.price | vnCurrency }}</div>\n </div>\n </div>\n\n <div class=th-checkout__thanks__title>Paid With</div>\n <div data-vn-credit-card-display data-card=payment.card data-state=NOCVV data-show-arrow=false data-readonly=true>\n </div>\n\n <div class=th-checkout__thanks__title>Billing Address</div>\n <div class="th-address__display -readonly" data-ng-if=billingAddress>\n <div vn-address-display data-address=billingAddress></div>\n </div>\n\n</div>'),a.put("review/vn-review-details.html",'<div>\n <div class=th-checkout__thanks__title>Ship To</div>\n <div class=th-checkout__thanks__display>\n <span>{{ shippingAddress.firstName }} {{ shippingAddress.lastName }}</span>\n <span><br>{{ shippingAddress.address1 }}</span>\n <span data-ng-if=shippingAddress.address2><br>{{ shippingAddress.address2 }}</span>\n <span data-ng-if=isShippingLocationUS>\n <span><br>{{ shippingAddress.city }}, {{ shippingAddress.state }} {{ shippingAddress.postalCode }}</span>\n <span><br>{{ shippingAddress.phoneNumber | vnUsPhone }}</span>\n </span>\n\n \n <span data-ng-if=!isShippingLocationUS>\n <span><br>{{ shippingAddress.city }}</span>\n <span><br>{{ shippingAddress.state }} {{ shippingAddress.postalCode }}</span>\n <span><br>{{ shippingAddress.country }}</span>\n <span><br>{{ shippingAddress.phoneNumber }}</span>\n </span>\n \n </div>\n\n <div class=th-checkout__thanks__title>Shipping Method</div>\n <div class="th-checkout__thanks__display container-fluid">\n <div class=row>\n <div class=col-xs-6>\n <div class=th-checkout__thanks__display__name data-ng-bind-html=shippingMethod.name></div>\n </div>\n <div class="col-xs-6 align-right">\n <div class=th-checkout__thanks__display__price>{{ shippingMethod.price | vnCurrency }}</div>\n </div>\n </div>\n\n </div>\n\n <div class=th-checkout__thanks__title>Paid With</div>\n\n <div class="th-checkout__thanks__display container-fluid">\n <div class=row>\n <div class=col-xs-8>\n <span class=th-credit-card__img data-ng-class=payment.card.ccCssClass></span>\n <span class=th-credit-card__display__last4>\n <span class=hidden-xs>{{ payment.card.cardNumber | vnCreditCard:payment.card.cardTypeName}}</span>\n <span class="hidden-sm hidden-md hidden-lg hidden-xl">{{payment.card.last4}}</span>\n </span>\n </div>\n <div class="col-xs-4 align-right">\n <span class=th-credit-card__display__exp>{{payment.card.expMonth }}/{{payment.card.expYear }}</span>\n </div>\n </div>\n </div>\n\n <div class=th-checkout__thanks__title>Billing Address</div>\n <div class=th-checkout__thanks__display>\n <span>{{ billingAddress.firstName }} {{ billingAddress.lastName }}</span>\n <span><br>{{ billingAddress.address1 }}</span>\n <span data-ng-if=billingAddress.address2><br>{{ billingAddress.address2 }}</span>\n <span data-ng-if=isBillingLocationUS>\n <span><br>{{ billingAddress.city }}, {{ billingAddress.state }} {{ billingAddress.postalCode }}</span>\n <span><br>{{ billingAddress.phoneNumber | vnUsPhone }}</span>\n </span>\n\n \n <span data-ng-if=!isBillingLocationUS>\n <span><br>{{ billingAddress.city }}</span>\n <span><br>{{ billingAddress.state }} {{ billingAddress.postalCode }}</span>\n <span><br>{{ billingAddress.country }}</span>\n <span><br>{{ billingAddress.phoneNumber }}</span>\n </span>\n \n </div>\n</div>'),a.put("review/vn-review.html",'<div class=th-checkout__review>\n\n <div class="th-checkout__review__totals clearfix">\n <div class=th-checkout__review__totals__count>{{ cart.totals.qty }} items</div>\n <div class=th-checkout__review__totals__expand ng-class="{expanded: !reviewItems}"><button data-ng-click="reviewItems = !reviewItems"><span></span></button></div>\n <div class=th-checkout__review__totals__amount>{{ cart.totals.items | currency }}</div>\n </div>\n\n <div class=th-checkout__review__items data-ng-show=!reviewItems>\n <div class="th-checkout__review__items__item clearfix" data-ng-repeat="item in cart.items | reverse" data-ng-class="{\'-last\': $last}">\n\n <div class=th-checkout__review__items__item-image>\n <img data-ng-src="{{ item.imgUrl }}">\n </div>\n\n <div class=th-checkout__review__items__item-info>\n <div class=th-checkout__review__items__item-info--name>\n <span>{{ item.name }}</span>\n </div>\n\n <div class=th-checkout__review__items__item-info--price>{{ item.pricing.unitPrice | currency }}</div>\n\n <div class=th-checkout__review__items__item-info--option data-ng-repeat="option in item.options">\n <span>{{ option.optionText }}</span>\n </div>\n\n <div class=item-info-row>\n <div class=th-checkout__review__items__item-info--qty>\n <span>Qty</span> {{ item.qty }}\n </div>\n <div class=th-checkout__review__items_-info--subtotal>{{ item.pricing.subtotal | currency }}</div>\n </div>\n\n <div class=item-info-row data-ng-if="item.giftWrap.price > 0">\n <div class=th-checkout__review__items__item-info--qty>\n <span>Gift Wrap</span>\n </div>\n <div class=th-checkout__review__items__item-info--subtotal>{{ item.giftWrap.price | currency }}</div>\n </div>\n\n <div class=item-info-row data-ng-if="item.giftWrap.message != \'\'">\n <span>Message:</span> "{{ item.giftWrap.message }}"\n </div>\n </div>\n </div>\n </div>\n\n <div class=th-checkout__review__discounts data-ng-if=cart.discounts.length>\n <div class=th-checkout__review__discounts__discount data-ng-repeat="discount in cart.discounts">\n <div class=discount-info-row>\n <div class=th-checkout__review__discounts__discount-info>\n <span>{{ discount.name }}</span>\n </div>\n <div class=th-checkout__review__discounts__discount-info--subtotal>{{ discount.value | vnCurrency }}</div>\n </div>\n </div>\n </div>\n\n <div class=th-checkout__review__store-credit data-ng-if="cart.customer.storeCredit != 0">\n <div class=store-credit-info-row>\n <div class=th-checkout__review__store-credit-info>\n <span>Store Credit</span>\n </div>\n <div class=th-checkout__review__store-credit-info--subtotal>{{ cart.customer.storeCredit | vnCurrency }}</div>\n </div>\n </div>\n\n <div class=th-checkout__review__shipping-method>\n <div class=shipping-method-info-row>\n <div class=th-checkout__review__shipping-method-info>\n <span>Shipping</span>\n \n \n \n </div>\n <div class=th-checkout__review__shipping-method-info--subtotal>{{cart.totals.shipping | vnCurrency }}</div>\n </div>\n </div>\n\n <div class=th-checkout__review__tax>\n <div class=tax-info-row>\n <div class=th-checkout__review__tax-info>\n <span>Tax</span>\n </div>\n <div class=th-checkout__review__tax-info--subtotal>{{ cart.totals.taxTotal | currency }}</div>\n </div>\n </div>\n\n <div class=th-checkout__review__grand-total>\n <div class=grand-total-info-row>\n <div class=th-checkout__review__grand-total-info>\n <span>Grand Total</span>\n </div>\n <div class=th-checkout__review__grand-total-info--subtotal>{{ cart.totals.grandTotal | currency }}</div>\n </div>\n </div>\n</div>'),a.put("ship-method/ship-method.html",'<div class="th-checkout__section-heading th-checkout__ship-method__heading" data-ng-show="checkout.cart.shippingMethods.length > 0">\n Shipping Method\n</div>\n\n<div class=th-checkout__ship-method data-ng-controller=ShipMethodCtrl data-ng-show="checkout.cart.shippingMethods.length > 0" data-ng-switch=isEditable()>\n\n\n <label class=th-checkout__ship-method__method data-ng-switch-when=edit data-ng-repeat="method in checkout.cart.shippingMethods" for="shipping{{ $index }}">\n\n <div class=styled-optionbox-option>\n <input type=radio id="shipping{{ $index }}" name=shipping data-ng-value=true data-ng-model=method.selected data-ng-change="setPreferredShippingMethod({{ $index }})">\n <div>\n <div data-ng-bind-html=method.name class=th-checkout__ship-method__name></div>\n </div>\n </div>\n <div class=th-checkout__ship-method__price>{{ method.price | vnCurrency }}</div>\n\n </label>\n\n <div class=th-checkout__ship-method__display data-ng-switch-when=show>\n <div class=th-checkout__ship-method__display__name data-ng-bind-html=checkout.cart.shippingMethods[currentShippingMethodIdx].name></div>\n <div class=th-checkout__ship-method__display__price>{{ checkout.cart.shippingMethods[currentShippingMethodIdx].price | vnCurrency }}</div>\n\n </div>\n\n</div>'), -a.put("ship-to/ship-to-views.html",'<div class=th-checkout__ship-to data-ng-controller="ShipToViewsCtrl as vm" data-ng-switch=vm.state data-ng-init=vm.init()>\n\n <div class=th-address__display data-ng-switch-when=VIEWADDRESS>\n <vn-address-display data-address=vm.shippingAddress data-on-click=vm.editShippingAddress() data-shipping=true data-show-edit-button=vm.shippingAddress></vn-address-display>\n </div>\n\n <div class=th-address__enterAddress data-ng-switch-when=EDITADDRESS ng-cloak>\n <div data-vn-address-editor="" address=vm.shippingAddress countries=vm.countries data-on-save=vm.saveShippingAddress() data-show-save-button=true data-shipping=true data-save-text="Get Shipping Rates"></div>\n </div>\n\n <div vn-address-picker data-ng-switch-when=PICKADDRESS data-address-list=vm.user.shippingAddresses data-new-address-title="Add Shipping Address" data-select-address-title="Choose Shipping Address" data-back-to-text="back to Ship To" data-show-copy-address=vm.showCopyAddress data-countries=vm.countries data-on-address-selected=vm.onAddressSelected() data-shipping=true data-save-address=vm.onAddressAdded(newAddress)></div>\n\n</div>'),a.put("thank-you/thank-you.html",'<div class=th-checkout__thanks ng-cloak="">\n <div class=th-checkout__thanks__header>\n <div class=title>Thank you for your order.</div>\n <div class=order-info>Your order number is No.{{ ::orderId }}</div>\n <div class=action-info>A copy of this has been sent to<br>{{ ::userEmail }}</div>\n\n <br style="clear : both">\n </div>\n\n <div class=container-fluid>\n <div class=row>\n <div class="col-sm-12 col-sm-offset-0 col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2">\n\n <div class=row>\n <div class="th-checkout__thanks__column col-xs-12 col-sm-6 col-md-6">\n <div class=th-checkout__thanks__title>Order Details</div>\n <div vn-review=checkout.cart></div>\n </div>\n <div class="th-checkout__thanks__column col-xs-12 col-sm-6 col-md-6">\n <div vn-review-details shipping-address=checkout.cart.shippingAddress shipping-method=shippingMethod payment=checkout.cart.paymentProfile billing-address=checkout.cart.billingAddress></div>\n </div>\n\n <br style="clear : both">\n </div>\n\n </div>\n </div>\n </div>\n</div>')}]),angular.module("Volusion.toolboxCommon").controller("CreditCardViewsCtrl",["$rootScope","$filter","vnCheckout","vnPayment","vnUser","$q","vnPciaasIframe","vnSiteConfig","vnCreditCardClass","vnCreditCardUtilities",function(a,b,c,d,e,f,g,h,i,j){"use strict";function k(){if(o.user.paymentProfiles.length>0){for(var a=o.user.paymentProfiles[0].card,b=0,c=0,d=o.user.paymentProfiles.length;d>c;c++)o.user.paymentProfiles[c].preferred&&(b=c,a=o.user.paymentProfiles[c].card);return{index:b,card:a}}return{index:0,card:j.newCard()}}function l(a){angular.forEach(o.user.paymentProfiles,function(b){return o.user.paymentProfiles[a].id===b.id?void(b.preferred=!0):void(b.preferred=!1)})}function m(){o.preferredProfile=b("filter")(o.user.paymentProfiles,function(a){return a.preferred===!0?a:void 0})[0],d.setCardFrom(o.preferredProfile.card),c.setCCPaymentProfile(d.getCard()),c.setCreditCardValidity(!0)}function n(){var a={method:"Credit Card",preferred:!0,card:{cardType:o.card.cardType,cardTypeName:o.card.cardTypeName,holdersName:o.user.firstName+" "+o.user.lastName,last4:o.card.cardNumber.slice(-4),expMonth:o.card.expMonth,expYear:o.card.expYear,issueMonth:"",issueYear:"",issueNumber:"",pCIaaSId:o.card.pCIaaSId,cardNumber:o.card.cardNumber}};c.setCCPaymentProfile(a),o.user.anonymous||e.setPaymentProfile(a).then(function(a){var b=i(a.data.card.cardType);a.data.card.ccCssClass=b["class"],a.data.card.last4=a.data.card.cardNumber.slice(-4),a.data.card.cardTypeName=b.name,o.user.paymentProfiles.push(a.data)})}var o=this,p=null;h.getConfig().then(function(a){p=a.data.PCIaaS.merchantId});var q=2;o.state=null,o.pickCardState="PICK",o.displayCardState="CVV",o.oldSelectedIndex=null,o.selectedIndex=null,o.init=function(){o.card=j.newCard(),o.user.anonymous?(o.isUserCanEnterPaymentProfile=!0,o.state="ENTERCARD"):e.getPaymentProfiles().then(function(){if(o.user.paymentProfiles.length>0){m(),o.state="VALIDCARDENTERED";var a=k();o.oldSelectedIndex=o.selectedIndex=a.index,o.card=a.card}else o.isUserCanEnterPaymentProfile=!0,o.state="ENTERCARD"})},o.isUserCanEnterPaymentProfile=!1,o.user=e.getUser(),o.checkout=c.get(),o.payment=d.getCard(),o.openCreditCards=!1,o.user.isUserCanEnterPaymentProfile=!0,o.preferredProfile={},o.setPaymentProfile=function(){l(o.selectedIndex),m()},o.setCardValidFalse=function(){c.setCreditCardValidity(!1)},o.processCard=function(){return f(function(a,b){var c={CVV:"inputCreditCardCVV",HiddenCardID:"hiddenCardID",CardNumber:function(){return o.card.cardNumber},CardType:function(){return{Visa:"Visa",MasterCard:"MasterCard","American Express":"Amex",Discover:"Discover"}[o.card.cardTypeName]}};g.PCIaaS({settings:{merchantID:"3de067d8d96d407697da4a9559f99681",apiBase:"https://payments-qa.dev.volusion.com/paymentsv1_4"},fields:c,events:{success:a,error:b}}).process(!0)})},o.saveCreditCard=function(){o.processCard().then(function(b){o.card.pCIaaSError="",angular.isString(b)&&(b=JSON.parse(b)),o.card.cardNumber=-1===o.card.cardNumber.indexOf("*")?j.maskCardValue(o.card.cardNumber):o.card.cardNumber,o.card.pCIaaSId=b.CardId?b.CardId:o.card.pCIaaSId,o.card.changed=!1,n(),o.displayCardState="NOCVV",o.state="VALIDCARDENTERED",c.setCreditCardValidity(!0),a.$emit("vnPayment.validate.continue")},function(){o.card.pCIaaSError="There was a problem with saving your credit card"})},o.toggleChange=function(){c.setCreditCardValidity(!1),o.user.paymentProfiles&&o.user.paymentProfiles.length>0?(o.openCreditCards=!0,c.setHasOpenDrawer(q,!0),o.state="PICKCARD",o.pickCardState="PICK"):o.state="ENTERCARD"},o.closePicker=function(){o.user.paymentProfiles.length>0?(l(o.oldSelectedIndex),o.card=k().card,o.state="VALIDCARDENTERED",o.displayCardState="CVV",c.setCreditCardValidity(!0)):o.state="ENTERCARD"},o.choosePicker=function(){o.oldSelectedIndex=o.selectedIndex,o.setPaymentProfile(),o.card=k().card,c.setCreditCardValidity(!0),o.state="VALIDCARDENTERED",o.displayCardState="CVV"}}]),angular.module("Volusion.toolboxCommon").directive("vnCreditCardDisplayActions",["vnCreditCardClass",function(a){return{restrict:"A",scope:{paymentProfile:"=",onMakePreferredClicked:"&",onDeleteClicked:"&",onEditClicked:"&"},templateUrl:"pay-with/vn-credit-card-display-action.html",link:function(b){if(!b.paymentProfile.card.ccCssClass&&b.paymentProfile.card.cardTypeName){var c=a(b.paymentProfile.card.cardTypeName);b.paymentProfile.card.ccCssClass=c["class"],b.paymentProfile.card.cardType=c.type}}}}]),angular.module("Volusion.toolboxCommon").directive("vnCreditCardDisplay",["$rootScope","vnCreditCardClass",function(a,b){return{replace:!0,restrict:"EA",scope:{card:"=",state:"=?",onSave:"&",onDirty:"&",onClick:"&",readonly:"@",showArrow:"@"},templateUrl:"pay-with/vn-credit-card-display.html",link:function(c){function d(){for(var a in c.frmCVV)c.frmCVV.hasOwnProperty(a)&&a.indexOf("$")<0&&(c.frmCVV[a].$setDirty(),c.frmCVV[a].$setTouched())}if(c.state=c.state||"NOCVV",c.readonlyVal="true"===c.readonly?!0:!1,c.showArrowVal="false"===c.showArrow?!1:!0,c.card.expMonth=c.card.expMonth||c.card.ExpireMonth,c.card.expYear=c.card.expYear||c.card.ExpireYear,c.card.cardTypeName=c.card.cardTypeName||c.card.CardTypeName,!c.card.ccCssClass&&c.card.cardTypeName){var e=b(c.card.cardTypeName);c.card.ccCssClass=e["class"],c.card.cardType=e.type}c.validateCVV=function(){c.frmCVV.$valid?(c.frmCVV.$setPristine(),c.onSave()):(d(),c.onDirty())},c.$watch("frmCVV.$dirty",function(a){a&&angular.isFunction(c.onDirty)&&c.onDirty()});var f=a.$on("vnPayment.validate",function(){c.validateCVV(),a.$emit("vnPayment.validate.continue")});c.$on("$destroy",function(){f()})}}}]),angular.module("Volusion.toolboxCommon").directive("vnCreditCardEditor",["$rootScope","vnCreditCardClass","lodash",function(a,b,c){return{restrict:"EA",scope:{card:"=",title:"@",onSave:"&",onDirty:"&",showSaveButton:"@",saveText:"@",showCancelButton:"@",cancelText:"@",onCancel:"&"},templateUrl:"pay-with/vn-credit-card-editor.html",link:function(d){function e(){d.card&&d.card.cardTypeName&&"American Express"===d.card.cardTypeName&&(d.cvvLength=4)}function f(){if(void 0!==d.card.cardNumber&&-1!==d.card.cardNumber.indexOf("*")){var a=b(d.card.cardTypeName);return d.card.ccCssClass=a["class"],void(d.card.cardType=a.type)}if(void 0===d.card.cardNumber||""===d.card.cardNumber)return void(d.card.ccCssClass="th-credit-card__img--notvalid");d.card.cardTypeName="",/^(34)|^(37)/.test(d.card.cardNumber)&&(d.card.cardTypeName="American Express"),/^4/.test(d.card.cardNumber)&&(d.card.cardTypeName="Visa"),/^5[1-5]/.test(d.card.cardNumber)&&(d.card.cardTypeName="MasterCard"),/^(6011)|^(622(1(2[6-9]|[3-9][0-9])|[2-8][0-9]{2}|9([01][0-9]|2[0-5])))|^(64[4-9])|^65/.test(d.card.cardNumber)&&(d.card.cardTypeName="Discover");var c=b(d.card.cardTypeName);d.card.ccCssClass=c["class"],d.card.cardType=c.type,d.creditCardSupported=-1!==d.card.CardType&&""!==d.card.CardType?"valid":void 0}function g(){for(var a in d.frmCreditCard)d.frmCreditCard.hasOwnProperty(a)&&a.indexOf("$")<0&&(d.frmCreditCard[a].$setDirty(),d.frmCreditCard[a].$setTouched())}function h(){if(d.card.expMonth&&d.card.expYear){var a=new Date;d.expDateInvalid="valid",parseInt("20"+d.card.expYear)===a.getFullYear()&&parseInt(d.card.expMonth)<a.getMonth()+1&&(d.expDateInvalid=void 0,d.frmCreditCard.inputCreditCardExpMonth.$setValidity("expmonth",!1),d.frmCreditCard.inputCreditCardExpYear.$setValidity("expyear",!1))}}d.saveText=d.saveText||"Continue",d.cancelText=d.cancelText||"Cancel",d.showSaveButtonValue="false"===d.showSaveButton?!1:!0,d.showCancelButtonValue="true"===d.showCancelButton?!0:!1,d.cvvLength=3,e(),d.expDateInvalid="valid",d.creditCardSupported="valid",d.saveText=d.saveText||"Add Credit Card",d.months=[{num:"01",label:"01 - January"},{num:"02",label:"02 - February"},{num:"03",label:"03 - March"},{num:"04",label:"04 - April"},{num:"05",label:"05 - May"},{num:"06",label:"06 - June"},{num:"07",label:"07 - July"},{num:"08",label:"08 - August"},{num:"09",label:"09 - September"},{num:"10",label:"10 - October"},{num:"11",label:"11 - November"},{num:"12",label:"12 - December"}],d.rangeYears=function(){var a,b=[],c=(new Date).getFullYear();for(a=c;c+15>=a;a++)b.push(a);return b},d.onExpMonthChanged=function(a,b){d.card.expMonth=a.num;var c=angular.element("#"+b);c.focus(),c.triggerHandler("change"),h()},d.onExpYearChanged=function(a,b){d.card.expYear=a.toString().substring(2);var c=angular.element("#"+b);c.focus(),c.triggerHandler("change"),h()},d.setCCImage=function(a){void 0===a?d.card.ccCssClass="AMEX"===d.card.cardTypeName?"th-credit-card__img--amex-flipped":"th-credit-card__img--flipped":f()},d.displayLast4=function(){return d.card.cardNumber.slice(-4)},d.displayExpDate=function(){var a="";return a=""===d.card.expMonth?"":d.card.expMonth,a+=""===d.card.expYear?"":"/"+d.card.expYear},d.saveCard=function(){var a;return d.cvvLength=3,e(),d.expDateInvalid=void 0,-1===d.card.cardNumber.indexOf("*")&&(a=d.card.cardNumber.replace(/[^\d]+/g,""),d.frmCreditCard.inputCreditCardNumber.$setValidity("creditcard",!d.frmCreditCard.inputCreditCardNumber.$invalid&&void 0!==d.creditCardSupported)),d.card.CVV&&-1===d.card.CVV.indexOf("*")&&(a=d.card.CVV.replace(/[^\d]+/g,""),d.frmCreditCard.inputCreditCardCVV.$setValidity("cvv",a.toString().length===d.cvvLength)),d.card.expMonth?d.frmCreditCard.inputCreditCardExpMonth.$setValidity("expmonth",!0):d.frmCreditCard.inputCreditCardExpMonth.$setValidity("expmonth",!1),d.card.expYear?d.frmCreditCard.inputCreditCardExpYear.$setValidity("expyear",!0):d.frmCreditCard.inputCreditCardExpYear.$setValidity("expyear",!1),h(),d.frmCreditCard.$valid?(d.frmCreditCard.preferred=!0,d.frmCreditCard.$setPristine(),d.onSave(),!0):(g(),!1)},d.frmCreditCard.$setPristine();var i=d.$watch("frmCreditCard.$dirty",function(a){a&&(c.isFunction(d.onDirty)&&d.onDirty(),i())});d.$watch("card.cardNumber",function(){f()});var j=a.$on("vnPayment.validate",function(){d.saveCard()&&a.$emit("vnPayment.validate.continue")});d.$on("$destroy",function(){j()})}}}]),angular.module("Volusion.toolboxCommon").directive("vnCreditCardPicker",["vnCreditCardClass",function(a){return{replace:!0,restrict:"EA",scope:{cardList:"=",state:"=",openCreditCards:"@",onSelect:"&",enterCard:"&",closePicker:"&",choosePicker:"&",setPaymentProfile:"&",selectedIndex:"=",card:"=",onSaveCard:"&",onDirtyCard:"&"},templateUrl:"pay-with/vn-credit-card-picker.html",link:function(b){b.addCard=function(){b.card={cardNumber:"",expMonth:"",expYear:""},b.state="ENTER"},b.goBackFromEnter=function(){b.state="PICK"},b.setIndex=function(a){b.selectedIndex=a},b.getCssClass=function(b){return a(b.card.cardTypeName.toUpperCase())["class"]}}}}]),angular.module("Volusion.toolboxCommon").factory("vnCreditCardUtilities",["lodash",function(a){return{maskCardValue:function(a){var b=new RegExp("[\\s-]","g"),c=a.replace(b,""),d=new RegExp("^(\\d+?)\\d{4}$"),e=c.match(d),f=c,g="*",h="";if(null!==e){for(var i=1;i<e.length;i++){h="";for(var j=0;j<e[i].length;j++)h+=g;f=f.replace(e[i],h)}for(var k=f.length-1;k>=0;k--)f.charAt(k)===g;return f}return null},newCard:function(){return{cardNumber:"",expMonth:"",expYear:""}},setPreferredPaymentProfile:function(b,c){a.forEach(b,function(a,b){a.preferred=c===b})},getPreferredPaymentProfile:function(b){return a.find(b,function(a){return a.preferred})||b[0]},removePaymentProfileFromList:function(b,c){return a.reject(b,function(a){return a.id===c.id})}}}]),angular.module("Volusion.toolboxCommon").directive("vnPlaceholder",["$timeout","$interpolate",function(a,b){"use strict";return{restrict:"A",require:"ngModel",compile:function(c,d){return c.parent().append('<label class="vn-placeholder" ng-click="setFocusFor(\''+d.id+"')\" dropdown-toggle></label>"),function(c,e){function f(a,b){return a.$$phase||a.$root.$$phase?b():a.$apply(b)}function g(a){f(c,function(){void 0===a&&""===h.val()?(i.removeClass("-selected -focus"),i.html()!==b(d.vnPlaceholder)(c)&&i.html(b(d.vnPlaceholder)(c))):(i.hasClass("-selected")||i.addClass("-selected"),void 0===a||"focus"!==a.type||i.hasClass("-focus")||i.addClass("-focus"),d.vnPlaceholderShort&&d.vnPlaceholderShort.length>0&&i.html(b(d.vnPlaceholderShort)(c)))})}var h=e,i=h.closest("div").find("label.vn-placeholder");c.setFocusFor=function(a){angular.element(document.querySelector("#"+a)).focus()},f(c,function(){a(function(){i.html(b(d.vnPlaceholder)(c))},0)}),c.$watch(d.ngModel,function(){g()}),h.on("focus keyup change",function(a){g(a)}).on("blur",function(){i.removeClass("-focus"),""===h.val()&&(i.removeClass("-selected"),i.html()!==b(d.vnPlaceholder)(c)&&i.html(b(d.vnPlaceholder)(c)))})}}}}]),angular.module("Volusion.toolboxCommon").directive("vnPopoverFirstName",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="bottom",b.title="First name must:";var d=[{ngclass:"firstNameMinValidLength",ngif:"",msg:"Be at least <strong>1 letter long</strong>"},{ngclass:"firstNameAllowedChars",ngif:"firstNameDisallowedChars != null",msg:'Not contain <strong>{{ firstNameDisallowedChars.join("") }}</strong>'}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverLastName",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="bottom-right",b.title="Last name must:";var d=[{ngclass:"lastNameMinValidLength",ngif:"",msg:"Be at least <strong>1 letter long</strong>"},{ngclass:"lastNameAllowedChars",ngif:"lastNameDisallowedChars != null",msg:'Not contain <strong>{{ lastNameDisallowedChars.join("") }}</strong>'}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverAddress",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="bottom",b.title="Address must:";var d=[{ngclass:"streetEmpty",ngif:"",msg:"Not be <strong>empty</strong>"},{ngclass:"streetAllowedChars",ngif:"streetDisallowedChars != null",msg:'Not contain <strong>{{ streetDisallowedChars.join("") }}</strong>'}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverCity",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="top-left",b.title="City must:";var d=[{ngclass:"cityEmpty",ngif:"",msg:"Not be <strong>empty</strong>"},{ngclass:"cityAllowedChars",ngif:"cityDisallowedChars != null",msg:'Not contain <strong>{{ cityDisallowedChars.join("") }}</strong>'}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverRegion",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="top-left",b.title="Region must:";var d=[{ngclass:"regionRequired",ngif:"",msg:"Not be <strong>empty</strong>"},{ngclass:"regionAllowedChars",ngif:"regionDisallowedChars != null",msg:'Not contain <strong>{{ regionDisallowedChars.join("") }}</strong>'}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverState",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="top-left -dropdown",b.title="State must:";var d=[{ngclass:"stateEmpty",ngif:"",msg:"Be <strong>selected</strong>"}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverZip",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="top",b.title="Zip code must:";var d=[{ngclass:"zipHasValidFormat",ngif:"",msg:"Be formatted as 99999[-9999]"}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverPostalCode",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="top",b.title="Postal code must:";var d=[{ngclass:"postalCodeEmpty",ngif:"",msg:"Not be empty"},{ngclass:"postalCodeAllowedChars",ngif:"postalCodeDisallowedChars != null",msg:'Not contain <strong>{{ postalCodeDisallowedChars.join("") }}</strong>'}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverUsPhone",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="top",b.title="Phone number must:";var d=[{ngclass:"usPhoneHasValidFormat",ngif:"",msg:"Be formatted as (999) 999-9999 ext.9999"}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverRequired",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c,d){b.location=d.location||"bottom",b.title=(d.field||"Field")+" must:";var e=[{ngclass:"requiredFieldFilled",ngif:"",msg:"Not be <strong>empty</strong>"}],f=angular.element("<ul>");angular.forEach(e,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),f.append(b)}),a(f)(b),c.append(f)}}}]),angular.module("Volusion.toolboxCommon").directive("vnProductImage",["$filter",function(a){"use strict";return{templateUrl:"product-image/vn-product-image.tpl.html",restrict:"AE",scope:{product:"=",defaultImage:"="},replace:!0,link:function(b){b.getImagePath=function(c){var d=a("vnProductImageFilter")(c);return""===d?b.defaultImage:d}}}}]),angular.module("Volusion.toolboxCommon").directive("vnSearchForm",["vnSearchManager",function(a){return{templateUrl:"product-search/vnSearchForm.tpl.html",restrict:"AE",replace:!0,scope:{searchTerm:"=",showSearch:"="},link:function(b,c,d){c.bind("click",function(){c.find("input").focus()}),b.searchTerm=b.searchTerm||a.getSearchText(),b.allowCollapse=d.allowCollapse&&!!JSON.parse(d.allowCollapse),b.doSearch=function(){a.updateSearch(b.searchTerm),b.showSearch=!1,b.showSearch&&(b.showSearch=!1)},b.$watch(function(){return a.getSearchText()},function(a){b.searchTerm=a||""},!0)}}}]),angular.module("Volusion.toolboxCommon").factory("vnSearchManager",["$route","$location","vnProductParams",function(a,b,c){function d(){return c.getSearchText()}function e(d){c.updateSearch(d),b.search("q",d),"/search"!==b.path()&&b.path("/search"),a.reload()}return{getSearchText:d,updateSearch:e}}]),angular.module("Volusion.toolboxCommon").controller("ReviewDetailsCtrl",["$rootScope","$scope","$filter","vnCheckout","vnCreditCardClass","lodash",function(a,b,c,d,e,f){"use strict";var g=d.get();b.orderId=g.orderId,b.userEmail=g.user.email,b.isShippingLocationUS="United States"===g.cart.shippingAddress.country,b.shippingAddress=g.cart.shippingAddress,b.shippingMethod=f.find(g.cart.shippingMethods,function(a){return a.selected===!0}),b.isBillingLocationUS="United States"===g.cart.billingAddress.country,b.billingAddress=g.cart.billingAddress,b.payment=g.cart.paymentProfile,b.payment.total=g.cart.totals,b.payment.ccCssClass=e(b.payment.CardTypeName)["class"],b.$watch("checkout.cart.shippingMethods",function(){b.shippingMethod=f.find(g.cart.shippingMethods,function(a){return a.selected===!0})})}]),angular.module("Volusion.toolboxCommon").directive("vnReviewDetails",[function(){return{restrict:"A",replace:!0,templateUrl:"review/vn-review-details.html",scope:{shippingAddress:"=",shippingMethod:"=",payment:"=",billingAddress:"="}}}]),angular.module("Volusion.toolboxCommon").directive("vnReview",[function(){return{restrict:"A",replace:!0,templateUrl:"review/vn-review.html",scope:{cart:"=vnReview"}}}]),angular.module("Volusion.toolboxCommon").config(["$locationProvider","$httpProvider","$stateProvider","$urlRouterProvider",function(a,b,c,d){"use strict";function e(){return{url:"/cart",onEnter:["$rootScope",function(a){a.$emit("enterCartState")}],onExit:["$rootScope",function(a){a.$emit("exitCartState")}]}}d.otherwise("/"),c.state("root",{"abstract":!0,url:"",template:"<div ui-view></div>",resolve:{loginFromCookie:["vnAuthService",function(a){return a.loginFromCookie()}]}}).state("home",{parent:"root",url:"/",templateUrl:"views/home.html",controller:"HomeCtrl",resolve:{translations:["translate",function(a){a.addParts("home"),a.addParts("product")}]}}).state("login",{parent:"root",url:"/login",templateUrl:"login/login.html",controller:"LoginCtrl",resolve:{emptyCart:["vnAppRoute",function(a){return a.checkEmptyCart(this.url.source)}]}}).state("logout",{parent:"root",url:"/logout",template:"",controller:"LogoutCtrl"}).state("forgot-password",{parent:"root",url:"/forget-password",templateUrl:"login/forgot-password.html",controller:"ForgotPasswordCtrl"}).state("my-account-login",{parent:"root",url:"/my-account-login",templateUrl:"login/my-account-login.html",resolve:{checkLoggedIn:["loginFromCookie","vnAppRoute",function(a,b){return b.isLoggedIn("my-account")}]}}).state("my-account",{parent:"root",url:"/my-account",templateUrl:"my-account/my-account.html",controller:"MyAccountCtrl",resolve:{loggedIn:["vnUser",function(a){return a.isLoggedIn()}]},ncyBreadcrumb:{label:"My Account"}}).state("my-account.change-email",{url:"/change-email",templateUrl:"my-account/change-email.html",controller:"ChangeEmailCtrl",ncyBreadcrumb:{label:"Change Email"}}).state("my-account.change-password",{url:"/change-password",templateUrl:"my-account/change-password.html",controller:"ChangePasswordCtrl",ncyBreadcrumb:{label:"Change Password"}}).state("my-account.billingaddresses",{url:"/billing-addresses",templateUrl:"my-account/billing-addresses.html",controller:"BillingAddressesCtrl",controllerAs:"vm",ncyBreadcrumb:{label:"Billing Address"}}).state("my-account.shippingaddresses",{url:"/shipping-addresses",templateUrl:"my-account/shipping-addresses.html",controller:"ShippingAddressesCtrl",controllerAs:"vm",ncyBreadcrumb:{label:"Shipping Address"}}).state("my-account.paymentprofiles",{url:"/payment-profiles",templateUrl:"my-account/payment-profiles.html",controller:"PaymentProfilesCtrl",controllerAs:"vm",ncyBreadcrumb:{label:"Payment Profiles"}}).state("my-account.orders",{url:"/orders","abstract":!0,templateUrl:"my-account/orders.html"}).state("my-account.orders.list",{url:"/list",templateUrl:"my-account/orders.list.html",controller:"ListOrdersCtrl",controllerAs:"vm",ncyBreadcrumb:{label:"Orders",parent:"my-account"}}).state("my-account.orders.detail",{url:"/:id",templateUrl:"my-account/orders.detail.html",controller:"OrdersDetailCtrl",controllerAs:"vm",ncyBreadcrumb:{label:"Order Details",parent:"my-account.orders.list"}}).state("checkout",{parent:"root",url:"/checkout",templateUrl:"checkout/checkout.html",controller:"CheckoutCtrl",resolve:{emptyCart:["vnAppRoute","loginFromCookie",function(a,b){return a.checkEmptyCart(this.url.source)}],loggedInOrAnon:["vnAppRoute","loginFromCookie",function(a,b){return a.isLoggedInOrAnon()}]}}).state("thank-you",{parent:"root",url:"/thank-you",templateUrl:"thank-you/thank-you.html",controller:"ThankYouCtrl"}).state("product",{parent:"root",url:"/p/:slug",templateUrl:"views/product.html",controller:"ProductCtrl",resolve:{translations:["translate",function(a){return a.addParts("product")}]}}).state("category",{parent:"root",url:"/c/:slug",templateUrl:"views/category.html",controller:"CategoryCtrl",resolve:{params:["vnAppRoute","$location",function(a,b){return a.resolveParams(b.search())}]}}).state("search",{parent:"root",url:"/search",templateUrl:"views/search.html",controller:"SearchCtrl",reloadOnSearch:!1,resolve:{params:["vnAppRoute","$location",function(a,b){return a.resolveParams(b.search())}],translations:["translate",function(a){a.addParts("product")}]}}).state("allProducts",{parent:"root",url:"/all-products",templateUrl:"views/search.html",controller:"SearchCtrl",reloadOnSearch:!1,resolve:{params:["vnAppRoute","$location",function(a,b){return a.resolveParams(b.search())}],translations:["translate",function(a){a.addParts("product")}]}}).state("themeSettings",{parent:"root",url:"/theme-settings",templateUrl:"views/theme-settings.html",controller:"ThemeSettingsCtrl"}).state("article",{parent:"root",url:"/:slug",templateUrl:"views/article.html",controller:"PageCtrl",resolve:{article:["vnApi","$route",function(a,b){return a.Article().get({slug:b.current.params.slug}).$promise}]}}),c.state("home.cart",e()).state("product.cart",e()).state("category.cart",e()).state("search.cart",e()).state("allProducts.cart",e()).state("themeSettings.cart",e()).state("article.cart",e()).state("login.cart",e()).state("forget-password.cart",e()).state("my-account.cart",e()).state("my-account.billingaddresses.cart",e()).state("my-account.shippingaddresses.cart",e()).state("my-account.paymentprofiles.cart",e()).state("my-account.orders.cart",e()).state("my-account.orders.detail.cart",e()).state("my-account-login.cart",e()).state("my-account.change-email.cart",e()).state("my-account.change-password.cart",e()).state("thank-you.cart",e())}]),angular.module("Volusion.toolboxCommon").directive("vnScrollToAnchor",["$location","$anchorScroll",function(a,b){return{restrict:"AC",compile:function(){return function(c,d,e){d.bind("click",function(c){c.preventDefault(),a.hash(e.vnScrollToAnchor),b()})}}}}]),angular.module("Volusion.toolboxCommon").factory("notifications",["$filter","vnAppMessageService",function(a,b){"use strict";function c(a,c){b.addMessage({type:a,text:c})}function d(){c("success",a("translate")("message.CART_ADD_SUCCESS"))}function e(){c("success",a("translate")("message.CART_UPDATE_SUCCESS"))}function f(b){if(b&&b.length>0){var d,e,f=a("translate");angular.forEach(b,function(a){e="message."+a.Code,d=f(e),d=d&&d!==e?d:a.Message,c("warning",d)})}}function g(b){if(b&&b.length>0){var d,e,f=a("translate");angular.forEach(b,function(a){e="message."+a.Code,d=f(e),d=d&&d!==e?d:a.Message,d=d||f("message.CART_UNKNOWN"),c("danger",d)})}}return{displaySuccessfulAddition:d,displaySuccessfulUpdate:e,displayWarnings:f,displayErrors:g}}]),angular.module("Volusion.toolboxCommon").factory("vnAppRoute",["$q","$rootScope","$route","$location","$routeParams","vnProductParams","vnSortDefault","vnCart","vnUser","$state",function(a,b,c,d,e,f,g,h,i,j){function k(a){a&&(l(),m(),o(),n(),p(),r(),q())}function l(){"search"===t()&&""!==f.getCategoryString()?d.search("categoryId",f.getCategoryString()):d.search("categoryId",null)}function m(){""!==f.getFacetString()?d.search("facetIds",f.getFacetString()):d.search("facetIds",null)}function n(){""!==f.getMaxPrice()?d.search("maxPrice",f.getMaxPrice()):d.search("maxPrice",null)}function o(){""!==f.getMinPrice()?d.search("minPrice",f.getMinPrice()):d.search("minPrice",null)}function p(){""!==f.getPage()&&"1"!==f.getPage()?d.search("page",f.getPage()):d.search("page",null)}function q(){"/search"===d.path()&&("/search"===d.path()&&""===f.getSearchText()?d.search("q",""):d.search("q",f.getSearchText()))}function r(){""!==f.getSort()&&g!==f.getSort()?d.search("sort",f.getSort()):d.search("sort",null)}function s(a){y=a}function t(){return y}function u(b){var c=a.defer();return f.preLoadData(b),c.resolve(!0),c.promise}function v(c){var d=a.defer(),e=function(){0===h.getCart().items.length?(d.reject(),j.go("home")):"/login"===c?d.resolve():"/checkout"===c&&""===i.getUser().email?(d.reject(),j.go("login")):d.resolve()};if(0===Object.keys(h.getCart()).length)var f=b.$on("cartUpdated",function(){e(),f()});else e();return d.promise}function w(){return i.isLoggedInOrAnon()["catch"](function(){j.go("login")})}function x(a){var b=i.getUser();return b.email&&j.go(a?a:"home"),!0}var y="";return b.$watch(function(){return f.getParamsObject()},function(){k(f.getParamsObject())},!0),{getRouteStrategy:t,setRouteStrategy:s,resolveParams:u,checkEmptyCart:v,isLoggedInOrAnon:w,isLoggedIn:x}}]),angular.module("Volusion.toolboxCommon").factory("vnBem",function(){function a(a,c){var d=[a];return angular.forEach(b(c),function(b){d.push(a+"--"+b)}),d}function b(a){return a=a&&a.replace(/^\s+|\s+$/g,""),a?a.split(/\s+/):[]}return{addClasses:function(b,c){c=c||{};var d=c.block;if(d){var e=a(d,c.blockModifiers),f=c.element;if(!f)return void angular.forEach(e,function(a){b.addClass(a)});var g=a("__"+f,c.elementModifiers);angular.forEach(e,function(a){angular.forEach(g,function(c){b.addClass(a+c)})})}}}}),angular.module("Volusion.toolboxCommon").service("vnCart",["$rootScope","vnApi",function(a,b){ -"use strict";function c(){return n}function d(){return void 0===n||void 0===n.totals?0:n.totals.qty}function e(){return b.Cart({cartId:""}).get().$promise}function f(){b.Cart({cartId:""}).get().$promise.then(function(b){n=b.data,a.$emit("cartUpdated")})}function g(a){n=a}function h(){n={}}function i(c){return b.Cart().save({cartId:n.id},c).$promise.then(function(b){angular.copy(b.data,n),n.serviceErrors=[],n.warnings=b.warnings||b.data.warnings||[],a.$emit("cartUpdated")})["catch"](function(b){angular.copy(b.data.data,n),n.serviceErrors=b.serviceErrors||b.data.serviceErrors||[],n.warnings=b.warnings||b.data.warnings||[],a.$emit("cartUpdated")})}function j(b){angular.copy(b,n.shippingAddress),a.$emit("vnShippingAddress.updated",b)}function k(b){angular.copy(b,n.billingAddress),a.$emit("vnBillingAddress.updated",b)}function l(a){angular.copy(a,n.paymentProfile)}function m(){return b.Cart().update({cartId:n.id},n).$promise.then(function(b){angular.copy(b.data,n),n.serviceErrors=[],n.warnings=b.warnings||b.data.warnings||[],a.$emit("cartUpdated")})["catch"](function(b){angular.copy(b.data.data,n),n.serviceErrors=b.serviceErrors||b.data.serviceErrors||[],n.warnings=b.warnings||b.data.warnings||[],a.$emit("cartUpdated")})}var n={};return{getCart:c,getCartItemsCount:d,init:f,initWithPromise:e,reset:h,set:g,saveCart:i,setCCPaymentProfile:l,setBillingAddress:k,setShippingAddress:j,updateCart:m}}]),angular.module("Volusion.toolboxCommon").factory("vnCheckout",["$rootScope","$location","$q","vnSiteConfig","vnCart","vnUser","vnApi","vnNotifications",function(a,b,c,d,e,f,g,h){"use strict";function i(){return g.Country().query().$promise}function j(){C.location.label="ww"===C.location.label?"us":"ww",C.location.image="us"===C.location.label?A:B}function k(a){C.billToValid=a}function l(a){C.shipToValid=a}function m(a){C.shipMethodValid=a}function n(a){C.creditCardValid=a}function o(b){angular.forEach(C.steps,function(a){a.active=!1}),void 0!==b&&(C.currentStep=b),C.steps[C.currentStep-1].active=!0,a.$emit("checkout.stepChanged")}function p(a,b){C.steps[a].hasOpenDrawer=b}function q(){return C}function r(){C.steps.length>C.currentStep&&(C.currentStep++,o())}function s(){C.user=f.getUser(),C.cart.customer.id=C.user.id}function t(){C.cart.misc.isGift=!1,C.user.anonymous&&(C.cart.customer.id=C.user.id),g.Orders().save({},C.cart).$promise.then(function(c){a.$emit("checkout.orderPlaced"),C.orderId=c.data.id,o(1),b.path("/thank-you")})["catch"](function(b){a.$emit("checkout.orderPlaced"),console.log(b),h.displayErrors(b)})}function u(){1<C.currentStep&&(C.currentStep--,o())}function v(a){e.setCCPaymentProfile(a)}function w(a){e.setBillingAddress(a)}function x(b){e.setShippingAddress(b),a.$emit("checkout.shippingaddress.changed")}function y(){e.updateCart()}function z(){var a=c.defer();return e.initWithPromise().then(function(a){e.set(a.data),C.cart=e.getCart()}).then(function(){a.resolve(C)})["catch"](function(b){a.reject(b)}),a}var A="images/us-flag.png",B="images/worldwide-flag.png",C={config:{PCIaaS:{}},location:{label:"us",image:A},cart:{},orderId:-1,currentStep:1,steps:[{active:!0,hasOpenDrawer:!1},{active:!1,hasOpenDrawer:!1},{active:!1,hasOpenDrawer:!1}],shipToValid:!1,shipMethodValid:!1,billToValid:!1,creditCardValid:!1};return d.getConfig().then(function(b){C.config=b.data.checkout,C.config.PCIaaS=b.data.PCIaaS,a.$emit("PCIaaS.updated")}),{get:q,getCountries:i,initCart:z,nextStep:r,placeOrder:t,prevStep:u,setStep:o,setCreditCardValidity:n,setBillingAddress:w,setBillToValidity:k,setCCPaymentProfile:v,setShippingAddress:x,setShipToValidity:l,setShipMethodValidity:m,setUser:s,setHasOpenDrawer:p,toggleLocation:j,updateCart:y}}]),angular.module("Volusion.toolboxCommon").factory("vnContentManager",function(){"use strict";function a(){return k}function b(){return l}function c(){return m}function d(){return n}function e(){k=!1}function f(){l=!1}function g(){k=!0,m=!1}function h(){l=!0,n=!1}function i(){k=!1,m=!0}function j(){l=!1,n=!0}var k=!0,l=!0,m=!1,n=!1;return{getFooterState:a,getHeaderState:b,getCheckoutFooterState:c,getCheckoutHeaderState:d,hideAppFooter:e,hideAppHeader:f,showAppFooter:g,showAppHeader:h,showCheckoutAppFooter:i,showCheckoutAppHeader:j}}),angular.module("Volusion.toolboxCommon").service("vnCreditCardClass",function(){return function(a){switch(angular.isString(a)?a.toUpperCase():a){case"AMEX":case"AMERICAN EXPRESS":case"7":case 7:return{type:7,"class":"th-credit-card__img--amex",name:"American Express"};case"VISA":case"5":case 5:return{type:5,"class":"th-credit-card__img--visa",name:"Visa"};case"MC":case"MASTERCARD":case"6":case 6:return{type:6,"class":"th-credit-card__img--mastercard",name:"MasterCard"};case"DISC":case"DISCOVER":case"8":case 8:return{type:8,"class":"th-credit-card__img--discover",name:"Discover"};default:return{type:0,"class":"th-credit-card__img--unknown",name:"Unknown"}}}}),angular.module("Volusion.toolboxCommon").factory("vnGeo",["$resource",function(a){"use strict";function b(){return a("https://freegeoip.net/json",{},{query:{method:"GET",isArray:!1}})}return{locate:b}}]),angular.module("Volusion.toolboxCommon").factory("vnHttpResponseInterceptor",["$q","$rootScope",function(a,b){return{response:function(b){return b||a.when(b)},responseError:function(c){return 401===c.status&&b.$emit("VN_UNAUTHORIZED_ERROR",{err:c},{status:c.status,message:c.data,resource:c.headers("resource")||""}),500===c.status&&b.$emit("VN_HTTP_500_ERROR",{err:c},{status:c.status,message:c.data,resource:c.headers("resource")||""}),a.reject(c)}}}]),angular.module("Volusion.toolboxCommon").factory("vnNotifications",["$filter","vnAppMessageService",function(a,b){"use strict";function c(a,c){b.addMessage({type:a,text:c})}function d(b){var d,e,f=a("translate");b&&b.length>0&&angular.forEach(b,function(a){e="message."+a.Code,d=f(e),d=d&&d!==e?d:a.Message,c("warning",d)})}function e(b){var d,e,f=a("translate");b&&b.length>0&&angular.forEach(b,function(a){e="message."+a.Code,d=f(e),d=d&&d!==e?d:a.Message,d=d||a,c("danger",d)})}return{displayWarnings:d,displayErrors:e,displayMsg:c}}]),angular.module("Volusion.toolboxCommon").factory("vnPayment",["$rootScope","$resource","$timeout","$q","$filter","vnCheckout","vnPCIaaS",function(a,b,c,d,e,f,g){"use strict";function h(){return A}function i(a){A.cardNumber=a.cardNumber,A.ExpireMonth=a.expMonth,A.ExpireYear=a.expYear,A.CardType=a.cardType,A.CardTypeName=a.cardTypeName,A.CardID=a.pCIaaSId}function j(a){A.CardID=a}function k(a){A.PersistCard=a}function l(a){A.CardHolderName=a}function m(a){A.cardNumber=a}function n(a){A.ExpireMonth=a}function o(a){A.ExpireYear=a}function p(a){A.CVV=a}function q(a){A.CardTypeName=a,A.CardType=e("filter")(x.config.creditCardsAccepted,function(b){return b.name.toLowerCase()===a.toLowerCase()?b.id:void 0})[0],A.CardType=void 0!==A.CardType?A.CardType.id:-1}function r(){angular.copy({cardNumber:"",mask:{},MerchantId:"",CardID:"",PersistCard:"",CardHolderName:"",ExpireMonth:"",ExpireYear:"",CVV:"",CardType:"",CardTypeName:""},A)}function s(a){return Object.getOwnPropertyNames(a).length>0?!1:!0}function t(){A.CVV=A.CVV.replace(/./g,y.maskCharacter),A.cardNumber=A.mask.display,A.mask.sent=""}function u(a){if(a&&!s(A.mask))return A.mask;var b=A.cardNumber,c=new RegExp(y.maskPattern),d=b.match(c),e=b,f=[],g=y.maskCharacter,h="";if(null!==d){for(var i=1;i<d.length;i++){h="";for(var j=0;j<d[i].length;j++)h+=g;e=e.replace(d[i],h)}for(var k=e.length-1;k>=0;k--)f.unshift(e.charAt(k)===g?b.charAt(k):g);return A.mask={display:e,sent:f.join("")},A.mask}return{display:b,sent:b}}function v(){var a={};switch(a.NumberPart=-1===A.cardNumber.indexOf(y.maskCharacter)?u(!1).sent:A.cardNumber,a.CVV=A.CVV,A.CardTypeName.toUpperCase()){case"AMERICAN EXPRESS":a.CardType="AMEX";break;case"VISA":a.CardType="VISA";break;case"MASTERCARD":a.CardType="MC";break;case"DISCOVER":a.CardType="DISC"}return JSON.stringify(a)}function w(){var a=d.defer(),b=v();return A.MerchantId=x.config.PCIaaS.merchantId,""!==A.CardID?g.Card(z.update.uri(A.CardID),A.MerchantId).update(b).$promise.then(function(b){t(),a.resolve(A)})["catch"](function(b){console.log(b),a.reject(b)}):g.Card(z.save.uri(),A.MerchantId).save(b).$promise.then(function(b){console.log(b);for(var c=0,d="";b[c];)d+=b[c],c++;A.CardID=d,t(),a.resolve(A)})["catch"](function(b){console.log(b),a.reject(b)}),a.promise}var x=f.get(),y={maskPattern:"^(\\d+?)\\d{4}$",maskCharacter:"*"},z={base:{uri:function(){return x.config.PCIaaS.url+"/cards/"}},save:{uri:function(){return z.base.uri()},method:"POST"},update:{uri:function(a){return z.base.uri()+a.toString()},method:"PUT"}},A={cardNumber:"",mask:{},MerchantId:"",CardID:"",PersistCard:"",CardHolderName:"",ExpireMonth:"",ExpireYear:"",CVV:"",CardType:"",CardTypeName:""};return{getCard:h,process:w,reset:r,setCardFrom:i,setCardId:j,setPersistCard:k,setCardHolderName:l,setCardNumber:m,setCvv:p,setExpireMonth:n,setExpireYear:o,setCardType:q}}]),angular.module("Volusion.toolboxCommon").factory("vnPciaasIframe",function(){var PCIaaS=null;return window.JSON||(window.JSON={},function(){function k(a){return 10>a?"0"+a:a}function o(a){return p.lastIndex=0,p.test(a)?'"'+a.replace(p,function(a){var b=r[a];return"string"==typeof b?b:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function l(a,b){var c,d,f,g,h,j=e,k=b[a];switch(k&&"object"==typeof k&&"function"==typeof k.toJSON&&(k=k.toJSON(a)),"function"==typeof i&&(k=i.call(b,a,k)),typeof k){case"string":return o(k);case"number":return isFinite(k)?String(k):"null";case"boolean":case"null":return String(k);case"object":if(!k)return"null";if(e+=n,h=[],"[object Array]"===Object.prototype.toString.apply(k)){for(g=k.length,c=0;g>c;c+=1)h[c]=l(c,k)||"null";return f=0===h.length?"[]":e?"[\n"+e+h.join(",\n"+e)+"\n"+j+"]":"["+h.join(",")+"]",e=j,f}if(i&&"object"==typeof i)for(g=i.length,c=0;g>c;c+=1)"string"==typeof i[c]&&(d=i[c],(f=l(d,k))&&h.push(o(d)+(e?": ":":")+f));else for(d in k)Object.prototype.hasOwnProperty.call(k,d)&&(f=l(d,k))&&h.push(o(d)+(e?": ":":")+f);return f=0===h.length?"{}":e?"{\n"+e+h.join(",\n"+e)+"\n"+j+"}":"{"+h.join(",")+"}",e=j,f}}"function"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+k(this.getUTCMonth()+1)+"-"+k(this.getUTCDate())+"T"+k(this.getUTCHours())+":"+k(this.getUTCMinutes())+":"+k(this.getUTCSeconds())+"Z":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()});var q=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,p=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,e,n,r={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},i;"function"!=typeof JSON.stringify&&(JSON.stringify=function(a,b,c){var d;if(n=e="","number"==typeof c)for(d=0;c>d;d+=1)n+=" ";else"string"==typeof c&&(n=c);if((i=b)&&"function"!=typeof b&&("object"!=typeof b||"number"!=typeof b.length))throw Error("JSON.stringify");return l("",{"":a})}),"function"!=typeof JSON.parse&&(JSON.parse=function(a,e){function c(a,b){var d,f,g=a[b];if(g&&"object"==typeof g)for(d in g)Object.prototype.hasOwnProperty.call(g,d)&&(f=c(g,d),void 0!==f?g[d]=f:delete g[d]);return e.call(a,b,g)}var d,a=String(a);if(q.lastIndex=0,q.test(a)&&(a=a.replace(q,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return d=eval("("+a+")"),"function"==typeof e?c({"":d},""):d;throw new SyntaxError("JSON.parse")})}()),function(a){var b,c,d,e,f=function(){var a=navigator.userAgent,b=/Firefox\/(\d+)/i,c=a.match(b),d=parseInt(c?c[1]||!1:!1),e=isNaN(d)?!1:d;return e}(),g={base:{uri:function(){return s(q.get("apiBase"))+"/cards/"}},save:{uri:function(){return g.base.uri()},method:"POST"},update:{uri:function(a){return g.base.uri()+a.toString()},method:"PUT"}},h=1,i=window.postMessage&&-1===navigator.userAgent.indexOf("Opera"),j="/Assets/pci_receiver.html?&parenturl="+encodeURIComponent(location.href)+"&parentdomain="+encodeURIComponent(location.protocol+"//"+location.host),k=function(a){var b=/^https?:\/\/[^/]+/i;return q.get("apiBase").match(b)[0]===a.origin.match(b)[0]},l=i?function(b){b&&(e&&l(!1),e=function(c){return c||(c=window.event),"ready"===c.data?(a.requestCallback(),!1):k(c)?void b(c):!1}),f&&4>f?window.addEventListener("message",e,!1):window.onmessage=e}:function(b){c&&clearInterval(c),c=null,c=setInterval(function(){var c=document.location.hash,e=/^#?\d+&/;return c!==d&&"ready"===c.replace(e,"")?void a.requestCallback():void(c!==d&&e.test(c)&&(d=c,b({data:c.replace(e,"")})))},100)},m=i?function(a,b){b.postMessage(a,s(q.get("apiBase")))}:function(a,b){var c=(s(q.get("apiBase"))+j).replace(/#.*$/,"")+"#"+ +new Date+h++ +"&"+a;b.location=c},n=function(c,d,e,f){var g=function(){m(c+"|||||"+d+"|||||"+e+"|||||"+f,b.contentWindow||b)};a.requestCallback=g,l(function(a){G(a.data)},s(q.get("apiBase"))),b=document.createElement("iframe"),b.style.position="absolute",b.style.left="-9999px",b.style.width="1px",b.style.height="1px",b.src=s(q.get("apiBase"))+j,document.getElementsByTagName("body")[0].appendChild(b)},o={maskPattern:"^(\\d+?)\\d{4}$",maskCharacter:"*",apiBase:window.location.protocol+"//pci."+window.location.hostname.replace("www.","")},p={error:function(a){for(var b=0;b<a.length;b++)throw"PCIaaS Error "+a[b].majorCode+": "+a[b].minorCode+": "+a[b].message}},q={get:function(a){var b=a in q?q[a]:o[a];return b?b:void x.add("-1","2",u(t.settingMissing,a))},set:function(a,b){if("object"==typeof a)for(var c in a)q[c]=a[c];else q[a]=void 0!==b?b:o[a];return q}},r=/\/$/,s=function(a){return a?a.replace(r,""):void 0},t={cardNumberInvalid:"The card number is missing or in an unrecognized format.",unknownError:"There was a processing error. Please try again.",crossDomainError:"Cannot make request due to same-origin policy. {0} cannot be accessed via AJAX from {1}.",maskFailure:"The masking pattern provided does not match the card number.",missingFields:"Missing fields object. Pass a fields object to the PCIaaS function.",fieldMissing:'Field "{0}" missing or invalid.',settingMissing:'Setting "{0}" missing or invalid.'},u=function(){for(var a=Array.prototype.slice.call(arguments,1),b=arguments[0],c=0;c<a.length;c++)b=b.replace("{"+c+"}",a[c]);return b},v=new RegExp("[\\s-]","g"),w=function(){var a=[[function(){var a=z.getValue("CardNumber",!0),b=q.get("maskCharacter");if(!a)return!1;if(-1!=a.indexOf(b))return a.match(new RegExp("[^"+b+"\\d]"))||!a.match(/\d/)?!1:!0;a=a.replace(v,"");var c,d,e,f,g;for(f="",c=0;c<a.length;c++)e=parseInt(a.charAt(c),10),e>=0&&9>=e&&(f=e+f);if(f.length<=1)return!1;for(g="",c=0;c<f.length;c++)e=parseInt(f.charAt(c),10),c%2!=0&&(e*=2),g+=e;for(d=0,c=0;c<g.length;c++)e=parseInt(g.charAt(c),10),d+=e;return 0!=d&&d%10==0?!0:!1},"-1","3",t.cardNumberInvalid]];return function(){for(var b=a.length-1;b>=0;b--)a[b][0]()||x.add(a[b][1],a[b][2],a[b][3]);return 0===x.number()}}(),x={add:function(a,b,c){c in x._register||(x._stack.push({majorCode:a,minorCode:b,message:c}),x._register[c]=!0)},clear:function(){x._stack=[],x._register={}},get:function(a){var b=x._stack.slice(0);return x.clear(),b},number:function(){return x._stack.length},_register:{},_stack:[]},y=function(a){return x.add("-1","2",u(t.fieldMissing,a))},z={get:function(a,b){return b?z[a]:a in z?z[a]:y(a)},getValue:function(a,b){var c="";if(z[a])if(z[a].tagName)switch(z[a].tagName.toLowerCase()){case"select":c=z[a].getElementsByTagName("option")[z[a].selectedIndex].value;break;case"textarea":c=z[a].innerHTML;break;case"input":switch(z[a].type){case"checkbox":case"radio":c=z[a].checked;break;default:c=z[a].value}}else c="function"==typeof z[a]?z[a]():"";return b?c:""===c?y(a):c},set:function(a,b){if("object"==typeof a)for(var c in a)z.set(c,a[c]);else z[a]=b.nodeType?b:document.getElementById(b)||("function"==typeof b?b:"");return z},setValue:function(a,b){var c=z.get(a,!0);return c.nodeType?c.value=b:"function"==typeof c?c(b):"string"==typeof c||"boolean"==typeof c?z[a]=b:void 0}},A=null,B=["PersistCard","CardHolderName","ExpireMonth","ExpireYear","CVV"],C=["CardType"],D=function(a){var b={MerchantId:q.get("merchantID")},c=z.getValue("HiddenCardID",!0),d=z.getValue("CardNumber",a);if(!d)return x.add("-1","4",t.cardNumberInvalid),!1;b.NumberPart=-1===d.indexOf(q.get("maskCharacter"))?J("nocache",a).toSend:"";for(var e=0;e<C.length;e++)b[C[e]]=z.getValue(C[e],a);for(var f=0;f<B.length;f++)B[f]in z&&""!=z.getValue(B[f],!0).toString()&&(b[B[f]]=z.getValue(B[f],!0));return c&&!a&&(b.CardId=c),JSON.stringify(b)},E=function(){return D(!0)!==A},F=function(a){var b=z.getValue("HiddenCardID",!0);if(x.clear(),a||E()){if(!w())return p.error(x.get()),!1;var c,d=D();if(!d)return p.error(x.get()),!1;if(p.preprocess&&(c=p.preprocess(d)),c===!1)return!1;if("string"==typeof c&&(d=c),0!==x.number())return p.error(x.get()),!1;A=D(!0);var e=b?g.update.uri(b):g.save.uri(),f=b?g.update.method:g.save.method;n(e,d,f,q.get("merchantID"))}else p.success&&p.success(JSON.stringify({IsSuccessful:!0,CardId:b}),z.getValue("CardNumber"),null)},G=function(a){if(document.getElementsByTagName("body")[0].removeChild(b),a=JSON.parse(a),a.IsSuccessful){a.CardId&&z.setValue("HiddenCardID",a.CardId);var c=J("cached",!0);p.success&&p.success(a,c)}else H(a)},H=function(a){if(a&&a.Items)for(var b=0;b<a.Items.length;b++)x.add(a.Items[b].MajorCode,a.Items[b].MinorCode,a.Items[b].Message);else x.add("-1","-1",t.unknownError);p.error(x.get())},I="",J=function(a,b){if("cached"==a&&""!==I)return I;var c=z.getValue("CardNumber",b).replace(v,""),d=new RegExp(q.get("maskPattern")),e=c.match(d),f=c,g=[],h=q.get("maskCharacter"),i="";if(null!==e){for(var j=1;j<e.length;j++){i="";for(var k=0;k<e[j].length;k++)i+=h;f=f.replace(e[j],i)}for(var l=f.length-1;l>=0;l--)g.unshift(f.charAt(l)===h?c.charAt(l):h);return I={toDisplay:f,toSend:g.join("")}}return{toDisplay:c,toSend:c}},K=function(a){var b=a||J("cached");b&&(z.setValue("CardNumber",b.toDisplay),z.getValue("CVV")&&z.setValue("CVV",z.getValue("CVV").replace(/./g,q.get("maskCharacter"))))},L=function(a){if(a.settings&&q.set(a.settings),a.events)for(var b in a.events)p[b]=a.events[b];return a.fields?z.set(a.fields):(x.add("-1","2",t.missingFields),p.error(x.get())),{settings:q,fields:z,events:p,process:F,applyMask:K}};"function"==typeof define&&define.amd&&define(function(){return L}),PCIaaS=L}(window),{PCIaaS:PCIaaS}}),angular.module("Volusion.toolboxCommon").factory("vnPCIaaS",["$resource",function(a){"use strict";function b(b,c){var d={resource:"PCIaaS","Content-Type":"application/json",Accept:"application/json",MerchantId:c};return a(b,{},{save:{method:"POST",withCredentials:!0,headers:d},update:{method:"PUT",withCredentials:!0,headers:d}})}return{Card:b}}]),angular.module("Volusion.toolboxCommon").factory("vnImagePreloader",["$q","$rootScope",function(a,b){"use strict";function c(b){this.imageLocations=b,this.imageCount=this.imageLocations.length,this.loadCount=0,this.errorCount=0,this.states={PENDING:1,LOADING:2,RESOLVED:3,REJECTED:4},this.state=this.states.PENDING,this.deferred=a.defer(),this.promise=this.deferred.promise}return c.preloadImages=function(a){var b=new c(a);return b.load()},c.prototype={constructor:c,isInitiated:function(){return this.state!==this.states.PENDING},isRejected:function(){return this.state===this.states.REJECTED},isResolved:function(){return this.state===this.states.RESOLVED},load:function(){if(this.isInitiated())return this.promise;this.state=this.states.LOADING;for(var a=0;a<this.imageCount;a++)this.loadImageLocation(this.imageLocations[a]);return this.promise},handleImageError:function(a){this.errorCount++,this.isRejected()||(this.state=this.states.REJECTED,this.deferred.reject(a))},handleImageLoad:function(a){this.loadCount++,this.isRejected()||(this.deferred.notify({percent:Math.ceil(this.loadCount/this.imageCount*100),imageLocation:a}),this.loadCount===this.imageCount&&(this.state=this.states.RESOLVED,this.deferred.resolve(this.imageLocations)))},loadImageLocation:function(a){var c=this,d=$(new Image).load(function(a){b.$apply(function(){c.handleImageLoad(a.target.src),c=d=a=null})}).error(function(a){b.$apply(function(){c.handleImageError(a.target.src),c=d=a=null})}).prop("src",a)}},c}]),angular.module("Volusion.toolboxCommon").factory("vnProductParams",function(){"use strict";function a(a){I.length=0,I.push(a),K.categoryIds=d()}function b(a){J.push(a),K.facets=e()}function c(){return K.accessoriesOf}function d(){return I.join(",")}function e(){return J.join(",")}function f(){return K.maxPrice}function g(){return K.minPrice}function h(){return K.page}function i(){return K.pageSize}function j(){return K}function k(){return K.search}function l(){return K.sort}function m(a){return J.indexOf(a)>-1}function n(){K.page++}function o(c){if(c.categoryId&&a(parseInt(c.categoryId)),c.facetIds){var d=c.facetIds.split(",");angular.forEach(d,function(a){m(parseInt(a))||b(parseInt(a))})}c.minPrice&&D(c.minPrice),c.maxPrice&&C(c.maxPrice),c.q&&H(c.q),c.sort&&G(c.sort),c.page&&E(c.page)}function p(){K.page--}function q(){K.slug=""}function r(){K.search=""}function s(){K.minPrice=""}function t(){K.maxPrice=""}function u(){K.accessoriesOf=""}function v(a){var b=I.indexOf(a);I.splice(b,1),K.categoryIds=d()}function w(a){var b=J.indexOf(a);J.splice(b,1),K.facets=e()}function x(){K.sort=""}function y(){I=[],K.categoryIds=""}function z(){J=[],K.facets=""}function A(){I=[],J=[],K={categoryIds:"",slug:"",facets:"",minPrice:"",maxPrice:"",accessoriesOf:"",sort:"",page:"",pageSize:""}}function B(a){K.accessoriesOf=a}function C(a){K.maxPrice=a}function D(a){K.minPrice=a}function E(a){K.page=a}function F(a){K.pageSize=a}function G(a){K.sort=a}function H(a){K.search=decodeURIComponent(a)}var I=[],J=[],K={categoryIds:"",slug:"",facets:"",minPrice:"",maxPrice:"",accessoriesOf:"",sort:"",page:"",pageSize:""};return{addCategory:a,addFacet:b,getAccessoriesOf:c,getCategoryString:d,getFacetString:e,getMaxPrice:f,getMinPrice:g,getPage:h,getPageSize:i,getParamsObject:j,getSearchText:k,getSort:l,isFacetSelected:m,nextPage:n,preLoadData:o,previousPage:p,removeSlug:q,removeSearch:r,removeMinPrice:s,removeMaxPrice:t,removeAccessoriesOf:u,removeCategory:v,removeFacet:w,removeSort:x,resetCategories:y,resetFacets:z,resetParams:A,setAccessoriesOf:B,setMaxPrice:C,setMinPrice:D,setPage:E,setPageSize:F,setSort:G,updateSearch:H}}),angular.module("Volusion.toolboxCommon").factory("vnProduct",["vnImagePreloader",function(a){"use strict";function b(){var a=[];if(!q.options)return a;for(var c=0;c<q.options.length;c++){var d=q.options[c];if(d.isRequired&&!d.hasOwnProperty("selected")&&a.push(d.label),d.options.length>0)for(var e=b(d.options),f=0;f<e.length;f++)a.push(e[f].label)}return a}function c(){var a=[];if(!q.options)return a;for(var b=0;b<q.options.length;b++){var c=q.options[b];c.isRequired&&c.derivesToSKU&&a.push(c.label)}return a.length}function d(){var b=[];angular.forEach(q.imageCollections,function(a){angular.forEach(a.images,function(a){b.push(a.medium)})}),a.preloadImages(b)}function e(a){if("undefined"==typeof a)return!0;var b,d=0,e=1===c();return b=q.optionSKUs.filter(function(b){return b.key===a}),b.length>0&&(e||b[0].key.indexOf("|")>-1)?(d=b[0].quantityInStock,null===d||d>0):0===b.length?q.availability.allowBackOrders||null===q.availability.quantityInStock||q.availability.quantityInStock>0:!1}function f(){var a,b=0;if(q.options.length>0&&q.optionSKUs.length>0){for(var c=0;c<q.optionSKUs.length;c++)b|=e(q.optionSKUs[c].key);a=0===b}else a=!q.availability.allowBackOrders&&null!==q.availability.quantityInStock&&q.availability.quantityInStock<=0;return a}function g(){var a=!1;if(0===q.options.length)a=q.availability.allowBackOrders||null===q.availability.quantityInStock||q.availability.quantityInStock>0;else{var b=1===q.options.length?q.optionSelection.option.key+":"+q.optionSelection.option.selected:q.optionSelection.key;a=e(b)}return a}function h(a){return q=a,q.optionSelection={option:{selected:"default"}},q.imageCollections.length>0&&q.imageCollections[0].images.length>0&&(q.image=q.imageCollections[0].images[0]),d(),q}function i(a,b){q.sharing={facebook:"http://www.facebook.com/sharer.php?u="+a+"&t="+b,twitter:"http://twitter.com/share?url="+a+"&text="+b,tumblr:"http://www.tumblr.com/share/link?url="+a+"&name="+b,googlePlus:"https://plus.google.com/share?url="+a}}function j(a){q.isEditable=a}function k(a){angular.forEach(q.imageCollections,function(b){b.key===a&&(q.image=b.images[0],q.currentImageCollection=b.images)})}function l(a){q.optionSelection&&q.optionSelection.quantityInStock-a>=0&&(q.optionSelection.quantityInStock-=a)}function m(){return q.cartItem}function n(){return void 0!==q.image?q.image:null}function o(a){0!==a.length&&(1===a.length&&(a[1]=a[0],a[2]=a[0]),void 0===q.image&&(q.image={}),q.image.medium=a[0],q.image.large=a[1],q.image.small=a[2])}function p(){return q.seo}var q={};return{set:h,setEditable:j,setSocialSharing:i,setProductImage:k,getProductCart:m,getProductImage:n,setProductNoImage:o,setQuantityInStock:l,getProductSEO:p,findAvailability:f,findOptionAvailability:e,findRequiredOptionsAreSelected:b,isSelectionAvailable:g}}]),angular.module("Volusion.toolboxCommon").constant("vnResourceTypes",{article:"article",billingaddresses:"billingaddresses",cart:"cart",category:"category",config:"config",countries:"countries",nav:"nav",orders:"orders",paymentprofiles:"paymentprofiles",product:"product",reviews:"reviews",themesettings:"themesettings",user:"user",shippingaddresses:"shippingaddresses"}),angular.module("Volusion.toolboxCommon").constant("vnSortDefault","relevance"),angular.module("Volusion.toolboxCommon").service("vnUser",["$q","$state","vnApi",function(a,b,c){"use strict";function d(){return H}function e(){return H.anonymous}function f(){var b=a.defer();return!H.anonymous&&H.email?b.resolve():b.reject(),b.promise}function g(){var b=a.defer();return H.email?b.resolve():b.reject(),b.promise}function h(a){return c.ShippingAddresses().save({},a).$promise}function i(a){return c.BillingAddresses().save({},a).$promise}function j(a){return c.BillingAddresses()["delete"]({id:a.id}).$promise}function k(a){return c.ShippingAddresses()["delete"]({id:a.id}).$promise}function l(a){return c.PaymentProfiles()["delete"]({id:a.id}).$promise}function m(a){return c.PaymentProfiles().save({},a).$promise}function n(){var b=a.defer();return c.User().get().$promise.then(function(d){angular.extend(H,d.data),a.all([c.ShippingAddresses().get().$promise,c.BillingAddresses().get().$promise,c.PaymentProfiles().get().$promise]).then(function(a){H.shippingAddresses=a[0].data,H.billingAddresses=a[1].data,H.paymentProfiles=a[2].data,b.resolve(H)})["catch"](function(a){b.reject(a)})}),b}function o(){var b=a.defer();return p(1,3).then(function(a){b.resolve(a.data)},function(a){b.reject(a)}),b.promise}function p(b,d){var e=a.defer();return c.CustomerOrders().get({page:b,pageSize:d}).$promise.then(function(a){e.resolve(a)},function(a){e.reject(a)}),e.promise}function q(){var b=a.defer();return c.PaymentProfiles().get().$promise.then(function(a){H.paymentProfiles=a.data,b.resolve(a.data)},function(a){b.reject(a)}),b.promise}function r(){var b=a.defer();return c.ShippingAddresses().get().$promise.then(function(a){H.shippingAddresses=a.data,b.resolve(a.data)},function(a){b.reject(a)}),b.promise}function s(){var b=a.defer();return c.BillingAddresses().get().$promise.then(function(a){H.billingAddresses=a.data,b.resolve(a.data)},function(a){b.reject(a)}),b.promise}function t(){var b=a.defer();return c.User().get().$promise.then(function(a){angular.extend(H,a.data),b.resolve(H)},function(a){b.reject(a)}),b.promise}function u(a){return H.email=a.email,H.password=a.password,H.firstName=a.firstName,H.lastName=a.lastName,H.emailOptIn=a.emailOptIn,H.anonymous=a.anonymous,H.autoLogin=a.autoLogin,c.User().save({},H).$promise}function v(a){H.id=a}function w(a){H.email=a}function x(a){H.password=a}function y(a){H.firstName=a}function z(a){H.lastName=a}function A(a){H.emailOptIn=a}function B(a){H.anonymous=a}function C(){H={}}function D(a){return c.BillingAddresses().update({id:a.id},a).$promise}function E(a){return c.ShippingAddresses().update({id:a.id},a).$promise}function F(a){return c.PaymentProfiles().update({id:a.id},a).$promise}function G(){var a=c.User().update({id:H.id},H).$promise;return a.then(function(a){angular.copy(a.data,H),H.serviceErrors=[],H.warnings=a.warnings||a.data.warnings||[]})["catch"](function(a){H.serviceErrors=[],H.warnings=[],a&&(a.serviceErrors&&(H.serviceErrors=a.serviceErrors),a.warnings&&(H.warnings=a.warnings),a.data&&(a.data.data&&angular.copy(a.data.data,H),a.data.serviceErrors&&(H.serviceErrors=a.data.serviceErrors),a.data.warnings&&(H.warnings=a.data.warnings)))}),a}var H={email:"",password:"",firstName:"",lastName:"",emailOptIn:!1,anonymous:!0,customFields:{},autoLogin:!0};return{createFrom:u,getUser:d,getBillingAddresses:s,setBillingAddress:i,deleteBillingAddress:j,deleteShippingAddress:k,deletePaymentProfile:l,getLastThreeOrders:o,getPagedOrders:p,getPaymentProfiles:q,getShippingAddresses:r,setShippingAddress:h,getCurrent:n,getCurrentUser:t,isAnonymous:e,isLoggedIn:f,isLoggedInOrAnon:g,reset:C,setId:v,setEmail:w,setPassword:x,setFirstName:y,setLastName:z,setEmailOptIn:A,setAnonymous:B,setPaymentProfile:m,updateBillingAddress:D,updateShippingAddress:E,updatePaymentProfile:F,updateUser:G}}]),angular.module("Volusion.toolboxCommon").factory("vnUtils",function(){"use strict";var a={};return a.checkDisallowedCharacters=function(a){return unescape(a).match(/[^\w\s!#().?\[\]'"~`\-]+/g)},a.checkDisallowedCharactersForPostalCode=function(a){return unescape(a).match(/[^\w\s\-]+/g)},a}),angular.module("Volusion.toolboxCommon").controller("ShipMethodCtrl",["$scope","vnCheckout",function(a,b){"use strict";var c=1;a.checkout=b.get(),a.currentShippingMethodIdx=0,a.isEditable=function(){return a.checkout.currentStep===c?"edit":"show"},a.setPreferredShippingMethod=function(c){angular.forEach(a.checkout.cart.shippingMethods,function(d){return a.checkout.cart.shippingMethods[c].id===d.id?(a.currentShippingMethodIdx=c,d.selected=!0,void b.setShipMethodValidity(!0)):void(d.selected=!1)}),b.updateCart()}}]),angular.module("Volusion.toolboxCommon").controller("ShipToViewsCtrl",["$scope","$rootScope","$window","vnAddressUtilities","vnCheckout","vnUser",function(a,b,c,d,e,f){var g=this;g.state=null,g.showCopyAddress=!1,g.showSaveButton=!0,g.init=function(){g.checkout=e.get(),g.user=f.getUser(),g.user.anonymous?(g.shippingAddress=d.createEmptyAddress(),g.state="EDITADDRESS"):f.getShippingAddresses().then(function(){g.user.shippingAddresses&&g.user.shippingAddresses.length?(g.shippingAddress=d.getPreferredAddress(g.user.shippingAddresses),g.saveShippingAddress()):(g.shippingAddress=d.createEmptyAddress(),g.state="EDITADDRESS")}),e.getCountries().then(function(a){g.countries=a.data})},g.editShippingAddress=function(){g.state=!g.user.anonymous&&g.user.shippingAddresses&&g.user.shippingAddresses.length?"PICKADDRESS":"EDITADDRESS",a.$emit("vnShipTo.edit")},g.onAddressSelected=function(){g.shippingAddress=d.getPreferredAddress(g.user.shippingAddresses),g.saveShippingAddress()},g.onAddressAdded=function(a){g.shippingAddress=a,g.saveShippingAddress()},g.saveShippingAddress=function(){c.scrollTo(0,0),b.$emit("checkout.stepOneLoading"),e.setShipToValidity(!0),e.setShippingAddress(g.shippingAddress),f.setShippingAddress(g.shippingAddress),e.updateCart(),g.state="VIEWADDRESS",a.$emit("vnShipTo.edit.done")};var h=b.$on("cartUpdated",function(){b.$emit("checkout.stopLoading")});a.$on("$destroy",function(){h()})}]),angular.module("Volusion.toolboxCommon").controller("ThankYouCtrl",["$scope","vnCheckout","lodash","$location",function(a,b,c,d){ -"use strict";var e=b.get();return"undefined"==typeof e.orderId||-1===e.orderId?void d.path("/"):(a.orderId=e.orderId,a.userEmail=e.user.email,a.checkout=angular.copy(e,{}),b.updateCart(),void(a.shippingMethod=c.find(a.checkout.cart.shippingMethods,function(a){return a.selected===!0})))}]),angular.module("Volusion.toolboxCommon").service("themeSettings",["$q","vnApi",function(a,b){function c(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}function d(){c(g)&&b.ThemeSettings().get().$promise.then(function(a){g=a})}function e(){return g.itemsPerPage||8}function f(){var d=a.defer();return c(g)?b.ThemeSettings().get().$promise.then(function(a){d.resolve(a),g=a}):d.resolve(g),d.promise}var g={};return{init:d,getThemeSettings:f,getPageSize:e}}]),angular.module("Volusion.toolboxCommon").factory("storage",["$window","$cookieStore",function(a,b){function c(){return{get:function(b){var c=a.localStorage.getItem(b);return null===c?d(b):c},set:function(b,c){return a.localStorage.setItem(b,c)},remove:function(b){return a.localStorage.removeItem(b)}}}function d(a){var c=b.get(a);return"undefined"==typeof c?null:c}function e(){return{get:function(a){return d(a)},set:function(a,c){return b.put(a,c)},remove:function(a){return b.remove(a)}}}return"localStorage"in a&&null!==a.localStorage?c():e()}]);var storageKey="VN_TRANSLATE";if(Translate.prototype.getConfig=function(){var a=this.storage,b=JSON.parse(a.get(storageKey))||{},c=a.get("NG_TRANSLATE_LANG_KEY");return!this.disableTranslations&&c&&"undefined"!==c&&(b.lang=c),b},Translate.prototype.configure=function(a){a=angular.extend(this.getConfig(),a),this.storage.set(storageKey,JSON.stringify(a)),this.$translate.use(a.lang)},Translate.prototype.addParts=function(){if(this.disableTranslations)return!0;var a=this.$translatePartialLoader;return angular.forEach(arguments,function(b){a.addPart(b)}),this.$translate.refresh()},TranslateProvider.prototype.$get=["$translate","$translatePartialLoader","storage",function(a,b,c){var d=this.options;return new Translate(a,b,c,{region:d.region,lang:d.lang,country:d.country},d.disableTranslations)}],TranslateProvider.prototype.configure=function(a){a=angular.extend({region:"us",lang:"en",country:"us"},a),a.lang&&this.setPreferredLanguage(a.lang),this.options=a,a.disableTranslations||this.initTranslateProvider(a.lang)},TranslateProvider.prototype.initTranslateProvider=function(a){var b=this.$translateProvider;b.useLoader("$translatePartialLoader",{urlTemplate:"/translations/{part}/{lang}.json"}),"en"===a&&b.useMessageFormatInterpolation(),b.useLocalStorage()},angular.module("Volusion.toolboxCommon").provider("translate",["$translateProvider",TranslateProvider]),angular.module("Volusion.toolboxCommon").filter("vnCreditCard",function(){"use strict";return function(a,b){if(void 0===a||""===a)return a;var c=[];if(b=b.toUpperCase(),(-1!==a.indexOf("*")&&"AMEX"!==b&&"AMERICAN EXPRESS"!==b&&19===a.length||("AMEX"===b||"AMERICAN EXPRESS"===b)&&18===a.length)&&(a=a.replace(/[\s]+/g,"")),"AMEX"===b||"AMERICAN EXPRESS"===b||/^(34)|^(37)/.test(a)){c=a.slice(0,15).match(/(.{0,4})(.{0,6})(.{0,5})$/),c.splice(0,1);for(var d=0;d<c.length;d++)""===c[d]&&(c.splice(d,1),d=0)}else c=a.slice(0,16).match(/.{1,4}/g);return null!==c?c.join(" "):a}}),angular.module("Volusion.toolboxCommon").filter("vnFormattedCurrency",["$filter","$locale",function(a,b){"use strict";return function(c,d){if(void 0===c||null===c)return"";var e=a("currency")(c,d),f=e.split(b.NUMBER_FORMATS.DECIMAL_SEP);return f[1].indexOf("00")>-1?f[0]+f[1].substring(2):f[0]+'<span class="th-price--cents">'+f[1]+"</span>"}}]),angular.module("Volusion.toolboxCommon").filter("html",["$sce",function(a){"use strict";return function(b){return a.trustAsHtml(b)}}]),angular.module("Volusion.toolboxCommon").filter("reverse",function(){"use strict";return function(a){return void 0===a?null:a.slice().reverse()}}),angular.module("Volusion.toolboxCommon").filter("seoFriendly",function(){"use strict";return function(a){var b=a.match(/[0-9a-z]+/gi);return b?b.join("-"):""}}),angular.module("Volusion.toolboxCommon").filter("vnUsPhone",function(){"use strict";return function(a){if(void 0===a||""===a)return a;a=a.replace(/[^\d]+/g,"");var b,c="";return b=a.slice(0,14).match(/(.{0,3})(.{0,3})(.{0,4})(.{0,4})$/),b.splice(0,1),3!==b[0].length?a:(c="("+b[0]+")",b[1].length>0&&(c+=" "+b[1]),b[2].length>0&&(c+="-"+b[2]),b[3].length>0&&(c+=" ext."+b[3]),c)}}),angular.module("Volusion.toolboxCommon").directive("vnEmailValidate",[function(){"use strict";return{require:"ngModel",link:function(a,b,c,d){d.$parsers.unshift(function(b){return a.emailEmpty=b&&b.length>0?"valid":void 0,a.validEmail=b&&/^[\w\.\-]+@[a-zA-Z\d_.-]+?\.[a-zA-Z]{2,3}$/.test(b)?"valid":void 0,a.emailEmpty&&a.validEmail?(d.$setValidity(d.$name,!0),b):void d.$setValidity(d.$name,!1)})}}}]).directive("vnPasswordValidate",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(a,b,c,d){d.$parsers.unshift(function(b){return a.pwdValidLength=b&&b.length>=6?"valid":void 0,a.pwdValidLength?(d.$setValidity("password",!0),b):void d.$setValidity("password",!1)})}}}]).directive("vnFirstNameValidate",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(b,c,d,e){e.$parsers.unshift(function(c){return b.firstNameMinValidLength=c&&c.length>=1?"valid":void 0,b.firstNameDisallowedChars=a.checkDisallowedCharacters(c),b.firstNameAllowedChars=c&&null===b.firstNameDisallowedChars?"valid":void 0,b.firstNameMinValidLength&&b.firstNameAllowedChars?(e.$setValidity("firstName",!0),c):void e.$setValidity("firstName",!1)})}}}]).directive("vnLastNameValidate",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(b,c,d,e){e.$parsers.unshift(function(c){return b.lastNameMinValidLength=c&&c.length>=1?"valid":void 0,b.lastNameDisallowedChars=a.checkDisallowedCharacters(c),b.lastNameAllowedChars=c&&null===b.lastNameDisallowedChars?"valid":void 0,b.lastNameMinValidLength&&b.lastNameAllowedChars?(e.$setValidity("lastName",!0),c):void e.$setValidity("lastName",!1)})}}}]).directive("vnStreetValidate",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(b,c,d,e){e.$parsers.unshift(function(c){return b.streetEmpty=c&&c.length>0?"valid":void 0,b.streetDisallowedChars=a.checkDisallowedCharacters(c),b.streetAllowedChars=c&&null===b.streetDisallowedChars?"valid":void 0,b.streetAllowedChars&&b.streetEmpty?(e.$setValidity("street",!0),c):void e.$setValidity("street",!1)})}}}]).directive("vnCityValidate",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(b,c,d,e){e.$parsers.unshift(function(c){return b.cityEmpty=c&&c.length>0?"valid":void 0,b.cityDisallowedChars=a.checkDisallowedCharacters(c),b.cityAllowedChars=c&&null===b.cityDisallowedChars?"valid":void 0,b.cityAllowedChars&&b.cityEmpty?(e.$setValidity("city",!0),c):void e.$setValidity("city",!1)})}}}]).directive("vnRegionValidate",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(b,c,d,e){e.$parsers.unshift(function(c){return b.regionEmpty=c&&c.length>0?"valid":void 0,b.regionDisallowedChars=a.checkDisallowedCharacters(c),b.regionAllowedChars=c&&null===b.regionDisallowedChars?"valid":void 0,b.regionAllowedChars&&b.regionEmpty?(e.$setValidity("region",!0),c):void e.$setValidity("region",!1)})}}}]).directive("vnRequiredFieldValidate",[function(){"use strict";return{require:"ngModel",link:function(a,b,c,d){var e=(c.vnRequiredFieldValidate||d.$name||"")+"Required";d.$parsers.unshift(function(b){return a[e]=b&&b.length>=1?"valid":void 0,a[e]?(d.$setValidity(e,!0),b):void d.$setValidity(e,!1)})}}}]).directive("vnSpecialCharsValidate",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(b,c,d,e){var f=d.vnSpecialCharsValidate||e.$name;e.$parsers.unshift(function(c){var d=f+"AllowedChars",g=f+"DisallowedChars";return b[g]=a.checkDisallowedCharacters(c),b[d]=c&&null===b[g]?"valid":void 0,b[d]?(e.$setValidity(f,!0),c):void e.$setValidity(f,!1)})}}}]).directive("vnZipValidate",function(){"use strict";return{require:"ngModel",link:function(a,b,c,d){d.$parsers.unshift(function(b){return a.zipHasValidFormat=b&&/^\d{5}(-\d{4})?$/.test(b)?"valid":void 0,a.zipHasValidFormat?(d.$setValidity("zip",!0),b):void d.$setValidity("zip",!1)})}}}).directive("vnPostalCodeValidate",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(b,c,d,e){e.$parsers.unshift(function(c){return b.postalCodeEmpty=c&&c.length>0?"valid":void 0,b.postalCodeDisallowedChars=a.checkDisallowedCharactersForPostalCode(c),b.postalCodeAllowedChars=c&&null===b.postalCodeDisallowedChars?"valid":void 0,b.postalCodeAllowedChars&&b.postalCodeEmpty?(e.$setValidity("postalCode",!0),c):void e.$setValidity("postalCode",!1)})}}}]).directive("vnUsPhoneValidate",function(){"use strict";return{require:"ngModel",link:function(a,b,c,d){d.$parsers.unshift(function(b){return a.usPhoneHasValidFormat=b&&/\d{10,14}$/.test(b)?"valid":void 0,a.usPhoneHasValidFormat?(d.$setValidity("usPhone",!0),b):void d.$setValidity("usPhone",!1)})}}}).directive("vnCvvValidate",function(){"use strict";return{require:"ngModel",link:function(a,b,c,d){d.$parsers.unshift(function(c){var e="",f=b.attr("data-vn-cc-type").toUpperCase();if("AMEX"!==f&&"AMERICAN EXPRESS"!==f&&"***"===c||("AMEX"===f||"AMERICAN EXPRESS"===f)&&"****"===c)a.cvvValidFormat="valid",e=c;else{var g=/^\d{3}?$/;e=c.replace(/[^\d]+/g,""),a.cvvLength=3,("AMEX"===f||"AMERICAN EXPRESS"===f)&&(g=/^\d{4}?$/,a.cvvLength=4),b.attr("maxlength",a.cvvLength),a.cvvValidFormat=e&&g.test(e)?"valid":void 0}return d.$setValidity("cvv","valid"===a.cvvValidFormat),e})}}}).directive("vnCcValidate",function(){"use strict";function a(a){var b=[[0,2,4,6,8,1,3,5,7,9],[0,1,2,3,4,5,6,7,8,9]],c=0;return a.replace(/[\d]/g,function(a,d,e){c+=b[e.length-d&1][parseInt(a,10)]}),c%10===0&&c>0?"valid":void 0}return{require:"ngModel",link:function(b,c,d,e){e.$parsers.unshift(function(d){var f="",g=c.attr("data-vn-cc-type").toUpperCase();if(-1!==d.indexOf("*")&&"AMEX"!==g&&"AMERICAN EXPRESS"!==g&&19===d.length||("AMEX"===g||"AMERICAN EXPRESS"===g)&&18===d.length)b.creditCardValid="valid",f=d;else{var h=16,i=3;("AMEX"===g||"AMERICAN EXPRESS"===g)&&(h=15,i=2),c.attr("maxlength",h+i),f=d.replace(/[^\d]+/g,"").slice(0,h),b.creditCardValid=f.length===h?a(f):void 0}return e.$setValidity("creditcard","valid"===b.creditCardValid),c.val(f),f})}}}),angular.module("Volusion.toolboxCommon").factory("vnViewPortWatch",["$rootScope","$window",function(a,b){"use strict";return{setBreakpoints:function(c){"undefined"!=typeof b.enquire&&angular.forEach(c,function(c){c.mediaQuery&&b.enquire.register(c.mediaQuery,{match:function(){c.onMatch&&"function"==typeof c.onMatch&&c.onMatch(),a.$emit("vnViewPortWatch:Match",c)},unmatch:function(){c.onUnmatch&&"function"==typeof c.onUnmatch&&c.onUnmatch(),a.$emit("vnViewPortWatch:Unmatch",c)}})})}}}]),angular.module("Volusion.toolboxCommon.templates",[]).run(["$templateCache",function(a){a.put("vn-faceted-search/vn-category-search.html",'<div class=vn-category-search__category-items data-ng-repeat="cat in categories" data-ng-class="{ \'-last\': $last }">\n\n <a href data-ng-if="cat.displayStrategy == \'categoryDisplayTwo\' || cat.displayStrategy == \'categoryDisplayThree\' " data-ng-click=buildAppUrl(cat) class=vn-category-search__category-items__category-title data-ng-class="{ \'-noborder\': $last && cat.displayStrategy == \'categoryDisplayOne\' }">\n\n <span data-ng-if="cat.displayStrategy == \'categoryDisplayTwo\' " class="glyphicon glyphicon-chevron-left"></span>\n {{ cat.name }}\n </a>\n <span class=vn-category-search__category-items__category-title data-ng-if="cat.displayStrategy == \'categoryDisplayOne\' ">{{ cat.name }}</span>\n <div class=vn-category-search__category-items__category-item data-ng-repeat="subCat in cat.subCategories" data-ng-class="{ \'-noborder\': $last }">\n\n <span data-ng-if=subCat.hideSubCatLink>{{ subCat.name }}</span>\n <a href data-ng-if=!subCat.hideSubCatLink data-ng-click=buildAppUrl(subCat)>{{ subCat.name }}</a>\n </div>\n</div>'),a.put("vn-faceted-search/vn-facet-search.html",'<div data-accordion-group class=facet-item data-ng-repeat="facet in facets track by $index" data-is-open=defaultAccordianOpen>\n <div data-accordion-heading>\n <div>\n <span>{{ facet.title }}</span>\n <i class="pull-right glyphicon" data-ng-class="{\'glyphicon-chevron-down\': defaultAccordianOpen, \'glyphicon-chevron-right\': !defaultAccordianOpen}"></i>\n </div>\n </div>\n <div data-ng-if="facet.displayType != \'swatches\'" class=facet-properties>\n <label class=facet-property data-ng-repeat="property in facet.properties track by $index" data-ng-class="{ \'-last\': $last }">\n\n <input type=checkbox name=property.name data-ng-checked=selectProperty(property) data-ng-click="refineFacetSearch(property)">\n <span class=name>{{ property.name }}</span>\n <span class=count>{{ property.count }}</span>\n </label>\n </div>\n <div data-ng-if="facet.displayType == \'swatches\'" class="facet-properties clearfix">\n <div data-ng-repeat="property in facet.properties" class=facet-property__swatch data-ng-click=refineFacetSearch(property) data-ng-class="{\'facet-property__swatch--selected\': selectProperty(property)}">\n <div class=facet-property__swatch--color data-ng-style="{\'backgroundColor\': property.color }">\n </div>\n </div>\n </div>\n</div>'),a.put("vn-faceted-search/vn-faceted-search.html",'<div class=vn-faceted-search-header data-ng-show=showApplyButton>\n <button class="btn btn-success __cancel-action" href data-ng-click=dismissMobileFilters()>Apply\n </button>\n \n <button class="btn __clear-action" href data-ng-click=clearAllFilters()>Clear\n </button>\n \n</div>\n<div class=-faceted-search data-ng-show=showFacetSearch>\n <div class=facets>\n <div data-accordion data-close-others=false>\n\n \n <div data-accordion-group class=facet-item__by-category data-is-open=categoryAccordiansOpen data-ng-show="categoryList.length > 0">\n <div data-accordion-heading>\n <div>\n <span>Category</span>\n <i class="pull-right glyphicon" data-ng-class="{\'glyphicon-chevron-down\': categoryAccordiansOpen, \'glyphicon-chevron-right\': !categoryAccordiansOpen}"></i>\n </div>\n </div>\n <div vn-category-search categories=categoryList query-products=queryProducts() data-ng-show=showCategorySearch class=category-search>\n </div>\n </div>\n\n \n <div vn-facet-search facets=facets query-products=queryProducts() data-ng-show="facets.length > 0"></div>\n\n \n <div data-accordion-group class=facet-item__by-price data-is-open=priceAccordiansOpen data-ng-show="facets.length > 0">\n <div data-accordion-heading>\n <div>\n <span>Price</span>\n <i class="pull-right glyphicon" data-ng-class="{\'glyphicon-chevron-down\': priceAccordiansOpen, \'glyphicon-chevron-right\': !priceAccordiansOpen}"></i>\n </div>\n </div>\n <div class=facet-item__by-price__inputs vn-price-search query-products=queryProducts()></div>\n </div>\n </div>\n\n \n <div class=vn-faceted-search-footer data-ng-show=!showApplyButton>\n <button class="btn __clear-action" href data-ng-click=clearAllFilters()>Reset Filters\n </button>\n \n </div>\n\n </div>\n</div>'),a.put("vn-faceted-search/vn-price-search.html",'<input data-ng-model=minPrice data-ng-keypress=searchByPrice($event) placeholder="$">\n to \n<input data-ng-model=maxPrice data-ng-keypress=searchByPrice($event) placeholder="$$">\n<button class="btn btn-default facet-item__by-price__button" type=button ng-click=searchByPrice($event)>Go\n</button>'),a.put("vn-faceted-search/vn-sort-search.html",'<div class=dropdown>\n <button class="btn btn-default dropdown-toggle" type=button id=dropdownMenu1 data-toggle=dropdown>\n Sort by\n <span class=caret></span>\n </button>\n <ul class=dropdown-menu role=menu aria-labelledby=dropdownMenu1>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'relevance\')">Relevance</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'highest price\')">Highest price</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'lowest price\')">Lowest price</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'relevance\')">Popularity</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'newest\')">Newest</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'oldest\')">Oldest</a>\n </li>\n </ul>\n</div>'),a.put("vn-place-order-btn/vn-place-order-btn.html",'<div class=th-checkout__place-order-fixed data-ng-class="{ \'th-checkout__place-order-fixed--active\': placeOrderFixed}" data-ng-if=checkout.steps[2].active>\n <button class="btn btn-primary btn-block btn-lg th-checkout__place-order-fixed__btn" data-ng-click=placeOrder()>\n Place Order\n </button>\n</div>'),a.put("vn-product-option/checkboxes.html",'<label data-vn-block=vn-labeled-checkbox data-vn-modifiers={{option.class}} data-ng-repeat="item in option.items" data-ng-init=item>\n\n <div data-vn-element=checkbox>\n <input type=checkbox data-ng-click="onCheckboxClicked(option, item)">\n </div>\n\n <div data-vn-element=content data-ng-include=" \'vn-product-option/content.html\' "></div>\n</label>'),a.put("vn-product-option/content.html",'<div data-vn-element=color-image>\n <div data-vn-element=color data-ng-show=item.color style="background-color: {{item.color}}"></div>\n <img data-vn-element=image data-ng-show=item.swatchImage data-ng-src={{item.swatchImage}} alt={{item.text}}>\n</div>\n<div data-vn-element=text data-ng-bind=item.text data-ng-controller=OptionsCtrl data-ng-class="{ \'-disabled\': !isItemAvailable }"></div>\n<div data-vn-element=border data-ng-class="{ checked: option.selected === item.key }"></div>'),a.put("vn-product-option/index.html",'<div data-vn-block=vn-product-option>\n\n <label data-vn-element=label data-ng-if=option.label data-ng-bind=option.label></label>\n\n <div data-ng-repeat="inputType in option.inputTypes">\n <div data-vn-element=group data-vn-modifiers="{{inputType.type}} {{option.class}}" data-ng-include=" \'vn-product-option/\' + inputType.type + \'.html\' ">\n </div>\n </div>\n\n <div data-ng-if=option.selected>\n <div data-ng-repeat="option in option.options" data-ng-include=" \'vn-product-option/index.html\' ">\n </div>\n </div>\n\n</div>'),a.put("vn-product-option/radios.html",'<label data-vn-block=vn-labeled-radio data-vn-modifiers={{option.class}} data-ng-repeat="item in option.items" data-ng-init=item data-ng-controller=OptionsCtrl data-ng-class="{ \'-disabled\': !isItemAvailable }">\n\n <div data-vn-element=radio>\n\n <input type=radio name={{option.id}} data-ng-value=item.key data-ng-model=option.selected data-ng-click="onOptionChanged(option, item)">\n </div>\n\n <div data-vn-element=content data-ng-include=" \'vn-product-option/content.html\' "></div>\n\n</label>'),a.put("vn-product-option/select.html",'<div class=dropdown data-vn-element=select data-vn-modifiers="{{ option.class }}" data-ng-attr-size="{{ inputType.size }}">\n\n <button class="btn btn-default dropdown-toggle" type=button id="dropdownMenuOption{{ option.id }}" data-toggle=dropdown>\n {{ currentSelectionText }}\n <span class=caret></span>\n </button>\n <ul class=dropdown-menu role=menu aria-labelledby="dropdownMenuOption{{ option.id }}">\n <li role=presentation data-ng-repeat="item in option.items">\n <a role=menuitem tabindex=-1 href data-ng-click="onOptionChanged(option, item)" data-ng-controller=OptionsCtrl data-ng-class="{ \'-disabled\': !isItemAvailable }">\n {{ item.text }}\n </a>\n </li>\n </ul>\n</div>'),a.put("vn-product-option/text.html",'<div data-ng-if="inputType.rows > 1">\n <textarea data-vn-element=text data-vn-modifiers={{option.class}} data-ng-focus="saveTo=saveTo||{}" data-ng-model=saveTo[option.id] data-ng-maxlength={{inputType.maxlength}} placeholder={{inputType.placeholder}} rows={{inputType.rows}} cols={{inputType.cols}}></textarea>\n</div>\n\n<div data-ng-if="!inputType.rows || inputType.rows < 2">\n <input data-vn-element=text data-vn-modifiers={{option.class}} data-ng-focus="saveTo=saveTo||{}" data-ng-model=saveTo[option.id] data-ng-maxlength={{inputType.maxlength}} placeholder={{inputType.placeholder}}>\n</div>'),a.put("vn-product/vn-product-image.html",'<img data-ng-src="{{ getImagePath(product.imageCollections) }}" class=img-responsive alt="{{ product.name }}">'),a.put("address/address-display.tpl.html",'<div class=row data-ng-show="address.address1 !== \'\'" data-ng-click=onClick()>\n <div class=col-xs-10>\n <div class=th-address__display__addressPart>{{ address.firstName }} {{ address.lastName }}</div>\n <div class=th-address__display__addressPart>{{ address.address1 }}</div>\n <div data-ng-if="address.address2 != \'\'" class=th-address__display__addressPart>{{ address.address2 }}</div>\n <div class=th-address__display__addressPart data-ng-show=isLocationUS>{{ address.city }}, {{ address.state }} {{ address.postalCode }}</div>\n <div class=th-address__display__addressPart data-ng-show=isLocationUS>{{ address.phoneNumber | vnUsPhone }}</div>\n\n <div class=th-address__display__addressPart data-ng-show=!isLocationUS>{{ address.city }}</div>\n <div class=th-address__display__addressPart data-ng-show=!isLocationUS>{{ address.state }} {{ address.postalCode }}</div>\n <div class=th-address__display__addressPart data-ng-show=!isLocationUS>{{ address.country }}</div>\n <div class=th-address__display__addressPart data-ng-show=!isLocationUS>{{ address.phoneNumber }}</div>\n\n <div class=th-address__display__addressPart data-ng-if=shippingValue data-ng-show=address.residential>Type: Residential</div>\n <div class=th-address__display__addressPart data-ng-if=shippingValue data-ng-show=!address.residential>Type: Business</div>\n </div>\n <div class=col-xs-2 ng-show=showEditButton>\n <i class="fa fa-angle-right fa-2x pull-right"></i>\n </div>\n</div>'),a.put("address/vn-address-display-actions.tpl.html",'<div class="container-fluid no-padding">\n <div data-ng-if="shipping==\'true\'" data-vn-address-display data-address=address data-shipping=true></div>\n <div data-ng-if="shipping!=\'true\'" data-vn-address-display data-address=address></div>\n <div class="row th-address__display__actions">\n <div class=col-xs-7>\n <span data-ng-if=!address.preferred>\n <button class="btn btn-default" data-ng-click=onMakePreferredClicked()>Make Preferred\n </button>\n </span>\n <span class=th-address__display__actions__preferred data-ng-if=address.preferred>\n <i class="fa fa-check"></i> Preferred</span>\n </div>\n <div class="col-xs-4 col-xs-offset-1 col-sm-3 col-sm-offset-2 col-md-2 col-md-offset-3">\n <div class=row>\n <div class=col-xs-6>\n <a href data-ng-click=onEditClicked({address:address})><i class="fa fa-pencil"></i></a>\n </div>\n <div class=col-xs-6>\n <a href data-ng-click=onDeleteClicked({address:address})><i class="fa fa-trash-o"></i></a>\n </div>\n </div>\n </div>\n </div>\n</div>'),a.put("address/vn-address-picker.tpl.html",'<div class="th-checkout__step__drawer -left" data-ng-class="{\'-open\': openAddressPicker}">\n\n <div class=th-checkout__step__drawer__body data-ng-show=openAddressPicker data-ng-switch=state data-ng-cloak>\n <a href class=th-checkout__step__drawer__close data-ng-click=selectAddress()>\n <i class="fa fa-close fa-2x"></i>\n </a>\n\n <div class=th-checkout__step__drawer__title>\n <span data-ng-switch-when=ADDRESSLIST>{{:: selectAddressTitle}}</span>\n <span data-ng-switch-when=NEWADDRESS>{{:: newAddressTitle}}</span>\n </div>\n\n <div class=th-address__choose data-ng-switch-when=ADDRESSLIST>\n <div class=th-address__choose__options ng-cloak>\n <label class=th-address__choose__options__option data-ng-repeat="address in addressList" for="address{{ $index }}">\n <div class=styled-optionbox-option>\n <input type=radio id="address{{ $index }}" name=billingAddress data-ng-value=true data-ng-model=address.preferred data-ng-change="setPreferredAddress({{ $index }})">\n\n <div>\n <vn-address-display data-ng-if="shipping==\'true\'" data-address=address data-show-edit-button=allowEdit data-shipping=true></vn-address-display>\n <vn-address-display data-ng-if="shipping!=\'true\'" data-address=address data-show-edit-button=allowEdit></vn-address-display>\n </div>\n </div>\n </label>\n\n <a class=th-address__choose__options__new-option ng-repeat-end data-ng-click=createNewAddress()>\n Enter a different address\n </a>\n </div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn__continue" data-ng-click=selectAddress()>\n Continue <i class="fa fa-angle-right"></i>\n </button>\n </div>\n\n\n <div data-ng-switch-when=NEWADDRESS>\n <div class="th-address__same-as styled-checkbox-option" data-ng-if=showCopyAddress>\n <input type=checkbox id=chkAddressCopy name=chkAddressCopy data-ng-model=addressCopied data-ng-change="copyAddressHandler()">\n <label for=chkAddressCopy>{{:: copyAddressText}}</label>\n </div>\n <div class=th-address__enterAddress>\n <div data-ng-if="shipping==\'true\'" data-vn-address-editor="" address=newAddress countries=countries data-on-dirty=setCopyAddressFalse() data-on-save="saveAddress({newAddress: newAddress})" data-shipping=true></div>\n <div data-ng-if="shipping!=\'true\'" data-vn-address-editor="" address=newAddress countries=countries data-on-dirty=setCopyAddressFalse() data-on-save="saveAddress({newAddress: newAddress})"></div>\n </div>\n </div>\n\n\n <div class=th__back-button>\n <a href=javascript:void(0); data-ng-click=selectAddress()>\n <i class="fa fa-arrow-left"> {{:: backToText}}</i>\n </a>\n </div>\n </div>\n</div>'),a.put("app-messages/vnAppMessage.tpl.html",'<alert class="vn-app-message container-fluid" ng-repeat="alert in appMessagesCtrl.alerts track by alert.id" type="{{ alert.type }}">\n <div class=row>\n <div class=col-xs-8>\n <span class=vn-app-message__text>{{alert.text}}</span>\n </div>\n <div class="col-xs-4 align-right">\n <button class="btn vn-app-message__button th-alert__button" data-ng-click=appMessagesCtrl.closeAlert(alert.id)>Ok</button>\n </div>\n </div>\n</alert>'),a.put("billing-address/billing-address-views.html",'<div class=th-address data-ng-controller="BillingAddressViewsCtrl as vm" data-ng-switch=vm.state data-ng-init=vm.init()>\n <div class="th-checkout__section-heading th-address__heading">\n Billing Address\n </div>\n\n <div class=th-address__display data-ng-switch-when=VIEWADDRESS>\n <vn-address-display data-address=vm.billingAddress data-on-click=vm.editBillingAddress() data-show-edit-button=vm.billingAddress></vn-address-display>\n </div>\n\n <div class="th-address__same-as styled-checkbox-option" data-ng-switch-when=EDITADDRESS ng-cloak>\n <input type=checkbox id=chkBillingAddress name=chkBillingAddress data-ng-model=vm.useShippingAddress data-ng-change="vm.copyShippingAddress()">\n <label for=chkBillingAddress>Billing address same as shipping</label>\n </div>\n <div class=th-address__enterAddress data-ng-switch-when=EDITADDRESS ng-cloak>\n <div data-vn-address-editor="" address=vm.billingAddress countries=vm.countries data-on-dirty=vm.setShippingAddressFalse() data-on-save=vm.saveBillingAddress() data-show-save-button=false></div>\n </div>\n\n <div vn-address-picker data-ng-switch-when=PICKADDRESS data-address-list=vm.user.billingAddresses data-new-address-title="Add Billing Address" data-select-address-title="Choose Billing Address" data-back-to-text="back to Pay With" data-show-copy-address=vm.showCopyAddress data-countries=vm.countries data-on-address-selected=vm.onAddressSelected() data-save-address=vm.onAddressAdded(newAddress) data-address-copied=vm.useShippingAddress data-copy-address-handler=vm.copyShippingAddress() data-copy-address-text="Billing address same as shipping"></div>\n\n</div>'),a.put("busy-animation/vnBusyAnimation.tpl.html",'<ng-transclude></ng-transclude>\n<div class="{{ class }}" title=1 data-ng-if=show>\n <svg version=1.1 id=loader-1 xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink x=0px y=0px ng-attr-width="{{ size }}" ng-attr-height="{{ size }}" viewbox="0 0 50 50" style="enable-background:new 0 0 50 50" xml:space=preserve>\n\n <path fill=#000 d=M25.251,6.461c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615V6.461z>\n <animatetransform attributetype=xml attributename=transform type=rotate from="0 25 25" to="360 25 25" dur=.6s repeatcount="indefinite">\n </path>\n </svg>\n</div>'),a.put("checkout/checkout.html",'<div class=th-checkout>\n <div class=row>\n <div class="th-checkout__loading th-checkout__loading--ship-to" vn-busy-animation vn-busy-animation-size=80px vn-busy-animation-show="{{ stepOneLoading }}" vn-busy-animation-class=th-checkout__loading-inner data-ng-show=checkout.steps[0].active></div>\n\n <div class="th-checkout__loading th-checkout__loading--pay-with" vn-busy-animation vn-busy-animation-size=80px vn-busy-animation-show="{{ stepTwoLoading }}" vn-busy-animation-class=th-checkout__loading-inner data-ng-show=checkout.steps[1].active></div>\n\n <div class="th-checkout__loading th-checkout__loading--review" vn-busy-animation vn-busy-animation-size=80px vn-busy-animation-show="{{ stepThreeLoading }}" vn-busy-animation-class=th-checkout__loading-inner data-ng-show=checkout.steps[2].active></div>\n\n <div class="col-md-4 th-checkout__step th-checkout__step__ship-to" data-ng-show="checkout.steps[0].active || isInDesktopMode" data-ng-class="{ \'-active\' : checkout.steps[0].active, \'-no-scroll\' : checkout.steps[0].hasOpenDrawer }" data-ng-switch=isEditable(1) data-vn-scroll-to-top=checkout.steps[0].hasOpenDrawer data-ng-init="hideShippingMethods = true">\n\n <div class=th-checkout__step__overlay data-ng-class="{ \'-complete\' : checkout.steps[1].active || checkout.steps[2].active}" data-ng-click=setStep(1)></div>\n\n <div class=th-checkout__step__title>\n <div class=th-checkout__step__title__stepNumber data-ng-if=checkout.steps[0].active><span>1</span></div>\n <i class="fa fa-check-circle-o fa-2x" data-ng-if="checkout.steps[1].active || checkout.steps[2].active"></i>\n <div class=th-checkout__step__title__stepName>Ship To</div>\n </div>\n\n <div ng-include=" \'ship-to/ship-to-views.html\' "></div>\n\n <div data-ng-hide=hideShippingMethods ng-include=" \'ship-method/ship-method.html\' "></div>\n\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn-continue" data-ng-hide=hideShippingMethods data-ng-if=checkout.steps[0].active data-ng-click=nextShippingStep() data-ng-bind-html=buildShippingStepLabel()>\n </button>\n </div>\n <div class="col-md-4 th-checkout__step th-checkout__step__pay-with" data-ng-show="checkout.steps[1].active || isInDesktopMode" data-ng-class="{ \'-active\' : checkout.steps[1].active, \'-no-scroll\' : checkout.steps[1].hasOpenDrawer }" data-ng-switch=isEditable(2) data-vn-scroll-to-top=checkout.steps[1].hasOpenDrawer>\n\n <div class=th-checkout__step__overlay data-ng-class="{ \'-complete\' : checkout.steps[2].active}" data-ng-click="checkout.steps[0].active || setStep(2)"></div>\n\n <div class=th-checkout__step__title>\n <div class=th-checkout__step__title__stepNumber data-ng-if="checkout.steps[0].active || checkout.steps[1].active"><span>2</span></div>\n <i class="fa fa-check-circle-o fa-2x" data-ng-if=checkout.steps[2].active></i>\n <div class=th-checkout__step__title__stepName>Pay With</div>\n </div>\n\n <div ng-include=" \'pay-with/credit-card-views.html\' "></div>\n\n <div ng-include=" \'billing-address/billing-address-views.html\' "></div>\n\n <div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn-continue" data-ng-if=checkout.steps[1].active data-ng-click=nextBillingStep()>\n Continue <i class="fa fa-angle-right"></i>\n </button>\n\n <div class=th__back-button data-ng-if=checkout.steps[1].active>\n <a href=javascript:void(0); data-ng-click=prevStep()>\n <i class="fa fa-arrow-left"> back to Ship To</i>\n </a>\n </div>\n\n <br style="clear: both">\n </div>\n\n </div>\n\n <div data-vn-place-order-btn></div>\n\n <div class="col-md-4 th-checkout__step th-checkout__step__review" data-ng-show="checkout.steps[2].active || isInDesktopMode" data-ng-class="{ \'-active\' : checkout.steps[2].active, \'-no-scroll\' : checkout.steps[2].hasOpenDrawer }" data-vn-scroll-to-top=checkout.steps[2].hasOpenDrawer>\n\n <div class=th-checkout__step__overlay data-ng-click="checkout.steps[0].active || checkout.steps[1].active || setStep(3)"></div>\n\n <div class=th-checkout__step__title>\n <div class=th-checkout__step__title__stepNumber><span>3</span></div>\n <div class=th-checkout__step__title__stepName>Review</div>\n </div>\n <div class=th-checkout__thanks__title>\n Total: {{ checkout.cart.totals.grandTotal | currency }}\n </div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn-continue" data-ng-if=checkout.steps[2].active data-ng-click=placeOrder()>\n {{ placeOrderBtnText }}\n </button>\n <div vn-review=checkout.cart></div>\n <div ng-include=" \'review/review-details-2.html\' " ng-if=checkout.steps[2].active></div>\n\n <button class="hidden-md hidden-lg hidden-xl btn btn-primary btn-block btn-lg th-checkout__step__btn-continue" data-ng-if=checkout.steps[2].active data-ng-click=placeOrder()>\n {{ placeOrderBtnText }}\n </button>\n\n <div class=th__back-button>\n <a href=javascript:void(0); data-ng-if=checkout.steps[2].active data-ng-click=prevStep()>\n <i class="fa fa-arrow-left"> back to Pay With</i>\n </a>\n </div>\n\n </div>\n </div>\n</div>'), -a.put("checkout/vn-address-editor.html",'<div class="th-address container-fluid">\n\n <div>\n\n <div class=th-address__location>\n <div class=btn-group>\n <button type=button data-ng-click=setCountryToUS() class="btn btn-default" data-ng-class="{ \'btn-primary\' : isLocationUS }">United States\n </button>\n <button type=button data-ng-click=setCountryToOther() class="btn btn-default" data-ng-class="{ \'btn-primary\': !isLocationUS }">International\n </button>\n </div>\n </div>\n\n <div class=th-address__form-wrapper>\n <form id=frmAddress name=frmAddress novalidate data-ng-submit=updateAddress(address)>\n <div class=row>\n <div class=col-xs-6>\n <div class=form-group>\n <input name=inputUSFirstName class="form-control input-lg immediate-help" id=first-name data-vn-placeholder="First Name" data-ng-model=address.firstName data-vn-first-name-validate required>\n\n <data-vn-popover-first-name>\n\n </div>\n </div>\n <div class=col-xs-6>\n <div class=form-group>\n <input name=inputUSLastName class="form-control input-lg -right immediate-help" id=last-name data-vn-placeholder="Last Name" data-ng-model=address.lastName data-vn-last-name-validate required>\n\n <data-vn-popover-last-name>\n\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputUSAddress1Line class="form-control input-lg immediate-help" id=address-1 data-vn-placeholder="Address Line 1" data-ng-model=address.address1 data-vn-street-validate required>\n\n <data-vn-popover-address>\n\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputUSAddressLine2 class="form-control input-lg" id=address-2 data-vn-placeholder="Address Line 2" data-ng-model="address.address2">\n </div>\n </div>\n </div>\n <div class=row data-ng-show=isLocationUS data-ng-hide=check.useShippingAddress>\n <div class=col-xs-5>\n <div class=form-group>\n <input name=inputUSCity class="form-control input-lg immediate-help" id=city data-vn-placeholder=City data-ng-model=address.city data-vn-city-validate ng-required="isLocationUS">\n\n <data-vn-popover-city>\n\n </div>\n </div>\n <div class=col-xs-3>\n <div class=form-group>\n <div class="th-address__state th-dropdown">\n <vn-dropdown name=inputUSState availableoptions=address.selectedCountry.states placeholder=State optionselect=onStateChanged model=address.selectedState selected-field=code>\n <vn-dropdown>\n </vn-dropdown></vn-dropdown></div>\n </div>\n </div>\n <div class=col-xs-4>\n <div class=form-group>\n <input name=inputUSZip class="form-control input-lg immediate-help" id=zip data-vn-placeholder=Zip data-ng-model=address.postalCode data-vn-zip-validate ng-required="isLocationUS">\n\n <data-vn-popover-zip>\n\n </div>\n </div>\n </div>\n <div class=row data-ng-show=!isLocationUS>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputWorldwideCity class="form-control input-lg immediate-help" id=international-city data-vn-placeholder=City data-ng-model=address.city data-vn-city-validate required>\n\n <data-vn-popover-city></data-vn-popover-city>\n </div>\n </div>\n </div>\n <div class=row data-ng-show=!isLocationUS>\n <div class=col-xs-6>\n <div class=form-group>\n <input name=inputWorldwideRegion class="form-control input-lg immediate-help" id=region data-vn-placeholder=Region data-ng-model=address.state data-vn-region-validate ng-required="!isLocationUS">\n <data-vn-popover-region></data-vn-popover-region>\n </div>\n </div>\n <div class=col-xs-6>\n <div class=form-group>\n <input name=inputWorldwidePostalCode class="form-control input-lg immediate-help" id=postal-code maxlength=15 data-vn-placeholder="Postal code" data-ng-model=address.postalCode data-vn-postal-code-validate ng-required="!isLocationUS">\n <data-vn-popover-postal-code>\n </data-vn-popover-postal-code></div>\n </div>\n </div>\n <div class=row data-ng-show="!isLocationUS ">\n <div class=col-xs-12>\n <div class=form-group>\n <div class="th-address__country th-dropdown">\n\n <vn-dropdown name=inputWorldwideCountry data-availableoptions=countries placeholder=Country optionselect=onCountryChanged model=address.selectedCountry>\n <vn-dropdown>\n\n </vn-dropdown></vn-dropdown></div>\n </div>\n </div>\n </div>\n\n <div class=row data-ng-show=isLocationUS>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputUSPhoneNumber class="form-control input-lg immediate-help" id=phone-number data-vn-placeholder="Phone Number" data-ng-model=address.phoneNumber data-vn-format-us-phone-number data-vn-us-phone-validate required>\n\n <data-vn-popover-us-phone></data-vn-popover-us-phone>\n </div>\n </div>\n </div>\n\n <div class=row data-ng-show=!isLocationUS>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputIntlPhoneNumber class="form-control input-lg immediate-help" maxlength=35 data-vn-placeholder="Phone Number" data-ng-model=address.phoneNumber data-vn-required-field-validate required>\n\n <data-vn-popover-required location=top field="Phone Number"></data-vn-popover-required>\n </div>\n </div>\n </div>\n <div class=row data-ng-if="shipping==\'true\'">\n <div class=col-xs-12>\n <div class=form-group>\n <input type=checkbox name=type class=immediate-help id=residential-1 data-ng-model=address.residential data-ng-true-value=false data-ng-false-value="true">\n <label for=residential-1 role=button tabindex=0>This is a business address</label>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n <div>\n <div class=row data-ng-if=showCancelButtonValue>\n <div class=col-xs-6>\n <button class="btn btn-default btn-block btn-lg" data-ng-click=onCancel()>\n {{cancelText}}\n </button>\n </div>\n <div class=col-xs-6>\n <button class="btn btn-primary btn-block btn-lg" data-ng-click=saveAddress() data-ng-enabled=frmAddress.$valid data-ng-if=showSaveButtonValue>\n {{saveText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n <div class=row data-ng-if=!showCancelButtonValue>\n <div class=col-xs-12>\n <button class="btn btn-primary btn-block btn-lg" data-ng-click=saveAddress() data-ng-enabled=frmAddress.$valid data-ng-if=showSaveButtonValue>\n {{saveText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n </div>\n\n</div>'),a.put("dropdown/vn-dropdown.tpl.html",'<div class="vn-dropdown th-dropdown" dropdown>\n <button id=dropdownButton name="{{name + \'Label\'}}" class="vn-dropdown__trigger form-control btn btn-default btn-lg dropdown-toggle form-control" data-vn-placeholder={{placeholder}} data-ng-model=selectedOption.selectedDisplayValue dropdown-toggle data-toggle=dropdown value={{selectedOption.selectedDisplayValue}}>{{selectedOption.selectedDisplayValue}}<span class=caret></span>\n </button>\n <ul class="vn-dropdown__menu dropdown-menu" role=menu>\n <li role=presentation data-ng-repeat="option in options">\n <a role=menuitem data-ng-click=changeOption($index) href>{{option.displayValue}}</a>\n </li>\n </ul>\n <select name={{name}} class=vn-dropdown__select ng-model=selectedOption ng-options="option.selectedDisplayValue for option in options">\n </select>\n</div>'),a.put("easy-zoom/vnEasyZoom.tpl.html","<div class=easyzoom data-ng-class=\"{ 'easyzoom--adjacent': ezAdjacent, 'easyzoom--overlay': ezOverlay }\">\n <a data-ng-href={{ezZoomSrc}}>\n <img class=img-responsive data-ng-src={{ngSrc}} alt={{alt}}>\n <div class=th-product-view__zoom></div>\n </a>\n</div>"),a.put("login/forgot-password.html",'<div class=th-checkout__login>\n <div class=th-checkout__step__title>\n <div class=th-checkout__step__title__stepName>Forgot Your Password?</div>\n </div>\n <div class=container-fluid>\n <div class=row>\n <div class="col-xs-12 col-xs-offset-0 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4">\n <div class=th-checkout__login__form>\n <form id=frmForgotPassword name=frmForgotPassword novalidate data-ng-submit=forgotPassword()>\n <div class=row>\n <div class=col-xs-12>\n <div class=form-group>\n <input id=inputLoginEmail name=inputLoginEmail class="form-control input-lg immediate-help" data-vn-placeholder="E-mail address" data-ng-model=email data-vn-email-validate required>\n\n <div class="input-help bottom" ng-if=frmLogin.inputLoginEmail.$touched>\n <div class=arrow></div>\n <h4>E-mail must:</h4>\n <ul>\n <li ng-class=emailEmpty>Not be <strong>empty</strong></li>\n <li ng-class=validEmail>Be a <strong>valid</strong> address</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </form>\n <button class="btn btn-primary btn-block btn-lg th-checkout__login__continue" data-ng-disabled=disabledButton data-ng-click=forgotPassword()>\n Reset Password <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>'),a.put("login/login.html",'<div data-vn-app-message=""></div>\n<div data-vn-login data-allow-anonymous=true data-redirect-to=checkout data-button-text=Continue></div>'),a.put("login/my-account-login.html",'<div data-vn-login data-allow-anonymous=false data-redirect-to=my-account data-button-text="Sign In"></div>'),a.put("login/vn-login-link.html","<div>\n <span data-ng-if=!loggedIn>\n <a data-ui-sref=my-account-login data-translate=header.signIn>Sign In</a>\n </span>\n <span data-ng-if=loggedIn>\n <a data-ui-sref=logout data-translate=header.signOut>Sign Out</a>\n </span>\n</div>"),a.put("login/vn-login.html",'<div class=th-checkout__login>\n <div class=th-checkout__step__title>\n <div class=th-checkout__step__title__stepName>Enter your e-mail to get started</div>\n </div>\n <div class=container-fluid>\n <div class=row ng-if=loginError>\n <div class="col-xs-12 col-xs-offset-0 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4">\n <div class=th-checkout__login__error data-ng-click=clearError()>\n Login Failed\n </div>\n </div>\n </div>\n <div class=row>\n <div class="col-xs-12 col-xs-offset-0 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4">\n <div class=th-checkout__login__form>\n <form id=frmLogin name=frmLogin novalidate data-ng-submit=updateUser()>\n <div class=row>\n <div class=col-xs-12>\n <div class=form-group>\n <input id=inputLoginEmail name=inputLoginEmail class="form-control input-lg immediate-help" data-vn-placeholder="E-mail address" data-ng-model=user.email data-vn-email-validate required>\n\n <div class="input-help bottom" ng-if=frmLogin.inputLoginEmail.$touched>\n <div class=arrow></div>\n <h4>E-mail must:</h4>\n <ul>\n <li ng-class=emailEmpty>Not be <strong>empty</strong></li>\n <li ng-class=validEmail>Be a <strong>valid</strong> address</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n\n <div class=row data-ng-if="!user.anonymous || !allowAnonymous">\n <div class=col-xs-12>\n <div class=form-group>\n <input type=password id=inputLoginPassword name=inputLoginPassword class="form-control input-lg immediate-help" data-vn-placeholder=Password data-ng-model=user.password data-ng-enter=updateUser() data-vn-password-validate required>\n </div>\n </div>\n </div>\n </form>\n\n <div class=th-checkout__login__user-type ng-show=allowAnonymous>\n <div class=btn-group>\n <button type=button data-ng-click="user.anonymous = true" class="btn btn-default" data-ng-class="{ \'btn-primary\' : user.anonymous }">I\'m a new customer\n </button>\n <button type=button data-ng-click="user.anonymous = false" class="btn btn-default" data-ng-class="{ \'btn-primary\': !user.anonymous }">I\'ve ordered before\n </button>\n </div>\n </div>\n\n <button class="btn btn-primary btn-block btn-lg th-checkout__login__continue" data-ng-disabled=disabledButton data-ng-click=updateUser()>\n {{buttonText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n <a href ui-sref=forgot-password>Forgot your password?</a>\n </div>\n </div>\n </div>\n</div>'),a.put("modal/vnAddressDeleteConf.tpl.html",'<div class="th-error-wrap clearfix th-modal">\n <a href class=th-modal__close ng-click=$dismiss()>\n <i class="fa fa-times"></i>\n </a>\n <div class=th-error-details>\n <div class="th-error-details__header modal-header">\n <div class=modal-body>\n <div class=th-modal__message>\n {{ :: message }}\n </div>\n\n <div class="th-modal__body row">\n <div class=col-xs-12>\n <div class=th-message-details__section2 vn-address-display="" address=::addressToDelete></div>\n </div>\n </div>\n </div>\n <div class="modal-footer container-fluid">\n <div class=row>\n <div class="col-xs-12 col-sm-6">\n <button class="btn btn-default btn-lg th-modal__button th-modal__button--secondary" ng-click=$dismiss()>Cancel</button>\n </div>\n <div class="col-xs-12 col-sm-6">\n <button class="btn btn-primary btn-lg th-modal__button th-modal__button--primary" ng-click=$close()>{{::buttonText}}</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>'),a.put("modal/vnErrorModal.tpl.html",'<div class=th-error-details>\n <div class="th-error-details__header modal-header">\n <h1>Sorry, something went wrong with the page...</h1>\n\n <div class=modal-body>\n <p class=th-error-details__section1>... but it might just be a small glitch. Try refreshing the page\n to see if that fixes it.</p>\n\n <p class=th-error-details__section2>\n If the problem persists, please try again later.\n </p>\n </div>\n <div class=modal-footer>\n <button class="btn btn-warning" ng-click=$close()>Close</button>\n </div>\n </div>\n</div>'),a.put("modal/vnMessageModal.tpl.html",'<div class="th-error-wrap clearfix">\n <div class=th-error-details>\n <div class="th-error-details__header modal-header">\n <h1>This is a generic app message template</h1>\n <div class=modal-body>\n <p class=th-message-details__section1>It should be over ridden in the calling application</p>\n\n </div>\n <div class=modal-footer>\n <button class="btn btn-warning" ng-click=$dismiss()>Ok</button>\n <button class="btn btn-warning" ng-click=$close()>Cancel</button>\n </div>\n </div>\n </div>\n</div>'),a.put("modal/vnPaymentProfileDeleteConf.tpl.html",'<div class="th-error-wrap clearfix th-modal">\n <a href class=th-modal__close ng-click=$dismiss()>\n <i class="fa fa-times"></i>\n </a>\n <div class=th-error-details>\n <div class="th-error-details__header modal-header">\n <div class=modal-body>\n <div class=th-modal__message>\n {{ :: message }}\n </div>\n\n <div class="th-modal__body row">\n <div class=col-xs-12>\n <span class=th-credit-card__img data-ng-class=::paymentProfileToDelete.card.ccCssClass></span>\n <span>{{ ::paymentProfileToDelete.card.cardNumber.slice(-4) }}</span>\n <span>{{ ::paymentProfileToDelete.card.expMonth }}/{{ ::paymentProfileToDelete.card.expYear }}</span>\n </div>\n </div>\n\n </div>\n <div class="modal-footer container-fluid">\n <div class=row>\n <div class="col-xs-12 col-sm-6">\n <button class="btn btn-default btn-lg th-modal__button th-modal__button--secondary" ng-click=$dismiss()>Cancel</button>\n </div>\n <div class="col-xs-12 col-sm-6">\n <button class="btn btn-primary btn-lg th-modal__button th-modal__button--primary" ng-click=$close()>{{::buttonText}}</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>'),a.put("my-account/billing-addresses.html",'<div class="th-my-account container" data-ng-cloak="">\n\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n {{vm.pageTitle}}\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-7 col-md-7">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <div data-ng-show="!vm.addressToEdit && !vm.addressToAdd" class="th-address__choose animate-show">\n <div class=th-address__choose__options>\n <a href class=th-address__choose__options__new-option data-ng-click=vm.addAddress() ng-repeat-end>\n <i class="fa fa-plus"></i>  Add a Billing Address</a>\n \n <div data-ng-repeat="billingAddress in vm.billingAddresses" class=th-address__choose__options__option>\n <div class=styled-optionbox-option>\n <div vn-address-display-actions="" data-address=billingAddress data-on-make-preferred-clicked=vm.makeAddressPreferred($index) data-on-delete-clicked=vm.deleteAddress(address) data-on-edit-clicked="vm.editAddress(address, $index)"></div>\n </div>\n </div>\n </div>\n </div>\n <div data-ng-show=vm.addressToEdit class="th-address__enterAddress animate-show">\n <div data-vn-address-editor="" data-ng-if=vm.addressToEdit data-countries=vm.countries data-address=vm.addressToEdit data-title="Edit Shipping Address" data-on-save=vm.saveEditedAddress() data-on-cancel=vm.cancelEditAddress() data-show-save-button=true data-save-text=save data-show-cancel-button=true>\n </div>\n </div>\n <div data-ng-show=vm.addressToAdd class="th-address__enterAddress animate-show">\n <div data-vn-address-editor="" data-ng-if=vm.addressToAdd data-countries=vm.countries data-address=vm.addressToAdd data-title="Edit Shipping Address" data-on-save=vm.saveNewAddress() data-on-cancel=vm.cancelAddAddress() data-show-save-button=true data-save-text=add data-show-cancel-button=true>\n </div>\n </div>\n\n </div>\n <div class="col-xs-12 col-sm-5 col-md-4 col-md-offset-1 th-my-account__group">\n <div class=th-my-account__title>More Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.shippingaddresses>Shipping Addresses</a></li>\n <li><a href="" data-ui-sref=my-account.paymentprofiles>Payment Profiles</a></li>\n </ul>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left">  Back to My Account</i>\n </a>\n </div>\n</div>'),a.put("my-account/change-email.html",'<div class="th-my-account container" data-ng-cloak="">\n <div class=th-my-account__title>\n Change Email\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-7 col-md-7">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <form id=frmChangeEmail name=frmChangeEmail novalidate data-ng-submit="">\n <div class=row>\n <div class=col-xs-12>\n <div>\n <input id=changeEmail name=changeEmail class="form-control input-lg immediate-help" data-vn-placeholder="Updated E-mail" data-ng-model=user.changeEmail data-ng-class="{\'ng-invalid\':frmChangeEmail.confirmChangeEmail.$error.match}" data-ng-change=checkValidity() data-vn-email-validate required>\n\n <div class="input-help bottom" ng-if=frmChangeEmail.changeEmail.$touched>\n <div class=arrow></div>\n <h4>E-mail must:</h4>\n <ul>\n <li ng-class=emailEmpty>Not be <strong>empty</strong></li>\n <li ng-class=validEmail>Be a <strong>valid</strong> address</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <input id=confirmChangeEmail name=confirmChangeEmail class="form-control input-lg immediate-help" data-vn-placeholder="Confirm Updated E-mail" data-ng-model=user.confirmChangeEmail data-match=frmChangeEmail.changeEmail data-ng-change=checkValidity() data-vn-email-validate required>\n\n <div class="input-help bottom" ng-if=frmChangeEmail.confirmChangeEmail.$touched>\n <div class=arrow></div>\n <h4>E-mail must:</h4>\n <ul>\n <li ng-class=emailEmpty>Not be <strong>empty</strong></li>\n <li ng-class=validEmail>Be a <strong>valid</strong> address</li>\n </ul>\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <input type=password id=inputPassword name=inputPassword class="form-control input-lg immediate-help" data-vn-placeholder=Password data-ng-model=user.password data-ng-change=checkValidity() data-vn-password-validate required>\n </div>\n </div>\n <div data-ng-show=emailDoesNotMatch class=text-danger>Emails do not match!</div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__login__continue" data-ng-disabled=changeButtonDisabled data-ng-click=changeEmail()>\n Change Password <i class="fa fa-angle-right"></i>\n </button>\n </form>\n </div>\n <div class="col-xs-12 col-sm-5 col-md-4 col-md-offset-1 th-my-account__group">\n <div class=th-my-account__title>More Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.change-password>Change Password</a></li>\n </ul>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left">  Back to My Account</i>\n </a>\n </div>\n\n</div>'),a.put("my-account/change-password.html",'<div class="th-my-account container" data-ng-cloak="">\n <div class=th-my-account__title>\n Change Password\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-7 col-md-7">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <form id=frmChangePassword name=frmChangePassword novalidate data-ng-submit="">\n <div class=row>\n <div class=col-xs-12>\n <input type=password id=inputPassword name=inputPassword class="form-control input-lg immediate-help" data-vn-placeholder="Current Password" data-ng-model=user.password data-ng-change=checkValidity() data-vn-password-validate required>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <input type=password id=inputNewPassword name=inputNewPassword class="form-control input-lg immediate-help" data-vn-placeholder="New Password" data-ng-model=user.newPassword data-ng-change=checkValidity() data-vn-password-validate required>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <input type=password id=inputConfirmPassword name=inputConfirmPassword class="form-control input-lg immediate-help" data-vn-placeholder="Confirm Password" data-ng-model=user.confirmPassword data-ng-change=checkValidity() data-vn-password-validate required>\n </div>\n </div>\n <div data-ng-show=passwordDoesNotMatch class=text-danger>Passwords do not match!</div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__login__continue" data-ng-disabled=changeButtonDisabled data-ng-click=changePassword()>\n Change Password <i class="fa fa-angle-right"></i>\n </button>\n </form>\n </div>\n <div class="col-xs-12 col-sm-5 col-md-4 col-md-offset-1 th-my-account__group">\n <div class=th-my-account__title>More Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.change-email>Change Email Address</a></li>\n </ul>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left">  Back to My Account</i>\n </a>\n </div>\n\n</div>'),a.put("my-account/my-account.html",'<div data-vn-app-message=""></div>\n<div ui-view>\n <div class="container th-my-account">\n <div class=row>\n <div class="col-xs-12 th-my-account__group th-my-account__group--header">\n <div class="th-my-account__title th-my-account__group--header__title">My Account</div>\n <div class=th-my-account__group--header__welcome>\n Hi, {{user.firstName}} (<a href ui-sref=logout>log out</a>)\n </div>\n </div>\n </div>\n\n <div class=row>\n <div class="col-xs-12 th-my-account__group th-my-account__group--orders">\n <div class=th-my-account__title>Orders</div>\n\n <div class=th-my-account__overlay data-ng-if=loading vn-busy-animation vn-busy-animation-show="{{ loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n <div data-ng-if="orders.length == 0">\n <p class=text-muted>\n You haven\'t placed an order with us yet.\n </p>\n </div>\n\n <div data-ng-if="orders.length > 0">\n <div data-vn-order-table="" orders=orders class=hidden-xs></div>\n <div data-vn-order-list-view="" orders=orders class="hidden-sm hidden-md hidden-lg hidden-xl"></div>\n <div class=th-my-account__group__links>\n <a href data-ui-sref=my-account.orders.list>View all Orders</a>\n </div>\n </div>\n </div>\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-6 th-my-account__group th-my-account__group--addresses">\n <div class=th-my-account__title>Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.shippingaddresses>Shipping Addresses</a></li>\n <li><a href="" data-ui-sref=my-account.paymentprofiles>Payment Profiles</a></li>\n <li><a href="" data-ui-sref=my-account.billingaddresses>Billing Addresses</a></li>\n </ul>\n </div>\n <div class="col-xs-12 col-sm-6 th-my-account__group th-my-account__group--email">\n <div class=th-my-account__title>Email & Password</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.change-email>Change Email Address</a></li>\n <li><a href="" data-ui-sref=my-account.change-password>Change Password</a></li>\n </ul>\n </div>\n </div>\n </div>\n</div>'),a.put("my-account/orders.detail.html",'<div class="th-order-detail container">\n <div class=row>\n <div class=col-xs-12>\n\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class="th-order-detail__header row">\n <div class=col-xs-12>\n <div class="th-order-detail__title th-order-detail__header__title">Order Details</div>\n </div>\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-6">\n <div class=th-order-detail__header__order-date>Placed on <span>{{::vm.order.orderDate | date}}</span></div>\n <div class=th-order-detail__header__order-details>\n <span class=th-order-detail__header__order-details__order-number>Order <span>#{{::vm.order.orderId}}</span></span> | <span class=th-order-detail__header__order-details__order-status>{{::vm.order.orderStatus}}</span>\n </div>\n <div class="panel panel-default th-order-detail__items">\n <div class=panel-body>\n <div class="row th-order-detail__items__product" data-ng-repeat="product in vm.order.orderItems">\n <div class="col-xs-3 col-sm-3 col-md-3 th-order-detail__items__product__img">\n <a href ui-sref="product({slug: product.slug})"><img data-ng-src={{product.imageUrl}} width=100%></a>\n </div>\n <div class="col-xs-6 col-sm-6 col-md-6">\n <div class=th-order-detail__items__product__name>\n <a href ui-sref="product({slug: product.slug})">{{::product.productName}}</a>\n </div>\n <div class=th-order-detail__items__product__qty>Qty: {{::product.quantity}}</div>\n <div class=th-order-detail__items__product__options>{{::product.options}}</div>\n </div>\n <div class="col-xs-3 col-sm-3 col-md-3">\n <div class="th-order-detail__items__product__price align-right currency">{{::product.price.subtotal | currency}}</div>\n </div>\n </div>\n </div>\n <div class=panel-footer>\n <div class="row th-order-detail__items__discount" data-ng-repeat="discount in vm.order.discounts">\n <div class=col-xs-8>{{::discount.couponCode}}</div>\n <div class="align-right col-xs-4 currency">-{{::discount.value | currency}}</div>\n </div>\n <div class="row th-order-detail__items__shipping">\n <div class=col-xs-8>Shipping</div>\n <div class="align-right col-xs-4">{{::vm.order.totals.shipping | currency}}</div>\n </div>\n <div class="row th-order-detail__items__tax">\n <div class=col-xs-8>Tax</div>\n <div class="align-right col-xs-4">{{::vm.order.totals.taxTotal | currency}}</div>\n </div>\n <div class="row th-order-detail__items__total">\n <div class=col-xs-8>Total</div>\n <div class="align-right col-xs-4">{{::vm.order.totals.grandTotal | currency}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <div class="col-xs-12 col-sm-6">\n <div class=th-order-detail__paid-with>\n <div class=th-order-detail__title>Paid With</div>\n <div class="panel panel-default th-order-detail__paid-with">\n <div class=panel-body>\n'+" <div class=th-credit-card__img data-ng-class=\"{'th-credit-card__img--visa': vm.order.paymentProfile.paymentMethod == 'Visa', 'th-credit-card__img--amex': vm.order.paymentProfile.paymentMethod == 'American Express', 'th-credit-card__img--discover': vm.order.paymentProfile.paymentMethod == 'Discover', 'th-credit-card__img--mastercard': vm.order.paymentProfile.paymentMethod == 'MasterCard'}\"></div>\n <span class=th-order-detail__paid-with__card-number>{{::vm.order.paymentProfile.PCIaaS_MaskedCardRef}}</span>\n </div>\n </div>\n </div>\n <div class=th-order-detail__shipping>\n <div class=th-order-detail__title>Shipping</div>\n <div class=\"panel panel-default\">\n <div class=panel-body>\n <div class=th-order-detail__shipping__name>{{::vm.order.shippingAddress.firstName}} {{::vm.order.shippingAddress.lastName}}</div>\n <div class=th-order-detail__shipping__address-1>{{::vm.order.shippingAddress.address1}}</div>\n <div class=th-order-detail__shipping__address-2>{{::vm.order.shippingAddress.address2}}</div>\n <div>\n <span class=th-order-detail__shipping__city>{{::vm.order.shippingAddress.city}}</span>,\n <span class=th-order-detail__shipping__state>{{::vm.order.shippingAddress.state}}</span>\n <span class=th-order-detail__shipping__zip>{{::vm.order.shippingAddress.postalCode}}</span>\n </div>\n <div data-ng-if=\"vm.order.trackingDetails.length > 0\">\n <hr>\n <div class=th-order-detail__shipping__tracking-detail data-ng-repeat=\"tracking in vm.order.trackingDetails\">\n <div data-ng-if=\"tracking.shippingGateway != 'OTHER'\">\n <div data-ng-bind-html=tracking.shippingMethodName></div>\n <div>\n Tracking: <span data-ng-if=tracking.trackingUri><a data-ng-href={{::tracking.trackingUri}} target=_blank>{{::tracking.trackingNumber}}</a></span>\n <span data-ng-if=!tracking.trackingUri>{{::tracking.trackingNumber}}</span>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n <div class=th-order-detail__notes data-ng-if=\"vm.order.misc.comment != ''\">\n <div class=th-order-detail__title>Notes</div>\n <div class=\"panel panel-default\">\n <div class=panel-body>\n <div>{{::vm.order.misc.comment || \"No Notes\"}}</div>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n</div>"), -a.put("my-account/orders.html","<div ui-view></div>"),a.put("my-account/orders.list.html",'<div class="th-orders-list container" data-ng-cloak="" data-ng-init=vm.init()>\n <div class=row>\n <div class=col-xs-12>\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n Orders\n </div>\n\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <div data-ng-if="vm.orders.length == 0">\n <p class=text-muted>\n You haven\'t placed an order with us yet.\n </p>\n </div>\n\n <div data-ng-if="vm.orders.length > 0">\n <div class=th-orders-list__page-size>\n <select ng-options="item.text for item in vm.pageSizes" ng-model=vm.selectedPageSize ng-change=vm.getOrders()></select>\n </div>\n\n <div data-vn-order-list-view="" orders=vm.orders class="hidden-sm hidden-md hidden-lg hidden-xl"></div>\n <div data-vn-order-table="" orders=vm.orders class=hidden-xs></div>\n\n <div class="well well-sm th-orders-list__pagination">\n <span>{{vm.startIndex}} - {{vm.endIndex}} of {{vm.cursor.total}}</span>\n <div class=pull-right>\n <pagination total-items=vm.cursor.total ng-model=vm.currentPage class=pagination-sm previous-text=‹ next-text=› items-per-page=vm.selectedPageSize.value ng-change=vm.getOrders() max-size=vm.maxSize></pagination>\n </div>\n </div>\n </div>\n\n\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left">  Back to My Account</i>\n </a>\n </div>\n </div>\n </div>\n</div>'),a.put("my-account/payment-profiles.html",'<div class="th-my-account th-payment-profiles container" data-ng-cloak="">\n\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n {{vm.pageTitle}}\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-6 col-md-6">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n <div data-ng-show="!vm.paymentProfileToEdit && !vm.paymentProfileToAdd" class=animate-show>\n <div class=th-list>\n <div class=th-list__header ng-repeat-end>\n <a class=th-list__header__item href data-ng-click=vm.addPaymentProfile()><i class="fa fa-plus"></i>  Add a\n Credit Card</a>\n </div>\n <div data-ng-repeat="paymentProfile in vm.paymentProfiles" class=th-list__item>\n <div class=styled-optionbox-option>\n <div vn-credit-card-display-actions data-payment-profile=paymentProfile data-on-make-preferred-clicked=vm.makePaymentProfilePreferred($index) data-on-delete-clicked=vm.deletePaymentProfile(paymentProfile) data-on-edit-clicked=vm.editPaymentProfile(paymentProfile)>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div data-ng-show=vm.paymentProfileToAdd class="th-address__enterAddress animate-show">\n <div data-vn-credit-card-editor="" data-ng-if=vm.paymentProfileToAdd data-card=vm.paymentProfileToAdd.card data-title="Edit Shipping Address" data-on-save=vm.saveNewPaymentProfile() data-on-cancel=vm.cancelAddPaymentProfile() data-show-save-button=true data-save-text=add data-show-cancel-button=true>\n </div>\n </div>\n\n </div>\n <div class="col-xs-12 col-sm-5 col-md-4 col-md-offset-1 th-my-account__group">\n <div class=th-my-account__title>More Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.shippingaddresses>Shipping Addresses</a></li>\n <li><a href="" data-ui-sref=my-account.billingaddresses>Billing Addresses</a></li>\n </ul>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left">  Back to My Account</i>\n </a>\n </div>\n\n</div>'),a.put("my-account/shipping-addresses.html",'<div class="th-my-account container" data-ng-cloak="">\n\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n {{vm.pageTitle}}\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-7 col-md-7">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n <div data-ng-show="!vm.addressToEdit && !vm.addressToAdd" class="th-address__choose animate-show">\n <div class=th-address__choose__options>\n <a href data-ng-click=vm.addAddress() class=th-address__choose__options__new-option ng-repeat-end>\n <i class="fa fa-plus"></i>  Add a Shipping Address\n </a>\n <div data-ng-repeat="shippingAddress in vm.shippingAddresses" class=th-address__choose__options__option>\n <div class=styled-optionbox-option>\n <div vn-address-display-actions="" data-address=shippingAddress data-on-make-preferred-clicked=vm.makeAddressPreferred($index) data-on-delete-clicked=vm.deleteAddress(address) data-on-edit-clicked="vm.editAddress(address, $index)" data-shipping=true></div>\n </div>\n </div>\n </div>\n </div>\n <div data-ng-show=vm.addressToEdit class="th-address__enterAddress animate-show">\n <div data-vn-address-editor="" data-ng-if=vm.addressToEdit data-countries=vm.countries data-address=vm.addressToEdit data-title="Edit Shipping Address" data-on-save=vm.saveEditedAddress() data-on-cancel=vm.cancelEditAddress() data-show-save-button=true data-save-text=save data-show-cancel-button=true data-shipping=true>\n </div>\n </div>\n <div data-ng-show=vm.addressToAdd class="th-address__enterAddress animate-show">\n <div data-vn-address-editor="" data-ng-if=vm.addressToAdd data-countries=vm.countries data-address=vm.addressToAdd data-title="Edit Shipping Address" data-on-save=vm.saveNewAddress() data-on-cancel=vm.cancelAddAddress() data-show-save-button=true data-save-text=add data-show-cancel-button=true data-shipping=true>\n </div>\n </div>\n\n </div>\n <div class="col-xs-12 col-sm-5 col-md-4 col-md-offset-1 th-my-account__group">\n <div class=th-my-account__title>More Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.billingaddresses>Billing Addresses</a></li>\n <li><a href="" data-ui-sref=my-account.paymentprofiles>Payment Profiles</a></li>\n </ul>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left">  Back to My Account</i>\n </a>\n </div>\n\n</div>'),a.put("nav-menu-mobile/vn-nav-mobile.tpl.html",'<ul class="nav navbar-nav th-mobile-list">\n <li class="th-mobile-list__item th-mobile-list__item--header">Categories</li>\n <li class="dropdown th-mobile-list__item" ng-repeat="category in categories">\n <a href=# class="dropdown-toggle navbar-link th-dropdown-toggle th-mobile-list__link" ng-if=category.subCategories.length data-toggle=dropdown>\n {{category.name}} <span class="pull-right caret"></span>\n </a>\n <a data-ng-href={{category.url}} class="navbar-link th-dropdown-toggle th-mobile-list__link" ng-if=!category.subCategories.length>\n {{category.name}}\n </a>\n <ul class="dropdown-menu th-mobile-list th-mobile-list--sub" data-ng-if=category.subCategories.length>\n <li>\n <a data-ng-href={{category.url}} class="th-mobile-list__link th-mobile-list__link--sub">\n All {{category.name}}\n </a>\n </li>\n <li data-ng-repeat="subCategory in category.subCategories">\n <a class="th-mobile-list__link th-mobile-list__link--sub" data-ng-href={{subCategory.url}}>{{subCategory.name}}</a>\n </li>\n </ul>\n </li>\n</ul>'),a.put("nav-menu/vn-nav.tpl.html",'<div class="collapse navbar-collapse" id=th-main-menu data-ng-class="!navCollapsed && \'in\'" data-ng-click="navCollapsed=true">\n <ul class="nav navbar-nav">\n <li class="dropdown nav-top-level-menu-items" data-ng-repeat="category in smartNavCategories">\n <a class=navbar-link data-ng-href="{{ category.url }}">\n {{category.name}}\n <span data-ng-if=category.subCategories.length class="caret th-dropdown-toggle"></span>\n </a>\n <ul vn-show-on-dropdown-hover class=dropdown-menu data-ng-if=category.subCategories.length>\n <li data-ng-repeat="subCategory in category.subCategories">\n <a data-ng-href="{{ subCategory.url }}">{{subCategory.name}}</a>\n </li>\n </ul>\n </li>\n <li class=dropdown data-ng-show=displaySmartNavMoreMenuItem>\n <a href=# class=navbar-link data-translate=header.smartNavMoreLinkText>\n More\n <span class="caret th-dropdown-toggle"></span>\n </a>\n <ul vn-show-on-dropdown-hover class=dropdown-menu>\n <li data-ng-repeat="category in smartNavMoreCategories">\n <a class=navbar-link data-ng-href="{{ category.url }}">{{category.name}}</a>\n </li>\n </ul>\n </li>\n </ul>\n </div>'),a.put("orders/vn-order-list-view.tpl.html",'<div class="th-order-list-view container-fluid">\n <a href ui-sref="my-account.orders.detail({id: order.orderId})" class="th-order-list-view__item list-group-item row" data-ng-repeat="order in orders">\n <div class="col-xs-7 th-order-list-view__item-left">\n <div class=th-order-list-view__item__id data-ng-bind=::order.orderId></div>\n <div class=th-order-list-view__item__num-items>\n {{::order.orderItems.length}} Items\n </div>\n <div class=th-order-list-view__item__status data-ng-bind=::order.orderStatus></div>\n </div>\n <div class="col-xs-5 th-order-list-view__item-right">\n <div class=th-order-list-view__item__date data-ng-bind="::order.orderDate | date"></div>\n <div class=th-order-list-view__item__total data-ng-bind="::order.orderTotal | currency"></div>\n </div>\n </a>\n</div>'),a.put("orders/vn-order-table.tpl.html",'<table class="th-orders-table table table-striped table-hover">\n <thead>\n <tr>\n <th>Order #</th>\n <th>Order Date</th>\n <th>Items</th>\n <th>Order Total</th>\n <th>Status</th>\n </tr>\n </thead>\n <tbody>\n <tr data-ng-repeat="order in orders">\n <td><a href ui-sref="my-account.orders.detail({id: order.orderId})">{{ ::order.orderId }}</a></td>\n <td data-ng-bind="::order.orderDate | date"></td>\n <td data-ng-bind=::order.orderItems.length></td>\n <td data-ng-bind="::order.orderTotal | currency"></td>\n <td data-ng-bind=::order.orderStatus></td>\n </tr>\n </tbody>\n</table>'),a.put("pagination/vnPaginator.tpl.html",'<ul class=pager data-ng-if="cursor.totalPages > 1">\n <li data-ng-class="{disabled: cursor.currentPage == 1}">\n <a href data-ng-click=prevPage()><span class="glyphicon glyphicon-chevron-left"></span></a></li>\n <li data-ng-class="{disabled: cursor.currentPage == cursor.totalPages}">\n <a href data-ng-click=nextPage()><span class="glyphicon glyphicon-chevron-right"></span></a></li>\n</ul>\n\n <div class=pager>\n Page {{ cursor.currentPage }} of {{ cursor.totalPages }}\n </div>'),a.put("pay-with/credit-card-views.html",'<div data-ng-controller="CreditCardViewsCtrl as cc" data-ng-init=cc.init() data-ng-switch=cc.state>\n\n <div data-vn-credit-card-display data-ng-switch-when=VALIDCARDENTERED data-card=cc.card data-on-dirty=cc.setCardValidFalse() data-on-save=cc.saveCreditCard() data-on-click=cc.toggleChange() data-state=cc.displayCardState>\n </div>\n\n <div data-vn-credit-card-editor data-ng-switch-when=ENTERCARD data-card=cc.card data-on-dirty=cc.setCardValidFalse() data-show-save-button=false data-on-save=cc.saveCreditCard()>\n </div>\n\n <div data-vn-credit-card-picker data-ng-switch-when=PICKCARD data-state=cc.pickCardState data-card=cc.card data-card-list=cc.user.paymentProfiles data-on-select="" data-open-credit-cards=true data-close-picker=cc.closePicker() data-choose-picker=cc.choosePicker() data-enter-card=cc.enterCard() data-set-payment-profile=cc.setPaymentProfile(id) data-selected-index=cc.selectedIndex data-on-dirty-card=cc.setCardValidFalse() data-on-save-card=cc.saveCreditCard()>\n </div>\n\n</div>'),a.put("pay-with/vn-credit-card-display-action.html",'<div class="container-fluid vn-credit-card-display-action no-padding">\n <div class=row>\n <div class=col-xs-6>\n <span class=th-credit-card__img data-ng-class=paymentProfile.card.ccCssClass></span>\n   <span>{{ paymentProfile.card.cardNumber.slice(-4) }}</span>\n </div>\n <div class="col-xs-6 align-right">\n <span>{{ paymentProfile.card.expMonth }}/{{ paymentProfile.card.expYear }}</span>\n </div>\n </div>\n\n <div class="row th-address__display__actions">\n <div class="col-xs-6 th-address__display__actions__preferred">\n <span data-ng-if=!paymentProfile.preferred>\n <button class="btn btn-default" data-ng-click=onMakePreferredClicked()>Make Preferred</button>\n </span>\n <span data-ng-if=paymentProfile.preferred><i class="fa fa-check"></i> Preferred</span>\n </div>\n <div class="col-xs-6 align-right">\n <a href data-ng-click="onDeleteClicked({paymentProfile: paymentProfile})">\n <i class="fa fa-trash-o"></i>\n </a>\n </div>\n </div>\n</div>'),a.put("pay-with/vn-credit-card-display.html",'<div class=th-credit-card__display data-ng-class="{ \'-verify-CVV\' : state == \'CVV\'}">\n <div class=row data-ng-class="{\'clickable\': !readonlyVal}" data-ng-cloak data-ng-click=onClick()>\n <div class=col-xs-10>\n <span class=th-credit-card__img data-ng-class=card.ccCssClass></span>\n <span class=th-credit-card__display__last4>{{ card.cardNumber.slice(-4) }}</span>\n <span class=th-credit-card__display__exp>{{card.expMonth }}/{{card.expYear }}</span>\n </div>\n <div class=col-xs-2 data-ng-show=showArrowVal>\n <i class="fa fa-angle-right fa-2x pull-right"></i>\n </div>\n </div>\n <form id=frmCVV name=frmCVV novalidate ng-show="state==\'CVV\'">\n <hr>\n <div class=form-group>\n <div class=row>\n <div class="col-xs-7 th-credit-card__display__verifyCVV">\n <label class=th-credit-card__display__verifyCVV__label>Please verify your card</label>\n </div>\n <div class="col-xs-4 col-sm-2 th-credit-card__display__verifyCVV">\n <input id=inputCreditCardCVV name=inputCreditCardCVV class="form-control input-lg immediate-help" data-vn-placeholder=CVV data-ng-model=card.CVV data-vn-cvv-validate data-vn-cc-type="{{ card.cardTypeName }}" required>\n <input type=hidden data-ng-model=card.pCIaaSId id=hiddenCardID value="{{ card.pCIaaSId }}" name="hiddenCardID">\n <div class="input-help top" ng-if=frmCVV.inputCreditCardCVV.$touched>\n <div class=arrow></div>\n <h4>CVV must:</h4>\n <ul>\n <li ng-class=cvvValidFormat>Be <strong>{{ cvvLength }} digits</strong> long</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </form>\n</div>'),a.put("pay-with/vn-credit-card-editor.html",'<div>\n <div class="credit-card-error -aligned" ng-if=card.pCIaaSError ng-click="card.pCIaaSError = \'\'">\n <div class=row>{{card.pCIaaSError}}</div>\n </div>\n <div class="th-credit-card -aligned" ng-cloak>\n <div class=th-credit-card__strip></div>\n\n <form id=frmCreditCard name=frmCreditCard novalidate data-ng-submit=updateCreditCard()>\n <div class=row>\n <div class=col-xs-9>\n <div class=form-group>\n <input id=inputCreditCardNumber name=inputCreditCardNumber class="form-control input-lg immediate-help" data-vn-placeholder="Credit card number" data-ng-model=card.cardNumber data-vn-format-cc-number data-vn-cc-validate data-vn-cc-type="{{ card.cardTypeName }}" required>\n <div class="input-help top-left" ng-if=frmCreditCard.inputCreditCardNumber.$touched>\n <div class=arrow></div>\n <h4>Credit card must:</h4>\n <ul>\n <li ng-class=creditCardValid>Be <strong>valid</strong> credit card number</li>\n </ul>\n </div>\n </div>\n <input type=hidden data-ng-hide=true id=hiddenCardType name=hiddenCardType value="{{ card.cardTypeName }}">\n <input type=hidden data-ng-model=card.pCIaaSId id=hiddenCardID value="{{ card.pCIaaSId }}" name="hiddenCardID">\n\n </div>\n <div class=col-xs-3>\n <div class=form-group>\n <input id=inputCreditCardCVV name=inputCreditCardCVV class="form-control input-lg immediate-help" data-vn-placeholder=CVV data-ng-model=card.CVV data-ng-focus=setCCImage() data-ng-blur="setCCImage(\'reset\');" data-vn-cvv-validate data-vn-cc-type="{{ card.cardTypeName }}" required>\n\n <div class="input-help top" ng-if=frmCreditCard.inputCreditCardCVV.$touched>\n <div class=arrow></div>\n <h4>CVV must:</h4>\n <ul>\n <li ng-class=cvvValidFormat>Be <strong>{{ cvvLength }} digits</strong> long</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n\n <div class=row>\n <div class=col-xs-4>\n <div class=form-group>\n <div class="th-credit-card__exp-month th-dropdown" dropdown>\n <button id=inputCreditCardExpMonth name=inputCreditCardExpMonth class="btn btn-default btn-lg dropdown-toggle form-control immediate-help" type=button data-toggle=dropdown dropdown-togle aria-haspopup=true role=button aria-expanded=false data-ng-class="{ \'ng-invalid\': card.expMonth === \'\' || expDateInvalid === undefined, \'ng-valid\': expDateInvalid === \'valid\' }" data-vn-placeholder=MM data-ng-model=card.expMonth value="{{ card.expMonth }}">\n\n {{ card.expMonth }}<span class=caret></span>\n </button>\n <div class="input-help top-left -dropdown" ng-if=frmCreditCard.inputCreditCardExpMonth.$touched>\n <div class=arrow></div>\n <h4>Expiration date must:</h4>\n <ul>\n <li ng-class=expDateInvalid>Be <strong>future</strong> date</li>\n </ul>\n </div>\n <ul class=dropdown-menu role=menu aria-labelledby=inputCreditCardExpMonth>\n <li ng-repeat="month in months track by $index">\n <a role=menuitem tabindex=-1 href data-ng-click="onExpMonthChanged(month, \'inputCreditCardExpMonth\');">\n\n {{ month.label }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class=col-xs-4>\n <div class=form-group>\n <div class="th-credit-card__exp-year th-dropdown" dropdown>\n <button id=inputCreditCardExpYear name=inputCreditCardExpYear class="btn btn-default btn-lg dropdown-toggle form-control immediate-help" type=button data-toggle=dropdown dropdown-toggle aria-haspopup=true role=button aria-expanded=false data-ng-class="{ \'ng-invalid\': card.expYear === \'\' || expDateInvalid === undefined }" data-vn-placeholder=YY data-ng-model=card.expYear value="{{ card.expYear }}">\n\n {{ card.expYear }}<span class=caret></span>\n </button>\n <div class="input-help top-left -dropdown" ng-if=frmCreditCard.inputCreditCardExpYear.$touched>\n <div class=arrow></div>\n <h4>Expiration date must:</h4>\n <ul>\n <li ng-class=expDateInvalid>Be <strong>future</strong> date</li>\n </ul>\n </div>\n <ul class=dropdown-menu role=menu aria-labelledby=inputCreditCardExpYear>\n <li ng-repeat="year in rangeYears() track by $index">\n <a role=menuitem tabindex=-1 href data-ng-click="onExpYearChanged(year, \'inputCreditCardExpYear\');">\n\n {{ year }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class=col-xs-4>\n <div class=form-group>\n <span class=th-credit-card__img data-ng-class=card.ccCssClass></span>\n </div>\n </div>\n </div>\n\n </form>\n </div>\n <div class=container-fluid>\n <div class=row data-ng-if=showCancelButtonValue>\n <div class=col-xs-6>\n <button class="btn btn-default btn-block btn-lg th-checkout__step__cancel" data-ng-click=onCancel()>\n {{cancelText}}\n </button>\n </div>\n <div class=col-xs-6>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn__continue" data-ng-click=saveCard() data-ng-enabled=frmAddress.$valid data-ng-if=showSaveButtonValue>\n {{saveText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n <div class=row data-ng-if=!showCancelButtonValue>\n <div class=col-xs-12>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn__continue" data-ng-click=saveCard() data-ng-enabled=frmAddress.$valid data-ng-if=showSaveButtonValue>\n {{saveText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n </div>\n</div>'),a.put("pay-with/vn-credit-card-picker.html",'<div ng-cloak>\n\n <div class="th-checkout__step__drawer -left" data-ng-class="{\'-open\': openCreditCards}">\n\n <div class=th-checkout__step__drawer__body data-ng-show=openCreditCards data-ng-cloak data-ng-switch=state>\n\n <div data-ng-switch-when=PICK>\n <a href class=th-checkout__step__drawer__close data-ng-click=closePicker()>\n <i class="fa fa-close fa-2x"></i>\n </a>\n\n <div class=th-checkout__step__drawer__title>Choose credit card</div>\n\n <div class=th-credit-card__choose>\n <div class=th-credit-card__choose__options ng-cloak>\n <label class=th-credit-card__choose__options__option data-ng-repeat="profile in cardList" data-ng-class="{\'-first\' : $index === 0}" for="profile{{ $index }}">\n <div class=styled-optionbox-option>\n <input type=radio id="profile{{ $index }}" name=profile data-ng-value=true data-ng-model=profile.preferred data-ng-class="{\'-inactive\' : !profile.preferred, \'-selected\' : profile.preferred}" data-ng-change="setIndex({{ $index }})">\n\n <div>\n <span class=th-credit-card__img data-ng-class=getCssClass(profile)></span>\n <span class=th-credit-card__display__last4>{{ profile.card.last4 }}</span>\n <span class=th-credit-card__display__exp>{{ profile.card.expMonth }}/{{ profile.card.expYear }}</span>\n </div>\n </div>\n </label>\n\n <a href class=th-credit-card__choose__options__new-option ng-repeat-end ng-cloak data-ng-click=addCard()>\n Enter a different card\n </a>\n </div>\n\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn__continue" data-ng-click=choosePicker()>\n Continue <i class="fa fa-angle-right"></i>\n </button>\n </div>\n\n <div class=th__back-button>\n <a href=javascript:void(0); data-ng-click=closePicker()>\n <i class="fa fa-arrow-left"> back</i>\n </a>\n </div>\n </div>\n\n <div data-ng-switch-when=ENTER>\n <div class=th-checkout__step__drawer__title>Add credit card</div>\n <div data-vn-credit-card-editor data-card=card data-on-dirty=onDirtyCard() data-on-save=onSaveCard() data-show-save-button=true>\n </div>\n <div class=th__back-button>\n <a href=javascript:void(0); data-ng-click=goBackFromEnter()>\n <i class="fa fa-arrow-left"> back</i>\n </a>\n </div>\n </div>\n\n </div>\n </div>\n\n</div>'),a.put("popover/vn-popover.tpl.html",'<div class="input-help {{ ::location }}">\n <div class=arrow></div>\n <h4>{{ ::title }}</h4>\n</div>'),a.put("product-image/vn-product-image.tpl.html",'<img data-ng-src="{{ getImagePath(product.imageCollections) }}" class=img-responsive alt="{{ product.name }}">'),a.put("product-search/vnSearchForm.tpl.html",'<div class=th-search role=search>\n <div data-ng-show=showSearch class=th-search__popout>\n <form class=form-inline role=search name=frmSearch data-ng-submit=doSearch() novalidate>\n <div class=form-group>\n <input data-ng-model=searchTerm class=th-search__popout--input placeholder=Search...>\n <button type=button data-ng-click=doSearch() class="btn btn-xs btn-primary th-search__popout--submit">Go!\n </button>\n </div>\n </form>\n </div>\n\n <a id=search-toggle data-ng-click="showSearch = !showSearch" ng-show=allowCollapse type=button class=th-search__trigger data-ng-class="{ \'-position\' : !showSearch }">\n <span class="glyphicon glyphicon-search"></span>\n </a>\n</div>'),a.put("review/review-details-2.html",'<div data-ng-controller=ReviewDetailsCtrl>\n\n <div class=th-checkout__thanks__title>Ship To</div>\n <div class="th-address__display -readonly" data-ng-if=shippingAddress>\n <div vn-address-display data-address=shippingAddress></div>\n </div>\n\n <div class=th-checkout__thanks__title>Shipping Method</div>\n <div class=th-checkout__ship-method>\n <div class=th-checkout__ship-method__display data-ng-if=shippingMethod>\n <div class=th-checkout__ship-method__display__name data-ng-bind-html=shippingMethod.name></div>\n <div class=th-checkout__ship-method__display__price>{{ shippingMethod.price | vnCurrency }}</div>\n </div>\n </div>\n\n <div class=th-checkout__thanks__title>Paid With</div>\n <div data-vn-credit-card-display data-card=payment.card data-state=NOCVV data-show-arrow=false data-readonly=true>\n </div>\n\n <div class=th-checkout__thanks__title>Billing Address</div>\n <div class="th-address__display -readonly" data-ng-if=billingAddress>\n <div vn-address-display data-address=billingAddress></div>\n </div>\n\n</div>'),a.put("review/vn-review-details.html",'<div>\n <div class=th-checkout__thanks__title>Ship To</div>\n <div class=th-checkout__thanks__display>\n <span>{{ shippingAddress.firstName }} {{ shippingAddress.lastName }}</span>\n <span><br>{{ shippingAddress.address1 }}</span>\n <span data-ng-if=shippingAddress.address2><br>{{ shippingAddress.address2 }}</span>\n <span data-ng-if=isShippingLocationUS>\n <span><br>{{ shippingAddress.city }}, {{ shippingAddress.state }} {{ shippingAddress.postalCode }}</span>\n <span><br>{{ shippingAddress.phoneNumber | vnUsPhone }}</span>\n </span>\n\n \n <span data-ng-if=!isShippingLocationUS>\n <span><br>{{ shippingAddress.city }}</span>\n <span><br>{{ shippingAddress.state }} {{ shippingAddress.postalCode }}</span>\n <span><br>{{ shippingAddress.country }}</span>\n <span><br>{{ shippingAddress.phoneNumber }}</span>\n </span>\n \n </div>\n\n <div class=th-checkout__thanks__title>Shipping Method</div>\n <div class="th-checkout__thanks__display container-fluid">\n <div class=row>\n <div class=col-xs-6>\n <div class=th-checkout__thanks__display__name data-ng-bind-html=shippingMethod.name></div>\n </div>\n <div class="col-xs-6 align-right">\n <div class=th-checkout__thanks__display__price>{{ shippingMethod.price | vnCurrency }}</div>\n </div>\n </div>\n\n </div>\n\n <div class=th-checkout__thanks__title>Paid With</div>\n\n <div class="th-checkout__thanks__display container-fluid">\n <div class=row>\n <div class=col-xs-8>\n <span class=th-credit-card__img data-ng-class=payment.card.ccCssClass></span>\n <span class=th-credit-card__display__last4>\n <span class=hidden-xs>{{ payment.card.cardNumber | vnCreditCard:payment.card.cardTypeName}}</span>\n <span class="hidden-sm hidden-md hidden-lg hidden-xl">{{payment.card.last4}}</span>\n </span>\n </div>\n <div class="col-xs-4 align-right">\n <span class=th-credit-card__display__exp>{{payment.card.expMonth }}/{{payment.card.expYear }}</span>\n </div>\n </div>\n </div>\n\n <div class=th-checkout__thanks__title>Billing Address</div>\n <div class=th-checkout__thanks__display>\n <span>{{ billingAddress.firstName }} {{ billingAddress.lastName }}</span>\n <span><br>{{ billingAddress.address1 }}</span>\n <span data-ng-if=billingAddress.address2><br>{{ billingAddress.address2 }}</span>\n <span data-ng-if=isBillingLocationUS>\n <span><br>{{ billingAddress.city }}, {{ billingAddress.state }} {{ billingAddress.postalCode }}</span>\n <span><br>{{ billingAddress.phoneNumber | vnUsPhone }}</span>\n </span>\n\n \n <span data-ng-if=!isBillingLocationUS>\n <span><br>{{ billingAddress.city }}</span>\n <span><br>{{ billingAddress.state }} {{ billingAddress.postalCode }}</span>\n <span><br>{{ billingAddress.country }}</span>\n <span><br>{{ billingAddress.phoneNumber }}</span>\n </span>\n \n </div>\n</div>'),a.put("review/vn-review.html",'<div class=th-checkout__review>\n\n <div class="th-checkout__review__totals clearfix">\n <div class=th-checkout__review__totals__count>{{ cart.totals.qty }} items</div>\n <div class=th-checkout__review__totals__expand ng-class="{expanded: !reviewItems}"><button data-ng-click="reviewItems = !reviewItems"><span></span></button></div>\n <div class=th-checkout__review__totals__amount>{{ cart.totals.items | currency }}</div>\n </div>\n\n <div class=th-checkout__review__items data-ng-show=!reviewItems>\n <div class="th-checkout__review__items__item clearfix" data-ng-repeat="item in cart.items | reverse" data-ng-class="{\'-last\': $last}">\n\n <div class=th-checkout__review__items__item-image>\n <img data-ng-src="{{ item.imgUrl }}">\n </div>\n\n <div class=th-checkout__review__items__item-info>\n <div class=th-checkout__review__items__item-info--name>\n <span>{{ item.name }}</span>\n </div>\n\n <div class=th-checkout__review__items__item-info--price>{{ item.pricing.unitPrice | currency }}</div>\n\n <div class=th-checkout__review__items__item-info--option data-ng-repeat="option in item.options">\n <span>{{ option.optionText }}</span>\n </div>\n\n <div class=item-info-row>\n <div class=th-checkout__review__items__item-info--qty>\n <span>Qty</span> {{ item.qty }}\n </div>\n <div class=th-checkout__review__items_-info--subtotal>{{ item.pricing.subtotal | currency }}</div>\n </div>\n\n <div class=item-info-row data-ng-if="item.giftWrap.price > 0">\n <div class=th-checkout__review__items__item-info--qty>\n <span>Gift Wrap</span>\n </div>\n <div class=th-checkout__review__items__item-info--subtotal>{{ item.giftWrap.price | currency }}</div>\n </div>\n\n <div class=item-info-row data-ng-if="item.giftWrap.message != \'\'">\n <span>Message:</span> "{{ item.giftWrap.message }}"\n </div>\n </div>\n </div>\n </div>\n\n <div class=th-checkout__review__discounts data-ng-if=cart.discounts.length>\n <div class=th-checkout__review__discounts__discount data-ng-repeat="discount in cart.discounts">\n <div class=discount-info-row>\n <div class=th-checkout__review__discounts__discount-info>\n <span>{{ discount.name }}</span>\n </div>\n <div class=th-checkout__review__discounts__discount-info--subtotal>{{ discount.value | vnCurrency }}</div>\n </div>\n </div>\n </div>\n\n <div class=th-checkout__review__store-credit data-ng-if="cart.customer.storeCredit != 0">\n <div class=store-credit-info-row>\n <div class=th-checkout__review__store-credit-info>\n <span>Store Credit</span>\n </div>\n <div class=th-checkout__review__store-credit-info--subtotal>{{ cart.customer.storeCredit | vnCurrency }}</div>\n </div>\n </div>\n\n <div class=th-checkout__review__shipping-method>\n <div class=shipping-method-info-row>\n <div class=th-checkout__review__shipping-method-info>\n <span>Shipping</span>\n \n \n \n </div>\n <div class=th-checkout__review__shipping-method-info--subtotal>{{cart.totals.shipping | vnCurrency }}</div>\n </div>\n </div>\n\n <div class=th-checkout__review__tax>\n <div class=tax-info-row>\n <div class=th-checkout__review__tax-info>\n <span>Tax</span>\n </div>\n <div class=th-checkout__review__tax-info--subtotal>{{ cart.totals.taxTotal | currency }}</div>\n </div>\n </div>\n\n <div class=th-checkout__review__grand-total>\n <div class=grand-total-info-row>\n <div class=th-checkout__review__grand-total-info>\n <span>Grand Total</span>\n </div>\n <div class=th-checkout__review__grand-total-info--subtotal>{{ cart.totals.grandTotal | currency }}</div>\n </div>\n </div>\n</div>'),a.put("ship-method/ship-method.html",'<div class="th-checkout__section-heading th-checkout__ship-method__heading" data-ng-show="checkout.cart.shippingMethods.length > 0">\n Shipping Method\n</div>\n\n<div class=th-checkout__ship-method data-ng-controller=ShipMethodCtrl data-ng-show="checkout.cart.shippingMethods.length > 0" data-ng-switch=isEditable()>\n\n\n <label class=th-checkout__ship-method__method data-ng-switch-when=edit data-ng-repeat="method in checkout.cart.shippingMethods" for="shipping{{ $index }}">\n\n <div class=styled-optionbox-option>\n <input type=radio id="shipping{{ $index }}" name=shipping data-ng-value=true data-ng-model=method.selected data-ng-change="setPreferredShippingMethod({{ $index }})">\n <div>\n <div data-ng-bind-html=method.name class=th-checkout__ship-method__name></div>\n </div>\n </div>\n <div class=th-checkout__ship-method__price>{{ method.price | vnCurrency }}</div>\n\n </label>\n\n <div class=th-checkout__ship-method__display data-ng-switch-when=show>\n <div class=th-checkout__ship-method__display__name data-ng-bind-html=checkout.cart.shippingMethods[currentShippingMethodIdx].name></div>\n <div class=th-checkout__ship-method__display__price>{{ checkout.cart.shippingMethods[currentShippingMethodIdx].price | vnCurrency }}</div>\n\n </div>\n\n</div>'), +}else b.ncyBreadcrumbLabel=b.name})};d.$on("$viewContentLoaded",function(){g()}),g()}}}}function h(a,b,c){return{restrict:"A",scope:{},template:"{{ncyBreadcrumbLabel}}",compile:function(d,e){var f=d.attr(e.$attr.ncyBreadcrumbLast);return f&&d.html(f),{post:function(d){var e=[],f=function(){k(e);var c=b.$getLastViewScope(),f=b.getLastStep();if(f)if(d.ncyBreadcrumbLink=f.ncyBreadcrumbLink,f.ncyBreadcrumb&&f.ncyBreadcrumb.label){var g=a(f.ncyBreadcrumb.label);d.ncyBreadcrumbLabel=g(c),j(e,g,c,d)}else d.ncyBreadcrumbLabel=f.name};c.$on("$viewContentLoaded",function(){f()}),f()}}}}}var i=function(a){if(a.expressions)return a.expressions;var c=[];return b.forEach(a.parts,function(a){b.isFunction(a)&&c.push(a.exp)}),c},j=function(a,c,d,e){b.forEach(i(c),function(b){var f=d.$watch(b,function(){e.ncyBreadcrumbLabel=c(d)});a.push(f)})},k=function(a){b.forEach(a,function(a){a()}),a=[]};g.$inject=["$interpolate","$breadcrumb","$rootScope"],h.$inject=["$interpolate","$breadcrumb","$rootScope"],b.module("ncy-angular-breadcrumb",["ui.router.state"]).provider("$breadcrumb",f).directive("ncyBreadcrumb",g).directive("ncyBreadcrumbLast",h)}(window,window.angular),angular.module("Volusion.toolboxCommon.templates",[]),angular.module("Volusion.toolboxCommon",["ngCookies","ngSanitize","pascalprecht.translate","ui.bootstrap","Volusion.toolboxCommon.templates","ngLodash","ngAria","ncy-angular-breadcrumb"]).config(["$httpProvider","$translateProvider",function(a,b){"use strict";a.interceptors.push("vnHttpResponseInterceptor");var c={"VN-CAROUSEL-TITLE":"Inline Images:","VN-IMAGE-TITLE":"Image:","VN-RATING-TITLE":"Rating:"},d={"VN-CAROUSEL-TITLE":"Imágenes","VN-IMAGE-TITLE":"Imáge:","VN-RATING-TITLE":"Clasificación"};b.translations("en",c).translations("es",d).preferredLanguage("en")}]).run(["$rootScope","$window","vnCacheBustFilter","$state",function(a,b,c,d){"use strict";a.isInDesktopMode=!0,a.overridesCSS=c("/styles/overrides.css"),a.$on("$routeChangeError",function(a,c,d,e){404===e.status&&b.location.replace("/404.html")}),a.$on("$stateChangeError",function(a,b){a.preventDefault(),d.go(-1!==b.name.indexOf("my-account")?"my-account-login":"home")})}]),angular.module("Volusion.toolboxCommon").service("vnAccountSession",[function(){return this.create=function(a){this.id=a},this.destroy=function(){this.id=null},this}]),angular.module("Volusion.toolboxCommon").constant("VN_AUTH_EVENTS",{loginSuccess:"vn-auth-login-success",logoutSuccess:"vn-auth-logout-success",loginFailed:"vn-auth-login-failed",sessionTimeout:"vn-auth-session-timeout",notAuthenticated:"vn-auth-not-authenticated",notAuthorized:"vn-auth-not-authorized"}),angular.module("Volusion.toolboxCommon").factory("vnAuthService",["$http","$rootScope","$q","$cookies","vnAppConfig","vnAccountSession","VN_AUTH_EVENTS","vnUser",function(a,b,c,d,e,f,g,h){function i(c){return a({method:"POST",url:e.getLoginUrl(),headers:{"Content-Type":"application/x-www-form-urlencoded"},transformRequest:function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(encodeURIComponent(c)+"="+encodeURIComponent(a[c]));return b.join("&")},data:c,withCredentials:!0}).success(function(a){return f.create(a.CustomerId),d.CustomerID=a.CustomerId,b.$emit(g.loginSuccess,a.CustomerId)})["catch"](function(a){return b.$emit(g.loginFailed,a)})}function j(){return!!f.id}function k(){f.destroy(),delete d.CustomerID,n(),b.$emit(g.logoutSuccess)}function l(b){return a({method:"POST",url:e.getForgotPasswordUrl(),headers:{"Content-Type":"application/x-www-form-urlencoded"},transformRequest:function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(encodeURIComponent(c)+"="+encodeURIComponent(a[c]));return b.join("&")},data:{Email:b},withCredentials:!0})}function m(){var a=c.defer();return d.CustomerID?(h.getCurrentUser().then(function(){f.create(d.CustomerId),h.setAnonymous(!1),b.$emit(g.loginSuccess,d.CustomerID),a.resolve()},function(){a.resolve()}),a.promise):!0}function n(){for(var a in d)-1!==a.indexOf("ASPSESSIONID")&&delete d[a]}return{login:i,loginFromCookie:m,isAuthenticated:j,logout:k,forgotPassword:l}}]),angular.module("Volusion.toolboxCommon").directive("vnAddressDisplay",function(){"use strict";return{restrict:"AE",replace:!0,scope:{address:"=",showEditButton:"=",onClick:"&",shipping:"@"},templateUrl:"address/address-display.tpl.html",link:function(a){a.isLocationUS=!0,a.shippingValue="true"===a.shipping?!0:!1,a.$watch("address.country",function(b){b&&(a.isLocationUS="United States"===b)})}}}),angular.module("Volusion.toolboxCommon").directive("vnAddressDisplayActions",function(){return{restrict:"A",scope:{address:"=",onMakePreferredClicked:"&",onDeleteClicked:"&",onEditClicked:"&",shipping:"@"},templateUrl:"address/vn-address-display-actions.tpl.html"}}),angular.module("Volusion.toolboxCommon").directive("vnAddressPicker",["$rootScope","vnAddressUtilities",function(a,b){return{restrict:"AE",replace:!0,scope:{addressCopied:"=",addressList:"=",backToText:"@",copyAddressHandler:"&",copyAddressText:"@",countries:"=",newAddressTitle:"@",onAddressSelected:"&",saveAddress:"&",selectAddressTitle:"@",showCopyAddress:"=",shipping:"@"},templateUrl:"address/vn-address-picker.tpl.html",link:function(c){c.openAddressPicker=!0,c.state="ADDRESSLIST",c.setPreferredAddress=function(a){b.setPreferredAddress(c.addressList,a)},c.createNewAddress=function(){c.state="NEWADDRESS",c.newAddress=b.createEmptyAddress(),c.showCopyAddress&&a.$emit("vnAddressPicker.addAddressClicked")},c.selectAddress=function(){c.onAddressSelected(),c.openAddressPicker=!1}}}}]),angular.module("Volusion.toolboxCommon").factory("vnAddressUtilities",["lodash",function(a){return{createEmptyAddress:function(){return{address1:"",address2:"",city:"",companyName:"",country:"United States",firstName:"",lastName:"",phoneNumber:"",postalCode:"",preferred:!0,residential:!0,state:""}},setPreferredAddress:function(b,c){a.forEach(b,function(a,b){a.preferred=c===b})},getPreferredAddress:function(b){return a.find(b,function(a){return a.preferred})||b[0]},removeAddressFromList:function(b,c){return a.reject(b,function(a){return a.id===c.id})}}}]),angular.module("Volusion.toolboxCommon").controller("vnAppMessageCtrl",["vnAppMessageService","$rootScope",function(a,b){var c=this;c.alerts=a.getMessages(),c.closeAlert=function(b){a.removeMessage(b)},b.$on("$stateChangeStart",function(a,b,d,e){"my-account"===e.name&&(c.alerts.length=0)})}]),angular.module("Volusion.toolboxCommon").directive("vnAppMessage",function(){return{restrict:"EA",controller:"vnAppMessageCtrl",controllerAs:"appMessagesCtrl",templateUrl:"app-messages/vnAppMessage.tpl.html"}}),angular.module("Volusion.toolboxCommon").service("vnAppMessageService",[function(){var a={},b=[];return a.addMessage=function(a){var c={id:Date.now(),type:a.type||"warning",text:a.text};b.push(c)},a.getMessages=function(){return b},a.removeMessage=function(a){angular.forEach(b,function(c,d){c&&c.id===a&&b.splice(d,1)})},a}]),angular.module("Volusion.toolboxCommon").controller("BillingAddressViewsCtrl",["$scope","$rootScope","vnAddressUtilities","vnCheckout","vnUser",function(a,b,c,d,e){var f=1,g=-1,h=this;h.state=null,h.showCopyAddress=!0,h.useShippingAddress=!1,h.init=function(){h.checkout=d.get(),h.user=e.getUser(),h.user.anonymous?(h.billingAddress=c.createEmptyAddress(),h.state="EDITADDRESS"):e.getBillingAddresses().then(function(a){a&&a.length?(h.billingAddress=c.getPreferredAddress(a),h.onAfterAddressSave()):(h.billingAddress=c.createEmptyAddress(),h.state="EDITADDRESS")}),d.getCountries().then(function(a){h.countries=a.data})},h.editBillingAddress=function(){!h.user.anonymous&&h.user.billingAddresses&&h.user.billingAddresses.length?(h.state="PICKADDRESS",d.setHasOpenDrawer(f,!0)):h.state="EDITADDRESS"},h.onAddressSelected=function(){h.useShippingAddress=!1,h.billingAddress=c.getPreferredAddress(h.user.billingAddresses),h.onAfterAddressSave(),d.setHasOpenDrawer(f,!1)},h.onAddressAdded=function(a){h.billingAddress=a,h.addAddressToBillingAddresses(h.billingAddress),h.onAfterAddressSave()},h.saveBillingAddress=function(){"EDITADDRESS"===h.state&&h.addAddressToBillingAddresses(h.billingAddress),h.onAfterAddressSave()},h.copyShippingAddress=function(){if(h.user.anonymous)h.useShippingAddress?(angular.copy(h.checkout.cart.shippingAddress,h.billingAddress),h.saveBillingAddress()):h.state="EDITADDRESS";else{h.useShippingAddress=!0;var a=c.createEmptyAddress();angular.copy(h.checkout.cart.shippingAddress,a),h.addAddressToBillingAddresses(a,!0),h.billingAddress=c.getPreferredAddress(h.user.billingAddresses),h.saveBillingAddress()}},h.setShippingAddressFalse=function(){h.state="EDITADDRESS",h.useShippingAddress=!1,d.setBillToValidity(!1)},h.addAddressToBillingAddresses=function(a,b){var d;if(h.user.anonymous)h.user.billingAddresses=[],d=h.user.billingAddresses.push(a),c.setPreferredAddress(h.user.billingAddresses,d-1);else if(b){if(-1===g)e.setBillingAddress(a).then(function(b){a.id=b}),d=h.user.billingAddresses.push(a),g=d-1;else{var f=h.user.billingAddresses[g];angular.extend(f,a),e.updateBillingAddress(f)}c.setPreferredAddress(h.user.billingAddresses,g)}else h.useShippingAddress=!1,e.setBillingAddress(a).then(function(b){a.id=b}),d=h.user.billingAddresses.push(a),c.setPreferredAddress(h.user.billingAddresses,d-1)},h.onAfterAddressSave=function(){d.setBillToValidity(!0),d.setBillingAddress(h.billingAddress),d.updateCart(),h.state="VIEWADDRESS"},b.$on("vnPayment.validate",function(){"VIEWADDRESS"===h.state&&(d.setBillToValidity(!0),b.$emit("vnPayment.validate.continue"))}),b.$on("vnAddressPicker.addAddressClicked",function(){h.useShippingAddress=!1}),a.$watch(function(){return h.useShippingAddress},function(a){var c=angular.noop;a?c=b.$on("checkout.shippingaddress.changed",function(){h.useShippingAddress&&h.copyShippingAddress()}):c()})}]),angular.module("Volusion.toolboxCommon").directive("vnBusyAnimation",function(){"use strict";return{templateUrl:"busy-animation/vnBusyAnimation.tpl.html",transclude:!0,restrict:"A",scope:{},link:function(a,b,c){a.show=!1,a["class"]=c.vnBusyAnimationClass,a.size=c.vnBusyAnimationSize||"40px",c.$observe("vnBusyAnimationShow",function(b){a.show="true"===b})}}}),angular.module("Volusion.toolboxCommon").filter("vnCacheBust",["vnTokenGenerator",function(a){function b(b){if(!b||!b.trim())return b;var c=b.indexOf("?")>-1?"&":"?";return b+c+"_="+a.getCacheBustingToken()}return function(a){return b(a)}}]),angular.module("Volusion.toolboxCommon").factory("vnTokenGenerator",function(){function a(){return(new Date).valueOf()}return{getCacheBustingToken:a}}),angular.module("Volusion.toolboxCommon").service("CheckoutService",function(){this.sharedMethods={}}).controller("CheckoutCtrl",["$rootScope","vnViewPortWatch","$scope","vnCart","vnCheckout","vnContentManager","CheckoutService","$window",function(a,b,c,d,e,f,g,h){e.initCart().promise.then(function(){e.setUser()});var i={"default":"Place Order",loading:"Placing Order"};c.placeOrderBtnText=i["default"],g.sharedMethods.nextCheckoutStep=function(){c.nextStep()},f.showCheckoutAppHeader(),f.showCheckoutAppFooter(),c.checkout=e.get(),c.isEditable=function(a){return c.checkout.currentStep===a?"edit":"show"},c.getShipToValid=function(){return!c.checkout.shipToValid},c.getShipMethodValid=function(){return!c.checkout.shipMethodValid},c.getCreditCardValid=function(){return!c.checkout.creditCardValid},c.getBillingAddressValid=function(){return!c.checkout.billToValid},c.setStep=function(a){e.setStep(a)},c.nextStep=function(){e.nextStep()},c.prevStep=function(){e.prevStep()},c.buildShippingStepLabel=function(){return'Continue <i class="fa fa-angle-right"></i>'},c.nextShippingStep=function(){c.checkout.shipToValid&&c.checkout.shipMethodValid&&e.nextStep()},c.nextBillingStep=function(){e.setBillToValidity(!1),e.setCreditCardValidity(!1),a.$emit("vnPayment.validate")},c.placeOrder=function(){e.placeOrder(),c.placeOrderBtnText=i.loading,a.$emit("checkout.stepThreeLoading");var b=a.$on("checkout.orderPlaced",function(){c.placeOrderBtnText=i["default"],a.$emit("checkout.stopLoading"),b()})},b.setBreakpoints([{name:"Non-Desktop",mediaQuery:"screen and (max-width:991px)",onUnmatch:function(){c.isInDesktopMode=!0},onMatch:function(){c.isInDesktopMode=!1}}]),a.$on("vnPayment.validate.continue",function(){c.checkout.creditCardValid&&c.checkout.billToValid&&e.nextStep()}),a.$on("checkout.stepChanged",function(){h.scrollTo(0,0)}),c.$on("$destroy",function(){f.showAppHeader(),f.showAppFooter()}),c.$on("vnShipTo.edit",function(a){c.hideShippingMethods=!0,a.stopPropagation()}),c.$on("vnShipTo.edit.done",function(a){c.hideShippingMethods=!1,a.stopPropagation()}),c.stepOneLoading=!1,c.stepTwoLoading=!1,c.stepThreeLoading=!1,a.$on("checkout.stepOneLoading",function(){c.stepOneLoading=!0}),a.$on("checkout.stepTwoLoading",function(){c.stepTwoLoading=!0}),a.$on("checkout.stepThreeLoading",function(){c.stepThreeLoading=!0}),a.$on("checkout.stopLoading",function(){c.stepOneLoading=!1,c.stepTwoLoading=!1,c.stepThreeLoading=!1})}]),angular.module("Volusion.toolboxCommon").directive("vnAddressEditor",["$rootScope","lodash",function(a,b){return{restrict:"EA",scope:{address:"=",countries:"=",onSave:"&",onDirty:"&",showSaveButton:"@",saveText:"@",showCancelButton:"@",cancelText:"@",onCancel:"&",shipping:"@"},templateUrl:"checkout/vn-address-editor.html",link:function(c){var d=null,e=null;c.frmAddress.$setPristine(),c.saveText=c.saveText||"Continue",c.cancelText=c.cancelText||"Cancel",c.showSaveButtonValue="false"===c.showSaveButton?!1:!0,c.showCancelButtonValue="true"===c.showCancelButton?!0:!1,c.shippingValue="true"===c.shipping?!0:!1,c.isLocationUS=!0,c.previousCountry=null,c.setCountryToOther=function(){if(c.previousCountry&&"United States"===c.previousCountry.name){var a=b.reject(c.countries,{name:"United States"});if(!a.length)return void c.setCountryToUS();c.previousCountry=null,c.frmAddress.$setDirty()}c.address.selectedCountry=c.previousCountry,c.address.country=c.address.selectedCountry?c.address.selectedCountry.name:"",c.isLocationUS=!1},c.setCountryToUS=function(){c.previousCountry=c.address.selectedCountry,c.address.selectedCountry=b.find(c.countries,{name:"United States"}),c.isLocationUS=!0,c.frmAddress.$setPristine()},c.onCountryChanged=function(a){a&&(c.previousCountry=a,c.address.country=a.name,"United States"===a.name?c.setCountryToUS():c.setCountryToOther(),c.address.selectedState={},e&&e!==a.name&&c.frmAddress.$setDirty())},c.onStateChanged=function(a){c.address.state=a.code,d&&d!==a.code&&c.frmAddress.$setDirty()},c.saveAddress=function(){if(c.address.country=c.address.selectedCountry?c.address.selectedCountry.name:"",c.frmAddress)if(c.isLocationUS?c.address.selectedState&&c.address.selectedState.code&&""!==c.address.state?(c.frmAddress.inputUSState.$setValidity("state",!0),c.frmAddress.inputUSStateLabel.$setValidity("state",!0),c.stateEmpty="valid"):(c.frmAddress.inputUSState.$setValidity("state",!1),c.frmAddress.inputUSStateLabel.$setValidity("state",!1),c.stateEmpty=void 0):""===c.address.country?(c.frmAddress.inputWorldwideCountry.$setValidity("country",!1),c.frmAddress.inputWorldwideCountryLabel.$setValidity("country",!1),c.stateEmpty=void 0):(c.frmAddress.inputWorldwideCountry.$setValidity("country",!0),c.frmAddress.inputWorldwideCountryLabel.$setValidity("country",!0),c.stateEmpty="valid"),c.frmAddress.$valid)c.address.preferred=!0,c.address.residential=angular.isDefined(c.address.residential)?c.address.residential:!0,c.frmAddress.$setPristine(),c.onSave();else for(var a in c.frmAddress)c.frmAddress.hasOwnProperty(a)&&a.indexOf("$")<0&&(c.frmAddress[a].$setDirty(),c.frmAddress[a].$setTouched())};var f=c.$watch("countries",function(){"undefined"!=typeof c.countries&&c.countries.length>0&&(c.setCountryToUS(),f())}),g=c.$watch("address.country",function(a){if(a&&c.countries){var d=b.find(c.countries,{name:a});d&&(e=d.name,c.onCountryChanged(d),g())}}),h=c.$watch("address.state",function(a){a&&c.address.selectedCountry&&c.address.selectedCountry.states&&(c.address.selectedState=b.find(c.address.selectedCountry.states,{code:a})||{},d=c.address.selectedState.code||"",h())}),i=c.$watch("frmAddress.$dirty",function(a){a&&(b.isFunction(c.onDirty)&&c.onDirty(),i())}),j=a.$on("vnPayment.validate",function(){c.saveAddress(),a.$emit("vnPayment.validate.continue")});c.$on("$destroy",function(){j()})}}}]),angular.module("Volusion.toolboxCommon").provider("vnAppConfig",[function(){function a(){this.AppConfig=function(){return this},this.getApiHost=function(){return b},this.getApiUrl=function(){return c},this.getLoginUrl=function(){return b+"/ajax_receiver.asp?system=login"},this.getForgotPasswordUrl=function(){return b+"/ajax_receiver.asp?system=forgotpassword"}}var b,c,d="us",e=!1,f="en",g="us",h="";this.setApiPath=function(a,d){b=a,c=a+d},this.getApiPath=function(){return c},this.getCountry=function(){return d},this.getIsLocalEnv=function(){return""!==b},this.getLang=function(){return f},this.getPrefix=function(){return h},this.getRegion=function(){return g},this.getTranslations=function(){return e},this.setCountry=function(a){d=a},this.setLang=function(a){f=a},this.setPrefix=function(a){h=a},this.setRegion=function(a){g=a},this.setTranslations=function(a){e=a},this.$get=function(){return new a}}]),angular.module("Volusion.toolboxCommon").service("vnSiteConfig",["vnApi","$q",function(a,b){var c={};return c.getConfig=function(){var c=b.defer();return a.Configuration().get().$promise.then(function(a){c.resolve(a)}),c.promise},c}]),angular.module("Volusion.toolboxCommon").controller("CategoryCtrl",["$q","$scope","$rootScope","$stateParams","$location","$route","vnApi","vnProductParams","vnAppRoute","vnContentManager",function(a,b,c,d,e,f,g,h,i,j){"use strict";b.checkForFacetFilters=function(){return h.getFacetString()?!0:void 0},b.clearAllFilters=function(){h.resetParams(),h.addCategory(b.category.id),b.queryProducts(),b.isMobileAndVisible&&b.toggleSearch()},b.dismissMobileFilters=function(){b.toggleSearch()},b.getCategory=function(a){g.Category().get({slug:a}).$promise.then(function(a){b.category=a.data,h.addCategory(a.data.id),b.queryProducts()})},b.queryProducts=function(){var a=h.getParamsObject();g.Product().get(a).$promise.then(function(a){b.products=a.data,b.facets=a.facets,b.categoryList=a.categories,b.cursor=a.cursor,b.checkFacetsAndCategories(a.categories,a.facets)})},b.toggleSearch=function(){return b.mobileDisplay?(b.mobileDisplay=!1,b.isMobileAndVisible=!1,b.isMobileAndHidden=!0,void j.showAppFooter()):(b.mobileDisplay=!0,b.isMobileAndVisible=!0,b.isMobileAndHidden=!1,void j.hideAppFooter())},b.$on("$destroy",function(){h.resetParams()}),b.$on("$viewContentLoaded",function(){i.setRouteStrategy("category"),b.getCategory(d.slug)})}]),angular.module("Volusion.toolboxCommon").controller("FooterCtrl",["$scope","vnContentManager",function(a,b){"use strict";a.$watch(function(){return b.getFooterState()},function(b){a.footerState=b},!0),a.$watch(function(){return b.getCheckoutFooterState()},function(b){a.checkoutFooterState=b},!0)}]),angular.module("Volusion.toolboxCommon").controller("OptionsCtrl",["$rootScope","$scope",function(a,b){"use strict";function c(a){var b=[];if(!a)return b;for(var c=0;c<a.length;c++){var d=a[c];d.isRequired&&d.derivesToSKU&&b.push(d.label)}return b}b.isItemAvailable=!1,b.itemToken=b.option.key+":"+b.item.key;var d=c(b.product.options).length;if(b.product.optionSKUs.length>0)for(var e=0;e<b.product.optionSKUs.length;e++){var f=1===d||b.product.optionSKUs[e].key!==b.itemToken;if(f&&b.product.optionSKUs[e].key.indexOf(b.itemToken)>-1&&b.product.optionSKUs[e].quantityInStock>0){b.isItemAvailable=!0;break}}else b.isItemAvailable=b.product.availability.allowBackOrders||null===b.product.availability.quantityInStock||b.product.availability.quantityInStock>0;b.$on("VN_PRODUCT_SELECTED",function(a,c,d){for(var e=0,f=0;f<b.product.options.length;f++)if(b.product.options[f].key===b.option.key){e=f;break}var g=d.split("|");g[e]=b.itemToken;for(var h=g.join("|"),i=0;i<b.product.optionSKUs.length;i++)h!==b.itemToken&&b.product.optionSKUs[i].key.indexOf(h)>-1&&(b.isItemAvailable=b.product.optionSKUs[i].quantityInStock>0)})}]),angular.module("Volusion.toolboxCommon").controller("ProductCtrl",["$rootScope","$scope","vnApi","$location","$stateParams","$filter","$anchorScroll","$translate","vnCart","vnAppMessageService","vnProduct",function(a,b,c,d,e,f,g,h,i,j,k){"use strict";function l(){null===k.getProductImage()&&k.setProductNoImage(["/images/theme/tcp-no-image.jpg","/images/theme/tcp-no-image.jpg","/images/theme/tcp-no-image.jpg"]),b.cartItem.options=b.cartItem.options||[],b.itemSelectionsNotInStock=k.findAvailability(),m()}function m(){var a="";b.popoverText="",b.buttonDisabled=!1;var c=k.findRequiredOptionsAreSelected();if(c.length>0){for(var d=0;d<c.length;d++)a+=f("uppercase")(c[d]),d!==c.length-1&&(a+=f("translate")("common.and"));return h("product.addToCartMissing",{missingOptions:a}).then(function(a){b.popoverText=a}),void(b.buttonDisabled=!0)}return k.isSelectionAvailable()?void 0:(b.popoverText=f("translate")("product.addToCartNotInStock"),void(b.buttonDisabled=!0))}b.accordionPanels={isopen1:!0},b.buttonWait=!1,b.carousel={interval:4e3},b.cartItem={},b.itemSelectionsNotInStock=!1,b.product={},b.tabs={relatedProducts:{active:!0},accessories:{active:!1}},c.Product().get({slug:e.slug}).$promise.then(function(c){b.product=k.set(c.data);var e=encodeURIComponent(d.absUrl()),f=encodeURIComponent(b.product.name);a.social={pageTitle:f,pageUrl:e,imageUrl:0!==b.product.imageCollections.length&&0!==b.product.imageCollections[0].images.length?b.product.imageCollections[0].images[0].medium:""},k.setSocialSharing(e,f),k.setEditable(!1),b.cartItem=k.getProductCart(),b.isInDesktopMode=a.isInDesktopMode,angular.extend(a.seo,k.getProductSEO()),l()}).then(function(){b.product.code&&c.Review().get({code:b.product.code}).$promise.then(function(a){b.ratingsAndReviews=a});var a=b.product.categories[0].id;c.Product().get({categoryIds:a,pageNumber:1,pageSize:4}).$promise.then(function(a){b.relatedProducts=a.data}),c.Product().get({accessoriesOf:b.product.code,pageNumber:1,pageSize:4}).$promise.then(function(a){b.accessories=a.data})}),a.$on("VN_PRODUCT_SELECTED",function(a,c){b.product.optionSelection=c}),b.addToCart=function(){k.findRequiredOptionsAreSelected().length>0||!k.findOptionAvailability(b.product.optionSelection.key)||(b.buttonWait=!0,i.saveCart(b.cartItem).then(function(){a.openCart(),b.cartItem.qty=0})["finally"](function(){b.modifyQty(1),b.buttonWait=!1}))},b.modifyQty=function(a){b.cartItem.qty+=a,k.setQuantityInStock(a)},b.postValidateQty=function(){""===b.cartItem.qty&&(b.cartItem.qty=1)},b.getImagePath=function(a){var b=f("vnProductImageFilter")(a);return""===b?"/images/theme/tcp-no-image.jpg":b},b.$watch("product.optionSelection",function(a){function c(){b.cartItem.code=b.product.code,b.cartItem.id=b.product.id}function d(){return a.isValid?((void 0===b.cartItem.qty||0===b.cartItem.qty)&&(b.cartItem.qty=1),void(a.quantityInStock-=b.cartItem.qty)):(b.cartItem.qty=1,a.quantityInStock=0,void(b.product.optionSelection.quantityInStock=0))}void 0!==a&&(c(),d(),k.setProductImage(a.option.selected),m(),b.isAddToCartButtonEnabled=a.isValid&&b.cartItem.qty>0)})}]),angular.module("Volusion.toolboxCommon").controller("SearchCtrl",["$rootScope","$scope","$stateParams","$location","$window","$filter","vnApi","vnProductParams","vnContentManager","themeSettings","vnAppRoute",function(a,b,c,d,e,f,g,h,i,j,k){"use strict";b.searchLocal=h.getSearchText(),b.searchTerms=c.q,b.clearAllFilters=function(){h.resetParams(),h.setSort("relevance"),h.updateSearch(c.q),b.minPrice="",b.maxPrice="",b.queryProducts()},b.dismissMobileFilters=function(){b.toggleSearch()},b.initParams=function(){h.setPageSize(j.getPageSize()),c.q?(h.updateSearch(c.q),b.searchTerms=c.q,b.queryProducts()):(b.searchTerms=d.search("q","All Products"),b.queryProducts())},b.queryProducts=function(){var a=h.getParamsObject();g.Product().get(a).$promise.then(function(a){b.products=a.data,b.facets=a.facets,b.categoryList=a.categories,b.cursor=a.cursor,b.checkFacetsAndCategories(a.categories,a.facets),b.searchTerms=h.getSearchText()||"All Products"})},b.searchByPrice=function(a){13===a.which&&(h.setMinPrice(b.minPrice),h.setMaxPrice(b.maxPrice),b.queryProducts())},b.toggleSearch=function(){return b.mobileDisplay?(b.mobileDisplay=!1,b.isMobileAndVisible=!1,b.isMobileAndHidden=!0,void i.showAppFooter()):(b.mobileDisplay=!0,b.isMobileAndVisible=!0,void(b.isMobileAndHidden=i.hideAppFooter()))},b.$on("$destroy",function(){h.resetParams()}),b.$on("$viewContentLoaded",function(){b.initParams(),k.setRouteStrategy("search"),h.preLoadData(c)})}]),angular.module("Volusion.toolboxCommon").controller("ShoppingCartCtrl",["$rootScope","$scope","$timeout","$filter","$window","translate","vnCart","notifications",function(a,b,c,d,e,f,g,h){"use strict";function i(a,c){b.loading=a?!0:!1,g.updateCart().then(function(){void 0!==c&&"function"==typeof c&&c()})}b.cart={},b.cartEmpty=!0,b.calcSubtotal=0,b.coupon={code:"",showApply:!1},b.couponsEmpty=!1,b.loading=!1,b.showGiftOption=!1,b.visualCue=!1,a.isCartOpen=!1,f.addParts("cart"),a.exitCartState=function(){history.back()},b.getCartItemsCount=function(){return g.getCartItemsCount()},b.deleteItem=function(a){b.cart.items=d("filter")(b.cart.items,function(b){return b.id!==a}),i(!0)},b.changeQty=function(a,d,e){a.qty=""===a.qty?1:d,c.cancel(b.debounceUpdateCart),void 0===e?i(!1):b.debounceUpdateCart=c(function(){i(!1)},e)},b.resetGiftOptions=function(){var a=!1;return this.showGiftOption?(b.visualCue=!0,void c(function(){b.visualCue=!1},3e3)):(angular.forEach(b.cart.items,function(b){b.isGiftWrapAvailable&&b.giftWrap.selected&&(b.giftWrap.selected=!1,a=!0)}),void(a&&i(!0)))},b.addGiftWrap=function(){i(!0)},b.addGiftMsg=function(){i(!0)},b.applyCoupon=function(){b.coupon.code.length>0&&(b.cart.discounts=d("filter")(b.cart.discounts,function(a){return a.couponCode!==b.coupon.code}),b.cart.discounts.push({couponCode:b.coupon.code}),i(!0,function(){b.coupon.showApply=!1,b.coupon.code="",0===b.cart.serviceErrors.length&&0===b.cart.warnings.length&&b.togglePromoList(!0)}))},b.deleteCoupon=function(a){b.cart.discounts=d("filter")(b.cart.discounts,function(b){return b.id!==a}),b.couponsEmpty=b.cart.discounts.length>0?!1:!0,i(!0)},a.$on("cartUpdated",function(){if(b.cart=g.getCart(),(b.cart.warnings&&b.cart.warnings.length>0||b.cart.serviceErrors&&b.cart.serviceErrors.length>0)&&(h.displayWarnings(b.cart.warnings),h.displayErrors(b.cart.serviceErrors),a.$emit("vnScroll.cart")),void 0!==b.cart&&(void 0!==b.cart.totals&&(b.calcSubtotal=b.cart.totals.items+b.cart.totals.discounts,b.cartEmpty=b.cart.totals.qty>0?!1:!0),void 0!==b.cart.discounts&&(b.couponsEmpty=b.cart.discounts.length>0?!1:!0),void 0!==b.cart.items))for(var c=0;c<b.cart.items.length;c++)b.cart.items[c].giftWrap.selected&&(b.showGiftOption=!0);b.loading=!1})}]),angular.module("Volusion.toolboxCommon").controller("VnProductOptionCtrl",["$rootScope","$scope",function(a,b){"use strict";function c(){d(b.product.options,null,function(a,b){a.selected=b.key})}function d(a,c,e){function f(a){return b.saveTo.filter(function(b){return b.id===a.id})}a&&(c=c||function(){return!0},angular.forEach(a,function(a){var b=a.items;if(b)for(var g=0,h=b.length;h>g;g++){var i=a.items[g],j=f(i);if(j.length>0){c(a)&&e(a,i),a.options&&a.options.length>0&&d(a.options,c,e);break}}}))}function e(){var a=[],c=function(a){return a.derivesToSKU};return d(b.product.options,c,function(b,c){a.push([b.key,c.key].join(":"))}),a.join("|")}function f(){var a=e(),c={};return c=b.product.optionSKUs.filter(function(b){return b.key===a})[0]}function g(a){if(!a)return!0;for(var b=0,c=a.length;c>b;b++){var d=a[b];if(d.isRequired&&!d.hasOwnProperty("selected"))return!1;if(d.options.length>0&&g(d.options)===!1)return!1}return!0}function h(c,d){var h=f(),i=e(),j=g(b.product.options);a.$broadcast("VN_PRODUCT_SELECTED",angular.extend({},{product:b.product,option:c,item:d,isValid:j},h),i)}b.onOptionChanged=function(a,d){b.currentSelectionText=d.text;var e=a.key,f=b.saveTo.filter(function(a){return a.id===d.id}),g=b.saveTo.filter(function(a){return a.option===e});0!==g.length&&0===f.length&&(b.saveTo=b.saveTo.filter(function(a){return a.option!==e})),0===f.length&&b.saveTo.push({id:d.id,option:e}),c(),h(a,d)},b.onCheckboxClicked=function(a,c){var d=a.key,e=b.saveTo.filter(function(a){return a.id===c.id});0===e.length?b.saveTo.push({id:c.id,option:d}):b.saveTo=b.saveTo.filter(function(a){return a.id!==c.id}),h(a,c)}}]),angular.module("Volusion.toolboxCommon").factory("ProductCollection",["Product",function(a){function b(b){angular.forEach(b.data,function(b){g.push(new a(b))});var c=new Date;f=c.getTime(),i=b.facets,k=b.cursor,j=b.categories}function c(){return g}function d(){return h}function e(){return i}var f,g=[],h=g.length,i={},j={},k={};return{updateCollection:b,getProductCollection:c,productCount:d,lastFacet:e}}]),angular.module("Volusion.toolboxCommon").factory("Product",function(){function a(a){this.id=a.id||null,this.code=a.code||null,this.name=a.name||null,this.url=a.url||null,this.slug=a.slug||null,this.pricing=a.pricing||null,this.avgRating=a.avgRating||null,this.currentImageCollection=a.imageCollection||null,this.cartItem=a.cartItem||null,this.productManufacturer=a.productManufacturer||null,this.availability=a.availability||null,this.photoAltText=a.photoAltText||null,this.shipping=a.shipping||null,this.isTaxable=a.isTaxable||null,this.isGiftWrapAvailable=a.isGiftWrapAvailable||null,this.giftWrap=a.giftWrap||null,this.descriptions=a.descriptions||null,this.pricing=a.pricing}return a}),angular.module("Volusion.toolboxCommon").value("vnApiConfigurations",{}),angular.module("Volusion.toolboxCommon").factory("vnApi",["$q","$resource","vnAppConfig","vnResourceTypes",function(a,b,c,d){"use strict";function e(){return t.resource=d.article,b(c.getApiUrl()+"/articles/:id",{id:"@id"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},query:{method:"GET",withCredentials:!0,isArray:!1,headers:t},remove:{method:"DELETE",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function f(){return t.resource=d.category,b(c.getApiUrl()+"/categories/:id",{id:"@id"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},query:{method:"GET",withCredentials:!0,isArray:!1,headers:t},remove:{method:"DELETE",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function g(){return t.resource=d.cart,b(c.getApiUrl()+"/carts",{},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},update:{method:"PUT",withCredentials:!0,headers:t},query:{method:"GET",withCredentials:!0,isArray:!1,headers:t},remove:{method:"DELETE",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function h(){return t.resource=d.config,b(c.getApiUrl()+"/config",{},{get:{method:"GET",withCredentials:!0,headers:t}})}function i(){return t.resource="countries",b(c.getApiUrl()+"/countries",{},{query:{method:"GET",withCredentials:!0,isArray:!1,headers:t}})}function j(){return t.resource=d.nav,b(c.getApiUrl()+"/navs/:navId",{navId:"@navId"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},query:{method:"GET",withCredentials:!0,isArray:!1,headers:t},remove:{method:"DELETE",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function k(){return t.resource=d.product,b(c.getApiUrl()+"/products/:code",{code:"@code"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},query:{method:"GET",withCredentials:!0,isArray:!1,headers:t},remove:{method:"DELETE",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function l(){return t.resource=d.reviews, +b(c.getApiUrl()+"/products/:code/reviews",{code:"@code"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},query:{method:"GET",withCredentials:!0,isArray:!1,headers:t},remove:{method:"DELETE",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function m(){return t.resource=d.themesettings,b("/settings/themeSettings.json",{},{headers:t})}function n(){return t.resource=d.user,b(c.getApiUrl()+"/users",{},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},update:{method:"PUT",withCredentials:!0,headers:t}})}function o(){return t.resource=d.shippingaddresses,b(c.getApiUrl()+"/users/current/shippingAddresses/:id",{id:"@id"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},update:{method:"PUT",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function p(){return t.resource=d.billingaddresses,b(c.getApiUrl()+"/users/current/billingAddresses/:id",{id:"@id"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},update:{method:"PUT",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function q(){return t.resource=d.paymentprofiles,b(c.getApiUrl()+"/users/current/paymentProfiles/:id",{id:"@id"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t},update:{method:"PUT",withCredentials:!0,headers:t},"delete":{method:"DELETE",withCredentials:!0,headers:t}})}function r(){return t.resource=d.orders,b(c.getApiUrl()+"/orders/:id",{id:"@id"},{get:{method:"GET",withCredentials:!0,headers:t},save:{method:"POST",withCredentials:!0,headers:t}})}function s(){return t.resource=d.orders,b(c.getApiUrl()+"/users/current/orders/:id",{id:"@id"},{get:{method:"GET",withCredentials:!0,headers:t},query:{method:"GET",withCredentials:!0,isArray:!1,headers:t},save:{method:"PUT",withCredentials:!0,headers:t}})}var t={resource:""};return{Article:e,BillingAddresses:p,Category:f,Cart:g,Configuration:h,Country:i,CustomerOrders:s,Nav:j,Orders:r,PaymentProfiles:q,Product:k,Review:l,ShippingAddresses:o,ThemeSettings:m,User:n}}]),angular.module("Volusion.toolboxCommon").provider("vnDataEndpoint",function(){"use strict";function a(){this.VnDataEndpoint=function(){return this},this.getApiUrl=function(){return b}}var b="http://www.samplestore.io/api/v1";this.$get=function(){return new a},this.setApiUrl=function(a){b=a}}),angular.module("Volusion.toolboxCommon").value("vnEnvironment",{name:"Production"}),angular.module("Volusion.toolboxCommon").directive("vnScrollToTop",["$timeout",function(a){"use strict";return{restrict:"A",scope:{vnScrollToTop:"="},link:function(b,c){b.$watch("vnScrollToTop",function(b){b&&a(function(){angular.element(c)[0].scrollTop=0})})}}}]),angular.module("Volusion.toolboxCommon").directive("vnSetFocusIf",[function(){"use strict";return{restrict:"A",scope:{vnSetFocusIf:"="},link:function(a,b){a.$watch("vnSetFocusIf",function(a){void 0===a&&b[0].focus()})}}}]),angular.module("Volusion.toolboxCommon").directive("vnAutoGrow",function(){"use strict";return{restrict:"A",link:function(a,b,c){c.$set("ngTrim","false");var d=function(){b.css("height","auto"),b.css("height",b[0].scrollHeight+"px")};a.$watch(c.ngModel,function(){d()}),b.bind("keydown",d)}}}),angular.module("Volusion.toolboxCommon").directive("vnBlock",["vnBem",function(a){return{restrict:"A",controller:function(){this.getBlock=function(){return this.block},this.getModifiers=function(){return this.modifiers}},compile:function(){return{pre:function(b,c,d,e){var f=d.vnBlock,g=d.vnModifiers;a.addClasses(c,{block:f,blockModifiers:g}),e.block=f,e.modifiers=g}}}}}]),angular.module("Volusion.toolboxCommon").directive("vnCarousel",["$rootScope",function(a){"use strict";return{templateUrl:"template/carousel.html",restrict:"EA",replace:!0,scope:{currMode:"@currMode",carouselObjects:"="},link:function(b,c){void 0===b.currMode&&(b.currMode="on"),b.componentId="100001",b.componentName="carousel",b.selected=!1,b.$on("currentComponent.change",function(a,c){c&&c.id&&"off"===b.currMode&&(b.selected=c.id===b.componentId)}),c.on("click",function(c){"off"===b.currMode&&(c.preventDefault(),a.$broadcast("currentComponent.change",{id:b.componentId,name:b.componentName,action:"set"}))}),$(".carousel").carousel({interval:5e3,pause:"hover",wrap:!0}),b.prev=function(){$(".carousel").carousel("prev")},b.next=function(){$(".carousel").carousel("next")}}}}]).run(["$templateCache",function(a){"use strict";a.put("template/carousel.html",'<div id="vnCarousel" class="carousel slide" data-ride="carousel"><!-- Indicators --><ol class="carousel-indicators"><li data-ng-repeat="image in imageList" data-target="#vnCarousel" data-slide-to="{{ $index }}"></li></ol><div data-ng-repeat="image in imageList" class="carousel-inner"><div class="item active"><img data-src="" alt="First slide" src="{{ image.src }}"><div class="container"><h1>Example headline.</h1><p>Note: If you\'re viewing this page via a <code>file://</code> URL, the "next" and "previous" might not load/display properly.</p><p><a class="btn btn-lg btn-primary" href="#" role="button">Sign up today</a></p></div></div><a class="left carousel-control" href="#myCarousel" data-slide="prev"><span class="glyphicon glyphicon-chevron-left"></span></a><a class="right carousel-control" href="#myCarousel" data-slide="next"><span class="glyphicon glyphicon-chevron-right"></span></a></div></div>')}]),angular.module("Volusion.toolboxCommon").directive("vnShoppingCart",["$rootScope","$timeout",function(a,b){"use strict";return{restrict:"A",controller:"ShoppingCartCtrl",link:function(c){c.showPromoList=!1;var d=$(".th-cart"),e=$(".th-cart__header"),f=$(".th-cart__footer"),g=$(".th-cart__body");a.openCart=function(){d.toggleClass("th-cart--active"),$("body").toggleClass("cart-active"),a.isCartOpen=!0},a.closeCart=function(){d.toggleClass("th-cart--active"),$("body").toggleClass("cart-active"),a.isCartOpen=!1},c.fixBodyHeight=function(a){a=void 0===a?0:a,b(function(){g.css({height:"calc(100% - "+(f.outerHeight()+e.outerHeight()+$(".th-cart__brand").outerHeight())+"px)","margin-top":e.outerHeight()+"px"})},a)},c.promoInputKeypress=function(a){13===a.which&&(a.currentTarget.blur(),c.applyCoupon())},c.togglePromoList=function(a){c.showPromoList=void 0!==a?a:!c.showPromoList,b(function(){c.fixBodyHeight()},275)},c.toggleApplyBtn=function(a){a===!1?b(function(){c.coupon.showApply=!c.coupon.showApply,c.togglePromoKeyboardFix()},0):a===!0?(c.coupon.showApply=!0,c.togglePromoKeyboardFix()):(c.coupon.showApply=void 0!==a?a:!c.coupon.showApply,c.togglePromoKeyboardFix()),c.fixBodyHeight()},c.toggleKeyboardFix=function(){f.toggleClass("th-cart__footer--keyboard-fix"),c.fixBodyHeight()},c.togglePromoKeyboardFix=function(){f.toggleClass("th-cart__footer--promo-keyboard-fix"),c.fixBodyHeight()},g.on("focus","input.form-control, textarea",function(){c.toggleKeyboardFix()}).on("blur","input.form-control, textarea",function(){c.toggleKeyboardFix()}),a.$on("cartUpdated",function(){c.fixBodyHeight()}),a.$on("enterNonDesktop",function(){c.fixBodyHeight()}),a.$on("exitNonDesktop",function(){c.fixBodyHeight()})}}}]),angular.module("Volusion.toolboxCommon").directive("vnCategorySearch",["$rootScope","$routeParams","$location","vnProductParams","vnAppRoute",function(a,b,c,d,e){"use strict";return{templateUrl:"vn-faceted-search/vn-category-search.html",restrict:"AE",scope:{categories:"=",queryProducts:"&"},link:function(a){function f(a){angular.extend(a,{displayStrategy:"categoryDisplayOne"})}function g(a){angular.extend(a,{displayStrategy:"categoryDisplayTwo"})}function h(a){angular.forEach(a,function(a){angular.extend(a,{displayStrategy:"categoryDisplayThree"}),angular.forEach(a.subCategories,function(a){angular.extend(a,{hideSubCatLink:!0})})})}function i(a,b){for(var c=!1,d=b.subCategories.length-1;d>=0;d--)a===b.subCategories[d].slug?(angular.extend(b.subCategories[d],{hideSubCatLink:!0}),c=!0):angular.extend(b.subCategories[d],{hideSubCatLink:!1});return c}function j(){function a(a){return a.replace(/&$/,"")}var b,c,f,g,h="";if(b=d.getFacetString(),c=d.getMinPrice(),f=d.getMaxPrice(),g=d.getCategoryString(),""===g&&""===b&&""===c&&""===f)return"";if(h+="?","search"===e.getRouteStrategy()&&""!==g){var i="categoryId="+g+"&";h+=i}if(""!==b){var j="facetIds="+b+"&";h+=j}if(""!==c){var k="minPrice="+c+"&";h+=k}if(""!==f){var l="maxPrice="+f+"&";h+=l}return h=a(h)}a.updateCategory=function(b){d.addCategory(b.id),a.queryProducts()},a.buildAppUrl=function(b){if("search"===e.getRouteStrategy())d.addCategory(b.id),a.queryProducts();else if("category"===e.getRouteStrategy()){var f=b.url;c.path(f)}},a.$watch(b,function(){a.currentRoute=j()},!0),a.$watch("categories",function(a){a&&a[0]&&("/search"===c.path()?h(a):1===a.length&&b.slug===a[0].slug?f(a[0]):1===a.length&&i(b.slug,a[0])&&g(a[0]))})}}}]),angular.module("Volusion.toolboxCommon").directive("vnElement",["vnBem",function(a){return{require:"^vnBlock",restrict:"A",compile:function(){return function(b,c,d,e){a.addClasses(c,{block:e.getBlock(),blockModifiers:e.getModifiers(),element:d.vnElement,elementModifiers:d.vnModifiers})}}}}]),angular.module("Volusion.toolboxCommon").directive("vnFacetSearch",["$rootScope","$window","vnProductParams",function(a,b,c){"use strict";return{templateUrl:"vn-faceted-search/vn-facet-search.html",restrict:"AE",scope:{facets:"=",queryProducts:"&"},link:function(a){enquire.register("screen and (max-width:767px)",{setup:function(){a.defaultAccordianOpen=!0},unmatch:function(){a.defaultAccordianOpen=!0},match:function(){a.defaultAccordianOpen=!1}}),a.selectProperty=function(a){return c.isFacetSelected(a.id)},a.refineFacetSearch=function(b){c.isFacetSelected(b.id)?c.removeFacet(b.id):c.addFacet(b.id),a.queryProducts()},a.$watch("facets",function(b){a.facets=b})}}}]),angular.module("Volusion.toolboxCommon").directive("vnFacetedSearch",["$window","$location","vnProductParams",function(a,b,c){"use strict";return{templateUrl:"vn-faceted-search/vn-faceted-search.html",restrict:"EA",link:function(a){a.showCategorySearch=!1,a.showFacetSearch=!0,a.showApplyButton=!1,a.checkFacetsAndCategories=function(b,c){a.hasFacetsOrCategories=b&&b.length||c&&c.length?!0:!1};var d,e=b.url();d=/^\/search/,a.onSearchPage=d.test(e),a.$watch("categoryList",function(b){b&&(a.showCategorySearch=!0)}),a.$watch("facets",function(b){b&&(a.showFacetSearch=!0)}),a.$watch(function(){return c.getSort()},function(b){a.currentSort=b}),enquire.register("screen and (max-width:767px)",{setup:function(){a.showApplyButton=!1,a.mobileDisplay=!0,a.showMobileSearch=!1,a.isMobileAndVisible=!1,a.isMobileAndHidden=!0,a.categoryAccordiansOpen=!0,a.priceAccordiansOpen=!0,a.sortAccordianIsOpen=!0},unmatch:function(){a.showApplyButton=!1,a.mobileDisplay=!0,a.showMobileSearch=!1,a.isMobileAndVisible=!1,a.isMobileAndHidden=!0,a.categoryAccordiansOpen=!0,a.priceAccordiansOpen=!0,a.sortAccordianIsOpen=!0},match:function(){a.showApplyButton=!0,a.mobileDisplay=!1,a.showMobileSearch=!0,a.isMobileAndVisible=!1,a.isMobileAndHidden=!0,a.categoryAccordiansOpen=!1,a.priceAccordiansOpen=!1,a.sortAccordianIsOpen=!1}})}}}]),angular.module("Volusion.toolboxCommon").directive("vnImage",["$rootScope",function(a){"use strict";return{templateUrl:"template/image.html",restrict:"EA",replace:!0,scope:{currMode:"@currMode",image:"="},link:function(b,c){void 0===b.currMode&&(b.currMode="on"),b.componentId="100002",b.componentName="image",b.selected=!1,b.$on("currentComponent.change",function(a,c){c&&c.id&&"off"===b.currMode&&(b.selected=c.id===b.componentId)}),c.on("click",function(c){"off"===b.currMode&&(c.preventDefault(),a.$broadcast("currentComponent.change",{id:b.componentId,name:b.componentName,action:"set"}))})}}}]).run(["$templateCache",function(a){"use strict";a.put("template/image.html",'<div class="vn-image"><p translate>VN-IMAGE-TITLE</p><img src="{{ image.src }}" alt="{{ image.alt }}" /></div>')}]),angular.module("Volusion.toolboxCommon").directive("vnLabeledRadio",function(){"use strict";return{require:"ngModel",restrict:"A",replace:!0,transclude:!0,templateUrl:"template/labeled-radio.html",scope:{ngModel:"=",name:"@",value:"@",ngValue:"=",ngChecked:"=",ngDisabled:"@",change:"&ngChange"},compile:function(a,b){var c=a.find("input"),d=b.value,e=b.ngValue;"undefined"!=typeof d&&"undefined"==typeof e&&c.removeAttr("data-ng-value")}}}).run(["$templateCache",function(a){"use strict";a.put("template/labeled-radio.html",'<label data-vn-block="vn-labeled-radio"><input data-vn-element="input" type="radio" name="{{name}}" value="{{value}}" data-ng-model="ngModel" data-ng-value="ngValue" data-ng-checked="ngChecked" data-ng-change="change()" data-ng-disabled="{{ngDisabled}}"><span data-vn-element="content" data-ng-transclude></span></label>')}]),angular.module("Volusion.toolboxCommon").directive("vnLink",["$rootScope",function(a){"use strict";return{templateUrl:"template/link.html",restrict:"EA",transclude:!0,replace:!0,scope:{currMode:"@"},link:function(b,c){void 0===b.currMode&&(b.currMode="on"),b.componentId="100003",b.componentName="link",b.selected=!1,b.$on("currentComponent.change",function(a,c){c&&c.id&&"off"===b.currMode&&(b.selected=c.id===b.componentId)}),c.on("click",function(c){"off"===b.currMode&&(c.preventDefault(),a.$broadcast("currentComponent.change",{id:b.componentId,name:b.componentName,action:"set"}))})}}}]).run(["$templateCache",function(a){"use strict";a.put("template/link.html",'<a class="vn-link" data-ng-transclude></a>')}]),angular.module("Volusion.toolboxCommon").directive("vnMetaTags",function(){"use strict";return{restrict:"EA",scope:{title:"=",description:"=",keywords:"=",toAppend:"=",robots:"=",socialPageTitle:"=",socialPageUrl:"=",socialImageUrl:"="},link:function(a,b){var c=function(a){"undefined"!=typeof a&&b.append(a)},d=function(a){var c=b.find("title");c.length>0&&c.remove(),a&&b.append(angular.element("<title/>").text(a))},e=function(a,c,d){var e=b.find("meta["+d+'="'+a+'"]');e.length>0&&e.remove(),c&&b.append(angular.element("<meta/>").attr(d,a).attr("content",c))},f=function(a){e("description",a,"name")},g=function(a){e("keywords",a,"name")},h=function(a){e("og:title",a,"property")},i=function(a){e("og:url",a,"property")},j=function(a){e("og:image",a,"property")};a.$watch("socialPageTitle",h),a.$watch("socialPageUrl",i),a.$watch("socialImageUrl",j),a.$watch("title",d),a.$watch("description",f),a.$watch("keywords",g),a.$watch("toAppend",c),a.$watch("robots",function(a){"undefined"!=typeof a&&JSON.parse(a)===!0&&(e("robots","index,follow","name"),e("GOOGLEBOT","INDEX,FOLLOW","name"))})}}}),angular.module("Volusion.toolboxCommon").directive("ngEnter",function(){return function(a,b,c){b.bind("keydown keypress",function(b){13===b.which&&(a.$apply(function(){a.$eval(c.ngEnter,{event:b})}),b.preventDefault())})}}),angular.module("Volusion.toolboxCommon").directive("vnPageName",["$rootScope",function(a){"use strict";return{restrict:"A",link:function(b,c){a.$on("$stateChangeStart",function(a,b){c.removeClass(function(a,b){return(b.match(/(^|\s)vn-page-\S+/g)||[]).join(" ")}),c.addClass("vn-page-"+b.name.split(".").join("-"))})}}}]),angular.module("Volusion.toolboxCommon").directive("vnPlaceOrderBtn",[function(){"use strict";return{restrict:"A",templateUrl:"vn-place-order-btn/vn-place-order-btn.html",link:function(a,b){a.placeOrderFixed=!1;var c=$(".th-checkout__step__review");c.on("scroll",function(){(a.placeOrderFixed===!1&&c.scrollTop()>=160||a.placeOrderFixed===!0&&c.scrollTop()<160)&&(a.placeOrderFixed=!a.placeOrderFixed,a.$apply())}),b.on("$destroy",function(){c.off("scroll")})}}}]),angular.module("Volusion.toolboxCommon").directive("vnPriceSearch",["vnProductParams",function(a){return{templateUrl:"vn-faceted-search/vn-price-search.html",restrict:"AE",scope:{queryProducts:"&"},link:function(b){b.$watch(function(){return a.getMinPrice()},function(a){b.minPrice=a}),b.$watch(function(){return a.getMaxPrice()},function(a){b.maxPrice=a}),b.searchByPrice=function(c){a.setMinPrice(b.minPrice),a.setMaxPrice(b.maxPrice),(13===c.which||"click"===c.type)&&b.queryProducts()}}}}]),angular.module("Volusion.toolboxCommon").directive("vnProductOption",function(){return{restrict:"A",replace:!0,controller:"VnProductOptionCtrl",templateUrl:"vn-product-option/index.html",scope:{option:"=",product:"=",saveTo:"="}}}),angular.module("Volusion.toolboxCommon").directive("vnRating",["$rootScope",function(a){"use strict";return{templateUrl:"template/rating.html",restrict:"EA",replace:!0,scope:{currMode:"@currMode",editable:"=",maximum:"=",ratingValue:"="},link:function(b,c,d){function e(a){return b.ratingValue%1===0&&a<b.ratingValue?g:b.ratingValue%1===.5&&b.ratingValue-a>.5?g:b.ratingValue%1===.5&&b.ratingValue-a===.5?i:h}function f(){for(b.stars=[],j=0;k>j;j++)b.stars.push({cssClass:e(j)})}var g=d.filledClass||"fa fa-star",h=d.emptyClass||"fa fa-star-o",i=d.halfFilledClass||"fa fa-star-half-o";b.title="undefined"!=typeof d.title?d.title:"Rating";var j,k=b.maximum||5;void 0===b.currMode&&(b.currMode="on"),(void 0===b.ratingValue||""===b.ratingValue)&&(b.ratingValue=0),b.componentId="100004",b.componentName="rating",b.selected=!1,b.$on("currentComponent.change",function(a,c){c&&c.id&&"off"===b.currMode&&(b.selected=c.id===b.componentId)}),c.on("click",function(c){"off"===b.currMode&&(c.preventDefault(),a.$broadcast("currentComponent.change",{id:b.componentId,name:b.componentName,action:"set"}))}),b.stars=[],b.$watch("ratingValue",function(a,b){(0===b||b)&&f()}),b.toggle=function(a){b.editable&&(b.ratingValue=a+1)}}}}]).run(["$templateCache",function(a){"use strict";a.put("template/rating.html",'<div class="vn-rating"><p class="vn-rating-title" data-ng-bind="title"></p><ul class="rating"><li data-ng-repeat="star in stars" data-ng-click="toggle($index)"><i class=" {{ star.cssClass }} " /></li></ul></div>')}]),angular.module("Volusion.toolboxCommon").directive("vnSortSearch",["vnProductParams","vnSortDefault",function(a,b){"use strict";return{templateUrl:"vn-faceted-search/vn-sort-search.html",restrict:"AE",scope:{queryProducts:"&"},link:function(c){""===a.getSort()&&a.setSort(b),c.sortBy=function(b){a.setSort(b),c.queryProducts()}}}}]),angular.module("Volusion.toolboxCommon").directive("vnShowOnDropdownHover",["$timeout",function(a){return{restrict:"A",link:function(b,c){var d,e=angular.element(c.parent().find("a")[0]);c.bind("mouseenter",function(){c.show(),a.cancel(d)}).bind("mouseleave",function(){d=a(function(){c.hide()},100)}),e.bind("mouseenter",function(){c.show(),a.cancel(d)}).bind("mouseleave",function(){d=a(function(){c.hide()},100)}).bind("click",function(){c.show()}),b.$on("$destroy",function(b){a.cancel(d)})}}}]),angular.module("Volusion.toolboxCommon").directive("vnDropdown",["$window",function(){return{restrict:"E",replace:!0,scope:{availableoptions:"=",optionselect:"=",selectedOption:"=model",placeholder:"@",displayField:"@",selectedField:"@",name:"@",ngRequired:"="},templateUrl:"dropdown/vn-dropdown.tpl.html",link:function(a,b){a.button=angular.element(b).find("button"),a.options=a.availableoptions||[],a.changeOption=function(b){a.selectedOption=a.options[b],"function"==typeof a.optionselect&&a.optionselect(a.selectedOption),a.button.focus()},a.$watch("availableoptions",function(){"undefined"!=typeof a.availableoptions&&a.availableoptions.length>0&&(a.options=a.availableoptions.slice(),angular.forEach(a.options,function(b){b.displayValue=b[a.displayField||"name"],b.selectedDisplayValue=b[a.selectedField||"name"]}))}),a.$watch("selectedOption",function(b){b?a.button.focus():a.button.blur()})}}}]),angular.module("Volusion.toolboxCommon").directive("vnEasyZoom",function(){function a(a){b.standardSrc&&b.zoomSrc&&(a.swap(b.standardSrc,b.zoomSrc),b={})}var b={};return{restrict:"A",replace:!0,templateUrl:"easy-zoom/vnEasyZoom.tpl.html",scope:{ngSrc:"=",ezAdjacent:"=",ezOverlay:"=",ezZoomSrc:"=",alt:"@"},link:function(c,d){var e=d.easyZoom(),f=e.data("easyZoom");c.$watch("ngSrc",function(c){void 0!==c&&(b.standardSrc=c,a(f))}),c.$watch("ezZoomSrc",function(c){void 0!==c&&(b.zoomSrc=c,a(f))}),c.$on("$destroy",function(){f.teardown()})}}}),angular.module("Volusion.toolboxCommon").filter("vnCurrency",["$filter","$locale",function(a,b){"use strict";return function(c,d){var e=a("currency");return 0===c?"Free":"en-us"===b.id&&0>c?e(c,d).replace("(","-").replace(")",""):e(c,d)}}]),angular.module("Volusion.toolboxCommon").filter("vnProductImageFilter",function(){return function(a,b,c){function d(b,c){var d="";if(a.length>=0)for(var e=a.length-1;e>=0;e--){var f=a[e];if(b===f.key){d=f.images[0][c];break}}return d}var e="";if(a&&a.length<=0)e="";else if(1===arguments.length)e=d("default","medium");else{if(3!==arguments.length)throw new Error("vnProductImageFilter was unable to process the arguments supplied.");e=d(b,c)}return e}}),angular.module("Volusion.toolboxCommon").directive("vnFormatNumber",["$filter",function(a){"use strict";return{require:"?ngModel",link:function(b,c,d,e){e&&(e.$formatters.unshift(function(){return a("number")(e.$modelValue)}),e.$parsers.unshift(function(b){var d=b.replace(/[^\d|\-+|\.+]/g,"");return c.val(a("number")(d)),d}))}}}]).directive("vnFormatCcNumber",["$filter",function(a){"use strict";return{require:"?ngModel",link:function(b,c,d,e){e&&(e.$formatters.unshift(function(){var b=c.attr("data-vn-cc-type").toUpperCase();return a("vnCreditCard")(e.$modelValue,b)}),e.$parsers.unshift(function(b){var d="",e=c.attr("data-vn-cc-type").toUpperCase();return d=-1!==b.indexOf("*")&&"AMEX"!==e&&"AMERICAN EXPRESS"!==e&&19===b.length||("AMEX"===e||"AMERICAN EXPRESS"===e)&&18===b.length?b:b.replace(/[^\d]+/g,""),c.val(a("vnCreditCard")(d,e)),d}))}}}]).directive("vnFormatUsPhoneNumber",["$filter",function(a){"use strict";return{require:"?ngModel",link:function(b,c,d,e){e&&(e.$formatters.unshift(function(){return a("vnUsPhone")(e.$modelValue)}),e.$parsers.unshift(function(b){var d=b.replace(/[^\d]+/g,"");return c.val(a("vnUsPhone")(d)),d}))}}}]).directive("vnFormatZip",[function(){"use strict";return{require:"?ngModel",link:function(a,b,c,d){d&&(d.$formatters.unshift(function(){return d.$modelValue}),d.$parsers.unshift(function(a){var c=a.replace(/[^\d|^\-]/g,"");return b.val(c),c}))}}}]).directive("vnFormatQuantity",["$filter",function(a){"use strict";return{require:"?ngModel",link:function(b,c,d,e){e&&(e.$formatters.unshift(function(){return a("number")(e.$modelValue)}),e.$parsers.unshift(function(b){var d="";if(""!==b){b=parseInt(b.toString().replace(/\D/g,"")),(isNaN(b)||0===b)&&(b="");var f=9999999;b>f&&(b=f),d=a("number")(b),(0===parseInt(d)||void 0===parseInt(d))&&(d="")}return e.$setViewValue(b),c.val(d),b}))}}}]),angular.module("Volusion.toolboxCommon").directive("vnLegacyLink",["$window",function(a){return{restrict:"AE",link:function(b,c,d){d.$observe("vnLegacyLink",function(a){c.attr("href",a)}),c.on("click",function(b){b.preventDefault(),a.location.assign(this.href)})}}}]),angular.module("Volusion.toolboxCommon").filter("vnLegacyLinkify",function(){return function(a){var b=angular.element("<div/>").html(a);return angular.forEach(b.find("a"),function(a){var b=angular.element(a);b.attr("target",b.attr("target")||"_self")}),b.html()}}),angular.module("Volusion.toolboxCommon").controller("ForgotPasswordCtrl",["$scope","$state","vnAuthService","vnNotifications","vnModalService",function(a,b,c,d,e){"use strict";a.disabledButton=!0,a.forgotPassword=function(){a.disabledButton||(a.disabledButton=!0,c.forgotPassword(a.email).then(function(){d.displayMsg("success","An email has been sent to reset your password if you have an account."),b.go("my-account-login"),a.disabledButton=!1},function(){e.showError(),a.disabledButton=!1}))},a.checkValidity=function(){return a.frmForgotPassword.$pristine?void(a.disabledButton=!0):void(a.disabledButton=a.frmForgotPassword.$valid?!1:!0)}}]),angular.module("Volusion.toolboxCommon").controller("LoginCtrl",function(){"use strict"}),angular.module("Volusion.toolboxCommon").controller("LogoutCtrl",["$rootScope","$state","vnAuthService","VN_AUTH_EVENTS","vnUser",function(a,b,c,d,e){"use strict";a.$on(d.logoutSuccess,function(){b.go("home")}),e.reset(),c.logout()}]),angular.module("Volusion.toolboxCommon").directive("vnLoginLink",["$rootScope","VN_AUTH_EVENTS","vnUser",function(a,b,c){"use strict";return{restrict:"AE",templateUrl:"login/vn-login-link.html",link:function(d){d.loggedIn=!1;var e=function(){c.isLoggedIn().then(function(){d.loggedIn=!0},function(){d.loggedIn=!1})};e(),a.$on(b.loginSuccess,function(){e()}),a.$on(b.logoutSuccess,function(){e()})}}}]),angular.module("Volusion.toolboxCommon").directive("vnLogin",["$rootScope","vnUser","vnAuthService","vnCheckout","vnNotifications","VN_AUTH_EVENTS","$q","$state",function(a,b,c,d,e,f,g,h){return{restrict:"AE",templateUrl:"login/vn-login.html",scope:{allowAnonymous:"@",buttonText:"@",redirectTo:"@",title:"@"},link:function(i,j,k){i.allowAnonymous=!1,i.loginError=!1,i.clearError=function(){i.loginError=!1},i.title=i.title||"Enter your e-mail to get started",k.$observe("allowAnonymous",function(){k.allowAnonymous&&(i.allowAnonymous=i.$eval(k.allowAnonymous),!i.allowAnonymous&&i.user&&(i.user.anonymous=!1))}),i.buttonText=i.buttonText||"Sign In",i.user=b.getUser(),i.disabledButton=!1,i.updateUser=function(){if(!i.disabledButton)if(i.frmLogin.$valid)if(a.$on(f.loginSuccess,function(){b.getCurrentUser().then(function(){h.go(i.redirectTo)})["catch"](function(a){e.displayErrors(a),i.disabledButton=!1,i.loginError=a.message})}),a.$on(f.loginFailed,function(a,b){i.loginError="Login Failed",i.disabledButton=!1,e.displayErrors(b.Errors||b.data.Errors)}),i.disabledButton=!0,i.user.anonymous){var j={email:i.user.email,password:"",firstName:"",lastName:"",emailOptIn:!1,anonymous:!0,customFields:{},autoLogin:!0};g.all([b.createFrom(j),d.initCart().promise]).then(function(a){b.setId(a[0].data.id),d.setUser(),h.go(i.redirectTo)})["catch"](function(a){e.displayErrors(a),i.disabledButton=!1})}else{var k={CustomerNewOld:"old",Email:i.user.email,Password:i.user.password};c.login(k)}else for(var l in i.frmLogin)i.frmLogin.hasOwnProperty(l)&&l.indexOf("$")<0&&(i.frmLogin[l].$setDirty(),i.frmLogin[l].$setTouched())}}}}]),angular.module("Volusion.toolboxCommon").factory("vnModalService",["$modal",function(a){return{showError:function(b,c){return a.open({templateUrl:b||"modal/vnErrorModal.tpl.html",scope:c})},showMessage:function(b,c){return a.open({templateUrl:b||"modal/vnModalMessage.tpl.html",scope:c})}}}]),angular.module("Volusion.toolboxCommon").controller("BillingAddressesCtrl",["$scope","vnAddressUtilities","vnUser","vnModalService","$state","vnCheckout",function(a,b,c,d,e,f){function g(){c.getBillingAddresses().then(function(a){h.billingAddresses=a,h.loading=!1},function(){h.loading=!1,d.showError().result.then(function(){e.go("my-account")})})}var h=this;h.loading=!0,g(),f.getCountries().then(function(a){h.countries=a.data}),h.state="DISPLAY",h.addressToEdit=null,h.addressToAdd=null,h.pageTitles={"default":"Billing Addresses",add:"Add Address",edit:"Edit Address"},h.pageTitle=h.pageTitles["default"],h.saveEditedAddress=function(){c.updateBillingAddress(h.addressToEdit).then(function(){h.addressToEdit=!1,h.pageTitle=h.pageTitles["default"]}),b.setPreferredAddress(h.billingAddresses,h.indexOfAddressToEdit)},h.saveNewAddress=function(){c.setBillingAddress(h.addressToAdd).then(function(a){h.addressToAdd.id=a,a&&a.data&&a.data.id&&(angular.isArray(h.billingAddresses)?(h.billingAddresses.push(a.data),b.setPreferredAddress(h.billingAddresses,h.billingAddresses.length-1)):(h.billingAddresses=[],h.billingAddresses.push(a.data)),h.addressToAdd=!1,h.pageTitle=h.pageTitles["default"])})},h.addAddress=function(){h.addressToAdd||(h.addressToAdd=b.createEmptyAddress()),h.addressToEdit=!1,h.pageTitle=h.pageTitles.add},h.cancelAddAddress=function(){h.addressToAdd=!1,h.pageTitle=h.pageTitles["default"]},h.editAddress=function(a,b){h.addressToAdd=!1,h.addressToEdit=a,h.pageTitle=h.pageTitles.edit,h.indexOfAddressToEdit=b},h.cancelEditAddress=function(){h.addressToEdit=!1,h.pageTitle=h.pageTitles["default"],g()},h.makeAddressPreferred=function(a){b.setPreferredAddress(h.billingAddresses,a),c.updateBillingAddress(b.getPreferredAddress(h.billingAddresses))},h.deleteAddress=function(e){a.message="Are you sure you want to remove this billing address?",a.addressToDelete=e,a.buttonText="Yes, remove the billing address";var f=d.showMessage("modal/vnAddressDeleteConf.tpl.html",a).result;f.then(function(){c.deleteBillingAddress(e).then(function(){h.billingAddresses=b.removeAddressFromList(h.billingAddresses,e),c.getBillingAddresses()},function(){d.showError()})},angular.noop)}}]),angular.module("Volusion.toolboxCommon").controller("ChangeEmailCtrl",["$scope","$state","vnUser","vnModalService","vnNotifications",function(a,b,c,d,e){"use strict";a.user=angular.copy(c.getUser()),a.user.password="",a.changeButtonDisabled=!0,a.emailDoesNotMatch=!1,a.changeEmail=function(){a.changeButtonDisabled||a.emailDoesNotMatch||(a.user.email=a.user.changeEmail,c.updateUser(a.user).then(function(){b.go("my-account"),e.displayMsg("success","Your email was changed")},function(){d.showError()}))},a.checkValidity=function(){return a.frmChangeEmail.$pristine?(a.changeButtonDisabled=!0,void(a.emailDoesNotMatch=!1)):(a.changeButtonDisabled=a.frmChangeEmail.$valid&&a.user.changeEmail===a.user.confirmChangeEmail?!1:!0,void(a.user.changeEmail&&a.user.confirmChangeEmail&&a.user.changeEmail.length&&a.user.confirmChangeEmail.length&&(a.emailDoesNotMatch=a.user.changeEmail===a.user.confirmChangeEmail?!1:!0)))}}]),angular.module("Volusion.toolboxCommon").controller("ChangePasswordCtrl",["$scope","$state","vnUser","vnModalService","vnNotifications",function(a,b,c,d,e){"use strict";a.user=angular.copy(c.getUser()),a.user.password="",a.user.newPassword="",a.user.confirmPassword="",a.changeButtonDisabled=!0,a.passwordDoesNotMatch=!1,a.changePassword=function(){a.changeButtonDisabled||a.passwordDoesNotMatch||(a.user.password=a.user.newPassword,c.updateUser(a.user).then(function(){b.go("my-account"),e.displayMsg("success","Your password was changed")},function(){d.showError()}))},a.checkValidity=function(){return a.frmChangePassword.$pristine?(a.changeButtonDisabled=!0,void(a.passwordDoesNotMatch=!1)):(a.changeButtonDisabled=a.frmChangePassword.$valid&&a.user.newPassword===a.user.confirmPassword?!1:!0,void(a.user.newPassword&&a.user.confirmPassword&&a.user.newPassword.length&&a.user.confirmPassword.length&&(a.passwordDoesNotMatch=a.user.newPassword===a.user.confirmPassword?!1:!0)))}}]),angular.module("Volusion.toolboxCommon").controller("ListOrdersCtrl",["$rootScope","$scope","$state","vnUser","vnModalService",function(a,b,c,d,e){var f=this;f.pageSizes=[{value:5,text:"5 Per Page"},{value:10,text:"10 Per Page"}],f.getOrders=function(){f.loading=!0,f.cursor&&f.currentPage===f.cursor.totalPages&&Math.ceil(f.cursor.total/f.selectedPageSize.value)<f.currentPage&&(f.currentPage=Math.ceil(f.cursor.total/f.selectedPageSize.value)),d.getPagedOrders(f.currentPage,f.selectedPageSize.value).then(function(a){f.loading=!1,f.cursor=a.cursor,f.numPages=f.cursor.totalPages,f.orders=a.data.orders;var b=a.cursor.currentPage*a.cursor.pageSize,c=a.cursor.currentPage*a.cursor.pageSize-a.cursor.pageSize+1;f.startIndex=0>c?0:c,f.endIndex=b>a.cursor.total?a.cursor.total:b},function(){f.loading=!1,e.showError().result.then(function(){c.go("my-account")})})},f.init=function(){f.currentPage=1,f.selectedPageSize=f.pageSizes[1],f.maxSize=3,f.getOrders()}}]),angular.module("Volusion.toolboxCommon").controller("MyAccountCtrl",["$rootScope","$scope","vnUser","vnModalService",function(a,b,c,d){"use strict";function e(){b.loading=!0,b.user=c.getUser(),c.getLastThreeOrders().then(function(a){b.orders=a.orders,b.loading=!1},function(){b.loading=!1,d.showError(); + +})}b.loading=!1,b.orders=[],e(),a.$on("$stateChangeStart",function(a,b){"my-account"===b.name&&e()})}]),angular.module("Volusion.toolboxCommon").controller("OrdersDetailCtrl",["vnApi","$stateParams",function(a,b){function c(){d.loading=!0,a.CustomerOrders().get({id:b.id}).$promise.then(function(a){d.order=a.data,d.loading=!1},function(){d.loading=!1})}var d=this;d.order=null,d.loading=!1,c()}]),angular.module("Volusion.toolboxCommon").controller("PaymentProfilesCtrl",["$scope","$state","$q","lodash","vnCreditCardUtilities","vnUser","vnCheckout","vnModalService","vnPciaasIframe","vnCreditCardClass",function(a,b,c,d,e,f,g,h,i,j){function k(){var a={method:"Credit Card",preferred:!0,card:{cardType:l.paymentProfileToAdd.card.cardType,cardTypeName:l.paymentProfileToAdd.card.cardTypeName,holdersName:l.user.firstName+" "+l.user.lastName,last4:l.paymentProfileToAdd.card.cardNumber.slice(-4),expMonth:l.paymentProfileToAdd.card.expMonth,expYear:l.paymentProfileToAdd.card.expYear,issueMonth:"",issueYear:"",issueNumber:"",pCIaaSId:l.paymentProfileToAdd.card.pCIaaSId,cardNumber:l.paymentProfileToAdd.card.cardNumber}};g.setCCPaymentProfile(a),f.setPaymentProfile(a).then(function(a){if(l.paymentProfileToAdd.id=a,a&&a.data&&a.data.id){var b=j(a.data.card.cardType);a.data.card.ccCssClass=b["class"],a.data.card.last4=a.data.card.cardNumber.slice(-4),a.data.card.cardTypeName=b.name,angular.isArray(l.paymentProfiles)?(l.paymentProfiles.push(a.data),l.makePaymentProfilePreferred(l.paymentProfiles.length-1)):(l.paymentProfiles=[],l.paymentProfiles.push(a.data)),l.paymentProfileToAdd=!1,l.pageTitle=l.pageTitles["default"]}else h.showError()})}var l=this;l.user=f.getUser(),l.loading=!0,f.getPaymentProfiles().then(function(a){l.paymentProfiles=a,l.loading=!1},function(){l.loading=!1,h.showError().result.then(function(){b.go("my-account")})}),l.state="DISPLAY",l.paymentProfileToAdd=null,l.pageTitles={"default":"Payment Profiles",add:"Add Card",edit:"Edit Card"},l.pageTitle=l.pageTitles["default"],l.saveNewPaymentProfile=function(){l.processCard().then(function(a){l.paymentProfileToAdd.card.pCIaaSError="",angular.isString(a)&&(a=JSON.parse(a)),l.paymentProfileToAdd.card.cardNumber=-1===l.paymentProfileToAdd.card.cardNumber.indexOf("*")?e.maskCardValue(l.paymentProfileToAdd.card.cardNumber):l.paymentProfileToAdd.card.cardNumber,l.paymentProfileToAdd.card.pCIaaSId=a.CardId?a.CardId:l.paymentProfileToAdd.card.pCIaaSId,k()},function(){h.showError()})},l.addPaymentProfile=function(){l.paymentProfileToAdd||(l.paymentProfileToAdd={method:"Credit Card",preferred:!0,card:e.newCard()}),l.pageTitle=l.pageTitles.add},l.cancelAddPaymentProfile=function(){l.paymentProfileToAdd=!1,l.pageTitle=l.pageTitles["default"]},l.makePaymentProfilePreferred=function(a){e.setPreferredPaymentProfile(l.paymentProfiles,a),f.updatePaymentProfile(e.getPreferredPaymentProfile(l.paymentProfiles))},l.deletePaymentProfile=function(b){a.message="Are you sure you want to remove this card?",a.paymentProfileToDelete=b,a.buttonText="Yes, remove the card";var c=h.showMessage("modal/vnPaymentProfileDeleteConf.tpl.html",a).result;c.then(function(){f.deletePaymentProfile(b).then(function(){l.paymentProfiles=e.removePaymentProfileFromList(l.paymentProfiles,b),f.getPaymentProfiles()},function(){h.showError()})},angular.noop)},l.processCard=function(){return c(function(a,b){var c={CVV:"inputCreditCardCVV",HiddenCardID:"hiddenCardID",CardNumber:function(){return l.paymentProfileToAdd.card.cardNumber},CardType:function(){return{Visa:"Visa",MasterCard:"MasterCard","American Express":"Amex",Discover:"Discover"}[l.paymentProfileToAdd.card.cardTypeName]}};i.PCIaaS({settings:{merchantID:"3de067d8d96d407697da4a9559f99681",apiBase:"https://payments-qa.dev.volusion.com/paymentsv1_4"},fields:c,events:{success:a,error:b}}).process(!0)})}}]),angular.module("Volusion.toolboxCommon").controller("ShippingAddressesCtrl",["$scope","$state","vnAddressUtilities","vnUser","vnCheckout","vnModalService",function(a,b,c,d,e,f){function g(){d.getShippingAddresses().then(function(a){h.shippingAddresses=a,h.loading=!1},function(){h.loading=!1,f.showError().result.then(function(){b.go("my-account")})})}var h=this;h.loading=!0,g(),e.getCountries().then(function(a){h.countries=a.data}),h.state="DISPLAY",h.addressToEdit=null,h.addressToAdd=null,h.pageTitles={"default":"Shipping Addresses",add:"Add Address",edit:"Edit Address"},h.pageTitle=h.pageTitles["default"],h.saveEditedAddress=function(){d.updateShippingAddress(h.addressToEdit).then(function(){h.addressToEdit=!1,h.pageTitle=h.pageTitles["default"]}),c.setPreferredAddress(h.shippingAddresses,h.indexOfAddressToEdit)},h.saveNewAddress=function(){d.setShippingAddress(h.addressToAdd).then(function(a){h.addressToAdd.id=a,a&&a.data&&a.data.id&&(angular.isArray(h.shippingAddresses)?(h.shippingAddresses.push(a.data),c.setPreferredAddress(h.shippingAddresses,h.shippingAddresses.length-1)):(h.shippingAddresses=[],h.shippingAddresses.push(a.data)),h.addressToAdd=!1,h.pageTitle=h.pageTitles["default"])})},h.addAddress=function(){h.addressToAdd||(h.addressToAdd=c.createEmptyAddress()),h.addressToEdit=!1,h.pageTitle=h.pageTitles.add},h.cancelAddAddress=function(){h.addressToAdd=!1,h.pageTitle=h.pageTitles["default"]},h.editAddress=function(a,b){h.addressToAdd=!1,h.addressToEdit=a,h.pageTitle=h.pageTitles.edit,h.indexOfAddressToEdit=b},h.cancelEditAddress=function(){h.addressToEdit=!1,h.pageTitle=h.pageTitles["default"],g()},h.makeAddressPreferred=function(a){c.setPreferredAddress(h.shippingAddresses,a),d.updateShippingAddress(c.getPreferredAddress(h.shippingAddresses))},h.deleteAddress=function(b){a.message="Are you sure you want to remove this shipping address?",a.addressToDelete=b,a.buttonText="Yes, remove the shipping address";var e=f.showMessage("modal/vnAddressDeleteConf.tpl.html",a).result;e.then(function(){d.deleteShippingAddress(b).then(function(){h.shippingAddresses=c.removeAddressFromList(h.shippingAddresses,b),d.getShippingAddresses()},function(){f.showError()})},angular.noop)}}]),angular.module("Volusion.toolboxCommon").directive("vnNavMobile",["$rootScope","vnApi",function(a,b){"use strict";return{templateUrl:"nav-menu-mobile/vn-nav-mobile.tpl.html",restrict:"EA",replace:!0,scope:{currMode:"@",categoryList:"="},link:function(c,d){void 0===c.currMode&&(c.currMode="on"),c.componentId="1000051",c.componentName="navbar-mobile",c.selected=!1,c.$on("currentComponent.change",function(a,b){b&&b.id&&"off"===c.currMode&&(c.selected=b.id===c.componentId)}),d.on("click",function(b){"off"===c.currMode&&(b.preventDefault(),a.$broadcast("currentComponent.change",{id:c.componentId,name:c.componentName,action:"set"}))}),b.Nav().get({navId:1}).$promise.then(function(a){c.categories=a.data})}}}]),angular.module("Volusion.toolboxCommon").directive("vnNav",["$rootScope","$window","$timeout","vnApi",function(a,b,c,d){"use strict";return{templateUrl:"nav-menu/vn-nav.tpl.html",restrict:"EA",replace:!0,scope:{currMode:"@",categoryList:"=",useSmartNav:"@"},link:function(e,f){function g(){var a=0,b=0,c=0,d=[];-1!==i.windowWidth&&e.windowWidth>i.windowWidth&&(c=0,i.windowWidth=-1,i.position=0),-1===i.windowWidth&&angular.forEach(angular.element(".nav-top-level-menu-items"),function(d){return 0===a&&(b=angular.element(d).position().top),angular.element(d).position().top!==b?(c=a,!1):void a++}),0!==c||-1!==i.windowWidth?(-1===i.windowWidth?(i.windowWidth=e.windowWidth,i.position=c):c=i.position,e.smartNavMoreCategories=[],angular.forEach(e.smartCategories,function(a,b){b>=c-1?e.smartNavMoreCategories.push(a):d.push(a)}),e.smartNavCategories=d):e.smartNavCategories=e.smartCategories,e.displaySmartNavMoreMenuItem=0!==c}function h(a){e.smartNavCategories=e.smartCategories=a,"true"===e.useSmartNavigation&&c(function(){g()},0)}void 0===e.currMode&&(e.currMode="on"),e.useSmartNavigation=void 0===e.useSmartNav?"true":e.useSmartNav,e.componentId="100005",e.componentName="navbar",e.selected=!1,e.displaySmartNavMoreMenuItem=!1,e.$on("currentComponent.change",function(a,b){b&&b.id&&"off"===e.currMode&&(e.selected=b.id===e.componentId)}),f.on("click",function(b){"off"===e.currMode&&(b.preventDefault(),a.$broadcast("currentComponent.change",{id:e.componentId,name:e.componentName,action:"set"}))});var i={windowWidth:-1,position:0};e.initializeWindowSize=function(){e.windowWidth=b.outerWidth},e.initializeWindowSize(),"true"===e.useSmartNavigation&&angular.element(b).bind("resize",function(){e.initializeWindowSize(),e.$apply(),g()}),void 0!==e.categoryList?h(e.categoryList):d.Nav().get({navId:1}).$promise.then(function(a){h(a.data)})}}}]),angular.module("Volusion.toolboxCommon").directive("vnOrderListView",[function(){return{restrict:"AE",templateUrl:"orders/vn-order-list-view.tpl.html",scope:{orders:"="}}}]),angular.module("Volusion.toolboxCommon").directive("vnOrderTable",[function(){return{restrict:"AE",templateUrl:"orders/vn-order-table.tpl.html",scope:{orders:"="}}}]),angular.module("Volusion.toolboxCommon").directive("vnPaginator",["vnProductParams","themeSettings",function(a,b){return{templateUrl:"pagination/vnPaginator.tpl.html",restrict:"A",scope:{cursor:"=",queryFn:"&"},link:function(c,d,e){a.setPageSize(b.getPageSize()),c.nextPage=function(){c.cursor.currentPage<c.cursor.totalPages&&(a.nextPage(),c.queryFn())},c.prevPage=function(){c.cursor.currentPage>1&&(a.previousPage(),c.queryFn())},c.$watch(e.cursor,function(b){void 0!==b&&(c.currentPage=b.currentPage.toString(),a.setPage(c.currentPage))},!0)}}}]),angular.module("Volusion.toolboxCommon.templates",[]).run(["$templateCache",function(a){a.put("vn-faceted-search/vn-category-search.html",'<div class=vn-category-search__category-items data-ng-repeat="cat in categories" data-ng-class="{ \'-last\': $last }">\n\n <a href data-ng-if="cat.displayStrategy == \'categoryDisplayTwo\' || cat.displayStrategy == \'categoryDisplayThree\' " data-ng-click=buildAppUrl(cat) class=vn-category-search__category-items__category-title data-ng-class="{ \'-noborder\': $last && cat.displayStrategy == \'categoryDisplayOne\' }">\n\n <span data-ng-if="cat.displayStrategy == \'categoryDisplayTwo\' " class="glyphicon glyphicon-chevron-left"></span>\n {{ cat.name }}\n </a>\n <span class=vn-category-search__category-items__category-title data-ng-if="cat.displayStrategy == \'categoryDisplayOne\' ">{{ cat.name }}</span>\n <div class=vn-category-search__category-items__category-item data-ng-repeat="subCat in cat.subCategories" data-ng-class="{ \'-noborder\': $last }">\n\n <span data-ng-if=subCat.hideSubCatLink>{{ subCat.name }}</span>\n <a href data-ng-if=!subCat.hideSubCatLink data-ng-click=buildAppUrl(subCat)>{{ subCat.name }}</a>\n </div>\n</div>'),a.put("vn-faceted-search/vn-facet-search.html",'<div data-accordion-group class=facet-item data-ng-repeat="facet in facets track by $index" data-is-open=defaultAccordianOpen>\n <div data-accordion-heading>\n <div>\n <span>{{ facet.title }}</span>\n <i class="pull-right glyphicon" data-ng-class="{\'glyphicon-chevron-down\': defaultAccordianOpen, \'glyphicon-chevron-right\': !defaultAccordianOpen}"></i>\n </div>\n </div>\n <div data-ng-if="facet.displayType != \'swatches\'" class=facet-properties>\n <label class=facet-property data-ng-repeat="property in facet.properties track by $index" data-ng-class="{ \'-last\': $last }">\n\n <input type=checkbox name=property.name data-ng-checked=selectProperty(property) data-ng-click="refineFacetSearch(property)">\n <span class=name>{{ property.name }}</span>\n <span class=count>{{ property.count }}</span>\n </label>\n </div>\n <div data-ng-if="facet.displayType == \'swatches\'" class="facet-properties clearfix">\n <div data-ng-repeat="property in facet.properties" class=facet-property__swatch data-ng-click=refineFacetSearch(property) data-ng-class="{\'facet-property__swatch--selected\': selectProperty(property)}">\n <div class=facet-property__swatch--color data-ng-style="{\'backgroundColor\': property.color }">\n </div>\n </div>\n </div>\n</div>'),a.put("vn-faceted-search/vn-faceted-search.html",'<div class=vn-faceted-search-header data-ng-show=showApplyButton>\n <button class="btn btn-success __cancel-action" href data-ng-click=dismissMobileFilters()>Apply\n </button>\n \n <button class="btn __clear-action" href data-ng-click=clearAllFilters()>Clear\n </button>\n \n</div>\n<div class=-faceted-search data-ng-show=showFacetSearch>\n <div class=facets>\n <div data-accordion data-close-others=false>\n\n \n <div data-accordion-group class=facet-item__by-category data-is-open=categoryAccordiansOpen data-ng-show="categoryList.length > 0">\n <div data-accordion-heading>\n <div>\n <span>Category</span>\n <i class="pull-right glyphicon" data-ng-class="{\'glyphicon-chevron-down\': categoryAccordiansOpen, \'glyphicon-chevron-right\': !categoryAccordiansOpen}"></i>\n </div>\n </div>\n <div vn-category-search categories=categoryList query-products=queryProducts() data-ng-show=showCategorySearch class=category-search>\n </div>\n </div>\n\n \n <div vn-facet-search facets=facets query-products=queryProducts() data-ng-show="facets.length > 0"></div>\n\n \n <div data-accordion-group class=facet-item__by-price data-is-open=priceAccordiansOpen data-ng-show="facets.length > 0">\n <div data-accordion-heading>\n <div>\n <span>Price</span>\n <i class="pull-right glyphicon" data-ng-class="{\'glyphicon-chevron-down\': priceAccordiansOpen, \'glyphicon-chevron-right\': !priceAccordiansOpen}"></i>\n </div>\n </div>\n <div class=facet-item__by-price__inputs vn-price-search query-products=queryProducts()></div>\n </div>\n </div>\n\n \n <div class=vn-faceted-search-footer data-ng-show=!showApplyButton>\n <button class="btn __clear-action" href data-ng-click=clearAllFilters()>Reset Filters\n </button>\n \n </div>\n\n </div>\n</div>'),a.put("vn-faceted-search/vn-price-search.html",'<input data-ng-model=minPrice data-ng-keypress=searchByPrice($event) placeholder="$">\n to \n<input data-ng-model=maxPrice data-ng-keypress=searchByPrice($event) placeholder="$$">\n<button class="btn btn-default facet-item__by-price__button" type=button ng-click=searchByPrice($event)>Go\n</button>'),a.put("vn-faceted-search/vn-sort-search.html",'<div class=dropdown>\n <button class="btn btn-default dropdown-toggle" type=button id=dropdownMenu1 data-toggle=dropdown>\n Sort by\n <span class=caret></span>\n </button>\n <ul class=dropdown-menu role=menu aria-labelledby=dropdownMenu1>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'relevance\')">Relevance</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'highest price\')">Highest price</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'lowest price\')">Lowest price</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'relevance\')">Popularity</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'newest\')">Newest</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'oldest\')">Oldest</a>\n </li>\n </ul>\n</div>'),a.put("vn-place-order-btn/vn-place-order-btn.html",'<div class=th-checkout__place-order-fixed data-ng-class="{ \'th-checkout__place-order-fixed--active\': placeOrderFixed}" data-ng-if=checkout.steps[2].active>\n <button class="btn btn-primary btn-block btn-lg th-checkout__place-order-fixed__btn" data-ng-click=placeOrder()>\n Place Order\n </button>\n</div>'),a.put("vn-product-option/checkboxes.html",'<label data-vn-block=vn-labeled-checkbox data-vn-modifiers={{option.class}} data-ng-repeat="item in option.items" data-ng-init=item>\n\n <div data-vn-element=checkbox>\n <input type=checkbox data-ng-click="onCheckboxClicked(option, item)">\n </div>\n\n <div data-vn-element=content data-ng-include=" \'vn-product-option/content.html\' "></div>\n</label>'),a.put("vn-product-option/content.html",'<div data-vn-element=color-image>\n <div data-vn-element=color data-ng-show=item.color style="background-color: {{item.color}}"></div>\n <img data-vn-element=image data-ng-show=item.swatchImage data-ng-src={{item.swatchImage}} alt={{item.text}}>\n</div>\n<div data-vn-element=text data-ng-bind=item.text data-ng-controller=OptionsCtrl data-ng-class="{ \'-disabled\': !isItemAvailable }"></div>\n<div data-vn-element=border data-ng-class="{ checked: option.selected === item.key }"></div>'),a.put("vn-product-option/index.html",'<div data-vn-block=vn-product-option>\n\n <label data-vn-element=label data-ng-if=option.label data-ng-bind=option.label></label>\n\n <div data-ng-repeat="inputType in option.inputTypes">\n <div data-vn-element=group data-vn-modifiers="{{inputType.type}} {{option.class}}" data-ng-include=" \'vn-product-option/\' + inputType.type + \'.html\' ">\n </div>\n </div>\n\n <div data-ng-if=option.selected>\n <div data-ng-repeat="option in option.options" data-ng-include=" \'vn-product-option/index.html\' ">\n </div>\n </div>\n\n</div>'),a.put("vn-product-option/radios.html",'<label data-vn-block=vn-labeled-radio data-vn-modifiers={{option.class}} data-ng-repeat="item in option.items" data-ng-init=item data-ng-controller=OptionsCtrl data-ng-class="{ \'-disabled\': !isItemAvailable }">\n\n <div data-vn-element=radio>\n\n <input type=radio name={{option.id}} data-ng-value=item.key data-ng-model=option.selected data-ng-click="onOptionChanged(option, item)">\n </div>\n\n <div data-vn-element=content data-ng-include=" \'vn-product-option/content.html\' "></div>\n\n</label>'),a.put("vn-product-option/select.html",'<div class=dropdown data-vn-element=select data-vn-modifiers="{{ option.class }}" data-ng-attr-size="{{ inputType.size }}">\n\n <button class="btn btn-default dropdown-toggle" type=button id="dropdownMenuOption{{ option.id }}" data-toggle=dropdown>\n {{ currentSelectionText }}\n <span class=caret></span>\n </button>\n <ul class=dropdown-menu role=menu aria-labelledby="dropdownMenuOption{{ option.id }}">\n <li role=presentation data-ng-repeat="item in option.items">\n <a role=menuitem tabindex=-1 href data-ng-click="onOptionChanged(option, item)" data-ng-controller=OptionsCtrl data-ng-class="{ \'-disabled\': !isItemAvailable }">\n {{ item.text }}\n </a>\n </li>\n </ul>\n</div>'),a.put("vn-product-option/text.html",'<div data-ng-if="inputType.rows > 1">\n <textarea data-vn-element=text data-vn-modifiers={{option.class}} data-ng-focus="saveTo=saveTo||{}" data-ng-model=saveTo[option.id] data-ng-maxlength={{inputType.maxlength}} placeholder={{inputType.placeholder}} rows={{inputType.rows}} cols={{inputType.cols}}></textarea>\n</div>\n\n<div data-ng-if="!inputType.rows || inputType.rows < 2">\n <input data-vn-element=text data-vn-modifiers={{option.class}} data-ng-focus="saveTo=saveTo||{}" data-ng-model=saveTo[option.id] data-ng-maxlength={{inputType.maxlength}} placeholder={{inputType.placeholder}}>\n</div>'),a.put("vn-product/vn-product-image.html",'<img data-ng-src="{{ getImagePath(product.imageCollections) }}" class=img-responsive alt="{{ product.name }}">'),a.put("address/address-display.tpl.html",'<div class=row data-ng-show="address.address1 !== \'\'" data-ng-click=onClick()>\n <div class=col-xs-10>\n <div class=th-address__display__addressPart>{{ address.firstName }} {{ address.lastName }}</div>\n <div class=th-address__display__addressPart>{{ address.address1 }}</div>\n <div data-ng-if="address.address2 != \'\'" class=th-address__display__addressPart>{{ address.address2 }}</div>\n <div class=th-address__display__addressPart data-ng-show=isLocationUS>{{ address.city }}, {{ address.state }} {{ address.postalCode }}</div>\n <div class=th-address__display__addressPart data-ng-show=isLocationUS>{{ address.phoneNumber | vnUsPhone }}</div>\n\n <div class=th-address__display__addressPart data-ng-show=!isLocationUS>{{ address.city }}</div>\n <div class=th-address__display__addressPart data-ng-show=!isLocationUS>{{ address.state }} {{ address.postalCode }}</div>\n <div class=th-address__display__addressPart data-ng-show=!isLocationUS>{{ address.country }}</div>\n <div class=th-address__display__addressPart data-ng-show=!isLocationUS>{{ address.phoneNumber }}</div>\n\n <div class=th-address__display__addressPart data-ng-if=shippingValue data-ng-show=address.residential>Type: Residential</div>\n <div class=th-address__display__addressPart data-ng-if=shippingValue data-ng-show=!address.residential>Type: Business</div>\n </div>\n <div class=col-xs-2 ng-show=showEditButton>\n <i class="fa fa-angle-right fa-2x pull-right"></i>\n </div>\n</div>'),a.put("address/vn-address-display-actions.tpl.html",'<div class="container-fluid no-padding">\n <div data-ng-if="shipping==\'true\'" data-vn-address-display data-address=address data-shipping=true></div>\n <div data-ng-if="shipping!=\'true\'" data-vn-address-display data-address=address></div>\n <div class="row th-address__display__actions">\n <div class=col-xs-7>\n <span data-ng-if=!address.preferred>\n <button class="btn btn-default" data-ng-click=onMakePreferredClicked()>Make Preferred\n </button>\n </span>\n <span class=th-address__display__actions__preferred data-ng-if=address.preferred>\n <i class="fa fa-check"></i> Preferred</span>\n </div>\n <div class="col-xs-4 col-xs-offset-1 col-sm-3 col-sm-offset-2 col-md-2 col-md-offset-3">\n <div class=row>\n <div class=col-xs-6>\n <a href data-ng-click=onEditClicked({address:address})><i class="fa fa-pencil"></i></a>\n </div>\n <div class=col-xs-6>\n <a href data-ng-click=onDeleteClicked({address:address})><i class="fa fa-trash-o"></i></a>\n </div>\n </div>\n </div>\n </div>\n</div>'),a.put("address/vn-address-picker.tpl.html",'<div class="th-checkout__step__drawer -left" data-ng-class="{\'-open\': openAddressPicker}">\n\n <div class=th-checkout__step__drawer__body data-ng-show=openAddressPicker data-ng-switch=state data-ng-cloak>\n <a href class=th-checkout__step__drawer__close data-ng-click=selectAddress()>\n <i class="fa fa-close fa-2x"></i>\n </a>\n\n <div class=th-checkout__step__drawer__title>\n <span data-ng-switch-when=ADDRESSLIST>{{:: selectAddressTitle}}</span>\n <span data-ng-switch-when=NEWADDRESS>{{:: newAddressTitle}}</span>\n </div>\n\n <div class=th-address__choose data-ng-switch-when=ADDRESSLIST>\n <div class=th-address__choose__options ng-cloak>\n <label class=th-address__choose__options__option data-ng-repeat="address in addressList" for="address{{ $index }}">\n <div class=styled-optionbox-option>\n <input type=radio id="address{{ $index }}" name=billingAddress data-ng-value=true data-ng-model=address.preferred data-ng-change="setPreferredAddress({{ $index }})">\n\n <div>\n <vn-address-display data-ng-if="shipping==\'true\'" data-address=address data-show-edit-button=allowEdit data-shipping=true></vn-address-display>\n <vn-address-display data-ng-if="shipping!=\'true\'" data-address=address data-show-edit-button=allowEdit></vn-address-display>\n </div>\n </div>\n </label>\n\n <a class=th-address__choose__options__new-option ng-repeat-end data-ng-click=createNewAddress()>\n Enter a different address\n </a>\n </div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn__continue" data-ng-click=selectAddress()>\n Continue <i class="fa fa-angle-right"></i>\n </button>\n </div>\n\n\n <div data-ng-switch-when=NEWADDRESS>\n <div class="th-address__same-as styled-checkbox-option" data-ng-if=showCopyAddress>\n <input type=checkbox id=chkAddressCopy name=chkAddressCopy data-ng-model=addressCopied data-ng-change="copyAddressHandler()">\n <label for=chkAddressCopy>{{:: copyAddressText}}</label>\n </div>\n <div class=th-address__enterAddress>\n <div data-ng-if="shipping==\'true\'" data-vn-address-editor="" address=newAddress countries=countries data-on-dirty=setCopyAddressFalse() data-on-save="saveAddress({newAddress: newAddress})" data-shipping=true></div>\n <div data-ng-if="shipping!=\'true\'" data-vn-address-editor="" address=newAddress countries=countries data-on-dirty=setCopyAddressFalse() data-on-save="saveAddress({newAddress: newAddress})"></div>\n </div>\n </div>\n\n\n <div class=th__back-button>\n <a href=javascript:void(0); data-ng-click=selectAddress()>\n <i class="fa fa-arrow-left"> {{:: backToText}}</i>\n </a>\n </div>\n </div>\n</div>'),a.put("app-messages/vnAppMessage.tpl.html",'<alert class="vn-app-message container-fluid" ng-repeat="alert in appMessagesCtrl.alerts track by alert.id" type="{{ alert.type }}">\n <div class=row>\n <div class=col-xs-8>\n <span class=vn-app-message__text>{{alert.text}}</span>\n </div>\n <div class="col-xs-4 align-right">\n <button class="btn vn-app-message__button th-alert__button" data-ng-click=appMessagesCtrl.closeAlert(alert.id)>Ok</button>\n </div>\n </div>\n</alert>'),a.put("billing-address/billing-address-views.html",'<div class=th-address data-ng-controller="BillingAddressViewsCtrl as vm" data-ng-switch=vm.state data-ng-init=vm.init()>\n <div class="th-checkout__section-heading th-address__heading">\n Billing Address\n </div>\n\n <div class=th-address__display data-ng-switch-when=VIEWADDRESS>\n <vn-address-display data-address=vm.billingAddress data-on-click=vm.editBillingAddress() data-show-edit-button=vm.billingAddress></vn-address-display>\n </div>\n\n <div class="th-address__same-as styled-checkbox-option" data-ng-switch-when=EDITADDRESS ng-cloak>\n <input type=checkbox id=chkBillingAddress name=chkBillingAddress data-ng-model=vm.useShippingAddress data-ng-change="vm.copyShippingAddress()">\n <label for=chkBillingAddress>Billing address same as shipping</label>\n </div>\n <div class=th-address__enterAddress data-ng-switch-when=EDITADDRESS ng-cloak>\n <div data-vn-address-editor="" address=vm.billingAddress countries=vm.countries data-on-dirty=vm.setShippingAddressFalse() data-on-save=vm.saveBillingAddress() data-show-save-button=false></div>\n </div>\n\n <div vn-address-picker data-ng-switch-when=PICKADDRESS data-address-list=vm.user.billingAddresses data-new-address-title="Add Billing Address" data-select-address-title="Choose Billing Address" data-back-to-text="back to Pay With" data-show-copy-address=vm.showCopyAddress data-countries=vm.countries data-on-address-selected=vm.onAddressSelected() data-save-address=vm.onAddressAdded(newAddress) data-address-copied=vm.useShippingAddress data-copy-address-handler=vm.copyShippingAddress() data-copy-address-text="Billing address same as shipping"></div>\n\n</div>'),a.put("busy-animation/vnBusyAnimation.tpl.html",'<ng-transclude></ng-transclude>\n<div class="{{ class }}" title=1 data-ng-if=show>\n <svg version=1.1 id=loader-1 xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink x=0px y=0px ng-attr-width="{{ size }}" ng-attr-height="{{ size }}" viewbox="0 0 50 50" style="enable-background:new 0 0 50 50" xml:space=preserve>\n\n <path fill=#000 d=M25.251,6.461c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615V6.461z>\n <animatetransform attributetype=xml attributename=transform type=rotate from="0 25 25" to="360 25 25" dur=.6s repeatcount="indefinite">\n </path>\n </svg>\n</div>'),a.put("checkout/checkout.html",'<div class=th-checkout>\n <div class=row>\n <div class="th-checkout__loading th-checkout__loading--ship-to" vn-busy-animation vn-busy-animation-size=80px vn-busy-animation-show="{{ stepOneLoading }}" vn-busy-animation-class=th-checkout__loading-inner data-ng-show=checkout.steps[0].active></div>\n\n <div class="th-checkout__loading th-checkout__loading--pay-with" vn-busy-animation vn-busy-animation-size=80px vn-busy-animation-show="{{ stepTwoLoading }}" vn-busy-animation-class=th-checkout__loading-inner data-ng-show=checkout.steps[1].active></div>\n\n <div class="th-checkout__loading th-checkout__loading--review" vn-busy-animation vn-busy-animation-size=80px vn-busy-animation-show="{{ stepThreeLoading }}" vn-busy-animation-class=th-checkout__loading-inner data-ng-show=checkout.steps[2].active></div>\n\n <div class="col-md-4 th-checkout__step th-checkout__step__ship-to" data-ng-show="checkout.steps[0].active || isInDesktopMode" data-ng-class="{ \'-active\' : checkout.steps[0].active, \'-no-scroll\' : checkout.steps[0].hasOpenDrawer }" data-ng-switch=isEditable(1) data-vn-scroll-to-top=checkout.steps[0].hasOpenDrawer data-ng-init="hideShippingMethods = true">\n\n <div class=th-checkout__step__overlay data-ng-class="{ \'-complete\' : checkout.steps[1].active || checkout.steps[2].active}" data-ng-click=setStep(1)></div>\n\n <div class=th-checkout__step__title>\n <div class=th-checkout__step__title__stepNumber data-ng-if=checkout.steps[0].active><span>1</span></div>\n <i class="fa fa-check-circle-o fa-2x" data-ng-if="checkout.steps[1].active || checkout.steps[2].active"></i>\n <div class=th-checkout__step__title__stepName>Ship To</div>\n </div>\n\n <div ng-include=" \'ship-to/ship-to-views.html\' "></div>\n\n <div data-ng-hide=hideShippingMethods ng-include=" \'ship-method/ship-method.html\' "></div>\n\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn-continue" data-ng-hide=hideShippingMethods data-ng-if=checkout.steps[0].active data-ng-click=nextShippingStep() data-ng-bind-html=buildShippingStepLabel()>\n </button>\n </div>\n <div class="col-md-4 th-checkout__step th-checkout__step__pay-with" data-ng-show="checkout.steps[1].active || isInDesktopMode" data-ng-class="{ \'-active\' : checkout.steps[1].active, \'-no-scroll\' : checkout.steps[1].hasOpenDrawer }" data-ng-switch=isEditable(2) data-vn-scroll-to-top=checkout.steps[1].hasOpenDrawer>\n\n <div class=th-checkout__step__overlay data-ng-class="{ \'-complete\' : checkout.steps[2].active}" data-ng-click="checkout.steps[0].active || setStep(2)"></div>\n\n <div class=th-checkout__step__title>\n <div class=th-checkout__step__title__stepNumber data-ng-if="checkout.steps[0].active || checkout.steps[1].active"><span>2</span></div>\n <i class="fa fa-check-circle-o fa-2x" data-ng-if=checkout.steps[2].active></i>\n <div class=th-checkout__step__title__stepName>Pay With</div>\n </div>\n\n <div ng-include=" \'pay-with/credit-card-views.html\' "></div>\n\n <div ng-include=" \'billing-address/billing-address-views.html\' "></div>\n\n <div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn-continue" data-ng-if=checkout.steps[1].active data-ng-click=nextBillingStep()>\n Continue <i class="fa fa-angle-right"></i>\n </button>\n\n <div class=th__back-button data-ng-if=checkout.steps[1].active>\n <a href=javascript:void(0); data-ng-click=prevStep()>\n <i class="fa fa-arrow-left"> back to Ship To</i>\n </a>\n </div>\n\n <br style="clear: both">\n </div>\n\n </div>\n\n <div data-vn-place-order-btn></div>\n\n <div class="col-md-4 th-checkout__step th-checkout__step__review" data-ng-show="checkout.steps[2].active || isInDesktopMode" data-ng-class="{ \'-active\' : checkout.steps[2].active, \'-no-scroll\' : checkout.steps[2].hasOpenDrawer }" data-vn-scroll-to-top=checkout.steps[2].hasOpenDrawer>\n\n <div class=th-checkout__step__overlay data-ng-click="checkout.steps[0].active || checkout.steps[1].active || setStep(3)"></div>\n\n <div class=th-checkout__step__title>\n <div class=th-checkout__step__title__stepNumber><span>3</span></div>\n <div class=th-checkout__step__title__stepName>Review</div>\n </div>\n <div class=th-checkout__thanks__title>\n Total: {{ checkout.cart.totals.grandTotal | currency }}\n </div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn-continue" data-ng-if=checkout.steps[2].active data-ng-click=placeOrder()>\n {{ placeOrderBtnText }}\n </button>\n <div vn-review=checkout.cart></div>\n <div ng-include=" \'review/review-details-2.html\' " ng-if=checkout.steps[2].active></div>\n\n <button class="hidden-md hidden-lg hidden-xl btn btn-primary btn-block btn-lg th-checkout__step__btn-continue" data-ng-if=checkout.steps[2].active data-ng-click=placeOrder()>\n {{ placeOrderBtnText }}\n </button>\n\n <div class=th__back-button>\n <a href=javascript:void(0); data-ng-if=checkout.steps[2].active data-ng-click=prevStep()>\n <i class="fa fa-arrow-left"> back to Pay With</i>\n </a>\n </div>\n\n </div>\n </div>\n</div>'), +a.put("checkout/vn-address-editor.html",'<div class="th-address container-fluid">\n\n <div>\n\n <div class=th-address__location>\n <div class=btn-group>\n <button type=button data-ng-click=setCountryToUS() class="btn btn-default" data-ng-class="{ \'btn-primary\' : isLocationUS }">United States\n </button>\n <button type=button data-ng-click=setCountryToOther() class="btn btn-default" data-ng-class="{ \'btn-primary\': !isLocationUS }">International\n </button>\n </div>\n </div>\n\n <div class=th-address__form-wrapper>\n <form id=frmAddress name=frmAddress novalidate data-ng-submit=updateAddress(address)>\n <div class=row>\n <div class=col-xs-6>\n <div class=form-group>\n <input name=inputUSFirstName class="form-control input-lg immediate-help" id=first-name data-vn-placeholder="First Name" data-ng-model=address.firstName data-vn-first-name-validate required>\n\n <data-vn-popover-first-name>\n\n </div>\n </div>\n <div class=col-xs-6>\n <div class=form-group>\n <input name=inputUSLastName class="form-control input-lg -right immediate-help" id=last-name data-vn-placeholder="Last Name" data-ng-model=address.lastName data-vn-last-name-validate required>\n\n <data-vn-popover-last-name>\n\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputUSAddress1Line class="form-control input-lg immediate-help" id=address-1 data-vn-placeholder="Address Line 1" data-ng-model=address.address1 data-vn-street-validate required>\n\n <data-vn-popover-address>\n\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputUSAddressLine2 class="form-control input-lg" id=address-2 data-vn-placeholder="Address Line 2" data-ng-model="address.address2">\n </div>\n </div>\n </div>\n <div class=row data-ng-show=isLocationUS data-ng-hide=check.useShippingAddress>\n <div class=col-xs-5>\n <div class=form-group>\n <input name=inputUSCity class="form-control input-lg immediate-help" id=city data-vn-placeholder=City data-ng-model=address.city data-vn-city-validate ng-required="isLocationUS">\n\n <data-vn-popover-city>\n\n </div>\n </div>\n <div class=col-xs-3>\n <div class=form-group>\n <div class="th-address__state th-dropdown">\n <vn-dropdown name=inputUSState availableoptions=address.selectedCountry.states placeholder=State optionselect=onStateChanged model=address.selectedState selected-field=code>\n <vn-dropdown>\n </vn-dropdown></vn-dropdown></div>\n </div>\n </div>\n <div class=col-xs-4>\n <div class=form-group>\n <input name=inputUSZip class="form-control input-lg immediate-help" id=zip data-vn-placeholder=Zip data-ng-model=address.postalCode data-vn-zip-validate ng-required="isLocationUS">\n\n <data-vn-popover-zip>\n\n </div>\n </div>\n </div>\n <div class=row data-ng-show=!isLocationUS>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputWorldwideCity class="form-control input-lg immediate-help" id=international-city data-vn-placeholder=City data-ng-model=address.city data-vn-city-validate required>\n\n <data-vn-popover-city></data-vn-popover-city>\n </div>\n </div>\n </div>\n <div class=row data-ng-show=!isLocationUS>\n <div class=col-xs-6>\n <div class=form-group>\n <input name=inputWorldwideRegion class="form-control input-lg immediate-help" id=region data-vn-placeholder=Region data-ng-model=address.state data-vn-region-validate ng-required="!isLocationUS">\n <data-vn-popover-region></data-vn-popover-region>\n </div>\n </div>\n <div class=col-xs-6>\n <div class=form-group>\n <input name=inputWorldwidePostalCode class="form-control input-lg immediate-help" id=postal-code maxlength=15 data-vn-placeholder="Postal code" data-ng-model=address.postalCode data-vn-postal-code-validate ng-required="!isLocationUS">\n <data-vn-popover-postal-code>\n </data-vn-popover-postal-code></div>\n </div>\n </div>\n <div class=row data-ng-show="!isLocationUS ">\n <div class=col-xs-12>\n <div class=form-group>\n <div class="th-address__country th-dropdown">\n\n <vn-dropdown name=inputWorldwideCountry data-availableoptions=countries placeholder=Country optionselect=onCountryChanged model=address.selectedCountry>\n <vn-dropdown>\n\n </vn-dropdown></vn-dropdown></div>\n </div>\n </div>\n </div>\n\n <div class=row data-ng-show=isLocationUS>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputUSPhoneNumber class="form-control input-lg immediate-help" id=phone-number data-vn-placeholder="Phone Number" data-ng-model=address.phoneNumber data-vn-format-us-phone-number data-vn-us-phone-validate required>\n\n <data-vn-popover-us-phone></data-vn-popover-us-phone>\n </div>\n </div>\n </div>\n\n <div class=row data-ng-show=!isLocationUS>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputIntlPhoneNumber class="form-control input-lg immediate-help" maxlength=35 data-vn-placeholder="Phone Number" data-ng-model=address.phoneNumber data-vn-required-field-validate required>\n\n <data-vn-popover-required location=top field="Phone Number"></data-vn-popover-required>\n </div>\n </div>\n </div>\n <div class=row data-ng-if="shipping==\'true\'">\n <div class=col-xs-12>\n <div class=form-group>\n <input type=checkbox name=type class=immediate-help id=residential-1 data-ng-model=address.residential data-ng-true-value=false data-ng-false-value="true">\n <label for=residential-1 role=button tabindex=0>This is a business address</label>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n <div>\n <div class=row data-ng-if=showCancelButtonValue>\n <div class=col-xs-6>\n <button class="btn btn-default btn-block btn-lg" data-ng-click=onCancel()>\n {{cancelText}}\n </button>\n </div>\n <div class=col-xs-6>\n <button class="btn btn-primary btn-block btn-lg" data-ng-click=saveAddress() data-ng-enabled=frmAddress.$valid data-ng-if=showSaveButtonValue>\n {{saveText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n <div class=row data-ng-if=!showCancelButtonValue>\n <div class=col-xs-12>\n <button class="btn btn-primary btn-block btn-lg" data-ng-click=saveAddress() data-ng-enabled=frmAddress.$valid data-ng-if=showSaveButtonValue>\n {{saveText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n </div>\n\n</div>'),a.put("dropdown/vn-dropdown.tpl.html",'<div class="vn-dropdown th-dropdown" dropdown>\n <button id=dropdownButton name="{{name + \'Label\'}}" class="vn-dropdown__trigger form-control btn btn-default btn-lg dropdown-toggle form-control" data-vn-placeholder={{placeholder}} data-ng-model=selectedOption.selectedDisplayValue dropdown-toggle data-toggle=dropdown value={{selectedOption.selectedDisplayValue}}>{{selectedOption.selectedDisplayValue}}<span class=caret></span>\n </button>\n <ul class="vn-dropdown__menu dropdown-menu" role=menu>\n <li role=presentation data-ng-repeat="option in options">\n <a role=menuitem data-ng-click=changeOption($index) href>{{option.displayValue}}</a>\n </li>\n </ul>\n <select name={{name}} class=vn-dropdown__select ng-model=selectedOption ng-options="option.selectedDisplayValue for option in options">\n </select>\n</div>'),a.put("easy-zoom/vnEasyZoom.tpl.html","<div class=easyzoom data-ng-class=\"{ 'easyzoom--adjacent': ezAdjacent, 'easyzoom--overlay': ezOverlay }\">\n <a data-ng-href={{ezZoomSrc}}>\n <img class=img-responsive data-ng-src={{ngSrc}} alt={{alt}}>\n <div class=th-product-view__zoom></div>\n </a>\n</div>"),a.put("login/forgot-password.html",'<div class=th-login>\n <div class=container-fluid>\n <div class=row>\n <div class="col-xs-12 col-xs-offset-0 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4">\n <div class=th__title>Forgot Your Password?</div>\n <div class=th__subtitle>Enter your email address and we\'ll send you a link to reset your password</div>\n <div class=th-checkout__login__form>\n <form id=frmForgotPassword name=frmForgotPassword novalidate data-ng-submit=forgotPassword()>\n <div class=row>\n <div class=col-xs-12>\n <div class=form-group>\n <input id=inputLoginEmail name=inputLoginEmail class="form-control input-lg immediate-help" data-vn-placeholder="E-mail address" data-ng-model=email data-ng-change=checkValidity() data-vn-email-validate required>\n\n <div class="input-help bottom" ng-if=frmForgotPassword.inputLoginEmail.$touched>\n <div class=arrow></div>\n <h4>E-mail must:</h4>\n <ul>\n <li ng-class=emailEmpty>Not be <strong>empty</strong></li>\n <li ng-class=validEmail>Be a <strong>valid</strong> address</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </form>\n <button class="btn btn-primary btn-block btn-lg th-checkout__login__continue" data-ng-disabled=disabledButton data-ng-click=forgotPassword()>\n Reset Password <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>'),a.put("login/login.html",'<div data-vn-app-message=""></div>\n<div data-vn-login data-allow-anonymous=true data-redirect-to=checkout data-button-text=Continue></div>'),a.put("login/my-account-login.html",'<div data-vn-app-message=""></div>\n<div data-vn-login data-allow-anonymous=false data-redirect-to=my-account data-button-text="Sign In" data-title="Account Login"></div>'),a.put("login/vn-login-link.html","<div>\n <span data-ng-if=!loggedIn>\n <a data-ui-sref=my-account-login data-translate=header.signIn>Sign In</a>\n </span>\n <span data-ng-if=loggedIn>\n <a data-ui-sref=logout data-translate=header.signOut>Sign Out</a>\n </span>\n</div>"),a.put("login/vn-login.html",'<div class=th-login>\n <div class=th__title>{{title}}</div>\n <div class=container-fluid>\n <div class=row ng-if=loginError>\n <div class="col-xs-12 col-xs-offset-0 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4">\n <div class=th-login__error data-ng-click=clearError()>\n Login Failed\n </div>\n </div>\n </div>\n <div class=row>\n <div class="col-xs-12 col-xs-offset-0 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4">\n <div class=th-login__form>\n <form id=frmLogin name=frmLogin novalidate data-ng-submit=updateUser()>\n <div class=row>\n <div class=col-xs-12>\n <div class=form-group>\n <input id=inputLoginEmail name=inputLoginEmail class="form-control input-lg immediate-help" data-vn-placeholder="E-mail address" data-ng-model=user.email pattern=.{1,75} required>\n\n </div>\n </div>\n </div>\n\n <div class=row data-ng-if="!user.anonymous || !allowAnonymous">\n <div class=col-xs-12>\n <div class=form-group>\n <input type=password id=inputLoginPassword name=inputLoginPassword class="form-control input-lg immediate-help" data-vn-placeholder=Password data-ng-model=user.password data-ng-enter=updateUser() pattern=.{1,75} required>\n </div>\n </div>\n </div>\n </form>\n\n <div class=th-login__user-type ng-show=allowAnonymous>\n <div class=btn-group>\n <button type=button data-ng-click="user.anonymous = true" class="btn btn-default" data-ng-class="{ \'btn-primary\' : user.anonymous }">I\'m a new customer\n </button>\n <button type=button data-ng-click="user.anonymous = false" class="btn btn-default" data-ng-class="{ \'btn-primary\': !user.anonymous }">I\'ve ordered before\n </button>\n </div>\n </div>\n\n <button class="btn btn-primary btn-block btn-lg th-login__continue" data-ng-disabled=disabledButton data-ng-click=updateUser()>\n {{buttonText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n <a href ui-sref=forgot-password>Forgot your password?</a>\n </div>\n </div>\n </div>\n</div>'),a.put("modal/vnAddressDeleteConf.tpl.html",'<div class="th-error-wrap clearfix th-modal">\n <a href class=th-modal__close ng-click=$dismiss()>\n <i class="fa fa-times"></i>\n </a>\n <div class=th-error-details>\n <div class="th-error-details__header modal-header">\n <div class=modal-body>\n <div class=th-modal__message>\n {{ :: message }}\n </div>\n\n <div class="th-modal__body row">\n <div class=col-xs-12>\n <div class=th-message-details__section2 vn-address-display="" address=::addressToDelete></div>\n </div>\n </div>\n </div>\n <div class="modal-footer container-fluid">\n <div class=row>\n <div class="col-xs-12 col-sm-6">\n <button class="btn btn-default btn-lg th-modal__button th-modal__button--secondary" ng-click=$dismiss()>Cancel</button>\n </div>\n <div class="col-xs-12 col-sm-6">\n <button class="btn btn-primary btn-lg th-modal__button th-modal__button--primary" ng-click=$close()>{{::buttonText}}</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>'),a.put("modal/vnErrorModal.tpl.html",'<div class=th-error-details>\n <div class="th-error-details__header modal-header">\n <h1>Sorry, something went wrong with the page...</h1>\n\n <div class=modal-body>\n <p class=th-error-details__section1>... but it might just be a small glitch. Try refreshing the page\n to see if that fixes it.</p>\n\n <p class=th-error-details__section2>\n If the problem persists, please try again later.\n </p>\n </div>\n <div class=modal-footer>\n <button class="btn btn-warning" ng-click=$close()>Close</button>\n </div>\n </div>\n</div>'),a.put("modal/vnMessageModal.tpl.html",'<div class="th-error-wrap clearfix">\n <div class=th-error-details>\n <div class="th-error-details__header modal-header">\n <h1>This is a generic app message template</h1>\n <div class=modal-body>\n <p class=th-message-details__section1>It should be over ridden in the calling application</p>\n\n </div>\n <div class=modal-footer>\n <button class="btn btn-warning" ng-click=$dismiss()>Ok</button>\n <button class="btn btn-warning" ng-click=$close()>Cancel</button>\n </div>\n </div>\n </div>\n</div>'),a.put("modal/vnPaymentProfileDeleteConf.tpl.html",'<div class="th-error-wrap clearfix th-modal">\n <a href class=th-modal__close ng-click=$dismiss()>\n <i class="fa fa-times"></i>\n </a>\n <div class=th-error-details>\n <div class="th-error-details__header modal-header">\n <div class=modal-body>\n <div class=th-modal__message>\n {{ :: message }}\n </div>\n\n <div class="th-modal__body row">\n <div class=col-xs-12>\n <span class=th-credit-card__img data-ng-class=::paymentProfileToDelete.card.ccCssClass></span>\n <span>{{ ::paymentProfileToDelete.card.cardNumber.slice(-4) }}</span>\n <span>{{ ::paymentProfileToDelete.card.expMonth }}/{{ ::paymentProfileToDelete.card.expYear }}</span>\n </div>\n </div>\n\n </div>\n <div class="modal-footer container-fluid">\n <div class=row>\n <div class="col-xs-12 col-sm-6">\n <button class="btn btn-default btn-lg th-modal__button th-modal__button--secondary" ng-click=$dismiss()>Cancel</button>\n </div>\n <div class="col-xs-12 col-sm-6">\n <button class="btn btn-primary btn-lg th-modal__button th-modal__button--primary" ng-click=$close()>{{::buttonText}}</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>'),a.put("my-account/billing-addresses.html",'<div class="th-my-account container" data-ng-cloak="">\n\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n {{vm.pageTitle}}\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-7 col-md-6">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <div data-ng-show="!vm.addressToEdit && !vm.addressToAdd" class="th-address__choose animate-show">\n <div class=th-address__choose__options>\n <a href class=th-address__choose__options__new-option data-ng-click=vm.addAddress() ng-repeat-end>\n <i class="fa fa-plus"></i>  Add a Billing Address</a>\n \n <div data-ng-repeat="billingAddress in vm.billingAddresses" class=th-address__choose__options__option>\n <div class=styled-optionbox-option>\n <div vn-address-display-actions="" data-address=billingAddress data-on-make-preferred-clicked=vm.makeAddressPreferred($index) data-on-delete-clicked=vm.deleteAddress(address) data-on-edit-clicked="vm.editAddress(address, $index)"></div>\n </div>\n </div>\n </div>\n </div>\n <div data-ng-show=vm.addressToEdit class="th-address__enterAddress animate-show">\n <div data-vn-address-editor="" data-ng-if=vm.addressToEdit data-countries=vm.countries data-address=vm.addressToEdit data-title="Edit Shipping Address" data-on-save=vm.saveEditedAddress() data-on-cancel=vm.cancelEditAddress() data-show-save-button=true data-save-text=save data-show-cancel-button=true>\n </div>\n </div>\n <div data-ng-show=vm.addressToAdd class="th-address__enterAddress animate-show">\n <div data-vn-address-editor="" data-ng-if=vm.addressToAdd data-countries=vm.countries data-address=vm.addressToAdd data-title="Edit Shipping Address" data-on-save=vm.saveNewAddress() data-on-cancel=vm.cancelAddAddress() data-show-save-button=true data-save-text=add data-show-cancel-button=true>\n </div>\n </div>\n\n </div>\n <div class="col-xs-12 col-sm-5 col-md-4 col-md-offset-1 th-my-account__group">\n <div class=th-my-account__title>More Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.shippingaddresses>Shipping Addresses</a></li>\n <li><a href="" data-ui-sref=my-account.paymentprofiles>Payment Profiles</a></li>\n </ul>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left"></i>  Back to My Account\n </a>\n </div>\n</div>'),a.put("my-account/change-email.html",'<div class="th-my-account th-change-email container" data-ng-cloak="">\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n Change Email\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-8 col-md-6">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <div class=th-change-email__current>\n <div class=th-change-email__current__title>Current Email</div>\n <div class=th-change-email__current__email>{{user.email}}</div>\n </div>\n\n <form id=frmChangeEmail name=frmChangeEmail novalidate data-ng-submit="">\n <div class=row>\n <div class=col-xs-12>\n <div>\n <input id=changeEmail name=changeEmail class="form-control input-lg immediate-help" data-vn-placeholder="Updated E-mail" data-ng-model=user.changeEmail data-ng-class="{\'ng-invalid\':frmChangeEmail.confirmChangeEmail.$error.match}" data-ng-change=checkValidity() data-vn-email-validate required>\n\n <div class="input-help bottom" ng-if=frmChangeEmail.changeEmail.$touched>\n <div class=arrow></div>\n <h4>E-mail must:</h4>\n <ul>\n <li ng-class=emailEmpty>Not be <strong>empty</strong></li>\n <li ng-class=validEmail>Be a <strong>valid</strong> address</li>\n <li ng-class=validLength>Be less than <strong>75</strong> characters</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <input id=confirmChangeEmail name=confirmChangeEmail class="form-control input-lg immediate-help" data-vn-placeholder="Confirm Updated E-mail" data-ng-model=user.confirmChangeEmail data-match=frmChangeEmail.changeEmail data-ng-change=checkValidity() data-vn-value-match={{user.changeEmail}} required>\n <div class="input-help bottom" ng-if="frmChangeEmail.confirmChangeEmail.$touched && frmChangeEmail.confirmChangeEmail.$viewValue.length > 0">\n <div class=arrow></div>\n <ul>\n <li ng-class=sameValue>Email addresses must match</li>\n </ul>\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <input type=password id=inputPassword name=inputPassword class="form-control input-lg immediate-help" data-vn-placeholder=Password data-ng-model=user.password data-ng-change=checkValidity() data-vn-password-validate required>\n </div>\n </div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__login__continue" data-ng-disabled=changeButtonDisabled data-ng-click=changeEmail()>\n Change Email <i class="fa fa-angle-right"></i>\n </button>\n </form>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left"></i>  Back to My Account\n </a>\n </div>\n\n</div>'),a.put("my-account/change-password.html",'<div class="th-my-account th-change-password container" data-ng-cloak="">\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n Change Password\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-8 col-md-6">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <form id=frmChangePassword name=frmChangePassword novalidate data-ng-submit="">\n <div class=row>\n <div class=col-xs-12>\n <input type=password id=inputPassword name=inputPassword class="form-control input-lg immediate-help" data-vn-placeholder="Current Password" data-ng-model=user.password data-ng-change=checkValidity() data-vn-password-validate required>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <input type=password id=inputNewPassword name=inputNewPassword class="form-control input-lg immediate-help" data-vn-placeholder="New Password" data-ng-model=user.newPassword data-ng-change=checkValidity() data-vn-password-validate required>\n\n <div class="input-help bottom" ng-if=frmChangePassword.inputNewPassword.$touched>\n <div class=arrow></div>\n <h4>Password must:</h4>\n <ul>\n <li ng-class=validLength>Be at least <strong>6</strong> characters</li>\n <li ng-class=validLength>Be at most <strong>20</strong> characters</li>\n </ul>\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <input type=password id=inputConfirmPassword name=inputConfirmPassword class="form-control input-lg immediate-help" data-vn-placeholder="Confirm Password" data-ng-model=user.confirmPassword data-ng-change=checkValidity() data-vn-value-match={{user.newPassword}} required>\n <div class="input-help bottom" ng-if="frmChangePassword.inputConfirmPassword.$touched && frmChangePassword.inputConfirmPassword.$viewValue.length > 0">\n <div class=arrow></div>\n <ul>\n <li ng-class=sameValue>Passwords must match</li>\n </ul>\n </div>\n </div>\n </div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__login__continue" data-ng-disabled=changeButtonDisabled data-ng-click=changePassword()>\n Change Password <i class="fa fa-angle-right"></i>\n </button>\n </form>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left"></i>  Back to My Account\n </a>\n </div>\n\n</div>'),a.put("my-account/my-account.html",'<div data-vn-app-message=""></div>\n<div ui-view>\n <div class="container th-my-account">\n <div class=row>\n <div class="col-xs-12 th-my-account__group th-my-account__group--header">\n <div class="th-my-account__title th-my-account__group--header__title">My Account</div>\n <div class=th-my-account__group--header__welcome>\n Hi, {{user.firstName}} (<a href ui-sref=logout>log out</a>)\n </div>\n </div>\n </div>\n\n <div class=row>\n <div class="col-xs-12 th-my-account__group th-my-account__group--orders">\n <div class=th-my-account__title>Orders</div>\n\n <div class=th-my-account__overlay data-ng-if=loading vn-busy-animation vn-busy-animation-show="{{ loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n <div data-ng-if="orders.length == 0">\n <p class=text-muted>\n You haven\'t placed an order with us yet.\n </p>\n </div>\n\n <div data-ng-if="orders.length > 0">\n <div data-vn-order-table="" orders=orders class=hidden-xs></div>\n <div data-vn-order-list-view="" orders=orders class="hidden-sm hidden-md hidden-lg hidden-xl"></div>\n <div class=th-my-account__group__links>\n <a href data-ui-sref=my-account.orders.list>View all Orders</a>\n </div>\n </div>\n </div>\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-6 th-my-account__group th-my-account__group--addresses">\n <div class=th-my-account__title>Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.shippingaddresses>Shipping Addresses</a></li>\n <li><a href="" data-ui-sref=my-account.paymentprofiles>Payment Profiles</a></li>\n <li><a href="" data-ui-sref=my-account.billingaddresses>Billing Addresses</a></li>\n </ul>\n </div>\n <div class="col-xs-12 col-sm-6 th-my-account__group th-my-account__group--email">\n <div class=th-my-account__title>Email & Password</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.change-email>Change Email Address</a></li>\n <li><a href="" data-ui-sref=my-account.change-password>Change Password</a></li>\n </ul>\n </div>\n </div>\n </div>\n</div>'),a.put("my-account/orders.detail.html",'<div class="th-order-detail container">\n <div class=row>\n <div class=col-xs-12>\n\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class="th-order-detail__header row">\n <div class=col-xs-12>\n <div class="th-order-detail__title th-order-detail__header__title">Order Details</div>\n </div>\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-6">\n <div class=th-order-detail__header__order-date>Placed on <span>{{::vm.order.orderDate | date}}</span></div>\n <div class=th-order-detail__header__order-details>\n <span class=th-order-detail__header__order-details__order-number>Order <span>#{{::vm.order.orderId}}</span></span> | <span class=th-order-detail__header__order-details__order-status>{{::vm.order.orderStatus}}</span>\n </div>\n <div class="panel panel-default th-order-detail__items">\n <div class=panel-body>\n <div class="row th-order-detail__items__product" data-ng-repeat="product in vm.order.orderItems">\n <div class="col-xs-3 col-sm-3 col-md-3 th-order-detail__items__product__img">\n <a href ui-sref="product({slug: product.slug})"><img data-ng-src={{product.imageUrl}} width=100%></a>\n </div>\n <div class="col-xs-6 col-sm-6 col-md-6">\n <div class=th-order-detail__items__product__name>\n <a href ui-sref="product({slug: product.slug})">{{::product.productName}}</a>\n </div>\n <div class=th-order-detail__items__product__qty>Qty: {{::product.quantity}}</div>\n <div class=th-order-detail__items__product__options>{{::product.options}}</div>\n </div>\n <div class="col-xs-3 col-sm-3 col-md-3">\n <div class="th-order-detail__items__product__price align-right currency">{{::product.price.subtotal | currency}}</div>\n </div>\n </div>\n </div>\n <div class=panel-footer>\n <div class="row th-order-detail__items__discount" data-ng-repeat="discount in vm.order.discounts">\n <div class=col-xs-8>{{::discount.couponCode}}</div>\n <div class="align-right col-xs-4 currency">-{{::discount.value | currency}}</div>\n </div>\n <div class="row th-order-detail__items__shipping">\n <div class=col-xs-8>Shipping</div>\n <div class="align-right col-xs-4">{{::vm.order.totals.shipping | currency}}</div>\n </div>\n <div class="row th-order-detail__items__tax">\n <div class=col-xs-8>Tax</div>\n <div class="align-right col-xs-4">{{::vm.order.totals.taxTotal | currency}}</div>\n </div>\n <div class="row th-order-detail__items__total">\n <div class=col-xs-8>Total</div>\n <div class="align-right col-xs-4">{{::vm.order.totals.grandTotal | currency}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <div class="col-xs-12 col-sm-6">\n <div class=th-order-detail__paid-with>\n <div class=th-order-detail__title>Paid With</div>\n <div class="panel panel-default th-order-detail__paid-with">\n <div class=panel-body>\n <div class=th-credit-card__img data-ng-class="{\'th-credit-card__img--visa\': vm.order.paymentProfile.paymentMethod == \'Visa\', \'th-credit-card__img--amex\': vm.order.paymentProfile.paymentMethod == \'American Express\', \'th-credit-card__img--discover\': vm.order.paymentProfile.paymentMethod == \'Discover\', \'th-credit-card__img--mastercard\': vm.order.paymentProfile.paymentMethod == \'MasterCard\'}"></div>\n <span class=th-order-detail__paid-with__card-number>{{::vm.order.paymentProfile.PCIaaS_MaskedCardRef}}</span>\n </div>\n </div>\n </div>\n <div class=th-order-detail__shipping>\n <div class=th-order-detail__title>Shipping</div>\n <div class="panel panel-default">\n <div class=panel-body>\n <div class=th-order-detail__shipping__name>{{::vm.order.shippingAddress.firstName}} {{::vm.order.shippingAddress.lastName}}</div>\n <div class=th-order-detail__shipping__address-1>{{::vm.order.shippingAddress.address1}}</div>\n <div class=th-order-detail__shipping__address-2>{{::vm.order.shippingAddress.address2}}</div>\n <div>\n <span class=th-order-detail__shipping__city>{{::vm.order.shippingAddress.city}}</span>,\n <span class=th-order-detail__shipping__state>{{::vm.order.shippingAddress.state}}</span>\n <span class=th-order-detail__shipping__zip>{{::vm.order.shippingAddress.postalCode}}</span>\n </div>\n <div data-ng-if="vm.order.trackingDetails.length > 0">\n <hr>\n <div class=th-order-detail__shipping__tracking-detail data-ng-repeat="tracking in vm.order.trackingDetails">\n <div data-ng-if="tracking.shippingGateway != \'OTHER\'">\n <div data-ng-bind-html=tracking.shippingMethodName></div>\n <div>\n Tracking: <span data-ng-if=tracking.trackingUri><a data-ng-href={{::tracking.trackingUri}} target=_blank>{{::tracking.trackingNumber}}</a></span>\n <span data-ng-if=!tracking.trackingUri>{{::tracking.trackingNumber}}</span>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n <div class=th-order-detail__notes data-ng-if="vm.order.misc.comment != \'\'">\n <div class=th-order-detail__title>Notes</div>\n <div class="panel panel-default">\n <div class=panel-body>\n <div>{{::vm.order.misc.comment || "No Notes"}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left"></i>  Back to My Account\n </a>\n </div>\n </div>\n </div>\n</div>'), +a.put("my-account/orders.html","<div ui-view></div>"),a.put("my-account/orders.list.html",'<div class="th-orders-list container" data-ng-cloak="" data-ng-init=vm.init()>\n <div class=row>\n <div class=col-xs-12>\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n Orders\n </div>\n\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <div data-ng-if="vm.orders.length == 0">\n <p class=text-muted>\n You haven\'t placed an order with us yet.\n </p>\n </div>\n\n <div data-ng-if="vm.orders.length > 0">\n <div class=th-orders-list__page-size>\n <select ng-options="item.text for item in vm.pageSizes" ng-model=vm.selectedPageSize ng-change=vm.getOrders()></select>\n </div>\n\n <div data-vn-order-list-view="" orders=vm.orders class="hidden-sm hidden-md hidden-lg hidden-xl"></div>\n <div data-vn-order-table="" orders=vm.orders class=hidden-xs></div>\n\n <div class="well well-sm th-orders-list__pagination">\n <span>{{vm.startIndex}} - {{vm.endIndex}} of {{vm.cursor.total}}</span>\n <div class=pull-right>\n <pagination total-items=vm.cursor.total ng-model=vm.currentPage class=pagination-sm previous-text=‹ next-text=› items-per-page=vm.selectedPageSize.value ng-change=vm.getOrders() max-size=vm.maxSize></pagination>\n </div>\n </div>\n </div>\n\n\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left"></i>  Back to My Account\n </a>\n </div>\n </div>\n </div>\n</div>'),a.put("my-account/payment-profiles.html",'<div class="th-my-account th-payment-profiles container" data-ng-cloak="">\n\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n {{vm.pageTitle}}\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-6 col-md-6">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n <div data-ng-show="!vm.paymentProfileToEdit && !vm.paymentProfileToAdd" class=animate-show>\n <div class=th-list>\n <div class=th-list__header ng-repeat-end>\n <a class=th-list__header__item href data-ng-click=vm.addPaymentProfile()><i class="fa fa-plus"></i>  Add a\n Credit Card</a>\n </div>\n <div data-ng-repeat="paymentProfile in vm.paymentProfiles" class=th-list__item>\n <div class=styled-optionbox-option>\n <div vn-credit-card-display-actions data-payment-profile=paymentProfile data-on-make-preferred-clicked=vm.makePaymentProfilePreferred($index) data-on-delete-clicked=vm.deletePaymentProfile(paymentProfile) data-on-edit-clicked=vm.editPaymentProfile(paymentProfile)>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div data-ng-show=vm.paymentProfileToAdd class="th-address__enterAddress animate-show">\n <div data-vn-credit-card-editor="" data-ng-if=vm.paymentProfileToAdd data-card=vm.paymentProfileToAdd.card data-title="Edit Shipping Address" data-on-save=vm.saveNewPaymentProfile() data-on-cancel=vm.cancelAddPaymentProfile() data-show-save-button=true data-save-text=add data-show-cancel-button=true>\n </div>\n </div>\n\n </div>\n <div class="col-xs-12 col-sm-5 col-md-4 col-md-offset-1 th-my-account__group">\n <div class=th-my-account__title>More Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.shippingaddresses>Shipping Addresses</a></li>\n <li><a href="" data-ui-sref=my-account.billingaddresses>Billing Addresses</a></li>\n </ul>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left"></i>  Back to My Account\n </a>\n </div>\n\n</div>'),a.put("my-account/shipping-addresses.html",'<div class="th-my-account container" data-ng-cloak="">\n\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n {{vm.pageTitle}}\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-7 col-md-6">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n <div data-ng-show="!vm.addressToEdit && !vm.addressToAdd" class="th-address__choose animate-show">\n <div class=th-address__choose__options>\n <a href data-ng-click=vm.addAddress() class=th-address__choose__options__new-option ng-repeat-end>\n <i class="fa fa-plus"></i>  Add a Shipping Address\n </a>\n <div data-ng-repeat="shippingAddress in vm.shippingAddresses" class=th-address__choose__options__option>\n <div class=styled-optionbox-option>\n <div vn-address-display-actions="" data-address=shippingAddress data-on-make-preferred-clicked=vm.makeAddressPreferred($index) data-on-delete-clicked=vm.deleteAddress(address) data-on-edit-clicked="vm.editAddress(address, $index)" data-shipping=true></div>\n </div>\n </div>\n </div>\n </div>\n <div data-ng-show=vm.addressToEdit class="th-address__enterAddress animate-show">\n <div data-vn-address-editor="" data-ng-if=vm.addressToEdit data-countries=vm.countries data-address=vm.addressToEdit data-title="Edit Shipping Address" data-on-save=vm.saveEditedAddress() data-on-cancel=vm.cancelEditAddress() data-show-save-button=true data-save-text=save data-show-cancel-button=true data-shipping=true>\n </div>\n </div>\n <div data-ng-show=vm.addressToAdd class="th-address__enterAddress animate-show">\n <div data-vn-address-editor="" data-ng-if=vm.addressToAdd data-countries=vm.countries data-address=vm.addressToAdd data-title="Edit Shipping Address" data-on-save=vm.saveNewAddress() data-on-cancel=vm.cancelAddAddress() data-show-save-button=true data-save-text=add data-show-cancel-button=true data-shipping=true>\n </div>\n </div>\n\n </div>\n <div class="col-xs-12 col-sm-5 col-md-4 col-md-offset-1 th-my-account__group">\n <div class=th-my-account__title>More Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.billingaddresses>Billing Addresses</a></li>\n <li><a href="" data-ui-sref=my-account.paymentprofiles>Payment Profiles</a></li>\n </ul>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left"></i>  Back to My Account\n </a>\n </div>\n\n</div>'),a.put("nav-menu-mobile/vn-nav-mobile.tpl.html",'<ul class="nav navbar-nav th-mobile-list">\n <li class="th-mobile-list__item th-mobile-list__item--header">Categories</li>\n <li class="dropdown th-mobile-list__item" ng-repeat="category in categories">\n <a href=# class="dropdown-toggle navbar-link th-dropdown-toggle th-mobile-list__link" ng-if=category.subCategories.length data-toggle=dropdown>\n {{category.name}} <span class="pull-right caret"></span>\n </a>\n <a data-ng-href={{category.url}} class="navbar-link th-dropdown-toggle th-mobile-list__link" ng-if=!category.subCategories.length>\n {{category.name}}\n </a>\n <ul class="dropdown-menu th-mobile-list th-mobile-list--sub" data-ng-if=category.subCategories.length>\n <li>\n <a data-ng-href={{category.url}} class="th-mobile-list__link th-mobile-list__link--sub">\n All {{category.name}}\n </a>\n </li>\n <li data-ng-repeat="subCategory in category.subCategories">\n <a class="th-mobile-list__link th-mobile-list__link--sub" data-ng-href={{subCategory.url}}>{{subCategory.name}}</a>\n </li>\n </ul>\n </li>\n</ul>'),a.put("nav-menu/vn-nav.tpl.html",'<div class="collapse navbar-collapse" id=th-main-menu data-ng-class="!navCollapsed && \'in\'" data-ng-click="navCollapsed=true">\n <ul class="nav navbar-nav">\n <li class="dropdown nav-top-level-menu-items" data-ng-repeat="category in smartNavCategories">\n <a class=navbar-link data-ng-href="{{ category.url }}">\n {{category.name}}\n <span data-ng-if=category.subCategories.length class="caret th-dropdown-toggle"></span>\n </a>\n <ul vn-show-on-dropdown-hover class=dropdown-menu data-ng-if=category.subCategories.length>\n <li data-ng-repeat="subCategory in category.subCategories">\n <a data-ng-href="{{ subCategory.url }}">{{subCategory.name}}</a>\n </li>\n </ul>\n </li>\n <li class=dropdown data-ng-show=displaySmartNavMoreMenuItem>\n <a href=# class=navbar-link data-translate=header.smartNavMoreLinkText>\n More\n <span class="caret th-dropdown-toggle"></span>\n </a>\n <ul vn-show-on-dropdown-hover class=dropdown-menu>\n <li data-ng-repeat="category in smartNavMoreCategories">\n <a class=navbar-link data-ng-href="{{ category.url }}">{{category.name}}</a>\n </li>\n </ul>\n </li>\n </ul>\n </div>'),a.put("orders/vn-order-list-view.tpl.html",'<div class="th-order-list-view container-fluid">\n <a href ui-sref="my-account.orders.detail({id: order.orderId})" class="th-order-list-view__item list-group-item row" data-ng-repeat="order in orders">\n <div class="col-xs-7 th-order-list-view__item-left">\n <div class=th-order-list-view__item__id data-ng-bind=::order.orderId></div>\n <div class=th-order-list-view__item__num-items>\n {{::order.orderItems.length}} Items\n </div>\n <div class=th-order-list-view__item__status data-ng-bind=::order.orderStatus></div>\n </div>\n <div class="col-xs-5 th-order-list-view__item-right">\n <div class=th-order-list-view__item__date data-ng-bind="::order.orderDate | date"></div>\n <div class=th-order-list-view__item__total data-ng-bind="::order.orderTotal | currency"></div>\n </div>\n </a>\n</div>'),a.put("orders/vn-order-table.tpl.html",'<table class="th-orders-table table table-striped table-hover">\n <thead>\n <tr>\n <th>Order #</th>\n <th>Order Date</th>\n <th>Items</th>\n <th>Order Total</th>\n <th>Status</th>\n </tr>\n </thead>\n <tbody>\n <tr data-ng-repeat="order in orders">\n <td><a href ui-sref="my-account.orders.detail({id: order.orderId})">{{ ::order.orderId }}</a></td>\n <td data-ng-bind="::order.orderDate | date"></td>\n <td data-ng-bind=::order.orderItems.length></td>\n <td data-ng-bind="::order.orderTotal | currency"></td>\n <td data-ng-bind=::order.orderStatus></td>\n </tr>\n </tbody>\n</table>'),a.put("pagination/vnPaginator.tpl.html",'<ul class=pager data-ng-if="cursor.totalPages > 1">\n <li data-ng-class="{disabled: cursor.currentPage == 1}">\n <a href data-ng-click=prevPage()><span class="glyphicon glyphicon-chevron-left"></span></a></li>\n <li data-ng-class="{disabled: cursor.currentPage == cursor.totalPages}">\n <a href data-ng-click=nextPage()><span class="glyphicon glyphicon-chevron-right"></span></a></li>\n</ul>\n\n <div class=pager>\n Page {{ cursor.currentPage }} of {{ cursor.totalPages }}\n </div>'),a.put("pay-with/credit-card-views.html",'<div data-ng-controller="CreditCardViewsCtrl as cc" data-ng-init=cc.init() data-ng-switch=cc.state>\n\n <div data-vn-credit-card-display data-ng-switch-when=VALIDCARDENTERED data-card=cc.card data-on-dirty=cc.setCardValidFalse() data-on-save=cc.saveCreditCard() data-on-click=cc.toggleChange() data-state=cc.displayCardState>\n </div>\n\n <div data-vn-credit-card-editor data-ng-switch-when=ENTERCARD data-card=cc.card data-on-dirty=cc.setCardValidFalse() data-show-save-button=false data-on-save=cc.saveCreditCard()>\n </div>\n\n <div data-vn-credit-card-picker data-ng-switch-when=PICKCARD data-state=cc.pickCardState data-card=cc.card data-card-list=cc.user.paymentProfiles data-on-select="" data-open-credit-cards=true data-close-picker=cc.closePicker() data-choose-picker=cc.choosePicker() data-enter-card=cc.enterCard() data-set-payment-profile=cc.setPaymentProfile(id) data-selected-index=cc.selectedIndex data-on-dirty-card=cc.setCardValidFalse() data-on-save-card=cc.saveCreditCard()>\n </div>\n\n</div>'),a.put("pay-with/vn-credit-card-display-action.html",'<div class="container-fluid vn-credit-card-display-action no-padding">\n <div class=row>\n <div class=col-xs-6>\n <span class=th-credit-card__img data-ng-class=paymentProfile.card.ccCssClass></span>\n   <span>{{ paymentProfile.card.cardNumber.slice(-4) }}</span>\n </div>\n <div class="col-xs-6 align-right">\n <span>{{ paymentProfile.card.expMonth }}/{{ paymentProfile.card.expYear }}</span>\n </div>\n </div>\n\n <div class="row th-address__display__actions">\n <div class="col-xs-6 th-address__display__actions__preferred">\n <span data-ng-if=!paymentProfile.preferred>\n <button class="btn btn-default" data-ng-click=onMakePreferredClicked()>Make Preferred</button>\n </span>\n <span data-ng-if=paymentProfile.preferred><i class="fa fa-check"></i> Preferred</span>\n </div>\n <div class="col-xs-6 align-right">\n <a href data-ng-click="onDeleteClicked({paymentProfile: paymentProfile})">\n <i class="fa fa-trash-o"></i>\n </a>\n </div>\n </div>\n</div>'),a.put("pay-with/vn-credit-card-display.html",'<div class=th-credit-card__display data-ng-class="{ \'-verify-CVV\' : state == \'CVV\'}">\n <div class=row data-ng-class="{\'clickable\': !readonlyVal}" data-ng-cloak data-ng-click=onClick()>\n <div class=col-xs-10>\n <span class=th-credit-card__img data-ng-class=card.ccCssClass></span>\n <span class=th-credit-card__display__last4>{{ card.cardNumber.slice(-4) }}</span>\n <span class=th-credit-card__display__exp>{{card.expMonth }}/{{card.expYear }}</span>\n </div>\n <div class=col-xs-2 data-ng-show=showArrowVal>\n <i class="fa fa-angle-right fa-2x pull-right"></i>\n </div>\n </div>\n <form id=frmCVV name=frmCVV novalidate ng-show="state==\'CVV\'">\n <hr>\n <div class=form-group>\n <div class=row>\n <div class="col-xs-7 th-credit-card__display__verifyCVV">\n <label class=th-credit-card__display__verifyCVV__label>Please verify your card</label>\n </div>\n <div class="col-xs-4 col-sm-2 th-credit-card__display__verifyCVV">\n <input id=inputCreditCardCVV name=inputCreditCardCVV class="form-control input-lg immediate-help" data-vn-placeholder=CVV data-ng-model=card.CVV data-vn-cvv-validate data-vn-cc-type="{{ card.cardTypeName }}" required>\n <input type=hidden data-ng-model=card.pCIaaSId id=hiddenCardID value="{{ card.pCIaaSId }}" name="hiddenCardID">\n <div class="input-help top" ng-if=frmCVV.inputCreditCardCVV.$touched>\n <div class=arrow></div>\n <h4>CVV must:</h4>\n <ul>\n <li ng-class=cvvValidFormat>Be <strong>{{ cvvLength }} digits</strong> long</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </form>\n</div>'),a.put("pay-with/vn-credit-card-editor.html",'<div>\n <div class="credit-card-error -aligned" ng-if=card.pCIaaSError ng-click="card.pCIaaSError = \'\'">\n <div class=row>{{card.pCIaaSError}}</div>\n </div>\n <div class="th-credit-card -aligned" ng-cloak>\n <div class=th-credit-card__strip></div>\n\n <form id=frmCreditCard name=frmCreditCard novalidate data-ng-submit=updateCreditCard()>\n <div class=row>\n <div class=col-xs-9>\n <div class=form-group>\n <input id=inputCreditCardNumber name=inputCreditCardNumber class="form-control input-lg immediate-help" data-vn-placeholder="Credit card number" data-ng-model=card.cardNumber data-vn-format-cc-number data-vn-cc-validate data-vn-cc-type="{{ card.cardTypeName }}" required>\n <data-vn-popover-credit-card></data-vn-popover-credit-card>\n </div>\n <input type=hidden data-ng-hide=true id=hiddenCardType name=hiddenCardType value="{{ card.cardTypeName }}">\n <input type=hidden data-ng-model=card.pCIaaSId id=hiddenCardID value="{{ card.pCIaaSId }}" name="hiddenCardID">\n\n </div>\n <div class=col-xs-3>\n <div class=form-group>\n <input id=inputCreditCardCVV name=inputCreditCardCVV class="form-control input-lg immediate-help" data-vn-placeholder=CVV data-ng-model=card.CVV data-ng-focus=setCCImage() data-ng-blur="setCCImage(\'reset\');" data-vn-cvv-validate data-vn-cc-type="{{ card.cardTypeName }}" required>\n\n <div class="input-help top" ng-if=frmCreditCard.inputCreditCardCVV.$touched>\n <div class=arrow></div>\n <h4>CVV must:</h4>\n <ul>\n <li ng-class=cvvValidFormat>Be <strong>{{ cvvLength }} digits</strong> long</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n\n <div class=row>\n <div class=col-xs-4>\n <div class=form-group>\n <div class="th-credit-card__exp-month th-dropdown" dropdown>\n <button id=inputCreditCardExpMonth name=inputCreditCardExpMonth class="btn btn-default btn-lg dropdown-toggle form-control immediate-help" type=button data-toggle=dropdown dropdown-togle aria-haspopup=true role=button aria-expanded=false data-ng-class="{ \'ng-invalid\': card.expMonth === \'\' || expDateInvalid === undefined, \'ng-valid\': expDateInvalid === \'valid\' }" data-vn-placeholder=MM data-ng-model=card.expMonth value="{{ card.expMonth }}">\n\n {{ card.expMonth }}<span class=caret></span>\n </button>\n <div class="input-help top-left -dropdown" ng-if=frmCreditCard.inputCreditCardExpMonth.$touched>\n <div class=arrow></div>\n <h4>Expiration date must:</h4>\n <ul>\n <li ng-class=expDateInvalid>Be <strong>future</strong> date</li>\n </ul>\n </div>\n <ul class=dropdown-menu role=menu aria-labelledby=inputCreditCardExpMonth>\n <li ng-repeat="month in months track by $index">\n <a role=menuitem tabindex=-1 href data-ng-click="onExpMonthChanged(month, \'inputCreditCardExpMonth\');">\n\n {{ month.label }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class=col-xs-4>\n <div class=form-group>\n <div class="th-credit-card__exp-year th-dropdown" dropdown>\n <button id=inputCreditCardExpYear name=inputCreditCardExpYear class="btn btn-default btn-lg dropdown-toggle form-control immediate-help" type=button data-toggle=dropdown dropdown-toggle aria-haspopup=true role=button aria-expanded=false data-ng-class="{ \'ng-invalid\': card.expYear === \'\' || expDateInvalid === undefined }" data-vn-placeholder=YY data-ng-model=card.expYear value="{{ card.expYear }}">\n\n {{ card.expYear }}<span class=caret></span>\n </button>\n <div class="input-help top-left -dropdown" ng-if=frmCreditCard.inputCreditCardExpYear.$touched>\n <div class=arrow></div>\n <h4>Expiration date must:</h4>\n <ul>\n <li ng-class=expDateInvalid>Be <strong>future</strong> date</li>\n </ul>\n </div>\n <ul class=dropdown-menu role=menu aria-labelledby=inputCreditCardExpYear>\n <li ng-repeat="year in rangeYears() track by $index">\n <a role=menuitem tabindex=-1 href data-ng-click="onExpYearChanged(year, \'inputCreditCardExpYear\');">\n\n {{ year }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class=col-xs-4>\n <div class=form-group>\n <span class=th-credit-card__img data-ng-class=card.ccCssClass></span>\n </div>\n </div>\n </div>\n\n </form>\n </div>\n <div class=container-fluid>\n <div class=row data-ng-if=showCancelButtonValue>\n <div class=col-xs-6>\n <button class="btn btn-default btn-block btn-lg th-checkout__step__cancel" data-ng-click=onCancel()>\n {{cancelText}}\n </button>\n </div>\n <div class=col-xs-6>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn__continue" data-ng-click=saveCard() data-ng-enabled=frmAddress.$valid data-ng-if=showSaveButtonValue>\n {{saveText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n <div class=row data-ng-if=!showCancelButtonValue>\n <div class=col-xs-12>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn__continue" data-ng-click=saveCard() data-ng-enabled=frmAddress.$valid data-ng-if=showSaveButtonValue>\n {{saveText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n </div>\n</div>'),a.put("pay-with/vn-credit-card-picker.html",'<div ng-cloak>\n\n <div class="th-checkout__step__drawer -left" data-ng-class="{\'-open\': openCreditCards}">\n\n <div class=th-checkout__step__drawer__body data-ng-show=openCreditCards data-ng-cloak data-ng-switch=state>\n\n <div data-ng-switch-when=PICK>\n <a href class=th-checkout__step__drawer__close data-ng-click=closePicker()>\n <i class="fa fa-close fa-2x"></i>\n </a>\n\n <div class=th-checkout__step__drawer__title>Choose credit card</div>\n\n <div class=th-credit-card__choose>\n <div class=th-credit-card__choose__options ng-cloak>\n <label class=th-credit-card__choose__options__option data-ng-repeat="profile in cardList" data-ng-class="{\'-first\' : $index === 0}" for="profile{{ $index }}">\n <div class=styled-optionbox-option>\n <input type=radio id="profile{{ $index }}" name=profile data-ng-value=true data-ng-model=profile.preferred data-ng-class="{\'-inactive\' : !profile.preferred, \'-selected\' : profile.preferred}" data-ng-change="setIndex({{ $index }})">\n\n <div>\n <span class=th-credit-card__img data-ng-class=getCssClass(profile)></span>\n <span class=th-credit-card__display__last4>{{ profile.card.last4 }}</span>\n <span class=th-credit-card__display__exp>{{ profile.card.expMonth }}/{{ profile.card.expYear }}</span>\n </div>\n </div>\n </label>\n\n <a href class=th-credit-card__choose__options__new-option ng-repeat-end ng-cloak data-ng-click=addCard()>\n Enter a different card\n </a>\n </div>\n\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn__continue" data-ng-click=choosePicker()>\n Continue <i class="fa fa-angle-right"></i>\n </button>\n </div>\n\n <div class=th__back-button>\n <a href=javascript:void(0); data-ng-click=closePicker()>\n <i class="fa fa-arrow-left"> back</i>\n </a>\n </div>\n </div>\n\n <div data-ng-switch-when=ENTER>\n <div class=th-checkout__step__drawer__title>Add credit card</div>\n <div data-vn-credit-card-editor data-card=card data-on-dirty=onDirtyCard() data-on-save=onSaveCard() data-show-save-button=true>\n </div>\n <div class=th__back-button>\n <a href=javascript:void(0); data-ng-click=goBackFromEnter()>\n <i class="fa fa-arrow-left"> back</i>\n </a>\n </div>\n </div>\n\n </div>\n </div>\n\n</div>'),a.put("popover/vn-popover.tpl.html",'<div class="input-help {{ ::location }}">\n <div class=arrow></div>\n <h4>{{ ::title }}</h4>\n</div>'),a.put("product-image/vn-product-image.tpl.html",'<img data-ng-src="{{ getImagePath(product.imageCollections) }}" class=img-responsive alt="{{ product.name }}">'),a.put("product-search/vnSearchForm.tpl.html",'<div class=th-search role=search>\n <div data-ng-show=showSearch class=th-search__popout>\n <form class=form-inline role=search name=frmSearch data-ng-submit=doSearch() novalidate>\n <div class=form-group>\n <input data-ng-model=searchTerm class=th-search__popout--input placeholder=Search...>\n <button type=button data-ng-click=doSearch() class="btn btn-xs btn-primary th-search__popout--submit">Go!\n </button>\n </div>\n </form>\n </div>\n\n <a id=search-toggle data-ng-click="showSearch = !showSearch" ng-show=allowCollapse type=button class=th-search__trigger data-ng-class="{ \'-position\' : !showSearch }">\n <span class="glyphicon glyphicon-search"></span>\n </a>\n</div>'),a.put("review/review-details-2.html",'<div data-ng-controller=ReviewDetailsCtrl>\n\n <div class=th-checkout__thanks__title>Ship To</div>\n <div class="th-address__display -readonly" data-ng-if=shippingAddress>\n <div vn-address-display data-address=shippingAddress></div>\n </div>\n\n <div class=th-checkout__thanks__title>Shipping Method</div>\n <div class=th-checkout__ship-method>\n <div class=th-checkout__ship-method__display data-ng-if=shippingMethod>\n <div class=th-checkout__ship-method__display__name data-ng-bind-html=shippingMethod.name></div>\n <div class=th-checkout__ship-method__display__price>{{ shippingMethod.price | vnCurrency }}</div>\n </div>\n </div>\n\n <div class=th-checkout__thanks__title>Paid With</div>\n <div data-vn-credit-card-display data-card=payment.card data-state=NOCVV data-show-arrow=false data-readonly=true>\n </div>\n\n <div class=th-checkout__thanks__title>Billing Address</div>\n <div class="th-address__display -readonly" data-ng-if=billingAddress>\n <div vn-address-display data-address=billingAddress></div>\n </div>\n\n</div>'),a.put("review/vn-review-details.html",'<div>\n <div class=th-checkout__thanks__title>Ship To</div>\n <div class=th-checkout__thanks__display>\n <span>{{ shippingAddress.firstName }} {{ shippingAddress.lastName }}</span>\n <span><br>{{ shippingAddress.address1 }}</span>\n <span data-ng-if=shippingAddress.address2><br>{{ shippingAddress.address2 }}</span>\n <span data-ng-if=isShippingLocationUS>\n <span><br>{{ shippingAddress.city }}, {{ shippingAddress.state }} {{ shippingAddress.postalCode }}</span>\n <span><br>{{ shippingAddress.phoneNumber | vnUsPhone }}</span>\n </span>\n\n \n <span data-ng-if=!isShippingLocationUS>\n <span><br>{{ shippingAddress.city }}</span>\n <span><br>{{ shippingAddress.state }} {{ shippingAddress.postalCode }}</span>\n <span><br>{{ shippingAddress.country }}</span>\n <span><br>{{ shippingAddress.phoneNumber }}</span>\n </span>\n \n </div>\n\n <div class=th-checkout__thanks__title>Shipping Method</div>\n <div class="th-checkout__thanks__display container-fluid">\n <div class=row>\n <div class=col-xs-6>\n <div class=th-checkout__thanks__display__name data-ng-bind-html=shippingMethod.name></div>\n </div>\n <div class="col-xs-6 align-right">\n <div class=th-checkout__thanks__display__price>{{ shippingMethod.price | vnCurrency }}</div>\n </div>\n </div>\n\n </div>\n\n <div class=th-checkout__thanks__title>Paid With</div>\n\n <div class="th-checkout__thanks__display container-fluid">\n <div class=row>\n <div class=col-xs-8>\n <span class=th-credit-card__img data-ng-class=payment.card.ccCssClass></span>\n <span class=th-credit-card__display__last4>\n <span class=hidden-xs>{{ payment.card.cardNumber | vnCreditCard:payment.card.cardTypeName}}</span>\n <span class="hidden-sm hidden-md hidden-lg hidden-xl">{{payment.card.last4}}</span>\n </span>\n </div>\n <div class="col-xs-4 align-right">\n <span class=th-credit-card__display__exp>{{payment.card.expMonth }}/{{payment.card.expYear }}</span>\n </div>\n </div>\n </div>\n\n <div class=th-checkout__thanks__title>Billing Address</div>\n <div class=th-checkout__thanks__display>\n <span>{{ billingAddress.firstName }} {{ billingAddress.lastName }}</span>\n <span><br>{{ billingAddress.address1 }}</span>\n <span data-ng-if=billingAddress.address2><br>{{ billingAddress.address2 }}</span>\n <span data-ng-if=isBillingLocationUS>\n <span><br>{{ billingAddress.city }}, {{ billingAddress.state }} {{ billingAddress.postalCode }}</span>\n <span><br>{{ billingAddress.phoneNumber | vnUsPhone }}</span>\n </span>\n\n \n <span data-ng-if=!isBillingLocationUS>\n <span><br>{{ billingAddress.city }}</span>\n <span><br>{{ billingAddress.state }} {{ billingAddress.postalCode }}</span>\n <span><br>{{ billingAddress.country }}</span>\n <span><br>{{ billingAddress.phoneNumber }}</span>\n </span>\n \n </div>\n</div>'),a.put("review/vn-review.html",'<div class=th-checkout__review>\n\n <div class="th-checkout__review__totals clearfix">\n <div class=th-checkout__review__totals__count>{{ cart.totals.qty }} items</div>\n <div class=th-checkout__review__totals__expand ng-class="{expanded: !reviewItems}"><button data-ng-click="reviewItems = !reviewItems"><span></span></button></div>\n <div class=th-checkout__review__totals__amount>{{ cart.totals.items | currency }}</div>\n </div>\n\n <div class=th-checkout__review__items data-ng-show=!reviewItems>\n <div class="th-checkout__review__items__item clearfix" data-ng-repeat="item in cart.items | reverse" data-ng-class="{\'-last\': $last}">\n\n <div class=th-checkout__review__items__item-image>\n <img data-ng-src="{{ item.imgUrl }}">\n </div>\n\n <div class=th-checkout__review__items__item-info>\n <div class=th-checkout__review__items__item-info--name>\n <span>{{ item.name }}</span>\n </div>\n\n <div class=th-checkout__review__items__item-info--price>{{ item.pricing.unitPrice | currency }}</div>\n\n <div class=th-checkout__review__items__item-info--option data-ng-repeat="option in item.options">\n <span>{{ option.optionText }}</span>\n </div>\n\n <div class=item-info-row>\n <div class=th-checkout__review__items__item-info--qty>\n <span>Qty</span> {{ item.qty }}\n </div>\n <div class=th-checkout__review__items_-info--subtotal>{{ item.pricing.subtotal | currency }}</div>\n </div>\n\n <div class=item-info-row data-ng-if="item.giftWrap.price > 0">\n <div class=th-checkout__review__items__item-info--qty>\n <span>Gift Wrap</span>\n </div>\n <div class=th-checkout__review__items__item-info--subtotal>{{ item.giftWrap.price | currency }}</div>\n </div>\n\n <div class=item-info-row data-ng-if="item.giftWrap.message != \'\'">\n <span>Message:</span> "{{ item.giftWrap.message }}"\n </div>\n </div>\n </div>\n </div>\n\n <div class=th-checkout__review__discounts data-ng-if=cart.discounts.length>\n <div class=th-checkout__review__discounts__discount data-ng-repeat="discount in cart.discounts">\n <div class=discount-info-row>\n <div class=th-checkout__review__discounts__discount-info>\n <span>{{ discount.name }}</span>\n </div>\n <div class=th-checkout__review__discounts__discount-info--subtotal>{{ discount.value | vnCurrency }}</div>\n </div>\n </div>\n </div>\n\n <div class=th-checkout__review__store-credit data-ng-if="cart.customer.storeCredit != 0">\n <div class=store-credit-info-row>\n <div class=th-checkout__review__store-credit-info>\n <span>Store Credit</span>\n </div>\n <div class=th-checkout__review__store-credit-info--subtotal>{{ cart.customer.storeCredit | vnCurrency }}</div>\n </div>\n </div>\n\n <div class=th-checkout__review__shipping-method>\n <div class=shipping-method-info-row>\n <div class=th-checkout__review__shipping-method-info>\n <span>Shipping</span>\n \n \n \n </div>\n <div class=th-checkout__review__shipping-method-info--subtotal>{{cart.totals.shipping | vnCurrency }}</div>\n </div>\n </div>\n\n <div class=th-checkout__review__tax>\n <div class=tax-info-row>\n <div class=th-checkout__review__tax-info>\n <span>Tax</span>\n </div>\n <div class=th-checkout__review__tax-info--subtotal>{{ cart.totals.taxTotal | currency }}</div>\n </div>\n </div>\n\n <div class=th-checkout__review__grand-total>\n <div class=grand-total-info-row>\n <div class=th-checkout__review__grand-total-info>\n <span>Grand Total</span>\n </div>\n <div class=th-checkout__review__grand-total-info--subtotal>{{ cart.totals.grandTotal | currency }}</div>\n </div>\n </div>\n</div>'),a.put("ship-method/ship-method.html",'<div class="th-checkout__section-heading th-checkout__ship-method__heading" data-ng-show="checkout.cart.shippingMethods.length > 0">\n Shipping Method\n</div>\n\n<div class=th-checkout__ship-method data-ng-controller=ShipMethodCtrl data-ng-show="checkout.cart.shippingMethods.length > 0" data-ng-switch=isEditable()>\n\n\n <label class=th-checkout__ship-method__method data-ng-switch-when=edit data-ng-repeat="method in checkout.cart.shippingMethods" for="shipping{{ $index }}">\n\n <div class=styled-optionbox-option>\n <input type=radio id="shipping{{ $index }}" name=shipping data-ng-value=true data-ng-model=method.selected data-ng-change="setPreferredShippingMethod({{ $index }})">\n <div>\n <div data-ng-bind-html=method.name class=th-checkout__ship-method__name></div>\n </div>\n </div>\n <div class=th-checkout__ship-method__price>{{ method.price | vnCurrency }}</div>\n\n </label>\n\n <div class=th-checkout__ship-method__display data-ng-switch-when=show>\n <div class=th-checkout__ship-method__display__name data-ng-bind-html=checkout.cart.shippingMethods[currentShippingMethodIdx].name></div>\n <div class=th-checkout__ship-method__display__price>{{ checkout.cart.shippingMethods[currentShippingMethodIdx].price | vnCurrency }}</div>\n\n </div>\n\n</div>'), +a.put("ship-to/ship-to-views.html",'<div class=th-checkout__ship-to data-ng-controller="ShipToViewsCtrl as vm" data-ng-switch=vm.state data-ng-init=vm.init()>\n\n <div class=th-address__display data-ng-switch-when=VIEWADDRESS>\n <vn-address-display data-address=vm.shippingAddress data-on-click=vm.editShippingAddress() data-shipping=true data-show-edit-button=vm.shippingAddress></vn-address-display>\n </div>\n\n <div class=th-address__enterAddress data-ng-switch-when=EDITADDRESS ng-cloak>\n <div data-vn-address-editor="" address=vm.shippingAddress countries=vm.countries data-on-save=vm.saveShippingAddress() data-show-save-button=true data-shipping=true data-save-text="Get Shipping Rates"></div>\n </div>\n\n <div vn-address-picker data-ng-switch-when=PICKADDRESS data-address-list=vm.user.shippingAddresses data-new-address-title="Add Shipping Address" data-select-address-title="Choose Shipping Address" data-back-to-text="back to Ship To" data-show-copy-address=vm.showCopyAddress data-countries=vm.countries data-on-address-selected=vm.onAddressSelected() data-shipping=true data-save-address=vm.onAddressAdded(newAddress)></div>\n\n</div>'),a.put("thank-you/thank-you.html",'<div class=th-checkout__thanks ng-cloak="">\n <div class=th-checkout__thanks__header>\n <div class=title>Thank you for your order.</div>\n <div class=order-info>Your order number is No.{{ ::orderId }}</div>\n <div class=action-info>A copy of this has been sent to<br>{{ ::userEmail }}</div>\n\n <br style="clear : both">\n </div>\n\n <div class=container-fluid>\n <div class=row>\n <div class="col-sm-12 col-sm-offset-0 col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2">\n\n <div class=row>\n <div class="th-checkout__thanks__column col-xs-12 col-sm-6 col-md-6">\n <div class=th-checkout__thanks__title>Order Details</div>\n <div vn-review=checkout.cart></div>\n </div>\n <div class="th-checkout__thanks__column col-xs-12 col-sm-6 col-md-6">\n <div vn-review-details shipping-address=checkout.cart.shippingAddress shipping-method=shippingMethod payment=checkout.cart.paymentProfile billing-address=checkout.cart.billingAddress></div>\n </div>\n\n <br style="clear : both">\n </div>\n\n </div>\n </div>\n </div>\n</div>')}]),angular.module("Volusion.toolboxCommon").controller("CreditCardViewsCtrl",["$rootScope","$filter","vnCheckout","vnPayment","vnUser","$q","vnPciaasIframe","vnSiteConfig","vnCreditCardClass","vnCreditCardUtilities",function(a,b,c,d,e,f,g,h,i,j){"use strict";function k(){if(o.user.paymentProfiles.length>0){for(var a=o.user.paymentProfiles[0].card,b=0,c=0,d=o.user.paymentProfiles.length;d>c;c++)o.user.paymentProfiles[c].preferred&&(b=c,a=o.user.paymentProfiles[c].card);return{index:b,card:a}}return{index:0,card:j.newCard()}}function l(a){angular.forEach(o.user.paymentProfiles,function(b){return o.user.paymentProfiles[a].id===b.id?void(b.preferred=!0):void(b.preferred=!1)})}function m(){o.preferredProfile=b("filter")(o.user.paymentProfiles,function(a){return a.preferred===!0?a:void 0})[0],d.setCardFrom(o.preferredProfile.card),c.setCCPaymentProfile(d.getCard()),c.setCreditCardValidity(!0)}function n(){var a={method:"Credit Card",preferred:!0,card:{cardType:o.card.cardType,cardTypeName:o.card.cardTypeName,holdersName:o.user.firstName+" "+o.user.lastName,last4:o.card.cardNumber.slice(-4),expMonth:o.card.expMonth,expYear:o.card.expYear,issueMonth:"",issueYear:"",issueNumber:"",pCIaaSId:o.card.pCIaaSId,cardNumber:o.card.cardNumber}};c.setCCPaymentProfile(a),o.user.anonymous||e.setPaymentProfile(a).then(function(a){var b=i(a.data.card.cardType);a.data.card.ccCssClass=b["class"],a.data.card.last4=a.data.card.cardNumber.slice(-4),a.data.card.cardTypeName=b.name,o.user.paymentProfiles.push(a.data)})}var o=this,p=null;h.getConfig().then(function(a){p=a.data.PCIaaS.merchantId});var q=2;o.state=null,o.pickCardState="PICK",o.displayCardState="CVV",o.oldSelectedIndex=null,o.selectedIndex=null,o.init=function(){o.card=j.newCard(),o.user.anonymous?(o.isUserCanEnterPaymentProfile=!0,o.state="ENTERCARD"):e.getPaymentProfiles().then(function(){if(o.user.paymentProfiles.length>0){m(),o.state="VALIDCARDENTERED";var a=k();o.oldSelectedIndex=o.selectedIndex=a.index,o.card=a.card}else o.isUserCanEnterPaymentProfile=!0,o.state="ENTERCARD"})},o.isUserCanEnterPaymentProfile=!1,o.user=e.getUser(),o.checkout=c.get(),o.payment=d.getCard(),o.openCreditCards=!1,o.user.isUserCanEnterPaymentProfile=!0,o.preferredProfile={},o.setPaymentProfile=function(){l(o.selectedIndex),m()},o.setCardValidFalse=function(){c.setCreditCardValidity(!1)},o.processCard=function(){return f(function(a,b){var c={CVV:"inputCreditCardCVV",HiddenCardID:"hiddenCardID",CardNumber:function(){return o.card.cardNumber},CardType:function(){return{Visa:"Visa",MasterCard:"MasterCard","American Express":"Amex",Discover:"Discover"}[o.card.cardTypeName]}};g.PCIaaS({settings:{merchantID:"3de067d8d96d407697da4a9559f99681",apiBase:"https://payments-qa.dev.volusion.com/paymentsv1_4"},fields:c,events:{success:a,error:b}}).process(!0)})},o.saveCreditCard=function(){o.processCard().then(function(b){o.card.pCIaaSError="",angular.isString(b)&&(b=JSON.parse(b)),o.card.cardNumber=-1===o.card.cardNumber.indexOf("*")?j.maskCardValue(o.card.cardNumber):o.card.cardNumber,o.card.pCIaaSId=b.CardId?b.CardId:o.card.pCIaaSId,o.card.changed=!1,n(),o.displayCardState="NOCVV",o.state="VALIDCARDENTERED",c.setCreditCardValidity(!0),a.$emit("vnPayment.validate.continue")},function(){o.card.pCIaaSError="There was a problem with saving your credit card"})},o.toggleChange=function(){c.setCreditCardValidity(!1),o.user.paymentProfiles&&o.user.paymentProfiles.length>0?(o.openCreditCards=!0,c.setHasOpenDrawer(q,!0),o.state="PICKCARD",o.pickCardState="PICK"):o.state="ENTERCARD"},o.closePicker=function(){o.user.paymentProfiles.length>0?(l(o.oldSelectedIndex),o.card=k().card,o.state="VALIDCARDENTERED",o.displayCardState="CVV",c.setCreditCardValidity(!0)):o.state="ENTERCARD"},o.choosePicker=function(){o.oldSelectedIndex=o.selectedIndex,o.setPaymentProfile(),o.card=k().card,c.setCreditCardValidity(!0),o.state="VALIDCARDENTERED",o.displayCardState="CVV"}}]),angular.module("Volusion.toolboxCommon").directive("vnCreditCardDisplayActions",["vnCreditCardClass",function(a){return{restrict:"A",scope:{paymentProfile:"=",onMakePreferredClicked:"&",onDeleteClicked:"&",onEditClicked:"&"},templateUrl:"pay-with/vn-credit-card-display-action.html",link:function(b){if(!b.paymentProfile.card.ccCssClass&&b.paymentProfile.card.cardTypeName){var c=a(b.paymentProfile.card.cardTypeName);b.paymentProfile.card.ccCssClass=c["class"],b.paymentProfile.card.cardType=c.type}}}}]),angular.module("Volusion.toolboxCommon").directive("vnCreditCardDisplay",["$rootScope","vnCreditCardClass",function(a,b){return{replace:!0,restrict:"EA",scope:{card:"=",state:"=?",onSave:"&",onDirty:"&",onClick:"&",readonly:"@",showArrow:"@"},templateUrl:"pay-with/vn-credit-card-display.html",link:function(c){function d(){for(var a in c.frmCVV)c.frmCVV.hasOwnProperty(a)&&a.indexOf("$")<0&&(c.frmCVV[a].$setDirty(),c.frmCVV[a].$setTouched())}if(c.state=c.state||"NOCVV",c.readonlyVal="true"===c.readonly?!0:!1,c.showArrowVal="false"===c.showArrow?!1:!0,c.card.expMonth=c.card.expMonth||c.card.ExpireMonth,c.card.expYear=c.card.expYear||c.card.ExpireYear,c.card.cardTypeName=c.card.cardTypeName||c.card.CardTypeName,!c.card.ccCssClass&&c.card.cardTypeName){var e=b(c.card.cardTypeName);c.card.ccCssClass=e["class"],c.card.cardType=e.type}c.validateCVV=function(){c.frmCVV.$valid?(c.frmCVV.$setPristine(),c.onSave()):(d(),c.onDirty())},c.$watch("frmCVV.$dirty",function(a){a&&angular.isFunction(c.onDirty)&&c.onDirty()});var f=a.$on("vnPayment.validate",function(){c.validateCVV(),a.$emit("vnPayment.validate.continue")});c.$on("$destroy",function(){f()})}}}]),angular.module("Volusion.toolboxCommon").directive("vnCreditCardEditor",["$rootScope","vnCreditCardClass","lodash",function(a,b,c){return{restrict:"EA",scope:{card:"=",title:"@",onSave:"&",onDirty:"&",showSaveButton:"@",saveText:"@",showCancelButton:"@",cancelText:"@",onCancel:"&"},templateUrl:"pay-with/vn-credit-card-editor.html",link:function(d){function e(){d.card&&d.card.cardTypeName&&"American Express"===d.card.cardTypeName&&(d.cvvLength=4)}function f(){if(void 0!==d.card.cardNumber&&-1!==d.card.cardNumber.indexOf("*")){var a=b(d.card.cardTypeName);return d.card.ccCssClass=a["class"],void(d.card.cardType=a.type)}if(void 0===d.card.cardNumber||""===d.card.cardNumber)return void(d.card.ccCssClass="th-credit-card__img--notvalid");d.card.cardTypeName="",/^(34)|^(37)/.test(d.card.cardNumber)&&(d.card.cardTypeName="American Express"),/^4/.test(d.card.cardNumber)&&(d.card.cardTypeName="Visa"),/^5[1-5]/.test(d.card.cardNumber)&&(d.card.cardTypeName="MasterCard"),/^(6011)|^(622(1(2[6-9]|[3-9][0-9])|[2-8][0-9]{2}|9([01][0-9]|2[0-5])))|^(64[4-9])|^65/.test(d.card.cardNumber)&&(d.card.cardTypeName="Discover");var c=b(d.card.cardTypeName);d.card.ccCssClass=c["class"],d.card.cardType=c.type,d.creditCardSupported=-1!==d.card.CardType&&""!==d.card.CardType?"valid":void 0}function g(){for(var a in d.frmCreditCard)d.frmCreditCard.hasOwnProperty(a)&&a.indexOf("$")<0&&(d.frmCreditCard[a].$setDirty(),d.frmCreditCard[a].$setTouched())}function h(){if(d.card.expMonth&&d.card.expYear){var a=new Date;d.expDateInvalid="valid",parseInt("20"+d.card.expYear)===a.getFullYear()&&parseInt(d.card.expMonth)<a.getMonth()+1&&(d.expDateInvalid=void 0,d.frmCreditCard.inputCreditCardExpMonth.$setValidity("expmonth",!1),d.frmCreditCard.inputCreditCardExpYear.$setValidity("expyear",!1))}}d.saveText=d.saveText||"Continue",d.cancelText=d.cancelText||"Cancel",d.showSaveButtonValue="false"===d.showSaveButton?!1:!0,d.showCancelButtonValue="true"===d.showCancelButton?!0:!1,d.cvvLength=3,e(),d.expDateInvalid="valid",d.creditCardSupported="valid",d.saveText=d.saveText||"Add Credit Card",d.months=[{num:"01",label:"01 - January"},{num:"02",label:"02 - February"},{num:"03",label:"03 - March"},{num:"04",label:"04 - April"},{num:"05",label:"05 - May"},{num:"06",label:"06 - June"},{num:"07",label:"07 - July"},{num:"08",label:"08 - August"},{num:"09",label:"09 - September"},{num:"10",label:"10 - October"},{num:"11",label:"11 - November"},{num:"12",label:"12 - December"}],d.rangeYears=function(){var a,b=[],c=(new Date).getFullYear();for(a=c;c+15>=a;a++)b.push(a);return b},d.onExpMonthChanged=function(a,b){d.card.expMonth=a.num;var c=angular.element("#"+b);c.focus(),c.triggerHandler("change"),h()},d.onExpYearChanged=function(a,b){d.card.expYear=a.toString().substring(2);var c=angular.element("#"+b);c.focus(),c.triggerHandler("change"),h()},d.setCCImage=function(a){void 0===a?d.card.ccCssClass="AMEX"===d.card.cardTypeName?"th-credit-card__img--amex-flipped":"th-credit-card__img--flipped":f()},d.displayLast4=function(){return d.card.cardNumber.slice(-4)},d.displayExpDate=function(){var a="";return a=""===d.card.expMonth?"":d.card.expMonth,a+=""===d.card.expYear?"":"/"+d.card.expYear},d.saveCard=function(){var a;return d.cvvLength=3,e(),d.expDateInvalid=void 0,-1===d.card.cardNumber.indexOf("*")&&(a=d.card.cardNumber.replace(/[^\d]+/g,""),d.frmCreditCard.inputCreditCardNumber.$setValidity("creditcard",!d.frmCreditCard.inputCreditCardNumber.$invalid&&void 0!==d.creditCardSupported)),d.card.CVV&&-1===d.card.CVV.indexOf("*")&&(a=d.card.CVV.replace(/[^\d]+/g,""),d.frmCreditCard.inputCreditCardCVV.$setValidity("cvv",a.toString().length===d.cvvLength)),d.card.expMonth?d.frmCreditCard.inputCreditCardExpMonth.$setValidity("expmonth",!0):d.frmCreditCard.inputCreditCardExpMonth.$setValidity("expmonth",!1),d.card.expYear?d.frmCreditCard.inputCreditCardExpYear.$setValidity("expyear",!0):d.frmCreditCard.inputCreditCardExpYear.$setValidity("expyear",!1),h(),d.frmCreditCard.$valid?(d.frmCreditCard.preferred=!0,d.frmCreditCard.$setPristine(),d.onSave(),!0):(g(),!1)},d.frmCreditCard.$setPristine();var i=d.$watch("frmCreditCard.$dirty",function(a){a&&(c.isFunction(d.onDirty)&&d.onDirty(),i())});d.$watch("card.cardNumber",function(){f()});var j=a.$on("vnPayment.validate",function(){d.saveCard()&&a.$emit("vnPayment.validate.continue")});d.$on("$destroy",function(){j()})}}}]),angular.module("Volusion.toolboxCommon").directive("vnCreditCardPicker",["vnCreditCardClass",function(a){return{replace:!0,restrict:"EA",scope:{cardList:"=",state:"=",openCreditCards:"@",onSelect:"&",enterCard:"&",closePicker:"&",choosePicker:"&",setPaymentProfile:"&",selectedIndex:"=",card:"=",onSaveCard:"&",onDirtyCard:"&"},templateUrl:"pay-with/vn-credit-card-picker.html",link:function(b){b.addCard=function(){b.card={cardNumber:"",expMonth:"",expYear:""},b.state="ENTER"},b.goBackFromEnter=function(){b.state="PICK"},b.setIndex=function(a){b.selectedIndex=a},b.getCssClass=function(b){return a(b.card.cardTypeName.toUpperCase())["class"]}}}}]),angular.module("Volusion.toolboxCommon").factory("vnCreditCardUtilities",["lodash",function(a){return{maskCardValue:function(a){var b=new RegExp("[\\s-]","g"),c=a.replace(b,""),d=new RegExp("^(\\d+?)\\d{4}$"),e=c.match(d),f=c,g="*",h="";if(null!==e){for(var i=1;i<e.length;i++){h="";for(var j=0;j<e[i].length;j++)h+=g;f=f.replace(e[i],h)}for(var k=f.length-1;k>=0;k--)f.charAt(k)===g;return f}return null},newCard:function(){return{cardNumber:"",expMonth:"",expYear:""}},setPreferredPaymentProfile:function(b,c){a.forEach(b,function(a,b){a.preferred=c===b})},getPreferredPaymentProfile:function(b){return a.find(b,function(a){return a.preferred})||b[0]},removePaymentProfileFromList:function(b,c){return a.reject(b,function(a){return a.id===c.id})}}}]),angular.module("Volusion.toolboxCommon").directive("vnPlaceholder",["$timeout","$interpolate",function(a,b){"use strict";return{restrict:"A",require:"ngModel",compile:function(c,d){return c.parent().append('<label class="vn-placeholder" ng-click="setFocusFor(\''+d.id+"')\" dropdown-toggle></label>"),function(c,e){function f(a,b){return a.$$phase||a.$root.$$phase?b():a.$apply(b)}function g(a){f(c,function(){void 0===a&&""===h.val()?(i.removeClass("-selected -focus"),i.html()!==b(d.vnPlaceholder)(c)&&i.html(b(d.vnPlaceholder)(c))):(i.hasClass("-selected")||i.addClass("-selected"),void 0===a||"focus"!==a.type||i.hasClass("-focus")||i.addClass("-focus"),d.vnPlaceholderShort&&d.vnPlaceholderShort.length>0&&i.html(b(d.vnPlaceholderShort)(c)))})}var h=e,i=h.closest("div").find("label.vn-placeholder");c.setFocusFor=function(a){angular.element(document.querySelector("#"+a)).focus()},f(c,function(){a(function(){i.html(b(d.vnPlaceholder)(c))},0)}),c.$watch(d.ngModel,function(){g()}),h.on("focus keyup change",function(a){g(a)}).on("blur",function(){i.removeClass("-focus"),""===h.val()&&(i.removeClass("-selected"),i.html()!==b(d.vnPlaceholder)(c)&&i.html(b(d.vnPlaceholder)(c)))})}}}}]),angular.module("Volusion.toolboxCommon").directive("vnPopoverFirstName",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="bottom",b.title="First name must:";var d=[{ngclass:"firstNameMinValidLength",ngif:"",msg:"Be at least <strong>1 letter long</strong>"},{ngclass:"firstNameAllowedChars",ngif:"firstNameDisallowedChars != null",msg:'Not contain <strong>{{ firstNameDisallowedChars.join("") }}</strong>'}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverLastName",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="bottom-right",b.title="Last name must:";var d=[{ngclass:"lastNameMinValidLength",ngif:"",msg:"Be at least <strong>1 letter long</strong>"},{ngclass:"lastNameAllowedChars",ngif:"lastNameDisallowedChars != null",msg:'Not contain <strong>{{ lastNameDisallowedChars.join("") }}</strong>'}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverAddress",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="bottom",b.title="Address must:";var d=[{ngclass:"streetEmpty",ngif:"",msg:"Not be <strong>empty</strong>"},{ngclass:"streetAllowedChars",ngif:"streetDisallowedChars != null",msg:'Not contain <strong>{{ streetDisallowedChars.join("") }}</strong>'}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverCity",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="top-left",b.title="City must:";var d=[{ngclass:"cityEmpty",ngif:"",msg:"Not be <strong>empty</strong>"},{ngclass:"cityAllowedChars",ngif:"cityDisallowedChars != null",msg:'Not contain <strong>{{ cityDisallowedChars.join("") }}</strong>'}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverRegion",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="top-left",b.title="Region must:";var d=[{ngclass:"regionRequired",ngif:"",msg:"Not be <strong>empty</strong>"},{ngclass:"regionAllowedChars",ngif:"regionDisallowedChars != null",msg:'Not contain <strong>{{ regionDisallowedChars.join("") }}</strong>'}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverState",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="top-left -dropdown",b.title="State must:";var d=[{ngclass:"stateEmpty",ngif:"",msg:"Be <strong>selected</strong>"}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverZip",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="top",b.title="Zip code must:";var d=[{ngclass:"zipHasValidFormat",ngif:"",msg:"Be formatted as 99999[-9999]"}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverPostalCode",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="top",b.title="Postal code must:";var d=[{ngclass:"postalCodeEmpty",ngif:"",msg:"Not be empty"},{ngclass:"postalCodeAllowedChars",ngif:"postalCodeDisallowedChars != null",msg:'Not contain <strong>{{ postalCodeDisallowedChars.join("") }}</strong>'}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverUsPhone",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="top",b.title="Phone number must:";var d=[{ngclass:"usPhoneHasValidFormat",ngif:"",msg:"Be formatted as (999) 999-9999 ext.9999"}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]).directive("vnPopoverRequired",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c,d){b.location=d.location||"bottom",b.title=(d.field||"Field")+" must:";var e=[{ngclass:"requiredFieldFilled",ngif:"",msg:"Not be <strong>empty</strong>"}],f=angular.element("<ul>");angular.forEach(e,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),f.append(b)}),a(f)(b),c.append(f)}}}]).directive("vnPopoverCreditCard",["$compile",function(a){"use strict";return{restrict:"E",scope:!0,templateUrl:"popover/vn-popover.tpl.html",replace:!0,link:function(b,c){b.location="top",b.title="Credit card must:";var d=[{ngclass:"creditCardValid",ngif:"",msg:"Be a valid credit card number"}],e=angular.element("<ul>");angular.forEach(d,function(a){var b=angular.element("<li>");a.ngif&&""!==a.ngif&&b.attr("ng-if",a.ngif),b.attr("ng-class",a.ngclass),b.html(a.msg),e.append(b)}),a(e)(b),c.append(e)}}}]),angular.module("Volusion.toolboxCommon").directive("vnProductImage",["$filter",function(a){"use strict";return{templateUrl:"product-image/vn-product-image.tpl.html",restrict:"AE",scope:{product:"=",defaultImage:"="},replace:!0,link:function(b){b.getImagePath=function(c){var d=a("vnProductImageFilter")(c);return""===d?b.defaultImage:d}}}}]),angular.module("Volusion.toolboxCommon").directive("vnSearchForm",["vnSearchManager",function(a){return{templateUrl:"product-search/vnSearchForm.tpl.html",restrict:"AE",replace:!0,scope:{searchTerm:"=",showSearch:"="},link:function(b,c,d){c.bind("click",function(){c.find("input").focus()}),b.searchTerm=b.searchTerm||a.getSearchText(),b.allowCollapse=d.allowCollapse&&!!JSON.parse(d.allowCollapse),b.doSearch=function(){a.updateSearch(b.searchTerm),b.showSearch=!1,b.showSearch&&(b.showSearch=!1)},b.$watch(function(){return a.getSearchText()},function(a){b.searchTerm=a||""},!0)}}}]),angular.module("Volusion.toolboxCommon").factory("vnSearchManager",["$route","$location","vnProductParams",function(a,b,c){function d(){return c.getSearchText()}function e(d){c.updateSearch(d),b.search("q",d),"/search"!==b.path()&&b.path("/search"),a.reload()}return{getSearchText:d,updateSearch:e}}]),angular.module("Volusion.toolboxCommon").controller("ReviewDetailsCtrl",["$rootScope","$scope","$filter","vnCheckout","vnCreditCardClass","lodash",function(a,b,c,d,e,f){"use strict";var g=d.get();b.orderId=g.orderId,b.userEmail=g.user.email,b.isShippingLocationUS="United States"===g.cart.shippingAddress.country,b.shippingAddress=g.cart.shippingAddress,b.shippingMethod=f.find(g.cart.shippingMethods,function(a){return a.selected===!0}),b.isBillingLocationUS="United States"===g.cart.billingAddress.country,b.billingAddress=g.cart.billingAddress,b.payment=g.cart.paymentProfile,b.payment.total=g.cart.totals,b.payment.ccCssClass=e(b.payment.CardTypeName)["class"],b.$watch("checkout.cart.shippingMethods",function(){b.shippingMethod=f.find(g.cart.shippingMethods,function(a){return a.selected===!0})})}]),angular.module("Volusion.toolboxCommon").directive("vnReviewDetails",[function(){return{restrict:"A",replace:!0,templateUrl:"review/vn-review-details.html",scope:{shippingAddress:"=",shippingMethod:"=",payment:"=",billingAddress:"="}}}]),angular.module("Volusion.toolboxCommon").directive("vnReview",[function(){return{restrict:"A",replace:!0,templateUrl:"review/vn-review.html",scope:{cart:"=vnReview"}}}]),angular.module("Volusion.toolboxCommon").config(["$locationProvider","$httpProvider","$stateProvider","$urlRouterProvider",function(a,b,c,d){"use strict";d.otherwise("/"),c.state("root",{"abstract":!0,url:"",template:"<div ui-view></div>",resolve:{loginFromCookie:["vnAuthService",function(a){return a.loginFromCookie()}]}}).state("home",{parent:"root",url:"/",templateUrl:"views/home.html",controller:"HomeCtrl",resolve:{translations:["translate",function(a){a.addParts("home"),a.addParts("product")}]}}).state("login",{parent:"root",url:"/login",templateUrl:"login/login.html",controller:"LoginCtrl",resolve:{emptyCart:["vnAppRoute",function(a){return a.checkEmptyCart(this.url.source)}]}}).state("logout",{parent:"root",url:"/logout",template:"",controller:"LogoutCtrl"}).state("forgot-password",{parent:"root",url:"/forgot-password",templateUrl:"login/forgot-password.html",controller:"ForgotPasswordCtrl"}).state("my-account-login",{parent:"root",url:"/my-account-login",templateUrl:"login/my-account-login.html",resolve:{checkLoggedIn:["loginFromCookie","vnAppRoute",function(a,b){return b.isLoggedIn("my-account")}]}}).state("my-account",{parent:"root",url:"/my-account",templateUrl:"my-account/my-account.html",controller:"MyAccountCtrl",resolve:{loggedIn:["vnUser",function(a){return a.isLoggedIn()}]},ncyBreadcrumb:{label:"My Account"}}).state("my-account.change-email",{url:"/change-email",templateUrl:"my-account/change-email.html",controller:"ChangeEmailCtrl",ncyBreadcrumb:{label:"Change Email"}}).state("my-account.change-password",{url:"/change-password",templateUrl:"my-account/change-password.html",controller:"ChangePasswordCtrl",ncyBreadcrumb:{label:"Change Password"}}).state("my-account.billingaddresses",{url:"/billing-addresses",templateUrl:"my-account/billing-addresses.html",controller:"BillingAddressesCtrl",controllerAs:"vm",ncyBreadcrumb:{label:"Billing Address"}}).state("my-account.shippingaddresses",{url:"/shipping-addresses",templateUrl:"my-account/shipping-addresses.html",controller:"ShippingAddressesCtrl",controllerAs:"vm",ncyBreadcrumb:{label:"Shipping Address"}}).state("my-account.paymentprofiles",{url:"/payment-profiles",templateUrl:"my-account/payment-profiles.html",controller:"PaymentProfilesCtrl",controllerAs:"vm",ncyBreadcrumb:{label:"Payment Profiles"}}).state("my-account.orders",{url:"/orders","abstract":!0,templateUrl:"my-account/orders.html"}).state("my-account.orders.list",{url:"/list",templateUrl:"my-account/orders.list.html",controller:"ListOrdersCtrl",controllerAs:"vm",ncyBreadcrumb:{label:"Orders",parent:"my-account"}}).state("my-account.orders.detail",{url:"/:id",templateUrl:"my-account/orders.detail.html",controller:"OrdersDetailCtrl",controllerAs:"vm",ncyBreadcrumb:{label:"Order Details",parent:"my-account.orders.list"}}).state("checkout",{parent:"root",url:"/checkout",templateUrl:"checkout/checkout.html",controller:"CheckoutCtrl",resolve:{emptyCart:["vnAppRoute","loginFromCookie",function(a,b){return a.checkEmptyCart(this.url.source)}],loggedInOrAnon:["vnAppRoute","loginFromCookie",function(a,b){return a.isLoggedInOrAnon()}]}}).state("thank-you",{parent:"root",url:"/thank-you",templateUrl:"thank-you/thank-you.html",controller:"ThankYouCtrl"}).state("product",{parent:"root",url:"/p/:slug",templateUrl:"views/product.html",controller:"ProductCtrl",resolve:{translations:["translate",function(a){return a.addParts("product")}]}}).state("category",{parent:"root",url:"/c/:slug",templateUrl:"views/category.html",controller:"CategoryCtrl",resolve:{params:["vnAppRoute","$location",function(a,b){return a.resolveParams(b.search())}]}}).state("search",{parent:"root",url:"/search",templateUrl:"views/search.html",controller:"SearchCtrl",reloadOnSearch:!1,resolve:{params:["vnAppRoute","$location",function(a,b){return a.resolveParams(b.search())}],translations:["translate",function(a){a.addParts("product")}]}}).state("allProducts",{parent:"root",url:"/all-products",templateUrl:"views/search.html",controller:"SearchCtrl",reloadOnSearch:!1,resolve:{params:["vnAppRoute","$location",function(a,b){return a.resolveParams(b.search())}],translations:["translate",function(a){a.addParts("product")}]}}).state("themeSettings",{parent:"root",url:"/theme-settings",templateUrl:"views/theme-settings.html",controller:"ThemeSettingsCtrl"}).state("article",{parent:"root",url:"/:slug",templateUrl:"views/article.html",controller:"PageCtrl",resolve:{article:["vnApi","$route",function(a,b){return a.Article().get({slug:b.current.params.slug}).$promise}]}})}]),angular.module("Volusion.toolboxCommon").directive("vnScrollToAnchor",["$location","$anchorScroll",function(a,b){return{restrict:"AC",compile:function(){return function(c,d,e){d.bind("click",function(c){c.preventDefault(),a.hash(e.vnScrollToAnchor),b()})}}}}]),angular.module("Volusion.toolboxCommon").factory("notifications",["$filter","vnAppMessageService",function(a,b){"use strict";function c(a,c){b.addMessage({type:a,text:c})}function d(){c("success",a("translate")("message.CART_ADD_SUCCESS"))}function e(){c("success",a("translate")("message.CART_UPDATE_SUCCESS"))}function f(b){if(b&&b.length>0){var d,e,f=a("translate");angular.forEach(b,function(a){e="message."+a.Code,d=f(e),d=d&&d!==e?d:a.Message,c("warning",d)})}}function g(b){if(b&&b.length>0){var d,e,f=a("translate");angular.forEach(b,function(a){e="message."+a.Code,d=f(e),d=d&&d!==e?d:a.Message,d=d||f("message.CART_UNKNOWN"),c("danger",d)})}}return{displaySuccessfulAddition:d,displaySuccessfulUpdate:e,displayWarnings:f,displayErrors:g}}]),angular.module("Volusion.toolboxCommon").factory("vnAppRoute",["$q","$rootScope","$route","$location","$routeParams","vnProductParams","vnSortDefault","vnCart","vnUser","$state",function(a,b,c,d,e,f,g,h,i,j){function k(a){a&&(l(),m(),o(),n(),p(),r(),q())}function l(){"search"===t()&&""!==f.getCategoryString()?d.search("categoryId",f.getCategoryString()):d.search("categoryId",null)}function m(){""!==f.getFacetString()?d.search("facetIds",f.getFacetString()):d.search("facetIds",null)}function n(){""!==f.getMaxPrice()?d.search("maxPrice",f.getMaxPrice()):d.search("maxPrice",null)}function o(){""!==f.getMinPrice()?d.search("minPrice",f.getMinPrice()):d.search("minPrice",null)}function p(){""!==f.getPage()&&"1"!==f.getPage()?d.search("page",f.getPage()):d.search("page",null)}function q(){"/search"===d.path()&&("/search"===d.path()&&""===f.getSearchText()?d.search("q",""):d.search("q",f.getSearchText()))}function r(){""!==f.getSort()&&g!==f.getSort()?d.search("sort",f.getSort()):d.search("sort",null)}function s(a){y=a}function t(){return y}function u(b){var c=a.defer();return f.preLoadData(b),c.resolve(!0),c.promise}function v(c){var d=a.defer(),e=function(){0===h.getCart().items.length?(d.reject(),j.go("home")):"/login"===c?d.resolve():"/checkout"===c&&""===i.getUser().email?(d.reject(),j.go("login")):d.resolve()};if(0===Object.keys(h.getCart()).length)var f=b.$on("cartUpdated",function(){e(),f()});else e();return d.promise}function w(){return i.isLoggedInOrAnon()["catch"](function(){j.go("login")})}function x(a){var b=i.getUser();return b.email&&j.go(a?a:"home"),!0}var y="";return b.$watch(function(){return f.getParamsObject()},function(){k(f.getParamsObject())},!0),{getRouteStrategy:t,setRouteStrategy:s,resolveParams:u,checkEmptyCart:v,isLoggedInOrAnon:w,isLoggedIn:x}}]),angular.module("Volusion.toolboxCommon").factory("vnBem",function(){function a(a,c){var d=[a];return angular.forEach(b(c),function(b){d.push(a+"--"+b)}),d}function b(a){return a=a&&a.replace(/^\s+|\s+$/g,""),a?a.split(/\s+/):[]}return{addClasses:function(b,c){c=c||{};var d=c.block;if(d){var e=a(d,c.blockModifiers),f=c.element;if(!f)return void angular.forEach(e,function(a){b.addClass(a)});var g=a("__"+f,c.elementModifiers);angular.forEach(e,function(a){angular.forEach(g,function(c){b.addClass(a+c)})})}}}}),angular.module("Volusion.toolboxCommon").service("vnCart",["$rootScope","vnApi",function(a,b){"use strict";function c(){return n}function d(){return void 0===n||void 0===n.totals?0:n.totals.qty}function e(){return b.Cart({cartId:""}).get().$promise}function f(){b.Cart({cartId:""}).get().$promise.then(function(b){n=b.data,a.$emit("cartUpdated")})}function g(a){n=a}function h(){ +n={}}function i(c){return b.Cart().save({cartId:n.id},c).$promise.then(function(b){angular.copy(b.data,n),n.serviceErrors=[],n.warnings=b.warnings||b.data.warnings||[],a.$emit("cartUpdated")})["catch"](function(b){angular.copy(b.data.data,n),n.serviceErrors=b.serviceErrors||b.data.serviceErrors||[],n.warnings=b.warnings||b.data.warnings||[],a.$emit("cartUpdated")})}function j(b){angular.copy(b,n.shippingAddress),a.$emit("vnShippingAddress.updated",b)}function k(b){angular.copy(b,n.billingAddress),a.$emit("vnBillingAddress.updated",b)}function l(a){angular.copy(a,n.paymentProfile)}function m(){return b.Cart().update({cartId:n.id},n).$promise.then(function(b){angular.copy(b.data,n),n.serviceErrors=[],n.warnings=b.warnings||b.data.warnings||[],a.$emit("cartUpdated")})["catch"](function(b){angular.copy(b.data.data,n),n.serviceErrors=b.serviceErrors||b.data.serviceErrors||[],n.warnings=b.warnings||b.data.warnings||[],a.$emit("cartUpdated")})}var n={};return{getCart:c,getCartItemsCount:d,init:f,initWithPromise:e,reset:h,set:g,saveCart:i,setCCPaymentProfile:l,setBillingAddress:k,setShippingAddress:j,updateCart:m}}]),angular.module("Volusion.toolboxCommon").factory("vnCheckout",["$rootScope","$location","$q","vnSiteConfig","vnCart","vnUser","vnApi","vnNotifications",function(a,b,c,d,e,f,g,h){"use strict";function i(){return g.Country().query().$promise}function j(){C.location.label="ww"===C.location.label?"us":"ww",C.location.image="us"===C.location.label?A:B}function k(a){C.billToValid=a}function l(a){C.shipToValid=a}function m(a){C.shipMethodValid=a}function n(a){C.creditCardValid=a}function o(b){angular.forEach(C.steps,function(a){a.active=!1}),void 0!==b&&(C.currentStep=b),C.steps[C.currentStep-1].active=!0,a.$emit("checkout.stepChanged")}function p(a,b){C.steps[a].hasOpenDrawer=b}function q(){return C}function r(){C.steps.length>C.currentStep&&(C.currentStep++,o())}function s(){C.user=f.getUser(),C.cart.customer.id=C.user.id}function t(){C.cart.misc.isGift=!1,C.user.anonymous&&(C.cart.customer.id=C.user.id),g.Orders().save({},C.cart).$promise.then(function(c){a.$emit("checkout.orderPlaced"),C.orderId=c.data.id,o(1),b.path("/thank-you")})["catch"](function(b){a.$emit("checkout.orderPlaced"),console.log(b),h.displayErrors(b)})}function u(){1<C.currentStep&&(C.currentStep--,o())}function v(a){e.setCCPaymentProfile(a)}function w(a){e.setBillingAddress(a)}function x(b){e.setShippingAddress(b),a.$emit("checkout.shippingaddress.changed")}function y(){e.updateCart()}function z(){var a=c.defer();return e.initWithPromise().then(function(a){e.set(a.data),C.cart=e.getCart()}).then(function(){a.resolve(C)})["catch"](function(b){a.reject(b)}),a}var A="images/us-flag.png",B="images/worldwide-flag.png",C={config:{PCIaaS:{}},location:{label:"us",image:A},cart:{},orderId:-1,currentStep:1,steps:[{active:!0,hasOpenDrawer:!1},{active:!1,hasOpenDrawer:!1},{active:!1,hasOpenDrawer:!1}],shipToValid:!1,shipMethodValid:!1,billToValid:!1,creditCardValid:!1};return d.getConfig().then(function(b){C.config=b.data.checkout,C.config.PCIaaS=b.data.PCIaaS,a.$emit("PCIaaS.updated")}),{get:q,getCountries:i,initCart:z,nextStep:r,placeOrder:t,prevStep:u,setStep:o,setCreditCardValidity:n,setBillingAddress:w,setBillToValidity:k,setCCPaymentProfile:v,setShippingAddress:x,setShipToValidity:l,setShipMethodValidity:m,setUser:s,setHasOpenDrawer:p,toggleLocation:j,updateCart:y}}]),angular.module("Volusion.toolboxCommon").factory("vnContentManager",function(){"use strict";function a(){return k}function b(){return l}function c(){return m}function d(){return n}function e(){k=!1}function f(){l=!1}function g(){k=!0,m=!1}function h(){l=!0,n=!1}function i(){k=!1,m=!0}function j(){l=!1,n=!0}var k=!0,l=!0,m=!1,n=!1;return{getFooterState:a,getHeaderState:b,getCheckoutFooterState:c,getCheckoutHeaderState:d,hideAppFooter:e,hideAppHeader:f,showAppFooter:g,showAppHeader:h,showCheckoutAppFooter:i,showCheckoutAppHeader:j}}),angular.module("Volusion.toolboxCommon").service("vnCreditCardClass",function(){return function(a){switch(angular.isString(a)?a.toUpperCase():a){case"AMEX":case"AMERICAN EXPRESS":case"7":case 7:return{type:7,"class":"th-credit-card__img--amex",name:"American Express"};case"VISA":case"5":case 5:return{type:5,"class":"th-credit-card__img--visa",name:"Visa"};case"MC":case"MASTERCARD":case"6":case 6:return{type:6,"class":"th-credit-card__img--mastercard",name:"MasterCard"};case"DISC":case"DISCOVER":case"8":case 8:return{type:8,"class":"th-credit-card__img--discover",name:"Discover"};default:return{type:0,"class":"th-credit-card__img--unknown",name:"Unknown"}}}}),angular.module("Volusion.toolboxCommon").factory("vnGeo",["$resource",function(a){"use strict";function b(){return a("https://freegeoip.net/json",{},{query:{method:"GET",isArray:!1}})}return{locate:b}}]),angular.module("Volusion.toolboxCommon").factory("vnHttpResponseInterceptor",["$q","$rootScope",function(a,b){return{response:function(b){return b||a.when(b)},responseError:function(c){return 401===c.status&&b.$emit("VN_UNAUTHORIZED_ERROR",{err:c},{status:c.status,message:c.data,resource:c.headers("resource")||""}),500===c.status&&b.$emit("VN_HTTP_500_ERROR",{err:c},{status:c.status,message:c.data,resource:c.headers("resource")||""}),a.reject(c)}}}]),angular.module("Volusion.toolboxCommon").factory("vnNotifications",["$filter","vnAppMessageService",function(a,b){"use strict";function c(a,c){b.addMessage({type:a,text:c})}function d(b){var d,e,f=a("translate");b&&b.length>0&&angular.forEach(b,function(a){e="message."+a.Code,d=f(e),d=d&&d!==e?d:a.Message,c("warning",d)})}function e(b){var d,e,f=a("translate");b&&b.length>0&&angular.forEach(b,function(a){e="message."+a.Code,d=f(e),d=d&&d!==e?d:a.Message,d=d||a,c("danger",d)})}return{displayWarnings:d,displayErrors:e,displayMsg:c}}]),angular.module("Volusion.toolboxCommon").factory("vnPayment",["$rootScope","$resource","$timeout","$q","$filter","vnCheckout","vnPCIaaS",function(a,b,c,d,e,f,g){"use strict";function h(){return A}function i(a){A.cardNumber=a.cardNumber,A.ExpireMonth=a.expMonth,A.ExpireYear=a.expYear,A.CardType=a.cardType,A.CardTypeName=a.cardTypeName,A.CardID=a.pCIaaSId}function j(a){A.CardID=a}function k(a){A.PersistCard=a}function l(a){A.CardHolderName=a}function m(a){A.cardNumber=a}function n(a){A.ExpireMonth=a}function o(a){A.ExpireYear=a}function p(a){A.CVV=a}function q(a){A.CardTypeName=a,A.CardType=e("filter")(x.config.creditCardsAccepted,function(b){return b.name.toLowerCase()===a.toLowerCase()?b.id:void 0})[0],A.CardType=void 0!==A.CardType?A.CardType.id:-1}function r(){angular.copy({cardNumber:"",mask:{},MerchantId:"",CardID:"",PersistCard:"",CardHolderName:"",ExpireMonth:"",ExpireYear:"",CVV:"",CardType:"",CardTypeName:""},A)}function s(a){return Object.getOwnPropertyNames(a).length>0?!1:!0}function t(){A.CVV=A.CVV.replace(/./g,y.maskCharacter),A.cardNumber=A.mask.display,A.mask.sent=""}function u(a){if(a&&!s(A.mask))return A.mask;var b=A.cardNumber,c=new RegExp(y.maskPattern),d=b.match(c),e=b,f=[],g=y.maskCharacter,h="";if(null!==d){for(var i=1;i<d.length;i++){h="";for(var j=0;j<d[i].length;j++)h+=g;e=e.replace(d[i],h)}for(var k=e.length-1;k>=0;k--)f.unshift(e.charAt(k)===g?b.charAt(k):g);return A.mask={display:e,sent:f.join("")},A.mask}return{display:b,sent:b}}function v(){var a={};switch(a.NumberPart=-1===A.cardNumber.indexOf(y.maskCharacter)?u(!1).sent:A.cardNumber,a.CVV=A.CVV,A.CardTypeName.toUpperCase()){case"AMERICAN EXPRESS":a.CardType="AMEX";break;case"VISA":a.CardType="VISA";break;case"MASTERCARD":a.CardType="MC";break;case"DISCOVER":a.CardType="DISC"}return JSON.stringify(a)}function w(){var a=d.defer(),b=v();return A.MerchantId=x.config.PCIaaS.merchantId,""!==A.CardID?g.Card(z.update.uri(A.CardID),A.MerchantId).update(b).$promise.then(function(b){t(),a.resolve(A)})["catch"](function(b){console.log(b),a.reject(b)}):g.Card(z.save.uri(),A.MerchantId).save(b).$promise.then(function(b){console.log(b);for(var c=0,d="";b[c];)d+=b[c],c++;A.CardID=d,t(),a.resolve(A)})["catch"](function(b){console.log(b),a.reject(b)}),a.promise}var x=f.get(),y={maskPattern:"^(\\d+?)\\d{4}$",maskCharacter:"*"},z={base:{uri:function(){return x.config.PCIaaS.url+"/cards/"}},save:{uri:function(){return z.base.uri()},method:"POST"},update:{uri:function(a){return z.base.uri()+a.toString()},method:"PUT"}},A={cardNumber:"",mask:{},MerchantId:"",CardID:"",PersistCard:"",CardHolderName:"",ExpireMonth:"",ExpireYear:"",CVV:"",CardType:"",CardTypeName:""};return{getCard:h,process:w,reset:r,setCardFrom:i,setCardId:j,setPersistCard:k,setCardHolderName:l,setCardNumber:m,setCvv:p,setExpireMonth:n,setExpireYear:o,setCardType:q}}]),angular.module("Volusion.toolboxCommon").factory("vnPciaasIframe",function(){var PCIaaS=null;return window.JSON||(window.JSON={},function(){function k(a){return 10>a?"0"+a:a}function o(a){return p.lastIndex=0,p.test(a)?'"'+a.replace(p,function(a){var b=r[a];return"string"==typeof b?b:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function l(a,b){var c,d,f,g,h,j=e,k=b[a];switch(k&&"object"==typeof k&&"function"==typeof k.toJSON&&(k=k.toJSON(a)),"function"==typeof i&&(k=i.call(b,a,k)),typeof k){case"string":return o(k);case"number":return isFinite(k)?String(k):"null";case"boolean":case"null":return String(k);case"object":if(!k)return"null";if(e+=n,h=[],"[object Array]"===Object.prototype.toString.apply(k)){for(g=k.length,c=0;g>c;c+=1)h[c]=l(c,k)||"null";return f=0===h.length?"[]":e?"[\n"+e+h.join(",\n"+e)+"\n"+j+"]":"["+h.join(",")+"]",e=j,f}if(i&&"object"==typeof i)for(g=i.length,c=0;g>c;c+=1)"string"==typeof i[c]&&(d=i[c],(f=l(d,k))&&h.push(o(d)+(e?": ":":")+f));else for(d in k)Object.prototype.hasOwnProperty.call(k,d)&&(f=l(d,k))&&h.push(o(d)+(e?": ":":")+f);return f=0===h.length?"{}":e?"{\n"+e+h.join(",\n"+e)+"\n"+j+"}":"{"+h.join(",")+"}",e=j,f}}"function"!=typeof Date.prototype.toJSON&&(Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+k(this.getUTCMonth()+1)+"-"+k(this.getUTCDate())+"T"+k(this.getUTCHours())+":"+k(this.getUTCMinutes())+":"+k(this.getUTCSeconds())+"Z":null},String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()});var q=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,p=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,e,n,r={"\b":"\\b"," ":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},i;"function"!=typeof JSON.stringify&&(JSON.stringify=function(a,b,c){var d;if(n=e="","number"==typeof c)for(d=0;c>d;d+=1)n+=" ";else"string"==typeof c&&(n=c);if((i=b)&&"function"!=typeof b&&("object"!=typeof b||"number"!=typeof b.length))throw Error("JSON.stringify");return l("",{"":a})}),"function"!=typeof JSON.parse&&(JSON.parse=function(a,e){function c(a,b){var d,f,g=a[b];if(g&&"object"==typeof g)for(d in g)Object.prototype.hasOwnProperty.call(g,d)&&(f=c(g,d),void 0!==f?g[d]=f:delete g[d]);return e.call(a,b,g)}var d,a=String(a);if(q.lastIndex=0,q.test(a)&&(a=a.replace(q,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})),/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return d=eval("("+a+")"),"function"==typeof e?c({"":d},""):d;throw new SyntaxError("JSON.parse")})}()),function(a){var b,c,d,e,f=function(){var a=navigator.userAgent,b=/Firefox\/(\d+)/i,c=a.match(b),d=parseInt(c?c[1]||!1:!1),e=isNaN(d)?!1:d;return e}(),g={base:{uri:function(){return s(q.get("apiBase"))+"/cards/"}},save:{uri:function(){return g.base.uri()},method:"POST"},update:{uri:function(a){return g.base.uri()+a.toString()},method:"PUT"}},h=1,i=window.postMessage&&-1===navigator.userAgent.indexOf("Opera"),j="/Assets/pci_receiver.html?&parenturl="+encodeURIComponent(location.href)+"&parentdomain="+encodeURIComponent(location.protocol+"//"+location.host),k=function(a){var b=/^https?:\/\/[^/]+/i;return q.get("apiBase").match(b)[0]===a.origin.match(b)[0]},l=i?function(b){b&&(e&&l(!1),e=function(c){return c||(c=window.event),"ready"===c.data?(a.requestCallback(),!1):k(c)?void b(c):!1}),f&&4>f?window.addEventListener("message",e,!1):window.onmessage=e}:function(b){c&&clearInterval(c),c=null,c=setInterval(function(){var c=document.location.hash,e=/^#?\d+&/;return c!==d&&"ready"===c.replace(e,"")?void a.requestCallback():void(c!==d&&e.test(c)&&(d=c,b({data:c.replace(e,"")})))},100)},m=i?function(a,b){b.postMessage(a,s(q.get("apiBase")))}:function(a,b){var c=(s(q.get("apiBase"))+j).replace(/#.*$/,"")+"#"+ +new Date+h++ +"&"+a;b.location=c},n=function(c,d,e,f){var g=function(){m(c+"|||||"+d+"|||||"+e+"|||||"+f,b.contentWindow||b)};a.requestCallback=g,l(function(a){G(a.data)},s(q.get("apiBase"))),b=document.createElement("iframe"),b.style.position="absolute",b.style.left="-9999px",b.style.width="1px",b.style.height="1px",b.src=s(q.get("apiBase"))+j,document.getElementsByTagName("body")[0].appendChild(b)},o={maskPattern:"^(\\d+?)\\d{4}$",maskCharacter:"*",apiBase:window.location.protocol+"//pci."+window.location.hostname.replace("www.","")},p={error:function(a){for(var b=0;b<a.length;b++)throw"PCIaaS Error "+a[b].majorCode+": "+a[b].minorCode+": "+a[b].message}},q={get:function(a){var b=a in q?q[a]:o[a];return b?b:void x.add("-1","2",u(t.settingMissing,a))},set:function(a,b){if("object"==typeof a)for(var c in a)q[c]=a[c];else q[a]=void 0!==b?b:o[a];return q}},r=/\/$/,s=function(a){return a?a.replace(r,""):void 0},t={cardNumberInvalid:"The card number is missing or in an unrecognized format.",unknownError:"There was a processing error. Please try again.",crossDomainError:"Cannot make request due to same-origin policy. {0} cannot be accessed via AJAX from {1}.",maskFailure:"The masking pattern provided does not match the card number.",missingFields:"Missing fields object. Pass a fields object to the PCIaaS function.",fieldMissing:'Field "{0}" missing or invalid.',settingMissing:'Setting "{0}" missing or invalid.'},u=function(){for(var a=Array.prototype.slice.call(arguments,1),b=arguments[0],c=0;c<a.length;c++)b=b.replace("{"+c+"}",a[c]);return b},v=new RegExp("[\\s-]","g"),w=function(){var a=[[function(){var a=z.getValue("CardNumber",!0),b=q.get("maskCharacter");if(!a)return!1;if(-1!=a.indexOf(b))return a.match(new RegExp("[^"+b+"\\d]"))||!a.match(/\d/)?!1:!0;a=a.replace(v,"");var c,d,e,f,g;for(f="",c=0;c<a.length;c++)e=parseInt(a.charAt(c),10),e>=0&&9>=e&&(f=e+f);if(f.length<=1)return!1;for(g="",c=0;c<f.length;c++)e=parseInt(f.charAt(c),10),c%2!=0&&(e*=2),g+=e;for(d=0,c=0;c<g.length;c++)e=parseInt(g.charAt(c),10),d+=e;return 0!=d&&d%10==0?!0:!1},"-1","3",t.cardNumberInvalid]];return function(){for(var b=a.length-1;b>=0;b--)a[b][0]()||x.add(a[b][1],a[b][2],a[b][3]);return 0===x.number()}}(),x={add:function(a,b,c){c in x._register||(x._stack.push({majorCode:a,minorCode:b,message:c}),x._register[c]=!0)},clear:function(){x._stack=[],x._register={}},get:function(a){var b=x._stack.slice(0);return x.clear(),b},number:function(){return x._stack.length},_register:{},_stack:[]},y=function(a){return x.add("-1","2",u(t.fieldMissing,a))},z={get:function(a,b){return b?z[a]:a in z?z[a]:y(a)},getValue:function(a,b){var c="";if(z[a])if(z[a].tagName)switch(z[a].tagName.toLowerCase()){case"select":c=z[a].getElementsByTagName("option")[z[a].selectedIndex].value;break;case"textarea":c=z[a].innerHTML;break;case"input":switch(z[a].type){case"checkbox":case"radio":c=z[a].checked;break;default:c=z[a].value}}else c="function"==typeof z[a]?z[a]():"";return b?c:""===c?y(a):c},set:function(a,b){if("object"==typeof a)for(var c in a)z.set(c,a[c]);else z[a]=b.nodeType?b:document.getElementById(b)||("function"==typeof b?b:"");return z},setValue:function(a,b){var c=z.get(a,!0);return c.nodeType?c.value=b:"function"==typeof c?c(b):"string"==typeof c||"boolean"==typeof c?z[a]=b:void 0}},A=null,B=["PersistCard","CardHolderName","ExpireMonth","ExpireYear","CVV"],C=["CardType"],D=function(a){var b={MerchantId:q.get("merchantID")},c=z.getValue("HiddenCardID",!0),d=z.getValue("CardNumber",a);if(!d)return x.add("-1","4",t.cardNumberInvalid),!1;b.NumberPart=-1===d.indexOf(q.get("maskCharacter"))?J("nocache",a).toSend:"";for(var e=0;e<C.length;e++)b[C[e]]=z.getValue(C[e],a);for(var f=0;f<B.length;f++)B[f]in z&&""!=z.getValue(B[f],!0).toString()&&(b[B[f]]=z.getValue(B[f],!0));return c&&!a&&(b.CardId=c),JSON.stringify(b)},E=function(){return D(!0)!==A},F=function(a){var b=z.getValue("HiddenCardID",!0);if(x.clear(),a||E()){if(!w())return p.error(x.get()),!1;var c,d=D();if(!d)return p.error(x.get()),!1;if(p.preprocess&&(c=p.preprocess(d)),c===!1)return!1;if("string"==typeof c&&(d=c),0!==x.number())return p.error(x.get()),!1;A=D(!0);var e=b?g.update.uri(b):g.save.uri(),f=b?g.update.method:g.save.method;n(e,d,f,q.get("merchantID"))}else p.success&&p.success(JSON.stringify({IsSuccessful:!0,CardId:b}),z.getValue("CardNumber"),null)},G=function(a){if(document.getElementsByTagName("body")[0].removeChild(b),a=JSON.parse(a),a.IsSuccessful){a.CardId&&z.setValue("HiddenCardID",a.CardId);var c=J("cached",!0);p.success&&p.success(a,c)}else H(a)},H=function(a){if(a&&a.Items)for(var b=0;b<a.Items.length;b++)x.add(a.Items[b].MajorCode,a.Items[b].MinorCode,a.Items[b].Message);else x.add("-1","-1",t.unknownError);p.error(x.get())},I="",J=function(a,b){if("cached"==a&&""!==I)return I;var c=z.getValue("CardNumber",b).replace(v,""),d=new RegExp(q.get("maskPattern")),e=c.match(d),f=c,g=[],h=q.get("maskCharacter"),i="";if(null!==e){for(var j=1;j<e.length;j++){i="";for(var k=0;k<e[j].length;k++)i+=h;f=f.replace(e[j],i)}for(var l=f.length-1;l>=0;l--)g.unshift(f.charAt(l)===h?c.charAt(l):h);return I={toDisplay:f,toSend:g.join("")}}return{toDisplay:c,toSend:c}},K=function(a){var b=a||J("cached");b&&(z.setValue("CardNumber",b.toDisplay),z.getValue("CVV")&&z.setValue("CVV",z.getValue("CVV").replace(/./g,q.get("maskCharacter"))))},L=function(a){if(a.settings&&q.set(a.settings),a.events)for(var b in a.events)p[b]=a.events[b];return a.fields?z.set(a.fields):(x.add("-1","2",t.missingFields),p.error(x.get())),{settings:q,fields:z,events:p,process:F,applyMask:K}};"function"==typeof define&&define.amd&&define(function(){return L}),PCIaaS=L}(window),{PCIaaS:PCIaaS}}),angular.module("Volusion.toolboxCommon").factory("vnPCIaaS",["$resource",function(a){"use strict";function b(b,c){var d={resource:"PCIaaS","Content-Type":"application/json",Accept:"application/json",MerchantId:c};return a(b,{},{save:{method:"POST",withCredentials:!0,headers:d},update:{method:"PUT",withCredentials:!0,headers:d}})}return{Card:b}}]),angular.module("Volusion.toolboxCommon").factory("vnImagePreloader",["$q","$rootScope",function(a,b){"use strict";function c(b){this.imageLocations=b,this.imageCount=this.imageLocations.length,this.loadCount=0,this.errorCount=0,this.states={PENDING:1,LOADING:2,RESOLVED:3,REJECTED:4},this.state=this.states.PENDING,this.deferred=a.defer(),this.promise=this.deferred.promise}return c.preloadImages=function(a){var b=new c(a);return b.load()},c.prototype={constructor:c,isInitiated:function(){return this.state!==this.states.PENDING},isRejected:function(){return this.state===this.states.REJECTED},isResolved:function(){return this.state===this.states.RESOLVED},load:function(){if(this.isInitiated())return this.promise;this.state=this.states.LOADING;for(var a=0;a<this.imageCount;a++)this.loadImageLocation(this.imageLocations[a]);return this.promise},handleImageError:function(a){this.errorCount++,this.isRejected()||(this.state=this.states.REJECTED,this.deferred.reject(a))},handleImageLoad:function(a){this.loadCount++,this.isRejected()||(this.deferred.notify({percent:Math.ceil(this.loadCount/this.imageCount*100),imageLocation:a}),this.loadCount===this.imageCount&&(this.state=this.states.RESOLVED,this.deferred.resolve(this.imageLocations)))},loadImageLocation:function(a){var c=this,d=$(new Image).load(function(a){b.$apply(function(){c.handleImageLoad(a.target.src),c=d=a=null})}).error(function(a){b.$apply(function(){c.handleImageError(a.target.src),c=d=a=null})}).prop("src",a)}},c}]),angular.module("Volusion.toolboxCommon").factory("vnProductParams",function(){"use strict";function a(a){I.length=0,I.push(a),K.categoryIds=d()}function b(a){J.push(a),K.facets=e()}function c(){return K.accessoriesOf}function d(){return I.join(",")}function e(){return J.join(",")}function f(){return K.maxPrice}function g(){return K.minPrice}function h(){return K.page}function i(){return K.pageSize}function j(){return K}function k(){return K.search}function l(){return K.sort}function m(a){return J.indexOf(a)>-1}function n(){K.page++}function o(c){if(c.categoryId&&a(parseInt(c.categoryId)),c.facetIds){var d=c.facetIds.split(",");angular.forEach(d,function(a){m(parseInt(a))||b(parseInt(a))})}c.minPrice&&D(c.minPrice),c.maxPrice&&C(c.maxPrice),c.q&&H(c.q),c.sort&&G(c.sort),c.page&&E(c.page)}function p(){K.page--}function q(){K.slug=""}function r(){K.search=""}function s(){K.minPrice=""}function t(){K.maxPrice=""}function u(){K.accessoriesOf=""}function v(a){var b=I.indexOf(a);I.splice(b,1),K.categoryIds=d()}function w(a){var b=J.indexOf(a);J.splice(b,1),K.facets=e()}function x(){K.sort=""}function y(){I=[],K.categoryIds=""}function z(){J=[],K.facets=""}function A(){I=[],J=[],K={categoryIds:"",slug:"",facets:"",minPrice:"",maxPrice:"",accessoriesOf:"",sort:"",page:"",pageSize:""}}function B(a){K.accessoriesOf=a}function C(a){K.maxPrice=a}function D(a){K.minPrice=a}function E(a){K.page=a}function F(a){K.pageSize=a}function G(a){K.sort=a}function H(a){K.search=decodeURIComponent(a)}var I=[],J=[],K={categoryIds:"",slug:"",facets:"",minPrice:"",maxPrice:"",accessoriesOf:"",sort:"",page:"",pageSize:""};return{addCategory:a,addFacet:b,getAccessoriesOf:c,getCategoryString:d,getFacetString:e,getMaxPrice:f,getMinPrice:g,getPage:h,getPageSize:i,getParamsObject:j,getSearchText:k,getSort:l,isFacetSelected:m,nextPage:n,preLoadData:o,previousPage:p,removeSlug:q,removeSearch:r,removeMinPrice:s,removeMaxPrice:t,removeAccessoriesOf:u,removeCategory:v,removeFacet:w,removeSort:x,resetCategories:y,resetFacets:z,resetParams:A,setAccessoriesOf:B,setMaxPrice:C,setMinPrice:D,setPage:E,setPageSize:F,setSort:G,updateSearch:H}}),angular.module("Volusion.toolboxCommon").factory("vnProduct",["vnImagePreloader",function(a){"use strict";function b(){var a=[];if(!q.options)return a;for(var c=0;c<q.options.length;c++){var d=q.options[c];if(d.isRequired&&!d.hasOwnProperty("selected")&&a.push(d.label),d.options.length>0)for(var e=b(d.options),f=0;f<e.length;f++)a.push(e[f].label)}return a}function c(){var a=[];if(!q.options)return a;for(var b=0;b<q.options.length;b++){var c=q.options[b];c.isRequired&&c.derivesToSKU&&a.push(c.label)}return a.length}function d(){var b=[];angular.forEach(q.imageCollections,function(a){angular.forEach(a.images,function(a){b.push(a.medium)})}),a.preloadImages(b)}function e(a){if("undefined"==typeof a)return!0;var b,d=0,e=1===c();return b=q.optionSKUs.filter(function(b){return b.key===a}),b.length>0&&(e||b[0].key.indexOf("|")>-1)?(d=b[0].quantityInStock,null===d||d>0):0===b.length?q.availability.allowBackOrders||null===q.availability.quantityInStock||q.availability.quantityInStock>0:!1}function f(){var a,b=0;if(q.options.length>0&&q.optionSKUs.length>0){for(var c=0;c<q.optionSKUs.length;c++)b|=e(q.optionSKUs[c].key);a=0===b}else a=!q.availability.allowBackOrders&&null!==q.availability.quantityInStock&&q.availability.quantityInStock<=0;return a}function g(){var a=!1;if(0===q.options.length)a=q.availability.allowBackOrders||null===q.availability.quantityInStock||q.availability.quantityInStock>0;else{var b=1===q.options.length?q.optionSelection.option.key+":"+q.optionSelection.option.selected:q.optionSelection.key;a=e(b)}return a}function h(a){return q=a,q.optionSelection={option:{selected:"default"}},q.imageCollections.length>0&&q.imageCollections[0].images.length>0&&(q.image=q.imageCollections[0].images[0]),d(),q}function i(a,b){q.sharing={facebook:"http://www.facebook.com/sharer.php?u="+a+"&t="+b,twitter:"http://twitter.com/share?url="+a+"&text="+b,tumblr:"http://www.tumblr.com/share/link?url="+a+"&name="+b,googlePlus:"https://plus.google.com/share?url="+a}}function j(a){q.isEditable=a}function k(a){angular.forEach(q.imageCollections,function(b){b.key===a&&(q.image=b.images[0],q.currentImageCollection=b.images)})}function l(a){q.optionSelection&&q.optionSelection.quantityInStock-a>=0&&(q.optionSelection.quantityInStock-=a)}function m(){return q.cartItem}function n(){return void 0!==q.image?q.image:null}function o(a){0!==a.length&&(1===a.length&&(a[1]=a[0],a[2]=a[0]),void 0===q.image&&(q.image={}),q.image.medium=a[0],q.image.large=a[1],q.image.small=a[2])}function p(){return q.seo}var q={};return{set:h,setEditable:j,setSocialSharing:i,setProductImage:k,getProductCart:m,getProductImage:n,setProductNoImage:o,setQuantityInStock:l,getProductSEO:p,findAvailability:f,findOptionAvailability:e,findRequiredOptionsAreSelected:b,isSelectionAvailable:g}}]),angular.module("Volusion.toolboxCommon").constant("vnResourceTypes",{article:"article",billingaddresses:"billingaddresses",cart:"cart",category:"category",config:"config",countries:"countries",nav:"nav",orders:"orders",paymentprofiles:"paymentprofiles",product:"product",reviews:"reviews",themesettings:"themesettings",user:"user",shippingaddresses:"shippingaddresses"}),angular.module("Volusion.toolboxCommon").constant("vnSortDefault","relevance"),angular.module("Volusion.toolboxCommon").service("vnUser",["$q","$state","vnApi",function(a,b,c){"use strict";function d(){return H}function e(){return H.anonymous}function f(){var b=a.defer();return!H.anonymous&&H.email?b.resolve():b.reject(),b.promise}function g(){var b=a.defer();return H.email?b.resolve():b.reject(),b.promise}function h(a){return c.ShippingAddresses().save({},a).$promise}function i(a){return c.BillingAddresses().save({},a).$promise}function j(a){return c.BillingAddresses()["delete"]({id:a.id}).$promise}function k(a){return c.ShippingAddresses()["delete"]({id:a.id}).$promise}function l(a){return c.PaymentProfiles()["delete"]({id:a.id}).$promise}function m(a){return c.PaymentProfiles().save({},a).$promise}function n(){var b=a.defer();return c.User().get().$promise.then(function(d){angular.extend(H,d.data),a.all([c.ShippingAddresses().get().$promise,c.BillingAddresses().get().$promise,c.PaymentProfiles().get().$promise]).then(function(a){H.shippingAddresses=a[0].data,H.billingAddresses=a[1].data,H.paymentProfiles=a[2].data,b.resolve(H)})["catch"](function(a){b.reject(a)})}),b}function o(){var b=a.defer();return p(1,3).then(function(a){b.resolve(a.data)},function(a){b.reject(a)}),b.promise}function p(b,d){var e=a.defer();return c.CustomerOrders().get({page:b,pageSize:d}).$promise.then(function(a){e.resolve(a)},function(a){e.reject(a)}),e.promise}function q(){var b=a.defer();return c.PaymentProfiles().get().$promise.then(function(a){H.paymentProfiles=a.data,b.resolve(a.data)},function(a){b.reject(a)}),b.promise}function r(){var b=a.defer();return c.ShippingAddresses().get().$promise.then(function(a){H.shippingAddresses=a.data,b.resolve(a.data)},function(a){b.reject(a)}),b.promise}function s(){var b=a.defer();return c.BillingAddresses().get().$promise.then(function(a){H.billingAddresses=a.data,b.resolve(a.data)},function(a){b.reject(a)}),b.promise}function t(){var b=a.defer();return c.User().get().$promise.then(function(a){angular.extend(H,a.data),b.resolve(H)},function(a){b.reject(a)}),b.promise}function u(a){return H.email=a.email,H.password=a.password,H.firstName=a.firstName,H.lastName=a.lastName,H.emailOptIn=a.emailOptIn,H.anonymous=a.anonymous,H.autoLogin=a.autoLogin,c.User().save({},H).$promise}function v(a){H.id=a}function w(a){H.email=a}function x(a){H.password=a}function y(a){H.firstName=a}function z(a){H.lastName=a}function A(a){H.emailOptIn=a}function B(a){H.anonymous=a}function C(){H={}}function D(a){return c.BillingAddresses().update({id:a.id},a).$promise}function E(a){return c.ShippingAddresses().update({id:a.id},a).$promise}function F(a){return c.PaymentProfiles().update({id:a.id},a).$promise}function G(a){var b=c.User().update({id:a.id},a).$promise;return b.then(function(a){angular.copy(a.data,H),H.serviceErrors=[],H.warnings=a.warnings||a.data.warnings||[]})["catch"](function(a){H.serviceErrors=[],H.warnings=[],a&&(a.serviceErrors&&(H.serviceErrors=a.serviceErrors),a.warnings&&(H.warnings=a.warnings),a.data&&(a.data.data&&angular.copy(a.data.data,H),a.data.serviceErrors&&(H.serviceErrors=a.data.serviceErrors),a.data.warnings&&(H.warnings=a.data.warnings)))}),b}var H={email:"",password:"",firstName:"",lastName:"",emailOptIn:!1,anonymous:!0,customFields:{},autoLogin:!0};return{createFrom:u,getUser:d,getBillingAddresses:s,setBillingAddress:i,deleteBillingAddress:j,deleteShippingAddress:k,deletePaymentProfile:l,getLastThreeOrders:o,getPagedOrders:p,getPaymentProfiles:q,getShippingAddresses:r,setShippingAddress:h,getCurrent:n,getCurrentUser:t,isAnonymous:e,isLoggedIn:f,isLoggedInOrAnon:g,reset:C,setId:v,setEmail:w,setPassword:x,setFirstName:y,setLastName:z,setEmailOptIn:A,setAnonymous:B,setPaymentProfile:m,updateBillingAddress:D,updateShippingAddress:E,updatePaymentProfile:F,updateUser:G}}]),angular.module("Volusion.toolboxCommon").factory("vnUtils",function(){"use strict";var a={};return a.checkDisallowedCharacters=function(a){return unescape(a).match(/[^\w\s!#().?\[\]'"~`\-]+/g)},a.checkDisallowedCharactersForPostalCode=function(a){return unescape(a).match(/[^\w\s\-]+/g)},a}),angular.module("Volusion.toolboxCommon").controller("ShipMethodCtrl",["$scope","vnCheckout",function(a,b){"use strict";var c=1;a.checkout=b.get(),a.currentShippingMethodIdx=0,a.isEditable=function(){return a.checkout.currentStep===c?"edit":"show"},a.setPreferredShippingMethod=function(c){angular.forEach(a.checkout.cart.shippingMethods,function(d){return a.checkout.cart.shippingMethods[c].id===d.id?(a.currentShippingMethodIdx=c,d.selected=!0,void b.setShipMethodValidity(!0)):void(d.selected=!1)}),b.updateCart()}}]),angular.module("Volusion.toolboxCommon").controller("ShipToViewsCtrl",["$scope","$rootScope","$window","vnAddressUtilities","vnCheckout","vnUser",function(a,b,c,d,e,f){var g=this;g.state=null,g.showCopyAddress=!1,g.showSaveButton=!0,g.init=function(){g.checkout=e.get(),g.user=f.getUser(),g.user.anonymous?(g.shippingAddress=d.createEmptyAddress(),g.state="EDITADDRESS"):f.getShippingAddresses().then(function(){g.user.shippingAddresses&&g.user.shippingAddresses.length?(g.shippingAddress=d.getPreferredAddress(g.user.shippingAddresses),g.saveShippingAddress()):(g.shippingAddress=d.createEmptyAddress(),g.state="EDITADDRESS")}),e.getCountries().then(function(a){g.countries=a.data})},g.editShippingAddress=function(){g.state=!g.user.anonymous&&g.user.shippingAddresses&&g.user.shippingAddresses.length?"PICKADDRESS":"EDITADDRESS",a.$emit("vnShipTo.edit")},g.onAddressSelected=function(){g.shippingAddress=d.getPreferredAddress(g.user.shippingAddresses),g.saveShippingAddress()},g.onAddressAdded=function(a){g.shippingAddress=a,g.saveShippingAddress()},g.saveShippingAddress=function(){c.scrollTo(0,0),b.$emit("checkout.stepOneLoading"),e.setShipToValidity(!0),e.setShippingAddress(g.shippingAddress),f.setShippingAddress(g.shippingAddress),e.updateCart(),g.state="VIEWADDRESS",a.$emit("vnShipTo.edit.done")};var h=b.$on("cartUpdated",function(){b.$emit("checkout.stopLoading")});a.$on("$destroy",function(){h()})}]),angular.module("Volusion.toolboxCommon").controller("ThankYouCtrl",["$scope","vnCheckout","lodash","$location",function(a,b,c,d){"use strict";var e=b.get();return"undefined"==typeof e.orderId||-1===e.orderId?void d.path("/"):(a.orderId=e.orderId,a.userEmail=e.user.email,a.checkout=angular.copy(e,{}),b.updateCart(),void(a.shippingMethod=c.find(a.checkout.cart.shippingMethods,function(a){ +return a.selected===!0})))}]),angular.module("Volusion.toolboxCommon").service("themeSettings",["$q","vnApi",function(a,b){function c(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}function d(){c(g)&&b.ThemeSettings().get().$promise.then(function(a){g=a})}function e(){return g.itemsPerPage||8}function f(){var d=a.defer();return c(g)?b.ThemeSettings().get().$promise.then(function(a){d.resolve(a),g=a}):d.resolve(g),d.promise}var g={};return{init:d,getThemeSettings:f,getPageSize:e}}]),angular.module("Volusion.toolboxCommon").factory("storage",["$window","$cookieStore",function(a,b){function c(){return{get:function(b){var c=a.localStorage.getItem(b);return null===c?d(b):c},set:function(b,c){return a.localStorage.setItem(b,c)},remove:function(b){return a.localStorage.removeItem(b)}}}function d(a){var c=b.get(a);return"undefined"==typeof c?null:c}function e(){return{get:function(a){return d(a)},set:function(a,c){return b.put(a,c)},remove:function(a){return b.remove(a)}}}return"localStorage"in a&&null!==a.localStorage?c():e()}]);var storageKey="VN_TRANSLATE";if(Translate.prototype.getConfig=function(){var a=this.storage,b=JSON.parse(a.get(storageKey))||{},c=a.get("NG_TRANSLATE_LANG_KEY");return!this.disableTranslations&&c&&"undefined"!==c&&(b.lang=c),b},Translate.prototype.configure=function(a){a=angular.extend(this.getConfig(),a),this.storage.set(storageKey,JSON.stringify(a)),this.$translate.use(a.lang)},Translate.prototype.addParts=function(){if(this.disableTranslations)return!0;var a=this.$translatePartialLoader;return angular.forEach(arguments,function(b){a.addPart(b)}),this.$translate.refresh()},TranslateProvider.prototype.$get=["$translate","$translatePartialLoader","storage",function(a,b,c){var d=this.options;return new Translate(a,b,c,{region:d.region,lang:d.lang,country:d.country},d.disableTranslations)}],TranslateProvider.prototype.configure=function(a){a=angular.extend({region:"us",lang:"en",country:"us"},a),a.lang&&this.setPreferredLanguage(a.lang),this.options=a,a.disableTranslations||this.initTranslateProvider(a.lang)},TranslateProvider.prototype.initTranslateProvider=function(a){var b=this.$translateProvider;b.useLoader("$translatePartialLoader",{urlTemplate:"/translations/{part}/{lang}.json"}),"en"===a&&b.useMessageFormatInterpolation(),b.useLocalStorage()},angular.module("Volusion.toolboxCommon").provider("translate",["$translateProvider",TranslateProvider]),angular.module("Volusion.toolboxCommon").filter("vnCreditCard",function(){"use strict";return function(a,b){if(void 0===a||""===a)return a;var c=[];if(b=b.toUpperCase(),(-1!==a.indexOf("*")&&"AMEX"!==b&&"AMERICAN EXPRESS"!==b&&19===a.length||("AMEX"===b||"AMERICAN EXPRESS"===b)&&18===a.length)&&(a=a.replace(/[\s]+/g,"")),"AMEX"===b||"AMERICAN EXPRESS"===b||/^(34)|^(37)/.test(a)){c=a.slice(0,15).match(/(.{0,4})(.{0,6})(.{0,5})$/),c.splice(0,1);for(var d=0;d<c.length;d++)""===c[d]&&(c.splice(d,1),d=0)}else c=a.slice(0,16).match(/.{1,4}/g);return null!==c?c.join(" "):a}}),angular.module("Volusion.toolboxCommon").filter("vnFormattedCurrency",["$filter","$locale",function(a,b){"use strict";return function(c,d){if(void 0===c||null===c)return"";var e=a("currency")(c,d),f=e.split(b.NUMBER_FORMATS.DECIMAL_SEP);return f[1].indexOf("00")>-1?f[0]+f[1].substring(2):f[0]+'<span class="th-price--cents">'+f[1]+"</span>"}}]),angular.module("Volusion.toolboxCommon").filter("html",["$sce",function(a){"use strict";return function(b){return a.trustAsHtml(b)}}]),angular.module("Volusion.toolboxCommon").filter("reverse",function(){"use strict";return function(a){return void 0===a?null:a.slice().reverse()}}),angular.module("Volusion.toolboxCommon").filter("seoFriendly",function(){"use strict";return function(a){var b=a.match(/[0-9a-z]+/gi);return b?b.join("-"):""}}),angular.module("Volusion.toolboxCommon").filter("vnUsPhone",function(){"use strict";return function(a){if(void 0===a||""===a)return a;a=a.replace(/[^\d]+/g,"");var b,c="";return b=a.slice(0,14).match(/(.{0,3})(.{0,3})(.{0,4})(.{0,4})$/),b.splice(0,1),3!==b[0].length?a:(c="("+b[0]+")",b[1].length>0&&(c+=" "+b[1]),b[2].length>0&&(c+="-"+b[2]),b[3].length>0&&(c+=" ext."+b[3]),c)}}),angular.module("Volusion.toolboxCommon").directive("vnEmailValidate",[function(){"use strict";return{require:"ngModel",link:function(a,b,c,d){d.$parsers.unshift(function(b){return a.emailEmpty=b&&b.length>0?"valid":void 0,a.validEmail=b&&/^[\w\.\-]+@[a-zA-Z\d_.-]+?\.[a-zA-Z]{2,3}$/.test(b)?"valid":void 0,a.validLength=b&&b.length<75?"valid":void 0,a.emailEmpty&&a.validEmail&&a.validLength?(d.$setValidity(d.$name,!0),b):void d.$setValidity(d.$name,!1)})}}}]).directive("vnPasswordValidate",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(a,b,c,d){d.$parsers.unshift(function(b){return a.pwdValidLength=b&&b.length>=6&&b&&b.length<20?"valid":void 0,a.pwdValidLength?(d.$setValidity("password",!0),b):void d.$setValidity("password",!1)})}}}]).directive("vnValueMatch",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(a,b,c,d){d.$parsers.unshift(function(b){return a.sameValue=b===c.vnValueMatch?"valid":void 0,a.sameValue?(d.$setValidity("password",!0),b):void d.$setValidity("password",!1)})}}}]).directive("vnFirstNameValidate",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(b,c,d,e){e.$parsers.unshift(function(c){return b.firstNameMinValidLength=c&&c.length>=1?"valid":void 0,b.firstNameDisallowedChars=a.checkDisallowedCharacters(c),b.firstNameAllowedChars=c&&null===b.firstNameDisallowedChars?"valid":void 0,b.firstNameMinValidLength&&b.firstNameAllowedChars?(e.$setValidity("firstName",!0),c):void e.$setValidity("firstName",!1)})}}}]).directive("vnLastNameValidate",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(b,c,d,e){e.$parsers.unshift(function(c){return b.lastNameMinValidLength=c&&c.length>=1?"valid":void 0,b.lastNameDisallowedChars=a.checkDisallowedCharacters(c),b.lastNameAllowedChars=c&&null===b.lastNameDisallowedChars?"valid":void 0,b.lastNameMinValidLength&&b.lastNameAllowedChars?(e.$setValidity("lastName",!0),c):void e.$setValidity("lastName",!1)})}}}]).directive("vnStreetValidate",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(b,c,d,e){e.$parsers.unshift(function(c){return b.streetEmpty=c&&c.length>0?"valid":void 0,b.streetDisallowedChars=a.checkDisallowedCharacters(c),b.streetAllowedChars=c&&null===b.streetDisallowedChars?"valid":void 0,b.streetAllowedChars&&b.streetEmpty?(e.$setValidity("street",!0),c):void e.$setValidity("street",!1)})}}}]).directive("vnCityValidate",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(b,c,d,e){e.$parsers.unshift(function(c){return b.cityEmpty=c&&c.length>0?"valid":void 0,b.cityDisallowedChars=a.checkDisallowedCharacters(c),b.cityAllowedChars=c&&null===b.cityDisallowedChars?"valid":void 0,b.cityAllowedChars&&b.cityEmpty?(e.$setValidity("city",!0),c):void e.$setValidity("city",!1)})}}}]).directive("vnRegionValidate",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(b,c,d,e){e.$parsers.unshift(function(c){return b.regionEmpty=c&&c.length>0?"valid":void 0,b.regionDisallowedChars=a.checkDisallowedCharacters(c),b.regionAllowedChars=c&&null===b.regionDisallowedChars?"valid":void 0,b.regionAllowedChars&&b.regionEmpty?(e.$setValidity("region",!0),c):void e.$setValidity("region",!1)})}}}]).directive("vnRequiredFieldValidate",[function(){"use strict";return{require:"ngModel",link:function(a,b,c,d){var e=(c.vnRequiredFieldValidate||d.$name||"")+"Required";d.$parsers.unshift(function(b){return a[e]=b&&b.length>=1?"valid":void 0,a[e]?(d.$setValidity(e,!0),b):void d.$setValidity(e,!1)})}}}]).directive("vnSpecialCharsValidate",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(b,c,d,e){var f=d.vnSpecialCharsValidate||e.$name;e.$parsers.unshift(function(c){var d=f+"AllowedChars",g=f+"DisallowedChars";return b[g]=a.checkDisallowedCharacters(c),b[d]=c&&null===b[g]?"valid":void 0,b[d]?(e.$setValidity(f,!0),c):void e.$setValidity(f,!1)})}}}]).directive("vnZipValidate",function(){"use strict";return{require:"ngModel",link:function(a,b,c,d){d.$parsers.unshift(function(b){return a.zipHasValidFormat=b&&/^\d{5}(-\d{4})?$/.test(b)?"valid":void 0,a.zipHasValidFormat?(d.$setValidity("zip",!0),b):void d.$setValidity("zip",!1)})}}}).directive("vnPostalCodeValidate",["vnUtils",function(a){"use strict";return{require:"ngModel",link:function(b,c,d,e){e.$parsers.unshift(function(c){return b.postalCodeEmpty=c&&c.length>0?"valid":void 0,b.postalCodeDisallowedChars=a.checkDisallowedCharactersForPostalCode(c),b.postalCodeAllowedChars=c&&null===b.postalCodeDisallowedChars?"valid":void 0,b.postalCodeAllowedChars&&b.postalCodeEmpty?(e.$setValidity("postalCode",!0),c):void e.$setValidity("postalCode",!1)})}}}]).directive("vnUsPhoneValidate",function(){"use strict";return{require:"ngModel",link:function(a,b,c,d){d.$parsers.unshift(function(b){return a.usPhoneHasValidFormat=b&&/\d{10,14}$/.test(b)?"valid":void 0,a.usPhoneHasValidFormat?(d.$setValidity("usPhone",!0),b):void d.$setValidity("usPhone",!1)})}}}).directive("vnCvvValidate",function(){"use strict";return{require:"ngModel",link:function(a,b,c,d){d.$parsers.unshift(function(c){var e="",f=b.attr("data-vn-cc-type").toUpperCase();if("AMEX"!==f&&"AMERICAN EXPRESS"!==f&&"***"===c||("AMEX"===f||"AMERICAN EXPRESS"===f)&&"****"===c)a.cvvValidFormat="valid",e=c;else{var g=/^\d{3}?$/;e=c.replace(/[^\d]+/g,""),a.cvvLength=3,("AMEX"===f||"AMERICAN EXPRESS"===f)&&(g=/^\d{4}?$/,a.cvvLength=4),b.attr("maxlength",a.cvvLength),a.cvvValidFormat=e&&g.test(e)?"valid":void 0}return d.$setValidity("cvv","valid"===a.cvvValidFormat),e})}}}).directive("vnCcValidate",function(){"use strict";function a(a){var b=[[0,2,4,6,8,1,3,5,7,9],[0,1,2,3,4,5,6,7,8,9]],c=0;return a.replace(/[\d]/g,function(a,d,e){c+=b[e.length-d&1][parseInt(a,10)]}),c%10===0&&c>0&&a.length>=15?"valid":void 0}return{require:"ngModel",link:function(b,c,d,e){e.$parsers.unshift(function(d){var f="",g=c.attr("data-vn-cc-type").toUpperCase();if(-1!==d.indexOf("*")&&"AMEX"!==g&&"AMERICAN EXPRESS"!==g&&19===d.length||("AMEX"===g||"AMERICAN EXPRESS"===g)&&18===d.length)b.creditCardValid="valid",f=d;else{var h=16,i=3;("AMEX"===g||"AMERICAN EXPRESS"===g)&&(h=15,i=2),c.attr("maxlength",h+i),f=d.replace(/[^\d]+/g,"").slice(0,h),b.creditCardValid=a(f)}return e.$setValidity("creditcard","valid"===b.creditCardValid),c.val(f),f})}}}),angular.module("Volusion.toolboxCommon").factory("vnViewPortWatch",["$rootScope","$window",function(a,b){"use strict";return{setBreakpoints:function(c){"undefined"!=typeof b.enquire&&angular.forEach(c,function(c){c.mediaQuery&&b.enquire.register(c.mediaQuery,{match:function(){c.onMatch&&"function"==typeof c.onMatch&&c.onMatch(),a.$emit("vnViewPortWatch:Match",c)},unmatch:function(){c.onUnmatch&&"function"==typeof c.onUnmatch&&c.onUnmatch(),a.$emit("vnViewPortWatch:Unmatch",c)}})})}}}]),angular.module("Volusion.toolboxCommon.templates",[]).run(["$templateCache",function(a){a.put("vn-faceted-search/vn-category-search.html",'<div class=vn-category-search__category-items data-ng-repeat="cat in categories" data-ng-class="{ \'-last\': $last }">\n\n <a href data-ng-if="cat.displayStrategy == \'categoryDisplayTwo\' || cat.displayStrategy == \'categoryDisplayThree\' " data-ng-click=buildAppUrl(cat) class=vn-category-search__category-items__category-title data-ng-class="{ \'-noborder\': $last && cat.displayStrategy == \'categoryDisplayOne\' }">\n\n <span data-ng-if="cat.displayStrategy == \'categoryDisplayTwo\' " class="glyphicon glyphicon-chevron-left"></span>\n {{ cat.name }}\n </a>\n <span class=vn-category-search__category-items__category-title data-ng-if="cat.displayStrategy == \'categoryDisplayOne\' ">{{ cat.name }}</span>\n <div class=vn-category-search__category-items__category-item data-ng-repeat="subCat in cat.subCategories" data-ng-class="{ \'-noborder\': $last }">\n\n <span data-ng-if=subCat.hideSubCatLink>{{ subCat.name }}</span>\n <a href data-ng-if=!subCat.hideSubCatLink data-ng-click=buildAppUrl(subCat)>{{ subCat.name }}</a>\n </div>\n</div>'),a.put("vn-faceted-search/vn-facet-search.html",'<div data-accordion-group class=facet-item data-ng-repeat="facet in facets track by $index" data-is-open=defaultAccordianOpen>\n <div data-accordion-heading>\n <div>\n <span>{{ facet.title }}</span>\n <i class="pull-right glyphicon" data-ng-class="{\'glyphicon-chevron-down\': defaultAccordianOpen, \'glyphicon-chevron-right\': !defaultAccordianOpen}"></i>\n </div>\n </div>\n <div data-ng-if="facet.displayType != \'swatches\'" class=facet-properties>\n <label class=facet-property data-ng-repeat="property in facet.properties track by $index" data-ng-class="{ \'-last\': $last }">\n\n <input type=checkbox name=property.name data-ng-checked=selectProperty(property) data-ng-click="refineFacetSearch(property)">\n <span class=name>{{ property.name }}</span>\n <span class=count>{{ property.count }}</span>\n </label>\n </div>\n <div data-ng-if="facet.displayType == \'swatches\'" class="facet-properties clearfix">\n <div data-ng-repeat="property in facet.properties" class=facet-property__swatch data-ng-click=refineFacetSearch(property) data-ng-class="{\'facet-property__swatch--selected\': selectProperty(property)}">\n <div class=facet-property__swatch--color data-ng-style="{\'backgroundColor\': property.color }">\n </div>\n </div>\n </div>\n</div>'),a.put("vn-faceted-search/vn-faceted-search.html",'<div class=vn-faceted-search-header data-ng-show=showApplyButton>\n <button class="btn btn-success __cancel-action" href data-ng-click=dismissMobileFilters()>Apply\n </button>\n \n <button class="btn __clear-action" href data-ng-click=clearAllFilters()>Clear\n </button>\n \n</div>\n<div class=-faceted-search data-ng-show=showFacetSearch>\n <div class=facets>\n <div data-accordion data-close-others=false>\n\n \n <div data-accordion-group class=facet-item__by-category data-is-open=categoryAccordiansOpen data-ng-show="categoryList.length > 0">\n <div data-accordion-heading>\n <div>\n <span>Category</span>\n <i class="pull-right glyphicon" data-ng-class="{\'glyphicon-chevron-down\': categoryAccordiansOpen, \'glyphicon-chevron-right\': !categoryAccordiansOpen}"></i>\n </div>\n </div>\n <div vn-category-search categories=categoryList query-products=queryProducts() data-ng-show=showCategorySearch class=category-search>\n </div>\n </div>\n\n \n <div vn-facet-search facets=facets query-products=queryProducts() data-ng-show="facets.length > 0"></div>\n\n \n <div data-accordion-group class=facet-item__by-price data-is-open=priceAccordiansOpen data-ng-show="facets.length > 0">\n <div data-accordion-heading>\n <div>\n <span>Price</span>\n <i class="pull-right glyphicon" data-ng-class="{\'glyphicon-chevron-down\': priceAccordiansOpen, \'glyphicon-chevron-right\': !priceAccordiansOpen}"></i>\n </div>\n </div>\n <div class=facet-item__by-price__inputs vn-price-search query-products=queryProducts()></div>\n </div>\n </div>\n\n \n <div class=vn-faceted-search-footer data-ng-show=!showApplyButton>\n <button class="btn __clear-action" href data-ng-click=clearAllFilters()>Reset Filters\n </button>\n \n </div>\n\n </div>\n</div>'),a.put("vn-faceted-search/vn-price-search.html",'<input data-ng-model=minPrice data-ng-keypress=searchByPrice($event) placeholder="$">\n to \n<input data-ng-model=maxPrice data-ng-keypress=searchByPrice($event) placeholder="$$">\n<button class="btn btn-default facet-item__by-price__button" type=button ng-click=searchByPrice($event)>Go\n</button>'),a.put("vn-faceted-search/vn-sort-search.html",'<div class=dropdown>\n <button class="btn btn-default dropdown-toggle" type=button id=dropdownMenu1 data-toggle=dropdown>\n Sort by\n <span class=caret></span>\n </button>\n <ul class=dropdown-menu role=menu aria-labelledby=dropdownMenu1>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'relevance\')">Relevance</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'highest price\')">Highest price</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'lowest price\')">Lowest price</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'relevance\')">Popularity</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'newest\')">Newest</a>\n </li>\n <li role=presentation>\n <a role=menuitem tabindex=-1 href="" data-ng-click="sortBy(\'oldest\')">Oldest</a>\n </li>\n </ul>\n</div>'),a.put("vn-place-order-btn/vn-place-order-btn.html",'<div class=th-checkout__place-order-fixed data-ng-class="{ \'th-checkout__place-order-fixed--active\': placeOrderFixed}" data-ng-if=checkout.steps[2].active>\n <button class="btn btn-primary btn-block btn-lg th-checkout__place-order-fixed__btn" data-ng-click=placeOrder()>\n Place Order\n </button>\n</div>'),a.put("vn-product-option/checkboxes.html",'<label data-vn-block=vn-labeled-checkbox data-vn-modifiers={{option.class}} data-ng-repeat="item in option.items" data-ng-init=item>\n\n <div data-vn-element=checkbox>\n <input type=checkbox data-ng-click="onCheckboxClicked(option, item)">\n </div>\n\n <div data-vn-element=content data-ng-include=" \'vn-product-option/content.html\' "></div>\n</label>'),a.put("vn-product-option/content.html",'<div data-vn-element=color-image>\n <div data-vn-element=color data-ng-show=item.color style="background-color: {{item.color}}"></div>\n <img data-vn-element=image data-ng-show=item.swatchImage data-ng-src={{item.swatchImage}} alt={{item.text}}>\n</div>\n<div data-vn-element=text data-ng-bind=item.text data-ng-controller=OptionsCtrl data-ng-class="{ \'-disabled\': !isItemAvailable }"></div>\n<div data-vn-element=border data-ng-class="{ checked: option.selected === item.key }"></div>'),a.put("vn-product-option/index.html",'<div data-vn-block=vn-product-option>\n\n <label data-vn-element=label data-ng-if=option.label data-ng-bind=option.label></label>\n\n <div data-ng-repeat="inputType in option.inputTypes">\n <div data-vn-element=group data-vn-modifiers="{{inputType.type}} {{option.class}}" data-ng-include=" \'vn-product-option/\' + inputType.type + \'.html\' ">\n </div>\n </div>\n\n <div data-ng-if=option.selected>\n <div data-ng-repeat="option in option.options" data-ng-include=" \'vn-product-option/index.html\' ">\n </div>\n </div>\n\n</div>'),a.put("vn-product-option/radios.html",'<label data-vn-block=vn-labeled-radio data-vn-modifiers={{option.class}} data-ng-repeat="item in option.items" data-ng-init=item data-ng-controller=OptionsCtrl data-ng-class="{ \'-disabled\': !isItemAvailable }">\n\n <div data-vn-element=radio>\n\n <input type=radio name={{option.id}} data-ng-value=item.key data-ng-model=option.selected data-ng-click="onOptionChanged(option, item)">\n </div>\n\n <div data-vn-element=content data-ng-include=" \'vn-product-option/content.html\' "></div>\n\n</label>'),a.put("vn-product-option/select.html",'<div class=dropdown data-vn-element=select data-vn-modifiers="{{ option.class }}" data-ng-attr-size="{{ inputType.size }}">\n\n <button class="btn btn-default dropdown-toggle" type=button id="dropdownMenuOption{{ option.id }}" data-toggle=dropdown>\n {{ currentSelectionText }}\n <span class=caret></span>\n </button>\n <ul class=dropdown-menu role=menu aria-labelledby="dropdownMenuOption{{ option.id }}">\n <li role=presentation data-ng-repeat="item in option.items">\n <a role=menuitem tabindex=-1 href data-ng-click="onOptionChanged(option, item)" data-ng-controller=OptionsCtrl data-ng-class="{ \'-disabled\': !isItemAvailable }">\n {{ item.text }}\n </a>\n </li>\n </ul>\n</div>'),a.put("vn-product-option/text.html",'<div data-ng-if="inputType.rows > 1">\n <textarea data-vn-element=text data-vn-modifiers={{option.class}} data-ng-focus="saveTo=saveTo||{}" data-ng-model=saveTo[option.id] data-ng-maxlength={{inputType.maxlength}} placeholder={{inputType.placeholder}} rows={{inputType.rows}} cols={{inputType.cols}}></textarea>\n</div>\n\n<div data-ng-if="!inputType.rows || inputType.rows < 2">\n <input data-vn-element=text data-vn-modifiers={{option.class}} data-ng-focus="saveTo=saveTo||{}" data-ng-model=saveTo[option.id] data-ng-maxlength={{inputType.maxlength}} placeholder={{inputType.placeholder}}>\n</div>'),a.put("vn-product/vn-product-image.html",'<img data-ng-src="{{ getImagePath(product.imageCollections) }}" class=img-responsive alt="{{ product.name }}">'),a.put("address/address-display.tpl.html",'<div class=row data-ng-show="address.address1 !== \'\'" data-ng-click=onClick()>\n <div class=col-xs-10>\n <div class=th-address__display__addressPart>{{ address.firstName }} {{ address.lastName }}</div>\n <div class=th-address__display__addressPart>{{ address.address1 }}</div>\n <div data-ng-if="address.address2 != \'\'" class=th-address__display__addressPart>{{ address.address2 }}</div>\n <div class=th-address__display__addressPart data-ng-show=isLocationUS>{{ address.city }}, {{ address.state }} {{ address.postalCode }}</div>\n <div class=th-address__display__addressPart data-ng-show=isLocationUS>{{ address.phoneNumber | vnUsPhone }}</div>\n\n <div class=th-address__display__addressPart data-ng-show=!isLocationUS>{{ address.city }}</div>\n <div class=th-address__display__addressPart data-ng-show=!isLocationUS>{{ address.state }} {{ address.postalCode }}</div>\n <div class=th-address__display__addressPart data-ng-show=!isLocationUS>{{ address.country }}</div>\n <div class=th-address__display__addressPart data-ng-show=!isLocationUS>{{ address.phoneNumber }}</div>\n\n <div class=th-address__display__addressPart data-ng-if=shippingValue data-ng-show=address.residential>Type: Residential</div>\n <div class=th-address__display__addressPart data-ng-if=shippingValue data-ng-show=!address.residential>Type: Business</div>\n </div>\n <div class=col-xs-2 ng-show=showEditButton>\n <i class="fa fa-angle-right fa-2x pull-right"></i>\n </div>\n</div>'),a.put("address/vn-address-display-actions.tpl.html",'<div class="container-fluid no-padding">\n <div data-ng-if="shipping==\'true\'" data-vn-address-display data-address=address data-shipping=true></div>\n <div data-ng-if="shipping!=\'true\'" data-vn-address-display data-address=address></div>\n <div class="row th-address__display__actions">\n <div class=col-xs-7>\n <span data-ng-if=!address.preferred>\n <button class="btn btn-default" data-ng-click=onMakePreferredClicked()>Make Preferred\n </button>\n </span>\n <span class=th-address__display__actions__preferred data-ng-if=address.preferred>\n <i class="fa fa-check"></i> Preferred</span>\n </div>\n <div class="col-xs-4 col-xs-offset-1 col-sm-3 col-sm-offset-2 col-md-2 col-md-offset-3">\n <div class=row>\n <div class=col-xs-6>\n <a href data-ng-click=onEditClicked({address:address})><i class="fa fa-pencil"></i></a>\n </div>\n <div class=col-xs-6>\n <a href data-ng-click=onDeleteClicked({address:address})><i class="fa fa-trash-o"></i></a>\n </div>\n </div>\n </div>\n </div>\n</div>'),a.put("address/vn-address-picker.tpl.html",'<div class="th-checkout__step__drawer -left" data-ng-class="{\'-open\': openAddressPicker}">\n\n <div class=th-checkout__step__drawer__body data-ng-show=openAddressPicker data-ng-switch=state data-ng-cloak>\n <a href class=th-checkout__step__drawer__close data-ng-click=selectAddress()>\n <i class="fa fa-close fa-2x"></i>\n </a>\n\n <div class=th-checkout__step__drawer__title>\n <span data-ng-switch-when=ADDRESSLIST>{{:: selectAddressTitle}}</span>\n <span data-ng-switch-when=NEWADDRESS>{{:: newAddressTitle}}</span>\n </div>\n\n <div class=th-address__choose data-ng-switch-when=ADDRESSLIST>\n <div class=th-address__choose__options ng-cloak>\n <label class=th-address__choose__options__option data-ng-repeat="address in addressList" for="address{{ $index }}">\n <div class=styled-optionbox-option>\n <input type=radio id="address{{ $index }}" name=billingAddress data-ng-value=true data-ng-model=address.preferred data-ng-change="setPreferredAddress({{ $index }})">\n\n <div>\n <vn-address-display data-ng-if="shipping==\'true\'" data-address=address data-show-edit-button=allowEdit data-shipping=true></vn-address-display>\n <vn-address-display data-ng-if="shipping!=\'true\'" data-address=address data-show-edit-button=allowEdit></vn-address-display>\n </div>\n </div>\n </label>\n\n <a class=th-address__choose__options__new-option ng-repeat-end data-ng-click=createNewAddress()>\n Enter a different address\n </a>\n </div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn__continue" data-ng-click=selectAddress()>\n Continue <i class="fa fa-angle-right"></i>\n </button>\n </div>\n\n\n <div data-ng-switch-when=NEWADDRESS>\n <div class="th-address__same-as styled-checkbox-option" data-ng-if=showCopyAddress>\n <input type=checkbox id=chkAddressCopy name=chkAddressCopy data-ng-model=addressCopied data-ng-change="copyAddressHandler()">\n <label for=chkAddressCopy>{{:: copyAddressText}}</label>\n </div>\n <div class=th-address__enterAddress>\n <div data-ng-if="shipping==\'true\'" data-vn-address-editor="" address=newAddress countries=countries data-on-dirty=setCopyAddressFalse() data-on-save="saveAddress({newAddress: newAddress})" data-shipping=true></div>\n <div data-ng-if="shipping!=\'true\'" data-vn-address-editor="" address=newAddress countries=countries data-on-dirty=setCopyAddressFalse() data-on-save="saveAddress({newAddress: newAddress})"></div>\n </div>\n </div>\n\n\n <div class=th__back-button>\n <a href=javascript:void(0); data-ng-click=selectAddress()>\n <i class="fa fa-arrow-left"> {{:: backToText}}</i>\n </a>\n </div>\n </div>\n</div>'),a.put("app-messages/vnAppMessage.tpl.html",'<alert class="vn-app-message container-fluid" ng-repeat="alert in appMessagesCtrl.alerts track by alert.id" type="{{ alert.type }}">\n <div class=row>\n <div class=col-xs-8>\n <span class=vn-app-message__text>{{alert.text}}</span>\n </div>\n <div class="col-xs-4 align-right">\n <button class="btn vn-app-message__button th-alert__button" data-ng-click=appMessagesCtrl.closeAlert(alert.id)>Ok</button>\n </div>\n </div>\n</alert>'),a.put("billing-address/billing-address-views.html",'<div class=th-address data-ng-controller="BillingAddressViewsCtrl as vm" data-ng-switch=vm.state data-ng-init=vm.init()>\n <div class="th-checkout__section-heading th-address__heading">\n Billing Address\n </div>\n\n <div class=th-address__display data-ng-switch-when=VIEWADDRESS>\n <vn-address-display data-address=vm.billingAddress data-on-click=vm.editBillingAddress() data-show-edit-button=vm.billingAddress></vn-address-display>\n </div>\n\n <div class="th-address__same-as styled-checkbox-option" data-ng-switch-when=EDITADDRESS ng-cloak>\n <input type=checkbox id=chkBillingAddress name=chkBillingAddress data-ng-model=vm.useShippingAddress data-ng-change="vm.copyShippingAddress()">\n <label for=chkBillingAddress>Billing address same as shipping</label>\n </div>\n <div class=th-address__enterAddress data-ng-switch-when=EDITADDRESS ng-cloak>\n <div data-vn-address-editor="" address=vm.billingAddress countries=vm.countries data-on-dirty=vm.setShippingAddressFalse() data-on-save=vm.saveBillingAddress() data-show-save-button=false></div>\n </div>\n\n <div vn-address-picker data-ng-switch-when=PICKADDRESS data-address-list=vm.user.billingAddresses data-new-address-title="Add Billing Address" data-select-address-title="Choose Billing Address" data-back-to-text="back to Pay With" data-show-copy-address=vm.showCopyAddress data-countries=vm.countries data-on-address-selected=vm.onAddressSelected() data-save-address=vm.onAddressAdded(newAddress) data-address-copied=vm.useShippingAddress data-copy-address-handler=vm.copyShippingAddress() data-copy-address-text="Billing address same as shipping"></div>\n\n</div>'),a.put("busy-animation/vnBusyAnimation.tpl.html",'<ng-transclude></ng-transclude>\n<div class="{{ class }}" title=1 data-ng-if=show>\n <svg version=1.1 id=loader-1 xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink x=0px y=0px ng-attr-width="{{ size }}" ng-attr-height="{{ size }}" viewbox="0 0 50 50" style="enable-background:new 0 0 50 50" xml:space=preserve>\n\n <path fill=#000 d=M25.251,6.461c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615V6.461z>\n <animatetransform attributetype=xml attributename=transform type=rotate from="0 25 25" to="360 25 25" dur=.6s repeatcount="indefinite">\n </path>\n </svg>\n</div>'),a.put("checkout/checkout.html",'<div class=th-checkout>\n <div class=row>\n <div class="th-checkout__loading th-checkout__loading--ship-to" vn-busy-animation vn-busy-animation-size=80px vn-busy-animation-show="{{ stepOneLoading }}" vn-busy-animation-class=th-checkout__loading-inner data-ng-show=checkout.steps[0].active></div>\n\n <div class="th-checkout__loading th-checkout__loading--pay-with" vn-busy-animation vn-busy-animation-size=80px vn-busy-animation-show="{{ stepTwoLoading }}" vn-busy-animation-class=th-checkout__loading-inner data-ng-show=checkout.steps[1].active></div>\n\n <div class="th-checkout__loading th-checkout__loading--review" vn-busy-animation vn-busy-animation-size=80px vn-busy-animation-show="{{ stepThreeLoading }}" vn-busy-animation-class=th-checkout__loading-inner data-ng-show=checkout.steps[2].active></div>\n\n <div class="col-md-4 th-checkout__step th-checkout__step__ship-to" data-ng-show="checkout.steps[0].active || isInDesktopMode" data-ng-class="{ \'-active\' : checkout.steps[0].active, \'-no-scroll\' : checkout.steps[0].hasOpenDrawer }" data-ng-switch=isEditable(1) data-vn-scroll-to-top=checkout.steps[0].hasOpenDrawer data-ng-init="hideShippingMethods = true">\n\n <div class=th-checkout__step__overlay data-ng-class="{ \'-complete\' : checkout.steps[1].active || checkout.steps[2].active}" data-ng-click=setStep(1)></div>\n\n <div class=th-checkout__step__title>\n <div class=th-checkout__step__title__stepNumber data-ng-if=checkout.steps[0].active><span>1</span></div>\n <i class="fa fa-check-circle-o fa-2x" data-ng-if="checkout.steps[1].active || checkout.steps[2].active"></i>\n <div class=th-checkout__step__title__stepName>Ship To</div>\n </div>\n\n <div ng-include=" \'ship-to/ship-to-views.html\' "></div>\n\n <div data-ng-hide=hideShippingMethods ng-include=" \'ship-method/ship-method.html\' "></div>\n\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn-continue" data-ng-hide=hideShippingMethods data-ng-if=checkout.steps[0].active data-ng-click=nextShippingStep() data-ng-bind-html=buildShippingStepLabel()>\n </button>\n </div>\n <div class="col-md-4 th-checkout__step th-checkout__step__pay-with" data-ng-show="checkout.steps[1].active || isInDesktopMode" data-ng-class="{ \'-active\' : checkout.steps[1].active, \'-no-scroll\' : checkout.steps[1].hasOpenDrawer }" data-ng-switch=isEditable(2) data-vn-scroll-to-top=checkout.steps[1].hasOpenDrawer>\n\n <div class=th-checkout__step__overlay data-ng-class="{ \'-complete\' : checkout.steps[2].active}" data-ng-click="checkout.steps[0].active || setStep(2)"></div>\n\n <div class=th-checkout__step__title>\n <div class=th-checkout__step__title__stepNumber data-ng-if="checkout.steps[0].active || checkout.steps[1].active"><span>2</span></div>\n <i class="fa fa-check-circle-o fa-2x" data-ng-if=checkout.steps[2].active></i>\n <div class=th-checkout__step__title__stepName>Pay With</div>\n </div>\n\n <div ng-include=" \'pay-with/credit-card-views.html\' "></div>\n\n <div ng-include=" \'billing-address/billing-address-views.html\' "></div>\n\n <div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn-continue" data-ng-if=checkout.steps[1].active data-ng-click=nextBillingStep()>\n Continue <i class="fa fa-angle-right"></i>\n </button>\n\n <div class=th__back-button data-ng-if=checkout.steps[1].active>\n <a href=javascript:void(0); data-ng-click=prevStep()>\n <i class="fa fa-arrow-left"> back to Ship To</i>\n </a>\n </div>\n\n <br style="clear: both">\n </div>\n\n </div>\n\n <div data-vn-place-order-btn></div>\n\n <div class="col-md-4 th-checkout__step th-checkout__step__review" data-ng-show="checkout.steps[2].active || isInDesktopMode" data-ng-class="{ \'-active\' : checkout.steps[2].active, \'-no-scroll\' : checkout.steps[2].hasOpenDrawer }" data-vn-scroll-to-top=checkout.steps[2].hasOpenDrawer>\n\n <div class=th-checkout__step__overlay data-ng-click="checkout.steps[0].active || checkout.steps[1].active || setStep(3)"></div>\n\n <div class=th-checkout__step__title>\n <div class=th-checkout__step__title__stepNumber><span>3</span></div>\n <div class=th-checkout__step__title__stepName>Review</div>\n </div>\n <div class=th-checkout__thanks__title>\n Total: {{ checkout.cart.totals.grandTotal | currency }}\n </div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn-continue" data-ng-if=checkout.steps[2].active data-ng-click=placeOrder()>\n {{ placeOrderBtnText }}\n </button>\n <div vn-review=checkout.cart></div>\n <div ng-include=" \'review/review-details-2.html\' " ng-if=checkout.steps[2].active></div>\n\n <button class="hidden-md hidden-lg hidden-xl btn btn-primary btn-block btn-lg th-checkout__step__btn-continue" data-ng-if=checkout.steps[2].active data-ng-click=placeOrder()>\n {{ placeOrderBtnText }}\n </button>\n\n <div class=th__back-button>\n <a href=javascript:void(0); data-ng-if=checkout.steps[2].active data-ng-click=prevStep()>\n <i class="fa fa-arrow-left"> back to Pay With</i>\n </a>\n </div>\n\n </div>\n </div>\n</div>'), +a.put("checkout/vn-address-editor.html",'<div class="th-address container-fluid">\n\n <div>\n\n <div class=th-address__location>\n <div class=btn-group>\n <button type=button data-ng-click=setCountryToUS() class="btn btn-default" data-ng-class="{ \'btn-primary\' : isLocationUS }">United States\n </button>\n <button type=button data-ng-click=setCountryToOther() class="btn btn-default" data-ng-class="{ \'btn-primary\': !isLocationUS }">International\n </button>\n </div>\n </div>\n\n <div class=th-address__form-wrapper>\n <form id=frmAddress name=frmAddress novalidate data-ng-submit=updateAddress(address)>\n <div class=row>\n <div class=col-xs-6>\n <div class=form-group>\n <input name=inputUSFirstName class="form-control input-lg immediate-help" id=first-name data-vn-placeholder="First Name" data-ng-model=address.firstName data-vn-first-name-validate required>\n\n <data-vn-popover-first-name>\n\n </div>\n </div>\n <div class=col-xs-6>\n <div class=form-group>\n <input name=inputUSLastName class="form-control input-lg -right immediate-help" id=last-name data-vn-placeholder="Last Name" data-ng-model=address.lastName data-vn-last-name-validate required>\n\n <data-vn-popover-last-name>\n\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputUSAddress1Line class="form-control input-lg immediate-help" id=address-1 data-vn-placeholder="Address Line 1" data-ng-model=address.address1 data-vn-street-validate required>\n\n <data-vn-popover-address>\n\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputUSAddressLine2 class="form-control input-lg" id=address-2 data-vn-placeholder="Address Line 2" data-ng-model="address.address2">\n </div>\n </div>\n </div>\n <div class=row data-ng-show=isLocationUS data-ng-hide=check.useShippingAddress>\n <div class=col-xs-5>\n <div class=form-group>\n <input name=inputUSCity class="form-control input-lg immediate-help" id=city data-vn-placeholder=City data-ng-model=address.city data-vn-city-validate ng-required="isLocationUS">\n\n <data-vn-popover-city>\n\n </div>\n </div>\n <div class=col-xs-3>\n <div class=form-group>\n <div class="th-address__state th-dropdown">\n <vn-dropdown name=inputUSState availableoptions=address.selectedCountry.states placeholder=State optionselect=onStateChanged model=address.selectedState selected-field=code>\n <vn-dropdown>\n </vn-dropdown></vn-dropdown></div>\n </div>\n </div>\n <div class=col-xs-4>\n <div class=form-group>\n <input name=inputUSZip class="form-control input-lg immediate-help" id=zip data-vn-placeholder=Zip data-ng-model=address.postalCode data-vn-zip-validate ng-required="isLocationUS">\n\n <data-vn-popover-zip>\n\n </div>\n </div>\n </div>\n <div class=row data-ng-show=!isLocationUS>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputWorldwideCity class="form-control input-lg immediate-help" id=international-city data-vn-placeholder=City data-ng-model=address.city data-vn-city-validate required>\n\n <data-vn-popover-city></data-vn-popover-city>\n </div>\n </div>\n </div>\n <div class=row data-ng-show=!isLocationUS>\n <div class=col-xs-6>\n <div class=form-group>\n <input name=inputWorldwideRegion class="form-control input-lg immediate-help" id=region data-vn-placeholder=Region data-ng-model=address.state data-vn-region-validate ng-required="!isLocationUS">\n <data-vn-popover-region></data-vn-popover-region>\n </div>\n </div>\n <div class=col-xs-6>\n <div class=form-group>\n <input name=inputWorldwidePostalCode class="form-control input-lg immediate-help" id=postal-code maxlength=15 data-vn-placeholder="Postal code" data-ng-model=address.postalCode data-vn-postal-code-validate ng-required="!isLocationUS">\n <data-vn-popover-postal-code>\n </data-vn-popover-postal-code></div>\n </div>\n </div>\n <div class=row data-ng-show="!isLocationUS ">\n <div class=col-xs-12>\n <div class=form-group>\n <div class="th-address__country th-dropdown">\n\n <vn-dropdown name=inputWorldwideCountry data-availableoptions=countries placeholder=Country optionselect=onCountryChanged model=address.selectedCountry>\n <vn-dropdown>\n\n </vn-dropdown></vn-dropdown></div>\n </div>\n </div>\n </div>\n\n <div class=row data-ng-show=isLocationUS>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputUSPhoneNumber class="form-control input-lg immediate-help" id=phone-number data-vn-placeholder="Phone Number" data-ng-model=address.phoneNumber data-vn-format-us-phone-number data-vn-us-phone-validate required>\n\n <data-vn-popover-us-phone></data-vn-popover-us-phone>\n </div>\n </div>\n </div>\n\n <div class=row data-ng-show=!isLocationUS>\n <div class=col-xs-12>\n <div class=form-group>\n <input name=inputIntlPhoneNumber class="form-control input-lg immediate-help" maxlength=35 data-vn-placeholder="Phone Number" data-ng-model=address.phoneNumber data-vn-required-field-validate required>\n\n <data-vn-popover-required location=top field="Phone Number"></data-vn-popover-required>\n </div>\n </div>\n </div>\n <div class=row data-ng-if="shipping==\'true\'">\n <div class=col-xs-12>\n <div class=form-group>\n <input type=checkbox name=type class=immediate-help id=residential-1 data-ng-model=address.residential data-ng-true-value=false data-ng-false-value="true">\n <label for=residential-1 role=button tabindex=0>This is a business address</label>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n <div>\n <div class=row data-ng-if=showCancelButtonValue>\n <div class=col-xs-6>\n <button class="btn btn-default btn-block btn-lg" data-ng-click=onCancel()>\n {{cancelText}}\n </button>\n </div>\n <div class=col-xs-6>\n <button class="btn btn-primary btn-block btn-lg" data-ng-click=saveAddress() data-ng-enabled=frmAddress.$valid data-ng-if=showSaveButtonValue>\n {{saveText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n <div class=row data-ng-if=!showCancelButtonValue>\n <div class=col-xs-12>\n <button class="btn btn-primary btn-block btn-lg" data-ng-click=saveAddress() data-ng-enabled=frmAddress.$valid data-ng-if=showSaveButtonValue>\n {{saveText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n </div>\n\n</div>'),a.put("dropdown/vn-dropdown.tpl.html",'<div class="vn-dropdown th-dropdown" dropdown>\n <button id=dropdownButton name="{{name + \'Label\'}}" class="vn-dropdown__trigger form-control btn btn-default btn-lg dropdown-toggle form-control" data-vn-placeholder={{placeholder}} data-ng-model=selectedOption.selectedDisplayValue dropdown-toggle data-toggle=dropdown value={{selectedOption.selectedDisplayValue}}>{{selectedOption.selectedDisplayValue}}<span class=caret></span>\n </button>\n <ul class="vn-dropdown__menu dropdown-menu" role=menu>\n <li role=presentation data-ng-repeat="option in options">\n <a role=menuitem data-ng-click=changeOption($index) href>{{option.displayValue}}</a>\n </li>\n </ul>\n <select name={{name}} class=vn-dropdown__select ng-model=selectedOption ng-options="option.selectedDisplayValue for option in options">\n </select>\n</div>'),a.put("easy-zoom/vnEasyZoom.tpl.html","<div class=easyzoom data-ng-class=\"{ 'easyzoom--adjacent': ezAdjacent, 'easyzoom--overlay': ezOverlay }\">\n <a data-ng-href={{ezZoomSrc}}>\n <img class=img-responsive data-ng-src={{ngSrc}} alt={{alt}}>\n <div class=th-product-view__zoom></div>\n </a>\n</div>"),a.put("login/forgot-password.html",'<div class=th-login>\n <div class=container-fluid>\n <div class=row>\n <div class="col-xs-12 col-xs-offset-0 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4">\n <div class=th__title>Forgot Your Password?</div>\n <div class=th__subtitle>Enter your email address and we\'ll send you a link to reset your password</div>\n <div class=th-checkout__login__form>\n <form id=frmForgotPassword name=frmForgotPassword novalidate data-ng-submit=forgotPassword()>\n <div class=row>\n <div class=col-xs-12>\n <div class=form-group>\n <input id=inputLoginEmail name=inputLoginEmail class="form-control input-lg immediate-help" data-vn-placeholder="E-mail address" data-ng-model=email data-ng-change=checkValidity() data-vn-email-validate required>\n\n <div class="input-help bottom" ng-if=frmForgotPassword.inputLoginEmail.$touched>\n <div class=arrow></div>\n <h4>E-mail must:</h4>\n <ul>\n <li ng-class=emailEmpty>Not be <strong>empty</strong></li>\n <li ng-class=validEmail>Be a <strong>valid</strong> address</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </form>\n <button class="btn btn-primary btn-block btn-lg th-checkout__login__continue" data-ng-disabled=disabledButton data-ng-click=forgotPassword()>\n Reset Password <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n</div>'),a.put("login/login.html",'<div data-vn-app-message=""></div>\n<div data-vn-login data-allow-anonymous=true data-redirect-to=checkout data-button-text=Continue></div>'),a.put("login/my-account-login.html",'<div data-vn-app-message=""></div>\n<div data-vn-login data-allow-anonymous=false data-redirect-to=my-account data-button-text="Sign In" data-title="Account Login"></div>'),a.put("login/vn-login-link.html","<div>\n <span data-ng-if=!loggedIn>\n <a data-ui-sref=my-account-login data-translate=header.signIn>Sign In</a>\n </span>\n <span data-ng-if=loggedIn>\n <a data-ui-sref=logout data-translate=header.signOut>Sign Out</a>\n </span>\n</div>"),a.put("login/vn-login.html",'<div class=th-login>\n <div class=th__title>{{title}}</div>\n <div class=container-fluid>\n <div class=row ng-if=loginError>\n <div class="col-xs-12 col-xs-offset-0 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4">\n <div class=th-login__error data-ng-click=clearError()>\n Login Failed\n </div>\n </div>\n </div>\n <div class=row>\n <div class="col-xs-12 col-xs-offset-0 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4">\n <div class=th-login__form>\n <form id=frmLogin name=frmLogin novalidate data-ng-submit=updateUser()>\n <div class=row>\n <div class=col-xs-12>\n <div class=form-group>\n <input id=inputLoginEmail name=inputLoginEmail class="form-control input-lg immediate-help" data-vn-placeholder="E-mail address" data-ng-model=user.email pattern=.{1,75} required>\n\n </div>\n </div>\n </div>\n\n <div class=row data-ng-if="!user.anonymous || !allowAnonymous">\n <div class=col-xs-12>\n <div class=form-group>\n <input type=password id=inputLoginPassword name=inputLoginPassword class="form-control input-lg immediate-help" data-vn-placeholder=Password data-ng-model=user.password data-ng-enter=updateUser() pattern=.{1,75} required>\n </div>\n </div>\n </div>\n </form>\n\n <div class=th-login__user-type ng-show=allowAnonymous>\n <div class=btn-group>\n <button type=button data-ng-click="user.anonymous = true" class="btn btn-default" data-ng-class="{ \'btn-primary\' : user.anonymous }">I\'m a new customer\n </button>\n <button type=button data-ng-click="user.anonymous = false" class="btn btn-default" data-ng-class="{ \'btn-primary\': !user.anonymous }">I\'ve ordered before\n </button>\n </div>\n </div>\n\n <button class="btn btn-primary btn-block btn-lg th-login__continue" data-ng-disabled=disabledButton data-ng-click=updateUser()>\n {{buttonText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n <a href ui-sref=forgot-password>Forgot your password?</a>\n </div>\n </div>\n </div>\n</div>'),a.put("modal/vnAddressDeleteConf.tpl.html",'<div class="th-error-wrap clearfix th-modal">\n <a href class=th-modal__close ng-click=$dismiss()>\n <i class="fa fa-times"></i>\n </a>\n <div class=th-error-details>\n <div class="th-error-details__header modal-header">\n <div class=modal-body>\n <div class=th-modal__message>\n {{ :: message }}\n </div>\n\n <div class="th-modal__body row">\n <div class=col-xs-12>\n <div class=th-message-details__section2 vn-address-display="" address=::addressToDelete></div>\n </div>\n </div>\n </div>\n <div class="modal-footer container-fluid">\n <div class=row>\n <div class="col-xs-12 col-sm-6">\n <button class="btn btn-default btn-lg th-modal__button th-modal__button--secondary" ng-click=$dismiss()>Cancel</button>\n </div>\n <div class="col-xs-12 col-sm-6">\n <button class="btn btn-primary btn-lg th-modal__button th-modal__button--primary" ng-click=$close()>{{::buttonText}}</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>'),a.put("modal/vnErrorModal.tpl.html",'<div class=th-error-details>\n <div class="th-error-details__header modal-header">\n <h1>Sorry, something went wrong with the page...</h1>\n\n <div class=modal-body>\n <p class=th-error-details__section1>... but it might just be a small glitch. Try refreshing the page\n to see if that fixes it.</p>\n\n <p class=th-error-details__section2>\n If the problem persists, please try again later.\n </p>\n </div>\n <div class=modal-footer>\n <button class="btn btn-warning" ng-click=$close()>Close</button>\n </div>\n </div>\n</div>'),a.put("modal/vnMessageModal.tpl.html",'<div class="th-error-wrap clearfix">\n <div class=th-error-details>\n <div class="th-error-details__header modal-header">\n <h1>This is a generic app message template</h1>\n <div class=modal-body>\n <p class=th-message-details__section1>It should be over ridden in the calling application</p>\n\n </div>\n <div class=modal-footer>\n <button class="btn btn-warning" ng-click=$dismiss()>Ok</button>\n <button class="btn btn-warning" ng-click=$close()>Cancel</button>\n </div>\n </div>\n </div>\n</div>'),a.put("modal/vnPaymentProfileDeleteConf.tpl.html",'<div class="th-error-wrap clearfix th-modal">\n <a href class=th-modal__close ng-click=$dismiss()>\n <i class="fa fa-times"></i>\n </a>\n <div class=th-error-details>\n <div class="th-error-details__header modal-header">\n <div class=modal-body>\n <div class=th-modal__message>\n {{ :: message }}\n </div>\n\n <div class="th-modal__body row">\n <div class=col-xs-12>\n <span class=th-credit-card__img data-ng-class=::paymentProfileToDelete.card.ccCssClass></span>\n <span>{{ ::paymentProfileToDelete.card.cardNumber.slice(-4) }}</span>\n <span>{{ ::paymentProfileToDelete.card.expMonth }}/{{ ::paymentProfileToDelete.card.expYear }}</span>\n </div>\n </div>\n\n </div>\n <div class="modal-footer container-fluid">\n <div class=row>\n <div class="col-xs-12 col-sm-6">\n <button class="btn btn-default btn-lg th-modal__button th-modal__button--secondary" ng-click=$dismiss()>Cancel</button>\n </div>\n <div class="col-xs-12 col-sm-6">\n <button class="btn btn-primary btn-lg th-modal__button th-modal__button--primary" ng-click=$close()>{{::buttonText}}</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>'),a.put("my-account/billing-addresses.html",'<div class="th-my-account container" data-ng-cloak="">\n\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n {{vm.pageTitle}}\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-7 col-md-6">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <div data-ng-show="!vm.addressToEdit && !vm.addressToAdd" class="th-address__choose animate-show">\n <div class=th-address__choose__options>\n <a href class=th-address__choose__options__new-option data-ng-click=vm.addAddress() ng-repeat-end>\n <i class="fa fa-plus"></i>  Add a Billing Address</a>\n \n <div data-ng-repeat="billingAddress in vm.billingAddresses" class=th-address__choose__options__option>\n <div class=styled-optionbox-option>\n <div vn-address-display-actions="" data-address=billingAddress data-on-make-preferred-clicked=vm.makeAddressPreferred($index) data-on-delete-clicked=vm.deleteAddress(address) data-on-edit-clicked="vm.editAddress(address, $index)"></div>\n </div>\n </div>\n </div>\n </div>\n <div data-ng-show=vm.addressToEdit class="th-address__enterAddress animate-show">\n <div data-vn-address-editor="" data-ng-if=vm.addressToEdit data-countries=vm.countries data-address=vm.addressToEdit data-title="Edit Shipping Address" data-on-save=vm.saveEditedAddress() data-on-cancel=vm.cancelEditAddress() data-show-save-button=true data-save-text=save data-show-cancel-button=true>\n </div>\n </div>\n <div data-ng-show=vm.addressToAdd class="th-address__enterAddress animate-show">\n <div data-vn-address-editor="" data-ng-if=vm.addressToAdd data-countries=vm.countries data-address=vm.addressToAdd data-title="Edit Shipping Address" data-on-save=vm.saveNewAddress() data-on-cancel=vm.cancelAddAddress() data-show-save-button=true data-save-text=add data-show-cancel-button=true>\n </div>\n </div>\n\n </div>\n <div class="col-xs-12 col-sm-5 col-md-4 col-md-offset-1 th-my-account__group">\n <div class=th-my-account__title>More Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.shippingaddresses>Shipping Addresses</a></li>\n <li><a href="" data-ui-sref=my-account.paymentprofiles>Payment Profiles</a></li>\n </ul>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left"></i>  Back to My Account\n </a>\n </div>\n</div>'),a.put("my-account/change-email.html",'<div class="th-my-account th-change-email container" data-ng-cloak="">\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n Change Email\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-8 col-md-6">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <div class=th-change-email__current>\n <div class=th-change-email__current__title>Current Email</div>\n <div class=th-change-email__current__email>{{user.email}}</div>\n </div>\n\n <form id=frmChangeEmail name=frmChangeEmail novalidate data-ng-submit="">\n <div class=row>\n <div class=col-xs-12>\n <div>\n <input id=changeEmail name=changeEmail class="form-control input-lg immediate-help" data-vn-placeholder="Updated E-mail" data-ng-model=user.changeEmail data-ng-class="{\'ng-invalid\':frmChangeEmail.confirmChangeEmail.$error.match}" data-ng-change=checkValidity() data-vn-email-validate required>\n\n <div class="input-help bottom" ng-if=frmChangeEmail.changeEmail.$touched>\n <div class=arrow></div>\n <h4>E-mail must:</h4>\n <ul>\n <li ng-class=emailEmpty>Not be <strong>empty</strong></li>\n <li ng-class=validEmail>Be a <strong>valid</strong> address</li>\n <li ng-class=validLength>Be less than <strong>75</strong> characters</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <input id=confirmChangeEmail name=confirmChangeEmail class="form-control input-lg immediate-help" data-vn-placeholder="Confirm Updated E-mail" data-ng-model=user.confirmChangeEmail data-match=frmChangeEmail.changeEmail data-ng-change=checkValidity() data-vn-value-match={{user.changeEmail}} required>\n <div class="input-help bottom" ng-if="frmChangeEmail.confirmChangeEmail.$touched && frmChangeEmail.confirmChangeEmail.$viewValue.length > 0">\n <div class=arrow></div>\n <ul>\n <li ng-class=sameValue>Email addresses must match</li>\n </ul>\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <input type=password id=inputPassword name=inputPassword class="form-control input-lg immediate-help" data-vn-placeholder=Password data-ng-model=user.password data-ng-change=checkValidity() data-vn-password-validate required>\n </div>\n </div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__login__continue" data-ng-disabled=changeButtonDisabled data-ng-click=changeEmail()>\n Change Email <i class="fa fa-angle-right"></i>\n </button>\n </form>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left"></i>  Back to My Account\n </a>\n </div>\n\n</div>'),a.put("my-account/change-password.html",'<div class="th-my-account th-change-password container" data-ng-cloak="">\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n Change Password\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-8 col-md-6">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <form id=frmChangePassword name=frmChangePassword novalidate data-ng-submit="">\n <div class=row>\n <div class=col-xs-12>\n <input type=password id=inputPassword name=inputPassword class="form-control input-lg immediate-help" data-vn-placeholder="Current Password" data-ng-model=user.password data-ng-change=checkValidity() data-vn-password-validate required>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <input type=password id=inputNewPassword name=inputNewPassword class="form-control input-lg immediate-help" data-vn-placeholder="New Password" data-ng-model=user.newPassword data-ng-change=checkValidity() data-vn-password-validate required>\n\n <div class="input-help bottom" ng-if=frmChangePassword.inputNewPassword.$touched>\n <div class=arrow></div>\n <h4>Password must:</h4>\n <ul>\n <li ng-class=validLength>Be at least <strong>6</strong> characters</li>\n <li ng-class=validLength>Be at most <strong>20</strong> characters</li>\n </ul>\n </div>\n </div>\n </div>\n <div class=row>\n <div class=col-xs-12>\n <input type=password id=inputConfirmPassword name=inputConfirmPassword class="form-control input-lg immediate-help" data-vn-placeholder="Confirm Password" data-ng-model=user.confirmPassword data-ng-change=checkValidity() data-vn-value-match={{user.newPassword}} required>\n <div class="input-help bottom" ng-if="frmChangePassword.inputConfirmPassword.$touched && frmChangePassword.inputConfirmPassword.$viewValue.length > 0">\n <div class=arrow></div>\n <ul>\n <li ng-class=sameValue>Passwords must match</li>\n </ul>\n </div>\n </div>\n </div>\n <button class="btn btn-primary btn-block btn-lg th-checkout__login__continue" data-ng-disabled=changeButtonDisabled data-ng-click=changePassword()>\n Change Password <i class="fa fa-angle-right"></i>\n </button>\n </form>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left"></i>  Back to My Account\n </a>\n </div>\n\n</div>'),a.put("my-account/my-account.html",'<div data-vn-app-message=""></div>\n<div ui-view>\n <div class="container th-my-account">\n <div class=row>\n <div class="col-xs-12 th-my-account__group th-my-account__group--header">\n <div class="th-my-account__title th-my-account__group--header__title">My Account</div>\n <div class=th-my-account__group--header__welcome>\n Hi, {{user.firstName}} (<a href ui-sref=logout>log out</a>)\n </div>\n </div>\n </div>\n\n <div class=row>\n <div class="col-xs-12 th-my-account__group th-my-account__group--orders">\n <div class=th-my-account__title>Orders</div>\n\n <div class=th-my-account__overlay data-ng-if=loading vn-busy-animation vn-busy-animation-show="{{ loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n <div data-ng-if="orders.length == 0">\n <p class=text-muted>\n You haven\'t placed an order with us yet.\n </p>\n </div>\n\n <div data-ng-if="orders.length > 0">\n <div data-vn-order-table="" orders=orders class=hidden-xs></div>\n <div data-vn-order-list-view="" orders=orders class="hidden-sm hidden-md hidden-lg hidden-xl"></div>\n <div class=th-my-account__group__links>\n <a href data-ui-sref=my-account.orders.list>View all Orders</a>\n </div>\n </div>\n </div>\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-6 th-my-account__group th-my-account__group--addresses">\n <div class=th-my-account__title>Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.shippingaddresses>Shipping Addresses</a></li>\n <li><a href="" data-ui-sref=my-account.paymentprofiles>Payment Profiles</a></li>\n <li><a href="" data-ui-sref=my-account.billingaddresses>Billing Addresses</a></li>\n </ul>\n </div>\n <div class="col-xs-12 col-sm-6 th-my-account__group th-my-account__group--email">\n <div class=th-my-account__title>Email & Password</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.change-email>Change Email Address</a></li>\n <li><a href="" data-ui-sref=my-account.change-password>Change Password</a></li>\n </ul>\n </div>\n </div>\n </div>\n</div>'),a.put("my-account/orders.detail.html",'<div class="th-order-detail container">\n <div class=row>\n <div class=col-xs-12>\n\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class="th-order-detail__header row">\n <div class=col-xs-12>\n <div class="th-order-detail__title th-order-detail__header__title">Order Details</div>\n </div>\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-6">\n <div class=th-order-detail__header__order-date>Placed on <span>{{::vm.order.orderDate | date}}</span></div>\n <div class=th-order-detail__header__order-details>\n <span class=th-order-detail__header__order-details__order-number>Order <span>#{{::vm.order.orderId}}</span></span> | <span class=th-order-detail__header__order-details__order-status>{{::vm.order.orderStatus}}</span>\n </div>\n <div class="panel panel-default th-order-detail__items">\n <div class=panel-body>\n <div class="row th-order-detail__items__product" data-ng-repeat="product in vm.order.orderItems">\n <div class="col-xs-3 col-sm-3 col-md-3 th-order-detail__items__product__img">\n <a href ui-sref="product({slug: product.slug})"><img data-ng-src={{product.imageUrl}} width=100%></a>\n </div>\n <div class="col-xs-6 col-sm-6 col-md-6">\n <div class=th-order-detail__items__product__name>\n <a href ui-sref="product({slug: product.slug})">{{::product.productName}}</a>\n </div>\n <div class=th-order-detail__items__product__qty>Qty: {{::product.quantity}}</div>\n <div class=th-order-detail__items__product__options>{{::product.options}}</div>\n </div>\n <div class="col-xs-3 col-sm-3 col-md-3">\n <div class="th-order-detail__items__product__price align-right currency">{{::product.price.subtotal | currency}}</div>\n </div>\n </div>\n </div>\n <div class=panel-footer>\n <div class="row th-order-detail__items__discount" data-ng-repeat="discount in vm.order.discounts">\n <div class=col-xs-8>{{::discount.couponCode}}</div>\n <div class="align-right col-xs-4 currency">-{{::discount.value | currency}}</div>\n </div>\n <div class="row th-order-detail__items__shipping">\n <div class=col-xs-8>Shipping</div>\n <div class="align-right col-xs-4">{{::vm.order.totals.shipping | currency}}</div>\n </div>\n <div class="row th-order-detail__items__tax">\n <div class=col-xs-8>Tax</div>\n <div class="align-right col-xs-4">{{::vm.order.totals.taxTotal | currency}}</div>\n </div>\n <div class="row th-order-detail__items__total">\n <div class=col-xs-8>Total</div>\n <div class="align-right col-xs-4">{{::vm.order.totals.grandTotal | currency}}</div>\n </div>\n </div>\n </div>\n </div>\n\n <div class="col-xs-12 col-sm-6">\n <div class=th-order-detail__paid-with>\n <div class=th-order-detail__title>Paid With</div>\n <div class="panel panel-default th-order-detail__paid-with">\n <div class=panel-body>\n <div class=th-credit-card__img data-ng-class="{\'th-credit-card__img--visa\': vm.order.paymentProfile.paymentMethod == \'Visa\', \'th-credit-card__img--amex\': vm.order.paymentProfile.paymentMethod == \'American Express\', \'th-credit-card__img--discover\': vm.order.paymentProfile.paymentMethod == \'Discover\', \'th-credit-card__img--mastercard\': vm.order.paymentProfile.paymentMethod == \'MasterCard\'}"></div>\n <span class=th-order-detail__paid-with__card-number>{{::vm.order.paymentProfile.PCIaaS_MaskedCardRef}}</span>\n </div>\n </div>\n </div>\n <div class=th-order-detail__shipping>\n <div class=th-order-detail__title>Shipping</div>\n <div class="panel panel-default">\n <div class=panel-body>\n <div class=th-order-detail__shipping__name>{{::vm.order.shippingAddress.firstName}} {{::vm.order.shippingAddress.lastName}}</div>\n <div class=th-order-detail__shipping__address-1>{{::vm.order.shippingAddress.address1}}</div>\n <div class=th-order-detail__shipping__address-2>{{::vm.order.shippingAddress.address2}}</div>\n <div>\n <span class=th-order-detail__shipping__city>{{::vm.order.shippingAddress.city}}</span>,\n <span class=th-order-detail__shipping__state>{{::vm.order.shippingAddress.state}}</span>\n <span class=th-order-detail__shipping__zip>{{::vm.order.shippingAddress.postalCode}}</span>\n </div>\n <div data-ng-if="vm.order.trackingDetails.length > 0">\n <hr>\n <div class=th-order-detail__shipping__tracking-detail data-ng-repeat="tracking in vm.order.trackingDetails">\n <div data-ng-if="tracking.shippingGateway != \'OTHER\'">\n <div data-ng-bind-html=tracking.shippingMethodName></div>\n <div>\n Tracking: <span data-ng-if=tracking.trackingUri><a data-ng-href={{::tracking.trackingUri}} target=_blank>{{::tracking.trackingNumber}}</a></span>\n <span data-ng-if=!tracking.trackingUri>{{::tracking.trackingNumber}}</span>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n </div>\n </div>\n <div class=th-order-detail__notes data-ng-if="vm.order.misc.comment != \'\'">\n <div class=th-order-detail__title>Notes</div>\n <div class="panel panel-default">\n <div class=panel-body>\n <div>{{::vm.order.misc.comment || "No Notes"}}</div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left"></i>  Back to My Account\n </a>\n </div>\n </div>\n </div>\n</div>'), +a.put("my-account/orders.html","<div ui-view></div>"),a.put("my-account/orders.list.html",'<div class="th-orders-list container" data-ng-cloak="" data-ng-init=vm.init()>\n <div class=row>\n <div class=col-xs-12>\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n Orders\n </div>\n\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n\n <div data-ng-if="vm.orders.length == 0">\n <p class=text-muted>\n You haven\'t placed an order with us yet.\n </p>\n </div>\n\n <div data-ng-if="vm.orders.length > 0">\n <div class=th-orders-list__page-size>\n <select ng-options="item.text for item in vm.pageSizes" ng-model=vm.selectedPageSize ng-change=vm.getOrders()></select>\n </div>\n\n <div data-vn-order-list-view="" orders=vm.orders class="hidden-sm hidden-md hidden-lg hidden-xl"></div>\n <div data-vn-order-table="" orders=vm.orders class=hidden-xs></div>\n\n <div class="well well-sm th-orders-list__pagination">\n <span>{{vm.startIndex}} - {{vm.endIndex}} of {{vm.cursor.total}}</span>\n <div class=pull-right>\n <pagination total-items=vm.cursor.total ng-model=vm.currentPage class=pagination-sm previous-text=‹ next-text=› items-per-page=vm.selectedPageSize.value ng-change=vm.getOrders() max-size=vm.maxSize></pagination>\n </div>\n </div>\n </div>\n\n\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left"></i>  Back to My Account\n </a>\n </div>\n </div>\n </div>\n</div>'),a.put("my-account/payment-profiles.html",'<div class="th-my-account th-payment-profiles container" data-ng-cloak="">\n\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n {{vm.pageTitle}}\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-6 col-md-6">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n <div data-ng-show="!vm.paymentProfileToEdit && !vm.paymentProfileToAdd" class=animate-show>\n <div class=th-list>\n <div class=th-list__header ng-repeat-end>\n <a class=th-list__header__item href data-ng-click=vm.addPaymentProfile()><i class="fa fa-plus"></i>  Add a\n Credit Card</a>\n </div>\n <div data-ng-repeat="paymentProfile in vm.paymentProfiles" class=th-list__item>\n <div class=styled-optionbox-option>\n <div vn-credit-card-display-actions data-payment-profile=paymentProfile data-on-make-preferred-clicked=vm.makePaymentProfilePreferred($index) data-on-delete-clicked=vm.deletePaymentProfile(paymentProfile) data-on-edit-clicked=vm.editPaymentProfile(paymentProfile)>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div data-ng-show=vm.paymentProfileToAdd class="th-address__enterAddress animate-show">\n <div data-vn-credit-card-editor="" data-ng-if=vm.paymentProfileToAdd data-card=vm.paymentProfileToAdd.card data-title="Edit Shipping Address" data-on-save=vm.saveNewPaymentProfile() data-on-cancel=vm.cancelAddPaymentProfile() data-show-save-button=true data-save-text=add data-show-cancel-button=true>\n </div>\n </div>\n\n </div>\n <div class="col-xs-12 col-sm-5 col-md-4 col-md-offset-1 th-my-account__group">\n <div class=th-my-account__title>More Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.shippingaddresses>Shipping Addresses</a></li>\n <li><a href="" data-ui-sref=my-account.billingaddresses>Billing Addresses</a></li>\n </ul>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left"></i>  Back to My Account\n </a>\n </div>\n\n</div>'),a.put("my-account/shipping-addresses.html",'<div class="th-my-account container" data-ng-cloak="">\n\n <div class="th-my-account__breadcrumbs row">\n <div class=col-xs-12>\n <div ncy-breadcrumb></div>\n </div>\n </div>\n\n <div class=th-my-account__title>\n {{vm.pageTitle}}\n </div>\n\n <div class=row>\n <div class="col-xs-12 col-sm-7 col-md-6">\n <div class=th-my-account__overlay data-ng-if=vm.loading vn-busy-animation vn-busy-animation-show="{{ vm.loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-my-account__overlay--loader></div>\n <div data-ng-show="!vm.addressToEdit && !vm.addressToAdd" class="th-address__choose animate-show">\n <div class=th-address__choose__options>\n <a href data-ng-click=vm.addAddress() class=th-address__choose__options__new-option ng-repeat-end>\n <i class="fa fa-plus"></i>  Add a Shipping Address\n </a>\n <div data-ng-repeat="shippingAddress in vm.shippingAddresses" class=th-address__choose__options__option>\n <div class=styled-optionbox-option>\n <div vn-address-display-actions="" data-address=shippingAddress data-on-make-preferred-clicked=vm.makeAddressPreferred($index) data-on-delete-clicked=vm.deleteAddress(address) data-on-edit-clicked="vm.editAddress(address, $index)" data-shipping=true></div>\n </div>\n </div>\n </div>\n </div>\n <div data-ng-show=vm.addressToEdit class="th-address__enterAddress animate-show">\n <div data-vn-address-editor="" data-ng-if=vm.addressToEdit data-countries=vm.countries data-address=vm.addressToEdit data-title="Edit Shipping Address" data-on-save=vm.saveEditedAddress() data-on-cancel=vm.cancelEditAddress() data-show-save-button=true data-save-text=save data-show-cancel-button=true data-shipping=true>\n </div>\n </div>\n <div data-ng-show=vm.addressToAdd class="th-address__enterAddress animate-show">\n <div data-vn-address-editor="" data-ng-if=vm.addressToAdd data-countries=vm.countries data-address=vm.addressToAdd data-title="Edit Shipping Address" data-on-save=vm.saveNewAddress() data-on-cancel=vm.cancelAddAddress() data-show-save-button=true data-save-text=add data-show-cancel-button=true data-shipping=true>\n </div>\n </div>\n\n </div>\n <div class="col-xs-12 col-sm-5 col-md-4 col-md-offset-1 th-my-account__group">\n <div class=th-my-account__title>More Addresses & Payments</div>\n <ul class=th-my-account__group__links>\n <li><a href="" data-ui-sref=my-account.billingaddresses>Billing Addresses</a></li>\n <li><a href="" data-ui-sref=my-account.paymentprofiles>Payment Profiles</a></li>\n </ul>\n </div>\n </div>\n <div class=th__back-button>\n <a ui-sref=my-account>\n <i class="fa fa-arrow-left"></i>  Back to My Account\n </a>\n </div>\n\n</div>'),a.put("nav-menu-mobile/vn-nav-mobile.tpl.html",'<ul class="nav navbar-nav th-mobile-list">\n <li class="th-mobile-list__item th-mobile-list__item--header">Categories</li>\n <li class="dropdown th-mobile-list__item" ng-repeat="category in categories">\n <a href=# class="dropdown-toggle navbar-link th-dropdown-toggle th-mobile-list__link" ng-if=category.subCategories.length data-toggle=dropdown>\n {{category.name}} <span class="pull-right caret"></span>\n </a>\n <a data-ng-href={{category.url}} class="navbar-link th-dropdown-toggle th-mobile-list__link" ng-if=!category.subCategories.length>\n {{category.name}}\n </a>\n <ul class="dropdown-menu th-mobile-list th-mobile-list--sub" data-ng-if=category.subCategories.length>\n <li>\n <a data-ng-href={{category.url}} class="th-mobile-list__link th-mobile-list__link--sub">\n All {{category.name}}\n </a>\n </li>\n <li data-ng-repeat="subCategory in category.subCategories">\n <a class="th-mobile-list__link th-mobile-list__link--sub" data-ng-href={{subCategory.url}}>{{subCategory.name}}</a>\n </li>\n </ul>\n </li>\n</ul>'),a.put("nav-menu/vn-nav.tpl.html",'<div class="collapse navbar-collapse" id=th-main-menu data-ng-class="!navCollapsed && \'in\'" data-ng-click="navCollapsed=true">\n <ul class="nav navbar-nav">\n <li class="dropdown nav-top-level-menu-items" data-ng-repeat="category in smartNavCategories">\n <a class=navbar-link data-ng-href="{{ category.url }}">\n {{category.name}}\n <span data-ng-if=category.subCategories.length class="caret th-dropdown-toggle"></span>\n </a>\n <ul vn-show-on-dropdown-hover class=dropdown-menu data-ng-if=category.subCategories.length>\n <li data-ng-repeat="subCategory in category.subCategories">\n <a data-ng-href="{{ subCategory.url }}">{{subCategory.name}}</a>\n </li>\n </ul>\n </li>\n <li class=dropdown data-ng-show=displaySmartNavMoreMenuItem>\n <a href=# class=navbar-link data-translate=header.smartNavMoreLinkText>\n More\n <span class="caret th-dropdown-toggle"></span>\n </a>\n <ul vn-show-on-dropdown-hover class=dropdown-menu>\n <li data-ng-repeat="category in smartNavMoreCategories">\n <a class=navbar-link data-ng-href="{{ category.url }}">{{category.name}}</a>\n </li>\n </ul>\n </li>\n </ul>\n </div>'),a.put("orders/vn-order-list-view.tpl.html",'<div class="th-order-list-view container-fluid">\n <a href ui-sref="my-account.orders.detail({id: order.orderId})" class="th-order-list-view__item list-group-item row" data-ng-repeat="order in orders">\n <div class="col-xs-7 th-order-list-view__item-left">\n <div class=th-order-list-view__item__id data-ng-bind=::order.orderId></div>\n <div class=th-order-list-view__item__num-items>\n {{::order.orderItems.length}} Items\n </div>\n <div class=th-order-list-view__item__status data-ng-bind=::order.orderStatus></div>\n </div>\n <div class="col-xs-5 th-order-list-view__item-right">\n <div class=th-order-list-view__item__date data-ng-bind="::order.orderDate | date"></div>\n <div class=th-order-list-view__item__total data-ng-bind="::order.orderTotal | currency"></div>\n </div>\n </a>\n</div>'),a.put("orders/vn-order-table.tpl.html",'<table class="th-orders-table table table-striped table-hover">\n <thead>\n <tr>\n <th>Order #</th>\n <th>Order Date</th>\n <th>Items</th>\n <th>Order Total</th>\n <th>Status</th>\n </tr>\n </thead>\n <tbody>\n <tr data-ng-repeat="order in orders">\n <td><a href ui-sref="my-account.orders.detail({id: order.orderId})">{{ ::order.orderId }}</a></td>\n <td data-ng-bind="::order.orderDate | date"></td>\n <td data-ng-bind=::order.orderItems.length></td>\n <td data-ng-bind="::order.orderTotal | currency"></td>\n <td data-ng-bind=::order.orderStatus></td>\n </tr>\n </tbody>\n</table>'),a.put("pagination/vnPaginator.tpl.html",'<ul class=pager data-ng-if="cursor.totalPages > 1">\n <li data-ng-class="{disabled: cursor.currentPage == 1}">\n <a href data-ng-click=prevPage()><span class="glyphicon glyphicon-chevron-left"></span></a></li>\n <li data-ng-class="{disabled: cursor.currentPage == cursor.totalPages}">\n <a href data-ng-click=nextPage()><span class="glyphicon glyphicon-chevron-right"></span></a></li>\n</ul>\n\n <div class=pager>\n Page {{ cursor.currentPage }} of {{ cursor.totalPages }}\n </div>'),a.put("pay-with/credit-card-views.html",'<div data-ng-controller="CreditCardViewsCtrl as cc" data-ng-init=cc.init() data-ng-switch=cc.state>\n\n <div data-vn-credit-card-display data-ng-switch-when=VALIDCARDENTERED data-card=cc.card data-on-dirty=cc.setCardValidFalse() data-on-save=cc.saveCreditCard() data-on-click=cc.toggleChange() data-state=cc.displayCardState>\n </div>\n\n <div data-vn-credit-card-editor data-ng-switch-when=ENTERCARD data-card=cc.card data-on-dirty=cc.setCardValidFalse() data-show-save-button=false data-on-save=cc.saveCreditCard()>\n </div>\n\n <div data-vn-credit-card-picker data-ng-switch-when=PICKCARD data-state=cc.pickCardState data-card=cc.card data-card-list=cc.user.paymentProfiles data-on-select="" data-open-credit-cards=true data-close-picker=cc.closePicker() data-choose-picker=cc.choosePicker() data-enter-card=cc.enterCard() data-set-payment-profile=cc.setPaymentProfile(id) data-selected-index=cc.selectedIndex data-on-dirty-card=cc.setCardValidFalse() data-on-save-card=cc.saveCreditCard()>\n </div>\n\n</div>'),a.put("pay-with/vn-credit-card-display-action.html",'<div class="container-fluid vn-credit-card-display-action no-padding">\n <div class=row>\n <div class=col-xs-6>\n <span class=th-credit-card__img data-ng-class=paymentProfile.card.ccCssClass></span>\n   <span>{{ paymentProfile.card.cardNumber.slice(-4) }}</span>\n </div>\n <div class="col-xs-6 align-right">\n <span>{{ paymentProfile.card.expMonth }}/{{ paymentProfile.card.expYear }}</span>\n </div>\n </div>\n\n <div class="row th-address__display__actions">\n <div class="col-xs-6 th-address__display__actions__preferred">\n <span data-ng-if=!paymentProfile.preferred>\n <button class="btn btn-default" data-ng-click=onMakePreferredClicked()>Make Preferred</button>\n </span>\n <span data-ng-if=paymentProfile.preferred><i class="fa fa-check"></i> Preferred</span>\n </div>\n <div class="col-xs-6 align-right">\n <a href data-ng-click="onDeleteClicked({paymentProfile: paymentProfile})">\n <i class="fa fa-trash-o"></i>\n </a>\n </div>\n </div>\n</div>'),a.put("pay-with/vn-credit-card-display.html",'<div class=th-credit-card__display data-ng-class="{ \'-verify-CVV\' : state == \'CVV\'}">\n <div class=row data-ng-class="{\'clickable\': !readonlyVal}" data-ng-cloak data-ng-click=onClick()>\n <div class=col-xs-10>\n <span class=th-credit-card__img data-ng-class=card.ccCssClass></span>\n <span class=th-credit-card__display__last4>{{ card.cardNumber.slice(-4) }}</span>\n <span class=th-credit-card__display__exp>{{card.expMonth }}/{{card.expYear }}</span>\n </div>\n <div class=col-xs-2 data-ng-show=showArrowVal>\n <i class="fa fa-angle-right fa-2x pull-right"></i>\n </div>\n </div>\n <form id=frmCVV name=frmCVV novalidate ng-show="state==\'CVV\'">\n <hr>\n <div class=form-group>\n <div class=row>\n <div class="col-xs-7 th-credit-card__display__verifyCVV">\n <label class=th-credit-card__display__verifyCVV__label>Please verify your card</label>\n </div>\n <div class="col-xs-4 col-sm-2 th-credit-card__display__verifyCVV">\n <input id=inputCreditCardCVV name=inputCreditCardCVV class="form-control input-lg immediate-help" data-vn-placeholder=CVV data-ng-model=card.CVV data-vn-cvv-validate data-vn-cc-type="{{ card.cardTypeName }}" required>\n <input type=hidden data-ng-model=card.pCIaaSId id=hiddenCardID value="{{ card.pCIaaSId }}" name="hiddenCardID">\n <div class="input-help top" ng-if=frmCVV.inputCreditCardCVV.$touched>\n <div class=arrow></div>\n <h4>CVV must:</h4>\n <ul>\n <li ng-class=cvvValidFormat>Be <strong>{{ cvvLength }} digits</strong> long</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </form>\n</div>'),a.put("pay-with/vn-credit-card-editor.html",'<div>\n <div class="credit-card-error -aligned" ng-if=card.pCIaaSError ng-click="card.pCIaaSError = \'\'">\n <div class=row>{{card.pCIaaSError}}</div>\n </div>\n <div class="th-credit-card -aligned" ng-cloak>\n <div class=th-credit-card__strip></div>\n\n <form id=frmCreditCard name=frmCreditCard novalidate data-ng-submit=updateCreditCard()>\n <div class=row>\n <div class=col-xs-9>\n <div class=form-group>\n <input id=inputCreditCardNumber name=inputCreditCardNumber class="form-control input-lg immediate-help" data-vn-placeholder="Credit card number" data-ng-model=card.cardNumber data-vn-format-cc-number data-vn-cc-validate data-vn-cc-type="{{ card.cardTypeName }}" required>\n <data-vn-popover-credit-card></data-vn-popover-credit-card>\n </div>\n <input type=hidden data-ng-hide=true id=hiddenCardType name=hiddenCardType value="{{ card.cardTypeName }}">\n <input type=hidden data-ng-model=card.pCIaaSId id=hiddenCardID value="{{ card.pCIaaSId }}" name="hiddenCardID">\n\n </div>\n <div class=col-xs-3>\n <div class=form-group>\n <input id=inputCreditCardCVV name=inputCreditCardCVV class="form-control input-lg immediate-help" data-vn-placeholder=CVV data-ng-model=card.CVV data-ng-focus=setCCImage() data-ng-blur="setCCImage(\'reset\');" data-vn-cvv-validate data-vn-cc-type="{{ card.cardTypeName }}" required>\n\n <div class="input-help top" ng-if=frmCreditCard.inputCreditCardCVV.$touched>\n <div class=arrow></div>\n <h4>CVV must:</h4>\n <ul>\n <li ng-class=cvvValidFormat>Be <strong>{{ cvvLength }} digits</strong> long</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n\n <div class=row>\n <div class=col-xs-4>\n <div class=form-group>\n <div class="th-credit-card__exp-month th-dropdown" dropdown>\n <button id=inputCreditCardExpMonth name=inputCreditCardExpMonth class="btn btn-default btn-lg dropdown-toggle form-control immediate-help" type=button data-toggle=dropdown dropdown-togle aria-haspopup=true role=button aria-expanded=false data-ng-class="{ \'ng-invalid\': card.expMonth === \'\' || expDateInvalid === undefined, \'ng-valid\': expDateInvalid === \'valid\' }" data-vn-placeholder=MM data-ng-model=card.expMonth value="{{ card.expMonth }}">\n\n {{ card.expMonth }}<span class=caret></span>\n </button>\n <div class="input-help top-left -dropdown" ng-if=frmCreditCard.inputCreditCardExpMonth.$touched>\n <div class=arrow></div>\n <h4>Expiration date must:</h4>\n <ul>\n <li ng-class=expDateInvalid>Be <strong>future</strong> date</li>\n </ul>\n </div>\n <ul class=dropdown-menu role=menu aria-labelledby=inputCreditCardExpMonth>\n <li ng-repeat="month in months track by $index">\n <a role=menuitem tabindex=-1 href data-ng-click="onExpMonthChanged(month, \'inputCreditCardExpMonth\');">\n\n {{ month.label }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class=col-xs-4>\n <div class=form-group>\n <div class="th-credit-card__exp-year th-dropdown" dropdown>\n <button id=inputCreditCardExpYear name=inputCreditCardExpYear class="btn btn-default btn-lg dropdown-toggle form-control immediate-help" type=button data-toggle=dropdown dropdown-toggle aria-haspopup=true role=button aria-expanded=false data-ng-class="{ \'ng-invalid\': card.expYear === \'\' || expDateInvalid === undefined }" data-vn-placeholder=YY data-ng-model=card.expYear value="{{ card.expYear }}">\n\n {{ card.expYear }}<span class=caret></span>\n </button>\n <div class="input-help top-left -dropdown" ng-if=frmCreditCard.inputCreditCardExpYear.$touched>\n <div class=arrow></div>\n <h4>Expiration date must:</h4>\n <ul>\n <li ng-class=expDateInvalid>Be <strong>future</strong> date</li>\n </ul>\n </div>\n <ul class=dropdown-menu role=menu aria-labelledby=inputCreditCardExpYear>\n <li ng-repeat="year in rangeYears() track by $index">\n <a role=menuitem tabindex=-1 href data-ng-click="onExpYearChanged(year, \'inputCreditCardExpYear\');">\n\n {{ year }}\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n <div class=col-xs-4>\n <div class=form-group>\n <span class=th-credit-card__img data-ng-class=card.ccCssClass></span>\n </div>\n </div>\n </div>\n\n </form>\n </div>\n <div class=container-fluid>\n <div class=row data-ng-if=showCancelButtonValue>\n <div class=col-xs-6>\n <button class="btn btn-default btn-block btn-lg th-checkout__step__cancel" data-ng-click=onCancel()>\n {{cancelText}}\n </button>\n </div>\n <div class=col-xs-6>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn__continue" data-ng-click=saveCard() data-ng-enabled=frmAddress.$valid data-ng-if=showSaveButtonValue>\n {{saveText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n <div class=row data-ng-if=!showCancelButtonValue>\n <div class=col-xs-12>\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn__continue" data-ng-click=saveCard() data-ng-enabled=frmAddress.$valid data-ng-if=showSaveButtonValue>\n {{saveText}} <i class="fa fa-angle-right"></i>\n </button>\n </div>\n </div>\n </div>\n</div>'),a.put("pay-with/vn-credit-card-picker.html",'<div ng-cloak>\n\n <div class="th-checkout__step__drawer -left" data-ng-class="{\'-open\': openCreditCards}">\n\n <div class=th-checkout__step__drawer__body data-ng-show=openCreditCards data-ng-cloak data-ng-switch=state>\n\n <div data-ng-switch-when=PICK>\n <a href class=th-checkout__step__drawer__close data-ng-click=closePicker()>\n <i class="fa fa-close fa-2x"></i>\n </a>\n\n <div class=th-checkout__step__drawer__title>Choose credit card</div>\n\n <div class=th-credit-card__choose>\n <div class=th-credit-card__choose__options ng-cloak>\n <label class=th-credit-card__choose__options__option data-ng-repeat="profile in cardList" data-ng-class="{\'-first\' : $index === 0}" for="profile{{ $index }}">\n <div class=styled-optionbox-option>\n <input type=radio id="profile{{ $index }}" name=profile data-ng-value=true data-ng-model=profile.preferred data-ng-class="{\'-inactive\' : !profile.preferred, \'-selected\' : profile.preferred}" data-ng-change="setIndex({{ $index }})">\n\n <div>\n <span class=th-credit-card__img data-ng-class=getCssClass(profile)></span>\n <span class=th-credit-card__display__last4>{{ profile.card.last4 }}</span>\n <span class=th-credit-card__display__exp>{{ profile.card.expMonth }}/{{ profile.card.expYear }}</span>\n </div>\n </div>\n </label>\n\n <a href class=th-credit-card__choose__options__new-option ng-repeat-end ng-cloak data-ng-click=addCard()>\n Enter a different card\n </a>\n </div>\n\n <button class="btn btn-primary btn-block btn-lg th-checkout__step__btn__continue" data-ng-click=choosePicker()>\n Continue <i class="fa fa-angle-right"></i>\n </button>\n </div>\n\n <div class=th__back-button>\n <a href=javascript:void(0); data-ng-click=closePicker()>\n <i class="fa fa-arrow-left"> back</i>\n </a>\n </div>\n </div>\n\n <div data-ng-switch-when=ENTER>\n <div class=th-checkout__step__drawer__title>Add credit card</div>\n <div data-vn-credit-card-editor data-card=card data-on-dirty=onDirtyCard() data-on-save=onSaveCard() data-show-save-button=true>\n </div>\n <div class=th__back-button>\n <a href=javascript:void(0); data-ng-click=goBackFromEnter()>\n <i class="fa fa-arrow-left"> back</i>\n </a>\n </div>\n </div>\n\n </div>\n </div>\n\n</div>'),a.put("popover/vn-popover.tpl.html",'<div class="input-help {{ ::location }}">\n <div class=arrow></div>\n <h4>{{ ::title }}</h4>\n</div>'),a.put("product-image/vn-product-image.tpl.html",'<img data-ng-src="{{ getImagePath(product.imageCollections) }}" class=img-responsive alt="{{ product.name }}">'),a.put("product-search/vnSearchForm.tpl.html",'<div class=th-search role=search>\n <div data-ng-show=showSearch class=th-search__popout>\n <form class=form-inline role=search name=frmSearch data-ng-submit=doSearch() novalidate>\n <div class=form-group>\n <input data-ng-model=searchTerm class=th-search__popout--input placeholder=Search...>\n <button type=button data-ng-click=doSearch() class="btn btn-xs btn-primary th-search__popout--submit">Go!\n </button>\n </div>\n </form>\n </div>\n\n <a id=search-toggle data-ng-click="showSearch = !showSearch" ng-show=allowCollapse type=button class=th-search__trigger data-ng-class="{ \'-position\' : !showSearch }">\n <span class="glyphicon glyphicon-search"></span>\n </a>\n</div>'),a.put("review/review-details-2.html",'<div data-ng-controller=ReviewDetailsCtrl>\n\n <div class=th-checkout__thanks__title>Ship To</div>\n <div class="th-address__display -readonly" data-ng-if=shippingAddress>\n <div vn-address-display data-address=shippingAddress></div>\n </div>\n\n <div class=th-checkout__thanks__title>Shipping Method</div>\n <div class=th-checkout__ship-method>\n <div class=th-checkout__ship-method__display data-ng-if=shippingMethod>\n <div class=th-checkout__ship-method__display__name data-ng-bind-html=shippingMethod.name></div>\n <div class=th-checkout__ship-method__display__price>{{ shippingMethod.price | vnCurrency }}</div>\n </div>\n </div>\n\n <div class=th-checkout__thanks__title>Paid With</div>\n <div data-vn-credit-card-display data-card=payment.card data-state=NOCVV data-show-arrow=false data-readonly=true>\n </div>\n\n <div class=th-checkout__thanks__title>Billing Address</div>\n <div class="th-address__display -readonly" data-ng-if=billingAddress>\n <div vn-address-display data-address=billingAddress></div>\n </div>\n\n</div>'),a.put("review/vn-review-details.html",'<div>\n <div class=th-checkout__thanks__title>Ship To</div>\n <div class=th-checkout__thanks__display>\n <span>{{ shippingAddress.firstName }} {{ shippingAddress.lastName }}</span>\n <span><br>{{ shippingAddress.address1 }}</span>\n <span data-ng-if=shippingAddress.address2><br>{{ shippingAddress.address2 }}</span>\n <span data-ng-if=isShippingLocationUS>\n <span><br>{{ shippingAddress.city }}, {{ shippingAddress.state }} {{ shippingAddress.postalCode }}</span>\n <span><br>{{ shippingAddress.phoneNumber | vnUsPhone }}</span>\n </span>\n\n \n <span data-ng-if=!isShippingLocationUS>\n <span><br>{{ shippingAddress.city }}</span>\n <span><br>{{ shippingAddress.state }} {{ shippingAddress.postalCode }}</span>\n <span><br>{{ shippingAddress.country }}</span>\n <span><br>{{ shippingAddress.phoneNumber }}</span>\n </span>\n \n </div>\n\n <div class=th-checkout__thanks__title>Shipping Method</div>\n <div class="th-checkout__thanks__display container-fluid">\n <div class=row>\n <div class=col-xs-6>\n <div class=th-checkout__thanks__display__name data-ng-bind-html=shippingMethod.name></div>\n </div>\n <div class="col-xs-6 align-right">\n <div class=th-checkout__thanks__display__price>{{ shippingMethod.price | vnCurrency }}</div>\n </div>\n </div>\n\n </div>\n\n <div class=th-checkout__thanks__title>Paid With</div>\n\n <div class="th-checkout__thanks__display container-fluid">\n <div class=row>\n <div class=col-xs-8>\n <span class=th-credit-card__img data-ng-class=payment.card.ccCssClass></span>\n <span class=th-credit-card__display__last4>\n <span class=hidden-xs>{{ payment.card.cardNumber | vnCreditCard:payment.card.cardTypeName}}</span>\n <span class="hidden-sm hidden-md hidden-lg hidden-xl">{{payment.card.last4}}</span>\n </span>\n </div>\n <div class="col-xs-4 align-right">\n <span class=th-credit-card__display__exp>{{payment.card.expMonth }}/{{payment.card.expYear }}</span>\n </div>\n </div>\n </div>\n\n <div class=th-checkout__thanks__title>Billing Address</div>\n <div class=th-checkout__thanks__display>\n <span>{{ billingAddress.firstName }} {{ billingAddress.lastName }}</span>\n <span><br>{{ billingAddress.address1 }}</span>\n <span data-ng-if=billingAddress.address2><br>{{ billingAddress.address2 }}</span>\n <span data-ng-if=isBillingLocationUS>\n <span><br>{{ billingAddress.city }}, {{ billingAddress.state }} {{ billingAddress.postalCode }}</span>\n <span><br>{{ billingAddress.phoneNumber | vnUsPhone }}</span>\n </span>\n\n \n <span data-ng-if=!isBillingLocationUS>\n <span><br>{{ billingAddress.city }}</span>\n <span><br>{{ billingAddress.state }} {{ billingAddress.postalCode }}</span>\n <span><br>{{ billingAddress.country }}</span>\n <span><br>{{ billingAddress.phoneNumber }}</span>\n </span>\n \n </div>\n</div>'),a.put("review/vn-review.html",'<div class=th-checkout__review>\n\n <div class="th-checkout__review__totals clearfix">\n <div class=th-checkout__review__totals__count>{{ cart.totals.qty }} items</div>\n <div class=th-checkout__review__totals__expand ng-class="{expanded: !reviewItems}"><button data-ng-click="reviewItems = !reviewItems"><span></span></button></div>\n <div class=th-checkout__review__totals__amount>{{ cart.totals.items | currency }}</div>\n </div>\n\n <div class=th-checkout__review__items data-ng-show=!reviewItems>\n <div class="th-checkout__review__items__item clearfix" data-ng-repeat="item in cart.items | reverse" data-ng-class="{\'-last\': $last}">\n\n <div class=th-checkout__review__items__item-image>\n <img data-ng-src="{{ item.imgUrl }}">\n </div>\n\n <div class=th-checkout__review__items__item-info>\n <div class=th-checkout__review__items__item-info--name>\n <span>{{ item.name }}</span>\n </div>\n\n <div class=th-checkout__review__items__item-info--price>{{ item.pricing.unitPrice | currency }}</div>\n\n <div class=th-checkout__review__items__item-info--option data-ng-repeat="option in item.options">\n <span>{{ option.optionText }}</span>\n </div>\n\n <div class=item-info-row>\n <div class=th-checkout__review__items__item-info--qty>\n <span>Qty</span> {{ item.qty }}\n </div>\n <div class=th-checkout__review__items_-info--subtotal>{{ item.pricing.subtotal | currency }}</div>\n </div>\n\n <div class=item-info-row data-ng-if="item.giftWrap.price > 0">\n <div class=th-checkout__review__items__item-info--qty>\n <span>Gift Wrap</span>\n </div>\n <div class=th-checkout__review__items__item-info--subtotal>{{ item.giftWrap.price | currency }}</div>\n </div>\n\n <div class=item-info-row data-ng-if="item.giftWrap.message != \'\'">\n <span>Message:</span> "{{ item.giftWrap.message }}"\n </div>\n </div>\n </div>\n </div>\n\n <div class=th-checkout__review__discounts data-ng-if=cart.discounts.length>\n <div class=th-checkout__review__discounts__discount data-ng-repeat="discount in cart.discounts">\n <div class=discount-info-row>\n <div class=th-checkout__review__discounts__discount-info>\n <span>{{ discount.name }}</span>\n </div>\n <div class=th-checkout__review__discounts__discount-info--subtotal>{{ discount.value | vnCurrency }}</div>\n </div>\n </div>\n </div>\n\n <div class=th-checkout__review__store-credit data-ng-if="cart.customer.storeCredit != 0">\n <div class=store-credit-info-row>\n <div class=th-checkout__review__store-credit-info>\n <span>Store Credit</span>\n </div>\n <div class=th-checkout__review__store-credit-info--subtotal>{{ cart.customer.storeCredit | vnCurrency }}</div>\n </div>\n </div>\n\n <div class=th-checkout__review__shipping-method>\n <div class=shipping-method-info-row>\n <div class=th-checkout__review__shipping-method-info>\n <span>Shipping</span>\n \n \n \n </div>\n <div class=th-checkout__review__shipping-method-info--subtotal>{{cart.totals.shipping | vnCurrency }}</div>\n </div>\n </div>\n\n <div class=th-checkout__review__tax>\n <div class=tax-info-row>\n <div class=th-checkout__review__tax-info>\n <span>Tax</span>\n </div>\n <div class=th-checkout__review__tax-info--subtotal>{{ cart.totals.taxTotal | currency }}</div>\n </div>\n </div>\n\n <div class=th-checkout__review__grand-total>\n <div class=grand-total-info-row>\n <div class=th-checkout__review__grand-total-info>\n <span>Grand Total</span>\n </div>\n <div class=th-checkout__review__grand-total-info--subtotal>{{ cart.totals.grandTotal | currency }}</div>\n </div>\n </div>\n</div>'),a.put("ship-method/ship-method.html",'<div class="th-checkout__section-heading th-checkout__ship-method__heading" data-ng-show="checkout.cart.shippingMethods.length > 0">\n Shipping Method\n</div>\n\n<div class=th-checkout__ship-method data-ng-controller=ShipMethodCtrl data-ng-show="checkout.cart.shippingMethods.length > 0" data-ng-switch=isEditable()>\n\n\n <label class=th-checkout__ship-method__method data-ng-switch-when=edit data-ng-repeat="method in checkout.cart.shippingMethods" for="shipping{{ $index }}">\n\n <div class=styled-optionbox-option>\n <input type=radio id="shipping{{ $index }}" name=shipping data-ng-value=true data-ng-model=method.selected data-ng-change="setPreferredShippingMethod({{ $index }})">\n <div>\n <div data-ng-bind-html=method.name class=th-checkout__ship-method__name></div>\n </div>\n </div>\n <div class=th-checkout__ship-method__price>{{ method.price | vnCurrency }}</div>\n\n </label>\n\n <div class=th-checkout__ship-method__display data-ng-switch-when=show>\n <div class=th-checkout__ship-method__display__name data-ng-bind-html=checkout.cart.shippingMethods[currentShippingMethodIdx].name></div>\n <div class=th-checkout__ship-method__display__price>{{ checkout.cart.shippingMethods[currentShippingMethodIdx].price | vnCurrency }}</div>\n\n </div>\n\n</div>'), a.put("ship-to/ship-to-views.html",'<div class=th-checkout__ship-to data-ng-controller="ShipToViewsCtrl as vm" data-ng-switch=vm.state data-ng-init=vm.init()>\n\n <div class=th-address__display data-ng-switch-when=VIEWADDRESS>\n <vn-address-display data-address=vm.shippingAddress data-on-click=vm.editShippingAddress() data-shipping=true data-show-edit-button=vm.shippingAddress></vn-address-display>\n </div>\n\n <div class=th-address__enterAddress data-ng-switch-when=EDITADDRESS ng-cloak>\n <div data-vn-address-editor="" address=vm.shippingAddress countries=vm.countries data-on-save=vm.saveShippingAddress() data-show-save-button=true data-shipping=true data-save-text="Get Shipping Rates"></div>\n </div>\n\n <div vn-address-picker data-ng-switch-when=PICKADDRESS data-address-list=vm.user.shippingAddresses data-new-address-title="Add Shipping Address" data-select-address-title="Choose Shipping Address" data-back-to-text="back to Ship To" data-show-copy-address=vm.showCopyAddress data-countries=vm.countries data-on-address-selected=vm.onAddressSelected() data-shipping=true data-save-address=vm.onAddressAdded(newAddress)></div>\n\n</div>'),a.put("thank-you/thank-you.html",'<div class=th-checkout__thanks ng-cloak="">\n <div class=th-checkout__thanks__header>\n <div class=title>Thank you for your order.</div>\n <div class=order-info>Your order number is No.{{ ::orderId }}</div>\n <div class=action-info>A copy of this has been sent to<br>{{ ::userEmail }}</div>\n\n <br style="clear : both">\n </div>\n\n <div class=container-fluid>\n <div class=row>\n <div class="col-sm-12 col-sm-offset-0 col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2">\n\n <div class=row>\n <div class="th-checkout__thanks__column col-xs-12 col-sm-6 col-md-6">\n <div class=th-checkout__thanks__title>Order Details</div>\n <div vn-review=checkout.cart></div>\n </div>\n <div class="th-checkout__thanks__column col-xs-12 col-sm-6 col-md-6">\n <div vn-review-details shipping-address=checkout.cart.shippingAddress shipping-method=shippingMethod payment=checkout.cart.paymentProfile billing-address=checkout.cart.billingAddress></div>\n </div>\n\n <br style="clear : both">\n </div>\n\n </div>\n </div>\n </div>\n</div>')}]),!function(a,b){b["true"]=a,angular.module("textAngularSetup",[]).value("taOptions",{toolbar:[["h1","h2","h3","h4","h5","h6","p","pre","quote"],["bold","italics","underline","ul","ol","redo","undo","clear"],["justifyLeft","justifyCenter","justifyRight","indent","outdent"],["html","insertImage","insertLink","insertVideo"]],classes:{focussed:"focussed",toolbar:"btn-toolbar",toolbarGroup:"btn-group",toolbarButton:"btn btn-default",toolbarButtonActive:"active",disabled:"disabled",textEditor:"form-control",htmlEditor:"form-control"},setup:{textEditorSetup:function(){},htmlEditorSetup:function(){}},defaultFileDropHandler:function(a,b){var c=new FileReader;return"image"===a.type.substring(0,5)?(c.onload=function(){""!==c.result&&b("insertImage",c.result,!0)},c.readAsDataURL(a),!0):!1}}).value("taSelectableElements",["a","img"]).value("taCustomRenderers",[{selector:"img",customAttribute:"ta-insert-video",renderLogic:function(a){var b=angular.element("<iframe></iframe>"),c=a.prop("attributes");angular.forEach(c,function(a){b.attr(a.name,a.value)}),b.attr("src",b.attr("ta-insert-video")),a.replaceWith(b)}}]).constant("taTranslations",{html:{buttontext:"Toggle HTML",tooltip:"Toggle html / Rich Text"},heading:{tooltip:"Heading "},p:{tooltip:"Paragraph"},pre:{tooltip:"Preformatted text"},ul:{tooltip:"Unordered List"},ol:{tooltip:"Ordered List"},quote:{tooltip:"Quote/unqoute selection or paragraph"},undo:{tooltip:"Undo"},redo:{tooltip:"Redo"},bold:{tooltip:"Bold"},italic:{tooltip:"Italic"},underline:{tooltip:"Underline"},justifyLeft:{tooltip:"Align text left"},justifyRight:{tooltip:"Align text right"},justifyCenter:{tooltip:"Center"},indent:{tooltip:"Increase indent"},outdent:{tooltip:"Decrease indent"},clear:{tooltip:"Clear formatting"},insertImage:{dialogPrompt:"Please enter an image URL to insert",tooltip:"Insert image",hotkey:"the - possibly language dependent hotkey ... for some future implementation"},insertVideo:{tooltip:"Insert video",dialogPrompt:"Please enter a youtube URL to embed"},insertLink:{tooltip:"Insert / edit link",dialogPrompt:"Please enter a URL to insert"}}).run(["taRegisterTool","$window","taTranslations","taSelection",function(a,b,c,d){a("html",{buttontext:c.html.buttontext,tooltiptext:c.html.tooltip,action:function(){this.$editor().switchView()},activeState:function(){return this.$editor().showHtml}});var e=function(a){return function(){return this.$editor().queryFormatBlockState(a)}},f=function(){return this.$editor().wrapSelection("formatBlock","<"+this.name.toUpperCase()+">")};angular.forEach(["h1","h2","h3","h4","h5","h6"],function(b){a(b.toLowerCase(),{buttontext:b.toUpperCase(),tooltiptext:c.heading.tooltip+b.charAt(1),action:f,activeState:e(b.toLowerCase())})}),a("p",{buttontext:"P",tooltiptext:c.p.tooltip,action:function(){return this.$editor().wrapSelection("formatBlock","<P>")},activeState:function(){return this.$editor().queryFormatBlockState("p")}}),a("pre",{buttontext:"pre",tooltiptext:c.pre.tooltip,action:function(){return this.$editor().wrapSelection("formatBlock","<PRE>")},activeState:function(){return this.$editor().queryFormatBlockState("pre")}}),a("ul",{iconclass:"fa fa-list-ul",tooltiptext:c.ul.tooltip,action:function(){return this.$editor().wrapSelection("insertUnorderedList",null)},activeState:function(){return this.$editor().queryCommandState("insertUnorderedList")}}),a("ol",{iconclass:"fa fa-list-ol",tooltiptext:c.ol.tooltip,action:function(){return this.$editor().wrapSelection("insertOrderedList",null)},activeState:function(){return this.$editor().queryCommandState("insertOrderedList")}}),a("quote",{iconclass:"fa fa-quote-right",tooltiptext:c.quote.tooltip,action:function(){return this.$editor().wrapSelection("formatBlock","<BLOCKQUOTE>")},activeState:function(){return this.$editor().queryFormatBlockState("blockquote")}}),a("undo",{iconclass:"fa fa-undo",tooltiptext:c.undo.tooltip,action:function(){return this.$editor().wrapSelection("undo",null)}}),a("redo",{iconclass:"fa fa-repeat",tooltiptext:c.redo.tooltip,action:function(){return this.$editor().wrapSelection("redo",null)}}),a("bold",{iconclass:"fa fa-bold",tooltiptext:c.bold.tooltip,action:function(){return this.$editor().wrapSelection("bold",null)},activeState:function(){return this.$editor().queryCommandState("bold")},commandKeyCode:98}),a("justifyLeft",{iconclass:"fa fa-align-left",tooltiptext:c.justifyLeft.tooltip,action:function(){return this.$editor().wrapSelection("justifyLeft",null)},activeState:function(a){var b=!1;return a&&(b="left"===a.css("text-align")||"left"===a.attr("align")||"right"!==a.css("text-align")&&"center"!==a.css("text-align")&&!this.$editor().queryCommandState("justifyRight")&&!this.$editor().queryCommandState("justifyCenter")),b=b||this.$editor().queryCommandState("justifyLeft")}}),a("justifyRight",{iconclass:"fa fa-align-right",tooltiptext:c.justifyRight.tooltip,action:function(){return this.$editor().wrapSelection("justifyRight",null)},activeState:function(a){var b=!1;return a&&(b="right"===a.css("text-align")),b=b||this.$editor().queryCommandState("justifyRight")}}),a("justifyCenter",{iconclass:"fa fa-align-center",tooltiptext:c.justifyCenter.tooltip,action:function(){return this.$editor().wrapSelection("justifyCenter",null)},activeState:function(a){var b=!1;return a&&(b="center"===a.css("text-align")),b=b||this.$editor().queryCommandState("justifyCenter")}}),a("indent",{iconclass:"fa fa-indent",tooltiptext:c.indent.tooltip,action:function(){return this.$editor().wrapSelection("indent",null)},activeState:function(){return this.$editor().queryFormatBlockState("blockquote")}}),a("outdent",{iconclass:"fa fa-outdent",tooltiptext:c.outdent.tooltip,action:function(){return this.$editor().wrapSelection("outdent",null)},activeState:function(){return!1}}),a("italics",{iconclass:"fa fa-italic",tooltiptext:c.italic.tooltip,action:function(){return this.$editor().wrapSelection("italic",null)},activeState:function(){return this.$editor().queryCommandState("italic")},commandKeyCode:105}),a("underline",{iconclass:"fa fa-underline",tooltiptext:c.underline.tooltip,action:function(){return this.$editor().wrapSelection("underline",null)},activeState:function(){return this.$editor().queryCommandState("underline")},commandKeyCode:117}),a("clear",{iconclass:"fa fa-ban",tooltiptext:c.clear.tooltip,action:function(a,b){this.$editor().wrapSelection("removeFormat",null);var c=angular.element(d.getSelectionElement()),e=function(a){a=angular.element(a);var b=a;angular.forEach(a.children(),function(a){var c=angular.element("<p></p>");c.html(angular.element(a).html()),b.after(c),b=c}),a.remove()};angular.forEach(c.find("ul"),e),angular.forEach(c.find("ol"),e);var f=this.$editor(),g=function(a){a=angular.element(a),a[0]!==f.displayElements.text[0]&&a.removeAttr("class"),angular.forEach(a.children(),g)};angular.forEach(c,g),"li"!==c[0].tagName.toLowerCase()&&"ol"!==c[0].tagName.toLowerCase()&&"ul"!==c[0].tagName.toLowerCase()&&this.$editor().wrapSelection("formatBlock","<p>"),b()}});var g=function(a,b,c){var d=function(){c.updateTaBindtaTextElement(),c.hidePopover()};a.preventDefault(),c.displayElements.popover.css("width","375px");var e=c.displayElements.popoverContainer;e.empty();var f=angular.element('<div class="btn-group" style="padding-right: 6px;">'),g=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" unselectable="on" tabindex="-1">100% </button>');g.on("click",function(a){a.preventDefault(),b.css({width:"100%",height:""}),d()});var h=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" unselectable="on" tabindex="-1">50% </button>');h.on("click",function(a){a.preventDefault(),b.css({width:"50%",height:""}),d()});var i=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" unselectable="on" tabindex="-1">25% </button>');i.on("click",function(a){a.preventDefault(),b.css({width:"25%",height:""}),d()});var j=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" unselectable="on" tabindex="-1">Reset</button>');j.on("click",function(a){a.preventDefault(),b.css({width:"",height:""}),d()}),f.append(g),f.append(h),f.append(i),f.append(j),e.append(f),f=angular.element('<div class="btn-group" style="padding-right: 6px;">');var k=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" unselectable="on" tabindex="-1"><i class="fa fa-align-left"></i></button>');k.on("click",function(a){a.preventDefault(),b.css("float","left"),d()});var l=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" unselectable="on" tabindex="-1"><i class="fa fa-align-right"></i></button>');l.on("click",function(a){a.preventDefault(),b.css("float","right"),d()});var m=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" unselectable="on" tabindex="-1"><i class="fa fa-align-justify"></i></button>');m.on("click",function(a){a.preventDefault(),b.css("float",""),d()}),f.append(k),f.append(m),f.append(l),e.append(f),f=angular.element('<div class="btn-group">');var n=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" unselectable="on" tabindex="-1"><i class="fa fa-trash-o"></i></button>');n.on("click",function(a){a.preventDefault(),b.remove(),d()}),f.append(n),e.append(f),c.showPopover(b),c.showResizeOverlay(b)};a("insertImage",{iconclass:"fa fa-picture-o",tooltiptext:c.insertImage.tooltip,action:function(){var a;return a=b.prompt(c.insertImage.dialogPrompt,"http://"),a&&""!==a&&"http://"!==a?this.$editor().wrapSelection("insertImage",a,!0):void 0},onElementSelect:{element:"img",action:g}}),a("insertVideo",{iconclass:"fa fa-youtube-play",tooltiptext:c.insertVideo.tooltip,action:function(){var a;if(a=b.prompt(c.insertVideo.dialogPrompt,"http://"),a&&""!==a&&"http://"!==a){var d=a.match(/(\?|&)v=[^&]*/);if(d.length>0){var e="http://www.youtube.com/embed/"+d[0].substring(3),f='<img class="ta-insert-video" ta-insert-video="'+e+'" contenteditable="false" src="" allowfullscreen="true" width="300" frameborder="0" height="250"/>';return this.$editor().wrapSelection("insertHTML",f,!0)}}},onElementSelect:{element:"img",onlyWithAttrs:["ta-insert-video"],action:g}}),a("insertLink",{tooltiptext:c.insertLink.tooltip,iconclass:"fa fa-link",action:function(){var a;return a=b.prompt(c.insertLink.dialogPrompt,"http://"),a&&""!==a&&"http://"!==a?this.$editor().wrapSelection("createLink",a,!0):void 0},activeState:function(a){return a?"A"===a[0].tagName:!1},onElementSelect:{element:"a",action:function(a,d,e){a.preventDefault(),e.displayElements.popover.css("width","435px");var f=e.displayElements.popoverContainer;f.empty(),f.css("line-height","28px");var g=angular.element('<a href="'+d.attr("href")+'" target="_blank">'+d.attr("href")+"</a>");g.css({display:"inline-block","max-width":"200px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap","vertical-align":"middle"}),f.append(g);var h=angular.element('<div class="btn-group pull-right">'),i=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" tabindex="-1" unselectable="on"><i class="fa fa-edit icon-edit"></i></button>');i.on("click",function(a){a.preventDefault();var f=b.prompt(c.insertLink.dialogPrompt,d.attr("href"));f&&""!==f&&"http://"!==f&&(d.attr("href",f),e.updateTaBindtaTextElement()),e.hidePopover()}),h.append(i);var j=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" tabindex="-1" unselectable="on"><i class="fa fa-unlink icon-unlink"></i></button>');j.on("click",function(a){a.preventDefault(),d.replaceWith(d.contents()),e.updateTaBindtaTextElement(),e.hidePopover()}),h.append(j);var k=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" tabindex="-1" unselectable="on">Open in New Window</button>');"_blank"===d.attr("target")&&k.addClass("active"),k.on("click",function(a){a.preventDefault(),d.attr("target","_blank"===d.attr("target")?"":"_blank"),k.toggleClass("active"),e.updateTaBindtaTextElement()}),h.append(k),f.append(h),e.showPopover(d)}}})}]),function(){"Use Strict";function a(a){try{return 0!==angular.element(a).length}catch(b){return!1}}function b(a,c){var d=[],e=a.children();return e.length&&angular.forEach(e,function(a){d=d.concat(b(angular.element(a),c))}),void 0!==a.attr(c)&&d.push(a),d}function c(b,c){if(!b||""===b||n.hasOwnProperty(b))throw"textAngular Error: A unique name is required for a Tool Definition";if(c.display&&(""===c.display||!a(c.display))||!c.display&&!c.buttontext&&!c.iconclass)throw'textAngular Error: Tool Definition for "'+b+'" does not have a valid display/iconclass/buttontext value';n[b]=c}var d=!1;/AppleWebKit\/([\d.]+)/.exec(navigator.userAgent)&&(document.addEventListener("click",function(){var a=window.event.target;if(d&&null!==a){for(var b=!1,c=a;null!==c&&"html"!==c.tagName.toLowerCase()&&!b;)b="true"===c.contentEditable,c=c.parentNode;b||(document.getElementById("textAngular-editableFix-010203040506070809").setSelectionRange(0,0),a.focus())}d=!1},!1),angular.element(document).ready(function(){angular.element(document.body).append(angular.element('<input id="textAngular-editableFix-010203040506070809" style="width:1px;height:1px;border:none;margin:0;padding:0;position:absolute; top: -10000; left: -10000;" unselectable="on" tabIndex="-1">'))}));var e=function(){var a,b=-1,c=window.navigator.userAgent,d=c.indexOf("MSIE "),e=c.indexOf("Trident/");if(d>0)b=parseInt(c.substring(d+5,c.indexOf(".",d)),10);else if(e>0){var f=c.indexOf("rv:");b=parseInt(c.substring(f+3,c.indexOf(".",f)),10)}return b>-1?b:a}();"function"!=typeof String.prototype.trim&&(String.prototype.trim=function(){return this.replace(/^\s\s*/,"").replace(/\s\s*$/,"")});var f,g,h,i,j;if(e>8||void 0===e){var k=function(){var a=document.createElement("style");return/AppleWebKit\/([\d.]+)/.exec(navigator.userAgent)&&a.appendChild(document.createTextNode("")),document.head.insertBefore(a,document.head.firstChild),a.sheet}();f=function(){var a=document.createElement("style");return/AppleWebKit\/([\d.]+)/.exec(navigator.userAgent)&&a.appendChild(document.createTextNode("")),document.head.appendChild(a),a.sheet}(),g=function(a,b){i(f,a,b)},i=function(a,b,c){var d;return a.rules?d=Math.max(a.rules.length-1,0):a.cssRules&&(d=Math.max(a.cssRules.length-1,0)),a.insertRule?a.insertRule(b+"{"+c+"}",d):a.addRule(b,c,d),d},h=function(a){j(f,a)},j=function(a,b){a.removeRule?a.removeRule(b):a.deleteRule(b)},i(k,".ta-scroll-window.form-control","height: auto; min-height: 300px; overflow: auto; font-family: inherit; font-size: 100%; position: relative; padding: 0;"),i(k,".ta-root.focussed .ta-scroll-window.form-control","border-color: #66afe9; outline: 0; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);"),i(k,".ta-editor.ta-html","min-height: 300px; height: auto; overflow: auto; font-family: inherit; font-size: 100%;"),i(k,".ta-scroll-window > .ta-bind","height: auto; min-height: 300px; padding: 6px 12px;"),i(k,".ta-root .ta-resizer-handle-overlay","z-index: 100; position: absolute; display: none;"),i(k,".ta-root .ta-resizer-handle-overlay > .ta-resizer-handle-info","position: absolute; bottom: 16px; right: 16px; border: 1px solid black; background-color: #FFF; padding: 0 4px; opacity: 0.7;"),i(k,".ta-root .ta-resizer-handle-overlay > .ta-resizer-handle-background","position: absolute; bottom: 5px; right: 5px; left: 5px; top: 5px; border: 1px solid black; background-color: rgba(0, 0, 0, 0.2);"),i(k,".ta-root .ta-resizer-handle-overlay > .ta-resizer-handle-corner","width: 10px; height: 10px; position: absolute;"),i(k,".ta-root .ta-resizer-handle-overlay > .ta-resizer-handle-corner-tl","top: 0; left: 0; border-left: 1px solid black; border-top: 1px solid black;"),i(k,".ta-root .ta-resizer-handle-overlay > .ta-resizer-handle-corner-tr","top: 0; right: 0; border-right: 1px solid black; border-top: 1px solid black;"),i(k,".ta-root .ta-resizer-handle-overlay > .ta-resizer-handle-corner-bl","bottom: 0; left: 0; border-left: 1px solid black; border-bottom: 1px solid black;"),i(k,".ta-root .ta-resizer-handle-overlay > .ta-resizer-handle-corner-br","bottom: 0; right: 0; border: 1px solid black; cursor: se-resize; background-color: white;")}var l=!1,m=angular.module("textAngular",["ngSanitize","textAngularSetup"]),n={};m.constant("taRegisterTool",c),m.value("taTools",n),m.config([function(){angular.forEach(n,function(a,b){delete n[b]})}]),m.directive("textAngular",["$compile","$timeout","taOptions","taSelection","taExecCommand","textAngularManager","$window","$document","$animate","$log",function(a,b,c,d,e,f,g,h,i,j){return{require:"?ngModel",scope:{},restrict:"EA",link:function(k,l,m,n){var o,p,q,r,s,t,u,v,w,x=m.serial?m.serial:Math.floor(1e16*Math.random()),y=m.name?m.name:"textAngularEditor"+x,z=function(a,c,d){b(function(){var b=function(){a.off(c,b),d()};a.on(c,b)},100)};w=e(m.taDefaultWrap),angular.extend(k,angular.copy(c),{wrapSelection:function(a,b,c){w(a,!1,b),c&&k["reApplyOnSelectorHandlerstaTextElement"+x](),k.displayElements.text[0].focus()},showHtml:!1}),m.taFocussedClass&&(k.classes.focussed=m.taFocussedClass),m.taTextEditorClass&&(k.classes.textEditor=m.taTextEditorClass),m.taHtmlEditorClass&&(k.classes.htmlEditor=m.taHtmlEditorClass),m.taTextEditorSetup&&(k.setup.textEditorSetup=k.$parent.$eval(m.taTextEditorSetup)),m.taHtmlEditorSetup&&(k.setup.htmlEditorSetup=k.$parent.$eval(m.taHtmlEditorSetup)),k.fileDropHandler=m.taFileDrop?k.$parent.$eval(m.taFileDrop):k.defaultFileDropHandler,u=l[0].innerHTML,l[0].innerHTML="",k.displayElements={forminput:angular.element("<input type='hidden' tabindex='-1' style='display: none;'>"),html:angular.element("<textarea></textarea>"),text:angular.element("<div></div>"),scrollWindow:angular.element("<div class='ta-scroll-window'></div>"),popover:angular.element('<div class="popover fade bottom" style="max-width: none; width: 305px;"></div>'),popoverArrow:angular.element('<div class="arrow"></div>'),popoverContainer:angular.element('<div class="popover-content"></div>'),resize:{overlay:angular.element('<div class="ta-resizer-handle-overlay"></div>'),background:angular.element('<div class="ta-resizer-handle-background"></div>'),anchors:[angular.element('<div class="ta-resizer-handle-corner ta-resizer-handle-corner-tl"></div>'),angular.element('<div class="ta-resizer-handle-corner ta-resizer-handle-corner-tr"></div>'),angular.element('<div class="ta-resizer-handle-corner ta-resizer-handle-corner-bl"></div>'),angular.element('<div class="ta-resizer-handle-corner ta-resizer-handle-corner-br"></div>')],info:angular.element('<div class="ta-resizer-handle-info"></div>')}},k.displayElements.popover.append(k.displayElements.popoverArrow),k.displayElements.popover.append(k.displayElements.popoverContainer),k.displayElements.scrollWindow.append(k.displayElements.popover),k.displayElements.popover.on("mousedown",function(a,b){return b&&angular.extend(a,b),a.preventDefault(),!1}),k.showPopover=function(a){k.displayElements.popover.css("display","block"),k.reflowPopover(a),i.addClass(k.displayElements.popover,"in"),z(l,"click keyup",function(){k.hidePopover()})},k.reflowPopover=function(a){k.displayElements.text[0].offsetHeight-51>a[0].offsetTop?(k.displayElements.popover.css("top",a[0].offsetTop+a[0].offsetHeight+"px"),k.displayElements.popover.removeClass("top").addClass("bottom")):(k.displayElements.popover.css("top",a[0].offsetTop-54+"px"),k.displayElements.popover.removeClass("bottom").addClass("top"));var b=k.displayElements.text[0].offsetWidth-k.displayElements.popover[0].offsetWidth,c=a[0].offsetLeft+a[0].offsetWidth/2-k.displayElements.popover[0].offsetWidth/2;k.displayElements.popover.css("left",Math.max(0,Math.min(b,c))+"px"),k.displayElements.popoverArrow.css("margin-left",Math.min(c,Math.max(0,c-b))-11+"px")},k.hidePopover=function(){i.removeClass(k.displayElements.popover,"in",function(){k.displayElements.popover.css("display",""),k.displayElements.popoverContainer.attr("style",""),k.displayElements.popoverContainer.attr("class","popover-content")})},k.displayElements.resize.overlay.append(k.displayElements.resize.background),angular.forEach(k.displayElements.resize.anchors,function(a){k.displayElements.resize.overlay.append(a)}),k.displayElements.resize.overlay.append(k.displayElements.resize.info),k.displayElements.scrollWindow.append(k.displayElements.resize.overlay),k.reflowResizeOverlay=function(a){a=angular.element(a)[0],k.displayElements.resize.overlay.css({display:"block",left:a.offsetLeft-5+"px",top:a.offsetTop-5+"px",width:a.offsetWidth+10+"px",height:a.offsetHeight+10+"px"}),k.displayElements.resize.info.text(a.offsetWidth+" x "+a.offsetHeight)},k.showResizeOverlay=function(a){var b=function(b){var c={width:parseInt(a.attr("width")),height:parseInt(a.attr("height")),x:b.clientX,y:b.clientY};void 0===c.width&&(c.width=a[0].offsetWidth),void 0===c.height&&(c.height=a[0].offsetHeight),k.hidePopover();var d=c.height/c.width,e=function(b){var e={x:Math.max(0,c.width+(b.clientX-c.x)),y:Math.max(0,c.height+(b.clientY-c.y))},f=function(a,b){a=angular.element(a),"img"===a[0].tagName.toLowerCase()&&(b.height&&(a.attr("height",b.height),delete b.height),b.width&&(a.attr("width",b.width),delete b.width)),a.css(b)};if(b.shiftKey){var g=e.y/e.x;f(a,{width:d>g?e.x:e.y/d,height:d>g?e.x*d:e.y})}else f(a,{width:e.x,height:e.y});k.reflowResizeOverlay(a)};h.find("body").on("mousemove",e),z(k.displayElements.resize.overlay,"mouseup",function(){h.find("body").off("mousemove",e),k.showPopover(a)}),b.stopPropagation(),b.preventDefault()};k.displayElements.resize.anchors[3].on("mousedown",b),k.reflowResizeOverlay(a),z(l,"click",function(){k.hideResizeOverlay()})},k.hideResizeOverlay=function(){k.displayElements.resize.overlay.css("display","")},k.setup.htmlEditorSetup(k.displayElements.html),k.setup.textEditorSetup(k.displayElements.text),k.displayElements.html.attr({id:"taHtmlElement"+x,"ng-show":"showHtml","ta-bind":"ta-bind","ng-model":"html"}),k.displayElements.text.attr({id:"taTextElement"+x,contentEditable:"true","ta-bind":"ta-bind","ng-model":"html"}),k.displayElements.scrollWindow.attr({"ng-hide":"showHtml"}),m.taDefaultWrap&&k.displayElements.text.attr("ta-default-wrap",m.taDefaultWrap),m.taUnsafeSanitizer&&(k.displayElements.text.attr("ta-unsafe-sanitizer",m.taUnsafeSanitizer),k.displayElements.html.attr("ta-unsafe-sanitizer",m.taUnsafeSanitizer)),k.displayElements.scrollWindow.append(k.displayElements.text),l.append(k.displayElements.scrollWindow),l.append(k.displayElements.html),k.displayElements.forminput.attr("name",y),l.append(k.displayElements.forminput),m.tabindex&&(l.removeAttr("tabindex"),k.displayElements.text.attr("tabindex",m.tabindex),k.displayElements.html.attr("tabindex",m.tabindex)),m.placeholder&&(k.displayElements.text.attr("placeholder",m.placeholder),k.displayElements.html.attr("placeholder",m.placeholder)),m.taDisabled&&(k.displayElements.text.attr("ta-readonly","disabled"),k.displayElements.html.attr("ta-readonly","disabled"),k.disabled=k.$parent.$eval(m.taDisabled),k.$parent.$watch(m.taDisabled,function(a){k.disabled=a,k.disabled?l.addClass(k.classes.disabled):l.removeClass(k.classes.disabled)})),a(k.displayElements.scrollWindow)(k),a(k.displayElements.html)(k),k.updateTaBindtaTextElement=k["updateTaBindtaTextElement"+x],k.updateTaBindtaHtmlElement=k["updateTaBindtaHtmlElement"+x],l.addClass("ta-root"),k.displayElements.scrollWindow.addClass("ta-text ta-editor "+k.classes.textEditor),k.displayElements.html.addClass("ta-html ta-editor "+k.classes.htmlEditor),k._actionRunning=!1;var A=!1;if(k.startAction=function(){return k._actionRunning=!0,g.rangy&&g.rangy.saveSelection?(A=g.rangy.saveSelection(),function(){A&&g.rangy.restoreSelection(A)}):void 0},k.endAction=function(){k._actionRunning=!1,A&&g.rangy.removeMarkers(A),A=!1,k.updateSelectedStyles(),k.showHtml||k["updateTaBindtaTextElement"+x]()},s=function(){l.addClass(k.classes.focussed),v.focus()},k.displayElements.html.on("focus",s),k.displayElements.text.on("focus",s),t=function(a){return k._actionRunning||h[0].activeElement===k.displayElements.html[0]||h[0].activeElement===k.displayElements.text[0]||(l.removeClass(k.classes.focussed),v.unfocus(),b(function(){l.triggerHandler("blur")},0)),a.preventDefault(),!1},k.displayElements.html.on("blur",t),k.displayElements.text.on("blur",t),k.queryFormatBlockState=function(a){return!k.showHtml&&a.toLowerCase()===h[0].queryCommandValue("formatBlock").toLowerCase()},k.queryCommandState=function(a){return k.showHtml?"":h[0].queryCommandState(a)},k.switchView=function(){k.showHtml=!k.showHtml,k.showHtml?b(function(){return k.displayElements.html[0].focus()},100):b(function(){return k.displayElements.text[0].focus()},100)},m.ngModel){var B=!0;n.$render=function(){if(B){B=!1;var a=k.$parent.$eval(m.ngModel);void 0!==a&&null!==a||!u||""===u||n.$setViewValue(u)}k.displayElements.forminput.val(n.$viewValue),k._elementSelectTriggered||h[0].activeElement===k.displayElements.html[0]||h[0].activeElement===k.displayElements.text[0]||(k.html=n.$viewValue||"")};var C=function(a){return m.required&&n.$setValidity("required",!(!a||""===a.trim())),a};n.$parsers.push(C),n.$formatters.push(C)}else k.displayElements.forminput.val(u),k.html=u;if(k.$watch("html",function(a,b){a!==b&&(m.ngModel&&n.$viewValue!==a&&n.$setViewValue(a),k.displayElements.forminput.val(a))}),m.taTargetToolbars)v=f.registerEditor(y,k,m.taTargetToolbars.split(","));else{var D=angular.element('<div text-angular-toolbar name="textAngularToolbar'+x+'">');m.taToolbar&&D.attr("ta-toolbar",m.taToolbar),m.taToolbarClass&&D.attr("ta-toolbar-class",m.taToolbarClass),m.taToolbarGroupClass&&D.attr("ta-toolbar-group-class",m.taToolbarGroupClass),m.taToolbarButtonClass&&D.attr("ta-toolbar-button-class",m.taToolbarButtonClass),m.taToolbarActiveButtonClass&&D.attr("ta-toolbar-active-button-class",m.taToolbarActiveButtonClass),m.taFocussedClass&&D.attr("ta-focussed-class",m.taFocussedClass),l.prepend(D),a(D)(k.$parent),v=f.registerEditor(y,k,["textAngularToolbar"+x])}k.$on("$destroy",function(){f.unregisterEditor(y)}),k.$on("ta-element-select",function(a,b){v.triggerElementSelect(a,b)}),k.$on("ta-drop-event",function(a,b,c,d){k.displayElements.text[0].focus(),d&&d.files&&d.files.length>0&&(angular.forEach(d.files,function(a){try{return k.fileDropHandler(a,k.wrapSelection)||k.fileDropHandler!==k.defaultFileDropHandler&&k.defaultFileDropHandler(a,k.wrapSelection)}catch(b){j.error(b)}}),c.preventDefault(),c.stopPropagation())}),k._bUpdateSelectedStyles=!1,k.updateSelectedStyles=function(){var a;void 0!==(a=d.getSelectionElement())&&a.parentNode!==k.displayElements.text[0]?v.updateSelectedStyles(angular.element(a)):v.updateSelectedStyles(),k._bUpdateSelectedStyles&&b(k.updateSelectedStyles,200)},o=function(){k._bUpdateSelectedStyles||(k._bUpdateSelectedStyles=!0,k.$apply(function(){k.updateSelectedStyles()}))},k.displayElements.html.on("keydown",o),k.displayElements.text.on("keydown",o),p=function(){k._bUpdateSelectedStyles=!1},k.displayElements.html.on("keyup",p),k.displayElements.text.on("keyup",p),q=function(a,b){b&&angular.extend(a,b),k.$apply(function(){return v.sendKeyCommand(a)?(k._bUpdateSelectedStyles||k.updateSelectedStyles(),a.preventDefault(),!1):void 0})},k.displayElements.html.on("keypress",q),k.displayElements.text.on("keypress",q),r=function(){k._bUpdateSelectedStyles=!1,k.$apply(function(){k.updateSelectedStyles()})},k.displayElements.html.on("mouseup",r),k.displayElements.text.on("mouseup",r)}}}]).factory("taBrowserTag",[function(){return function(a){return a?""===a?void 0===e?"div":8>=e?"P":"p":8>=e?a.toUpperCase():a:8>=e?"P":"p"}}]).factory("taExecCommand",["taSelection","taBrowserTag","$document",function(a,b,c){var d=/^(address|article|aside|audio|blockquote|canvas|dd|div|dl|fieldset|figcaption|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|noscript|ol|output|p|pre|section|table|tfoot|ul|video)$/gi,e=/^(ul|li|ol)$/gi,f=function(b,c){var d,e,f=b.find("li");for(e=f.length-1;e>=0;e--)d=angular.element("<"+c+">"+f[e].innerHTML+"</"+c+">"),b.after(d);b.remove(),a.setSelectionToElementEnd(d[0])},g=function(b,c){var d=angular.element("<"+c+">"+b[0].innerHTML+"</"+c+">");b.after(d),b.remove(),a.setSelectionToElementEnd(d.find("li")[0])},h=function(c,d,e){for(var f="",g=0;g<c.length;g++)f+="<"+b("li")+">"+c[g].innerHTML+"</"+b("li")+">";var h=angular.element("<"+e+">"+f+"</"+e+">");d.after(h),d.remove(),a.setSelectionToElementEnd(h.find("li")[0])};return function(i){return i=b(i),function(j,k,l){var m,n,o,p,q,r=angular.element("<"+i+">"),s=a.getSelectionElement(),t=angular.element(s);if(void 0!==s){var u=s.tagName.toLowerCase();if("insertorderedlist"===j.toLowerCase()||"insertunorderedlist"===j.toLowerCase()){var v=b("insertorderedlist"===j.toLowerCase()?"ol":"ul");if(u===v)return f(t,i);if("li"===u&&t.parent()[0].tagName.toLowerCase()===v&&1===t.parent().children().length)return f(t.parent(),i);if("li"===u&&t.parent()[0].tagName.toLowerCase()!==v&&1===t.parent().children().length)return g(t.parent(),v);if(u.match(d)&&!t.hasClass("ta-bind")){if("ol"===u||"ul"===u)return g(t,v);var w=!1;return angular.forEach(t.children(),function(a){a.tagName.match(d)&&(w=!0)}),w?h(t.children(),t,v):h([angular.element("<div>"+s.innerHTML+"</div>")[0]],t,v)}if(u.match(d)){if(p=a.getOnlySelectedElements(),1===p.length&&("ol"===p[0].tagName.toLowerCase()||"ul"===p[0].tagName.toLowerCase()))return p[0].tagName.toLowerCase()===v?f(angular.element(p[0]),i):g(angular.element(p[0]),v);o="";var x=[];for(m=0;m<p.length;m++)if(3!==p[m].nodeType){var y=angular.element(p[m]);o+="<"+b("li")+">"+y[0].innerHTML+"</"+b("li")+">",x.unshift(y)}return n=angular.element("<"+v+">"+o+"</"+v+">"), x.pop().replaceWith(n),angular.forEach(x,function(a){a.remove()}),void a.setSelectionToElementEnd(n[0])}}else if("formatblock"===j.toLowerCase()){var z=l.toLowerCase().replace(/[<>]/gi,"");for(n="li"===u?t.parent():t;!n[0].tagName.match(d);)n=n.parent(),u=n[0].tagName.toLowerCase();if(u===z){p=n.children();var A=!1;for(m=0;m<p.length;m++)A=A||p[m].tagName.match(d);A?(n.after(p),q=n.next(),n.remove(),n=q):(r.append(n[0].childNodes),n.after(r),n.remove(),n=r)}else if(n.parent()[0].tagName.toLowerCase()!==z||n.parent().hasClass("ta-bind"))if(u.match(e))n.wrap(l);else{p=a.getOnlySelectedElements(),0===p.length&&(p=[n[0]]);var B=!1;if(angular.forEach(p,function(a){3!==a.nodeType&&a.tagName.match(d)||(B=!0)}),B)for(;3===p[0].nodeType||!p[0].tagName.match(d);)p=[p[0].parentNode];if(angular.element(p[0]).hasClass("ta-bind"))n=angular.element(l),n[0].innerHTML=p[0].innerHTML,p[0].innerHTML=n[0].outerHTML;else if("blockquote"===z){for(o="",m=0;m<p.length;m++)o+=p[m].outerHTML;n=angular.element(l),n[0].innerHTML=o,p[0].parentNode.insertBefore(n[0],p[0]),angular.forEach(p,function(a){a.parentNode.removeChild(a)})}else for(m=0;m<p.length;m++)n=angular.element(l),n[0].innerHTML=p[m].innerHTML,p[m].parentNode.insertBefore(n[0],p[m]),p[m].parentNode.removeChild(p[m])}else{var C=n.parent(),D=C.contents();for(m=0;m<D.length;m++)C.parent().hasClass("ta-bind")&&3===D[m].nodeType&&(r=angular.element("<"+i+">"),r[0].innerHTML=D[m].outerHTML,D[m]=r[0]),C.parent()[0].insertBefore(D[m],C[0]);C.remove()}return void a.setSelectionToElementEnd(n[0])}}try{c[0].execCommand(j,k,l)}catch(E){}}}}]).directive("taBind",["taSanitize","$timeout","$window","$document","taFixChrome","taBrowserTag","taSelection","taSelectableElements","taApplyCustomRenderers","taOptions",function(a,b,c,f,i,j,k,m,n,o){return{require:"ngModel",scope:{},link:function(j,p,q,r){var s,t,u=void 0!==p.attr("contenteditable")&&p.attr("contenteditable"),v=u||"textarea"===p[0].tagName.toLowerCase()||"input"===p[0].tagName.toLowerCase(),w=!1,x=!1,y=q.taUnsafeSanitizer||o.disableSanitizer;void 0===q.taDefaultWrap&&(q.taDefaultWrap="p"),""===q.taDefaultWrap?(s="",t=void 0===e?"<div><br></div>":e>=11?"<p><br></p>":8>=e?"<P> </P>":"<p> </p>"):(s=void 0===e||e>=11?"<"+q.taDefaultWrap+"><br></"+q.taDefaultWrap+">":8>=e?"<"+q.taDefaultWrap.toUpperCase()+"></"+q.taDefaultWrap.toUpperCase()+">":"<"+q.taDefaultWrap+"></"+q.taDefaultWrap+">",t=void 0===e||e>=11?"<"+q.taDefaultWrap+"><br></"+q.taDefaultWrap+">":8>=e?"<"+q.taDefaultWrap.toUpperCase()+"> </"+q.taDefaultWrap.toUpperCase()+">":"<"+q.taDefaultWrap+"> </"+q.taDefaultWrap+">"),p.addClass("ta-bind");var z=function(){if(u)return p[0].innerHTML;if(v)return p.val();throw"textAngular Error: attempting to update non-editable taBind"},A=function(a){a||(a=z()),a===t?""!==r.$viewValue&&r.$setViewValue(""):r.$viewValue!==a&&r.$setViewValue(a)};if(j.$parent["updateTaBind"+(q.id||"")]=function(){w||A()},v)if(u){if(p.on("cut",function(a){w?a.preventDefault():b(function(){A()},0)}),p.on("paste",function(a,b){b&&angular.extend(a,b);var d;if(a.clipboardData||a.originalEvent&&a.originalEvent.clipboardData?d=(a.originalEvent||a).clipboardData.getData("text/plain"):c.clipboardData&&(d=c.clipboardData.getData("Text")),!d&&!w)return!0;if(a.preventDefault(),!w){var e=angular.element("<div></div>");if(e[0].innerHTML=d,d=e.text(),f[0].selection){var g=f[0].selection.createRange();g.pasteHTML(d)}else f[0].execCommand("insertText",!1,d);A()}}),p.on("keyup",function(a,b){if(b&&angular.extend(a,b),!w){if(""!==s&&13===a.keyCode&&!a.shiftKey){var c=k.getSelectionElement();if(c.tagName.toLowerCase()!==q.taDefaultWrap&&"li"!==c.tagName.toLowerCase()&&(""===c.innerHTML.trim()||"<br>"===c.innerHTML.trim())){var d=angular.element(s);angular.element(c).replaceWith(d),k.setSelectionToElementStart(d[0])}}var e=z();""!==s&&""===e.trim()&&(p[0].innerHTML=s,k.setSelectionToElementStart(p.children()[0])),A(e)}}),p.on("blur",function(){x=!1,w||A(),r.$render()}),q.placeholder&&(e>8||void 0===e)){var B;if(!q.id)throw"textAngular Error: An unique ID is required for placeholders to work";B=g("#"+q.id+".placeholder-text:before",'content: "'+q.placeholder+'"'),j.$on("$destroy",function(){h(B)})}p.on("focus",function(){x=!0,r.$render()}),p.on("mousedown",function(a,b){b&&angular.extend(a,b),a.stopPropagation()})}else p.on("paste cut",function(){w||b(function(){r.$setViewValue(z())},0)}),p.on("change blur",function(){w||r.$setViewValue(z())});var C=function(b){return r.$oldViewValue=a(i(b),r.$oldViewValue,y)},D=function(a){return q.required&&r.$setValidity("required",!(!a||a.trim()===t||""===a.trim())),a};r.$parsers.push(C),r.$parsers.push(D),r.$formatters.push(C),r.$formatters.push(D);var E=function(a){return j.$emit("ta-element-select",this),a.preventDefault(),!1},F=function(a,c){if(c&&angular.extend(a,c),!l&&!w){l=!0;var d;d=a.originalEvent?a.originalEvent.dataTransfer:a.dataTransfer,j.$emit("ta-drop-event",this,a,d),b(function(){l=!1},100)}};j.$parent["reApplyOnSelectorHandlers"+(q.id||"")]=function(){w||angular.forEach(m,function(a){p.find(a).off("click",E).on("click",E)})};var G=function(a){p[0].innerHTML=a};r.$render=function(){var a=r.$viewValue||"";f[0].activeElement!==p[0]?u?(q.placeholder?""===a?(x?p.removeClass("placeholder-text"):p.addClass("placeholder-text"),G(s)):(p.removeClass("placeholder-text"),G(a)):G(""===a?s:a),w?p.off("drop",F):(angular.forEach(m,function(a){p.find(a).on("click",E)}),p.on("drop",F))):"textarea"!==p[0].tagName.toLowerCase()&&"input"!==p[0].tagName.toLowerCase()?G(n(a)):p.val(a):u&&p.removeClass("placeholder-text")},q.taReadonly&&(w=j.$parent.$eval(q.taReadonly),w?(p.addClass("ta-readonly"),("textarea"===p[0].tagName.toLowerCase()||"input"===p[0].tagName.toLowerCase())&&p.attr("disabled","disabled"),void 0!==p.attr("contenteditable")&&p.attr("contenteditable")&&p.removeAttr("contenteditable")):(p.removeClass("ta-readonly"),"textarea"===p[0].tagName.toLowerCase()||"input"===p[0].tagName.toLowerCase()?p.removeAttr("disabled"):u&&p.attr("contenteditable","true")),j.$parent.$watch(q.taReadonly,function(a,b){b!==a&&(a?(p.addClass("ta-readonly"),("textarea"===p[0].tagName.toLowerCase()||"input"===p[0].tagName.toLowerCase())&&p.attr("disabled","disabled"),void 0!==p.attr("contenteditable")&&p.attr("contenteditable")&&p.removeAttr("contenteditable"),angular.forEach(m,function(a){p.find(a).on("click",E)}),p.off("drop",F)):(p.removeClass("ta-readonly"),"textarea"===p[0].tagName.toLowerCase()||"input"===p[0].tagName.toLowerCase()?p.removeAttr("disabled"):u&&p.attr("contenteditable","true"),angular.forEach(m,function(a){p.find(a).off("click",E)}),p.on("drop",F)),w=a)})),u&&!w&&(angular.forEach(m,function(a){p.find(a).on("click",E)}),p.on("drop",F),p.on("blur",function(){/AppleWebKit\/([\d.]+)/.exec(navigator.userAgent)&&(d=!0)}))}}}]).factory("taApplyCustomRenderers",["taCustomRenderers",function(a){return function(c){var d=angular.element("<div></div>");return d[0].innerHTML=c,angular.forEach(a,function(a){var c=[];a.selector&&""!==a.selector?c=d.find(a.selector):a.customAttribute&&""!==a.customAttribute&&(c=b(d,a.customAttribute)),angular.forEach(c,function(b){b=angular.element(b),a.selector&&""!==a.selector&&a.customAttribute&&""!==a.customAttribute?void 0!==b.attr(a.customAttribute)&&a.renderLogic(b):a.renderLogic(b)})}),d[0].innerHTML}}]).directive("taMaxText",function(){return{restrict:"A",require:"ngModel",link:function(a,b,c,d){function e(a){var b=angular.element("<div/>");b.html(a);var c=b.text().length;return f>=c?(d.$setValidity("taMaxText",!0),a):void d.$setValidity("taMaxText",!1)}var f=parseInt(a.$eval(c.taMaxText));if(isNaN(f))throw"Max text must be an integer";c.$observe("taMaxText",function(a){if(f=parseInt(a),isNaN(f))throw"Max text must be an integer";d.$dirty&&d.$setViewValue(d.$viewValue)}),d.$parsers.unshift(e)}}}).directive("taMinText",function(){return{restrict:"A",require:"ngModel",link:function(a,b,c,d){function e(a){var b=angular.element("<div/>");b.html(a);var c=b.text().length;return!c||c>=f?(d.$setValidity("taMinText",!0),a):void d.$setValidity("taMinText",!1)}var f=parseInt(a.$eval(c.taMinText));if(isNaN(f))throw"Min text must be an integer";c.$observe("taMinText",function(a){if(f=parseInt(a),isNaN(f))throw"Min text must be an integer";d.$dirty&&d.$setViewValue(d.$viewValue)}),d.$parsers.unshift(e)}}}).factory("taFixChrome",function(){var a=function(a){for(var b=angular.element("<div>"+a+"</div>"),c=angular.element(b).find("span"),d=0;d<c.length;d++){var e=angular.element(c[d]);e.attr("style")&&e.attr("style").match(/line-height: 1.428571429;|color: inherit; line-height: 1.1;/i)&&(e.attr("style",e.attr("style").replace(/( |)font-family: inherit;|( |)line-height: 1.428571429;|( |)line-height:1.1;|( |)color: inherit;/gi,"")),e.attr("style")&&""!==e.attr("style")||(e.next().length>0&&"BR"===e.next()[0].tagName&&e.next().remove(),e.replaceWith(e[0].innerHTML)))}var f=b[0].innerHTML.replace(/style="[^"]*?(line-height: 1.428571429;|color: inherit; line-height: 1.1;)[^"]*"/gi,"");return f!==b[0].innerHTML&&(b[0].innerHTML=f),b[0].innerHTML};return a}).factory("taSanitize",["$sanitize",function(a){return function(c,d,e){var f=angular.element("<div>"+c+"</div>");angular.forEach(b(f,"align"),function(a){a.css("text-align",a.attr("align")),a.removeAttr("align")});var g;c=f[0].innerHTML;try{g=a(c),e&&(g=c)}catch(h){g=d||""}return g}}]).directive("textAngularToolbar",["$compile","textAngularManager","taOptions","taTools","taToolExecuteAction","$window",function(a,b,c,d,e,f){return{scope:{name:"@"},restrict:"EA",link:function(g,h,i){if(!g.name||""===g.name)throw"textAngular Error: A toolbar requires a name";angular.extend(g,angular.copy(c)),i.taToolbar&&(g.toolbar=g.$parent.$eval(i.taToolbar)),i.taToolbarClass&&(g.classes.toolbar=i.taToolbarClass),i.taToolbarGroupClass&&(g.classes.toolbarGroup=i.taToolbarGroupClass),i.taToolbarButtonClass&&(g.classes.toolbarButton=i.taToolbarButtonClass),i.taToolbarActiveButtonClass&&(g.classes.toolbarButtonActive=i.taToolbarActiveButtonClass),i.taFocussedClass&&(g.classes.focussed=i.taFocussedClass),g.disabled=!0,g.focussed=!1,g._$element=h,h[0].innerHTML="",h.addClass("ta-toolbar "+g.classes.toolbar),g.$watch("focussed",function(){g.focussed?h.addClass(g.classes.focussed):h.removeClass(g.classes.focussed)});var j=function(b,c){var d;if(d=angular.element(b&&b.display?b.display:"<button type='button'>"),d.addClass(g.classes.toolbarButton),d.attr("name",c.name),d.attr("unselectable","on"),d.attr("ng-disabled","isDisabled()"),d.attr("tabindex","-1"),d.attr("ng-click","executeAction()"),d.attr("ng-class","displayActiveToolClass(active)"),b&&b.tooltiptext&&d.attr("title",b.tooltiptext),d.on("mousedown",function(a,b){return b&&angular.extend(a,b),a.preventDefault(),!1}),b&&!b.display&&!c._display&&(d[0].innerHTML="",b.buttontext&&(d[0].innerHTML=b.buttontext),b.iconclass)){var e=angular.element("<i>"),f=d[0].innerHTML;e.addClass(b.iconclass),d[0].innerHTML="",d.append(e),f&&""!==f&&d.append(" "+f)}return c._lastToolDefinition=angular.copy(b),a(d)(c)};g.tools={},g._parent={disabled:!0,showHtml:!1,queryFormatBlockState:function(){return!1},queryCommandState:function(){return!1}};var k={$window:f,$editor:function(){return g._parent},isDisabled:function(){return this.$eval("disabled")||this.$eval("disabled()")||"html"!==this.name&&this.$editor().showHtml||this.$parent.disabled||this.$editor().disabled},displayActiveToolClass:function(a){return a?g.classes.toolbarButtonActive:""},executeAction:e};angular.forEach(g.toolbar,function(a){var b=angular.element("<div>");b.addClass(g.classes.toolbarGroup),angular.forEach(a,function(a){g.tools[a]=angular.extend(g.$new(!0),d[a],k,{name:a}),g.tools[a].$element=j(d[a],g.tools[a]),b.append(g.tools[a].$element)}),h.append(b)}),g.updateToolDisplay=function(a,b,c){var d=g.tools[a];if(d){if(d._lastToolDefinition&&!c&&(b=angular.extend({},d._lastToolDefinition,b)),null===b.buttontext&&null===b.iconclass&&null===b.display)throw'textAngular Error: Tool Definition for updating "'+a+'" does not have a valid display/iconclass/buttontext value';null===b.buttontext&&delete b.buttontext,null===b.iconclass&&delete b.iconclass,null===b.display&&delete b.display;var e=j(b,d);d.$element.replaceWith(e),d.$element=e}},g.addTool=function(a,b,c,e){g.tools[a]=angular.extend(g.$new(!0),d[a],k,{name:a}),g.tools[a].$element=j(d[a],g.tools[a]);var f;void 0===c&&(c=g.toolbar.length-1),f=angular.element(h.children()[c]),void 0===e?(f.append(g.tools[a].$element),g.toolbar[c][g.toolbar[c].length-1]=a):(f.children().eq(e).after(g.tools[a].$element),g.toolbar[c][e]=a)},b.registerToolbar(g),g.$on("$destroy",function(){b.unregisterToolbar(g.name)})}}}]).service("taToolExecuteAction",["$q",function(a){return function(b){void 0!==b&&(this.$editor=function(){return b});var c=a.defer(),d=c.promise,e=this.$editor();d["finally"](function(){e.endAction.call(e)});var f;try{f=this.action(c,e.startAction())}catch(g){}(f||void 0===f)&&c.resolve()}}]).service("textAngularManager",["taToolExecuteAction","taTools","taRegisterTool",function(a,b,c){var d={},e={};return{registerEditor:function(c,f,g){if(!c||""===c)throw"textAngular Error: An editor requires a name";if(!f)throw"textAngular Error: An editor requires a scope";if(e[c])throw'textAngular Error: An Editor with name "'+c+'" already exists';var h=[];return angular.forEach(g,function(a){d[a]&&h.push(d[a])}),e[c]={scope:f,toolbars:g,_registerToolbar:function(a){this.toolbars.indexOf(a.name)>=0&&h.push(a)},editorFunctions:{disable:function(){angular.forEach(h,function(a){a.disabled=!0})},enable:function(){angular.forEach(h,function(a){a.disabled=!1})},focus:function(){angular.forEach(h,function(a){a._parent=f,a.disabled=!1,a.focussed=!0})},unfocus:function(){angular.forEach(h,function(a){a.disabled=!0,a.focussed=!1})},updateSelectedStyles:function(a){angular.forEach(h,function(b){angular.forEach(b.tools,function(b){b.activeState&&(b.active=b.activeState(a))})})},sendKeyCommand:function(c){var d=!1;return(c.ctrlKey||c.metaKey)&&angular.forEach(b,function(b,e){if(b.commandKeyCode&&b.commandKeyCode===c.which)for(var g=0;g<h.length;g++)if(void 0!==h[g].tools[e]){a.call(h[g].tools[e],f),d=!0;break}}),d},triggerElementSelect:function(a,c){var d=function(a,b){for(var c=!0,d=0;d<b.length;d++)c=c&&a.attr(b[d]);return c},e=[],g={},i=!1;c=angular.element(c);var j=!1;if(angular.forEach(b,function(a,b){a.onElementSelect&&a.onElementSelect.element&&a.onElementSelect.element.toLowerCase()===c[0].tagName.toLowerCase()&&(!a.onElementSelect.filter||a.onElementSelect.filter(c))&&(j=j||angular.isArray(a.onElementSelect.onlyWithAttrs)&&d(c,a.onElementSelect.onlyWithAttrs),(!a.onElementSelect.onlyWithAttrs||d(c,a.onElementSelect.onlyWithAttrs))&&(g[b]=a))}),j?(angular.forEach(g,function(a,b){a.onElementSelect.onlyWithAttrs&&d(c,a.onElementSelect.onlyWithAttrs)&&e.push({name:b,tool:a})}),e.sort(function(a,b){return b.tool.onElementSelect.onlyWithAttrs.length-a.tool.onElementSelect.onlyWithAttrs.length})):angular.forEach(g,function(a,b){e.push({name:b,tool:a})}),e.length>0)for(var k=0;k<e.length;k++){for(var l=e[k].tool,m=e[k].name,n=0;n<h.length;n++)if(void 0!==h[n].tools[m]){l.onElementSelect.action.call(h[n].tools[m],a,c,f),i=!0;break}if(i)break}return i}}},e[c].editorFunctions},retrieveEditor:function(a){return e[a]},unregisterEditor:function(a){delete e[a]},registerToolbar:function(a){if(!a)throw"textAngular Error: A toolbar requires a scope";if(!a.name||""===a.name)throw"textAngular Error: A toolbar requires a name";if(d[a.name])throw'textAngular Error: A toolbar with name "'+a.name+'" already exists';d[a.name]=a,angular.forEach(e,function(b){b._registerToolbar(a)})},retrieveToolbar:function(a){return d[a]},retrieveToolbarsViaEditor:function(a){var b=[],c=this;return angular.forEach(this.retrieveEditor(a).toolbars,function(a){b.push(c.retrieveToolbar(a))}),b},unregisterToolbar:function(a){delete d[a]},updateToolsDisplay:function(a){var b=this;angular.forEach(a,function(a,c){b.updateToolDisplay(c,a)})},resetToolsDisplay:function(){var a=this;angular.forEach(b,function(b,c){a.resetToolDisplay(c)})},updateToolDisplay:function(a,b){var c=this;angular.forEach(d,function(d,e){c.updateToolbarToolDisplay(e,a,b)})},resetToolDisplay:function(a){var b=this;angular.forEach(d,function(c,d){b.resetToolbarToolDisplay(d,a)})},updateToolbarToolDisplay:function(a,b,c){if(!d[a])throw'textAngular Error: No Toolbar with name "'+a+'" exists';d[a].updateToolDisplay(b,c)},resetToolbarToolDisplay:function(a,c){if(!d[a])throw'textAngular Error: No Toolbar with name "'+a+'" exists';d[a].updateToolDisplay(c,b[c],!0)},removeTool:function(a){delete b[a],angular.forEach(d,function(b){delete b.tools[a];for(var c=0;c<b.toolbar.length;c++){for(var d,e=0;e<b.toolbar[c].length;e++){if(b.toolbar[c][e]===a){d={group:c,index:e};break}if(void 0!==d)break}void 0!==d&&(b.toolbar[d.group].slice(d.index,1),b._$element.children().eq(d.group).children().eq(d.index).remove())}})},addTool:function(a,b,e,f){c(a,b),angular.forEach(d,function(c){c.addTool(a,b,e,f)})},addToolToToolbar:function(a,b,e,f,g){c(a,b),d[e].addTool(a,b,f,g)},refreshEditor:function(a){if(!e[a])throw'textAngular Error: No Editor with name "'+a+'" exists';e[a].scope.updateTaBindtaTextElement(),e[a].scope.$$phase||e[a].scope.$digest()}}}]).service("taSelection",["$window","$document",function(a,b){var c=b[0],d=function(a){if(a.hasChildNodes())return a.firstChild;for(;a&&!a.nextSibling;)a=a.parentNode;return a?a.nextSibling:null},e=function(a){var b=a.startContainer,c=a.endContainer;if(b===c)return[b];for(var e=[];b&&b!==c;)b=d(b),b.parentNode===a.commonAncestorContainer&&e.push(b);for(b=a.startContainer;b&&b!==a.commonAncestorContainer;)b.parentNode===a.commonAncestorContainer&&e.unshift(b),b=b.parentNode;return e};return{getOnlySelectedElements:function(){if(window.getSelection){var b=a.getSelection();if(!b.isCollapsed)return e(b.getRangeAt(0))}return[]},getSelectionElement:function(){var b,d,e;return c.selection&&c.selection.createRange?(b=c.selection.createRange(),b.parentElement()):a.getSelection&&(d=a.getSelection(),d.getRangeAt?d.rangeCount>0&&(b=d.getRangeAt(0)):(b=c.createRange(),b.setStart(d.anchorNode,d.anchorOffset),b.setEnd(d.focusNode,d.focusOffset),b.collapsed!==d.isCollapsed&&(b.setStart(d.focusNode,d.focusOffset),b.setEnd(d.anchorNode,d.anchorOffset))),b)?(e=b.commonAncestorContainer,3===e.nodeType?e.parentNode:e):void 0},setSelectionToElementStart:function(b){if(c.createRange&&a.getSelection){var d=c.createRange();d.selectNodeContents(b),d.setStart(b,0),d.setEnd(b,0);var e=a.getSelection();e.removeAllRanges(),e.addRange(d)}else if(c.selection&&c.body.createTextRange){var f=c.body.createTextRange();f.moveToElementText(b),f.collapse(!0),f.moveEnd("character",0),f.moveStart("character",0),f.select()}},setSelectionToElementEnd:function(b){if(c.createRange&&a.getSelection){var d=c.createRange();d.selectNodeContents(b),d.collapse(!1);var e=a.getSelection();e.removeAllRanges(),e.addRange(d)}else if(c.selection&&c.body.createTextRange){var f=c.body.createTextRange();f.moveToElementText(b),f.collapse(!1),f.select()}}}}])}()}({},function(){return this}()),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.4",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.4",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.4",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.4",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27|32)/.test(b.which)&&!/input|textarea/i.test(b.target.tagName)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g&&27!=b.which||g&&27==b.which)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(b.target);38==b.which&&j>0&&j--,40==b.which&&j<i.length-1&&j++, ~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',g.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in").attr("aria-hidden",!1),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a('<div class="modal-backdrop '+e+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-m<p.top?"bottom":"right"==h&&k.right+l>p.width?"left":"left"==h&&k.left-l<p.left?"right":h,f.removeClass(n).addClass(h)}var q=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(q,h);var r=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",r).emulateTransitionEnd(c.TRANSITION_DURATION):r()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.4",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.4",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.4",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.4",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a(document.body).height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/scripts/ee9d6c80.scripts.js b/scripts/ee9d6c80.scripts.js new file mode 100644 index 00000000..70721480 --- /dev/null +++ b/scripts/ee9d6c80.scripts.js @@ -0,0 +1,2 @@ +"use strict";angular.module("config",[]).constant("ENV",{name:"samplestore",host:"",apiEndpoint:"/api/v1"}),angular.module("Volusion.templates",[]),angular.module("Volusion.services",[]),angular.module("Volusion.controllers",[]),angular.module("methodApp",["ngAnimate","ngCookies","ngResource","ngSanitize","ngTouch","ui.bootstrap","pascalprecht.translate","snap","textAngular","ui.router","ngRoute","config","seo","angulartics","Volusion.toolboxCommon","Volusion.controllers","Volusion.services","Volusion.templates"]).config(["$locationProvider","translateProvider","vnAppConfigProvider","ENV",function(a,b,c,d){a.html5Mode(!0),c.setApiPath(d.host,d.apiEndpoint);var e={urlPrefix:c.getPrefix(),region:c.getRegion(),lang:c.getLang(),country:c.getCountry(),disableTranslations:c.getTranslations()};b.configure(e)}]).run(["snapRemote","$rootScope","$window","themeSettings","vnCart","translate","vnModalService","vnViewPortWatch",function(a,b,c,d,e,f,g,h){b.defaultProductImage="/images/theme/tcp-no-image.jpg",e.init(),f.addParts("message"),h.setBreakpoints([{name:"Non-Desktop",mediaQuery:"screen and (max-width: 991px)",onMatch:function(){b.isInDesktopMode=!1,b.$emit("enterNonDesktop")},onUnmatch:function(){a.close(),b.isInDesktopMode=!0,b.$emit("exitNonDesktop")}}]),b.$on("$stateChangeStart",function(d,e){b.isCartOpen?(b.closeCart(),"checkout"!==e.name&&d.preventDefault()):(c.scrollTo(0,0),a.close())}),b.$on("$stateChangeSuccess",function(a,c){b.currentState=c.name}),b.$on("VN_HTTP_500_ERROR",function(){g.showError("views/server-error.html")})}]),angular.module("Volusion.controllers").controller("MainCtrl",["$scope","$rootScope","$location","$window","$timeout","vnApi","themeSettings","vnSiteConfig","vnImagePreloader",function(a,b,c,d,e,f,g,h,i){b.seo={},h.getConfig().then(function(b){a.config=b.data}),g.getThemeSettings().then(function(b){a.themeSettings=b;var c=[];angular.forEach(a.themeSettings.pages.home.slider.slides,function(a){c.push(a.imageUrl)}),i.preloadImages(c)})}]),angular.module("Volusion.controllers").controller("HomeCtrl",["$scope","$filter","vnApi",function(a,b,c){c.Product().get({filter:"featured",pageSize:4}).$promise.then(function(b){a.featuredProducts=b.data}),a.getImagePath=function(a){var c=b("vnProductImageFilter")(a);return""===c?"/images/theme/tcp-no-image.jpg":c}}]),angular.module("Volusion.controllers").controller("PageCtrl",["$rootScope","$scope","article",function(a,b,c){b.article=c.data,a.seo=angular.extend(a.seo||{},b.article.seo)}]),angular.module("Volusion.controllers").controller("HeaderCtrl",["$rootScope","$scope","$timeout","$filter","translate","vnCart","vnContentManager","vnAppConfig","vnSearchManager","snapRemote",function(a,b,c,d,e,f,g,h,i,j){b.showSearchMobile=!0,b.showSearchDesktop=!1,b.searchLocal=i.getSearchText()||"",e.addParts("common"),e.addParts("header"),b.getCartItemsCount=function(){return f.getCartItemsCount()},a.snapToggle=function(b){a.isInDesktopMode?j.toggle(b):j.getSnapper().then(function(a){b===a.state().state?a.close():a.expand(b)})},a.openLeftNav=function(){a.exitCartState(),j.getSnapper().then(function(a){a.open("left")})},b.$watch(function(){return g.getHeaderState()},function(a){b.headerState=a},!0),b.$watch(function(){return g.getCheckoutHeaderState()},function(a){b.checkoutHeaderState=a},!0)}]),angular.module("methodApp").controller("ThemeSettingsCtrl",["$scope","$http","$location","vnContentManager",function(a,b,c,d){var e,f;if(d.hideAppHeader(),d.hideAppFooter(),c.absUrl().indexOf("127.0.0.1")>=0||c.absUrl().indexOf("localhost")>=0)f="dev",e="/settings/themeSettings.json",a.debug=!0;else{f="prod";var g=c.search();e="/api/v1/themes/"+g.themeName+"/versions/"+g.themeVersion+"/settings"}b.get(e).success(function(b){a.settings="dev"===f?b:b.data}),a.addSlide=function(){a.settings.pages.home.slider.slides.push({headline:"",subHeadline:"",imageUrl:"",linksTo:""})},a.save=function(){"dev"===f?(console.info("would be saved if you were in production"),window.alert("would be saved if you were in production, but since you're not:=, simply copy the debug output to your themeSettings.json file manually.")):b.put(e,a.settings).success(function(){console.log("successfully saved")})},a.$on("$destroy",function(){d.showAppHeader(),d.showAppFooter()})}]),angular.module("Volusion.templates",[]).run(["$templateCache",function(a){a.put("views/about.html","<section class=container><p>This is the about view.</p></section>"),a.put("views/article.html",'<article data-ng-cloak class=container data-vn-block=article><header><hgroup><h1 data-vn-element=title data-ng-bind-html="article.title | vnLegacyLinkify | html"></h1><h2 data-vn-element=caption data-ng-bind-html="article.caption | vnLegacyLinkify | html"></h2></hgroup></header><div data-vn-element=body data-ng-bind-html="article.body | vnLegacyLinkify | html"></div></article>'),a.put("views/category.html",'<div class="container categories"><div class=row><div class="col-sm-3 col-lg-2 vn-faceted-search" ng-class="{ isMobileAndVisible: true == isMobileAndVisible }" data-ng-hide=!hasFacetsOrCategories><h3 data-ng-show=!showMobileSearch>Narrow By</h3><div vn-faceted-search categories=categoryList facets=facets data-ng-show=mobileDisplay class=vn-faceted-search-control></div></div><div class="col-sm-9 col-lg-10 vn-category-product-tiles" ng-class="{ \'isMobileAndHidden\': true == !isMobileAndHidden }"><div class=row><div class=col-sm-10><div class=page-header><h1>{{category.name}}</h1></div></div><div vn-sort-search class="col-sm-2 vn-sort-desktop-search" data-ng-show=mobileDisplay query-products=queryProducts()></div></div><div class=row><img class="img-responsive center-block" ng-hide=checkForFacetFilters() ng-src={{category.bannerImgUrl}}><p class="col-sm-12 lead" itemprop=description ng-hide=checkForFacetFilters() data-ng-bind-html="category.description | vnLegacyLinkify | html"></p></div><div class="row mobile-filters" data-ng-hide=mobileDisplay ng-class="{ isMobileAndVisible: true == isMobileAndVisible }"><a class="col-xs-6 text-right" href data-ng-click=toggleSearch()><button class="btn btn-default">Filter</button></a> <span class="col-xs-6 text-left" vn-sort-search query-products=queryProducts()></span></div><div class="row th-product__container"><div class="-product-tile-animation col-sm-6 col-md-4 col-lg-3" data-ng-repeat="product in products track by product.id" data-ng-include=" \'views/partials/product-tile.html\' "></div></div><div class=row data-ng-if="cursor.totalPages > 1"><div class=col-sm-12><div vn-paginator cursor=cursor current-page=currentPage query-fn=queryProducts()></div></div></div></div></div></div>'),a.put("views/contact.html","<section class=container><p>This is the contact view.</p></section>"),a.put("views/home.html",'<div class="container th-content-slider" data-ng-if=themeSettings.pages.home.slider.isEnabled><div class=vn-slider><carousel data-interval=themeSettings.pages.home.slider.interval><slide data-ng-repeat="slide in themeSettings.pages.home.slider.slides" data-active=slide.active><a href={{slide.linksTo}} title="{{slide.headline}} - {{slide.subHeadline}}"><div class=vn-slider__slide data-ng-style="{\'background-image\':\'url({{slide.imageUrl}})\' }"></div></a></slide></carousel></div></div><div class="container th-home-content"><div data-ng-bind-html="themeSettings.pages.home.content1 | vnLegacyLinkify | html"></div><div data-ng-if=themeSettings.pages.home.tiles.isEnabled><div class="visible-xs-block visible-sm-block"><div class=row><div class="col-sm-6 hidden-xs"><a data-ng-href={{themeSettings.pages.home.tiles.tiles.tile1.linkTo}} class="th-promo th-p1"><img ng-src={{themeSettings.pages.home.tiles.tiles.tile1.imageUrl}} class=img-responsive alt=""></a></div><div class=col-sm-6><a data-ng-href={{themeSettings.pages.home.tiles.tiles.tile2.linkTo}} class="th-promo th-p2"><span class=th-title data-translate=home.promoCategoryHeading>Now Stocking Herschel Bags.</span> <span class=th-text data-translate=home.promoCategoryDescription>Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. <span class=th-link data-translate=home.shopNow>Shop Now ></span></span> <img data-ng-src={{themeSettings.pages.home.tiles.tiles.tile2.imageUrl}} class=img-responsive alt=""></a></div></div></div><div class=visible-xs-block><div class=row><div class="col-xs-6 th-p-pad"><a data-ng-href={{themeSettings.pages.home.tiles.tiles.tile1.linkTo}} class="th-promo th-p1-sm"><img ng-src={{themeSettings.pages.home.tiles.tiles.tile1.imageUrl}} class=img-responsive alt=""></a></div><div class="col-xs-6 th-p-pad"><a data-ng-href={{themeSettings.pages.home.tiles.tiles.tile3.linkTo}} class="th-promo th-p3-sm"><img ng-src={{themeSettings.pages.home.tiles.tiles.tile3.imageUrl}} class=img-responsive alt=""></a></div></div></div><div class="visible-xs-block visible-sm-block"><div class=th-last><div class=row><div class="col-sm-6 hidden-xs"><a data-ng-href={{themeSettings.pages.home.tiles.tiles.tile3.linkTo}} class="th-promo th-p3"><img ng-src={{themeSettings.pages.home.tiles.tiles.tile3.imageUrl}} class="img-responsive"></a></div><div class="col-sm-6 th-p-pad"><a data-ng-href={{themeSettings.pages.home.tiles.tiles.tile4.linkTo}} class="th-promo th-b1"><img ng-src={{themeSettings.pages.home.tiles.tiles.tile4.imageUrl}} class=img-responsive alt=""></a> <a data-ng-href={{themeSettings.pages.home.tiles.tiles.tile5.linkTo}} class="th-promo th-b2"><img ng-src={{themeSettings.pages.home.tiles.tiles.tile5.imageUrl}} class=img-responsive alt=""></a> <a data-ng-href={{themeSettings.pages.home.tiles.tiles.tile6.linkTo}} class="th-promo th-b3"><img ng-src={{themeSettings.pages.home.tiles.tiles.tile6.imageUrl}} class=img-responsive alt=""></a></div></div></div></div><div class="visible-md-block visible-lg-block"><div class=row><div class=col-md-4><a data-ng-href={{themeSettings.pages.home.tiles.tiles.tile1.linkTo}} class="th-promo th-p1"><img ng-src={{themeSettings.pages.home.tiles.tiles.tile1.imageUrl}} class=img-responsive alt=""></a></div><div class=col-md-4><a data-ng-href={{themeSettings.pages.home.tiles.tiles.tile2.linkTo}} class="th-promo th-p2"><div class=th-title>Now Stocking Herschel Bags.</div><div class=th-text>Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old.<div class=th-link data-translate=home.shopNow>Shop Now ></div></div><img data-ng-src={{themeSettings.pages.home.tiles.tiles.tile2.imageUrl}} class=img-responsive alt=""></a></div><div class=col-md-4><a data-ng-href={{themeSettings.pages.home.tiles.tiles.tile3.linkTo}} class="th-promo th-p3"><img ng-src={{themeSettings.pages.home.tiles.tiles.tile3.imageUrl}} class=img-responsive alt=""></a></div></div></div><div class="visible-md-block visible-lg-block"><div class=th-last><div class=row><div class=col-md-4><a data-ng-href={{themeSettings.pages.home.tiles.tiles.tile4.linkTo}} class="th-promo th-b1"><img data-ng-src={{themeSettings.pages.home.tiles.tiles.tile4.imageUrl}} class=img-responsive alt=""><span class=th-category>New Sunglasses ></span></a></div><div class=col-md-4><a data-ng-href={{themeSettings.pages.home.tiles.tiles.tile5.linkTo}} class="th-promo th-b2"><img data-ng-src={{themeSettings.pages.home.tiles.tiles.tile5.imageUrl}} class=img-responsive alt=""><span class=th-category>Townsend Shoes ></span></a></div><div class=col-md-4><a data-ng-href={{themeSettings.pages.home.tiles.tiles.tile6.linkTo}} class="th-promo th-b3"><img ng-src={{themeSettings.pages.home.tiles.tiles.tile6.imageUrl}} class=img-responsive alt=""></a></div></div></div></div></div><div data-ng-bind-html="themeSettings.pages.home.content2 | vnLegacyLinkify | html"></div><div data-ng-if=themeSettings.pages.home.featuredProducts.isEnabled><div data-tabset><div data-tab><div data-tab-heading data-translate=home.featured>Featured</div><div class="th-products-wrap clearfix"><div class="col-xs-12 col-sm-3 col-md-3" data-ng-repeat="product in featuredProducts" data-ng-include=" \'views/partials/product-tile.html\' "></div></div></div></div></div><div data-ng-bind-html="themeSettings.pages.home.content3 | vnLegacyLinkify | html"></div></div>'),a.put("views/partials/footer.html",'<div data-ng-controller=FooterCtrl><footer class=th-footer data-ng-show=footerState><div class="hidden-lg th-elist"><div class="hidden-xs th-elist__title">Sign-Up for Our Newsletter</div><form class="form-inline th-elist__form" role=form name=MailingList method=post action=/MailingList_subscribe.asp><div class="form-group th-elist__group"><input type=email name=emailaddress class="form-control th-elist__input" placeholder="Sign-up for promotions"></div><button type=submit class="btn btn-default th-elist__submit">Go</button></form></div><div class="container visible-lg-block th-footer__top"><div class=row><div class=col-md-8><div class="row th-footer__site-links"><div class=col-md-4><div data-ng-bind-html="themeSettings.general.footer.content.column1 | vnLegacyLinkify | html"></div></div><div class=col-md-4><div data-ng-bind-html="themeSettings.general.footer.content.column2 | vnLegacyLinkify | html"></div></div><div class=col-md-4><div data-ng-bind-html="themeSettings.general.footer.content.column3 | vnLegacyLinkify | html"></div></div></div></div><div class=col-md-4><div class=th-footer__more-info><div class=th-elist ng-if=themeSettings.general.footer.newsletterSignup.isEnabled><div class=th-elist__title>Sign-up for our Newsletter</div><div class=th-elist__text>Get our latest news and exclusive offers</div><form class="form-inline th-elist__form" role=form name=MailingList method=post action=/MailingList_subscribe.asp><div class="form-group th-elist__group"><input type=email name=emailaddress class="form-control th-elist__input" placeholder="Sign-up for promotions"></div><button type=submit class="btn btn-default th-elist__submit">GO</button></form></div><div data-ng-bind-html="themeSettings.general.footer.content.column4 | vnLegacyLinkify | html"></div></div></div></div></div><div class=container><div class="row th-footer__bottom"><div data-ng-bind-html="themeSettings.general.footer.content.bottomRow | vnLegacyLinkify | html"></div></div></div></footer><footer class=th-checkout-footer data-ng-show=checkoutFooterState><div class=container><div class="row th-footer__bottom"><div data-ng-bind-html="themeSettings.general.footer.content.bottomRow | vnLegacyLinkify | html"></div></div></div></footer></div>'),a.put("views/partials/header.html",'<div data-ng-controller=HeaderCtrl><nav class="navbar navbar-default navbar-static-top th-navbar" role=navigation data-ng-show=headerState><div class="container-fluid hidden-xs hidden-sm th-header-top"><div class=container><div class=row><div class="col-md-6 text-left text-uppercase th-header-top__text"><span data-ng-bind-html="themeSettings.general.header.content.topPromo | vnLegacyLinkify | html"></span></div><div class="col-md-6 text-right th-header-top__text"><data-vn-login-link></data-vn-login-link></div></div></div></div><div class="container th-menu-container"><div class=row><div class="col-xs-3 hidden-md hidden-lg"><button type=button class=navbar-toggle data-ng-init="navCollapsed = true" snap-toggle=left><span class=sr-only data-translate=header.toggleNavigation>Toggle Navigation</span> <span class=icon-bar></span> <span class=icon-bar></span> <span class=icon-bar></span></button></div><div class="col-md-2 hidden-xs hidden-sm"><div class=th-navbar__logo><a href="/"><img data-ng-src="{{config.general.logoUrl }}"></a></div></div><div class="col-xs-6 hidden-md hidden-lg"><div class=th-navbar__logo><a data-ng-href="/"><img data-ng-src="{{config.general.mobileLogoUrl }}"></a></div></div><div class="col-md-8 hidden-xs hidden-sm"><div vn-nav category-list=""></div></div><div class="col-xs-3 col-md-2"><div class="pull-right th-cart-summary"><div class="hidden-xs hidden-sm th-search-popout"><div vn-search-form search-term=searchLocal allow-collapse=true show-search=showSearchDesktop></div></div><div class=th-my-cart><a href class=th-my-cart__link data-ng-click=openCart()><span class=th-my-cart__text data-translate=header.myCart>My Bag</span> <span class=th-my-cart__number>{{ getCartItemsCount() | number}}</span></a></div></div></div></div></div></nav><nav class=th-checkout-header role=navigation data-ng-show=checkoutHeaderState><a data-ng-href="/"><img data-ng-src="{{config.general.mobileLogoUrl }}"></a></nav></div>'),a.put("views/partials/mobile-menu.html",'<div data-snap-drawer class=th-mobile-menu data-ng-controller=HeaderCtrl><div class="hidden-md hidden-lg th-search"><div vn-search-form search-term=searchLocal allow-collapse=false show-search=showSearchMobile></div></div><div class=th-mobile-menu__list><div vn-nav-mobile></div></div><div class="th-mobile-menu__list th-mobile-menu__list--footer" data-ng-bind-html="themeSettings.general.footer.content.column1 | vnLegacyLinkify | html"></div><div class="th-mobile-menu__list th-mobile-menu__list--footer" data-ng-bind-html="themeSettings.general.footer.content.column2 | vnLegacyLinkify | html"></div><div class="th-mobile-menu__list th-mobile-menu__list--footer" data-ng-bind-html="themeSettings.general.footer.content.column3 | vnLegacyLinkify | html"></div></div>'),a.put("views/partials/product-descriptions.html",'<div data-accordion data-close-others=true><div data-accordion-group data-is-open=accordionPanels.isopen1 data-ng-show=product.descriptions.detail><div data-accordion-heading><span data-translate=product.description>Description</span> <i class="pull-right glyphicon" data-ng-class="{\'glyphicon-chevron-down\': accordionPanels.isopen1, \'glyphicon-chevron-right\': !accordionPanels.isopen1}"></i></div><span class=th-product-description__accordion-text itemprop=description data-ng-bind-html="product.descriptions.detail | vnLegacyLinkify | html"></span></div><div data-accordion-group data-is-open=accordionPanels.isopen2 data-ng-show=product.descriptions.features><div data-accordion-heading><span data-translate=product.features>Features</span> <i class="pull-right glyphicon" data-ng-class="{\'glyphicon-chevron-down\': accordionPanels.isopen2, \'glyphicon-chevron-right\': !accordionPanels.isopen2}"></i></div><span class=th-product-description__accordion-text data-ng-bind-html="product.descriptions.features | vnLegacyLinkify | html"></span></div><div data-accordion-group data-is-open=accordionPanels.isopen3 data-ng-show=product.descriptions.techSpecs><div data-accordion-heading><span data-translate=product.techSpecs>Tech Specs</span> <i class="pull-right glyphicon" data-ng-class="{\'glyphicon-chevron-down\': accordionPanels.isopen3, \'glyphicon-chevron-right\': !accordionPanels.isopen3}"></i></div><span class=th-product-description__accordion-text data-ng-bind-html="product.descriptions.techSpecs | vnLegacyLinkify | html"></span></div><div data-accordion-group data-is-open=accordionPanels.isopen4 data-ng-show=product.descriptions.extendedInfo><div data-accordion-heading><span data-translate=product.extendedInfo>Extended Info</span> <i class="pull-right glyphicon" data-ng-class="{\'glyphicon-chevron-down\': accordionPanels.isopen4, \'glyphicon-chevron-right\': !accordionPanels.isopen4}"></i></div><span class=th-product-description__accordion-text data-ng-bind-html="product.descriptions.extendedInfo | vnLegacyLinkify | html"></span></div></div>'),a.put("views/partials/product-tile.html",'<div class=th-product><span class="hidden-xs icon-th-product__sale" data-ng-show=product.isOnSale></span> <span class="hidden-xs icon-th-product__new" data-ng-show=product.isNew></span><div class=th-product__image><a data-ng-href="{{ product.url }}"><img vn-product-image product=product default-image=defaultProductImage></a></div><div class=th-product__name><a data-ng-href={{product.url}}>{{product.name}}</a></div><div class=th-product__price><span class=th-price--reg data-ng-show="product.pricing.regularPrice > 0"><span class=th-price data-ng-class="{strike: product.pricing.salePrice > 0}">{{product.pricing.regularPrice | currency}}</span> <span class="th-price-text th-text-left" data-translate=product.regularPriceLabel></span></span> <span class=th-price--now data-ng-show="product.pricing.salePrice > 0"><span class=th-price>{{product.pricing.salePrice | currency}}</span> <span class=th-price-text data-translate=product.nowPriceLabel></span></span></div></div>'),a.put("views/partials/shopping-cart.html",'<div data-vn-shopping-cart class=th-cart><a data-ng-click=closeCart() class=th-cart__overlay></a><div class=th-cart__panel><div class=th-cart__brand data-ng-if=!isInDesktopMode><button type=button class="navbar-toggle th-cart__brand--search" data-ng-init="navCollapsed = true" data-ng-click=openLeftNav()><span class=sr-only data-translate=header.toggleNavigation>Toggle Navigation</span> <span class=icon-bar></span> <span class=icon-bar></span> <span class=icon-bar></span></button> <img class=th-cart__brand--image data-ng-src="{{ config.general.logoUrl }}" class="img-responsive"><br style="clear: both"></div><div class=th-cart__header><a data-ng-click=closeCart() class=th-cart__header-back tabindex=-1></a> <span class=th-cart__header-title data-translate=cart.lblYourCart>Your Cart</span></div><div class=th-cart__body data-vn-scroll-top><div class=th-cart__body--overlay data-ng-if=loading vn-busy-animation vn-busy-animation-show="{{ loading }}" vn-busy-animation-size=80px vn-busy-animation-class=th-cart__body--overlay--loader></div><div class=th-alert-container><div data-vn-app-message=""></div></div><div class=th-cart__noitems--label data-translate=cart.lblYourCartIsEmpty data-ng-if=cartEmpty>Your cart is empty</div><div class=th-cart__items data-ng-if=!cartEmpty><div class=th-cart__items--gift><input type=checkbox data-ng-model=showGiftOption data-ng-change=resetGiftOptions() id=showGiftOptionInput><label data-translate=cart.lblGift for=showGiftOptionInput>This is a gift</label></div><div class=th-cart__items__item data-ng-repeat="item in cart.items | reverse"><div class=th-cart__items__item--close><button data-ng-click=deleteItem(item.id)><span></span></button></div><div><a data-ng-href="{{ item.productUrl }}"><img class=th-cart__items__item--image data-ng-src="{{ item.imgUrl }}"></a><div><div class=th-cart__items__item--name><a data-ng-href="{{ item.productUrl }}">{{ item.name }}</a></div><div class=th-cart__items__item--price>{{ item.pricing.unitPrice | currency }}</div><div class=th-cart__items__item--option data-ng-repeat="option in item.options"><span>{{ option.optionText }}</span></div></div><br style="clear: both"></div><div class=inline-block-wrap><div class=th-cart__items__item--qty><div data-vn-block=th-qty-counter class=input-group><span class=input-group-btn><button data-vn-element=btn class="btn btn-default" data-ng-click="changeQty(item, item.qty - 1, 500)" data-ng-disabled="item.qty <= 1 || item.qty === \'\'"><span class="glyphicon glyphicon-minus"></span></button></span> <input data-vn-element=input class=form-control data-ng-model=item.qty data-ng-blur="changeQty(item, item.qty)" data-vn-format-quantity> <span class=input-group-btn><button data-vn-element=btn class="btn btn-default" data-ng-disabled="item.qty === 9999999 || item.qty === \'\'" data-ng-click="changeQty(item, item.qty + 1, 500)"><span class="glyphicon glyphicon-plus"></span></button></span></div></div><div class=th-cart__items__item--subtotal>{{ item.pricing.subtotal | vnCurrency }}</div></div><br style="clear: both"><div class="th-cart__items__item__gift animate-if" data-ng-if="showGiftOption && item.isGiftWrapAvailable"><div class=th-cart__items__item__gift--option data-ng-class="{\'-visual-cue\' : visualCue}"><input type=checkbox data-ng-model=item.giftWrap.selected data-ng-change=addGiftWrap()> <span data-translate=cart.lblGiftOption>Add gift wrap for</span> {{ item.giftWrap.price | currency }}</div><textarea class="th-cart__items__item__gift--message animate-if" maxlength=255 data-vn-auto-grow data-ng-trim=false data-ng-if=item.giftWrap.selected data-ng-model=item.giftWrap.message data-ng-blur=addGiftMsg() placeholder="{{ \'cart.lblGiftMessage\' | translate }}"></textarea><div class=th-cart__items__item__gift--message-count data-ng-if=item.giftWrap.selected><span>{{255 - item.giftWrap.message.length}}</span></div></div></div></div></div><div class=th-cart__footer><div class=th-cart__promo-wrap data-ng-if=!cartEmpty><div class=th-cart__promo-add><input class="form-control th-cart__promo-add__input" maxlength=25 data-ng-model=coupon.code data-ng-focus=toggleApplyBtn(true) data-ng-blur=toggleApplyBtn(false) data-ng-keypress=promoInputKeypress($event) placeholder="{{ \'cart.lblAddCoupon\' | translate }}"> <button class="btn btn-primary th-cart__promo-add__apply" data-translate=cart.btnApply data-ng-click=applyCoupon() data-ng-class="{\'th-cart__promo-add__apply--active\': coupon.showApply == true}">Apply</button></div><div class=th-cart__promo-summary data-ng-if=!couponsEmpty data-ng-click=togglePromoList() data-ng-class="{\'th-cart__promo-summary--active\': showPromoList == true}"><span class=th-cart__promo-summary__arrow><span class="glyphicon glyphicon-chevron-down" aria-hidden=true></span></span> <span class=th-cart__promo-summary__count><span class=th-cart__promo-summary__count-number>{{cart.discounts.length | number}}</span>  <span data-ng-if="cart.discounts.length === 1" data-translate=cart.lblPromoApplied>promo applied</span> <span data-ng-if="cart.discounts.length > 1" data-translate=cart.lblPromosApplied>promos applied</span></span> <span class=th-cart__promo-summary__total>{{ cart.totals.discounts | vnCurrency }}</span></div><div class=th-cart__promo-list data-ng-class="{\'th-cart__promo-list--active\': showPromoList == true}" data-ng-if=!couponsEmpty><div class="th-cart__promo inline-block-wrap" data-ng-repeat="coupon in cart.discounts | reverse:orderBy:\'couponCode\'" data-ng-class="{\'-last\': $last}"><div class=th-cart__promo--left><div class=th-cart__promo__close data-ng-if="coupon.couponCode !== \'\'"><button data-ng-click="deleteCoupon(\'{{coupon.id}}\')"><span></span></button></div><div class=th-cart__promo__name><span>{{ coupon.name }}</span></div></div><div class=th-cart__promo--right><div class=th-cart__promo__value><span>{{ coupon.value | vnCurrency }}</span></div></div></div><br style="clear: both"></div></div><div class=th-cart__subtotal data-ng-if=!cartEmpty><div class=th-cart__subtotal--label data-translate=cart.lblSubtotal>Subtotal</div><div class=th-cart__subtotal--price>{{ calcSubtotal | currency }}</div><br style="clear: both"></div><div class=th-cart__checkout><a href=/checkout class="th-cart__checkout-button btn btn-primary" data-translate=cart.btnCheckout data-ng-disabled=cartEmpty>Checkout</a></div></div></div></div>'),a.put("views/partials/social-sharing.html","<a href={{product.sharing.facebook}} class=\"th-social__icon icon-th-social__icon--facebook\" target=_blank></a> <a href={{product.sharing.twitter}} class=\"th-social__icon icon-th-social__icon--twitter\" target=_blank></a> <a href={{product.sharing.tumblr}} class=\"th-social__icon icon-th-social__icon--tumblr\" target=_blank></a> <a href=\"javascript:void((function()%7Bvar%20e=document.createElement('script');e.setAttribute('type','text/javascript');e.setAttribute('charset','UTF-8');e.setAttribute('src','http://assets.pinterest.com/js/pinmarklet.js?r='+Math.random()*99999999);document.body.appendChild(e)%7D)());\" class=\"th-social__icon icon-th-social__icon--pinterest\" target=_blank></a> <a href={{product.sharing.googlePlus}} class=\"th-social__icon icon-th-social__icon--google\" target=_blank></a>"),a.put("views/product.html",'<div class=container itemscope itemtype=http://schema.org/Product><div class=row><div class="col-sm-12 visible-sm-block th-product-details__title"><span itemprop=name data-ng-bind=product.name></span></div></div><div class=row><div class="col-sm-6 col-md-5"><div class="visible-xs-block th-product"><div class="vn-slider vn-slider--product"><carousel data-interval=carousel.interval><slide data-ng-repeat="image in product.currentImageCollection | filter: \'!youtube.com\'" data-active=image.active><div class=vn-slider__slide><img itemprop=image data-ng-src="{{ image.medium }}" class="img-responsive"></div></slide></carousel></div></div><div class=hidden-xs><div class="clearfix th-product-view vn-zoom"><img vn-easy-zoom ng-src=product.image.medium ez-zoom-src=product.image.large ez-adjacent=isInDesktopMode ez-overlay=!isInDesktopMode alt={{product.name}}><div class=th-product-view__alts><span data-ng-click="product.image=image" ng-repeat="image in product.currentImageCollection | filter: \'!youtube.com\'" class="col-xs-3 th-product-view__thumbnail"><img data-ng-src="{{ image.medium }}" class=img-responsive alt=""></span></div></div></div></div><div class="col-sm-6 col-md-7 th-product-details"><div class="row visible-md-block visible-lg-block"><div class="col-xs-12 th-product-details__title"><h1 itemprop=name data-ng-bind=product.name></h1></div></div><div class=row><div class="col-xs-12 col-md-6"><div class="th-product-details__title visible-xs-block"><span itemprop=name data-ng-bind=product.name></span></div><div class=th-product__price--large><span class=th-price--reg data-ng-show="product.pricing.regularPrice > 0"><span class=th-price data-ng-class="{strike: product.pricing.salePrice > 0}"><span itemprop=price data-ng-bind="product.pricing.regularPrice | currency"></span></span> <span class=th-price-text data-translate=product.regularPriceLabel>Reg</span></span> <span class=th-price--now itemscope itemtype=http://schema.org/Offer data-ng-show="product.pricing.salePrice > 0"><span class=th-price><span itemprop=price data-ng-bind="product.pricing.salePrice | currency"></span></span> <span class=th-price-text data-translate=product.nowPriceLabel>Now</span></span></div><div class="hidden-xs th-write-review" data-ng-if=product.avgRating><div data-vn-rating rating-value=product.avgRating editable=isEditable></div></div><div class=th-product__availability data-ng-if=itemSelectionsNotInStock data-ng-cloak>Not in stock</div></div><div class="col-xs-12 col-md-6"><div class=th-product-details__options><div data-vn-product-option data-ng-repeat="option in product.options" data-option=option data-product=product data-save-to=cartItem.options></div></div><div class=row><div class="col-xs-12 col-sm-4 th-qty-wrap"><div data-vn-block=th-qty-counter class=input-group><span class=input-group-btn><button data-vn-element=btn class="btn btn-default" data-ng-click=modifyQty(-1) data-ng-disabled="cartItem.qty <= 1 || cartItem.qty === \'\'"><span class="glyphicon glyphicon-minus"></span></button></span> <input data-vn-element=input class=form-control data-ng-model=cartItem.qty data-ng-blur=postValidateQty() data-vn-format-quantity> <span class=input-group-btn><button data-vn-element=btn class="btn btn-default" data-ng-click=modifyQty(1) data-ng-disabled="cartItem.qty === 9999999 || cartItem.qty === \'\'"><span class="glyphicon glyphicon-plus"></span></button></span></div></div><div class="col-xs-12 col-sm-8 th-product-details__add-to-cart"><button class="btn btn-primary btn-lg btn-block" data-ng-class="{ \'-disabled\' : buttonDisabled }" data-ng-click=addToCart() data-popover="{{ popoverText }}" data-popover-placement=bottom data-analytics-category="element click" data-analytics-label="Add to Cart" data-analytics-location=body-product data-analytics-description="Add to Cart Button" vn-busy-animation vn-busy-animation-show="{{ buttonWait }}" vn-busy-animation-class=th-product-details__add-to-cart--loader><span data-ng-if=!buttonWait data-translate=product.addToCart>Add to Cart</span></button></div></div></div><div class="hidden-xs hidden-sm col-md-12 th-product-description" data-ng-include=" \'views/partials/product-descriptions.html\' "></div><div class="hidden-xs col-sm-12 th-social" data-ng-include=" \'views/partials/social-sharing.html\' "></div></div></div></div><div class="row hidden-md hidden-lg"><div class="col-sm-12 th-product-description" data-ng-include=" \'views/partials/product-descriptions.html\' "></div></div><div class=row><div class="th-social col-xs-12 visible-xs-block" data-ng-include=" \'views/partials/social-sharing.html\' "></div></div><div class=row data-ng-if="relatedProducts.length > 0 || accessories.length > 0"><div class="col-xs-12 th-related-wrap"><div data-tabset><div data-tab data-ng-if="relatedProducts.length > 0" data-active=tabs.relatedProducts.active><div data-tab-heading data-translate=product.related>Related</div><div class="th-products-wrap clearfix"><div class="col-xs-12 col-sm-3 col-md-3" data-ng-repeat="product in relatedProducts | filter: \'!\' + product.id" data-ng-include=" \'views/partials/product-tile.html\' "></div></div></div><div data-tab data-ng-if="accessories.length > 0" data-active=tabs.accessories.active><div data-tab-heading data-translate=product.accessories>Accessories</div><div class="th-products-wrap clearfix"><div class="col-xs-12 col-sm-3 col-md-3" data-ng-repeat="product in accessories" data-ng-include=" \'views/partials/product-tile.html\' "></div></div></div></div></div></div><div class="row th-reviews" data-ng-if=config.general.enableCustomerReviews><div class="col-xs-12 th-reviews__totals"><div class=th-reviews__heading data-translate=product.reviews>Reviews</div><div class=th-reviews__totals--left data-ng-if="ratingsAndReviews.data.reviews.length < 1">Be the first to review!</div><div class=th-reviews__totals--left data-ng-if="ratingsAndReviews.data.reviews.length > 0"><div itemprop=aggregateRating itemscope itemtype=http://schema.org/AggregateRating class=th-reviews__count><meta itemprop=worstRating content=1>This product has received <span itemprop=ratingValue data-ng-bind=ratingsAndReviews.data.avgRating></span> out of <span itemprop=bestRating data-ng-bind=ratingsAndReviews.data.maxRating></span> stars based on <span itemprop=reviewCount data-ng-bind=ratingsAndReviews.cursor.total></span> customer reviews</div><div class=th-reviews__avg><div data-vn-rating rating-value=ratingsAndReviews.data.avgRating maximum=ratingsAndReviews.data.maxRating editable=isEditable></div></div></div><div class=th-reviews__totals--right><a legacy-link="/reviewnew.asp?productcode={{product.code}}" class="btn btn-default btn-grey-sm" data-translate=product.writeAReview>Write a Review ></a></div></div></div><div class="row th-reviews" data-ng-if=config.general.enableCustomerReviews><div data-ng-if="ratingsAndReviews.data.reviews.length > 0" class="col-md-6 th-reviews" itemprop=review itemscope itemtype=http://schema.org/Review data-ng-repeat="review in ratingsAndReviews.data.reviews"><div class=th-reviews__helpful><span data-ng-bind=review.helpful></span> people found the following review helpful</div><div class=th-reviews__ratings><div class=th-reviews__star-group data-vn-rating rating-value=review.rating maximum=ratingsAndReviews.data.maxRating editable=isEditable></div><span class=th-rating-text itemprop=reviewRating itemscope itemtype=http://schema.org/Rating><meta itemprop=worstRating content=1><span itemprop=ratingValue data-ng-bind=review.rating></span> out of <span itemprop=bestRating data-ng-bind=ratingsAndReviews.data.maxRating></span></span> By <span itemprop=author class=th-review__ratings__author data-ng-bind="review.nameOfReviewer || \'Anonymous\'"></span> <span itemprop=datePublished class="th-rating-date hidden-xs pull-right" data-ng-bind=review.date></span></div><div itemprop=name class=th-reviews__title data-ng-bind=review.title></div><div itemprop=description class=th-rating-description data-ng-bind=review.body></div><div class=th-reviews__helpful><span data-translate=product.wasThisReviewHelpfulToYou>Was this review helpful for you?</span> <a legacy-link="/reviewhelpful.asp?ProductCode={{product.code}}&ID={{review.id}}&yes=yes" class="btn btn-default btn-grey-sm" data-translate=common.yes>Yes</a> <a legacy-link="/reviewhelpful.asp?ProductCode={{product.code}}&ID={{review.id}}&yes=no" class="btn btn-default btn-grey-sm" data-translate=common.no>No</a></div></div></div></div>'), +a.put("views/search.html",'<div class="container categories"><div class=row><div class="col-sm-3 col-lg-2 vn-faceted-search" ng-class="{ isMobileAndVisible: true == isMobileAndVisible }" data-ng-hide=!hasFacetsOrCategories><h3 data-ng-show=!showMobileSearch>Narrow By</h3><div vn-faceted-search categories=categoryList facets=facets data-ng-show=mobileDisplay class=vn-faceted-search-control></div></div><div class="col-sm-9 col-lg-10 vn-category-product-tiles" ng-class="{ \'isMobileAndHidden\': true == !isMobileAndHidden }"><div class=row><div class=col-sm-10><div class=page-header><h1><span ng-if="products.length > 1">{{cursor.total}} results for <ins>{{searchTerms}}</ins></span> <span ng-if="products.length < 1">No results for <ins>{{searchTerms}}</ins></span> <span ng-if="products.length === 1">1 result for <ins>{{searchTerms}}</ins></span></h1></div></div><div vn-sort-search class="col-sm-2 vn-sort-desktop-search" data-ng-show=mobileDisplay query-products=queryProducts() ng-if="products.length > 0"></div></div><div class="row mobile-filters" data-ng-hide=mobileDisplay ng-class="{ isMobileAndVisible: true == isMobileAndVisible }"><a class="col-xs-6 text-right" href data-ng-click=toggleSearch()><button class="btn btn-default">Filter</button></a> <span class="col-xs-6 text-left" vn-sort-search query-products=queryProducts()></span></div><div class="row th-product__container"><div class="-product-tile-animation col-sm-6 col-md-4 col-lg-3" data-ng-repeat="product in products track by product.id" data-ng-include=" \'views/partials/product-tile.html\' "></div></div><div class=row data-ng-if="cursor.totalPages > 1"><div class=col-sm-12><div vn-paginator cursor=cursor current-page=currentPage query-fn=queryProducts() ng-if="products.length > 0"></div></div></div></div></div></div>'),a.put("views/server-error.html",'<div class="th-error-wrap clearfix"><div class=th-error-details><div class="th-error-details__header modal-header"><h1 data-translate=message.SERVER_ERROR_HEADING></h1><div class=modal-body><p class=th-error-details__section1 data-translate=message.SERVER_ERROR_SECTION1></p><p class=th-error-details__section2 data-translate=message.SERVER_ERROR_SECTION2></p></div><div class=modal-footer><button class="btn btn-warning" ng-click=$close()>Close</button></div></div></div></div>'),a.put("views/style-guide.html",'<section class=container><div class=jumbotron><h1>Hello, world!</h1><p>This is a template for a simple marketing or informational website. It includes a large callout called a jumbotron and three supporting pieces of content. Use it as a starting point to create something more unique.</p><p><a href=# class="btn btn-primary btn-lg" role=button><span>Learn More</span> »</a></p></div><div class=page-header><h1>Buttons</h1></div><p><button type=button class="btn btn-lg btn-default">Default</button> <button type=button class="btn btn-lg btn-primary">Primary</button> <button type=button class="btn btn-lg btn-success">Success</button> <button type=button class="btn btn-lg btn-info">Info</button> <button type=button class="btn btn-lg btn-warning">Warning</button> <button type=button class="btn btn-lg btn-danger">Danger</button> <button type=button class="btn btn-lg btn-link">Link</button></p><p><button type=button class="btn btn-default">Default</button> <button type=button class="btn btn-primary">Primary</button> <button type=button class="btn btn-success">Success</button> <button type=button class="btn btn-info">Info</button> <button type=button class="btn btn-warning">Warning</button> <button type=button class="btn btn-danger">Danger</button> <button type=button class="btn btn-link">Link</button></p><p><button type=button class="btn btn-sm btn-default">Default</button> <button type=button class="btn btn-sm btn-primary">Primary</button> <button type=button class="btn btn-sm btn-success">Success</button> <button type=button class="btn btn-sm btn-info">Info</button> <button type=button class="btn btn-sm btn-warning">Warning</button> <button type=button class="btn btn-sm btn-danger">Danger</button> <button type=button class="btn btn-sm btn-link">Link</button></p><p><button type=button class="btn btn-xs btn-default">Default</button> <button type=button class="btn btn-xs btn-primary">Primary</button> <button type=button class="btn btn-xs btn-success">Success</button> <button type=button class="btn btn-xs btn-info">Info</button> <button type=button class="btn btn-xs btn-warning">Warning</button> <button type=button class="btn btn-xs btn-danger">Danger</button> <button type=button class="btn btn-xs btn-link">Link</button></p><div class=page-header><h1>Thumbnails</h1></div><img src=holder.js/200x200 class=img-thumbnail alt=200x200 style="width: 200px; height: 200px" src=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAG/ElEQVR4Xu3ZvU8UDQCE8UVQYmFhwUdCRWylNCT++1Y0hM7YkRja62hAwOwla+69yPHuiCFxflTq3WRvntmH3T23FovFw+AHAQR+S2CLIM4MBB4nQBBnBwIbCBDE6YEAQZwDCGQEXEEyblIlBAhSMrSaGQGCZNykSggQpGRoNTMCBMm4SZUQIEjJ0GpmBAiScZMqIUCQkqHVzAgQJOMmVUKAICVDq5kRIEjGTaqEAEFKhlYzI0CQjJtUCQGClAytZkaAIBk3qRICBCkZWs2MAEEyblIlBAhSMrSaGQGCZNykSggQpGRoNTMCBMm4SZUQIEjJ0GpmBAiScZMqIUCQkqHVzAgQJOMmVUKAICVDq5kRIEjGTaqEAEFKhlYzI0CQjJtUCQGClAytZkaAIBk3qRICBCkZWs2MAEEyblIlBAhSMrSaGQGCZNykSggQpGRoNTMCBMm4SZUQIEjJ0GpmBAiScZMqIUCQkqHVzAgQJOMmVUKAICVDq5kRIEjGTaqEAEFKhlYzI0CQjJtUCQGClAytZkaAIBk3qRICBCkZWs2MAEEyblIlBAhSMrSaGQGCZNykSggQpGRoNTMCBMm4SZUQIEjJ0GpmBAiScZMqIUCQkqHVzAgQJOMmVUKAICVDq5kRIEjGTaqEAEFKhlYzI0CQjJtUCQGClAytZkaAIBk3qRICBCkZWs2MAEEyblIlBAhSMrSaGQGCZNykSggQpGRoNTMCBMm4SZUQIEjJ0GpmBAiScZMqIUCQkqHVzAgQJOMmVUKAICVDq5kRIEjGTaqEAEFKhlYzI0CQjJtUCQGClAytZkaAIBk3qRICBCkZWs2MAEEyblIlBAhSMrSaGQGCZNykSggQpGRoNTMCBMm4SZUQIEjJ0GpmBAiScZMqIUCQkqHVzAgQJOMmVUKAICVDq5kRIMhMbufn58NisfiVOj4+Hj58+LD8+/jvFxcXw/39/bC1tTV8/vx5ePv27ZOvPfURXuKYT32mltcJMmPpr1+/DldXV8MkxXTifvz4cdjf3x/Ozs6GV69eDZ8+fVr++e7ubjg9PR22t7cffe3169cbP8FLHHMGkn/+rQT5g4m/f/8+fPv2bTg4OBiOjo6WV4+9vb3h5ORkmE7sUZ43b948+trh4eGsT/ASx5z1Af+xNxPkDwZd/e0+SjDKMl1dphN5/Pum196/f7+U5+HhYXlLtru7u7zaXF9fD6Nc6wI9xzGnW8I/qF4TJUg49Y8fP4YvX74snzfGE/vy8vI/t1+rv+l3dnYefW31ajNeidbfu/rxnvOYYe26GEHCyafnj+mKsf6sMEeQUbLpqjF+nHfv3i2fXdZ/nvOYYe26GEGCyScZxt/44xVg/Fm9pRpvYf7vLdbvvgHbdGv1nMcMqtdFCDJz8unEX/8tv3rFWH9Iv729/fUwv/7a+Iwx3TqN33aNf56eR6aviP/GMWfWrn07QWZMP53I49e367/lp9uk5Gve1a+LJ5kmAf/WMWfUrn4rQWbMP91arUem257Vk3n9Pwofe+13V4fVZ42bm5vlA/5zHnNG5fq3EqT+FABgEwGCOD8Q2ECAIE4PBAjiHEAgI+AKknGTKiFAkJKh1cwIECTjJlVCgCAlQ6uZESBIxk2qhABBSoZWMyNAkIybVAkBgpQMrWZGgCAZN6kSAgQpGVrNjABBMm5SJQQIUjK0mhkBgmTcpEoIEKRkaDUzAgTJuEmVECBIydBqZgQIknGTKiFAkJKh1cwIECTjJlVCgCAlQ6uZESBIxk2qhABBSoZWMyNAkIybVAkBgpQMrWZGgCAZN6kSAgQpGVrNjABBMm5SJQQIUjK0mhkBgmTcpEoIEKRkaDUzAgTJuEmVECBIydBqZgQIknGTKiFAkJKh1cwIECTjJlVCgCAlQ6uZESBIxk2qhABBSoZWMyNAkIybVAkBgpQMrWZGgCAZN6kSAgQpGVrNjABBMm5SJQQIUjK0mhkBgmTcpEoIEKRkaDUzAgTJuEmVECBIydBqZgQIknGTKiFAkJKh1cwIECTjJlVCgCAlQ6uZESBIxk2qhABBSoZWMyNAkIybVAkBgpQMrWZGgCAZN6kSAgQpGVrNjABBMm5SJQQIUjK0mhkBgmTcpEoIEKRkaDUzAgTJuEmVECBIydBqZgQIknGTKiFAkJKh1cwIECTjJlVCgCAlQ6uZESBIxk2qhABBSoZWMyNAkIybVAkBgpQMrWZGgCAZN6kSAgQpGVrNjABBMm5SJQQIUjK0mhkBgmTcpEoIEKRkaDUzAgTJuEmVECBIydBqZgQIknGTKiFAkJKh1cwIECTjJlVCgCAlQ6uZESBIxk2qhABBSoZWMyNAkIybVAkBgpQMrWZGgCAZN6kSAgQpGVrNjABBMm5SJQR+AvP6XRytYjPeAAAAAElFTkSuQmCC><div class=page-header><h1>Dropdown menus</h1></div><div class="dropdown theme-dropdown clearfix"><a id=dropdownMenu1 href=# role=button class="sr-only dropdown-toggle" toggle=dropdown>Dropdown <b class=caret></b></a><ul class=dropdown-menu role=menu aria-labelledby=dropdownMenu1><li class=active role=presentation><a role=menuitem tabindex=-1 href=#>Action</a></li><li role=presentation><a role=menuitem tabindex=-1 href=#>Another action</a></li><li role=presentation><a role=menuitem tabindex=-1 href=#>Something else here</a></li><li role=presentation class=divider></li><li role=presentation><a role=menuitem tabindex=-1 href=#>Separated link</a></li></ul></div><div class=page-header><h1>Navbars</h1></div><div class="navbar navbar-default"><div class=container><div class=navbar-header><button type=button class=navbar-toggle toggle=collapse target=.navbar-collapse><span class=sr-only>Toggle navigation</span> <span class=icon-bar></span> <span class=icon-bar></span> <span class=icon-bar></span></button> <a class=navbar-brand href=#>Project name</a></div><div class="navbar-collapse collapse"><ul class="nav navbar-nav"><li class=active><a href=#>Home</a></li><li><a href=#about>About</a></li><li><a href=#contact>Contact</a></li><li class=dropdown><a href=# class=dropdown-toggle toggle=dropdown>Dropdown <b class=caret></b></a><ul class=dropdown-menu><li><a href=#>Action</a></li><li><a href=#>Another action</a></li><li><a href=#>Something else here</a></li><li class=divider></li><li class=dropdown-header>Nav header</li><li><a href=#>Separated link</a></li><li><a href=#>One more separated link</a></li></ul></li></ul></div></div></div><div class="navbar navbar-inverse"><div class=container><div class=navbar-header><button type=button class=navbar-toggle toggle=collapse target=.navbar-collapse><span class=sr-only>Toggle navigation</span> <span class=icon-bar></span> <span class=icon-bar></span> <span class=icon-bar></span></button> <a class=navbar-brand href=#>Project name</a></div><div class="navbar-collapse collapse"><ul class="nav navbar-nav"><li class=active><a href=#>Home</a></li><li><a href=#about>About</a></li><li><a href=#contact>Contact</a></li><li class=dropdown><a href=# class=dropdown-toggle toggle=dropdown>Dropdown <b class=caret></b></a><ul class=dropdown-menu><li><a href=#>Action</a></li><li><a href=#>Another action</a></li><li><a href=#>Something else here</a></li><li class=divider></li><li class=dropdown-header>Nav header</li><li><a href=#>Separated link</a></li><li><a href=#>One more separated link</a></li></ul></li></ul></div></div></div><div class=page-header><h1>Alerts</h1></div><div class="alert alert-success"><strong>Well done!</strong> You successfully read this important alert message.</div><div class="alert alert-info"><strong>Heads up!</strong> This alert needs your attention, but it\'s not super important.</div><div class="alert alert-warning"><strong>Warning!</strong> Best check yo self, you\'re not looking too good.</div><div class="alert alert-danger"><strong>Oh snap!</strong> Change a few things up and try submitting again.</div><div class=page-header><h1>Progress bars</h1></div><div class=progress><div class=progress-bar role=progressbar aria-valuenow=60 aria-valuemin=0 aria-valuemax=100 style="width: 60%"><span class=sr-only>60% Complete</span></div></div><div class=progress><div class="progress-bar progress-bar-success" role=progressbar aria-valuenow=40 aria-valuemin=0 aria-valuemax=100 style="width: 40%"><span class=sr-only>40% Complete (success)</span></div></div><div class=progress><div class="progress-bar progress-bar-info" role=progressbar aria-valuenow=20 aria-valuemin=0 aria-valuemax=100 style="width: 20%"><span class=sr-only>20% Complete</span></div></div><div class=progress><div class="progress-bar progress-bar-warning" role=progressbar aria-valuenow=60 aria-valuemin=0 aria-valuemax=100 style="width: 60%"><span class=sr-only>60% Complete (warning)</span></div></div><div class=progress><div class="progress-bar progress-bar-danger" role=progressbar aria-valuenow=80 aria-valuemin=0 aria-valuemax=100 style="width: 80%"><span class=sr-only>80% Complete (danger)</span></div></div><div class=progress><div class="progress-bar progress-bar-success" style="width: 35%"><span class=sr-only>35% Complete (success)</span></div><div class="progress-bar progress-bar-warning" style="width: 20%"><span class=sr-only>20% Complete (warning)</span></div><div class="progress-bar progress-bar-danger" style="width: 10%"><span class=sr-only>10% Complete (danger)</span></div></div><div class=page-header><h1>List groups</h1></div><div class=row><div class=col-sm-4><ul class=list-group><li class=list-group-item>Cras justo odio</li><li class=list-group-item>Dapibus ac facilisis in</li><li class=list-group-item>Morbi leo risus</li><li class=list-group-item>Porta ac consectetur ac</li><li class=list-group-item>Vestibulum at eros</li></ul></div><div class=col-sm-4><div class=list-group><a href=# class="list-group-item active">Cras justo odio</a> <a href=# class=list-group-item>Dapibus ac facilisis in</a> <a href=# class=list-group-item>Morbi leo risus</a> <a href=# class=list-group-item>Porta ac consectetur ac</a> <a href=# class=list-group-item>Vestibulum at eros</a></div></div><div class=col-sm-4><div class=list-group><a href=# class="list-group-item active"><h4 class=list-group-item-heading>List group item heading</h4><p class=list-group-item-text>Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p></a> <a href=# class=list-group-item><h4 class=list-group-item-heading>List group item heading</h4><p class=list-group-item-text>Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p></a> <a href=# class=list-group-item><h4 class=list-group-item-heading>List group item heading</h4><p class=list-group-item-text>Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p></a></div></div></div><div class=page-header><h1>Panels</h1></div><div class=row><div class=col-sm-4><div class="panel panel-default"><div class=panel-heading><h3 class=panel-title>Panel title</h3></div><div class=panel-body>Panel content</div></div><div class="panel panel-primary"><div class=panel-heading><h3 class=panel-title>Panel title</h3></div><div class=panel-body>Panel content</div></div></div><div class=col-sm-4><div class="panel panel-success"><div class=panel-heading><h3 class=panel-title>Panel title</h3></div><div class=panel-body>Panel content</div></div><div class="panel panel-info"><div class=panel-heading><h3 class=panel-title>Panel title</h3></div><div class=panel-body>Panel content</div></div></div><div class=col-sm-4><div class="panel panel-warning"><div class=panel-heading><h3 class=panel-title>Panel title</h3></div><div class=panel-body>Panel content</div></div><div class="panel panel-danger"><div class=panel-heading><h3 class=panel-title>Panel title</h3></div><div class=panel-body>Panel content</div></div></div></div><div class=page-header><h1>Wells</h1></div><div class=well><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sed diam eget risus varius blandit sit amet non magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Cras mattis consectetur purus sit amet fermentum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Aenean lacinia bibendum nulla sed consectetur.</p></div></section>'),a.put("views/theme-settings.html",'<link href=//maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css rel=stylesheet><style>.tab-content {\n padding-top:10px;\n}</style><section class=container><div><form><h1>Theme Settings</h1><div data-tabset><div data-tab><div data-tab-heading>General</div><h3>Header Content</h3><div class=form-group><label class=control-label>Promo</label><div data-text-angular ng-model=settings.general.header.content.topPromo></div></div><h3>Footer Content</h3><div class=form-group><label class=control-label>Column 1</label><div data-text-angular ng-model=settings.general.footer.content.column1></div></div><div class=form-group><label class=control-label>Column 2</label><div data-text-angular ng-model=settings.general.footer.content.column2></div></div><div class=form-group><label class=control-label>Column 3</label><div data-text-angular ng-model=settings.general.footer.content.column3></div></div><div class=form-group><label class=control-label>Column 4</label><div data-text-angular ng-model=settings.general.footer.content.column4></div></div><div class=form-group><label class=control-label>Bottom Row</label><div data-text-angular ng-model=settings.general.footer.content.bottomRow></div></div></div><div data-tab><div data-tab-heading>Home</div><h3>Content</h3><div class=form-group><label class=control-label>Content 1</label><textarea class=form-control data-ng-model=settings.pages.home.content1></textarea></div><div class=form-group><label class=control-label>Content 2</label><textarea class=form-control data-ng-model=settings.pages.home.content2></textarea></div><div class=form-group><label class=control-label>Content 3</label><textarea class=form-control data-ng-model=settings.pages.home.content3></textarea></div><input type=checkbox data-ng-model=settings.pages.home.featuredProducts.isEnabled> Display Featured Products<h3>Content Tiles</h3><input type=checkbox data-ng-model=settings.pages.home.tiles.isEnabled> Display Content Tiles<div data-tabset><div data-tab data-ng-repeat="(key, obj) in settings.pages.home.tiles.tiles"><div data-tab-heading>{{$index}}</div><div class=form-group><label class=control-label>Image Url</label><input class=form-control data-ng-model="settings.pages.home.tiles.tiles[key].imageUrl"></div><div class=form-group><label class=control-label>Link To</label><input class=form-control data-ng-model="settings.pages.home.tiles.tiles[key].linkTo"></div></div></div><h3>Home Page Slideshow</h3><input type=checkbox data-ng-model=settings.pages.home.slider.isEnabled> Display Slide Show<br><br><div data-tabset><button type=button class="btn btn-info" data-ng-click=addSlide()>Add Slide</button><div data-tab data-ng-repeat="slide in settings.pages.home.slider.slides"><div data-tab-heading>Slide {{$index + 1}}    <span class="glyphicon glyphicon-remove" data-ng-click="settings.slider.slides.splice($index, 1)"></span></div><div><div class=form-group><label class=control-label>Headline</label><input class=form-control data-ng-model="slide.headline"></div><div class=form-group><label class=control-label>Image Url</label><input class=form-control data-ng-model="slide.imageUrl"></div><div class=form-group><label class=control-label>Sub Headline</label><input class=form-control data-ng-model="slide.subHeadline"></div><div class=form-group><label class=control-label>Links To</label><input class=form-control data-ng-model="slide.linksTo"></div></div></div></div></div><div data-tab><div data-tab-heading>Category</div>TODO</div></div><hr><div class=form-group><button class="btn btn-primary" data-ng-click=save()>Save</button></div></form></div><style>.debugPanel {\n position:absolute;\n right:0;\n top:0;\n width:500px;\n padding:10px;\n background-color:#ff7e47;\n }\n body {\n margin-right:500px;\n }</style><div class=debugPanel data-ng-show=debug><h1>Debug</h1><span class="pull-right glyphicon glyphicon-remove" data-ng-click="debug = false"></span><p>We\'ve detected you\'re running locally, so only you see this debug window. Watch your theme settings json model change in real time.</p><div><textarea style=width:100% rows=50>{{settings | json}}</textarea></div></div><div data-ng-hide=debug><span class="pull-right glyphicon glyphicon-add" data-ng-click="debug = false"></span></div></section>')}]); \ No newline at end of file diff --git a/settings/themeInfo.json b/settings/themeInfo.json index 0367344c..1cb7cb8b 100644 --- a/settings/themeInfo.json +++ b/settings/themeInfo.json @@ -1,7 +1,7 @@ { "name": "Method", - "version": "1.0.17", - "source": "https://github.com/volusion-angular-themes/method/archive/v1.0.17.zip", + "version": "1.0.18", + "source": "https://github.com/volusion-angular-themes/method/archive/v1.0.18.zip", "author": { "name": "John Smith", "email": "test@test.com", diff --git a/styles/eb3d6c8a.main.css b/styles/220adf71.main.css similarity index 99% rename from styles/eb3d6c8a.main.css rename to styles/220adf71.main.css index 3ba14ea6..94ed2f85 100644 --- a/styles/eb3d6c8a.main.css +++ b/styles/220adf71.main.css @@ -5485,6 +5485,16 @@ button.close { .th__back-button { margin-top: 20px; font-size: 1.6rem; } +.th__title { + font-weight: bold; + text-transform: uppercase; + margin-top: 10px; + text-align: center; + font-size: 2.4rem; + margin-bottom: 20px; } +.th__subtitle { + margin-bottom: 20px; + text-align: center; } .align-right { text-align: right; } @@ -7193,19 +7203,19 @@ input.ng-pristine + .input-help { .th-checkout__thanks__display .th-credit-card__number { font-weight: bold; } -.th-checkout__login { +.th-login { text-align: center; background-color: white; height: 100%; margin: 50px 0px; } - .th-checkout__login__form { + .th-login__form { margin: 20px; } @media (max-width: 480px) { - .th-checkout__login__form { + .th-login__form { margin: 0 0 20px 0; } } - .th-checkout__login__form .form-control { + .th-login__form .form-control { font-size: 1.8rem; } - .th-checkout__login__error { + .th-login__error { border-radius: 0; color: #a94442; background-color: #f2dede; @@ -7214,20 +7224,27 @@ input.ng-pristine + .input-help { margin-bottom: 10px; padding: 15px; } @media (max-width: 480px) { - .th-checkout__login__error { - margin: 0px; } } - .th-checkout__login__user-type { + .th-login__error { + margin-bottom: 20px; } } + .th-login__user-type { text-align: center; padding: 0px 0px 20px 0px; } - .th-checkout__login__user-type .btn-group { + .th-login__user-type .btn-group { width: 100%; } - .th-checkout__login__user-type .btn-group button { + .th-login__user-type .btn-group button { width: 50%; } @media (max-width: 480px) { - .th-checkout__login__user-type .btn-group button { + .th-login__user-type .btn-group button { font-size: 14px; } } - .th-checkout__login__continue { + .th-login__continue { margin-top: 20px; } + .th-login__title { + font-weight: bold; + text-transform: uppercase; + margin-top: 10px; + text-align: center; + font-size: 2.4rem; + margin-bottom: 20px; } .th-checkout__review__discounts__discount-info--subtotal, .th-checkout__review__store-credit-info--subtotal, .th-checkout__review__shipping-method-info--subtotal, .th-checkout__review__tax-info--subtotal, .th-checkout__review__grand-total-info--subtotal, .th-checkout__review__items__item-info--subtotal { font-size: 1.5rem; @@ -7539,6 +7556,19 @@ input.ng-pristine + .input-help { .th-payment-profiles .th-credit-card__img { margin-left: 0; } +.th-change-email .th-my-account__title { + margin-bottom: 20px; } +.th-change-email__current { + line-height: 1.4; + margin: 0 0 25px 0; } + .th-change-email__current__title { + text-transform: uppercase; + font-size: 11px; + color: #999; } + +.th-change-password .th-my-account__title { + margin-bottom: 20px; } + #main-content-area > div { height: 100%; } diff --git a/styles/11e81292.vendor.css b/styles/df8a6fd6.vendor.css similarity index 99% rename from styles/11e81292.vendor.css rename to styles/df8a6fd6.vendor.css index 278e8a72..3aea42c7 100644 --- a/styles/11e81292.vendor.css +++ b/styles/df8a6fd6.vendor.css @@ -1,4 +1,4 @@ body,html{margin:0;padding:0;width:100%;height:100%;overflow:hidden}.snap-content,.snap-drawers,.x-snap-content,.x-snap-drawers,[data-snap-content],[data-snap-drawers],[snap-content],[snap-drawers],[snap\:content],[snap\:drawers],[x-snap-content],[x-snap-drawers],snap-content,snap-drawers{position:absolute;height:auto;top:0;bottom:0;width:auto;left:0;right:0}.snap-drawer,.x-snap-drawer,[data-snap-drawer],[snap-drawer],[snap\:drawer],[x-snap-drawer],snap-drawer{position:absolute;height:auto;top:0;bottom:0;overflow:auto;-webkit-transition:bottom .2s linear;-moz-transition:bottom .2s linear;-o-transition:bottom .2s linear;transition:bottom .2s linear;-webkit-overflow-scrolling:touch;-moz-overflow-scrolling:touch;-o-overflow-scrolling:touch;overflow-scrolling:touch;width:265px}.snap-content{z-index:2;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0);overflow:auto;-webkit-overflow-scrolling:touch;-moz-overflow-scrolling:touch;-o-overflow-scrolling:touch;overflow-scrolling:touch}.snap-drawer-left{left:0;z-index:1}.snap-drawer-right{right:0;z-index:1}.snapjs-left .snap-drawer-right,.snapjs-right .snap-drawer-left{display:none}.snapjs-expand-left .snap-drawer-left,.snapjs-expand-right .snap-drawer-right{width:100%}/*! * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.2.0);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0) format('embedded-opentype'),url(../fonts/fontawesome-webfont.woff?v=4.2.0) format('woff'),url(../fonts/fontawesome-webfont.ttf?v=4.2.0) format('truetype'),url(../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}/*! vn-toolbox-common - ver.1.0.8 (2015-04-01) */ \ No newline at end of file + */@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.2.0);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0) format('embedded-opentype'),url(../fonts/fontawesome-webfont.woff?v=4.2.0) format('woff'),url(../fonts/fontawesome-webfont.ttf?v=4.2.0) format('truetype'),url(../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}/*! vn-toolbox-common - ver.1.0.9 (2015-04-03) */ \ No newline at end of file