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't want to add Gift Aid.<\/strong>","radio_refusal_text_en_EN":"<strong>No, I don'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.