(function(n){"use strict";typeof n.Conservatives=="undefined"&&(n.Conservatives={});n.Conservatives.Module="donateApp";angular.module(n.Conservatives.Module,["ngRoute","ngSanitize","ngAnimate","ui.bootstrap","directives.customvalidation.customValidationTypes"]).constant("baseUrl",$("#baseUrl").val()).constant("successUrl",$("#successUrl").val()).constant("minDonation",parseFloat($("#minDonation").val())).constant("maxDonation",parseFloat($("#maxDonation").val())).constant("defaultAmount",parseFloat($("#defaultAmount").val())).constant("sourceCode",$("#sourceCode").val()).constant("campaignCode",$("#campaignCode").val())})(window),function(n){"use strict";function t(n){function i(n,t,i){n.config.donationAmount=parseFloat(i);n.goTo("/Details")}function t(n,t){switch(t.path()){case"/":n.config.step=1;break;case"/Details":n.config.step=2;break;case"/Pay":n.config.step=3;break;case"/Success":n.config.step=4}return null}n.when("/",{templateUrl:"firstStep.html",controller:"amountCtrl as ctrl",resolve:{step:["global","$location",t]}}).when("/Details",{templateUrl:"details.html",controller:"detailsCtrl as ctrl",resolve:{step:["global","$location",t]}}).when("/EnterDetails",{templateUrl:"details.html",controller:"genericCtrl as ctrl",resolve:{step:["global","$location","defaultAmount",i]}}).when("/ByPost",{templateUrl:"donateByPost.html",controller:"genericCtrl as ctrl"}).when("/Impermissible",{templateUrl:"impermissible.html",controller:"genericCtrl as ctrl"}).when("/Pay",{templateUrl:"pay.html",controller:"paymentCtrl as ctrl",resolve:{step:["global","$location",t]}}).when("/Success",{templateUrl:"success.html",controller:"genericCtrl as ctrl",resolve:{step:["global","$location",t]}}).otherwise({redirectTo:"/"})}angular.module(n.Module).config(["$routeProvider","baseUrl",t])}(Conservatives),function(n){"use strict";function t(){return{restrict:"A",scope:{fadeShow:"="},transclude:!0,template:'<div ng-show="fadeShow" class="fade-in-ng ng-hide" ng-class="{\'cancel-animation\': !fadeShow}" ng-transclude><\/div>'}}angular.module(n.Module).config(["$qProvider",function(n){n.errorOnUnhandledRejections(!1)}]).directive("fadeShow",[t])}(Conservatives),function(n){function t(n,t){var o,e,r,h,i;if(isNaN(n))return n;o="";(""+n).substring(0,1)=="-"&&(o="-",n=(""+n).substring(1));var s="1"+Array(+(t>0&&t+1)).join("0"),u=Math.round(n*s)/s+"",f=u.length;if(u.indexOf(".")!=-1)f=u.indexOf(".");else for(u+=".",i=0;i<t;i++)u+="0";for(e=0,r=u.substring(f),i=f;i>0;i--)(f-i)%3==0&&f-i!=0?(r=u[i-1]+","+r,e++):r=u[i-1]+r;if(r.length-f-e<t+1)for(h=t+1-(r.length-f-e),i=0;i<h;i++)r+="0";return o+r}angular.module(n.Module).filter("setDecimal",function(){return t}).factory("decimalCountFormatter",function(){return{maxDecimals:t}})}(window.Conservatives),function(n){"use strict";function t(n,t,i,r){function u(u){return(u.status==503&&i.routes["/Maintenance"]&&(r.config.offline=!0,t.path("/Maintenance")),u.data.errorMessages)?n.reject(u.data):!angular.isObject(u.data)||!u.data.Message?n.reject("There have been some issues with your request, please try again."):n.reject(u.data.Message)}function f(n){if(typeof n.data=="string"&&n.data.indexOf('<form method="post" action="./Login')!=-1){var t=document.getElementById("baseUrlText").value;window.location=t+"Account/Login?message=SessionExpired";return}return n.data}return{handleError:u,handleSuccess:f}}angular.module(n.Module).factory("serviceResponseHandler",["$q","$location","$route","global",t])}(window.Conservatives),function(n){function t(n){return function(t,i,r){r.cchqNgXsrfToken&&(n.defaults.headers.common["X-XSRF-Token"]=r.cchqNgXsrfToken,n.defaults.headers.common["X-Requested-With"]="XMLHttpRequest")}}function i(n){return function(t,i,r){r.nbtIdptc&&(n.config.Idepotency=r.nbtIdptc);r.nbtQp&&(n.config.QueryParams=r.nbtQp);r.nbtAp&&(n.config.AdditionalParams=r.nbtAp);r.nbtIa&&(n.config.IsAdministrator=r.nbtIa)}}angular.module(n.Module).directive("cchqNgXsrfToken",["$http",t]).directive("nbtParams",["global",i])}(Conservatives),function(n){function t(n){return{link:function(t,i){i.addClass("ng-hide");var r=n.$on("$routeChangeStart",function(){$("div[ng-view]").html("");i.removeClass("ng-hide")});t.$on("$destroy",r)}}}function i(n){var t=$("#baseUrl").val();return{restrict:"E",replace:!0,template:'<div class="col-md-12 text-center" show-during-resolve><div align="center"><img src="'+t+'Content/Images/Loading.gif" alt="Loading..."><\/div><\/div>',link:function(t,i){n.$on("$routeChangeStart",function(n,t,i){i});n.$on("$routeChangeSuccess",function(){i.addClass("ng-hide")})}}}angular.module(n.Module).directive("showDuringResolve",["$rootScope",t]).directive("resolveLoader",["$rootScope","$timeout",i])}(Conservatives),function(n){angular.module(n.Module).directive("ngEnter",function(){return function(n,t,i){t.bind("keydown keypress",function(t){t.which===13&&(n.$apply(function(){n.$eval(i.ngEnter)}),t.preventDefault())})}})}(window.Conservatives),function(n){"use strict";function t(n,t,i,r,u){function e(){f.person.noneOptIn&&(f.person.emailOptIn=!1,f.person.telephoneOptIn=!1,f.person.smsOptIn=!1)}function o(){(f.person.emailOptIn||f.person.telephoneOptIn||f.person.smsOptIn)&&(f.person.noneOptIn=!1)}function s(){if(f.error="",h()){if(f.submitting)return;f.submitting=!0;var n=t.getPersonModel();this.loading=!0;i.validateLead(n).then(function(n){f.loading=!1;t.config.person.responseId=n.ResponseId;n.Status==1?u.path("/Pay"):u.path("/Impermissible");f.submitting=!1}).catch(function(n){console.log(n);f.loading=!1;f.submitting=!1;f.error=n.errorMessage?n.errorMessage:n})}}function h(){if(f.validationError="",!f.person.titleId||f.person.titleId=="0"&&!f.person.customTitle)return f.validationError="Please provide a valid title",!1;if(!f.person.firstName||!f.person.lastName)return f.validationError="Please provide your First Name",!1;if(!f.person.email)return f.validationError="Please provide a valid email",!1;try{if(!/^[\w\.=-]+@[\w\.-]+\.[\w]{2,15}$/.test(f.person.email))return f.validationError="Please provide a valid email",!1}catch(n){console.log(n)}return!f.person.noneOptIn&&!f.person.emailOptIn&&!f.person.telephoneOptIn&&!f.person.smsOptIn?(f.validationError="Please specify if you would like to hear from us",!1):f.person.countryId?!f.person.addressId&&!f.person.addressLine1?(f.validationError="Please provide your address",!1):f.person.acceptTAndC?!0:(f.validationError="Please accept the terms and conditions",!1):(f.validationError="Please select a country",!1)}function c(){if(f.error="",!f.person.postcode){f.error="Please provide a postcode";return}if(f.person.postcode.length<4){f.error="Please provide a valid postcode";return}f.loading=!0;i.findAddress(f.person.postcode).then(function(n){f.loading=!1;f.availableAddresses=n;n&&n.length!=0||(f.error="We could not find any address for the provided postcode",f.availableAddresses=null)}).catch(function(n){f.loading=!1;t.handleError(n);f.error=n.errorMessage?n.errorMessage:n})}function l(){for(var n=0;n<f.availableAddresses.length;n++)f.availableAddresses[n].Identity==f.person.addressId&&(t.config.person.selectedAddress=f.availableAddresses[n])}function a(){t.config.person.selectedTitle=f.person.titleId&&f.person.titleId!="0"?$("#title option:selected").text():f.person.customTitle}var f=this;t.donationIsValid()||t.goTo("/");f.initialDetails=!0;f.addressSearch=!0;f.canSelectAddress=!0;f.amount=t.config.donationAmount;f.person=t.config.person;f.displayContent=!1;f.enterPersonalDetails=!1;f.searchAddress=c;f.setSelectedAddress=l;f.setSelectedTitle=a;f.optInChange=e;f.permissionChange=o;f.next=s;f.emailValidation=[{identifier:"emailValidation",errorMessage:"Please provide a valid email.",validateWhileEntering:!0,validator:function(n,t){return/^[\w\.=-]+@[\w\.-]+\.[\w]{2,15}$/.test(t)}}];f.telephoneValidation=[{identifier:"telephoneValidation",errorMessage:"Please provide a valid telephone number.",validateWhileEntering:!0,validator:function(n,t){return t?/^[+() --0-9]*$/.test(t):!0}}];n(function(){f.displayContent=!0},100)}angular.module(n.Module).controller("detailsCtrl",["$timeout","global","donateSvc","campaignCode","$location",t])}(Conservatives),function(n){"use strict";function t(n){var t=this;n(function(){t.displayContent=!0},100)}angular.module(n.Module).controller("genericCtrl",["$timeout",t])}(Conservatives),function(n){"use strict";function t(n,t){function r(i){t.config.donationAmount=i;n.path("/Details")}var i=this;i.amount=t.config.donationAmount;i.donate=r}angular.module(n.Module).controller("amountCtrl",["$location","global",t])}(Conservatives),function(n){"use strict";function t(n,t,i,r,u,f){function o(){e.config.donationAmount=null;e.config.step=1;e.config.person={titleId:"",addressId:"",selectedAddress:null,selectedTitle:null,acceptTAndC:!0}}function s(){if(e.config.person.addressId){var n=e.config.person.selectedAddress.FullAddress.split(","),t={streetAddress:null,extendedAddress:null,locality:null,postalCode:e.config.person.postcode,countryCodeAlpha2:"GB"};return!n||n.length<2?t:(t.locality=n[n.lengt-2],n.length>2&&(t.streetAddress=n[0]),n.length>3&&(t.extendedAddress=n[1]),t)}return{streetAddress:null,extendedAddress:null,locality:null,postalCode:null,countryCodeAlpha2:null}}function h(){var i="",r="",n;return e.config.person.firstName=e.config.person.firstName.trim(),n=e.config.person.firstName.indexOf(" "),n>0?(i=e.config.person.firstName.substring(0,n),r=e.config.person.firstName.substring(n+1)):i=e.config.person.firstName,{ResponseId:e.config.person.responseId,TitleId:e.config.person.titleId&&e.config.person.titleId!="0"?e.config.person.titleId:null,CustomTitle:e.config.person.customTitle,FirstName:i,MiddleName:e.config.person.middleName?e.config.person.middleName:r,LastName:e.config.person.lastName,EmailAddress:e.config.person.email,PhoneNumber:e.config.person.telephone,CountryId:e.config.person.countryId,PostCode:e.config.person.postcode,AddressId:e.config.person.addressId,Address1:e.config.person.addressLine1,Address2:e.config.person.addressLine2,Address3:e.config.person.addressLine3,Address4:e.config.person.addressLine4,Address5:e.config.person.addressLine5,Address6:e.config.person.addressLine6,Address7:e.config.person.addressLine7,Address8:e.config.person.addressLine8,Address9:e.config.person.addressLine9,EmailOptIn:e.config.person.emailOptIn,PhoneOptIn:e.config.person.telephoneOptIn,SmsOptIn:e.config.person.smsOptIn,DonationAmount:e.config.donationAmount,TermsAccepted:e.config.person.acceptTAndC,CampaignCode:t,SourceCode:f}}function c(){return e.config.person.responseId?!0:!1}function l(){return!e.config.donationAmount||e.config.donationAmount<i||e.config.donationAmount>r?!1:!0}function a(t){n.path(t)}function v(n){console.log(n)}var e={config:{donationAmount:null,step:1,person:{titleId:"",addressId:"",selectedAddress:null,selectedTitle:null,acceptTAndC:!0}},donationIsValid:l,detailsIsValid:c,goTo:a,getPersonModel:h,getThreeDsAddress:s,handleError:v,reset:o};return e}angular.module(n.Module).factory("global",["$location","campaignCode","minDonation","maxDonation","defaultAmount","sourceCode",t])}(Conservatives),function(n){"use strict";function t(n){var t=this;t.config=n.config}angular.module(n.Module).controller("timelineCtrl",["global",t])}(Conservatives),function(n){"use strict";function t(n,t,i){function r(r){var u=t.get(n+"Api/FindAddress?postcode="+r);return u.then(i.handleSuccess,i.handleError)}function u(r){var u=t.post(n+"Api/ValidateLead",r);return u.then(i.handleSuccess,i.handleError)}function f(){var r=t.post(n+"Api/CreatePaymentToken");return r.then(i.handleSuccess,i.handleError)}function e(r){var u=t.post(n+"Api/Donate",r);return u.then(i.handleSuccess,i.handleError)}return{findAddress:r,validateLead:u,getPaymentToken:f,donate:e}}angular.module(n.Module).service("donateSvc",["baseUrl","$http","serviceResponseHandler",t])}(Conservatives),function(n){"use strict";function t(n,t,i,r,u,f){function s(){e.removeDropIn=!1;e.howToPay=!1;e.paypalPayment=!0;c()}function h(){e.removeDropIn=!1;e.howToPay=!1;e.paypalPayment=!1;a()}function c(){e.readyToCharge=!1;e.loading=!0;t.getPaymentToken().then(function(n){l(n);e.loading=!1}).catch(function(n){console.log(n);e.readyToCharge=!0;e.howToPay=!1;e.error=n.errorMessage?n.errorMessage:n})}function l(n){braintree.client.create({authorization:n},function(n,t){if(n){console.error("Error creating client:",n);return}braintree.paypalCheckout.create({client:t},function(n,t){t.loadPayPalSDK({vault:!0},function(){paypal.Buttons({fundingSource:paypal.FUNDING.PAYPAL,style:{color:"blue",label:"pay"},createBillingAgreement:function(){return t.createPayment({flow:"vault"})},onApprove:function(n){return t.tokenizePayment(n,function(n,t){o(t.nonce)})},onCancel:function(n){console.log("PayPal payment cancelled",JSON.stringify(n,0,2))},onError:v}).render("#paypal-button").then(function(){e.loading=!1;e.readyToCharge=!0;i.$apply()})})})})}function a(){e.readyToCharge=!1;e.loading=!0;t.getPaymentToken().then(function(n){y(n)}).catch(function(n){console.log(n);e.readyToCharge=!0;e.howToPay=!1;e.error=n.errorMessage?n.errorMessage:n})}function v(r){if(r.type=="SERVER"){var u={error:r.message+"; DETAILS: "+JSON.stringify(r.details)};t.registerBraintreeCardError(u,n.config.paymentSetup.newMembership)}console.log(r.message+"; DETAILS: "+JSON.stringify(r.details));e.paymentError=r.message;i.$apply()}function y(t){var u=n.getPersonModel(),r=n.getThreeDsAddress(),f={amount:e.amount,email:u.EmailAddress,billingAddress:{givenName:u.FirstName,surname:u.LastName,phoneNumber:u.PhoneNumber,streetAddress:r.streetAddress,extendedAddress:r.extendedAddress,locality:r.locality,postalCode:r.postalCode,countryCodeAlpha2:r.countryCodeAlpha2}};braintree.dropin.create({authorization:t,container:"#card-payment-container",threeDSecure:!0},function(n,t){if(n){console.error(n);return}e.readyToCharge=!0;e.loading=!1;i.$apply();e.pay=function(){t.requestPaymentMethod({threeDSecure:f},function(n,t){e.showSecurity=!1;i.$apply();n?(e.paymentError="Your card details could not be validated",console.log(n),i.$apply()):o(t.nonce)})}})}function o(r){e.loading=!0;e.removeDropIn=!0;i.$apply();var u=n.getPersonModel();u.Token=r;t.donate(u).then(function(){e.loading=!1;p()}).catch(function(n){console.log(n);e.loading=!1;e.paymentError=n.errorMessage?n.errorMessage:n})}function p(){n.reset();u?window.location.replace(u):f.path("/Success")}var e=this;n.detailsIsValid()||n.goTo("/Details");e.amount=n.config.donationAmount;e.howToPay=!0;e.paymentError="";e.payByCard=h;e.payWithPayPal=s;r(function(){e.displayContent=!0},100)}angular.module(n.Module).controller("paymentCtrl",["global","donateSvc","$scope","$timeout","successUrl","$location",t])}(Conservatives)