PageSourceSearch

https://support.ihestrustuk.org/donate/~my-donation?_cv=1

html ihestrustuk.org collected 2026-10-04 04:28:42 UTC 105,143 bytes, 2,052 lines download raw bytes

1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en_EN" lang="en_EN">
3<head>
4<meta content="text/html; charset=UTF-8" http-equiv="content-type"/>
5<title>Support IHES UK</title>
6<meta name="description" content="Support our organization by making a donation" />
7<meta name="keywords" content="organization,donation,donations,donate,support" />
8<link type="text/css" href="https://support.ihestrustuk.org/themes/default/css/style_v2.css?hash=0bb9c864f817574922b301f24e909104" rel="stylesheet" />
9
10<script type="text/javascript">
11// <![CDATA[
12 const cacheVersion = "26090";
13var gamonitoring_previous_page = sessionStorage.getItem('gamonitoring_previous_page') || document.referrer || "https:\/\/support.ihestrustuk.org";
14var gamonitoring_session_id = sessionStorage.getItem('gamonitoring_session_id') || String(Math.floor(Math.random() * 8999999999) + 1000000000)+'.'+String(Math.floor(Date.now()/1000));
15var gamonitoring_v2_client_id = gamonitoring_session_id;
16var gamonitoring_v2_session_id = gamonitoring_v2_client_id.replace(/^.*\./, '');
17
18    var gamonitoring_sc = '';
19    if(!sessionStorage.getItem('gamonitoring_session_id'))
20        gamonitoring_sc = 'start';
21    if(typeof(monitoringvga)=='undefined'){
22        monitoringvga=1;
23        monitoring_serialize=serialize=function(n){var e=[];for(var o in n)n.hasOwnProperty(o)&&n[o]&&e.push(encodeURIComponent(o)+"="+encodeURIComponent(n[o]));return e.join("&")};
24        try{
25            var head = document.getElementsByTagName('HEAD')[0];
26            document.addEventListener('DOMContentLoaded', function(event) {
27                
28
29                    var monitoringparams = {z:Math.random(),cid:"support.ihestrustuk.org\/"+gamonitoring_session_id,dl:"https:\/\/support.ihestrustuk.org\/IHESU\/b:steps\/cid=1",sc:gamonitoring_sc,dr:gamonitoring_previous_page,cd:"2026-10-04:06.28.41-6ac1d5f9e95f8",dt:window.location.host+'/'+"donations",ul:"en-EN",ds:"web",};
30                    var inputs = document.querySelectorAll('input[type=hidden][name=context_form_id]'), i;
31                    
32                    var link_v2 = document.createElement('link');
33                    monitoringparams.cid = gamonitoring_v2_client_id;
34                    monitoringparams.sid = gamonitoring_v2_session_id;
35                                        link_v2.rel = 'stylesheet';
36                    link_v2.type = 'text/css';
37                    link_v2.href = 'https://monitoring.iraiser.eu/v2/check.css?'+monitoring_serialize(monitoringparams);
38                    head.appendChild(link_v2);
39                    var input_v2_client_id = document.createElement("input");
40                    input_v2_client_id.setAttribute("type", "hidden");
41                    input_v2_client_id.setAttribute("name", "private_monitoring_v2_client_id");
42                    input_v2_client_id.setAttribute("value", gamonitoring_v2_client_id);
43                    var input_v2_session_id = document.createElement("input");
44                    input_v2_session_id.setAttribute("type", "hidden");
45                    input_v2_session_id.setAttribute("name", "private_monitoring_v2_session_id");
46                    input_v2_session_id.setAttribute("value", gamonitoring_v2_session_id);
47                
48                for (i = 0; i < inputs.length; ++i) {
49                    inputs[i].parentNode.insertBefore(input_v2_client_id, inputs[i]);
50                    inputs[i].parentNode.insertBefore(input_v2_session_id, inputs[i]);
51                }
52              });
53            window.onerror = function (eventOrMessage, url, lineNumber, colNumber, error) {
54                
55                var monitoringerrorparams = {z:Math.random(),cid:"support.ihestrustuk.org\/"+gamonitoring_session_id,t:"event",ec:"JSError",ev:1,ea:"\/IHESU\/b:steps\/cid=1\/",};
56                
57                if (!eventOrMessage) {
58                    return;
59                }
60                if (typeof eventOrMessage !== 'string') {
61                    error = eventOrMessage.error;
62                    url = eventOrMessage.filename || eventOrMessage.fileName;
63                    lineNumber = eventOrMessage.lineno || eventOrMessage.lineNumber;
64                    colNumber = eventOrMessage.colno || eventOrMessage.columnNumber;
65                    eventOrMessage = eventOrMessage.message || eventOrMessage.name || error.message || error.name;
66                }
67                if (error && error.stack) {
68                    eventOrMessage = [eventOrMessage, '; Stack: ', error.stack, '.'].join('');
69                }
70                var jsFile = (/[^/]+\.js/i.exec(url || '') || [])[0] || 'inline',
71                eventOrMessage = eventOrMessage.replace(/https?\:\/\/[^/]+/gi, '').replace(/[?&]context_form_[^ &]+/gi, '');
72                stack = [eventOrMessage, ' > ' + jsFile, ':', lineNumber || '?', ':', colNumber || '?'].join('').substring(0,450);
73                monitoringerrorparams.ea += jsFile;
74                monitoringerrorparams.el = stack;
75                
76                    
77                    monitoringerrorparams.cid = gamonitoring_v2_client_id;
78                    monitoringerrorparams.sid = gamonitoring_v2_session_id;
79                    var link_v2 = document.createElement('link');
80                    link_v2.rel = 'stylesheet';
81                    link_v2.type = 'text/css';
82                    link_v2.href = 'https://monitoring.iraiser.eu/v2/error.css?'+monitoring_serialize(monitoringerrorparams);
83                    head.appendChild(link_v2);
84                
85            }
86        } catch (error) {console.error(error);}
87        sessionStorage.setItem('gamonitoring_previous_page',gamonitoring_previous_page);
88        sessionStorage.setItem('gamonitoring_session_id',gamonitoring_session_id);
89    }
90
91// ]]>
92</script>
92<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/js/jquery-1.11.2.min.js?hash=5790ead7ad3ba27397aedfa3d263b867" ></script>
vendor: 1 bytes, line 92
92
93<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/js/jquery.patch.min.js?hash=8c3155becb5ec93b830922ca82081911" ></script>
vendor: 1 bytes, line 93
93
94<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/js/jquery.cookie-1.0.min.js?hash=6f6ed3cd5486dbf3bb9143eea287a6a5" ></script>
vendor: 1 bytes, line 94
94
95<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/js/dnterrors.min.js?hash=963e9b559d6046553f6886a5d4b49b61" ></script>
vendor: 1 bytes, line 95
95
96<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/js/jquery.config.min.js?hash=aae7bb01c8a0e6da615dd41aaafab4b5" ></script>
vendor: 1 bytes, line 96
96
97<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/js/dynamic_form.min.js?hash=d0fa20a4d6821cc2aeba535277ff9b6e" ></script>
vendor: 1 bytes, line 97
97
98<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/js/visibility-toggle.min.js?hash=780b99b3a0928dcc5ff82ee20f36a435" ></script>
vendor: 1 bytes, line 98
98
99<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/js/step1.min.js?hash=646b3e2fefe3d9fcf3b9a63c96e570cf" ></script>
vendor: 1 bytes, line 99
99
100<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/js/step2.min.js?hash=d035c72682b282a43f33cf7e48dc4bb7" ></script>
vendor: 1 bytes, line 100
100
101<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/js/step3.min.js?hash=6cbdee3e206df521e4ffe5ccd7aba99f" ></script>
vendor: 1 bytes, line 101
101
102<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/js/steps.min.js?hash=676a05ab0f7d16e826b07dfee858008a" ></script>
vendor: 1 bytes, line 102
102
103<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/js/payment_button.min.js?hash=b238dd83060ba9692f5ccd77a63835ac" ></script>
vendor: 1 bytes, line 103
103
104<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/js/iban-validator.min.js?hash=683493897ee764a5c9b485c6412e20d0" ></script>
vendor: 1 bytes, line 104
104
105<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/js/jquery.ir-priceinput.min.js?hash=07482ff72021c2c53278074abe52347f" ></script>
vendor: 1 bytes, line 105
105
106<script type="text/javascript" src="/themes/default/js/fn-usage-tracker.min.js?v=1" ></script>
vendor: 1 bytes, line 106
106
107<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/js/common.min.js?hash=735eaf678c23f50f35606e522ee0a175" ></script>
vendor: 1 bytes, line 107
107
108<script type="text/javascript">
109// <![CDATA[
110                 old_console_log = console.log;
111                if(typeof $.cookie == 'undefined' || !$.cookie('DntManager')){
112                    console.log = function(){};
113                }
114                if(typeof(String.prototype.replaceAll) == 'undefined') String.prototype.replaceAll = String.prototype.replace;
115FnUsageTracker.scriptUrl = "https:\/\/front-monitoring.app.iraiser.eu\/v1\/fn-usage.js";FnUsageTracker.scriptIntegrity = "sha512-houIUfN6dnGaTQrXtzvMezD8WOwEC3If30IVZ\/E7G+moLAn+nygaEv6cZp9phf34Z+b6+CXRAJ2nd1a6UxB0Pg==";FnUsageTracker.sampleRate = "0.1";FnUsageTracker.initFnUsage();
116var ira_form_version = 'b';
117Common.price_pattern = "\u20ac1.22"
118Common.price_default_currency = "GBP"
119Common.price_campaign_currency = "GBP"
120Common.price_currencies = {"EUR":"\u20ac","USD":"$","AED":"DH","AFN":"AFN","ALL":"Lek","AMD":"AMD","ANG":"ANG","AOA":"Kz","ARS":"$","AUD":"$","AWG":"AWG","AZN":"AZN","BAM":"KM","BBD":"BBD","BDT":"\u09f3","BHD":".\u062f.\u0628 ","BIF":"BIF","BMD":"BMD","BND":"B$","BOB":"BOB","BRL":"R$","BSD":"BSD","BTC":"BTC","BTN":"BTN","BWP":"BWP","BYN":"BYN","BYR":"p.","BZD":"BZD","CAD":"$","CDF":"CDF","CHF":"CHF","CLF":"CLF","CLP":"$","CNY":"CN\u00a5","COP":"$","CRC":"CRC","CUC":"CUC","CUP":"CUP","CVE":"CVE","CYP":"\u00a3","CZK":"K\u010d","DJF":"DJF","DKK":"DKK","DOP":"DOP","DZD":"D.A.","EGP":"E\u00a3","ERN":"ERN","ETB":"ETB","FJD":"FJD","FKP":"FKP","GBP":"\u00a3","GEL":"GEL","GGP":"GGP","GHS":"GH\u20b5","GIP":"GIP","GMD":"GMD","GNF":"GNF","GTQ":"Q","GYD":"GYD","HKD":"$","HNL":"HNL","HRK":"kn","HTG":"HTG","HUF":"Ft","IDR":"Rp","ILS":"\u20aa","IMP":"IMP","INR":"\u20b9","IQD":"\u062f.\u0639","IRR":"IRR","ISK":"kr","JEP":"JEP","JMD":"JMD","JOD":"\u062f.\u0623","JPY":"\u00a5","KES":"KES","KGS":"KGS","KHR":"KHR","KMF":"KMF","KPW":"KPW","KRW":"\u20a9","KWD":"\u062f.\u0643 ","KYD":"KYD","KZT":"KZT","LAK":"LAK","LBP":"\u0644.\u0644.","LKR":"LKR","LRD":"LRD","LSL":"LSL","LTL":"LTL","LVL":"LVL","LYD":"LYD","MAD":"\u062f.\u0645","MDL":"MDL","MGA":"MGA","MKD":"\u0434\u0435\u043d","MMK":"MMK","MNT":"MNT","MOP":"MOP","MRO":"MRO","MUR":"MUR","MVR":"MVR","MWK":"MWK","MXN":"MX$","MYR":"RM","MZN":"MZN","NAD":"NAD","NGN":"\u20a6","NIO":"NIO","NOK":"kr","NPR":"NPR","NZD":"$","OMR":"\u0631.\u0639.","PAB":"PAB","PEN":"S\/.","PGK":"PGK","PHP":"\u20b1","PKR":"\u20a8","PLN":"z\u0142","PYG":"Gs","QAR":"QR","RON":"RON","RSD":"RSD","RUB":"\u0440\u0443\u0431","RWF":"RF","SAR":"SR","SBD":"SBD","SCR":"SCR","SDG":"SDG","SEK":"kr","SGD":"$","SHP":"SHP","SLL":"SLL","SOS":"SOS","SRD":"SRD","STD":"STD","SVC":"SVC","SYP":"SYP","SZL":"SZL","THB":"\u0e3f","TJS":"TJS","TMT":"TMT","TND":"DT","TOP":"TOP","TRY":"\u20ba","TTD":"TTD","TWD":"TWD","TZS":"TZS","UAH":"\u20b4","UGX":"UGX","UYU":"$U","UZS":"UZS","VEF":"VEF","VES":"Bs. S","VND":"\u20ab","VUV":"VUV","WST":"WST","XAF":"FCFA","XAG":"XAG","XAU":"XAU","XCD":"XCD","XDR":"XDR","XOF":"CFA","XPF":"XPF","YER":"YER","ZAR":"R","ZMK":"ZMK","ZMW":"ZK","ZWL":"ZWL"}
121Common.price_rates = {"AED":4.236866,"AFN":74.988531,"ALL":91.695487,"AMD":418.356726,"ANG":2.065498,"AOA":1057.91956,"ARS":1739.654766,"AUD":1.620135,"AWG":2.076613,"AZN":1.95743,"BAM":1.954638,"BBD":2.322919,"BDT":141.97498,"BGN":1.942142,"BHD":0.434841,"BIF":3448.039797,"BMD":1.153674,"BND":1.465867,"BOB":13.903734,"BRL":5.928844,"BSD":1.153314,"BTC":1.4927858e-5,"BTN":110.144042,"BWP":15.598727,"BYN":3.508614,"BYR":22612.013117,"BZD":2.319621,"CAD":1.604022,"CDF":2664.987492,"CHF":0.943054,"CLF":0.027901,"CLP":1101.678141,"CNY":7.741731,"CNH":7.745209,"COP":3594.917836,"CRC":519.491162,"CUC":1.153674,"CUP":30.572365,"CVE":110.199486,"CZK":24.290647,"DJF":205.387897,"DKK":7.47526,"DOP":68.109509,"DZD":154.140988,"EGP":59.883186,"ERN":17.305112,"ETB":188.391501,"EUR":1,"FJD":2.552446,"FKP":0.855023,"GBP":0.856199,"GEL":3.000626,"GGP":0.855023,"GHS":13.246125,"GIP":0.855023,"GMD":85.372255,"GNF":10140.235297,"GTQ":8.807878,"GYD":241.296549,"HKD":9.049149,"HNL":30.955597,"HRK":7.534995,"HTG":150.744955,"HUF":366.842417,"IDR":20395.805097,"ILS":3.514034,"IMP":0.855023,"INR":110.680615,"IQD":1510.895222,"IRR":1585811.628467,"ISK":139.963655,"JEP":0.855023,"JMD":182.011794,"JOD":0.817959,"JPY":178.6764,"KES":149.56209,"KGS":100.888672,"KHR":4676.361765,"KMF":491.465244,"KPW":1038.307092,"KRW":1568.962454,"KWD":0.356093,"KYD":0.961129,"KZT":516.313051,"LAK":25803.659678,"LBP":103735.922549,"LKR":379.564348,"LRD":201.259479,"LSL":18.736761,"LTL":3.4065,"LVL":0.697847,"LYD":7.318649,"MAD":10.9341,"MDL":20.080062,"MGA":4976.041734,"MKD":61.488445,"MMK":2422.087363,"MNT":4152.688475,"MOP":9.31812,"MRU":46.318464,"MUR":54.32717,"MVR":17.778191,"MWK":1999.911049,"MXN":19.796091,"MYR":4.699715,"MZN":73.718216,"NAD":18.736761,"NGN":1528.629342,"NIO":42.44587,"NOK":10.782037,"NPR":176.23123,"NZD":2.002749,"OMR":0.443584,"PAB":1.153314,"PEN":3.876379,"PGK":5.132038,"PHP":72.53726,"PKR":319.738015,"PLN":4.344171,"PYG":6936.876015,"QAR":4.215694,"RON":5.253715,"RSD":117.330991,"RUB":97.599104,"RWF":1701.788284,"SAR":4.328672,"SBD":9.251888,"SCR":15.87915,"SDG":693.941083,"SEK":11.284058,"SGD":1.467698,"SHP":0.854542,"SLE":28.438102,"SLL":24191.960484,"SOS":659.108159,"SRD":43.570841,"STD":23878.725411,"STN":24.485868,"SVC":10.092,"SYP":15000.071444,"SZL":18.722869,"THB":38.40006,"TJS":10.651122,"TMT":4.037859,"TND":3.375493,"TOP":2.77777,"TRY":56.114598,"TTD":7.831344,"TWD":36.761864,"TZS":3058.545852,"UAH":51.481094,"UGX":4521.312072,"USD":1.153674,"UYU":46.452183,"UZS":13574.870882,"VES":970.452202,"VND":29943.035431,"VUV":136.234837,"WST":3.151258,"XAF":655.957,"XAG":0.018286,"XAU":0.000269,"XCD":3.117862,"XCG":2.078655,"XDR":0.815707,"XOF":655.957,"XPF":119.331742,"YER":272.872809,"ZAR":18.811245,"ZMK":10384.449315,"ZMW":22.288749,"ZWL":371.482602,"SSP":633.704955,"MXV":2.244749,"CYP":1.7086,"VEF":3902666.416477}
122Common.price_currency_position = "left"
123Common.price_frequency_texts = {"once":"One-off","regular":"Monthly"}
124Common.campaign_default_frequency = "once"
125Step1.tax_reduction_rates =    {"ir":[66],"isf":[75,0],"corp":[60],"custom1":[],"custom2":[]};
126Step1.tax_reduction_ceils =    {"ir":[],"isf":[66666.67],"corp":[],"custom1":[],"custom2":[]};
127Step1.tax_reduction_notices =  {"ir":"up to 20% of the taxable income","isf":"","corp":"up to 5\u2030 of the business revenue","custom1":"","custom2":""};
128Step1.tax_reduction_triggers = {"ir":"0","isf":"0","corp":"0","custom1":"0","custom2":"0"};
129Step1.tax_reduction_exact =    {"ir":false,"isf":false,"corp":false,"custom1":false,"custom2":false};
130Step1.active_tax_reduction = 1;
131Step1.adapt_tax_bloc = false;
132Step1.tax_info = "The real cost of your donation is <strong><span class='price'><data class='price_currency'>\u00a3<\/data><data class='price_amount'>%s<\/data><\/span><\/strong> (tax exemption of <span class='price'><data class='price_currency'>\u00a3<\/data><data class='price_amount'>%d<\/data><\/span>[notice]).";
133Step1.is_french_isf = 0;
134Step1.is_tipping_campaign = 0;
135
136Step1.amount_equivalences = {"once":[],"regular":[]}
137Step1.decimal_sep = ".";
138Step1.min_once_amount = 0;
139Step1.max_once_amount = "";
140Step1.min_regular_amount = 0;
141Step1.max_regular_amount = "";
142DntErrors.errorMsg.errors = "%s errors found on the form";
143DntErrors.errorMsg.error = "an error has been found on the form";
144DntErrors.errorMsg.choose_amount = "Please choose an amount for your donation";
145DntErrors.errorMsg.min_once_amount = "Due to processing fees, the minimum amount accepted is  {min_amount_with_currency}";
146DntErrors.errorMsg.max_once_amount = "Your donation cannot be more than  {max_amount_with_currency}";
147DntErrors.errorMsg.min_regular_amount = "Due to processing fees, the minimum amount accepted is  {min_amount_with_currency}";
148DntErrors.errorMsg.max_regular_amount = "Your donation cannot be more than  {max_amount_with_currency}";
149DntErrors.errorMsg.errors = "%s errors found on the form";
150DntErrors.errorMsg.error = "an error has been found on the form";
151DntErrors.errorMsg.qualification = "The '%s' field is mandatory";
152DntErrors.errorMsg.firstname = "Please enter your first name";
153DntErrors.errorMsg.lastname = "Please enter your last name";
154DntErrors.errorMsg.email = "Please enter a valid email";
155DntErrors.errorMsg.company = "The company name should not exceed 70 characters";
156DntErrors.errorMsg.company_siren = "The SIREN is empty or invalid";
157DntErrors.errorMsg.company_status = "The legal form is empty or unknown";
158DntErrors.errorMsg.address1 = "Please enter your address";
159DntErrors.errorMsg.postcode = "Please enter your postcode (10 characters maximum)";
160DntErrors.errorMsg.city = "Please enter your city";
161DntErrors.errorMsg.civility = "Please select your title";
162DntErrors.errorMsg.errors = "%s errors found on the form";
163DntErrors.errorMsg.error = "an error has been found on the form";
164DntErrors.errorMsg.cardtype = "Please select your card type";
165DntErrors.errorMsg.cardnumber = "Please enter a valid card number";
166DntErrors.errorMsg.cardscode = DntErrors.errorMsg.scode = "Please enter the 3 digit security code on the back of your card";
167DntErrors.errorMsg.cardmonth = "Please enter the card expiry month";
168DntErrors.errorMsg.cardyear = "Please enter the card expiry year";
169DntErrors.errorMsg.gocardless = "This payment method can only be used for an amount less than 5000\u20ac. Thank you for reducing the amount or selecting another method of payment";
170DntErrors.errorMsg.ssn = "Please enter a valid personal identity number";
171
172Step2.failed_dnt_url = "/index.php?module=donations&action=xhr:attemptSave";
173form_context_lang = "en_EN";
174form_context_cid = 1;
175
176Step3.alert_msg = "";
177Step3.modal_qualif = "0";
178Step3.modal_qualif_url = "/index.php?module=donations&action=default:modalQualification";
179Step3.modal_save_card = "0";
180Step3.modal_save_card_url = "/index.php?module=donations&action=default:modalSaveCard";
181Step3.modal_save_card_set_url = "/index.php?context_form_id=form_cached_2026-10-04.06:28:41_6ac1d5f9e93024.86483627&module=donations&action=default:setSaveCard";
182
183Step3.cards_mastercard_length=16;
184Step3.cards_mastercard_cvvlength=3;
185Step3.cards_mastercard_hasalias=1;
186Step3.cards_visa_length=16;
187Step3.cards_visa_cvvlength=3;
188Step3.cards_visa_hasalias=1;
189
190
191$(document).ready(function() {
192    Step1.init();
193    Step2.init();
194    Steps.init();
195    Steps.submit();
196    
197});
198
199organisation_name = "IHES UK";
200try{ var ira_context_infos = {"form_id":"form_cached_2026-10-04.06:28:41_6ac1d5f9e93024.86483627","campaign":1,"version":"b","lang":"en_EN","amount":{"amount":"0","amount_donation":"0","frequency":"once","free_amount":false,"currency":"GBP","log":"Context initialization in onDntEntryPoint()"},"reserved":"[]","affectation":null,"_cpn_name_":"donate"}; console.warn(ira_context_infos); }catch(err){}
201                try{
202                    $.cookie('dnt_coords',null,{'path':'/','domain':'.
202support.ihestrustuk.org'});
203                }catch(err){}
204                $(document).ready(function() {
205                    try{
206                        var context_form_input = $("input[name='context_form_id']");
207                        if(context_form_input){
208                            var context_form_val = context_form_input.val();
209                            if(!context_form_val || context_form_val == 'form_cached'){
210                                context_form_input.val("form_cached_"+Math.floor(Math.random() * 1000000000));
211                            }
212                        }
213                        if(typeof ira_form_version != 'undefined'){
214                            $('input[name=lang]').after( $('<input type="hidden" name="form_version" />').val(ira_form_version) );
215                        }
216                        var dnt_amount = {"amount":"0","amount_donation":"0","frequency":"once","free_amount":false,"currency":"GBP","log":"Context initialization in onDntEntryPoint()"};
217                        if(typeof Step1 != 'undefined' && dnt_amount){
218                            Step1.initValues(dnt_amount);
219                        }
220                     }catch(err){}
221                });
222// ]]>
223</script>
223<meta name="viewport" content="width=device-width" />
224<link rel="preconnect" href="https://libs.iraiser.eu" crossorigin />
225<link rel="preconnect" href="https://fonts.googleapis.com" />
226<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
227<link rel="dns-prefetch" href="https://libs.iraiser.eu" />
228<link rel="canonical" href="https://support.ihestrustuk.org/~share?cid=1&lang=en_EN" />
229<style type="text/css">
230    .regularblock {
231        display:none;
232    }
233
234
235
236body {
237    background:  url(/cdn.iraiser.eu/MyvDkJQBNqxbmADj01MRFg==/default/origin/CCMJSbleached11.jpg);    
238}
239
240#header {
241        }
242
243</style>
244
245<link rel="icon" href="/cdn.iraiser.eu/MyvDkJQBNqxbmADj01MRFg==/default/origin/IHESTrustUKLogocrop200.png">
246<script type='text/javascript'>
247    optionsGlobal = {"active_theme":"1","version":"4","font":"","font_title":"","fontsize":"","wedge":"5","--body-background-color":"#FFFFFF","donation_grid":"1","regular_heart_icon":"0","layout":"2","1_column_direction":"1","widgets_footer":"1","hide_reassurance_1":"0","hide_reassurance_2":"1","hide_reassurance_3":"1","security_info_new":"1","live_counter_map_sum":"","live_counter_map_count":"","widgets_progress_bar_currency":"","widgets_color_progress_bar_goal":"#00B4E1","widgets_progress_bar_goal":"","widgets_progress_bar_add_amount":"","widgets_progress_bar_add_donors":"","widgets_progress_bar_promt_amount":"","widgets_progress_bar_text_en_EN":"","widgets_color_last_donors":"#00B4E1","widgets_last_donors_filter":"","widgets_last_donors_text_en_EN":"","widgets_color_cookies_banner":"#00B4E1","widgets_cookies_banner_text_en_EN":"","widgets_cookies_banner_button_en_EN":"","widgets_most_popular_once_amount":"","widgets_most_popular_once_title_en_EN":"","widgets_most_popular_once_text_en_EN":"","widgets_most_popular_regular_amount":"","widgets_most_popular_regular_title_en_EN":"","widgets_most_popular_regular_text_en_EN":"","--main-action-color":"#00B4E1","--main-action-color-lighter":"#4cd4ff","--description-color":"#1B588F","--information-color":"#00B4E1","--column-background-color":"","--banner-color":"#1B588F","--banner-color-darker":"#001f4d","amount_keeping":"1"};
248    optionsCampaign = "";
249    campaign_id = 1;
250    context_lang = "en_EN";
251    campaign_stats = {"count":1,"sum":"500","min":500,"max":500,"avg":"5.00","progress":"100","last_donators":[{"firstname":"Clotilde","total":500,"currency":"GBP","date":"2026-07-23 19:32:00","campaign":1,"city":"LONDON","message":"","avatar":""}],"date_cache":"2026-10-04"};
252    campaign_stats_last_donators = [{"firstname":"Clotilde","total":500,"currency":"GBP","date":"2026-07-23 19:32:00","campaign":1,"city":"LONDON","message":"","avatar":""}];
253    campaign_currency = "GBP";
254    iraiser_counter = '';
255    client_livecounter = "ihesuk";
256    bymonth = 'per month';
257    i18n = {"accessibilityHeaderButton":"Accessibility","accessibilityModalTitle":"Accessibility options of the page:","accessibilityModalOptionContrast":"Activate high contrast colors","accessibilityModalOptionSpacing":"Activate extra spacing","accessibilityModalOptionLargeTexts":"Activate extra large texts","accessibilityModalMessage":"If you are facing accessibility issue(s) on this page despite these options, please <a href=\"\/contact-us\">contact us<\/a> by email so we can work on improving your experience. Thank you."};
258    checkoutPage = '';
259</script>
vendor: 1 bytes, line 259
259
260<script id="javascript_arya" type="text/javascript" src="https://support.ihestrustuk.org/themes/default/arya/dist/v4/arya.js?v=26090" ></script>
260
261<link type="text/css" href="https://support.ihestrustuk.org/themes/default/arya/dist/v4/arya.css?v=26090" rel="stylesheet" />
261<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/arya/dist/v4/formTest.js?v=26090" ></script>
261
262<link rel="stylesheet" href="https://use.typekit.net/eqq5onc.css" integrity="sha384-8sSywR6Cyic3sLn5qyxVqHLMupv1qGOQjgFvwT8dlScLwU7gVp+A5k1Vtk35vWBy" crossorigin="anonymous"><link type="text/css" href="https://support.ihestrustuk.org/themes/default/arya/dist/v4/form_visible_label.css?v=26090" rel="stylesheet" />
262<script type="text/javascript" src="https://support.ihestrustuk.org/themes/default/arya/dist/v4/accessibility.js?v=26090" ></script>
262
263<!-- [GIFT AID MODULE] -->
264
265    
266        
266<script>
267            const GIFT_AID_CONFIGURATION = {"activation":"1","position":"step1","display_mode":"checkbox","gift_aid_text":"Boost your donation by 25% from \u00a3{initial_amount} to \u00a3{giftaid_amount} (+ \u00a3{amount_difference}) at no extra cost to you","gift_aid_text_en_EN":"Boost your donation by 25% from \u00a3{initial_amount} to \u00a3{giftaid_amount} (+ \u00a3{amount_difference}) at no extra cost to you","radio_acceptance_text":"<strong>Yes, I want to add Gift Aid.<\/strong><br \/>\r\nI confirm I am a UK tax payer and want IHES UK to treat the donations I have made in the past four years and all future donations as Gift Aid donations. I understand that my donations are eligible for the scheme if I pay enough UK Income and\/or Capital Gains Tax to cover the amount of tax that all charities I donate to will reclaim in that tax year. If I pay less it is my responsibility to pay back the difference.","radio_acceptance_text_en_EN":"<strong>Yes, I want to add Gift Aid.<\/strong><br \/>\r\nI confirm I am a UK tax payer and want IHES UK to treat the donations I have made in the past four years and all future donations as Gift Aid donations. I understand that my donations are eligible for the scheme if I pay enough UK Income and\/or Capital Gains Tax to cover the amount of tax that all charities I donate to will reclaim in that tax year. If I pay less it is my responsibility to pay back the difference.","radio_refusal_text":"<strong>No, I don&#39;t want to add Gift Aid.<\/strong>","radio_refusal_text_en_EN":"<strong>No, I don&#39;t want to add Gift Aid.<\/strong>","checkbox_acceptance_text":"If you are a UK taxpayer, you can increase the value of your donation to IHES Trust UK by 25% at no additional cost to you through the Gift Aid scheme.<br \/>\r\nI confirm that I am a UK taxpayer and\u00a0I would like IHES Trust UK to treat this donation, and any donations I make in the future or have made in the past 4 years, as Gift Aid donations.","checkbox_acceptance_text_en_EN":"If you are a UK taxpayer, you can increase the value of your donation to IHES Trust UK by 25% at no additional cost to you through the Gift Aid scheme.<br \/>\r\nI confirm that I am a UK taxpayer and\u00a0I would like IHES Trust UK to treat this donation, and any donations I make in the future or have made in the past 4 years, as Gift Aid donations.","donation_origin_text":"Please select the origin of your donation","donation_origin_text_en_EN":"Please select the origin of your donation","personal_donation_text":"This donation is my own personal money","personal_donation_text_en_EN":"This donation is my own personal money","organisation_donation_text":"I donate on behalf of an organisation","organisation_donation_text_en_EN":"I donate on behalf of an organisation","collected_money_text":"This is money I've collected from others","collected_money_text_en_EN":"This is money I've collected from others","collected_money_eventname_label":"Event name","collected_money_eventname_label_en_EN":"Event name","gift_aid_activation_conditions":"<em>Only personal donations made in pounds are eligible for Gift Aid.<\/em>","gift_aid_activation_conditions_en_EN":"<em>Only personal donations made in pounds are eligible for Gift Aid.<\/em>","gift_aid_explanation_text":"","gift_aid_explanation_text_en_EN":""};
268            const CURRENCY = "GBP";
269        </script>
269
270        
271        
271<script type="text/javascript" src="/libs.iraiser.eu/services/gift_aid/v2/gift_aid.js" ></script>
271
272        <link type="text/css" href="/libs.iraiser.eu/services/gift_aid/v2/gift_aid.css" rel="stylesheet" />
273    
274
275<!--[/GIFT AID MODULE]-->
276
277
278<script>
279$(document).ready(function(){
280  // Function to handle the visibility and required attribute of reserved_activity
281  function handleReservedActivity() {
282    const reservedFundraising = $('#reserved_fundraising').prop('checked'); // Check if reserved_fundraising is checked
283
284    // Set required attribute based on the reservedFundraising value
285    $('input[name=reserved_activity]').prop('required', reservedFundraising);
286
287    // Show/hide reserved_activity based on the reservedFundraising value
288    if (reservedFundraising) {
289      $('p[name=reserved_activity]').show();
290      $('.tax-info.dark-text').hide(); // Hide tax-info.dark-text when reserved_fundraising is checked
291    } else {
292      $('p[name=reserved_activity]').hide();
293      $('.tax-info.dark-text').show(); // Show tax-info.dark-text when reserved_fundraising is unchecked
294    }
295  }
296
297  // Initially handle the reserved_activity based on the initial state of the checkboxes
298  handleReservedActivity();
299
300  // Handle change event for reserved_fundraising checkbox
301  $('#reserved_fundraising').on('change', function () {
302    handleReservedActivity();
303  });
304
305  // Function to handle the visibility of reserved_in_mem fields
306  function handleReservedInMemFields() {
307    const reservedInMem = $('#reserved_in_mem').prop('checked'); // Check if reserved_in_mem is checked
308    const reservedInMemAllocation = $('#reserved_in_mem_allocation').val(); // Get the selected value of reserved_in_mem_allocation
309
310    // Show/hide reserved_in_mem_name, reserved_in_mem_rel, and reserved_in_mem_allocation based on reservedInMem
311    if (reservedInMem) {
312      $('p[name=reserved_in_mem_name], p[name=reserved_in_mem_rel], p[name=reserved_in_mem_allocation]').show();
313      $('input[name=reserved_in_mem_name], input[name=reserved_in_mem_rel], select[name=reserved_in_mem_allocation]').attr('data-required', '1');
314
315      // Check if reserved_in_mem_allocation is 3, and show reserved_in_mem_ward accordingly
316      if (reservedInMemAllocation === '3') {
317        $('p[name=reserved_in_mem_ward]').show();
318        $('input[name=reserved_in_mem_ward]').attr('data-required', '1');
319      } else {
320        $('p[name=reserved_in_mem_ward]').hide();
321        $('input[name=reserved_in_mem_ward]').attr('data-required', '0');
322      }
323    } else {
324      // If reserved_in_mem is unchecked, hide all the fields and remove data-required attributes
325      $('p[name=reserved_in_mem_name], p[name=reserved_in_mem_rel], p[name=reserved_in_mem_allocation], p[name=reserved_in_mem_ward]').hide();
326      $('input[name=reserved_in_mem_name], input[name=reserved_in_mem_rel], select[name=reserved_in_mem_allocation], input[name=reserved_in_mem_ward]').removeAttr('data-required');
327    }
328  }
329
330  // Initially handle the reserved_in_mem fields based on the initial state of the checkboxes and select
331  handleReservedInMemFields();
332
333  // Handle change event for reserved_in_mem checkbox
334  $('#reserved_in_mem').on('change', function () {
335    handleReservedInMemFields();
336  });
337
338  // Handle change event for reserved_in_mem_allocation select
339  $('#reserved_in_mem_allocation').on('change', function () {
340    handleReservedInMemFields();
341  });
342});
343</script>
343
344
345<style>
346
347#reserved_in_mem_allocation {
348  width: 458px !important;
349}
350
351#reserved_in_mem_rel {
352  width: 458px !important;
353}</style></head><body class="loading-improvements" id="type-b" >
354
355<div id="container">
356
357	<div id="header" class="line">
358        <div class="container" id="header_wrapinner">
359            <div id="logo" class="unit size3of4">
360            
361                <h1>
362                    <a href="https://ihestrustuk.org/" title="IHES UK" target="_blank" rel="noopener noreferrer">
363                        <span class="screen-reader-only">IHES UK</span>
364                        <img src="/cdn.iraiser.eu/MyvDkJQBNqxbmADj01MRFg==/default/origin/IHESTrustUKLogocrop200.png" alt="IHES UK homepage" fetchpriority="high"/>
365                    </a>
366                </h1>
367            
368            </div>  <!-- End Logo -->
369
370                    </div>
371    </div> <!-- End Header -->
372
373    <div id="_wait">
374        <div id="floatingCirclesG">
375            <div class="f_circleG" id="frotateG_01"></div>
376            <div class="f_circleG" id="frotateG_02"></div>
377            <div class="f_circleG" id="frotateG_03"></div>
378            <div class="f_circleG" id="frotateG_04"></div>
379            <div class="f_circleG" id="frotateG_05"></div>
380            <div class="f_circleG" id="frotateG_06"></div>
381            <div class="f_circleG" id="frotateG_07"></div>
382            <div class="f_circleG" id="frotateG_08"></div>
383        </div>
384    </div>
385
386    <div id="main" class="line">
387
388        <div class="container" id="main_wrapinner">
389                                        
390                <noscript>
391            </noscript>
392
393    
394        <form action="/b/steps/save" method="post" id="form-steps" autocomplete="off">
395
396    <input type="hidden" name="context_form" value="" />
397<input type="hidden" name="context_form_id" value="" />
398<input type="hidden" name="cid" value="1" />
399<input type="hidden" name="lang" value="en_EN" />
400<input type="hidden" name="scope" value="" id="scope"/>
401
402<input id="useragent_input_0" type="hidden" name="private_user_agent_cli" value=""/>
403<script type="text/javascript">
404    document.getElementById("useragent_input_0").value = navigator.userAgent;
405</script>
405
406<input id="referer_input_0" type="hidden" name="private_referer" value=""/>
407<script type="text/javascript">
408    document.getElementById("referer_input_0").value = document.referrer;
409</script>
409
410<input id="random_input_0" type="hidden" name="private_random" value=""/>
411<script type="text/javascript">
412    document.getElementById("random_input_0").value = Math.random();
413    setTimeout(function(){ document.getElementById("random_input_0").value = Math.random(); }, 3000);
414</script>
414
415
416    <div id="step-1" class="unit size1of3">
417        <div class="step-container">
418            <div class="step-title">
419                <h2>My donation</h2>
420            </div>
421
422            <div class="step-content">
423                
424            <div>
425                
426            </div>
427
428                            
429                                <div id="once" class="bloc">
430                    <div class="bloc-content">
431                        <h3>One-off</h3>                        
432                        <div id="bloc-amount-once">
433    
434    <fieldset class="amount">
435    
436                        <ul class="radio-inline line" id="amount-list-once">
437                
438                                        <li><label><span id="value_of_amount-once-10000"><data class='price_currency'>£</data><data class='price_amount'>100</data></span> <input autocomplete="false" name="amount-once" type="radio" value="10000" id="amount-once-10000" /></label></li>
439                
440                                        <li><label><span id="value_of_amount-once-20000"><data class='price_currency'>£</data><data class='price_amount'>200</data></span> <input autocomplete="false" name="amount-once" type="radio" value="20000" id="amount-once-20000" /></label></li>
441                
442                                        <li><label><span id="value_of_amount-once-50000"><data class='price_currency'>£</data><data class='price_amount'>500</data></span> <input autocomplete="false" name="amount-once" type="radio" value="50000" id="amount-once-50000" /></label></li>
443                
444                                        <li><label><span id="value_of_amount-once-100000"><data class='price_currency'>£</data><data class='price_amount'>1,000</data></span> <input autocomplete="false" name="amount-once" type="radio" value="100000" id="amount-once-100000" /></label></li>
445                
446            </ul>
447                </fieldset>
448
449    <div class="amount-equivalences">
450        <p class="amount-equivalences-img"></p>
451        <p class="amount-equivalences-description"></p>
452    </div>
453
454        <fieldset class="free-amount">
455        <p><label>Choose your own amount        <span class="price_currency">£</span>         <input autocomplete="section-famount" name="famount-once" type="text" size="6" id="famount-once" />
456        
457        </label></p>
458    </fieldset>
459    
460    <p class="tax-info"></p>
461    <!--<input type="hidden" value="" name="iraiser_analytics_session_id" id="iraiser_analytics_session_id"/>-->
462    
463    <input type="hidden" name="referrer" />
464    
464<script type="text/javascript">
465        try{
466            $("input[name=referrer]").val(document.referrer);
467            if(document.location.search.indexOf('_cv')>1) {
468                $('input[name=referrer]').after($('<input type="hidden" name="query_string" />').val(document.location.search.substring(1)));
469            }
470        }catch(e){}
471    </script>
471
472    
473
474</div>                    </div>
475                </div> <!-- End Once -->
476                
477                <div class="onceblock">
478                    
479
480                </div>
481
482                <div id="or">
483                    <p>Or</p>
484                </div>
485
486                                <div id="regular" class="bloc">
487                    <div class="bloc-content">
488                        <h3>Monthly</h3>                        
489                        <div id="bloc-amount-regular">
490    
491    <fieldset class="amount">
492    
493                        <ul class="radio-inline line" id="amount-list-regular">
494                
495                                        <li><label><span id="value_of_amount-regular-10000"><data class='price_currency'>£</data><data class='price_amount'>100</data></span> <input autocomplete="false" name="amount-regular" type="radio" value="10000" id="amount-regular-10000" /></label></li>
496                
497                                        <li><label><span id="value_of_amount-regular-20000"><data class='price_currency'>£</data><data class='price_amount'>200</data></span> <input autocomplete="false" name="amount-regular" type="radio" value="20000" id="amount-regular-20000" /></label></li>
498                
499                                        <li><label><span id="value_of_amount-regular-50000"><data class='price_currency'>£</data><data class='price_amount'>500</data></span> <input autocomplete="false" name="amount-regular" type="radio" value="50000" id="amount-regular-50000" /></label></li>
500                
501                                        <li><label><span id="value_of_amount-regular-100000"><data class='price_currency'>£</data><data class='price_amount'>1,000</data></span> <input autocomplete="false" name="amount-regular" type="radio" value="100000" id="amount-regular-100000" /></label></li>
502                
503            </ul>
504                </fieldset>
505
506    <div class="amount-equivalences">
507        <p class="amount-equivalences-img"></p>
508        <p class="amount-equivalences-description"></p>
509    </div>
510
511        <fieldset class="free-amount">
512        <p><label>Choose your own amount        <span class="price_currency">£</span>         <input autocomplete="section-famount" name="famount-regular" type="text" size="6" id="famount-regular" />
513        
514        </label></p>
515    </fieldset>
516    
517    <p class="tax-info"></p>
518    <!--<input type="hidden" value="" name="iraiser_analytics_session_id" id="iraiser_analytics_session_id"/>-->
519    
520    <input type="hidden" name="referrer" />
521    
521<script type="text/javascript">
522        try{
523            $("input[name=referrer]").val(document.referrer);
524            if(document.location.search.indexOf('_cv')>1) {
525                $('input[name=referrer]').after($('<input type="hidden" name="query_string" />').val(document.location.search.substring(1)));
526            }
527        }catch(e){}
528    </script>
528
529    
530
531</div>                    </div>
532                </div> <!-- End Each-month -->
533                
534                <div class="regularblock">
535                    
536
537                </div>
538
539            
540            
541            <div>
542                
543																							        		
544					<p name="reserved_in_mem"  id="reserved_in_mem_id_6ac1d5f9f15c5" data-type="checkbox" class="custom-field-p" >
545				<label for="reserved_in_mem">
546
547				
548					<input type="hidden" name="reserved_in_mem" value="0" />
549					<input id="reserved_in_mem" type="checkbox" aria-describedby="nameHelp_reserved_in_mem" name="reserved_in_mem" data-scope="step1" data-required="" value="1"
550						 />
551				
552
553				<span class="reserved_title">I am making a donation in honour of someone</span>
554					
555					<span id="nameHelp_reserved_in_mem" class="help"></span>
556				</label>
557
558				
559				
560							</p>
561
562            
563					
564																									        		
565					<p name="reserved_in_mem_name"  id="reserved_in_mem_name_id_6ac1d5f9f15cf" data-type="short" class="custom-field-p" >
566				<label for="reserved_in_mem_name">
567
568				
569
570				<span class="reserved_title">This gift is in honour of</span>
571					
572					<span id="nameHelp_reserved_in_mem_name" class="help"></span>
573				</label>
574
575				
576																					<input
577						id="reserved_in_mem_name"
578						type="text"
579						aria-describedby="nameHelp_reserved_in_mem_name"
580						name="reserved_in_mem_name"
581						data-scope="step1"
582						data-required=""
583						value=""
584						
585					/>
586				
587				
588							</p>
589
590            
591					
592																									        		
593					<p name="reserved_in_mem_rel"  id="reserved_in_mem_rel_id_6ac1d5f9f15d4" data-type="select" class="custom-field-p" >
594				<label for="reserved_in_mem_rel">
595
596				
597
598				<span class="reserved_title">This person is my...</span>
599					
600					<span id="nameHelp_reserved_in_mem_rel" class="help"></span>
601				</label>
602
603				
604					<select id="reserved_in_mem_rel" aria-describedby="nameHelp_reserved_in_mem_rel" name="reserved_in_mem_rel" data-scope="step1" data-required="">
605				
606																																					<option name="reserved_in_mem_rel" value="Father" >Father</option>
607							
608																																							<option name="reserved_in_mem_rel" value="Mother" >Mother</option>
609							
610																																							<option name="reserved_in_mem_rel" value="Son" >Son</option>
611							
612																																							<option name="reserved_in_mem_rel" value="Daughter" >Daughter</option>
613							
614																																							<option name="reserved_in_mem_rel" value="Sibling" >Sibling</option>
615							
616																																							<option name="reserved_in_mem_rel" value="Grandparent" >Grandparent</option>
617							
618																																							<option name="reserved_in_mem_rel" value="Husband" >Husband</option>
619							
620																																							<option name="reserved_in_mem_rel" value="Wife" >Wife</option>
621							
622																																							<option name="reserved_in_mem_rel" value="Partner" >Partner</option>
623							
624																																							<option name="reserved_in_mem_rel" value="Family_member" >Family Member</option>
625							
626																																							<option name="reserved_in_mem_rel" value="Friend" >Friend</option>
627							
628																																							<option name="reserved_in_mem_rel" value="Other" >Other</option>
629							
630															
631									</select>
632							</p>
633
634            
635					
636			
637            </div>
638
639            
640
641            </div> <!-- End Step-content -->
642
643            <div class="step-info">
644                <h4></h4>
645                <div class="step-info-body">
646                    All donations are processed securely. We comply with GDPR and protect your personal information. Your donation will be used to support our charitable mission.
647                </div>
648            </div> <!-- End Step-info -->
649        </div> <!-- End Step-container -->
650    </div> <!-- End Step-1 -->
651
652    <div id="step-2" class="unit size1of3">
653    <div class="step-container">
654        <div class="step-title">
655            <h2>My details</h2>
656        </div>
657
658        <div class="step-content">
659            
660            
661            <fieldset id="fieldset-step2">
662
663                
664                
665
666                                    <p id="c-email">
667                        <label for="email">
668                            Email 
669                            <span class="required">*</span> 
670                            <span class="help">
671                                                            </span>
672                        </label>
673                        <input type="text" name="email" id="email" />
674                    </p>
675                
676                
677
678                <fieldset id="fielset-name">
679                        <p id="c-isc">
680        <label>
681            <input type="checkbox" value="OK" name="iscompany" id="iscompany" /> 
682            I am making a donation on behalf of an organisation        </label>
683    </p>
684    <p id="c-isc-inf" class="company-infos hidden">
685        <label for="company">Company                        <span class="help">
686                            </span>
687        </label>
688        <input type="text" name="company" id="company"
689                        />
690    </p>
691        
692    
693                                            <p id="c-civ">
694                            <label for="civility">
695                                Title 
696                                <span class="required">*</span>
697                            </label>
698                            <select name="civility" id="civility">
699    <option value=""></option>
700    <option value="1">Mr</option>
701    <option value="2">Mrs</option>
702    <option value="3">Miss</option>
703
704</select>                        </p>
705                                                                <p id="c-fname">
706                            <label for="firstname">First Name 
707                                <span class="required">*</span> <span class="help">
708                                                                    </span>
709                            </label>
710                            <input type="text" name="firstname" id="firstname" autocomplete="given-name" />
711                        </p>
712                                                                <p id="c-lname">
713                            <label for="lastname">
714                                Last Name 
715                                <span class="required">*</span> 
716                                <span class="help">
717                                                                    </span>
718                            </label>
719                            <input type="text" name="lastname" id="lastname" autocomplete="family-name"  />
720                        </p>
721                                    </fieldset>
722
723                
724
725                <fieldset id="fielset-address">
726                                                                <p id="c-addr1">
727                            <label for="address1">
728                                Address 1 
729                                <span class="required">*</span> 
730                                <span class="help">
731                                                                    </span>
732                            </label>
733                            <input type="text" name="address1" id="address1" />
734                        </p>
735                                                                <p id="c-addr2">
736                            <label for="address2">
737                                Address 2 
738                                <span class="help">
739                                                                    </span>
740                            </label>
741                            <input type="text" name="address2" id="address2" />
742                        </p>
743                                                            <div class="line">
744                                                    <p id="c-pcode" class="unit size1of2">
745                                <label for="postcode">
746                                    Postcode 
747                                    <span class="required">*</span>
748                                    <span class="help">
749                                                                            </span>
750                                </label>
751                                <input type="text" name="postcode" id="postcode" />
752                            </p>
753                                                                            <p id="c-city" class="unit size2of2 lastUnit">
754                                <label for="city">
755                                    City 
756                                    <span class="required">*</span> 
757                                    <span class="help">
758                                                                            </span>
759                                </label>
760                                <input type="text" name="city" id="city" />
761                            </p>
762                                            </div>
763                                                                <p id="c-country">
764                            <label for="country">
765                                Country 
766                                <span class="required">*</span> 
767                                <span class="help">
768                                                                    </span>
769                            </label>
770                                                            <select name="country" id="country">
771            <option value="AF">AFGHANISTAN</option>
772            <option value="GB">UNITED KINGDOM</option>
773    
774    <option value="">----------------------------------</option>
775    <option value="AF">AFGHANISTAN</option>
776    <option value="AX">ÅLAND ISLANDS</option>
777    <option value="AL">ALBANIA</option>
778    <option value="DZ">ALGERIA</option>
779    <option value="AS">AMERICAN SAMOA</option>
780    <option value="AD">ANDORRA</option>
781    <option value="AO">ANGOLA</option>
782    <option value="AI">ANGUILLA</option>
783    <option value="AQ">ANTARCTICA</option>
784    <option value="AG">ANTIGUA AND BARBUDA</option>
785    <option value="AR">ARGENTINA</option>
786    <option value="AM">ARMENIA</option>
787    <option value="AW">ARUBA</option>
788    <option value="AU">AUSTRALIA</option>
789    <option value="AT">AUSTRIA</option>
790    <option value="AZ">AZERBAIJAN</option>
791    <option value="BS">BAHAMAS</option>
792    <option value="BH">BAHRAIN</option>
793    <option value="BD">BANGLADESH</option>
794    <option value="BB">BARBADOS</option>
795    <option value="BY">BELARUS</option>
796    <option value="BE">BELGIUM</option>
797    <option value="BZ">BELIZE</option>
798    <option value="BJ">BENIN</option>
799    <option value="BM">BERMUDA</option>
800    <option value="BT">BHUTAN</option>
801    <option value="BO">BOLIVIA, PLURINATIONAL STATE OF</option>
802    <option value="BA">BOSNIA AND HERZEGOVINA</option>
803    <option value="BW">BOTSWANA</option>
804    <option value="BV">BOUVET ISLAND</option>
805    <option value="BR">BRAZIL</option>
806    <option value="IO">BRITISH INDIAN OCEAN TERRITORY</option>
807    <option value="BN">BRUNEI DARUSSALAM</option>
808    <option value="BG">BULGARIA</option>
809    <option value="BF">BURKINA FASO</option>
810    <option value="BI">BURUNDI</option>
811    <option value="KH">CAMBODIA</option>
812    <option value="CM">CAMEROON</option>
813    <option value="CA">CANADA</option>
814    <option value="CV">CAPE VERDE</option>
815    <option value="KY">CAYMAN ISLANDS</option>
816    <option value="CF">CENTRAL AFRICAN REPUBLIC</option>
817    <option value="TD">CHAD</option>
818    <option value="CL">CHILE</option>
819    <option value="CN">CHINA</option>
820    <option value="CX">CHRISTMAS ISLAND</option>
821    <option value="CC">COCOS (KEELING) ISLANDS</option>
822    <option value="CO">COLOMBIA</option>
823    <option value="KM">COMOROS</option>
824    <option value="CG">CONGO</option>
825    <option value="CD">CONGO, THE DEMOCRATIC REPUBLIC OF THE</option>
826    <option value="CK">COOK ISLANDS</option>
827    <option value="CR">COSTA RICA</option>
828    <option value="CI">CÔTE D'IVOIRE</option>
829    <option value="HR">CROATIA</option>
830    <option value="CU">CUBA</option>
831    <option value="CY">CYPRUS</option>
832    <option value="CZ">CZECH REPUBLIC</option>
833    <option value="DK">DENMARK</option>
834    <option value="DJ">DJIBOUTI</option>
835    <option value="DM">DOMINICA</option>
836    <option value="DO">DOMINICAN REPUBLIC</option>
837    <option value="EC">ECUADOR</option>
838    <option value="EG">EGYPT</option>
839    <option value="SV">EL SALVADOR</option>
840    <option value="GQ">EQUATORIAL GUINEA</option>
841    <option value="ER">ERITREA</option>
842    <option value="EE">ESTONIA</option>
843    <option value="ET">ETHIOPIA</option>
844    <option value="FK">FALKLAND ISLANDS (MALVINAS)</option>
845    <option value="FO">FAROE ISLANDS</option>
846    <option value="FJ">
846FIJI</option>
847    <option value="FI">FINLAND</option>
848    <option value="FR">FRANCE</option>
849    <option value="GF">FRENCH GUIANA</option>
850    <option value="PF">FRENCH POLYNESIA</option>
851    <option value="TF">FRENCH SOUTHERN TERRITORIES</option>
852    <option value="GA">GABON</option>
853    <option value="GM">GAMBIA</option>
854    <option value="GE">GEORGIA</option>
855    <option value="DE">GERMANY</option>
856    <option value="GH">GHANA</option>
857    <option value="GI">GIBRALTAR</option>
858    <option value="GR">GREECE</option>
859    <option value="GL">GREENLAND</option>
860    <option value="GD">GRENADA</option>
861    <option value="GP">GUADELOUPE</option>
862    <option value="GU">GUAM</option>
863    <option value="GT">GUATEMALA</option>
864    <option value="GG">GUERNSEY</option>
865    <option value="GN">GUINEA</option>
866    <option value="GW">GUINEA-BISSAU</option>
867    <option value="GY">GUYANA</option>
868    <option value="HT">HAITI</option>
869    <option value="HM">HEARD ISLAND AND MCDONALD ISLANDS</option>
870    <option value="VA">HOLY SEE (VATICAN CITY STATE)</option>
871    <option value="HN">HONDURAS</option>
872    <option value="HK">HONG KONG</option>
873    <option value="HU">HUNGARY</option>
874    <option value="IS">ICELAND</option>
875    <option value="IN">INDIA</option>
876    <option value="ID">INDONESIA</option>
877    <option value="IR">IRAN, ISLAMIC REPUBLIC OF</option>
878    <option value="IQ">IRAQ</option>
879    <option value="IE">IRELAND</option>
880    <option value="IM">ISLE OF MAN</option>
881    <option value="IL">ISRAEL</option>
882    <option value="IT">ITALY</option>
883    <option value="JM">JAMAICA</option>
884    <option value="JP">JAPAN</option>
885    <option value="JE">JERSEY</option>
886    <option value="JO">JORDAN</option>
887    <option value="KZ">KAZAKHSTAN</option>
888    <option value="KE">KENYA</option>
889    <option value="KI">KIRIBATI</option>
890    <option value="KP">
890KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF</option>
891    <option value="KR">KOREA, REPUBLIC OF</option>
892    <option value="KW">KUWAIT</option>
893    <option value="KG">KYRGYZSTAN</option>
894    <option value="LA">LAO PEOPLE'S DEMOCRATIC REPUBLIC</option>
895    <option value="LV">LATVIA</option>
896    <option value="LB">LEBANON</option>
897    <option value="LS">LESOTHO</option>
898    <option value="LR">LIBERIA</option>
899    <option value="LY">LIBYAN ARAB JAMAHIRIYA</option>
900    <option value="LI">LIECHTENSTEIN</option>
901    <option value="LT">LITHUANIA</option>
902    <option value="LU">LUXEMBOURG</option>
903    <option value="MO">MACAO</option>
904    <option value="MK">MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF</option>
905    <option value="MG">MADAGASCAR</option>
906    <option value="MW">MALAWI</option>
907    <option value="MY">MALAYSIA</option>
908    <option value="MV">MALDIVES</option>
909    <option value="ML">MALI</option>
910    <option value="MT">MALTA</option>
911    <option value="MH">MARSHALL ISLANDS</option>
912    <option value="MQ">MARTINIQUE</option>
913    <option value="MR">MAURITANIA</option>
914    <option value="MU">MAURITIUS</option>
915    <option value="YT">MAYOTTE</option>
916    <option value="MX">MEXICO</option>
917    <option value="FM">MICRONESIA, FEDERATED STATES OF</option>
918    <option value="MD">MOLDOVA, REPUBLIC OF</option>
919    <option value="MC">MONACO</option>
920    <option value="MN">MONGOLIA</option>
921    <option value="ME">MONTENEGRO</option>
922    <option value="MS">MONTSERRAT</option>
923    <option value="MA">MOROCCO</option>
924    <option value="MZ">MOZAMBIQUE</option>
925    <option value="MM">MYANMAR</option>
926    <option value="NA">NAMIBIA</option>
927    <option value="NR">NAURU</option>
928    <option value="NP">NEPAL</option>
929    <option value="NL">NETHERLANDS</option>
930    <option value="AN">NETHERLANDS ANTILLES</option>
931    <option value="NC">NEW CALEDONIA</option>
932    <option value="NZ">NEW ZEALAND</option>
933    <option value="NI">NICARAGUA</option>
934    <option value="NE">NIGER</option>
935    <option value="NG">NIGERIA</option>
936    <option value="NU">NIUE</option>
937    <option value="NF">NORFOLK ISLAND</option>
938    <option value="MP">NORTHERN MARIANA ISLANDS</option>
939    <option value="NO">NORWAY</option>
940    <option value="OM">OMAN</option>
941    <option value="PK">PAKISTAN</option>
942    <option value="PW">PALAU</option>
943    <option value="PS">PALESTINIAN TERRITORY, OCCUPIED</option>
944    <option value="PA">PANAMA</option>
945    <option value="PG">PAPUA NEW GUINEA</option>
946    <option value="PY">PARAGUAY</option>
947    <option value="PE">PERU</option>
948    <option value="PH">PHILIPPINES</option>
949    <option value="PN">PITCAIRN</option>
950    <option value="PL">POLAND</option>
951    <option value="PT">PORTUGAL</option>
952    <option value="PR">PUERTO RICO</option>
953    <option value="QA">QATAR</option>
954    <option value="RE">RÉUNION</option>
955    <option value="RO">ROMANIA</option>
956    <option value="RU">RUSSIAN FEDERATION</option>
957    <option value="RW">RWANDA</option>
958    <option value="BL">SAINT BARTHÉLEMY</option>
959    <option value="SH">SAINT HELENA, ASCENSION AND TRISTAN DA CUNHA</option>
960    <option value="KN">SAINT KITTS AND NEVIS</option>
961    <option value="LC">SAINT LUCIA</option>
962    <option value="MF">SAINT MARTIN</option>
963    <option value="PM">SAINT PIERRE AND MIQUELON</option>
964    <option value="VC">SAINT VINCENT AND THE GRENADINES</option>
965    <option value="WS">SAMOA</option>
966    <option value="SM">SAN MARINO</option>
967    <option value="ST">SAO TOME AND PRINCIPE</option>
968    <option value="SA">SAUDI ARABIA</option>
969    <option value="SN">SENEGAL</option>
970    <option value="RS">SERBIA</option>
971    <option value="SC">SEYCHELLES</option>
972    <option value="SL">SIERRA LEONE</option>
973    <option value="SG">SINGAPORE</option>
974    <option value="SK">SLOVAKIA</option>
975    <option value="SI">SLOVENIA</option>
976    <option value="SB">SOLOMON ISLANDS</option>
977    <option value="SO">SOMALIA</option>
978    <option value="ZA">SOUTH AFRICA</option>
979    <option value="GS">SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS</option>
980    <option value="ES">SPAIN</option>
981    <option value="LK">SRI LANKA</option>
982    <option value="SD">SUDAN</option>
983    <option value="SR">SURINAME</option>
984    <option value="SJ">SVALBARD AND JAN MAYEN</option>
985    <option value="SZ">SWAZILAND</option>
986    <option value="SE">SWEDEN</option>
987    <option value="CH">SWITZERLAND</option>
988    <option value="SY">SYRIAN ARAB REPUBLIC</option>
989    <option value="TW">TAIWAN, PROVINCE OF CHINA</option>
990    <option value="TJ">TAJIKISTAN</option>
991    <option value="TZ">TANZANIA, UNITED REPUBLIC OF</option>
992    <option value="TH">THAILAND</option>
993    <option value="TL">TIMOR-LESTE</option>
994    <option value="TG">TOGO</option>
995    <option value="TK">TOKELAU</option>
996    <option value="TO">TONGA</option>
997    <option value="TT">TRINIDAD AND TOBAGO</option>
998    <option value="TN">TUNISIA</option>
999    <option value="TR">TURKEY</option>
1000    <option value="TM">TURKMENISTAN</option>
1001    <option value="TC">TURKS AND CAICOS ISLANDS</option>
1002    <option value="TV">TUVALU</option>
1003    <option value="UG">UGANDA</option>
1004    <option value="UA">UKRAINE</option>
1005    <option value="AE">UNITED ARAB EMIRATES</option>
1006    <option value="GB">UNITED KINGDOM</option>
1007    <option value="US"  selected="selected">UNITED STATES</option>
1008    <option value="UM">UNITED STATES MINOR OUTLYING ISLANDS</option>
1009    <option value="UY">URUGUAY</option>
1010    <option value="UZ">UZBEKISTAN</option>
1011    <option value="VU">VANUATU</option>
1012    <option value="VE">VENEZUELA, BOLIVARIAN REPUBLIC OF</option>
1013    <option value="VN">VIET NAM</option>
1014    <option value="VG">VIRGIN ISLANDS, BRITISH</option>
1015    <option value="VI">VIRGIN ISLANDS, U.S.</option>
1016    <option value="WF">WALLIS AND FUTUNA</option>
1017    <option value="EH">WESTERN SAHARA</option>
1018    <option value="YE">YEMEN</option>
1019    <option value="ZM">ZAMBIA</option>
1020    <option value="ZW">ZIMBABWE</option>
1021
1022</select>
1023                                                    </p>
1024                                            <!-- FindMyAddress not enabled on this campaign -->
1025                </fieldset>
1026                
1027																							        		
1028					<p name="reserved_marketing_opt_in"  id="reserved_marketing_opt_in_id_6ac1d5f9f3a05" data-type="checkbox" class="custom-field-p" >
1029				<label for="reserved_marketing_opt_in">
1030
1031				
1032					<input type="hidden" name="reserved_marketing_opt_in" value="
10320" />
1033					<input id="reserved_marketing_opt_in" type="checkbox" aria-describedby="nameHelp_reserved_marketing_opt_in" name="reserved_marketing_opt_in" data-scope="step2" data-required="" value="1"
1034						 />
1035				
1036
1037				<span class="reserved_title">I would like to receive updates, news and fundraising communications from IHES Trust UK by email. I understand I can unsubscribe at any time.</span>
1038					
1039					<span id="nameHelp_reserved_marketing_opt_in" class="help"></span>
1040				</label>
1041
1042				
1043				
1044							</p>
1045
1046            
1047					
1048			
1049
1050                <p id="required-info">
1051                    <span class="required">*</span> 
1052                    <span class="help">
1053                        Required Fields 
1054                                                    (this information is mandatory to issue your tax receipt)                                            </span>
1055                </p>
1056
1057            </fieldset>
1058
1059        </div> <!-- End Bloc -->
1060
1061        <div class="step-info">
1062            <h4>Respect of your privacy</h4>
1063            <div class="step-info-body">
1064                
1065            </div>
1066        </div> <!-- End Step-info -->
1067    </div> <!-- End Step-container -->
1068</div> <!-- End Step-2 -->
1069
1070    <div id="step-3" class="unit size1of3 lastUnit">
1071    <div class="step-container">
1072        <div class="step-title">
1073            <h2>My payment</h2>
1074        </div>
1075        <div class="step-content">
1076                                        <div id="security-info">
1077    <p>Secure payments with the latest encryption protocols, designed to meet the highest industry standards.</p>
1078</div>
1079                        
1080            
1081            
1082
1083            <div class="payment">
1084                <div id="payment_modes_once">
1085            
1086
1087
1088    <input type="hidden" name="paymentNonce" id="paymentNonce" value="" autocomplete="off"/>
1089    <input type="hidden" name="stripeErrorCode" id="stripeErrorCode" value="" autocomplete="off"/>
1090    <input type="hidden" name="stripeError" id="stripeError" value="" autocomplete="off"/>
1091
1092
1093    <fieldset id="payment_mode-card" class="payment_mode">
1094        <h4 class="payment_head">
1095            <span class="payment_mode_title">Debit or credit Card</span>
1096        </h4>
1097        <div class="payment_body" id="creditcard">
1098            
1099                        <p id="card-number">
1100                                    <label for="stripe_creditcard_cardNumber_placeholder_once">Please enter your card number</label>
1101                    <input type="text" id="stripe_creditcard_cardNumber_placeholder_once" autocomplete="off"/>
1102                            </p>
1103
1104                            <div class="line">
1105                    <p id="card-expiry" class="unit size1of2">
1106                        <label for="stripe_creditcard_cardExpiry_placeholder_once">Expiry date</label>
1107                        <input type="text" id="stripe_creditcard_cardExpiry_placeholder_once" autocomplete="off"/>
1108                                </p>
1109
1110                                <p id="card-scode" class="unit size2of2 lastUnit">
1111                        <label for="stripe_creditcard_cardCvc_placeholder_once">Security Code</label>
1112                        <input type="text" id="stripe_creditcard_cardCvc_placeholder_once" autocomplete="off"/>
1113                                    <span class="help">The 3 digit security code is located on the back of your card</span>
1114                        <span class="help amex"
1115                            style="display: none;">The security code consists of 4 digits written towards the top right on the front of your card</span>
1116                    </p>
1117
1118                            </div>
1119                
1120
1121
1122
1123
1124<script type="text/javascript">
1125    if (!window.stripeJsLoaded) {
1126        window.stripeJsLoaded = new Promise((resolve, reject) => {
1127            const s = document.createElement('script');
1128            s.src = 'https://js.stripe.com/v3/';
1129            s.type = 'text/javascript';
1130            s.onerror = reject;
1131            s.onload = resolve;
1132            document.head.appendChild(s);
1133        });
1134    }
1135</script>
1135
1136
1137<input type="hidden" name="stripe_creditcard_paymentMethod" id="stripe_creditcard_paymentMethod_once"
1138    data-scope="stripe" data-required = "1" data-ira-check="window.stripe_creditcard.checkPaymentMethod('once')"/>
1139<script>
1140    var stripeElementGetFrequency = () => Step1.current_donation.frequency;
1141    
1142    if (!window.stripe_creditcard) {
1143        const VAL_ERROR = 'error';
1144        const VAL_NOT_SET = 'N/A';
1145
1146        const defaultCoords = {};
1147
1148        
1149
1150                    defaultCoords["firstname"] = null; 
1151                    defaultCoords["lastname"] = null; 
1152                    defaultCoords["email"] = null; 
1153        
1154        const defaultPaymentMethodErrorMessage = "Your bank details are incorrect. Please verify and enter again.";
1155        const lang = "en_EN";
1156        const cardCvcPlaceholder = "Use the value provided by Stripe";
1157        const stripePublicApiKey = "pk_live_srqYyZqem3SpTx2GjUycaPjN";
1158        const stripeApiVersion = "2020-08-27";
1159        
1160
1161        const coordNames = Object.keys(defaultCoords);
1162
1163        const elementConf = {
1164            'cardNumber': {
1165                defaultErrorMessage: DntErrors.errorMsg.cardnumber,
1166                options: {showIcon: true},
1167            },
1168            'cardExpiry': {
1169                defaultErrorMessage: DntErrors.errorMsg.cardmonth,
1170            },
1171            'cardCvc': {
1172                defaultErrorMessage: DntErrors.errorMsg.cardscode,
1173            },
1174        };
1175        // only add a CVC placeholder for languages which have a short CVC provided
1176        if (cardCvcPlaceholder != 'Use the value provided by Stripe') {
1177            elementConf.cardCvc.options = {placeholder: cardCvcPlaceholder};
1178        }
1179        const elementTypes = Object.keys(elementConf);
1180
1181        window.stripe_creditcard = {
1182            complete: {},
1183            elements: {},
1184            error: {},
1185            frequencies: {},
1186            lastInitFrequency: '',
1187            stripe: false,
1188
1189            checkElement: function(frequency, elementType) {
1190                this.log('checkElement', [frequency, elementType]);
1191                if (frequency !== this.lastInitFrequency) return false;
1192
1193                const complete = this.complete[frequency][elementType];
1194                const error = this.error[frequency][elementType];
1195                const placeholder = $('#' + this.getPlaceholderId(frequency, elementType));
1196
1197                if (!complete || error) {
1198                    placeholder.attr('data-ira-errormsg', error && error.message
1199                        ? error.message
1200                        : elementConf[elementType].defaultErrorMessage
1201                    );
1202                    return false;
1203                } else {
1204                    placeholder.removeAttr('data-ira-errormsg');
1205                    return true;
1206                }
1207            },
1208
1209            checkPaymentMethod: function(frequency) {
1210                this.log('checkPaymentMethod', [frequency]);
1211                if (frequency !== this.lastInitFrequency) return false;
1212
1213                const paymentMethodInput = this.getPaymentMethodInput(frequency);
1214                
1215                if (paymentMethodInput.val() === VAL_ERROR) {
1216                    paymentMethodInput.attr('data-ira-errormsg', this.error[frequency].paymentMethod || defaultPaymentMethodErrorMessage);
1217                    return false;
1218                } else {
1219                    paymentMethodInput.removeAttr('data-ira-errormsg');
1220                    return true;
1221                }
1222            },
1223
1224            createPaymentMethod: function (frequency) {
1225                if (frequency !== this.lastInitFrequency) return;
1226                this.log('createPaymentMethod', [frequency]);
1227
1228                const paymentMethodInput = this.resetPaymentMethod(frequency);
1229
1230                for (let elementType of elementTypes) {
1231                    if (!this.complete[frequency][elementType]) return;
1232                }
1233
1234                const coords = {};
1235                for (let coordName of coordNames) {
1236                    const coordInput = $('input[name="' + coordName + '"]');
1237                    coords[coordName] = coordInput.length ? coordInput.val() : defaultCoords[coordName];
1238                    if (!coords[coordName]) return;
1239                }
1240
1241                // All other inputs we rely on are ok and won't trigger any error message display,
1242                // so until createPaymentMethod succeds, we must ensure paymentMethodInput does
1243                paymentMethodInput.val(VAL_ERROR);
1244
1245                // Prevent form submission before createPaymentMethod answers
1246                $('#stripe_submit.' + frequency).prop('disabled', true);
1247                setTimeout(() => {
1248                    try {
1249                        this.stripe.createPaymentMethod({
1250                            type: 'card',
1251                            card: this.elements[frequency].cardNumber,
1252                            billing_details: {
1253                                name: coords.firstname + ' ' + co
1253ords.lastname,
1254                                email: coords.email,
1255                            }
1256                        }).then(result => {
1257                            $('#stripe_submit.' + frequency).prop('disabled', false);
1258                            console.log(result);
1259
1260                            if (result.paymentMethod && result.paymentMethod.id) {
1261                                paymentMethodInput.val(result.paymentMethod.id);
1262                                console.log('paymentMethod = ' + paymentMethodInput.val());
1263                            } else {
1264                                this.error[frequency].paymentMethod = result.error.message;
1265                                for (let prop of ['type', 'code', 'decline_code', 'message']) {
1266                                    window.onerror('createPaymentMethod error.' + prop + ' = ' + result.error[prop]);
1267                                }
1268                            }
1269                        });
1270                    } catch (e) {
1271                        console.log(e);
1272                        $('#stripe_submit.' + frequency).prop('disabled', false);
1273                    }
1274                }, 500);
1275               
1276            },
1277
1278            getContainerId: function(frequency, elementType) {
1279                return 'stripe_creditcard_' + elementType + '_container_' + frequency;
1280            },
1281
1282            getPaymentMethodInput: function(frequency) {
1283                return $('#stripe_creditcard_paymentMethod_' + frequency);
1284            },
1285
1286            getPlaceholderId: function(frequency, elementType) {
1287                return 'stripe_creditcard_' + elementType + '_placeholder_' + frequency;
1288            },
1289
1290            /**
1291             * Build an array of Stripe JS CssFontSource objects
1292             * from the fonts used by the specified elements.
1293             *
1294             * See https://stripe.com/docs/js/appendix/css_font_source_object
1295             *
1296             * Warning: works only for fonts loaded from a google-style stylesheet URL
1297             * with a family=xxx parameter (where xxx is the font-family)
1298             */
1299            getStripeJsCssFontSources: function(ids) {
1300                try {
1301                    const used = {};
1302                    for (let id of ids) {
1303                        const computedStyle = window.getComputedStyle(document.getElementById(id));
1304                        const fontFamily = computedStyle.getPropertyValue('font-family');
1305                        used[fontFamily] = true;
1306                    }
1307
1308                    const hrefs = [];
1309                    for (let s of document.styleSheets) {
1310                        if (!s.href) continue;
1311                        const params = new URLSearchParams(new URL(s.href).search);
1312                        const fontFamily = params.get('family');
1313                        if (used[fontFamily] && (hrefs.indexOf(s.href) === -1)) {
1314                            hrefs.push(s.href);
1315                        }
1316                    }
1317                    return hrefs.map(href => ({cssSrc: href}));
1318                } catch (error) {
1319                    /**
1320                     * Stripe Element implementation has javascript incompatibility with Opera browser.
1321                     * We work around this problem by catching exceptions in getStripeJsCssFontSources and returning an empty list.
1322                     * This fix will have an impact on the design of Stripe Elements, but it will not block the creation of donations.
1323                     */
1324                    return [];
1325                }
1326            },
1327
1328            /**
1329             * Get the locale as expected by Stripe JS
1330             * 
1331             * See https://stripe.com/docs/js/appendix/supported_locales
1332             */
1333            getStripeJsLocale: function () {
1334                switch(lang) {
1335                    case 'en_EN':
1336                        return 'en-GB';
1337                    case 'se_SE':
1338                        return 'sv';
1339                    case 'zh_TW':
1340                        return lang.substring(0, 2) + '-' + lang.substring(3, 5);
1341                    default:
1342                        return lang.substring(0, 2);
1343                }
1344            },
1345
1346            /**
1347             * Build a Stripe JS Style object from the specified element's computed style
1348             * and copy all other styles to the provided container.
1349             *
1350             * See https://stripe.com/docs/js/appendix/style
1351             */
1352            getStripeJsStyle: function(id, container) {
1353                const styleKeyMap = {
1354                    // Stripe JS recommands setting background-color on the container
1355                    //'background-color': 'backgroundColor',
1356                    'color': 'color',
1357                    'font-family': 'fontFamily',
1358                    'font-size': 'fontSize',
1359                    'font-smoothing': 'fontSmoothing',
1360                    'font-style': 'fontStyle',
1361                    'font-variant': 'fontVariant',
1362                    'font-weight': 'fontWeight',
1363                    // Stripe JS doesn't like line-height and doesn't even take it into account
1364                    //'line-height': 'lineHeight',
1365                    'letter-spacing': 'letterSpacing',
1366                    'text-align': 'textAlign',
1367                    'text-decoration': 'textDecoration',
1368                    'text-shadow': 'textShadow',
1369                    'text-transform': 'textTransform',
1370                };
1371                const baseStyle = {};
1372                const computedStyle = window.getComputedStyle(document.getElementById(id));
1373                for (let cssProp of computedStyle) {
1374                    const styleKey = styleKeyMap[cssProp];
1375                    const cssValue = computedStyle.getPropertyValue(cssProp);
1376                    if (styleKey) {
1377                        baseStyle[styleKey] = cssValue;
1378                    } else {
1379                        container.css(cssProp, cssValue);
1380                    }
1381                }
1382                return {base: baseStyle};
1383            },
1384
1385            init: function (reason) {
1386                const frequency = stripeElementGetFrequency();
1387                if (!this.frequencies[frequency]) return;
1388                this.log('init', [frequency, reason]);
1389
1390                // Stripe elements are reset at every init so we need to reset as well
1391                this.complete[frequency] = {};
1392                this.error[frequency] = {};
1393                this.resetPaymentMethod(frequency);
1394                this.lastInitFrequency = frequency;
1395
1396                this.mount(frequency);
1397            },
1398
1399            isMounted: function(frequency) {
1400                return !!this.elements[frequency];
1401            },
1402
1403            log: function (method, params = []) {
1404                console.log('stripe_creditcard.' + method + '(' + params.join(', ') + ')');
1405            },
1406
1407            mount: function (frequency) {
1408                const wasAlreadyMounted = this.unmount(frequency);
1409                this.log('mount', [frequency]);
1410
1411                if (!this.stripe) {
1412                    this.stripe = Stripe(stripePublicApiKey, {
1413                        locale: this.getStripeJsLocale(), 
1414                        apiVersion: stripeApiVersion 
1415                        });
1416                }
1417
1418                const stripeElements = this.stripe.elements({
1419                    fonts: this.getStripeJsCssFontSources(
1420                        elementTypes.map(elementType => this.getPlaceholderId(frequency, elementType))
1421                    ),
1422                });
1423                
1424                this.elements[frequency] = {};
1425                for (let elementType of elementTypes) {
1426                    const placeholderId = this.getPlaceholderId(frequency, elementType);
1427
1428                    const containerId = this.getContainerId(frequency, elementType);
1429                    const container = $('<span/>').attr('id', containerId);
1430
1431                    const element = stripeElements.create(elementType, Object.assign(
1432                        {style: this.getStripeJsStyle(placeholderId, container)},
1433                        elementConf[elementType].options
1434                    ));
1435                    this.elements[frequency][elementType] = element;
1436
1437                    $('#' + placeholderId)
1438                        .attr('data-scope', 'stripe')
1439                        .attr('data-required', '1')
1440                        .attr('data-ira-check', "window.stripe_creditcard.checkElement('" + frequency + "', '" + elementType + "')")
1441                        .val(VAL_NOT_SET)
1442                        .hide()
1443                        .after(container);
1444                    element.mount('#' + containerId);
1445                    
1446                    // Stripe creates an intermediate div between the container and its iframe
1447                    // Let's force this div's contents to be vertically centered inside the container
1448                    $('#' + containerId + ' div').css({
1449                        display: 'flex',
1450                        height: '100%',
1451                        'align-items': 'center',
1452                    });
1453
1454                    element.on('change', ev => this.onElementChanged(frequency, ev, placeholderId));
1455                }
1456
1457                if (!wasAlreadyMounted) {
1458                    for (let coordName of coordNames) {
1459                        $('input[name="' + coordName + '"]').on('change', () => this.createPaymentMethod(frequency));
1460                    }
1461                    // Force a re-init if the payment mode was previously hidden
1462                    // as Stripe does not mount well hidden fields
1463                    const cvcPlaceholderId = this.getPlaceholderId(frequency, 'cardCvc');
1464                    $('#payment_mode-card:has(#' + cvcPlaceholderId + ')').on('payment_shown', () => this.init('payment_shown'));
1465                }
1466            },
1467
1468            unmount: function (frequency) {
1469                if (!this.isMounted(frequency)) return false;
1470                this.log('unmount', [frequency]);
1471
1472                for (let elementType of elementTypes) {
1473                    this.elements[frequency][elementType].destroy();
1474                    $('#' + this.getContainerId(frequency, elementType)).remove();
1475                    $('#' + this.getPlaceholderId(frequency, elementType)).show();
1476                }
1477                return true;
1478            },
1479
1480            onElementChanged: function (frequency, ev, placeholderId) {
1481                this.log('onElementChanged', [
1482                    frequency,
1483                    ev.elementType,
1484                    ev.complete ? 'complete' : 'not complete',
1485                    ev.error ? ev.error.message : 'no error',
1486                ]);
1487                this.complete[frequency][ev.elementType] = ev.complete;
1488                this.error[frequency][ev.elementType] = ev.error;
1489
1490                this.createPaymentMethod(frequency);
1491                Common.toggleDisplayErrorInput($("#" + placeholderId), !!ev.error);
1492            },
1493        
1494            resetPaymentMethod: function (frequency) {
1495                const paymentMethodInput = this.getPaymentMethodInput(frequency);
1496                paymentMethodInput.val(VAL_NOT_SET);
1497                this.error[frequency].paymentMethod = false;
1498                return paymentMethodInput;
1499            },
1500        };
1501
1502        window.stripeJsLoaded.then(() => {
1503            // Force a reinit when the donation amount or the style change
1504            for (let event of ['init_done', 'WebFont.fontactive']) {
1505                $('body').on(event, () => window.stripe_creditcard.init(event));
1506            }
1507        });
1508    }
1509
1510    if (!window.stripe_creditcard.frequencies["once"]) {
1511        window.stripe_creditcard.frequencies["once"] = true;
1512        window.stripeJsLoaded.then(() => {
1513            // Ensure the 1st init is done only once, for the active frequency
1514            if (stripeElementGetFrequency() === "once") {
1515                window.stripe_creditcard.init("stripeJsLoaded");
1516            }
1517        });
1518    }
1519    
1520</script>
1520
1521            
1522            
1523
1524            <p id="card-submit" class="payment-submit">
1525                <input
1526    name="stripe_submit"
1527    type="submit"
1528    value="Give"
1529    data-no_amount_txt="Give"
1530    data-once_txt="Give {donation_amount_with_currency}"
1531    data-regular_txt="Give {donation_amount_with_currency} per month"
1532    id="stripe_submit"
1533    class="button payment-button once"
1534    
1535        data-scope="stripe"
1536    
1537/>
1538            </p>
1539        </div>
1540    </fieldset>
1541
1542        </div>
1543
1544<div id="payment_modes_regular" style="display:none">
1545
1546
1547            
1548
1549
1550    <input type="hidden" name="paymentNonce" id="paymentNonce" value="" autocomplete="off"/>
1551    <input type="hidden" name="stripeErrorCode" id="stripeErrorCode" value="" autocomplete="off"/>
1552    <input type="hidden" name="stripeError" id="stripeError" value="" autocomplete="off"/>
1553
1554
1555    <fieldset id="payment_mode-card" class="payment_mode">
1556        <h4 class="payment_head">
1557            <span class="payment_mode_title">Debit or credit Card</span>
1558        </h4>
1559        <div class="payment_body" id="creditcard">
1560            
1561                        <p id="card-number">
1562                                    <label for="stripe_creditcard_cardNumber_placeholder_regular">Please enter your card number</label>
1563                    <input type="text" id="stripe_creditcard_cardNumber_placeholder_regular" autocomplete="off"/>
1564                            </p>
1565
1566                            <div class="line">
1567                    <p id="card-expiry" class="unit size1of2">
1568                        <label for="stripe_creditcard_cardExpiry_placeholder_regular">Expiry date</label>
1569                        <input type="text" id="stripe_creditcard_cardExpiry_placeholder_regular" autocomplete="off"/>
1570                                </p>
1571
1572                                <p id="card-scode" class="unit size2of2 lastUnit">
1573                        <label for="stripe_creditcard_cardCvc_placeholder_regular">Security Code</label>
1574                        <input type="text" id="stripe_creditcard_cardCvc_placeholder_regular" autocomplete="off"/>
1575                                    <span class="help">The 3 digit security code is located on the back of your card</span>
1576                        <span class="help amex"
1577                            style="display: none;">The security code consists of 4 digits written towards the top right on the front of your card</span>
1578                    </p>
1579
1580                            </div>
1581                
1582
1583
1584
1585
1586<script type="text/javascript">
1587    if (!window.stripeJsLoaded) {
1588        window.stripeJsLoaded = new Promise((resolve, reject) => {
1589            const s = document.createElement('script');
1590            s.src = 'https://js.stripe.com/v3/';
1591            s.type = 'text/javascript';
1592            s.onerror = reject;
1593            s.onload = resolve;
1594            document.head.appendChild(s);
1595        });
1596    }
1597</script>
1597
1598
1599<input type="hidden" name="stripe_creditcard_paymentMethod" id="stripe_creditcard_paymentMethod_regular"
1600    data-scope="stripe" data-required = "1" data-ira-check="window.stripe_creditcard.checkPaymentMethod('regular')"/>
1601<script>
1602    var stripeElementGetFrequency = () => Step1.current_donation.frequency;
1603    
1604    if (!window.stripe_creditcard) {
1605        const VAL_ERROR = 'error';
1606        const VAL_NOT_SET = 'N/A';
1607
1608        const defaultCoords = {};
1609
1610        
1611
1612                    defaultCoords["firstname"] = null; 
1613                    defaultCoords["lastname"] = null; 
1614                    defaultCoords["email"] = null; 
1615        
1616        const defaultPaymentMethodErrorMessage = "Your bank details are incorrect. Please verify and enter again.";
1617        const lang = "en_EN";
1618        const cardCvcPlaceholder = "Use the value provided by Stripe";
1619        const stripePublicApiKey = "pk_live_srqYyZqem3SpTx2GjUycaPjN";
1620        const stripeApiVersion = "2020-08-27";
1621        
1622
1623        const coordNames = Object.keys(defaultCoords);
1624
1625        const elementConf = {
1626            'cardNumber': {
1627                defaultErrorMessage: DntErrors.errorMsg.cardnumber,
1628                options: {showIcon: true},
1629            },
1630            'cardExpiry': {
1631                defaultErrorMessage: DntErrors.errorMsg.cardmonth,
1632            },
1633            'cardCvc': {
1634                defaultErrorMessage: DntErrors.errorMsg.cardscode,
1635            },
1636        };
1637        // only add a CVC placeholder for languages which have a short CVC provided
1638        if (cardCvcPlaceholder != 'Use the value provided by Stripe') {
1639            elementConf.cardCvc.options = {placeholder: cardCvcPlaceholder};
1640        }
1641        const elementTypes = Object.keys(elementConf);
1642
1643        window.stripe_creditcard = {
1644            complete: {},
1645            elements: {},
1646            error: {},
1647            frequencies: {},
1648            lastInitFrequency: '',
1649            stripe: false,
1650
1651            checkElement: function(frequency, elementType) {
1652                this.log('checkElement', [frequency, elementType]);
1653                if (frequency !== this.lastInitFrequency) return false;
1654
1655                const complete = this.complete[frequency][elementType];
1656                const error = this.error[frequency][elementType];
1657                const placeholder = $('#' + this.getPlaceholderId(frequency, elementType));
1658
1659                if (!complete || error) {
1660                    placeholder.attr('data-ira-errormsg', error && error.message
1661                        ? error.message
1662                        : elementConf[elementType].defaultErrorMessage
1663                    );
1664                    return false;
1665                } else {
1666                    placeholder.removeAttr('data-ira-errormsg');
1667                    return true;
1668                }
1669            },
1670
1671            checkPaymentMethod: function(frequency) {
1672                this.log('checkPaymentMethod', [frequency]);
1673                if (frequency !== this.lastInitFrequency) return false;
1674
1675                const paymentMethodInput = this.getPaymentMethodInput(frequency);
1676                
1677                if (paymentMethodInput.val() === VAL_ERROR) {
1678                    paymentMethodInput.attr('data-ira-errormsg', this.error[frequency].paymentMethod || defaultPaymentMethodErrorMessage);
1679                    return false;
1680                } else {
1681                    paymentMethodInput.removeAttr('data-ira-errormsg');
1682                    return true;
1683                }
1684            },
1685
1686            createPaymentMethod: function (frequency) {
1687                if (frequency !== this.lastInitFrequency) return;
1688                this.log('createPaymentMethod', [frequency]);
1689
1690                const paymentMethodInput = this.resetPaymentMethod(frequency);
1691
1692                for (let elementType of elementTypes) {
1693                    if (!this.complete[frequency][elementType]) return;
1694                }
1695
1696                const coords = {};
1697                for (let coordName of coordNames) {
1698                    const coordInput = $('input[name="' + coordName + '"]');
1699                    coords[coordName] = coordInput.length ? coordInput.val() : defaultCoords[coordName];
1700                    if (!coords[coordName]) return;
1701                }
1702
1703                // All other inputs we rely on are ok and won't trigger any error message display,
1704                // so until createPaymentMethod succeds, we must ensure paymentMethodInput does
1705                paymentMethodInput.val(VAL_ERROR);
1706
1707                // Prevent form submission before createPaymentMethod answers
1708                $('#stripe_submit.' + frequency).prop('disabled', true);
1709                setTimeout(() => {
1710                    try {
1711                        this.stripe.createPaymentMethod({
1712                            type: 'card',
1713                            card: this.elements[frequency].cardNumber,
1714                            billing_details: {
1715                                name: coords.firstname + ' ' + co
1715ords.lastname,
1716                                email: coords.email,
1717                            }
1718                        }).then(result => {
1719                            $('#stripe_submit.' + frequency).prop('disabled', false);
1720                            console.log(result);
1721
1722                            if (result.paymentMethod && result.paymentMethod.id) {
1723                                paymentMethodInput.val(result.paymentMethod.id);
1724                                console.log('paymentMethod = ' + paymentMethodInput.val());
1725                            } else {
1726                                this.error[frequency].paymentMethod = result.error.message;
1727                                for (let prop of ['type', 'code', 'decline_code', 'message']) {
1728                                    window.onerror('createPaymentMethod error.' + prop + ' = ' + result.error[prop]);
1729                                }
1730                            }
1731                        });
1732                    } catch (e) {
1733                        console.log(e);
1734                        $('#stripe_submit.' + frequency).prop('disabled', false);
1735                    }
1736                }, 500);
1737               
1738            },
1739
1740            getContainerId: function(frequency, elementType) {
1741                return 'stripe_creditcard_' + elementType + '_container_' + frequency;
1742            },
1743
1744            getPaymentMethodInput: function(frequency) {
1745                return $('#stripe_creditcard_paymentMethod_' + frequency);
1746            },
1747
1748            getPlaceholderId: function(frequency, elementType) {
1749                return 'stripe_creditcard_' + elementType + '_placeholder_' + frequency;
1750            },
1751
1752            /**
1753             * Build an array of Stripe JS CssFontSource objects
1754             * from the fonts used by the specified elements.
1755             *
1756             * See https://stripe.com/docs/js/appendix/css_font_source_object
1757             *
1758             * Warning: works only for fonts loaded from a google-style stylesheet URL
1759             * with a family=xxx parameter (where xxx is the font-family)
1760             */
1761            getStripeJsCssFontSources: function(ids) {
1762                try {
1763                    const used = {};
1764                    for (let id of ids) {
1765                        const computedStyle = window.getComputedStyle(document.getElementById(id));
1766                        const fontFamily = computedStyle.getPropertyValue('font-family');
1767                        used[fontFamily] = true;
1768                    }
1769
1770                    const hrefs = [];
1771                    for (let s of document.styleSheets) {
1772                        if (!s.href) continue;
1773                        const params = new URLSearchParams(new URL(s.href).search);
1774                        const fontFamily = params.get('family');
1775                        if (used[fontFamily] && (hrefs.indexOf(s.href) === -1)) {
1776                            hrefs.push(s.href);
1777                        }
1778                    }
1779                    return hrefs.map(href => ({cssSrc: href}));
1780                } catch (error) {
1781                    /**
1782                     * Stripe Element implementation has javascript incompatibility with Opera browser.
1783                     * We work around this problem by catching exceptions in getStripeJsCssFontSources and returning an empty list.
1784                     * This fix will have an impact on the design of Stripe Elements, but it will not block the creation of donations.
1785                     */
1786                    return [];
1787                }
1788            },
1789
1790            /**
1791             * Get the locale as expected by Stripe JS
1792             * 
1793             * See https://stripe.com/docs/js/appendix/supported_locales
1794             */
1795            getStripeJsLocale: function () {
1796                switch(lang) {
1797                    case 'en_EN':
1798                        return 'en-GB';
1799                    case 'se_SE':
1800                        return 'sv';
1801                    case 'zh_TW':
1802                        return lang.substring(0, 2) + '-' + lang.substring(3, 5);
1803                    default:
1804                        return lang.substring(0, 2);
1805                }
1806            },
1807
1808            /**
1809             * Build a Stripe JS Style object from the specified element's computed style
1810             * and copy all other styles to the provided container.
1811             *
1812             * See https://stripe.com/docs/js/appendix/style
1813             */
1814            getStripeJsStyle: function(id, container) {
1815                const styleKeyMap = {
1816                    // Stripe JS recommands setting background-color on the container
1817                    //'background-color': 'backgroundColor',
1818                    'color': 'color',
1819                    'font-family': 'fontFamily',
1820                    'font-size': 'fontSize',
1821                    'font-smoothing': 'fontSmoothing',
1822                    'font-style': 'fontStyle',
1823                    'font-variant': 'fontVariant',
1824                    'font-weight': 'fontWeight',
1825                    // Stripe JS doesn't like line-height and doesn't even take it into account
1826                    //'line-height': 'lineHeight',
1827                    'letter-spacing': 'letterSpacing',
1828                    'text-align': 'textAlign',
1829                    'text-decoration': 'textDecoration',
1830                    'text-shadow': 'textShadow',
1831                    'text-transform': 'textTransform',
1832                };
1833                const baseStyle = {};
1834                const computedStyle = window.getComputedStyle(document.getElementById(id));
1835                for (let cssProp of computedStyle) {
1836                    const styleKey = styleKeyMap[cssProp];
1837                    const cssValue = computedStyle.getPropertyValue(cssProp);
1838                    if (styleKey) {
1839                        baseStyle[styleKey] = cssValue;
1840                    } else {
1841                        container.css(cssProp, cssValue);
1842                    }
1843                }
1844                return {base: baseStyle};
1845            },
1846
1847            init: function (reason) {
1848                const frequency = stripeElementGetFrequency();
1849                if (!this.frequencies[frequency]) return;
1850                this.log('init', [frequency, reason]);
1851
1852                // Stripe elements are reset at every init so we need to reset as well
1853                this.complete[frequency] = {};
1854                this.error[frequency] = {};
1855                this.resetPaymentMethod(frequency);
1856                this.lastInitFrequency = frequency;
1857
1858                this.mount(frequency);
1859            },
1860
1861            isMounted: function(frequency) {
1862                return !!this.elements[frequency];
1863            },
1864
1865            log: function (method, params = []) {
1866                console.log('stripe_creditcard.' + method + '(' + params.join(', ') + ')');
1867            },
1868
1869            mount: function (frequency) {
1870                const wasAlreadyMounted = this.unmount(frequency);
1871                this.log('mount', [frequency]);
1872
1873                if (!this.stripe) {
1874                    this.stripe = Stripe(stripePublicApiKey, {
1875                        locale: this.getStripeJsLocale(), 
1876                        apiVersion: stripeApiVersion 
1877                        });
1878                }
1879
1880                const stripeElements = this.stripe.elements({
1881                    fonts: this.getStripeJsCssFontSources(
1882                        elementTypes.map(elementType => this.getPlaceholderId(frequency, elementType))
1883                    ),
1884                });
1885                
1886                this.elements[frequency] = {};
1887                for (let elementType of elementTypes) {
1888                    const placeholderId = this.getPlaceholderId(frequency, elementType);
1889
1890                    const containerId = this.getContainerId(frequency, elementType);
1891                    const container = $('<span/>').attr('id', containerId);
1892
1893                    const element = stripeElements.create(elementType, Object.assign(
1894                        {style: this.getStripeJsStyle(placeholderId, container)},
1895                        elementConf[elementType].options
1896                    ));
1897                    this.elements[frequency][elementType] = element;
1898
1899                    $('#' + placeholderId)
1900                        .attr('data-scope', 'stripe')
1901                        .attr('data-required', '1')
1902                        .attr('data-ira-check', "window.stripe_creditcard.checkElement('" + frequency + "', '" + elementType + "')")
1903                        .val(VAL_NOT_SET)
1904                        .hide()
1905                        .after(container);
1906                    element.mount('#' + containerId);
1907                    
1908                    // Stripe creates an intermediate div between the container and its iframe
1909                    // Let's force this div's contents to be vertically centered inside the container
1910                    $('#' + containerId + ' div').css({
1911                        display: 'flex',
1912                        height: '100%',
1913                        'align-items': 'center',
1914                    });
1915
1916                    element.on('change', ev => this.onElementChanged(frequency, ev, placeholderId));
1917                }
1918
1919                if (!wasAlreadyMounted) {
1920                    for (let coordName of coordNames) {
1921                        $('input[name="' + coordName + '"]').on('change', () => this.createPaymentMethod(frequency));
1922                    }
1923                    // Force a re-init if the payment mode was previously hidden
1924                    // as Stripe does not mount well hidden fields
1925                    const cvcPlaceholderId = this.getPlaceholderId(frequency, 'cardCvc');
1926                    $('#payment_mode-card:has(#' + cvcPlaceholderId + ')').on('payment_shown', () => this.init('payment_shown'));
1927                }
1928            },
1929
1930            unmount: function (frequency) {
1931                if (!this.isMounted(frequency)) return false;
1932                this.log('unmount', [frequency]);
1933
1934                for (let elementType of elementTypes) {
1935                    this.elements[frequency][elementType].destroy();
1936                    $('#' + this.getContainerId(frequency, elementType)).remove();
1937                    $('#' + this.getPlaceholderId(frequency, elementType)).show();
1938                }
1939                return true;
1940            },
1941
1942            onElementChanged: function (frequency, ev, placeholderId) {
1943                this.log('onElementChanged', [
1944                    frequency,
1945                    ev.elementType,
1946                    ev.complete ? 'complete' : 'not complete',
1947                    ev.error ? ev.error.message : 'no error',
1948                ]);
1949                this.complete[frequency][ev.elementType] = ev.complete;
1950                this.error[frequency][ev.elementType] = ev.error;
1951
1952                this.createPaymentMethod(frequency);
1953                Common.toggleDisplayErrorInput($("#" + placeholderId), !!ev.error);
1954            },
1955        
1956            resetPaymentMethod: function (frequency) {
1957                const paymentMethodInput = this.getPaymentMethodInput(frequency);
1958                paymentMethodInput.val(VAL_NOT_SET);
1959                this.error[frequency].paymentMethod = false;
1960                return paymentMethodInput;
1961            },
1962        };
1963
1964        window.stripeJsLoaded.then(() => {
1965            // Force a reinit when the donation amount or the style change
1966            for (let event of ['init_done', 'WebFont.fontactive']) {
1967                $('body').on(event, () => window.stripe_creditcard.init(event));
1968            }
1969        });
1970    }
1971
1972    if (!window.stripe_creditcard.frequencies["regular"]) {
1973        window.stripe_creditcard.frequencies["regular"] = true;
1974        window.stripeJsLoaded.then(() => {
1975            // Ensure the 1st init is done only once, for the active frequency
1976            if (stripeElementGetFrequency() === "regular") {
1977                window.stripe_creditcard.init("stripeJsLoaded");
1978            }
1979        });
1980    }
1981    
1982</script>
1982
1983            
1984            
1985
1986            <p id="card-submit" class="payment-submit">
1987                <input
1988    name="stripe_submit"
1989    type="submit"
1990    value="Give"
1991    data-no_amount_txt="Give"
1992    data-once_txt="Give {donation_amount_with_currency}"
1993    data-regular_txt="Give {donation_amount_with_currency} per month"
1994    id="stripe_submit"
1995    class="button payment-button regular"
1996    
1997        data-scope="stripe"
1998    
1999/>
2000            </p>
2001        </div>
2002    </fieldset>
2003
2004        </div>
2005            </div> <!-- End Payment -->
2006        </div> <!-- End Bloc -->
2007
2008                    <div class="step-info">
2009                <h4>Help us in total confidence</h4>
2010                <div class="step-info-body">
2011                    This website is 100% secure.<br />
2012All banking information to process the payment is encrypted using the SSL protocol. They are under no circumstances stored on our computer systems.<br />
2013<br />
2014Our donor service is at your disposal to answer all your questions. Do not hesitate to contact us by e-mail: [email protected]
2015                </div>
2016            </div> <!-- End Step-info -->
2017            </div> <!-- End Step-container -->
2018</div> <!-- End Step 3 -->
2019
2020
2021    
2022    </form>
2023    
2024
2025        </div>
2026    </div> <!-- End Main -->
2027
2028    <div id="footer" class="line">
2029        <div class="container" id="footer_wrapinner">
2030
2031            <div id="powered" class="unit size1of3" style="display:block !important;">
2032                                        
2033<a style="display:block !important;" href="https://www.iraiser.com/en/" title="Powered by iRaiser" target="_blank">
2034    
2035        <img style="display:block !important; min-width: 100px!important;min-height: 15px!important;" src="/themes/default/arya/assets/powered_by_iraiser_black.svg" alt="Powered by iRaiser" width="120" height="18" loading="lazy"/>
2036    </a>
2037                            </div>
2038
2039            <div id="copyright" class="unit size2of3 lastUnit">
2040                <p>
2041                    
2042                    <a href="https://support.ihestrustuk.org/our-credits" title="Credits" target="_blank" rel="noopener noreferrer">Credits</a> <span>|</span>
2043                    <a href="https://support.ihestrustuk.org/legals" title="Legal Information" target="_blank" rel="noopener noreferrer">Legal Information</a> <span>|</span>
2044                    <a href="https://support.ihestrustuk.org/contact-us" title="Contact" target="_blank" rel="noopener noreferrer">Contact</a>
2045                </p>
2046            </div>
2047        </div>
2048    </div> <!-- End Footer -->
2049</div> <!-- End Container -->
2050
2051
2052</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.