forked from recurly/recurly-js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
recurly.min.js
1 lines (1 loc) · 37.8 KB
/
recurly.min.js
1
(function(h){function j(s){function r(){}r.prototype=s||this;return new r()}var i={};i.settings={};i.Error={toString:function(){return"RecurlyJS Error: "+this.message}};i.raiseError=function(r){var s=j(i.Error);s.message=r;throw s};i.config=function(r){h.extend(true,i.settings,r);if(!r.baseURL){switch(i.settings.environment){case"sandbox":i.settings.baseURL="https://api-sandbox.recurly.com/jsonp/";break;case"production":i.settings.baseURL="https://api-production.recurly.com/jsonp/";break;default:i.raiseError("environment not configured (sandbox or production)");break}var s=i.settings.subdomain||i.raiseError("company subdomain not configured");i.settings.baseURL+=s+"/"}};function q(s,r){if(s==1){return r.substr(0,r.length-1)}return""+s+" "+r}(i.Cost=function(r){this._cents=r||0}).prototype={toString:function(){return i.formatCurrency(this.dollars())},cents:function(r){if(r===undefined){return this._cents}return new Cost(r)},dollars:function(r){if(r===undefined){return this._cents/100}return new i.Cost(r*100)},mult:function(r){return new i.Cost(this._cents*r)},add:function(r){if(r.cents){r=r.cents()}return new i.Cost(this._cents+r)},sub:function(r){if(r.cents){r=r.cents()}return new i.Cost(this._cents-r)}};i.Cost.FREE=new i.Cost(0);(i.TimePeriod=function(s,r){this.length=s;this.unit=r}).prototype={toString:function(){return""+q(this.length,this.unit)},toDate:function(){var r=new Date();switch(this.unit){case"month":r.setMonth(r.getMonth()+this.length);break;case"day":r.setDay(r.getDay()+this.length);break}return r},clone:function(){return new i.TimePeriod(this.length,this.unit)}};(i.RecurringCost=function(s,r){this.cost=s;this.interval=r}).prototype={toString:function(){return""+this.cost+" every "+this.interval},clone:function(){return new i.TimePeriod(this.length,this.unit)}};i.RecurringCost.FREE=new i.RecurringCost(0,null);(i.RecurringCostStage=function(r,s){this.recurringCost=r;this.duration=s}).prototype={toString:function(){this.recurringCost.toString()+" for "+this.duration.toString()}};i.locale={};i.locale.errors={emptyField:"Required field",missingFullAddress:"Please enter your full address.",invalidEmail:"Invalid",invalidCC:"Invalid",invalidCVV:"Invalid",invalidCoupon:"Invalid",cardDeclined:"Transaction declined"};i.locale.currencies={};i.locale.currency={format:"%u%n",separator:".",delimiter:",",precision:2};function a(r,s){var u=i.locale.currencies[r]=j(i.locale.currency);for(var t in s){u[t]=s[t]}}a("USD",{symbol:"$"});a("AUD",{symbol:"$"});a("CAD",{symbol:"$"});a("EUR",{symbol:"\u20ac"});a("GBP",{symbol:"\u00a3"});a("CZK",{symbol:"\u004b"});a("DKK",{symbol:"\u6b72"});a("HUF",{symbol:"Ft"});a("JPY",{symbol:"\u00a5"});a("NOK",{symbol:"kr"});a("NZD",{symbol:"$"});a("PLN",{symbol:"\u007a"});a("SGD",{symbol:"$"});a("SEK",{symbol:"kr"});a("CHF",{symbol:"Fr"});a("ZAR",{symbol:"R"});i.settings.locale=i.locale;i.detectCardType=function(r){r=r.replace(/\D/g,"");var t=[{name:"visa",prefixes:[4]},{name:"mastercard",prefixes:[51,52,53,54,55]},{name:"american_express",prefixes:[34,37]},{name:"discover",prefixes:[6011,62,64,65]},{name:"diners_club",prefixes:[305,36,38]},{name:"carte_blanche",prefixes:[300,301,302,303,304,305]},{name:"jcb",prefixes:[35]},{name:"enroute",prefixes:[2014,2149]},{name:"solo",prefixes:[6334,6767]},{name:"switch",prefixes:[4903,4905,4911,4936,564182,633110,6333,6759]},{name:"maestro",prefixes:[5018,5020,5038,6304,6759,6761]},{name:"visa",prefixes:[417500,4917,4913,4508,4844]},{name:"laser",prefixes:[6304,6706,6771,6709]}];for(var u=0;u<t.length;u++){for(var s=0;s<t[u].prefixes.length;s++){if(new RegExp("^"+t[u].prefixes[s].toString()).test(r)){return t[u].name}}}};i.formatCurrency=function(u,y){if(u<0){u=-u;var t=true}else{var t=false}y=y||i.settings.currency||i.raiseError("currency not configured");var x=i.locale.currency;var s=i.locale.currencies[y];var w=u.toFixed(s.precision);if(x.separator!="."){w=w.replace(/\./g,x.separator)}function r(A){var z=new RegExp("(-?[0-9]+)([0-9]{3})");while(z.test(A)){A=A.replace(z,"$1"+x.delimiter+"$2")}return A}w=r(w);var v=x.format;v=v.replace(/%u/g,s.symbol);v=v.replace(/%n/g,w);w=v;if(t){w="-"+w}return w};var l=["AT","BE","BG","CY","CZ","DK","EE","FI","FR","DE","GR","HU","IE","IT","LV","LT","LU","MT","NL","PL","PT","RO","SK","SI","ES","SE","GB"];i.isVATApplicable=function(t){if(!i.settings.VATPercent){return false}if(!i.settings.country){i.raiseError("you must configure a country for VAT to work")}var s=i.settings.country;var r=h.inArray(t,l)!==-1;return r&&(s!=t)};i.flattenErrors=function(y,s){var r=[];var v=["base","account_id"];var s=s||"";if(typeof y=="string"||typeof y=="number"||typeof y=="boolean"){if(h.inArray(v,s)){return[y]}return[""+s+" "+y]}for(var u in y){if(y.hasOwnProperty(u)){s=(parseInt(u).toString()==u)?s:u;var x=i.flattenErrors(y[u],s);for(var w=0,t=x.length;w<t;++w){r.push(x[w])}}}return r};i.replaceVars=function(u,t){for(var s in t){if(t.hasOwnProperty(s)){var r=encodeURIComponent(t[s]);u=u.replace(new RegExp("\\{"+s+"\\}","g"),r)}}return u};i.post=function(r,v,s){var t=h("<form />").hide();t.attr("action",r).attr("method","POST").attr("enctype",s?"application/x-www-form-urlencoded":"multipart/form-data");function u(x,A,z){var w=(z.length>0?(z+"["+x+"]"):x);if(typeof A==="object"){for(var y in A){if(A.hasOwnProperty(y)){u(y,A[y],w)}}}else{h('<input type="hidden" />').attr({name:w,value:A}).appendTo(t)}}u("",v,"");h("body").append(t);t.submit()};(i.isValidCC=function(u){if(/[^0-9-]+/.test(u)){return false}var v=0,t=0,r=false;u=u.replace(/\D/g,"");for(var w=u.length-1;w>=0;w--){var s=u.charAt(w);var t=parseInt(s,10);if(r){if((t*=2)>9){t-=9}}v+=t;r=!r}return(v%10)==0}).defaultErrorKey="invalidCC";(i.isValidEmail=function(r){return/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(r)}).defaultErrorKey="invalidEmail";function f(r){return/^[0-9]+$/.test(r)}(i.isValidCVV=function(r){return(r.length==3||r.length==4)&&f(r)}).defaultErrorKey="invalidCVV";(i.isNotEmpty=function(r){return !!r}).defaultErrorKey="emptyField";i.Plan={create:j,fromJSON:function(u){var v=this.create();v.name=u.name;v.code=u.plan_code;v.cost=new i.Cost(u.unit_amount_in_cents);v.displayQuantity=u.display_quantity;v.interval=new i.TimePeriod(u.plan_interval_length,u.plan_interval_unit);if(u.trial_interval_length){v.trial=new i.TimePeriod(u.trial_interval_length,u.trial_interval_unit)}if(u.setup_fee_in_cents){v.setupFee=new i.Cost(u.setup_fee_in_cents)}v.addOns=[];if(u.add_ons){for(var s=u.add_ons.length,t=0;t<s;++t){var r=u.add_ons[t];v.addOns.push(i.AddOn.fromJSON(r))}}return v},get:function(r,s){h.ajax({url:i.settings.baseURL+"plans/"+r,dataType:"jsonp",jsonp:"callback",timeout:10000,success:function(t){var u=i.Plan.fromJSON(t);s(u)}})},createSubscription:function(){var r=j(i.Subscription);r.plan=j(this);r.plan.quantity=1;r.addOns=[];return r}};i.AddOn={fromJSON:function(s){var r=j(i.AddOn);r.name=s.name;r.code=s.add_on_code;r.cost=new i.Cost(s.default_unit_amount_in_cents);r.displayQuantity=s.display_quantity;return r},toJSON:function(){return{name:this.name,add_on_code:this.code,default_unit_amount_in_cents:this.default_unit_amount_in_cents}}};i.Account={create:j,toJSON:function(){return{first_name:this.firstName,last_name:this.lastName,account_code:this.code,email:this.email}}};i.BillingInfo={create:j,toJSON:function(){return{first_name:this.firstName,last_name:this.lastName,month:this.expires.getMonth()+1,year:this.expires.getFullYear(),number:this.number,verification_value:this.cvv,address1:this.address1,address2:this.address2,city:this.city,state:this.state,zip:this.zip,country:this.country}},save:function(r){var s={billing_info:this.toJSON(),signature:r.signature};h.ajax({url:i.settings.baseURL+"accounts/"+r.accountCode+"/billing_info/update",data:s,dataType:"jsonp",jsonp:"callback",timeout:60000,success:function(t){if(t.success&&r.success){r.success(t.success)}else{if(t.errors&&r.error){r.error(i.flattenErrors(t.errors))}}},error:function(){if(r.error){r.error(["Unknown error processing transaction. Please try again later."])}},complete:r.complete||h.noop})}};i.Subscription={create:j,plan:i.Plan,addOns:[],calculateTotals:function(){var u={stages:{}};u.plan=this.plan.cost.mult(this.plan.quantity);u.allAddOns=new i.Cost(0);u.addOns={};for(var s=this.addOns.length,t=0;t<s;++t){var r=this.addOns[t],x=r.cost.mult(r.quantity);u.addOns[r.code]=x;u.allAddOns=u.allAddOns.add(x)}u.stages.recurring=u.plan.add(u.allAddOns);u.stages.now=u.plan.add(u.allAddOns);if(this.plan.trial){u.stages.now=i.Cost.FREE}if(this.plan.setupFee){u.stages.now=u.stages.now.add(this.plan.setupFee)}if(this.coupon){var v=u.stages.now;var w=u.stages.now.discount(this.coupon);u.coupon=w.sub(v);u.stages.now=w}if(this.billingInfo&&i.isVATApplicable(this.billingInfo.country)&&!this.billingInfo.vatNumber){u.vat=u.stages.now.mult((i.settings.VATPercent/100));u.stages.now=u.stages.now.sub(u.vat)}return u},redeemAddOn:function(s){var r=s.createRedemption();this.addOns.push(r);return r},removeAddOn:function(u){for(var s=this.addOns,r=s.length,t=0;t<r;++t){if(s[t].code==u){return s.splice(t,1)}}},findAddOnByCode:function(t){for(var r=this.addOns.length,s=0;s<r;++s){if(this.addOns[s].code==t){return this.addOns[s]}}return false},toJSON:function(){var v={plan_code:this.plan.code,quantity:this.plan.quantity,coupon_code:this.coupon?this.coupon.code:undefined,add_ons:[]};for(var u=0,t=this.addOns.length,s=v.add_ons,r=this.addOns;u<t;++u){s.push({add_on_code:r[u].code,quantity:r[u].quantity})}return v},save:function(r){var s={subscription:this.toJSON(),account:this.account.toJSON(),billing_info:this.billingInfo.toJSON()};h.ajax({url:i.settings.baseURL+"subscribe",data:s,dataType:"jsonp",jsonp:"callback",timeout:60000,success:function(t){if(t.success&&r.success){r.success(t.success)}else{if(t.errors&&r.error){var u=t.errors.error_code;delete t.errors.error_code;r.error(i.flattenErrors(t.errors),u)}}},error:function(){if(r.error){r.error(["Unknown error processing transaction. Please try again later."])}},complete:r.complete})}};i.AddOn.createRedemption=function(t){var s=j(this);s.quantity=t||1;return s};i.Coupon={fromJSON:function(r){var s=j(i.Coupon);if(r.discount_in_cents){s.discountCost=new i.Cost(-r.discount_in_cents)}else{if(r.discount_percent){s.discountRatio=r.discount_percent/100}}s.description=r.description;return s},toJSON:function(){}};i.Cost.prototype.discount=function(r){if(r.discountCost){return this.add(r.discountCost)}var s=this.sub(this.mult(r.discountRatio));if(s.cents()<0){return i.Cost.FREE}return s};i.Subscription.getCoupon=function(t,r,s){if(!i.settings.baseURL){i.raiseError("Company subdomain not configured")}return h.ajax({url:i.settings.baseURL+"plans/"+this.plan.code+"/coupons/"+t,dataType:"jsonp",jsonp:"callback",timeout:10000,success:function(v){var u=i.Coupon.fromJSON(v);u.code=t;if(v.valid){r(u)}else{s()}},error:function(){s()}})};i.Transaction={toJSON:function(){return{currency:this.currency,amount_in_cents:this.cost.cents()}},create:j,save:function(r){var s={transaction:this.toJSON(),account:this.account?this.account.toJSON():undefined,billing_info:this.billingInfo.toJSON(),signature:r.signature};h.ajax({url:i.settings.baseURL+"transactions/create",data:s,dataType:"jsonp",jsonp:"callback",timeout:60000,success:function(t){if(t.success&&r.success){r.success(t.success)}else{if(t.errors&&r.error){r.error(i.flattenErrors(t.errors))}}},error:function(){if(r.error){r.error(["Unknown error processing transaction. Please try again later."])}},complete:r.complete||h.noop})}};i.UserError={};function k(r,s){var t=j(i.UserError);t.validation=r;t.element=s;throw t}function o(v){try{v()}catch(u){if(!u.validation){throw u}var w=u.element;var t=i.locale.errors[u.validation.errorKey];var s=u.validation.validator;var r=h('<div class="error">');r.text(t);r.insertAfter(w);w.addClass("invalid");w.bind("change keyup",function(){var x=w.val();if(s(x)){w.removeClass("invalid");r.remove();w.unbind()}});w.focus()}}function e(t,w,s){var y=t.find(w+" input");if(y.length==0){y=t.find(w+" select")}if(y.length==0){return undefined}var x=y.val();for(var u=2,r;r=arguments[u];++u){if(!r.validator(x)){k(r,y)}}return x}function b(s,r){return{validator:s,errorKey:r||s.defaultErrorKey}}function d(r){var s=r.find(".server_errors");s.removeClass("any").addClass("none");s.empty()}function m(s,w){var u=s.find(".server_errors");d(s);var r=w.length;if(r){u.removeClass("none").addClass("any");for(var v=0;v<r;++v){var t=h('<div class="error">');t.text(w[v]);u.append(t)}}}function p(r,s){r.delegate(".placeholder","click",function(){var t=h(this);var u=h(this).parent();u.find("input").focus()});r.delegate("input","change keyup",function(){var u=h(this);var t=h(this).parent();if(u.val().length>0){t.find(".placeholder").hide()}else{t.find(".placeholder").show()}});r.delegate("input","focus",function(){h(this).parent().addClass("focus")});r.delegate("input","blur",function(){h(this).parent().removeClass("focus")});r.delegate("input","keydown",function(t){if(t.keyCode>=48&&t.keyCode<=90){h(this).parent().find(".placeholder").hide()}})}function n(G,F){if(i.settings.country){var v=G.find(".country option[value="+i.settings.country+"]");if(v.length){v.attr("selected",true).change()}}if(F.distinguishContactFromBillingInfo){var E=G.find(".contact_info .first_name input");var x=G.find(".contact_info .last_name input");var z=E.val();var B=x.val();G.find(".contact_info .first_name input").change(function(){var H=G.find(".billing_info .first_name input");if(H.val()==z){H.val(h(this).val()).change()}z=E.val()});G.find(".contact_info .last_name input").change(function(){var H=G.find(".billing_info .last_name input");if(H.val()==B){H.val(h(this).val()).change()}B=x.val()})}else{G.find(".billing_info .first_name, .billing_info .last_name").remove()}var t=new Date();var D=t.getFullYear();var C=t.getMonth();var w=G.find(".year select");var r=G.find(".month select");for(var y=D;y<=D+10;++y){var s=h('<option name="'+y+'">'+y+"</option>");s.appendTo(w)}function A(){if(w.val()==D){r.find('option[value="'+C+'"]');var H=false;r.find("option").each(function(){if(h(this).val()<=C){h(this).attr("disabled",true)}else{h(this).removeAttr("disabled");if(!H){H=true;h(this).attr("selected",true)}}})}else{r.find("option").removeAttr("disabled")}}A();w.change(A);if(F.addressRequirement=="none"){G.find(".address").remove()}else{if(F.addressRequirement=="zip"){G.find(".address").addClass("only_zip");G.find(".address1, .address2, .city, .state").remove();if(!i.settings.VATPercent){G.find(".country").remove()}}else{if(F.addressRequirement=="zipstreet"){G.find(".address").addClass("only_zipstreet");G.find(".city, .state").remove();if(!i.settings.VATPercent){G.find(".country").remove()}}else{if(F.addressRequirement=="full"){G.find(".address").addClass("full")}}}}var u=G.find(".accepted_cards");G.find(".card_number input").bind("change keyup",function(){var H=i.detectCardType(h(this).val());if(H){u.find(".card").each(function(){h(this).toggleClass("match",h(this).hasClass(H));h(this).toggleClass("no_match",!h(this).hasClass(H))})}else{u.find(".card").removeClass("match no_match")}})}function g(r,t,s){t.firstName=e(r,".contact_info .first_name",b(i.isNotEmpty));t.lastName=e(r,".contact_info .last_name",b(i.isNotEmpty));t.email=e(r,".email",b(i.isNotEmpty),b(i.isValidEmail));t.code=s}function c(r,t){t.firstName=e(r,".billing_info .first_name",b(i.isNotEmpty));t.lastName=e(r,".billing_info .last_name",b(i.isNotEmpty));t.number=e(r,".card_number",b(i.isNotEmpty),b(i.isValidCC));t.cvv=e(r,".cvv",b(i.isNotEmpty),b(i.isValidCVV));var s=new Date(0);s.setMonth(e(r,".month")-1);s.setFullYear(e(r,".year"));t.expires=s;t.address1=e(r,".address1",b(i.isNotEmpty));t.address2=e(r,".address2");t.city=e(r,".city",b(i.isNotEmpty));t.state=e(r,".state",b(i.isNotEmpty));t.zip=e(r,".zip",b(i.isNotEmpty));t.country=e(r,".country",b(function(u){return u!="-"},"emptyField"))}i.buildBillingInfoUpdateForm=function(s){var t={addressRequirement:"full"};s=h.extend({},t,s);s.distinguishContactFromBillingInfo=true;if(!s.accountCode){i.raiseError("accountCode missing")}if(!s.signature){i.raiseError("signature missing")}var u=i.BillingInfo.create();var r=h(i.updateBillingInfoFormHTML);r.find(".billing_info").html(i.billingInfoFieldsHTML);p(r,s);n(r,s);r.submit(function(v){v.preventDefault();d(r);r.find(".error").remove();r.find(".invalid").removeClass("invalid");o(function(){c(r,u);r.addClass("submitting");r.find("button.submit").attr("disabled",true).text("Please Wait");u.save({signature:s.signature,accountCode:s.accountCode,success:function(w){if(s.afterUpdate){s.afterUpdate(w)}if(s.successURL){var x=s.successURL;i.post(x,w,true)}},error:function(w){if(!s.onError||!s.onError(w)){m(r,w)}},complete:function(){r.removeClass("submitting");r.find("button.submit").removeAttr("disabled").text("Update")}})})});h(function(){var v=h(s.target);v.html(r)})};i.buildTransactionForm=function(s){var u={addressRequirement:"full",distinguishContactFromBillingInfo:true,collectContactInfo:true};s=h.extend(j(i.settings),u,s);if(!s.collectContactInfo&&!s.accountCode){i.raiseError("collectContactInfo is false, but no accountCode provided")}if(!s.signature){i.raiseError("signature missing")}var w=i.BillingInfo.create(),t=i.Account.create(),v=i.Transaction.create();v.account=t;v.billingInfo=w;v.currency=s.currency;v.cost=new i.Cost(s.amountInCents);var r=h(i.oneTimeTransactionFormHTML);r.find(".billing_info").html(i.billingInfoFieldsHTML);if(s.collectContactInfo){r.find(".contact_info").html(i.contactInfoFieldsHTML)}else{r.find(".contact_info").remove()}p(r,s);n(r,s);r.submit(function(x){x.preventDefault();d(r);r.find(".error").remove();r.find(".invalid").removeClass("invalid");o(function(){g(r,t,s.accountCode);c(r,w);r.addClass("submitting");r.find("button.submit").attr("disabled",true).text("Please Wait");v.save({signature:s.signature,accountCode:s.accountCode,success:function(y){if(s.afterPay){s.afterPay(y)}if(s.successURL){var z=s.successURL;i.post(z,y,true)}},error:function(y){if(!s.onError||!s.onError(y)){m(r,y)}},complete:function(){r.removeClass("submitting");r.find("button.submit").removeAttr("disabled").text("Pay")}})})});h(function(){var x=h(s.target);x.html(r)})};i.buildSubscriptionForm=function(s){var u={enableAddOns:true,enableCoupons:true,addressRequirement:"full",distinguishContactFromBillingInfo:false};s=h.extend(j(i.settings),u,s);var r=h(i.subscribeFormHTML);r.find(".contact_info").html(i.contactInfoFieldsHTML);r.find(".billing_info").html(i.billingInfoFieldsHTML);p(r,s);if(s.planCode){i.Plan.get(s.planCode,t)}else{if(s.plan){t(s.plan)}}function t(v){if(s.filterPlan){v=s.filterPlan(v)||v}var K=v.createSubscription(),w=i.Account.create(),D=i.BillingInfo.create();K.account=w;K.billingInfo=D;if(s.filterSubscription){K=s.filterSubscription(K)||K}n(r,s,D);if(!v.displayQuantity){r.find(".plan .quantity").remove()}if(v.setupFee){r.find(".subscription").addClass("with_setup_fee");r.find(".plan .setup_fee .cost").text(""+v.setupFee)}else{r.find(".plan .setup_fee").remove()}if(v.trial){r.find(".subscription").addClass("with_trial");r.find(".plan .free_trial").text("First "+v.trial+" free")}else{r.find(".plan .free_trial").remove()}function B(){var N=K.calculateTotals();r.find(".plan .recurring_cost .cost").text(""+N.plan);r.find(".due_now .cost").text(""+N.stages.now);r.find(".coupon .discount").text(""+(N.coupon||""));r.find(".vat .cost").text(""+(N.vat||""));r.find(".add_ons .add_on").each(function(){var O=h(this).data("add_on");if(h(this).hasClass("selected")){var P=N.addOns[O.code];h(this).find(".cost").text("+ "+P)}else{h(this).find(".cost").text("+ "+O.cost)}})}r.find(".plan .quantity input").bind("change keyup",function(){K.plan.quantity=parseInt(h(this).val(),10)||1;B()});r.find(".plan .name").text(v.name);r.find(".plan .recurring_cost .cost").text(""+v.cost);r.find(".plan .recurring_cost .interval").text("every "+v.interval);var z=r.find(".add_ons");if(s.enableAddOns){var H=v.addOns.length;if(H){z.removeClass("none").addClass("any");for(var I=0;I<H;++I){var E=v.addOns[I];var J="add_on add_on_"+E.code+(I%2?" even":" odd");if(I==0){J+=" first"}if(I==H-1){J+=" last"}var y=h('<div class="'+J+'"><div class="name">'+E.name+'</div><div class="field quantity"><div class="placeholder">Qty</div><input type="text"></div><div class="cost"/></div>');if(!E.displayQuantity){y.find(".quantity").remove()}y.data("add_on",E);y.appendTo(z)}z.delegate(".add_ons .quantity input","change keyup",function(Q){var N=h(this).closest(".add_on");var P=N.data("add_on");var O=parseInt(h(this).val(),10)||1;K.findAddOnByCode(P.code).quantity=O;B()});z.bind("selectstart",function(N){if(h(N.target).is(".add_on")){N.preventDefault()}});z.delegate(".add_ons .add_on","click",function(R){if(h(R.target).closest(".quantity").length){return}var P=!h(this).hasClass("selected");h(this).toggleClass("selected",P);var Q=h(this).data("add_on");if(P){var N=K.redeemAddOn(Q);var O=h(this).find(".quantity input");N.quantity=parseInt(O.val(),10)||1;O.focus()}else{K.removeAddOn(Q.code)}B()})}}else{z.remove()}var C=r.find(".coupon");var G=null;function L(){var N=C.find("input").val();if(N==G){return}G=N;if(!N){C.removeClass("invalid").removeClass("valid");C.find(".description").text("");K.coupon=undefined;B();return}C.addClass("checking");K.getCoupon(N,function(O){C.removeClass("checking");K.coupon=O;C.removeClass("invalid").addClass("valid");C.find(".description").text(O.description);B()},function(){K.coupon=undefined;C.removeClass("checking");C.removeClass("valid").addClass("invalid");C.find(".description").text("Not Found");B()})}if(s.enableCoupons){C.find("input").bind("keyup change",function(N){});C.find("input").keypress(function(N){if(N.charCode==13){N.preventDefault();L()}});C.find(".check").click(function(){L()});C.find("input").blur(function(){C.find(".check").click()})}else{C.remove()}var x=r.find(".vat");var M=r.find(".vat_number");var F=M.find("input");x.find("label").text("VAT at "+i.settings.VATPercent+"%");function A(){var O=r.find(".country select").val();var N=i.isVATApplicable(O);var P=F.val();M.toggleClass("applicable",N);M.toggleClass("inapplicable",!N);N=N&&!P;x.toggleClass("applicable",N);x.toggleClass("inapplicable",!N)}A();r.find(".country select").change(function(){D.country=h(this).val();B();A()});F.bind("keyup change",function(){D.vatNumber=h(this).val();B();A()});r.submit(function(N){N.preventDefault();d(r);r.find(".error").remove();r.find(".invalid").removeClass("invalid");o(function(){g(r,w,s.accountCode);c(r,D);r.addClass("submitting");r.find("button.submit").attr("disabled",true).text("Please Wait");K.save({success:function(O){if(s.afterSubscribe){s.afterSubscribe(O)}if(s.successURL){var P=s.successURL;i.post(P,O,true)}},error:function(O){if(!s.onError||!s.onError(O)){m(r,O)}},complete:function(){r.removeClass("submitting");r.find("button.submit").removeAttr("disabled").text("Subscribe")}})})});B();if(s.beforeInject){s.beforeInject(r.get(0))}h(function(){var N=h(s.target);N.html(r);if(s.afterInject){s.afterInject(r.get(0))}})}};i.contactInfoFieldsHTML='<div class="title">Contact Info</div><div class="full_name"><div class="field first_name"><div class="placeholder">First Name </div><input type="text"/></div><div class="field last_name"><div class="placeholder">Last Name </div><input type="text"/></div></div><div class="field email"><div class="placeholder">Email </div><input type="text"/></div>';i.billingInfoFieldsHTML='<div class="title">Billing Info</div><div class="accepted_cards"><div class="card american_express">American Express</div><div class="card discover">Discover</div><div class="card mastercard">MasterCard </div><div class="card visa">Visa</div></div><div class="credit_card"><div class="field first_name"><div class="placeholder">First Name </div><input type="text"/></div><div class="field last_name"><div class="placeholder">Last Name </div><input type="text"/></div><div class="card_cvv"><div class="field card_number"><div class="placeholder">Credit Card Number </div><input type="text"/></div><div class="field cvv"><div class="placeholder">CVV </div><input type="text"/></div><!-- :number, :maxlength => 22, :class => \'required creditcard\', :placeholder => \'Credit Card Number\'--></div><div class="field expires"><div class="title">Expires </div><div class="month"><select><option value="1">01 - January</option><option value="2">02 - February</option><option value="3">03 - March</option><option value="4">04 - April</option><option value="5">05 - May</option><option value="6">06 - June</option><option value="7">07 - July</option><option value="8">08 - August</option><option value="9">09 - September</option><option value="10">10 - October</option><option value="11">11 - November</option><option value="12">12 - December</option><!-- = render :partial => \'months\' --></select></div><div class="year"><select></select></div></div></div><div class="address"><div class="field address1"><div class="placeholder">Address</div><input type="text"/></div><div class="field address2"><div class="placeholder">Apt/Suite</div><input type="text"/></div><div class="field city"><div class="placeholder">City</div><input type="text"/></div><div class="state_zip"><div class="field state"><div class="placeholder">State/Province</div><input type="text"/></div><div class="field zip"><div class="placeholder">Zip/Postal</div><input type="text"/></div></div><div class="field country"><!-- label Country --><select><option value="-">Select Country</option><option value="-">-------------- </option><option value="AF">Afghanistan</option><option value="AL">Albania</option><option value="DZ">Algeria</option><option value="AS">American Samoa</option><option value="AD">Andorra</option><option value="AO">Angola</option><option value="AI">Anguilla</option><option value="AQ">Antarctica</option><option value="AG">Antigua and Barbuda</option><option value="AR">Argentina</option><option value="AM">Armenia</option><option value="AW">Aruba</option><option value="AC">Ascension(Island</option><option value="AU">Australia</option><option value="AT">Austria</option><option value="AZ">Azerbaijan</option><option value="BS">Bahamas</option><option value="BH">Bahrain</option><option value="BD">Bangladesh</option><option value="BB">Barbados</option><option value="BY">Belarus</option><option value="BE">Belgium</option><option value="BZ">Belize</option><option value="BJ">Benin</option><option value="BM">Bermuda</option><option value="BT">Bhutan</option><option value="BO">Bolivia</option><option value="BA">Bosnia and Herzegovina</option><option value="BW">Botswana</option><option value="BV">Bouvet Island</option><option value="BR">Brazil</option><option value="BQ">British Antarctic Territory</option><option value="IO">British Indian Ocean Territory</option><option value="VG">British Virgin Islands</option><option value="BN">Brunei</option><option value="BG">Bulgaria</option><option value="BF">Burkina Faso</option><option value="BI">Burundi</option><option value="KH">Cambodia</option><option value="CM">Cameroon</option><option value="CA">Canada</option><option value="IC">Canary Islands</option><option value="CT">Canton and Enderbury Islands</option><option value="CV">Cape Verde</option><option value="KY">Cayman Islands</option><option value="CF">Central African Republic</option><option value="EA">Ceuta and Melilla</option><option value="TD">Chad</option><option value="CL">Chile</option><option value="CN">China</option><option value="CX">Christmas Island</option><option value="CP">Clipperton Island</option><option value="CC">Cocos [Keeling] Islands</option><option value="CO">Colombia</option><option value="KM">Comoros</option><option value="CD">Congo [DRC]</option><option value="CG">Congo [Republic]</option><option value="CK">Cook Islands</option><option value="CR">Costa Rica</option><option value="HR">Croatia</option><option value="CU">Cuba</option><option value="CY">Cyprus</option><option value="CZ">Czech Republic</option><option value="DK">Denmark</option><option value="DG">Diego Garcia</option><option value="DJ">Djibouti</option><option value="DM">Dominica</option><option value="DO">Dominican Republic</option><option value="NQ">Dronning Maud Land</option><option value="DD">East Germany</option><option value="TL">East Timor</option><option value="EC">Ecuador</option><option value="EG">Egypt</option><option value="SV">El Salvador</option><option value="GQ">Equatorial Guinea</option><option value="ER">Eritrea</option><option value="EE">Estonia</option><option value="ET">Ethiopia</option><option value="EU">European Union</option><option value="FK">Falkland Islands [Islas Malvinas]</option><option value="FO">Faroe Islands</option><option value="FJ">Fiji</option><option value="FI">Finland</option><option value="FR">France</option><option value="GF">French Guiana</option><option value="PF">French Polynesia</option><option value="TF">French Southern Territories</option><option value="FQ">French Southern and Antarctic Territories</option><option value="GA">Gabon</option><option value="GM">Gambia</option><option value="GE">Georgia</option><option value="DE">Germany</option><option value="GH">Ghana</option><option value="GI">Gibraltar</option><option value="GR">Greece</option><option value="GL">Greenland</option><option value="GD">Grenada</option><option value="GP">Guadeloupe</option><option value="GU">Guam</option><option value="GT">Guatemala</option><option value="GG">Guernsey</option><option value="GN">Guinea</option><option value="GW">Guinea-Bissau</option><option value="GY">Guyana</option><option value="HT">Haiti</option><option value="HM">Heard Island and McDonald Islands</option><option value="HN">Honduras</option><option value="HK">Hong Kong</option><option value="HU">Hungary</option><option value="IS">Iceland</option><option value="IN">India</option><option value="ID">Indonesia</option><option value="IR">Iran</option><option value="IQ">Iraq</option><option value="IE">Ireland</option><option value="IM">Isle of Man</option><option value="IL">Israel</option><option value="IT">Italy</option><option value="CI">Ivory Coast</option><option value="JM">Jamaica</option><option value="JP">Japan</option><option value="JE">Jersey</option><option value="JT">Johnston Island</option><option value="JO">Jordan</option><option value="KZ">Kazakhstan</option><option value="KE">Kenya</option><option value="KI">Kiribati</option><option value="KW">Kuwait</option><option value="KG">Kyrgyzstan</option><option value="LA">Laos</option><option value="LV">Latvia</option><option value="LB">Lebanon</option><option value="LS">Lesotho</option><option value="LR">Liberia</option><option value="LY">Libya</option><option value="LI">Liechtenstein</option><option value="LT">Lithuania</option><option value="LU">Luxembourg</option><option value="MO">Macau</option><option value="MK">Macedonia [FYROM]</option><option value="MG">Madagascar</option><option value="MW">Malawi</option><option value="MY">Malaysia</option><option value="MV">Maldives</option><option value="ML">Mali</option><option value="MT">Malta</option><option value="MH">Marshall Islands</option><option value="MQ">Martinique</option><option value="MR">Mauritania</option><option value="MU">Mauritius</option><option value="YT">Mayotte</option><option value="FX">Metropolitan France</option><option value="MX">Mexico</option><option value="FM">Micronesia</option><option value="MI">Midway Islands</option><option value="MD">Moldova</option><option value="MC">Monaco</option><option value="MN">Mongolia</option><option value="ME">Montenegro</option><option value="MS">Montserrat</option><option value="MA">Morocco</option><option value="MZ">Mozambique</option><option value="MM">Myanmar [Burma]</option><option value="NA">Namibia</option><option value="NR">Nauru</option><option value="NP">Nepal</option><option value="NL">Netherlands</option><option value="AN">Netherlands Antilles</option><option value="NT">Neutral Zone</option><option value="NC">New Caledonia</option><option value="NZ">New Zealand</option><option value="NI">Nicaragua</option><option value="NE">Niger</option><option value="NG">Nigeria</option><option value="NU">Niue</option><option value="NF">Norfolk Island</option><option value="KP">North Korea</option><option value="VD">North Vietnam</option><option value="MP">Northern Mariana Islands</option><option value="NO">Norway</option><option value="OM">Oman</option><option value="QO">Outlying Oceania</option><option value="PC">Pacific Islands Trust Territory</option><option value="PK">Pakistan</option><option value="PW">Palau</option><option value="PS">Palestinian Territories</option><option value="PA">Panama</option><option value="PZ">Panama Canal Zone</option><option value="PG">Papua New Guinea</option><option value="PY">Paraguay</option><option value="YD">People\'s Democratic Republic of Yemen</option><option value="PE">Peru</option><option value="PH">Philippines</option><option value="PN">Pitcairn Islands</option><option value="PL">Poland</option><option value="PT">Portugal</option><option value="PR">Puerto Rico</option><option value="QA">Qatar</option><option value="RO">Romania</option><option value="RU">Russia</option><option value="RW">Rwanda</option><option value="RE">R\u00e9union</option><option value="BL">Saint Barth\u00e9lemy</option><option value="SH">Saint Helena</option><option value="KN">Saint Kitts and Nevis</option><option value="LC">Saint Lucia</option><option value="MF">Saint Martin</option><option value="PM">Saint Pierre and Miquelon</option><option value="VC">Saint Vincent and the Grenadines</option><option value="WS">Samoa</option><option value="SM">San Marino</option><option value="SA">Saudi Arabia</option><option value="SN">Senegal</option><option value="RS">Serbia</option><option value="CS">Serbia and Montenegro</option><option value="SC">Seychelles</option><option value="SL">Sierra Leone</option><option value="SG">Singapore</option><option value="SK">Slovakia</option><option value="SI">Slovenia</option><option value="SB">Solomon Islands</option><option value="SO">Somalia</option><option value="ZA">South Africa</option><option value="GS">South Georgia and the South Sandwich Islands</option><option value="KR">South Korea</option><option value="ES">Spain</option><option value="LK">Sri Lanka</option><option value="SD">Sudan</option><option value="SR">Suriname</option><option value="SJ">Svalbard and Jan Mayen</option><option value="SZ">Swaziland</option><option value="SE">Sweden</option><option value="CH">Switzerland</option><option value="SY">Syria</option><option value="ST">S\u00e3o Tom\u00e9 and Pr\u00edncipe</option><option value="TW">Taiwan</option><option value="TJ">Tajikistan</option><option value="TZ">Tanzania</option><option value="TH">Thailand</option><option value="TG">Togo</option><option value="TK">Tokelau</option><option value="TO">Tonga</option><option value="TT">Trinidad and Tobago</option><option value="TA">Tristan da Cunha</option><option value="TN">Tunisia</option><option value="TR">Turkey</option><option value="TM">Turkmenistan</option><option value="TC">Turks and Caicos Islands</option><option value="TV">Tuvalu</option><option value="UM">U.S. Minor Outlying Islands</option><option value="PU">U.S. Miscellaneous Pacific Islands</option><option value="VI">U.S. Virgin Islands</option><option value="UG">Uganda</option><option value="UA">Ukraine</option><option value="SU">Union(of Soviet Socialist Republics</option><option value="AE">United Arab Emirates</option><option value="GB">United Kingdom</option><option value="US">United States</option><option value="UY">Uruguay</option><option value="UZ">Uzbekistan</option><option value="VU">Vanuatu</option><option value="VA">Vatican City</option><option value="VE">Venezuela</option><option value="VN">Vietnam</option><option value="WK">Wake Island</option><option value="WF">Wallis and Futuna</option><option value="EH">Western Sahara</option><option value="YE">Yemen</option><option value="ZM">Zambia</option><option value="ZW">Zimbabwe</option><option value="AX">\u00c5land Islands</option></select></div></div><div class="field vat_number"><div class="placeholder">VAT Number</div><input type="text"/></div>';i.subscribeFormHTML='<form class="recurly subscribe"><div class="subscription"><div class="plan"><div class="name"></div><div class="field quantity"><div class="placeholder">Qty</div><input type="text"/></div><div class="recurring_cost"><div class="cost"></div><div class="interval"></div></div><div class="free_trial"></div><div class="setup_fee"><div class="title">Setup Fee</div><div class="cost"></div></div></div><div class="add_ons none"></div><div class="coupon"><div class="coupon_code field"><div class="placeholder">Coupon Code</div><input type="text" class="coupon_code"/></div><div class="check"></div><div class="description"></div><div class="discount"></div></div><div class="vat"><div class="title">VAT</div><div class="cost"></div></div></div><div class="due_now"><div class="title">Order Total</div><div class="cost"></div></div><div class="server_errors none"></div><div class="contact_info"></div><div class="billing_info"></div><div class="footer"><button type="submit" class="submit">Subscribe</button></div></form>';i.updateBillingInfoFormHTML='<form class="recurly update_billing_info"><div class="server_errors none"></div><div class="billing_info"></div><div class="footer"><button type="submit" class="submit">Update</button></div></form>';i.oneTimeTransactionFormHTML='<form class="recurly update_billing_info"><div class="server_errors none"></div><div class="contact_info"></div><div class="billing_info"></div><div class="footer"><button type="submit" class="submit">Pay</button></div></form>';window.Recurly=i}(jQuery));