function attachTimer(){if($("#timerEndDT").length){var n=$("#timerEndDT").val().split(",");launchDt=new Date(Date.UTC(n[0],n[1],n[2],n[3],n[4]));timer();setInterval(timer,1e3)}}function timer(){var u=new Date,n=launchDt.getTime()-u.getTime(),r=Math.floor(n/36e5),t,i;n-=r*36e5;t=Math.floor(n/6e4);n-=t*6e4;i=Math.floor(n/1e3);n-=i*1e3;$("#countDown").text(padNum(r,2)+":"+padNum(t,2)+":"+padNum(i,2))}function padNum(n,t){for(var i=n+"";i.length<t;)i="0"+i;return i}define("class",function(){var n=!1,t=/xyz/.test(function(){xyz})?/\b_super\b/:/.*/;return Object.subClass=function(i){function u(){!n&&this.init&&this.init.apply(this,arguments)}var e=this.prototype,f,r;n=!0;f=new this;n=!1;for(r in i)f[r]=typeof i[r]=="function"&&typeof e[r]=="function"&&t.test(i[r])?function(n,t){return function(){var r=this._super,i;return this._super=e[n],i=t.apply(this,arguments),this._super=r,i}}(r,i[r]):i[r];return u.prototype=f,u.constructor=u,u.subClass=arguments.callee,u},Object.subClass}),function($,n,t){function o(n){return n=n||location.href,"#"+n.replace(/^[^#]*#?(.*)$/,"$1")}var i="hashchange",s=document,r,u=$.event.special,f=s.documentMode,e="on"+i in n&&(f===t||f>7);$.fn[i]=function(n){return n?this.bind(i,n):this.trigger(i)};$.fn[i].delay=50;u[i]=$.extend(u[i],{setup:function(){if(e)return!1;$(r.start)},teardown:function(){if(e)return!1;$(r.stop)}});r=function(){function s(){var f=o(),t=c(u);f!==u?(h(u=f,t),$(n).trigger(i)):t!==u&&(location.href=location.href.replace(/#.*/,"")+t);r=setTimeout(s,$.fn[i].delay)}var f={},r,u=o(),e=function(n){return n},h=e,c=e;return f.start=function(){r||s()},f.stop=function(){r&&clearTimeout(r);r=t},f}()}(jQuery,this);define("ftdna-directives",["jquery","angular"],function(n,t){"use strict";t.module("ftdnaDirectives",[]).directive("ftdnaAddress",function(){return{restrict:"A",scope:{addressInfo:"=ftdnaAddressScope",form:"=ftdnaAddressForm",readonly:"=ftdnaReadonly",section:"=ftdnaAddressSection",singleEmail:"=ftdnaSingleEmail",domesticOnly:"=ftdnaAddressDomesticOnly",countries:"=ftdnaAddressCountries"},templateUrl:"/shoppingCart/address",link:function(n,t){var i=t.find("input, textarea");i.placeholder();n.emailPlaceholder=n.singleEmail?"Email Address":"Email Address";n.confirmEmailPlaceholder=n.singleEmail?"Confirm Email Address":"Confirm Email Address";n.$watch("form.$$parentForm.$submitted",function(t){t&&n.form.$setSubmitted(!0)})}}}).directive("ftdnaEnter",function(){return function(n,t,i){t.bind("keydown keypress",function(t){t.which===13&&(n.$apply(function(){n.$eval(i.ftdnaEnter)}),t.preventDefault())})}}).directive("ftdnaFocus",function(){return function(n,t,i){n.$watch(i.ftdnaFocus,function(n){n&&t.focus()},!0)}}).directive("ftdnaFocusVisitedMarker",function(){return{restrict:"A",require:"?ngModel",link:function(n,t,i,r){if(r){t.on("focus",function(){t.addClass("has-focus");t.parent(".input-container").addClass("has-focus");n.$apply(function(){r.hasFocus=!0})});t.on("blur",function(){t.removeClass("has-focus");t.addClass("has-visited");t.parent(".input-container").removeClass("has-focus");n.$apply(function(){r.hasFocus=!1;r.hasVisited=!0})});t.closest("form").on("submit",function(){t.addClass("has-visited");n.$apply(function(){r.hasFocus=!1;r.hasVisited=!0})})}}}}).directive("ftdnaScroll",["$timeout",function(n){return function(t,i){n(function(){i.slimScroll({size:"3px",width:i.outerWidth()})},600)}}]).directive("ftdnaSubmit",["$parse",function(n){return{restrict:"A",require:["ftdnaSubmit","?form"],controller:["$scope",function(){var n=this;n.attempted=!1;n.formController=null;n.setAttempted=function(){n.attempted=!0};n.setFormController=function(t){n.formController=t};n.needsAttention=function(t){return n.formController?t?t.$invalid&&(t.$dirty||n.attempted):n.formController&&n.formController.$invalid&&(n.formController.$dirty||n.attempted):!1}}],compile:function(){return{pre:function(n,t,i,r){var u=r[0],f=r.length>1?r[1]:null;u.setFormController(f);n.ftdna=n.ftdna||{};n.ftdna[i.name||i.ngForm]=u},post:function(t,i,r,u){var f=u[0],e=u.length>1?u[1]:null,o=n(r.ftdnaSubmit);i.bind("submit",function(n){if(f.setAttempted(),t.$$phase||t.$apply(),!e.$valid)return!1;t.$apply(function(){o(t,{$event:n})})})}}}}}])});define("shoppingCart/checkout-form",["jquery","common/address","class"],function(n,t){"use strict";return Object.subClass({init:function(n,i,r){var u=this;n=n||{};u.cartId=n.cartId;u.kitNumber=n.kitNumber;u.billingAddress=new t(n.billingAddress,i,r);u.shippingAddress=new t(n.shippingAddress||{},i,r);u.specificContactInfo=[];u.nameInCard=n.nameInCard;u.creditCardNumber=n.creditCardNumber;u.expirationMonth=n.expirationMonth;u.expirationYear=n.expirationYear;u.cvc=n.cvc;u.isftAdmin=n.isftAdmin;u.canBillLater=n.canBillLater;u.billMeLater=n.billMeLater;u.handlingFees=n.handlingFees;u.isDrySwab=!1},setContactInfoForKit:function(t,i){var u=this,r=null;n.each(u.specificContactInfo,function(n,i){if(i.kitId===t)return r=i,!1});r?r.address=i.address:u.specificContactInfo.push({kitId:t,address:i.address})},getContactInfoForKit:function(t){var r=this,i=null;return n.each(r.specificContactInfo,function(n,r){if(r.kitId===t)return i=r,!1}),i},getContactInfoForKitOrBilling:function(n){return this.getContactInfoForKit(n)||{address:this.billingAddress}},removeContactInfoForKit:function(t){var i=-1;n.each(this.specificContactInfo,function(n,r){if(r.kitId===t)return i=n,!1});this.specificContactInfo.splice(i,1)},hasSpecificContactInfo:function(){return this.specificContactInfo.length>0},clearSpecificContactInfo:function(){this.specificContactInfo=[]},getExpirationMonthOptions:function(){return["01","02","03","04","05","06","07","08","09","10","11","12"]},getExpirationYearOptions:function(){for(var t=[],i=(new Date).getFullYear(),n=0;n<12;n++)t.push(i+n);return t}})});define("shoppingCart/product",["class"],function(){"use strict";return Object.subClass({init:function(n,t){this.id=n.id;this.name=n.name;this.price=n.price;this.originalPrice=n.originalPrice;this.maleOnly=n.maleOnly;this.hasImage=n.hasImage;this.discountAmount=n.discountAmount;this.kit=t},reload:function(n){this.price=n.price}})});define("shoppingCart/product-in-cart",["shoppingCart/product","class"],function(n){"use strict";return n.subClass({init:function(n,t){this._super(n.product,t)},removeFromCart:function(){this.kit.removeProduct(this)},reload:function(n){this._super(n.product)}})});define("shoppingCart/available-bundle",["shoppingCart/product-in-cart","class"],function(n){"use strict";return Object.subClass({init:function(n,t){this.kit=t;$.extend(this,n)},moveToCart:function(){for(var r,u,t=this,f=[],i=0;i<t.products.length;i++)r=t.products[i],t.kit.getProductInCartById(r.id)||(u=new n({product:r},t.kit),this.kit.addProduct(u),f.push(u));return f},reload:function(n){this.init(n,this.kit)}})});define("shoppingCart/available-bundle-list",["jquery","shoppingCart/available-bundle","class"],function(n,t){"use strict";return Object.subClass({init:function(i,r){var u=this;u.availableBundles=n.map(i||[],function(n){return new t(n,r)});u.kit=r;u.visibleBundles=[];u.setVisibleBundles()},setVisibleBundles:function(){var n=this,i,t,r,u;for(n.visibleBundles.splice(0,n.visibleBundles.length),i=0;i<n.availableBundles.length;i++)if(t=n.availableBundles[i],!t.malesOnly||!n.kit.female)for(r=0;r<t.products.length;r++)if(u=t.products[r],!n.kit.getProductInCartById(u.id)){n.visibleBundles.push(t);break}return n.visibleBundles},reload:function(i){var r=this;r.availableBundles=n.map(i||[],function(n){return new t(n,r.kit)});r.setVisibleBundles()}})});define("shoppingCart/available-product",["shoppingCart/product","shoppingCart/product-in-cart","class"],function(n,t){"use strict";return n.subClass({init:function(n,t){this._super(n.product,t);this.learnMoreUrl=n.learnMoreUrl?n.learnMoreUrl:null},moveToCart:function(){var n=new t({product:this},this.kit);return this.kit.addProduct(n),n},reload:function(n){this._super(n.product)}})});define("shoppingCart/available-product-list",["shoppingCart/available-product","class"],function(n){"use strict";return Object.subClass({init:function(t,i){var r=this;r.availableProducts=$.map(t||[],function(t){return new n(t,i)});r.kit=i},getSuggestedProducts:function(){var n=this,t=$.map(n.availableProducts,function(t){switch(t.name){case"Family Finder":t.order=0;break;case"mtDNA Plus":t.order=1;break;case"mtFull Sequence":t.order=2;break;case"Y-DNA37":t.order=3;break;case"Y-DNA67":t.order=4;break;case"Y-DNA111":t.order=5;break;case"Big Y-700":t.order=6}return n.kit.getProductInCartById(t.id)?null:t});return t.sort(function(n,t){return n.order>t.order?1:-1})},reload:function(t){var i=this;i.availableProducts=$.map(t||[],function(t){return new n(t,i.kit)})},getAvailableProductById:function(n){var t=null;return $.each(this.availableProducts,function(i,r){r.id===n&&(t=r)}),t}})});define("shoppingCart/kit",["jquery","shoppingCart/product-in-cart","shoppingCart/available-product-list","shoppingCart/available-bundle-list"],function(n,t,i,r){"use strict";return Object.subClass({init:function(u,f){var e=this,o;e.id=u.id;e.price=u.price||0;e.savings=u.savings||0;e.afterSavingsPrice=u.afterSavingsPrice||e.price;e.tier=u.tier;e.requiresShipping=u.requiresShipping;e.definedShippingPrice=u.definedShippingPrice;e.kitNum=u.kitNum;e.kitIndex=u.kitIndex;e.name=u.name;e.inputName=u.name;e.female=u.female;e.cart=f;e.productsInCart=n.map(u.productsInCart||[],function(n){return new t(n,e)});e.availableProductsList=new i(u.availableProducts,e);e.availableBundlesList=new r(u.availableBundles,e);o=Cookiebot&&Cookiebot.consent&&Cookiebot.consent.statistics;o&&typeof dataLayer!="undefined"&&dataLayer.push({event:"productImpressions",ecommerce:{currencyCode:"USD",impressions:n.map(u.availableProducts,function(n){return{id:n.id,name:n.name,price:n.price}})}});e.assignToKit=null;e.assignToPassword=null;e.partnerProducts=new i(u.partnerProducts,e)},isValid:function(){return this.female!=undefined},getDisplayName:function(n){return n=n||15,this.name&&this.name.length>n?this.name.substring(0,n-2)+"...":this.name},getDisplayKitNumber:function(){return this.kitNum?"Kit No. "+this.kitNum:"New Kit "+this.kitIndex},originalPrice:function(){var t=0;return n.each(this.productsInCart,function(n,i){t+=i.originalPrice}),t},addProduct:function(n){return this.hasProduct(n)||this.productsInCart.push(n),!1},removeProduct:function(t){var i=n.inArray(t,this.productsInCart);i>=0&&this.productsInCart.splice(i,1)},hasProduct:function(t){var i=!1;return n.each(this.productsInCart,function(n,r){if(t.id===r.id)return i=!0,!1}),i},reload:function(i){var r=this,u,f;for(r.price=i.price,r.name=i.name,r.kitNum=i.kitNum,r.savings=i.savings||0,r.afterSavingsPrice=i.afterSavingsPrice||r.price,r.tier=i.tier,r.female=i.female,n.each(i.productsInCart,function(n,i){var u=r.getProductInCartById(i.product.id);u?u.reload(i):r.productsInCart.push(new t(i,r))}),u=r.productsInCart.length-1;u>=0;u--)f=!1,n.each(i.productsInCart,function(n,t){if(r.productsInCart[u].id===t.product.id)return f=!0,!1}),f||r.productsInCart.splice(u,1);r.availableProductsList.reload(i.availableProducts);r.availableBundlesList.reload(i.availableBundles)},getProductInCartById:function(t){var i=null;return n.each(this.productsInCart,function(n,r){r.id===t&&(i=r)}),i},hasSavings:function(){return this.savings>0},getProductsCount:function(){return this.productsInCart.length},isAssigned:function(){return this.kitNum}})});define("shoppingCart/cart",["jquery","shoppingCart/kit","class"],function(n,t){"use strict";return Object.subClass({init:function(i){var r=this;r.id=i.id;r.kitNum=i.kitNum;r.coupon=i.coupon&&i.coupon.code;r.couponSavings=i.couponSavings;r.offersSavings=i.offersSavings;r.totalSavings=i.totalSavings;r.isFreeShipping=i.coupon&&i.coupon.isFreeShipping;r.price=i.price;r.projectFundAmount=i.projectFundAmount;r.kits=n.map(i.kits||[],function(n){return new t(n,r)});r.inputCoupon=r.coupon;r.activeKit=r.kits.length>0?r.kits[0]:null;r.isftAdmin=i.isftAdmin;r.specialOffer=i.specialOffer},addNewKit:function(n){var i=new t(n,this);this.kits.push(i);this.activeKit=i},removeKit:function(t){var i=this;t=t||i.activeKit;i.kits.length>1&&(t===i.activeKit&&i.makeNextKitActive(),this.kits.splice(n.inArray(t,this.kits),1))},getKitById:function(t){var i=null;return n.each(this.kits,function(n,r){r.id===t&&(i=r)}),i},makeKitActive:function(n){this.activeKit=n},makeKitActiveById:function(t){var i=null;n.each(this.kits,function(n,r){if(r.id.toString()===t.toString())return i=r,!1});i&&(this.activeKit=i)},makePreviousKitActive:function(){var t=this,i=n.inArray(t.activeKit,t.kits);t.activeKit=i==0?t.kits[t.kits.length-1]:t.kits[i-1]},makeNextKitActive:function(){var t=this,i=n.inArray(t.activeKit,t.kits);t.activeKit=i==t.kits.length-1?t.kits[0]:t.kits[i+1]},isKitActive:function(n){return this.activeKit===n},showProducts:function(){return!0},getKitsCount:function(){return this.kits.length},getProductsCount:function(){var t=0;return n.each(this.kits,function(n,i){if(i.getProductsCount()===0&&i.kitNum!==this.kitNum)return t=0,!1;t+=i.getProductsCount()}),t},isValid:function(){var r=[],t,i,u;if(n.each(this.kits,function(n,t){t.productsInCart.length<1&&t.kitNum!==this.kitNum&&r.push(t)}),r.length>0)return!1;for(t=0;t<this.kits.length;t++)if(i=this.kits[t],u=i.isValid(),!u)return this.makeKitActive(i),!1;return this.getProductsCount()>0},canDeleteKit:function(n){return(!n.kitNum||n.kitNum!==this.kitNum)&&this.getKitsCount()>1},canSignOutKit:function(n){return!n.kitNum||n.kitNum!==this.kitNum},originalPrice:function(){var t=0;return n.each(this.kits,function(n,i){t+=i.originalPrice()}),t},hasSavings:function(){return this.totalSavings>0},reload:function(t){var i=this;i.price=t.price;i.coupon=t.coupon&&t.coupon.code;i.couponSavings=t.couponSavings;i.offersSavings=t.offersSavings;i.totalSavings=t.totalSavings;i.productValidationResult=t.productValidationResult;t.productValidationResult&&t.productValidationResult.overridableProductId&&(i.overridableProductIds=i.overridableProductIds||[],i.overridableProductIds.push(t.productValidationResult.overridableProductId));i.specialOffer=t.specialOffer;n.each(t.kits,function(n,t){var r=i.getKitById(t.id);r?r.reload(t):i.addNewKit(t)})},ensureVisible:function(){var u;if(this.activeKit)try{var t=n(".rb-kit-summ"),e=t.children(),o=n(".slimScrollDiv"),s=n(".add-kit-text").outerHeight(!0),h=t.innerHeight(),i=n(".rb-kt-ovw.active");if(i.length===1){var f=i.offset().top-t.offset().top,c=f+i.outerHeight(!0),r=0;f<0?(r=f-10,u=n(e[0]).offset().top-t.offset().top-10,o.scroll(r-u,!1,!0,!0)):c>h&&(r=c-h+(i.next().hasClass("add-prod-text")?n(".add-prod-text").outerHeight(!0)+s:i.next().hasClass("add-kit-text")?s:0),u=n(e[0]).offset().top-t.offset().top-10,o.scroll(r-u,!1,!0,!0))}}catch(l){}},showPartnerProducts:function(){return this.activeKit&&this.activeKit.partnerProducts&&this.activeKit.partnerProducts.availableProducts&&this.activeKit.partnerProducts.availableProducts.length>0}})});define("common/form-validator",["jquery","class"],function(n){return Object.subClass({init:function(){},isValid:function(){var t=!0;return n.each(arguments,function(n,i){if(i.$invalid)return t=!1,!1}),t},isInvalid:function(t){var u=Array.prototype.slice.call(arguments,1),i=!1,r;return t.attempted||(i=!0,n.each(u,function(n,t){if(!t.hasVisited)return i=!1,!1})),r=!1,n.each(u,function(n,t){if(t.$invalid)return r=!0,!1}),(t.attempted||i)&&r},hasError:function(n,t,i){return(n.hasVisited||i.attempted)&&n.$error[t]}})});define("shoppingCart/checkout-form-controller",["jquery","angular","shoppingCart/checkout-form","shoppingCart/cart","common/address","shoppingCart/checkout-contactinfo-handler","shoppingCart/currency"],function(n,t,i,r,u,f,e){"use strict";var o=t.module("checkoutController",[]);o.config(["$locationProvider",function(n){n.hashPrefix("")}]);o.controller("CheckoutController",["$scope","$routeParams","$timeout","$location","$window","$q","Checkout","CartEventTracker","AddressVerifier","CartParams",function(t,u,o,s,h,c,l,a,v,y){function w(n){var t=n.getBoundingClientRect();return t.top>=0&&t.bottom<=window.innerHeight}function k(){var n,r,i,u;if(t.cart)for(n=0;n<t.cart.kits.length;n++)for(r=t.cart.kits[n],i=0;i<r.productsInCart.length;i++)if(u=r.productsInCart[i],u.id===27e3)return!0;return!1}function d(){var f=t.checkoutForm.billingAddressForm.$error,e=p(f),n,i,r,u;e||t.checkoutForm.shippingAddressForm&&(n=t.checkoutForm.shippingAddressForm.$error,i=p(n),i)||(r=t.checkoutForm.$error,u=p(r),u)}function p(n){var t,i;for(t in n)if(n.hasOwnProperty(t)&&n[t].length)return i=n[t][0].$$element,g(i),!0;return!1}function g(t){var i=t[0].offsetParent||t[0],r=i.offsetTop-10;o(function(){n(".ui-dialog").animate({scrollTop:r},100)},0)}function b(n,t){return n?t.billingAddress.country||"":t.shippingAddress.country||""}function nt(n){return["Argentina","Brazil","Chile","Ecuador","Iraq","Mexico","Pakistan","Poland","Russian Federation","Turkey"].indexOf(n)!==-1}t.currency=(new e).get(u.fc);t.hasAssassinsCreedBundleProduct=!1;t.isLoaded=!1;t.contactInfoHandler={};t.countries=window.cart&&window.cart.countries||[];l.getCheckout(y.build({cartId:u.cid||localStorage.cartId&&!isNaN(localStorage.cartId)&&localStorage.cartId||-1,currency:t.currency.code})).$promise.then(function(n){t.isLoaded=!0;n.checkout.isftAdmin&&a.disable();a.onCheckoutView(n.cart);var u=n.cart.kits.length>1;t.cart=new r(n.cart);t.hasAssassinsCreedBundleProduct=k();t.checkout=new i(n.checkout,t.hasAssassinsCreedBundleProduct,u);t.checkout.currency=t.currency.code;t.shippingPrices=n.shippingPrices;t.contactInfoHandler=new f(t.checkout,t.cart,v,c);t.checkout.isExpedited=!1;t.checkout.shippingType="standard"});t.hasSetMonthTop=!1;t.$watch(function(){var i=document.querySelectorAll(".md-select-menu-container, .month-select, .md-active, .md-clickable"),n,f,e;let r;for(n=0;n<i.length;n++)i[n].classList.contains("month-select")&&i[n].classList.contains("md-clickable")&&(r=i[n]);!r||w(r)||t.hasSetMonthTop||(f=r.offsetTop,e=f-70,r.style.top=e+"px",t.hasSetHeightMonth=!0);i=document.querySelectorAll(".md-select-menu-container, .year-select, .md-active, .md-clickable");let u;for(n=0;n<i.length;n++)i[n].classList.contains("year-select")&&i[n].classList.contains("md-clickable")&&(u=i[n]);!u||w(u)||t.hasSetMonthTop||(f=u.offsetTop,e=f-70,u.style.top=e+"px",t.hasSetHeightYear=!0)});t.placeOrder=function(){if(!t.placingOrder){t.serverValidationError=null;t.placingOrder=!0;t.checkout.isExpedited=t.checkout.shippingType==="expedited";t.checkout.isDrySwab=nt(b(t.contactInfoHandler.areAddressesSame,t.checkout));var i=n.url().param().ekit?"?ekit="+encodeURIComponent(n.url().param().ekit):"";l.placeOrder(y.build(t.checkout)).$promise.then(function(){h.location="/thank-you"+i},function(n){t.placingOrder=!1;t.serverValidationError=n.status===400?n.data:["An unexpected error occurred while processing your transaction."]})}};t.hideCvcInfo=function(){d();t.showingInfo=!1;t.showingShippingInfo=!1};t.toggleCvcInfo=function(){t.showingInfo=!t.showingInfo};t.toggleShippingInfo=function(){t.showingShippingInfo=!t.showingShippingInfo};t.isShippingSet=function(){var n=t.cart&&t.cart.isFreeShipping;return n||t.getShippingPrice()>0};t.isDomestic=function(){if(!t.contactInfoHandler||!t.checkout||!t.checkout.billingAddress||!t.checkout.billingAddress.country&&!t.checkout.shippingAddress.country)return!1;var r=b(t.contactInfoHandler.areAddressesSame,t.checkout),n=t.contactInfoHandler.areAddressesSame?t.checkout.billingAddress.state||"":t.checkout.shippingAddress.state||"",i=r==="United States"&&n.toLowerCase()!=="alaska"&&n.toLowerCase()!=="ak"&&n.toLowerCase()!=="hawaii"&&n.toLowerCase()!=="hi";return i||(t.checkout.shippingType="standard"),i};t.getShippingPrice=function(){var i,r,u;return!t.checkout||!t.checkout.billingAddress?0:!t.checkout.billingAddress.country&&!t.checkout.shippingAddress.country?0:t.cart&&t.cart.isFreeShipping?0:(i=t.checkout&&t.checkout.handlingFees||0,!t.checkout||i)?i:(r=t.isDomestic(),u=!0,n.each(t.cart.kits,function(n,f){if(f.requiresShipping&&f.getProductsCount()>0){var e;u?(e=t.checkout.shippingType==="expedited"?t.shippingPrices.expeditedDomestic:r?t.shippingPrices.domestic:t.shippingPrices.international,u=!1):e=t.checkout.shippingType==="expedited"?t.shippingPrices.expeditedAdditionalDomestic:r?t.shippingPrices.additionalDomestic:t.shippingPrices.additionalInternational;i+=typeof f.definedShippingPrice=="number"?f.definedShippingPrice:e}}),i)};t.getTotalPrice=function(){return t.cart?t.cart.price+t.getShippingPrice():0};t.userOnNameOnCard=function(n,i){t.hasLeftBillingInfo=!0;t.contactInfoHandler.tryVerifyAddress(n,t.checkout.billingAddress);t.checkout.shippingAddress&&i&&t.contactInfoHandler.tryVerifyAddress(i,t.checkout.shippingAddress);l.setCustomerInfo({cartId:t.checkout.cartId,name:t.checkout.billingAddress.firstName,emailAddress:t.checkout.billingAddress.emailAddress})};t.editCart=function(){s.path("/shoppingCart")};t.termsOfService=function(){};t.purchasePolicy=function(){};t.back=!0}])});define("shoppingCart/cart-controller",["jquery","angular","shoppingCart/cart","shoppingCart/kit","shoppingCart/available-product","shoppingCart/currency","shoppingCart/filters"],function(n,t,i,r,u,f){"use strict";var e=t.module("shoppingCartController",["shoppingCartFilters","ngMaterial","ngAnimate","ngMessages"]);e.config(["$locationProvider",function(n){n.hashPrefix("")}]);e.controller("ShoppingCartController",["$scope","$routeParams","$location","$q","$timeout","Cart","CartEventTracker","CartParams",function(t,r,e,o,s,h,c,l){function a(n){t.invalidCoupon=!0;t.couponError.hasError=!0;t.invalidCouponMessage=n;c.couponInvalid(t.cart.inputCoupon)}function v(){n(".ui-dialog").scrollTop(0)}t.currency=(new f).get(r.fc);var y=function(n){if(t.cart=new i(n),c.$window.location.search.indexOf("ekit")>-1){var r=76315;t.cart.kits.forEach(function(n){n.productsInCart.forEach(function(i){i.id===r&&t.removeProductFromCart(n,i,"summary")})})}localStorage.cartId=t.cart.id;t.couponError={hasError:!1}};return h.getCart(l.build({cartId:localStorage.cartId&&!isNaN(localStorage.cartId)&&localStorage.cartId||-1})).$promise.then(function(n){n.isFTAdmin&&c.disable();c.onCartView(n);y(n);var i=function(){r.c&&(t.canShowCoupon=!0,t.cart.inputCoupon=r.c,t.applyCoupon())};r.pid?t.addExternalProductToCart(r.pid,r.kid,r.c).then(i):i();r.fs&&(t.assigningKit=!0);t.addingItem=!1;t.canShowCoupon=!0}),t.$watch(function(){return t.cart&&n(".rb-kt-ovw.active").text().trim().startsWith("Kit #"+t.cart.activeKit.kitIndex)},function(n){n&&t.cart.ensureVisible()}),t.$watch(function(){return t.advanceAttempted&&!(t.cart.activeKit.female!=undefined)},function(n){n===!0&&c.genderNotSelected(t.cart.activeKit)}),t.$watch(function(){return t.advanceAttempted&&t.cart.activeKit.getProductsCount()===0},function(n){n===!0&&c.proceedAttemptWithNoProducts(t.cart.activeKit)}),t.showAddProdText=function(){return t.cart.activeKit.kitIndex>1&&t.cart.activeKit.productsInCart.length===0},t.addNewKitToCart=function(n){if(t.cart.activeKit.isValid()){t.addingItem=!0;var i=l.build({cartId:t.cart.id});h.addNewKit(i).$promise.then(function(i){t.advanceAttempted=!1;t.addingItem=!1;t.cart.reload(i);n==="summary"?c.addKitSummary(t.cart):c.addKitBottom(t.cart)})}else t.advanceAttempted=!0;v()},t.signOutOfKit=function(n){n=n||t.cart.activeKit;h.signOutOfKit(l.build({cartId:t.cart.id,kitId:n.id})).$promise.then(function(n){t.cart.reload(n.cart);t.quitEditing()})["catch"](function(){t.quitEditing();console.log(error)})},t.removeKitFromCart=function(n){t.cart.canDeleteKit(n)&&(t.addingItem=!0,n=n||t.cart.activeKit,t.cart.removeKit(n),h.removeKit(l.build({cartId:t.cart.id,kitId:n.id})).$promise.then(function(n){t.addingItem=!1;t.cart.reload(n);c.removeKitSummary(t.cart)})["catch"](function(){t.addingItem=!1;t.cart.addNewKit(n)}))},t.addAvailableProductToCart=function(n){if(!t.cart.activeKit.hasProduct(n)){t.addingItem=!0;var i=n.moveToCart();h.addProduct(l.build({cartId:t.cart.id,productId:n.id,kitId:t.cart.activeKit.id})).$promise.then(function(n){t.addingItem=!1;t.cart.reload(n);t.cart.ensureVisible();c.addProduct(i)},function(n){t.addingItem=!1;i.removeFromCart();console.log(n)})}},t.addAvailableBundleToCart=function(n){var i,u,r;for(t.addingItem=!0,i=n.moveToCart(),t.cart.activeKit.availableBundlesList.setVisibleBundles(),u=[],r=0;r<i.length;r++)u.push(i[r].id);h.addProducts(l.build({cartId:t.cart.id,kitId:t.cart.activeKit.id,productIds:u})).$promise.then(function(n){t.addingItem=!1;t.cart.reload(n);t.cart.ensureVisible();for(var r=0;r<i.length;r++)c.addProduct(i[r])},function(n){t.addingItem=!1;for(var r=0;r<i.length;r++)i[r].removeFromCart(),console.log(n)})},t.removeProductFromCart=function(n,i,r){t.advanceAttempted=!1;t.addingItem=!0;var f=new u({product:i},n);i.removeFromCart();h.removeProduct(l.build({cartId:t.cart.id,kitId:n.id,productId:i.id})).$promise.then(function(n){t.addingItem=!1;t.cart.reload(n);r==="summary"?c.removeProductSummary(i):c.removeProduct(i)})["catch"](function(){t.addingItem=!1;f.moveToCart()})},t.addExternalProductToCart=function(i,r,u,f){r&&t.cart.makeKitActiveById(r);typeof i=="string"&&(i=i.split(","));var e=[];return n.each(i,function(i,r){t.addingItem=!0;var u=o.defer();h.addProduct(l.build({cartId:t.cart.id,productId:r,kitId:t.cart.activeKit.id,overrideExcludedProduct:f})).$promise.then(function(n){t.addingItem=!1;t.cart.reload(n);t.cart.ensureVisible();u.resolve(n)},function(i){t.addingItem=!1;n("#error").text(i.data.message)});e.push(u.promise)}),o.all(e)},t.makeKitActive=function(n){t.cart.makeKitActive(n);c.kitSelect(n)},t.hoverAvailableProduct=function(n){c.hoverAddProduct(n)},t.showCoupon=function(){t.canShowCoupon=!0;c.couponView()},t.hideCoupon=function(){t.cart.inputCoupon="";t.canShowCoupon=!1},t.applyCoupon=function(){c.couponAttempt(t.cart.inputCoupon);h.applyCoupon(l.build({cartId:t.cart.id,code:t.cart.inputCoupon})).$promise.then(function(n){n.invalidCouponMessage?a(n.invalidCouponMessage):(t.invalidCoupon=!1,t.couponError.hasError=!1,t.cart.reload(n),c.couponSuccess(t.cart.inputCoupon))},function(n){n.status===404&&a("This coupon is not valid")})},t.editCoupon=function(){t.canShowCoupon=!0;var n=t.cart.inputCoupon;t.cart.inputCoupon="";t.couponError.hasError=!1;t.invalidCoupon=!1;t.cart.coupon&&h.removeCoupon(l.build({cartId:t.cart.id})).$promise.then(function(i){t.cart.reload(i);c.couponRemoved(n)})},t.setKitName=function(i){if(n.trim(i.inputName)){var r=i.name;i.name=i.inputName;h.setKitName(l.build({cartId:t.cart.id,kitId:i.id,name:i.inputName})).$promise.then(function(){t.quitEditing();c.nameKitSuccess(i.inputName)})["catch"](function(){i.name=r;t.quitEditing()})}else t.quitEditing()},t.assignKit=function(i){if(i.assignToKit&&i.assignToPassword&&!t.signingIn){var r=!1;(n.each(t.cart.kits,function(n,t){if(t!==i&&t.kitNum===i.assignToKit)return r=!0,!1}),r)||(t.signingIn=!0,c.loginAttempt(i.assignToKit),h.assignKit(l.build({cartId:t.cart.id,kitId:i.id,userName:i.assignToKit,password:i.assignToPassword})).$promise.then(function(n){n.success?(t.signInError=null,t.cart.reload(n.cart),t.quitEditing(),c.loginSuccess(i.assignToKit)):(t.signInError=n.message,c.loginInvalid(i.assignToKit));s(function(){t.signingIn=!1},10)}))}},t.editKitName=function(){t.cart.activeKit.isAssigned()||(t.editingKitName=!0,t.assigningKit=!1,t.signingOutOfKit=!1)},t.toggleAssignKit=function(){t.assigningKit=!t.assigningKit;t.editingKitName=!1},t.toggleSignOutKit=function(){t.signingOutOfKit=!t.signingOutOfKit},t.quitEditing=function(){t.editingKitName=!1;t.assigningKit=!1;t.signingOutOfKit=!1},t.goToCheckout=function(){t.cart.isValid()?(c.checkoutButton(t.cart),e.path("/checkout"),t.advanceAttempted=!0):t.advanceAttempted=!0;v()},t.setGender=function(){h.setGender(l.build({cartId:t.cart.id,kitId:t.cart.activeKit.id,female:t.cart.activeKit.female})).$promise.then(function(n){t.cart.reload(n)})},{}}])});define("shoppingCart/address-verifier",["jquery","common/address","google-maps-api","class"],function(n,t,i){function u(i,u){var f,e;if(i&&i.length&&i.length!==0)return f=new t,f.emailAddress=u.emailAddress,f.firstName=u.firstName,f.middleName=u.middleName,f.lastName=u.lastName,f.phoneNum=u.phoneNum,e={},n.each(i[0].address_components,function(t,i){n.inArray(r.streetNumber,i.types)>-1?e.streetNumber=i.long_name:n.inArray(r.streetAddress,i.types)>-1?e.streetAddress=i.long_name:n.inArray(r.streetAddress2,i.types)>-1?e.streetAddress2=i.long_name&&"#"+i.long_name:n.inArray(r.city,i.types)>-1?f.city=i.long_name:n.inArray(r.state,i.types)>-1?f.state=i.short_name:n.inArray(r.postalCode,i.types)>-1&&(f.zipCode=i.long_name)}),f.setStreetAddressComponents(e),f.country=u.country,f.equals(u)?null:f}var r={streetNumber:"street_number",streetAddress:"route",streetAddress2:"subpremise",city:"locality",state:"administrative_area_level_1",postalCode:"postal_code"};return Object.subClass({init:function(n,t){this.api=new i(n);this.$q=t},verify:function(n){var r=this.$q.defer(),i=n.copyTo(new t);return/c\s?\/\s?o/i.test(i.streetAddress2)&&(i.streetAddress2=null),n.country==="United States"?(this.api.geocode({address:i.formatted(!0)},function(t){r.resolve(u(t,n))}),r.promise):void 0}})});define("shoppingCart/currency",["class"],function(){"use strict";return Object.subClass({init:function(){this.currencies={usd:{code:"USD",symbol:"$"},gbp:{code:"GBP",symbol:"£"}}},get:function(n){return this.currencies[n&&n.toLowerCase()]||this.currencies.usd}})});define("shoppingCart/checkout-contactinfo-handler",["jquery","common/address","class"],function(n,t){return Object.subClass({init:function(n,t,i,r){this.checkout=n;this.cart=t;this.addressVerifier=i;this.$q=r;this.areAddressesSame=!0},isShippingAddressSameAsBilling:function(){return this.areAddressesSame},toggleShippingAddresses:function(){this.areAddressesSame=!this.areAddressesSame;this.areAddressesSame&&(this.checkout.shippingAddress=null)},getEditingContactInfoForKit:function(n){return this.checkout.getContactInfoForKit(n.id)},getContactInfoForKitToDisplay:function(n){return this.checkout.getContactInfoForKit(n.id)||{address:this.checkout.billingAddress}},editContactInfoForKit:function(n){this.getEditingContactInfoForKit(n)||this.checkout.setContactInfoForKit(n.id,{address:new t})},quitEditingContactInfoForKit:function(n){this.checkout.removeContactInfoForKit(n.id)},saveContactInfoForKit:function(n,t,i){var u=this,r;i.attempted=!0;n.$valid&&(r=u.getEditingContactInfoForKit(t),r&&this.tryVerifyAddress(n,r.address,r))},tryVerifyAddress:function(n,t,i){var r=this.$q.defer(),u;return t.suggestedAddress||t.verified||!n.$valid?r.resolve():(u=this.addressVerifier.verify(t),u?(i&&this.checkout.setContactInfoForKit(i.kitId,i),u.then(function(n){n&&!n.equals(t)?(t.suggestedAddress=n,r.resolve(n)):r.resolve()})):r.resolve()),r.promise},setSuggestedAddress:function(n){n.suggestedAddress.copyTo(n);n.suggestedAddress=null;n.verified=!0},ignoreSuggestedAddress:function(n){n.suggestedAddress=null;n.verified=!0}})});define("google-analytics",["jquery","class"],function(){"use strict";return Object.subClass({init:function(n){this.$window=n},trackPageView:function(n){this.$window.ga&&this.$window.ga("send","pageview",n)},trackEvent:function(n,t,i,r,u){this.$window.ga&&this.$window.ga("send","event",this.formatString(n),this.formatString(t),this.formatString(i),this.formatInt(r),{nonInteraction:u})},trackTransaction:function(n){var i=this.$window.ga,r,t;if(i){for(i("require","ecommerce"),i("ecommerce:addTransaction",{id:this.formatString(n.transactionId),affiliation:this.formatString(n.affiliation,""),revenue:this.formatString(n.total),shipping:this.formatString(n.shipping),tax:this.formatString(n.tax)}),r=0;r<n.items.length;r++)t=n.items[r],i("ecommerce:addItem",{id:n.transactionId,name:this.formatString(t.name),sku:this.formatString(t.sku),category:this.formatString(t.category),price:this.formatString(t.price),quantity:this.formatString(t.quantity)});i("ecommerce:send")}},formatString:function(n,t){return n?typeof n!="string"?n.toString():n:t},formatInt:function(n,t){return typeof n!="number"?t:Math.round(n)}})});define("google-maps-api",["class"],function(){return Object.subClass({init:function(n){this.$window=n;this.geocoder=null},geocode:function(n,t){var i=this;i.geocoder||(i.geocoder=new i.$window.google.maps.Geocoder);this.geocoder.geocode(n,function(n,r){r==i.$window.google.maps.GeocoderStatus.OK?t&&t(n):t&&t([])})}})});define("shoppingCart/event-tracker",["jquery","google-analytics","class"],function(n,t){"use strict";var i={ViewCart:"View Cart",Checkout:"Checkout",TopNav:"Top Nav"};return Object.subClass({init:function(n){this.$window=n;this.ga=new t(n);this.trackingAllowed=Cookiebot&&Cookiebot.consent&&Cookiebot.consent.statistics},addProduct:function(n){window.dataLayer&&!this.disabled&&this.trackingAllowed&&(this.ga.trackEvent(i.ViewCart,"Add Product",n.name,n.price),dataLayer.push({event:"productClick",ecommerce:{click:{products:[{id:n.id,name:n.name,price:n.price,quantity:1}]}},eventCallback:function(){document.location=document.location.hash}}),dataLayer.push({event:"addToCart",ecommerce:{currencyCode:"USD",add:{products:[{id:n.id,name:n.name,price:n.price,quantity:1}]}}}))},hoverAddProduct:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Hover Add Product",n.name,n.price)},addKitBottom:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Add Kit Bottom",n.getKitsCount())},addKitSummary:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Add Kit Summary",n.getKitsCount())},removeProduct:function(n){window.dataLayer&&!this.disabled&&this.trackingAllowed&&(this.ga.trackEvent(i.ViewCart,"Remove Product",n.name,n.price),dataLayer.push({event:"removeFromCart",ecommerce:{currencyCode:"USD",remove:{products:[{id:n.id,name:n.name,price:n.price,quantity:1}]}}}))},removeProductSummary:function(n){window.dataLayer&&!this.disabled&&this.trackingAllowed&&(this.ga.trackEvent(i.ViewCart,"Remove Product Summary",n.name,n.price),dataLayer.push({event:"removeFromCart",ecommerce:{currencyCode:"USD",remove:{products:[{id:n.id,name:n.name,price:n.price,quantity:1}]}}}))},removeKitSummary:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Remove Kit Summary",n.getKitsCount()+1,n.price)},couponView:function(){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Coupon View")},couponAttempt:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Coupon Attempt",n)},couponSuccess:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Coupon Success",n)},couponInvalid:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Coupon Invalid",n)},couponRemoved:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Coupon Removed",n)},checkoutButton:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Checkout Button",n.getKitsCount(),n.price)},cartExit:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Cart Exit",n.getKitsCount(),n.price)},genderNotSelected:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Gender Not Selected",n.getDisplayKitNumber())},proceedAttemptWithNoProducts:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"No Products Selected",n.getDisplayKitNumber())},kitSelect:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Kit Select",n.getDisplayKitNumber())},nameKitSuccess:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Name Kit Success",n)},loginAttempt:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Log In Attempt",n)},loginSuccess:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Log In Success",n)},loginInvalid:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.ViewCart,"Log In Invalid",n)},editCart:function(n,t){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.Checkout,"Edit Cart",n.getKitsCount(),t)},termsOfServiceClick:function(n,t){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.Checkout,"TOS Click",n.getKitsCount(),t)},purchasePolicyClick:function(n,t){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.Checkout,"Purchase Policy Click",n.getKitsCount(),t)},completeOrder:function(n,t){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.Checkout,"Complete Button",n.getKitsCount(),t)},addProductButton:function(n,t,i){if(window.dataLayer&&!this.disabled&&this.trackingAllowed){this.ga.trackEvent(this.$window.location.pathname,"Add Product",n);var r=[];r.push({id:n,name:t,price:i,quantity:1});dataLayer.push({event:"productClick",ecommerce:{click:{products:r}},eventCallback:function(){document.location=document.location.hash}});dataLayer.push({event:"addToCart",ecommerce:{currencyCode:"USD",add:{products:r}}})}},kitSelectFromButtom:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(this.$window.location.pathname,"Kit Select",n)},openCartFromIcon:function(n){!this.disabled&&this.trackingAllowed&&this.ga.trackEvent(i.TopNav,"Open Cart",n)},onCartView:function(n){var u,t,i,r;if(window.dataLayer&&!this.disabled&&this.trackingAllowed){for(this.ga.trackPageView((this.$window.location.pathname+"/#/shoppingcart").replace("//","/")),u=[],t=0;t<n.kits.length;t++)for(i=0;i<n.kits[t].productsInCart.length;i++)r=n.kits[t].productsInCart[i].product,u.push({id:r.id,name:r.name,price:r.price,quantity:1});dataLayer.push({event:"checkout1",ecommerce:{actionField:{step:1},products:u},eventCallback:function(){document.location=document.location.hash}})}},onCheckoutView:function(n){var u,t,i,r;if(window.dataLayer&&!this.disabled&&this.trackingAllowed){for(this.ga.trackPageView((this.$window.location.pathname+"/#/checkout").replace("//","/")),u=[],t=0;t<n.kits.length;t++)for(i=0;i<n.kits[t].productsInCart.length;i++)r=n.kits[t].productsInCart[i].product,u.push({id:r.id,name:r.name,price:r.price,quantity:1});dataLayer.push({event:"checkout2",ecommerce:{actionField:{step:2},products:u},eventCallback:function(){document.location=document.location.hash}})}},trackTransaction:function(t){var i,r;window.dataLayer&&this.trackingAllowed&&(i={transactionId:t.id.substring(t.id.length-8),affiliation:t.affiliateId,total:t.amount,tax:t.tax,shipping:t.shippingAmount,city:t.city,state:t.state,country:t.country,items:n.map(t.items,function(n){return{transactionId:t.id.substring(t.id.length-8),sku:n.productId,name:n.name,category:n.category,price:n.price,quantity:n.quantity}})},dataLayer.push({event:"checkout3",ecommerce:{actionField:{step:3},products:n.map(t.items,function(n){return{id:n.productId,name:n.name,category:n.category,price:n.price,quantity:n.quantity}})}}),r={event:"purchase",ecommerce:{purchase:{actionField:{id:t.id.substring(t.id.length-8),affiliation:t.ftdnaRef,revenue:t.amount,tax:t.tax,shipping:t.shippingAmount,coupon:t.coupon},products:n.map(t.items,function(n){return{id:n.productId,name:n.name,category:n.category,price:n.price,quantity:n.quantity}})}}},dataLayer.push(r),this.ga.trackTransaction(i))},disable:function(){this.disabled=!0}})});define("shoppingCart/services",["jquery","shoppingCart/event-tracker","shoppingCart/address-verifier","angular","purl"],function(n,t,i){"use strict";var r=angular.module("shoppingCartServices",["ngResource"]);r.factory("Cart",["$resource",function(n){return n("/api/shoppingCart/cart/:cartId",null,{getCart:{method:"post",url:"/api/shoppingCart/cart/:cartId/getCart",params:{cartId:"@cartId",ekit:"@ekit"}},addNewKit:{method:"post",url:"/api/shoppingCart/cart/:cartId/addNewKit",params:{cartId:"@cartId",ekit:"@ekit"}},removeKit:{method:"post",url:"/api/shoppingCart/cart/:cartId/removeKit",params:{cartId:"@cartId",ekit:"@ekit"}},signOutOfKit:{method:"post",url:"/api/shoppingCart/cart/:cartId/signOutOfKit",params:{cartId:"@cartId",ekit:"@ekit"}},removeProduct:{method:"post",url:"/api/shoppingCart/cart/:cartId/removeProduct",params:{cartId:"@cartId",ekit:"@ekit"}},addProduct:{method:"post",url:"/api/shoppingCart/cart/:cartId/addProduct",params:{cartId:"@cartId",ekit:"@ekit"}},addProducts:{method:"post",url:"/api/shoppingCart/cart/:cartId/addProducts",params:{cartId:"@cartId",ekit:"@ekit"}},applyCoupon:{method:"post",url:"/api/shoppingCart/cart/:cartId/applyCoupon",params:{cartId:"@cartId",ekit:"@ekit"}},removeCoupon:{method:"post",url:"/api/shoppingCart/cart/:cartId/removeCoupon",params:{cartId:"@cartId",ekit:"@ekit"}},setKitName:{method:"post",url:"/api/shoppingCart/cart/:cartId/setKitName",params:{cartId:"@cartId",ekit:"@ekit"}},assignKit:{method:"post",url:"/api/shoppingCart/cart/:cartId/assignKit",params:{cartId:"@cartId",ekit:"@ekit"}},setGender:{method:"post",url:"/api/shoppingCart/cart/:cartId/setGender",params:{cartId:"@cartId",ekit:"@ekit"}}})}]);r.factory("Checkout",["$resource",function(n){return n("/api/shoppingCart/checkout/:cartId",null,{getCheckout:{method:"post",url:"/api/shoppingCart/checkout/:cartId/getCheckout",params:{cartId:"@cartId",ekit:"@ekit"}},placeOrder:{method:"post",url:"/api/shoppingCart/checkout/:cartId/placeOrderWithCart",params:{cartId:"@cartId",ekit:"@ekit"}},verifiyAddress:{method:"post",url:"/api/checkout/verifiyAddress"},setCustomerInfo:{method:"post",url:"/api/checkout/setCustomerInfo/:cartId",params:{cartId:"@cartId",ekit:"@ekit"}}})}]);r.factory("CartEventTracker",["$window",function(n){return new t(n)}]);r.factory("AddressVerifier",["$window","$q",function(n,t){return new i(n,t)}]);r.factory("CartParams",["$routeParams",function(t){return{build:function(i){var u=n.url().param(),r={};for(var f in u)u.hasOwnProperty(f)&&(r[f.toLowerCase()]=u[f]);return n.extend(i||{},t,r.ekit?{ekit:r.ekit}:{},r.group?{p:r.group}:{})}}}])});define("shoppingCart/filters",["angular"],function(n){"use strict";var t=n.module("shoppingCartFilters",[]);t.filter("price",function(){return function(n){var i=parseFloat(n),t;return isFinite(i)?(t=i.toFixed(2),t.slice(-3)==".00"?t.substr(0,t.length-3):t):n}})});define("shoppingCart/directives",["jquery","angular"],function(n,t){"use strict";function r(t){var r=n("ul.secondary-nav .shopping-cart"),i,u;r.length&&(i=r.find(".cartCounter"),i.length===0&&t&&r.append('<span class="badge cartCounter"><\/span>'),i.length&&t===0&&i.remove());u=n(".cartCounter");u.text(t)}var i=function(t){i.registered||(n(".close-dialog").click(t),i.registered=!0)};t.module("shoppingCartDirectives",[]).run(["$rootScope",function(n){n.typeOf=function(n){return typeof n}}]).directive("ftdnaCart",["CartEventTracker",function(n){return{scope:!0,link:function(t,u){t.$watchCollection(function(){return t.cart&&t.cart.getProductsCount()},function(){r(t.cart&&t.cart.getProductsCount())});u.find("input, textarea").placeholder();i(function(){n.cartExit(t.cart)});u.parents(".view-container").first().addClass("view-animate-container")}}}]).directive("ftdnaCheckout",["$timeout","CartEventTracker",function(n,t){return{scope:!0,link:function(r,u){n(function(){u.find("input, textarea").placeholder();u.find(".years").width(u.find(".years").width());u.find(".months").width(u.find(".months").width())},500);i(function(){t.cartExit(r.cart)})}}}]).directive("ftdnaProductsInKit",function(){return{restrict:"A",scope:{kit:"=ftdnaKit",removeProduct:"=ftdnaRemoveProduct"},templateUrl:"/shoppingCart/productsInKit"}}).directive("ftdnaAddressVerification",function(){return{restrict:"A",scope:{addressToVerify:"=ftdnaAddressVerificationAddress",handler:"=ftdnaAddressVerificationHandler",form:"=ftdnaAddressVerificationForm",kit:"=ftdnaAddressVerificationKit",addressType:"@addressType"},templateUrl:"/shoppingCart/addressVerification",link:function(n){n.useOriginalAddress=!1;n.checkSelection=function(t){t?n.handler.ignoreSuggestedAddress(n.addressToVerify,n.form,n.kit):n.handler.setSuggestedAddress(n.addressToVerify,n.form,n.kit)}}}}).directive("match",["$parse",function(n){return{require:"ngModel",link:function(t,i,r,u){t.$watch(function(){return n(r.match)(t)===u.$modelValue},function(n){u.$setValidity("mismatch",n)})}}}]).directive("stringToNumber",function(){return{restrict:"A",require:"?ngModel",link:function(n,t,i,r){r.$parsers.push(function(n){return""+n});r.$formatters.push(function(n){return parseFloat(n)})}}})});define("shoppingCart/app",["jquery","angular","ftdna-directives","shoppingCart/checkout-form-controller","shoppingCart/cart-controller","shoppingCart/services","shoppingCart/directives"],function(n,t){"use strict";function r(n){var r=t.module("shoppingCartApp",["ngRoute","ngAnimate","ngMaterial","ngMessages","ftdnaDirectives","shoppingCartController","checkoutController","shoppingCartServices","shoppingCartDirectives"]);r.config(["$routeProvider","$locationProvider",function(n,t){t.hashPrefix("");n.when("/shoppingCart",{templateUrl:"/shoppingCart/cart",controller:"ShoppingCartController"}).when("/checkout",{templateUrl:"/shoppingCart/checkout",controller:"CheckoutController"})}]);i.load("/shoppingCart",function(){t.bootstrap(i,["shoppingCartApp"]);n&&n()})}function u(){i.find(".view-container > div").remove()}var i=n("<div id='cartApp'>");return{configure:r,clear:u,view:i}});define("shoppingCart/dialog",["shoppingCart/app","jquery"],function(n,t){"use strict";function u(u){u=u||{};(u.cartOptions||!/\/shoppingCart/i.test(window.location.hash))&&(t.each(u.cartOptions||{},function(n){u.cartOptions[n]||delete u.cartOptions[n]}),window.location.hash="#/shoppingCart"+(u.cartOptions&&"?"+t.param(u.cartOptions)||""));n.view.dialog({modal:!1,dialogClass:"cart-dialog",resizable:!1,closeOnEscape:!1,open:function(){i||(i=t('<div id="shopping-cart-modal-overlay"><\/div>'));t("body").append(i);t("body").addClass("ovh");i.show()},close:function(){window.location.hash="";n.clear();i.hide();t("body").removeClass("ovh");u.onClose&&u.onClose()}});r=!0}function f(){var u=function(n){try{return!!n.location.href}catch(t){return!1}},i=function(){self==top||u(top)?((n.view.data("uiDialog")||n.view.data("ui-dialog"))&&n.view.dialog("close"),n.view.find(".view-container").first().removeClass("view-animate-container")):top.location.href=parent.location.href},f=function(){t("<span class='close-dialog'><i class='material-icons'>close<\/i><\/span>").click(i).appendTo(n.view)};n.configure(f);t(window).hashchange(function(){location.hash==""&&i()});t(window).resize(function(){r&&n.view.dialog("option","position","center")})}var r=!1,i=null;return f(),{show:u}});define("controls/addproduct",["jquery","shoppingCart/event-tracker"],function(n,t,i){"use strict";n.widget("ftdna.addproduct",{options:{showCart:function(){console.log("No callback has been set to show the cart.")}},_create:function(r){var u=this;u.kitList=n("<ul>").addClass("add-product-kit-list").hide().appendTo("body");u.element.click(function(r){var f=u.element.data("id"),o=u.element.data("rid"),s=u.element.data("name"),h=u.element.data("price"),c=u.element.data("oc"),l=u.element.data("male"),a=u.element.data("c"),v=u.element.data("fs"),e;return u.kitList.children().length>1?u.kitList.toggle().position({my:"left center",at:"right center",of:u.element,collision:"flip flip"}):l&&u.kitList.children().first().hasClass("female")?u._showProductGenderNotAllowed(u.element):u.options.showCart({cartOptions:{pid:f,oc:c||i,c:a||i,fs:v||i,rid:o||i}}),n(".add-product-kit-list").not(u.kitList).hide(),r.stopPropagation(),e=new t(window),e.addProductButton(f,s,h),!1});n("body").click(function(){u.kitList.hide();n("#addProductGenderNotAllowed").hide()});u._setOptions(r||{})},_init:function(){n("#addProductNotAllowed").length==0&&n("<div id='addProductGenderNotAllowed' class='tooltip_warning'><div class='tooltip_warning_header'><i><strong>Test cannot be added to shopping cart<\/strong><\/i><\/div> <p>Y- DNA tests are for males only. Please add this test to a male kit in your shopping cart.<\/p> <div class='triangle'><\/div><\/div>").hide().appendTo("body")},_loadKitList:function(r){var u=this,f=u.element.data("id"),e=u.element.data("rid"),o=u.element.data("oc"),s=u.element.data("male"),h=u.element.data("c"),c=u.element.data("fs");u.kitList.empty().append(n.map(r,function(r){var a="Kit #"+(r.kitNum||r.kitIndex),l=r.name?a+(" - "+r.name):a;return r.female!==null&&(l=l+" ("+(r.female?"Female":"Male")+")"),n("<li>").text(l).addClass(r.female===!0?"female":"").click(function(l){if(s&&r.female)u._showProductGenderNotAllowed(n(this));else{u.options.showCart({cartOptions:{pid:f,kid:r.id,oc:o||i,c:h||i,fs:c||i,rid:e||i}});u.kitList.hide();n("#addProductGenderNotAllowed").hide();var a=new t(window);a.kitSelectFromButtom(r.kitNum||r.kitIndex)}l.stopPropagation()})}))},_showProductGenderNotAllowed:function(t){n("#addProductGenderNotAllowed").show().position({my:"right-10",at:"left",of:t,collision:"flip flip"})}})});var launchDt;define("common/pageInit",["jquery","shoppingCart/dialog","shoppingCart/event-tracker","google-analytics","controls/addproduct"],function(n,t,i,r){"use strict";var u={};return{init:function(t){var i=this;u=t||{};n(function(){(/\/shoppingCart/i.test(window.location.hash)||/\/checkout/i.test(window.location.hash))&&(window.location.hash=window.location.hash.replace(/\/checkout/i,"shoppingCart"),i.showDialog(u));n(".add-product-button").addproduct({showCart:function(t){i.showDialog(n.extend(!0,{},u,t))}});i.initHeader(u);var t=new r(window);n("#saleBanner").click(function(){t.trackEvent("Promo Banner","Click","Page banner was clicked on");i.showDialog(u)});n("span#countdownTimer a").click(function(){ga("send","event","Sale Banner","Click Buy Now","Summer Sale 2014")});attachTimer()})},initButton:function(t){var i=this;t&&t.length&&t.addproduct({showCart:function(t){i.showDialog(n.extend(!0,{},u,t))}})},initHeader:function(t){var r=this;t=t||{};n(".show-cart").click(function(){r.showDialog(t);var u=new i(window);return u.openCartFromIcon(n(this).find("#headerCartCounter").text()||"0"),!1})},showDialog:function(i){t.show(n.extend({onClose:function(){n(".add-product-button").addproduct()}},i))}}});require(["common/pageInit"],function(n){n.init()})