PageSourceSearch

https://www.voipfonestatus.co.uk/uptime

html voipfonestatus.co.uk collected 2026-10-05 08:16:07 UTC 74,225 bytes, 1,268 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3  <head>
4    <meta http-equiv="X-UA-Compatible" content="IE=edge">
5    <!-- force IE browsers in compatibility mode to use their most aggressive rendering engine -->
6
7    <meta charset="utf-8">
8    <title>Voipfone Status - Uptime History</title>
9    <meta name="description" content="Voipfone&#39;s Uptime History">
10
11    <!-- Mobile viewport optimization -->
12    <meta name="HandheldFriendly" content="True">
13    <meta name="MobileOptimized" content="320">
14    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0">
15
16    <!-- Time this page was rendered - http://purl.org/dc/terms/issued -->
17    <meta name="issued" content="1791188166">
18
19    <!-- Mobile IE allows us to activate ClearType technology for smoothing fonts for easy reading -->
20    <meta http-equiv="cleartype" content="on">
21
22      <!-- Atlassian Sans & Mono Fonts -->
23<link
24  rel="preconnect"
25  href="https://ds-cdn.prod-east.frontend.public.atl-paas.net" />
26<link
27  rel="preload"
28  href="https://ds-cdn.prod-east.frontend.public.atl-paas.net/assets/fonts/atlassian-sans/v3/AtlassianSans-latin.woff2"
29  as="font" type="font/woff2" crossorigin />
30<link
31  rel="preload"
32  href="https://ds-cdn.prod-east.frontend.public.atl-paas.net/assets/font-rules/v5/atlassian-fonts.css"
33  as="style" crossorigin />
34
35    <style>
36  /* Dynamic Font Stack based on Feature Flag */
37    /* Using Atlassian Sans & Mono */
38    :root {
39      --font-stack-a: "Atlassian Sans", "Helvetica Neue", Helvetica, Arial, Sans-Serif;
40      --font-stack-b: "Atlassian Mono", "SFMono-Medium", "SF Mono", "Segoe UI Mono", "Roboto Mono", "Ubuntu Mono", Menlo, Consolas, Courier, monospace;
41    }
42</style>
43
44
45      <link rel="icon" type="image/x-icon" href="//dka575ofm4ao0.cloudfront.net/pages-favicon_logos/original/16003/uFVlAwiSTaskFLgaj06A" />
46
47    <link rel="shortcut icon" href='//dka575ofm4ao0.cloudfront.net/pages-favicon_logos/original/16003/uFVlAwiSTaskFLgaj06A'>
48
49    <link rel="alternate" type="application/atom+xml" href="https://www.voipfonestatus.co.uk/history.atom" title="Voipfone Status History - Atom Feed">
50    <link rel="alternate" type="application/rss+xml" href="https://www.voipfonestatus.co.uk/history.rss" title="Voipfone Status History - RSS Feed">
51
52      <!-- Canonical Link to ensure that only the custom domain is indexed when present -->
53      <link rel="canonical" href="https://www.voipfonestatus.co.uk/uptime">
54
55    <meta name="_globalsign-domain-verification" content="y_VzfckMy4iePo5oDJNivyYIjh8LffYa4jzUndm_bZ"/>
56
57
58    <link rel="alternate" type="application/atom+xml" title="ATOM" href="https://www.voipfonestatus.co.uk/history.atom" />
59
60    <!-- Le styles -->
61    <link rel="stylesheet" href="https://dka575ofm4ao0.cloudfront.net/packs/0.a7d86fc6a129fa9540bc.css" media="screen" /><link rel="stylesheet" href="https://dka575ofm4ao0.cloudfront.net/packs/191.a7d86fc6a129fa9540bc.css" media="screen" /><link rel="stylesheet" href="https://dka575ofm4ao0.cloudfront.net/packs/155.a7d86fc6a129fa9540bc.css" media="screen" />
62    <link rel="stylesheet" href="https://dka575ofm4ao0.cloudfront.net/assets/status/status_manifest-e7416fcfeedbe261454d619d119599335f4c7b18c9e245c13722dbb0998dc023.css" media="all" />
63
64    
64<script src="https://dka575ofm4ao0.cloudfront.net/assets/jquery-3.5.1.min-729e416557a365062a8a20f0562f18aa171da57298005d392312670c706c68de.js"></script>
64
65
66    
66<script>
67      window.pageColorData = {"blue":"#3498DB","border":"#E0E0E0","body_background":"#ffffff","font":"#333333","graph":"#3498db","green":"#2fcc66","light_font":"#AAAAAA","link":"#3498db","orange":"#e67e22","red":"#e74c3c","yellow":"#f1c40f","no_data":"#b3bac5"};
68    </script>
68
69    <style>
70  /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */
71  body,
72  .layout-content.status.status-api .section .example-container .example-opener .color-secondary,
73  .grouped-items-selector,
74  .layout-content.status.status-full-history .history-nav a.current,
75  div[id^="subscribe-modal"] .modal-footer,
76  div[id^="subscribe-modal"],
77  div[id^="updates-dropdown"] .updates-dropdown-section,
78  #uptime-tooltip .tooltip-box {
79    background-color:#ffffff;
80  }
81
82  #uptime-tooltip .pointer-container .pointer-smaller {
83    border-bottom-color:#ffffff;
84  }
85
86
87
88
89  /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */
90  body.status,
91  .color-primary,
92  .color-primary:hover,
93  .layout-content.status-index .status-day .update-title.impact-none a,
94  .layout-content.status-index .status-day .update-title.impact-none a:hover,
95  .layout-content.status-index .timeframes-container .timeframe.active,
96  .layout-content.status-full-history .month .incident-container .impact-none,
97  .layout-content.status.status-index .incidents-list .incident-title.impact-none a,
98  .incident-history .impact-none,
99  .layout-content.status .grouped-items-selector.inline .grouped-item.active,
100  .layout-content.status.status-full-history .history-nav a.current,
101  .layout-content.status.status-full-history .history-nav a:not(.current):hover,
102  div[id^="subscribe-modal"] .modal-header .close,
103  .grouped-item-label,
104  #uptime-tooltip .tooltip-box .tooltip-content .related-events .related-event a.related-event-link {
105    color:#333333;
106  }
107
108  .layout-content.status.status-index .components-statuses .component-container .name {
109    color:#333333;
110    color:rgba(51,51,51,.8);
111  }
112
113
114
115
116  /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */
117  small,
118  .layout-content.status .table-row .date,
119  .color-secondary,
120  .layout-content.status .grouped-items-selector.inline .grouped-item,
121  .layout-content.status.status-full-history .history-footer .pagination a.disabled,
122  .layout-content.status.status-full-history .history-nav a,
123  #uptime-tooltip .tooltip-box .tooltip-content .related-events #related-event-header {
124    color:#AAAAAA;
125  }
126
127
128
129
130  /* BORDER COLOR */  /* BORDER COLOR */  /* BORDER COLOR */  /* BORDER COLOR */  /* BORDER COLOR */  /* BORDER COLOR */
131  body.status .layout-content.status .border-color,
132  hr,
133  .tooltip-base,
134  .markdown-display table,
135  div[id^="subscribe-modal"],
136  #uptime-tooltip .tooltip-box {
137    border-color:#E0E0E0;
138  }
139
140  div[id^="subscribe-modal"] .modal-footer,
141  .markdown-display table td {
142    border-top-color:#E0E0E0;
143  }
144
145  .markdown-display table td + td, .markdown-display table th + th {
146    border-left-color:#E0E0E0;
147  }
148
149  div[id^="subscribe-modal"] .modal-header,
150  #uptime-tooltip .pointer-container .pointer-larger {
151    border-bottom-color:#E0E0E0;
152  }
153
154  #uptime-tooltip .tooltip-box .outage-field {
155    /*
156      Generate the background-color for the outage-field from the css_body_background_color and css_border_color.
157
158      For the default background (#ffffff) and default css_border_color (#e0e0e0), use the luminosity of the default background with a magic number to arrive at
159      the original outage-field background color (#f4f5f7). I used the formula Target Color = Color * alpha + Background * (1 - alpha) to find the magic number of ~0.08.
160
161      For darker css_body_background_color, luminosity values are lower so alpha trends toward becoming transparent (thus outage-field background becomes same as css_body_background_color).
162    */
163    background-color: rgba(224,224,224,0.31);
164
165    /*
166      outage-field border-color alpha is inverse to the luminosity of css_body_background_color.
167      That is to say, with a default white background this border is transparent, but on a black background, it's opaque css_border_color.
168    */
169    border-color: rgba(224,224,224,0.0);
170  }
171
172
173
174
175  /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */
176  .layout-content.status.status-index .status-day .update-title.impact-critical a,
177  .layout-content.status.status-index .status-day .update-title.impact-critical a:hover,
178  .layout-content.status.status-index .page-status.status-critical,
179  .layout-content.status.status-index .unresolved-incident.impact-critical .incident-title,
180  .flat-button.background-red {
181    background-color:#e74c3c;
182  }
183
184  .layout-content.status-index .components-statuses .component-container.status-red:after,
185  .layout-content.status-full-history .month .incident-container .impact-critical,
186  .layout-content.status-incident .incident-name.impact-critical,
187  .layout-content.status.status-index .incidents-list .incident-title.impact-critical a,
188  .status-red .icon-indicator,
189  .incident-history .impact-critical,
190  .components-container .component-inner-container.status-red .component-status,
191  .components-container .component-inner-container.status-red .icon-indicator {
192    color:#e74c3c;
193  }
194
195  .layout-content.status.status-index .unresolved-incident.impact-critical .updates {
196    border-color:#e74c3c;
197  }
198
199
200
201
202  /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */
203  .layout-content.status.status-index .status-day .update-title.impact-major a,
204  .layout-content.status.status-index .status-day .update-title.impact-major a:hover,
205  .layout-content.status.status-index .page-status.status-major,
206  .layout-content.status.status-index .unresolved-incident.impact-major .incident-title {
207    background-color:#e67e22;
208  }
209
210  .layout-content.status-index .components-statuses .component-container.status-orange:after,
211  .layout-content.status-full-history .month .incident-container .impact-major,
212  .layout-content.status-incident .incident-name.impact-major,
213  .layout-content.status.status-index .incidents-list .incident-title.impact-major a,
214  .status-orange .icon-indicator,
215  .incident-history .impact-major,
216  .components-container .component-inner-container.status-orange .component-status,
217  .components-container .component-inner-container.status-orange .icon-indicator {
218    color:#e67e22;
219  }
220
221  .layout-content.status.status-index .unresolved-incident.impact-major .updates {
222    border-color:#e67e22;
223  }
224
225
226
227
228  /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */
229  .layout-content.status.status-index .status-day .update-title.impact-minor a,
230  .layout-content.status.status-index .status-day .update-title.impact-minor a:hover,
231  .layout-content.status.status-index .page-status.status-minor,
232  .layout-content.status.status-index .unresolved-incident.impact-minor .incident-title,
233  .layout-content.status.status-index .scheduled-incidents-container .tab {
234    background-color:#f1c40f;
235  }
236
237  .layout-content.status-index .components-statuses .component-container.status-yellow:after,
238  .layout-content.status-full-history .month .incident-container .impact-minor,
239  .layout-content.status-incident .incident-name.impact-minor,
240  .layout-content.status.status-index .incidents-list .incident-title.impact-minor a,
241  .status-yellow .icon-indicator,
242  .incident-history .impact-minor,
243  .components-container .component-inner-container.status-yellow .component-status,
244  .components-container .component-inner-container.status-yellow .icon-indicator,
245  .layout-content.status.manage-subscriptions .confirmation-infobox .fa {
246    color:#f1c40f;
247  }
248
249  .layout-content.status.status-index .unresolved-incident.impact-minor .updates,
250  .layout-content.status.status-index .scheduled-incidents-container {
251    border-color:#f1c40f;
252  }
253
254
255
256
257  /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */
258  .layout-content.status.status-index .status-day .update-title.impact-maintenance a,
259  .layout-content.status.status-index .status-day .update-title.impact-maintenance a:hover,
260  .layout-content.status.status-index .page-status.status-maintenance,
261  .layout-content.status.status-index .unresolved-incident.impact-maintenance .incident-title,
262  .layout-content.status.status-index .scheduled-incidents-container .tab {
263    background-color:#3498DB;
264  }
265
266  .layout-content.status-index .components-statuses .component-container.status-blue:after,
267  .layout-content.status-full-history .month .incident-container .impact-maintenance,
268  .layout-content.status-incident .incident-name.impact-maintenance,
269  .layout-content.status.status-index .incidents-list .incident-title.impact-maintenance a,
270  .status-blue .icon-indicator,
271  .incident-history .impact-maintenance,
272  .components-container .component-inner-container.status-blue .component-status,
273  .components-container .component-inner-container.status-blue .icon-indicator {
274    color:#3498DB;
275  }
276
277  .layout-content.status.status-index .unresolved-incident.impact-maintenance .updates,
278  .layout-content.status.status-index .scheduled-incidents-container {
279    border-color:#3498DB;
280  }
281
282
283
284
285  /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */
286  .layout-content.status.status-index .page-status.status-none {
287    background-color:#2fcc66;
288  }
289  .layout-content.status-index .components-statuses .component-container.status-green:after,
290  .status-green .icon-indicator,
291  .components-container .component-inner-container.status-green .component-status,
292  .components-container .component-inner-container.status-green .icon-indicator {
293    color:#2fcc66;
294  }
295
296
297
298
299  /* CSS LINK COLOR */  /* CSS LINK COLOR */  /* CSS LINK COLOR */  /* CSS LINK COLOR */  /* CSS LINK COLOR */  /* CSS LINK COLOR */
300  a,
301  a:hover,
302  .layout-content.status-index .page-footer span a:hover,
303  .layout-content.status-index .timeframes-container .timeframe:not(.active):hover,
304  .layout-content.status-incident .subheader a:hover {
305    color:#3498db;
306  }
307
308  .flat-button,
309  .masthead .updates-dropdown-container .show-updates-dropdown,
310  .layout-content.status-full-history .show-filter.open  {
311    background-color:#3498db;
312  }
313
314
315
316
317  /* CUSTOM COLOR OVERRIDES FOR UPTIME SHOWCASE */
318  .components-section .components-uptime-link {
319    color: #aaaaaa;
320  }
321
322  .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item {
323    color: #aaaaaa;
324    opacity: 1;
325  }
326  .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item.light {
327    color: #aaaaaa;
328    opacity: 1;
329  }
330  .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .spacer {
331    background: #aaaaaa;
332    opacity: 1;
333  }
334</style>
335
336
337    <!-- custom css -->
338        <link rel="stylesheet" type="text/css" href="//dka575ofm4ao0.cloudfront.net/page_display_customizations-custom_css_externals/15953/external20151019-19655-1pkdy7p.css">
339
340      <!-- polyfills -->
341        
341<script crossorigin="anonymous" src="https://cdnjs.cloudflare.com/polyfill/v3/polyfill.js"></script>
341
342
343    <!-- Le HTML5 shim -->
344    <!--[if lt IE 9]>
345      
345<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
345
346    <![endif]-->
347
348    <!-- injection for static -->
349
350
351    
352  </head>
353
354
355  <body class="status uptime status-none sp-a11y-status-focus-visibility a11y-focus-indicators">
356
357    
358<div class="layout-content status status-full-history premium">
359
360    <div class="masthead-container premium">
361    <div class="masthead">
362      <div class="images-container" id="cover-image-container" data-js-hook="images-container"></div>
363      <style>
364          #cover-image-container {
365            background-image:url("//dka575ofm4ao0.cloudfront.net/pages-hero_covers/normal/16003/G2c4voyqSRa37wPXSOry");
366          }
367
368          @media only screen and (-webkit-min-device-pixel-ratio: 2),
369                 only screen and (min-resolution: 192dpi) {
370            #cover-image-container {
371              background-image:url("//dka575ofm4ao0.cloudfront.net/pages-hero_covers/retina/16003/G2c4voyqSRa37wPXSOry") !important;
372            }
373          }
374      </style>
375
376      <div class="text-container">
377        <span class="page-name font-largest">
378            <a href="http://www.voipfone.co.uk">Voipfone</a>
379        </span>
380          
381  <div class="updates-dropdown-container" data-js-hook="updates-dropdown-container">
382    <a href="#" data-js-hook="show-updates-dropdown" id="show-updates-dropdown" class="show-updates-dropdown" aria-label="Subscribe to updates" aria-expanded="false" aria-haspopup="dialog" role="button">
383      <span class="subscribe-text-full">Subscribe to Updates</span><span class="subscribe-text-short">Subscribe</span>
384    </a>
385
386<!--    Accessibility guidelines for tabs: https://www.w3.org/TR/wai-aria-practices-1.1/examples/tabs/tabs-1/tabs.html -->
387    <div class="updates-dropdown" data-js-hook="updates-dropdown" id="updates-dropdown" style="display:none" role="dialog" aria-modal="false" aria-label="Subscribe to updates">
388      <div class="updates-dropdown-nav nav-items-5" role="tablist" aria-label="Subscribe to updates">
389          <a href="#updates-dropdown-email" aria-controls="updates-dropdown-email" aria-label="Subscribe via email" role="tab" aria-selected="true" id="updates-dropdown-email-btn">
390            <span class="icon-container email">
391          </a>
392          <a href="#updates-dropdown-sms" aria-controls="updates-dropdown-sms" aria-label="Subscribe via SMS" role="tab" id="updates-dropdown-sms-btn">
393            <span class="icon-container sms">
394          </a>
395          <a href="#updates-dropdown-twitter" aria-controls="updates-dropdown-twitter" aria-label="Subscribe via twitter" role="tab" id="updates-dropdown-twitter-btn">
396            <span class="icon-container twitter">
397          </a>
398          <a href="#updates-dropdown-atom" aria-controls="updates-dropdown-atom" aria-label="Subscribe via RSS" role="tab" id="updates-dropdown-atom-btn">
399            <span class="icon-container rss">
400          </a>
401        <button data-js-hook="updates-dropdown-close" aria-label="Close subscribe form" id="updates-dropdown-close-btn">
402          x
403        </button>
404      </div>
405      <div class="updates-dropdown-sections-container">
406          <div class="updates-dropdown-section email" id="updates-dropdown-email" style="display:none" role="tabpanel" aria-labelledby="updates-dropdown-email-btn">
407            <div class="directions">
408              Get email notifications whenever Voipfone <strong>creates</strong>,  <strong>updates</strong> or <strong>resolves</strong> an incident.
409            </div>
410            <form id="subscribe-form-email" action="/subscriptions/new-email" accept-charset="UTF-8" data-remote="true" method="post"><input type="hidden" name="authenticity_token" value="ij6YtG-cAemgIGit1rheoncmS1PXOvKrnJSJ3Ewfz7zcAOKxBJNBR3Eb4De9e66PnmAg768hYqVFiHrfGpayrQ" autocomplete="off" />
411              <input type="hidden" name="email_otp_verify_flow" id="email_otp_verify_flow" value="false" autocomplete="off" />
412                <!-- make sure not to put cookie values in here since this gets cached -->
413                <label for="email">Email address:</label>
414                <input name="email" id="email" type="text" class="full-width" data-js-hook="email-notification-field" autocomplete="email">
415                <input name="email_otp_auth_token" type='hidden' id="email-
415otp-token-field">
416                <div class="opt-container-section" id="email-otp-container", style="display:none" >
417                  <label for="email-otp">Enter OTP:</label>
418                  <input name="otp" id="email-otp" type="text" value="" class="prepend full-width">
419                  <p id="email-otp-timer">Resend OTP in: <span id="email-otp-countdown"></span> seconds </p>
420                  <p id="resend-email-otp">
421                    Didn't receive the OTP?
422                    <a href="#" id="resend-email-otp-btn" >Resend OTP </a>
423                  </p>
424                </div>
425                  <input type="hidden" name="captcha_error" id="captcha_error" value="false" autocomplete="off" />
426                  <input type="submit" value="Subscribe via Email" class="flat-button full-width g-recaptcha" id="subscribe-btn-email" data-disabled-text="Subscribing..." data-sitekey=6LdTS8AUAAAAAOIbCKoCAP4LQku1olYGrywPTaZz data-callback="submitNewEmailSubscriber" data-error-callback="emailSubscriberCaptchaError" >
427                  <div class="terms_and_privacy_information bottom small"> This site is protected by reCAPTCHA and the Google <a target="_blank" rel="noopener" class="accessible-link" href="https://policies.google.com/privacy">Privacy Policy</a> and <a target="_blank" rel="noopener" class="accessible-link" data-js-hook="captcha-terms-of-service-link" href="https://policies.google.com/terms">Terms of Service</a> apply.</div>
428</form>          </div>
429
430          <div class="updates-dropdown-section phone" id="updates-dropdown-sms" style="display:none" role="tabpanel" aria-labelledby="updates-dropdown-sms-btn">
431            <div class="directions">
432                Get text message notifications whenever Voipfone <strong>creates</strong> or <strong>resolves</strong> an incident.
433            </div>
434            <form id="subscribe-form-sms" action="/subscriptions/new-sms" accept-charset="UTF-8" data-remote="true" method="post"><input type="hidden" name="authenticity_token" value="G6_LTPOhIApD71MKCekUoAmiMVQgPEFfst_hsmg_Hf1NkbFJmK5gpJLU25BiKuSN4ORa6Fgn0VFrwxKxPrZg7A" autocomplete="off" />
435              <input type="hidden" name="otp_verify_flow" id="otp_verify_flow" value="false" autocomplete="off" />
436              <input type="hidden" name="subscriber_code" id="subscriber_code" value="" autocomplete="off" />
437              <div class="control-group">
438                <div class="controls externalities-sms-container">
439                  <!-- make sure not to put cookie values in here since this gets cached -->
440                  <label for="phone-country">Country code:</label>
441                  <div id="phone-number-country-code" class="phone-country-wrapper"
442                      data-otp-enabled="false">
443                      <select name="phone_country" id="phone-country" data-js-hook="phone-country" class="phone-country"><option value="af" data-otp-enabled="false" >Afghanistan (+93)</option>
444<option value="al" data-otp-enabled="false" >Albania (+355)</option>
445<option value="dz" data-otp-enabled="false" >Algeria (+213)</option>
446<option value="as" data-otp-enabled="false" >American Samoa (+1)</option>
447<option value="ad" data-otp-enabled="false" >Andorra (+376)</option>
448<option value="ao" data-otp-enabled="false" >Angola (+244)</option>
449<option value="ai" data-otp-enabled="false" >Anguilla (+1)</option>
450<option value="ag" data-otp-enabled="false" >Antigua and Barbuda (+1)</option>
451<option value="ar" data-otp-enabled="false" >Argentina (+54)</option>
452<option value="am" data-otp-enabled="false" >Armenia (+374)</option>
453<option value="aw" data-otp-enabled="false" >Aruba (+297)</option>
454<option value="au" data-otp-enabled="false" >Australia/Cocos/Christmas Island (+61)</option>
455<option value="at" data-otp-enabled="false" >Austria (+43)</option>
456<option value="az" data-otp-enabled="false" >Azerbaijan (+994)</option>
457<option value="bs" data-otp-enabled="false" >Bahamas (+1)</option>
458<option value="bh" data-otp-enabled="false" >Bahrain (+973)</option>
459<option value="bd" data-otp-enabled="false" >Bangladesh (+880)</option>
460<option value="bb" data-otp-enabled="false" >Barbados (+1)</option>
461<option value="by" data-otp-enabled="false" >Belarus (+375)</option>
462<option value="be" data-otp-enabled="false" >Belgium (+32)</option>
463<option value="bz" data-otp-enabled="false" >Belize (+501)</option>
464<option value="bj" data-otp-enabled="false" >Benin (+229)</option>
465<option value="bm" data-otp-enabled="false" >Bermuda (+1)</option>
466<option value="bo" data-otp-enabled="false" >Bolivia (+591)</option>
467<option value="ba" data-otp-enabled="false" >Bosnia and Herzegovina (+387)</option>
468<option value="bw" data-otp-enabled="false" >Botswana (+267)</option>
469<option value="br" data-otp-enabled="false" >Brazil (+55)</option>
470<option value="bn" data-otp-enabled="false" >Brunei (+673)</option>
471<option value="bg" data-otp-enabled="false" >Bulgaria (+359)</option>
472<option value="bf" data-otp-enabled="false" >Burkina Faso (+226)</option>
473<option value="bi" data-otp-enabled="false" >Burundi (+257)</option>
474<option value="kh" data-otp-enabled="false" >Cambodia (+855)</option>
475<option value="cm" data-otp-enabled="false" >Cameroon (+237)</option>
476<option value="ca" data-otp-enabled="false" >Canada (+1)</option>
477<option value="cv" data-otp-enabled="false" >Cape Verde (+238)</option>
478<option value="ky" data-otp-enabled="false" >Cayman Islands (+1)</option>
479<option value="cf" data-otp-enabled="false" >Central Africa (+236)</option>
480<option value="td" data-otp-enabled="false" >Chad (+235)</option>
481<option value="cl" data-otp-enabled="false" >Chile (+56)</option>
482<option value="cn" data-otp-enabled="false" >China (+86)</option>
483<option value="co" data-otp-enabled="false" >Colombia (+57)</option>
484<option value="km" data-otp-enabled="false" >Comoros (+269)</option>
485<option value="cg" data-otp-enabled="false" >Congo (+242)</option>
486<option value="cd" data-otp-enabled="false" >Congo, Dem Rep (+243)</option>
487<option value="cr" data-otp-enabled="false" >Costa Rica (+506)</option>
488<option value="hr" data-otp-enabled="false" >Croatia (+385)</option>
489<option value="cy" data-otp-enabled="false" >Cyprus (+357)</option>
490<option value="cz" data-otp-enabled="false" >Czech Republic (+420)</option>
491<option value="dk" data-otp-enabled="false" >Denmark (+45)</option>
492<option value="dj" data-otp-enabled="false" >Djibouti (+253)</option>
493<option value="dm" data-otp-enabled="false" >Dominica (+1)</option>
494<option value="do" data-otp-enabled="false" >Dominican Republic (+1)</option>
495<option value="eg" data-otp-enabled="false" >Egypt (+20)</option>
496<option value="sv" data-otp-enabled="false" >El Salvador (+503)</option>
497<option value="gq" data-otp-enabled="false" >Equatorial Guinea (+240)</option>
498<option value="ee" data-otp-enabled="false" >Estonia (+372)</option>
499<option value="et" data-otp-enabled="false" >Ethiopia (+251)</option>
500<option value="fo" data-otp-enabled="false" >Faroe Islands (+298)</option>
501<option value="fj" data-otp-enabled="false" >Fiji (+679)</option>
502<option value="fi" data-otp-enabled="false" >Finland/Aland Islands (+358)</option>
503<option value="fr" data-otp-enabled="false" >France (+33)</option>
504<option value="gf" data-otp-enabled="false" >French Guiana (+594)</option>
505<option value="pf" data-otp-enabled="false" >French Polynesia (+689)</option>
506<option value="ga" data-otp-enabled="false" >Gabon (+241)</option>
507<option value="gm" data-otp-enabled="false" >Gambia (+220)</option>
508<option value="ge" data-otp-enabled="false" >Georgia (+995)</option>
509<option value="de" data-otp-enabled="false" >Germany (+49)</option>
510<option value="gh" data-otp-enabled="false" >Ghana (+233)</option>
511<option value="gi" data-otp-enabled="false" >Gibraltar (+350)</option>
512<option value="gr" data-otp-enabled="false" >Greece (+30)</option>
513<option value="gl" data-otp-enabled="false" >Greenland (+299)</option>
514<option value="gd" data-otp-enabled="false" >Grenada (+1)</option>
515<option value="gp" data-otp-enabled="false" >Guadeloupe (+590)</option>
516<option value="gu" data-otp-enabled="false" >
516Guam (+1)</option>
517<option value="gt" data-otp-enabled="false" >Guatemala (+502)</option>
518<option value="gn" data-otp-enabled="false" >Guinea (+224)</option>
519<option value="gy" data-otp-enabled="false" >Guyana (+592)</option>
520<option value="ht" data-otp-enabled="false" >Haiti (+509)</option>
521<option value="hn" data-otp-enabled="false" >Honduras (+504)</option>
522<option value="hk" data-otp-enabled="false" >Hong Kong (+852)</option>
523<option value="hu" data-otp-enabled="false" >Hungary (+36)</option>
524<option value="is" data-otp-enabled="false" >Iceland (+354)</option>
525<option value="in" data-otp-enabled="false" >India (+91)</option>
526<option value="id" data-otp-enabled="false" >Indonesia (+62)</option>
527<option value="iq" data-otp-enabled="false" >Iraq (+964)</option>
528<option value="ie" data-otp-enabled="false" >Ireland (+353)</option>
529<option value="il" data-otp-enabled="false" >Israel (+972)</option>
530<option value="it" data-otp-enabled="false" >Italy (+39)</option>
531<option value="jm" data-otp-enabled="false" >Jamaica (+1)</option>
532<option value="jp" data-otp-enabled="false" >Japan (+81)</option>
533<option value="jo" data-otp-enabled="false" >Jordan (+962)</option>
534<option value="ke" data-otp-enabled="false" >Kenya (+254)</option>
535<option value="kr" data-otp-enabled="false" >Korea, Republic of (+82)</option>
536<option value="xk" data-otp-enabled="false" >Kosovo (+383)</option>
537<option value="kw" data-otp-enabled="false" >Kuwait (+965)</option>
538<option value="kg" data-otp-enabled="false" >Kyrgyzstan (+996)</option>
539<option value="la" data-otp-enabled="false" >Laos (+856)</option>
540<option value="lv" data-otp-enabled="false" >Latvia (+371)</option>
541<option value="lb" data-otp-enabled="false" >Lebanon (+961)</option>
542<option value="ls" data-otp-enabled="false" >Lesotho (+266)</option>
543<option value="lr" data-otp-enabled="false" >Liberia (+231)</option>
544<option value="ly" data-otp-enabled="false" >Libya (+218)</option>
545<option value="li" data-otp-enabled="false" >Liechtenstein (+423)</option>
546<option value="lt" data-otp-enabled="false" >Lithuania (+370)</option>
547<option value="lu" data-otp-enabled="false" >Luxembourg (+352)</option>
548<option value="mo" data-otp-enabled="false" >Macao (+853)</option>
549<option value="mk" data-otp-enabled="false" >Macedonia (+389)</option>
550<option value="mg" data-otp-enabled="false" >Madagascar (+261)</option>
551<option value="mw" data-otp-enabled="false" >Malawi (+265)</option>
552<option value="my" data-otp-enabled="false" >Malaysia (+60)</option>
553<option value="mv" data-otp-enabled="false" >Maldives (+960)</option>
554<option value="ml" data-otp-enabled="false" >Mali (+223)</option>
555<option value="mt" data-otp-enabled="false" >Malta (+356)</option>
556<option value="mq" data-otp-enabled="false" >Martinique (+596)</option>
557<option value="mr" data-otp-enabled="false" >Mauritania (+222)</option>
558<option value="mu" data-otp-enabled="false" >Mauritius (+230)</option>
559<option value="mx" data-otp-enabled="false" >Mexico (+52)</option>
560<option value="mc" data-otp-enabled="false" >Monaco (+377)</option>
561<option value="mn" data-otp-enabled="false" >Mongolia (+976)</option>
562<option value="me" data-otp-enabled="false" >Montenegro (+382)</option>
563<option value="ms" data-otp-enabled="false" >Montserrat (+1)</option>
564<option value="ma" data-otp-enabled="false" >Morocco/Western Sahara (+212)</option>
565<option value="mz" data-otp-enabled="false" >Mozambique (+258)</option>
566<option value="na" data-otp-enabled="false" >Namibia (+264)</option>
567<option value="np" data-otp-enabled="false" >Nepal (+977)</option>
568<option value="nl" data-otp-enabled="false" >Netherlands (+31)</option>
569<option value="nz" data-otp-enabled="false" >New Zealand (+64)</option>
570<option value="ni" data-otp-enabled="false" >Nicaragua (+505)</option>
571<option value="ne" data-otp-enabled="false" >Niger (+227)</option>
572<option value="ng" data-otp-enabled="false" >Nigeria (+234)</option>
573<option value="no" data-otp-enabled="false" >Norway (+47)</option>
574<option value="om" data-otp-enabled="false" >Oman (+968)</option>
575<option value="pk" data-otp-enabled="false" >Pakistan (+92)</option>
576<option value="ps" data-otp-enabled="false" >Palestinian Territory (+970)</option>
577<option value="pa" data-otp-enabled="false" >Panama (+507)</option>
578<option value="py" data-otp-enabled="false" >Paraguay (+595)</option>
579<option value="pe" data-otp-enabled="false" >Peru (+51)</option>
580<option value="ph" data-otp-enabled="false" >Philippines (+63)</option>
581<option value="pl" data-otp-enabled="false" >Poland (+48)</option>
582<option value="pt" data-otp-enabled="false" >Portugal (+351)</option>
583<option value="pr" data-otp-enabled="false" >Puerto Rico (+1)</option>
584<option value="qa" data-otp-enabled="false" >Qatar (+974)</option>
585<option value="re" data-otp-enabled="false" >Reunion/Mayotte (+262)</option>
586<option value="ro" data-otp-enabled="false" >Romania (+40)</option>
587<option value="ru" data-otp-enabled="false" >Russia/Kazakhstan (+7)</option>
588<option value="rw" data-otp-enabled="false" >Rwanda (+250)</option>
589<option value="ws" data-otp-enabled="false" >Samoa (+685)</option>
590<option value="sm" data-otp-enabled="false" >San Marino (+378)</option>
591<option value="sa" data-otp-enabled="false" >Saudi Arabia (+966)</option>
592<option value="sn" data-otp-enabled="false" >Senegal (+221)</option>
593<option value="rs" data-otp-enabled="false" >Serbia (+381)</option>
594<option value="sc" data-otp-enabled="false" >Seychelles (+248)</option>
595<option value="sl" data-otp-enabled="false" >Sierra Leone (+232)</option>
596<option value="sg" data-otp-enabled="false" >Singapore (+65)</option>
597<option value="sk" data-otp-enabled="false" >Slovakia (+421)</option>
598<option value="si" data-otp-enabled="false" >Slovenia (+386)</option>
599<option value="za" data-otp-enabled="false" >South Africa (+27)</option>
600<option value="es" data-otp-enabled="false" >Spain (+34)</option>
601<option value="lk" data-otp-enabled="false" >Sri Lanka (+94)</option>
602<option value="kn" data-otp-enabled="false" >St Kitts and Nevis (+1)</option>
603<option value="lc" data-otp-enabled="false" >St Lucia (+1)</option>
604<option value="vc" data-otp-enabled="false" >St Vincent Grenadines (+1)</option>
605<option value="sd" data-otp-enabled="false" >Sudan (+249)</option>
606<option value="sr" data-otp-enabled="false" >Suriname (+597)</option>
607<option value="sz" data-otp-enabled="false" >Swaziland (+268)</option>
608<option value="se" data-otp-enabled="false" >Sweden (+46)</option>
609<option value="ch" data-otp-enabled="false" >Switzerland (+41)</option>
610<option value="tw" data-otp-enabled="false" >Taiwan (+886)</option>
611<option value="tj" data-otp-enabled="false" >Tajikistan (+992)</option>
612<option value="tz" data-otp-enabled="false" >Tanzania (+255)</option>
613<option value="th" data-otp-enabled="false" >Thailand (+66)</option>
614<option value="tg" data-otp-enabled="false" >Togo (+228)</option>
615<option value="to" data-otp-enabled="false" >Tonga (+676)</option>
616<option value="tt" data-otp-enabled="false" >Trinidad and Tobago (+1)</option>
617<option value="tn" data-otp-enabled="false" >Tunisia (+216)</option>
618<option value="tr" data-otp-enabled="false" >Turkey (+90)</option>
619<option value="tc" data-otp-enabled="false" >Turks and Caicos Islands (+1)</option>
620<option value="ug" data-otp-enabled="false" >Uganda (+256)</option>
621<option value="ua" data-otp-enabled="false" >Ukraine (+380)</option>
622<option value="ae" data-otp-enabled="false" >United Arab Emirates (+971)</option>
623<option value="gb" data-otp-enabled="false" selected>United Kingdom (+44)</option>
624<option value="us" data-otp-enabled="false" >United States (+1)</option>
625<option value="uy" data-otp-enabled="false" >Uruguay (+598)</option>
626<option value="uz" data-otp-enabled="false" >Uzbekistan (+998)</option>
627<option value="ve" data-otp-enabled="false" >Venezuela (+58)</option>
628<option value="vn" data-otp-enabled="false" >Vietnam (+84)</option>
629<option value="vg" data-otp-enabled="false" >Virgin Islands, British (+1)</option>
630<option value="vi" data-otp-enabled="false" >Virgin Islands, U.S. (+1)</option>
631<option value="ye" data-otp-enabled="false" >Yemen (+967)</option>
632<option value="zm" data-otp-enabled="false" >Zambia (+260)</option>
633<option value="zw" data-otp-enabled="false" >Zimbabwe (+263)</option></select>
634                  </div>
635                  <label for="phone-number">Phone number:</label>
636                  <input name="phone_number" id="phone-number" type="text" class="prepend full-width" data-js-hook="sms-notification-field">
637                  <div class="sms-atl-error" id="sms-atl-error"></div>
638                  <div class="clearfix"></div>
639                  <div class="opt-container-section" id="otp-container" style="display:none">
640                    <a href="#" id="btn-subcriber-change-number">Change number</a>
641                    <label for="otp">Enter OTP:</label>
642                    <input name="otp" id="otp" type="text" class="prepend full-width">
643                    <p id="timer">Resend OTP in: <span id="countdown">30</span> seconds </p>
644                    <p id="resend">
645                      Didn't receive the OTP?
646                      <a href="#" id="resend-otp-btn" >Resend OTP </a>
647                    </p>
648                    </div>
649                </div>
650              </div>
651
652                <input type="hidden" name="captcha_error" id="captcha_error" value="false" autocomplete="off" />
653                <input type="submit" value="Subscribe via Text Message" class="flat-button full-width g-recaptcha" id="subscribe-btn-sms" data-disabled-text="Subscribing..." data-sitekey=6LcH-b0UAAAAACVQtMb14LBhflMA9y0Nmu7l_W6d data-callback="submitNewSmsSubscriber" data-error-callback="smsSubscriberCaptchaError">
654              <div class="terms_and_privacy_information bottom small">Message and data rates may apply. By subscribing you agree to the Atlassian <a target="_blank" rel="noopener" class="accessible-link" href="https://www.atlassian.com/legal/product-specific-terms#statuspage-specific-terms">Terms of Service</a>, and the Atlassian <a target="_blank" rel="noopener" class="accessible-link" href="https://www.atlassian.com/legal/privacy-policy">Privacy Policy</a>. This site is protected by reCAPTCHA and the Google <a target="_blank" rel="noopener" class="accessible-link" href="https://policies.google.com/privacy">Privacy Policy</a> and <a target="_blank" rel="noopener" class="accessible-link" data-js-hook="captcha-terms-of-service-link" href="https://policies.google.com/terms">Terms of Service</a> apply.</div>
655</form>          </div>
656
657
658
659
660          <div class="updates-dropdown-section twitter" id="updates-dropdown-twitter" style="display:none" role="tabpanel" aria-labelledby="updates-dropdown-twitter-btn">
661            <a href="https://twitter.com/Voipfonestatus" class="twitter-follow-button" data-show-count="false" data-show-screen-name="true" data-width="59px">Follow @Voipfonestatus</a>
662            or&nbsp;
663            <a href="https://twitter.com/Voipfonestatus" target="_blank">view our profile</a>.
664            <style>
665              .twitter-follow-button {
666                margin-bottom: -6px;
667              }
668            </style>
669
670              
670<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
670
671          </div>
672
673
674          <div class="updates-dropdown-section atom" id="updates-dropdown-atom" role="tabpanel" aria-labelledby="updates-dropdown-atom-btn">
675            Get the <a href="https://www.voipfonestatus.co.uk/history.atom" target="_blank">Atom Feed</a> or <a href="https://www.voipfonestatus.co.uk/history.rss" target="_blank">RSS Feed</a>.
676          </div>
677      </div>
678    </div>
679  </div>
680
681<script>
682  $(function () {
683    const phoneNumberInput = $('#phone-number');
684    const errorDiv = $('#sms-atl-error')
685    if(errorDiv.length){
686      function checkSelectedCountry() {
687        const selectedCountry = $('#phone-country').val();
688        const isOtpEnabled = $('#phone-number-country-code').attr('data-otp-enabled') === 'true';
689        const form = document.getElementById('subscribe-form-sms');
690        form.action = '/subscriptions/new-sms';
691        const isOtpFlow = document.getElementById('otp_verify_flow');
692        document.getElementById('otp-container').style.display = "none";
693        if(false && selectedCountry === 'sg') { // Replace 'SG' with the actual value representing Singapore in your select tag
694          phoneNumberInput.prop('disabled', true);
695          errorDiv.html(`Due to new Singapore government regulations, we're currently not supporting text subscriptions in Singapore.<a href="https://community.atlassian.com/t5/Statuspage-articles/Attention-SMS-notifications-will-be-disabled-on-August-1st-2023/ba-p/2424398" target="_blank"> Learn more.</a> <br> Select another method to subscribe.`);
696        } else {
697          phoneNumberInput.prop('readonly', false);
698          errorDiv.html('');
699          if(false){
700            if(isOtpEnabled){
701              document.getElementById('subscribe-btn-sms').value = "Send OTP";
702            }
703            else {
704              isOtpFlow.value = false;
705              document.getElementById('subscribe-btn-sms').value = "Subscribe via Text Message";
706            }
707          }
708        }
709      }
710
711      $('#phone-country').on('change', checkSelectedCountry);
712      checkSelectedCountry();
713    }
714  });
715
716  document.addEventListener('DOMContentLoaded', function() {
717    const dropdown = document.querySelector('#phone-number-country-code .phone-country');
718    if (dropdown){
719      const wrapperDiv = document.getElementById('phone-number-country-code');
720      const selectedOption = dropdown.options[dropdown.selectedIndex];
721      const otpEnabled = selectedOption.getAttribute('data-otp-enabled');
722
723      wrapperDiv.setAttribute('data-otp-enabled', otpEnabled);
724
725      dropdown.addEventListener('change', function() {
726        const selectedOption = dropdown.options[dropdown.selectedIndex];
727        const otpEnabled = selectedOption.getAttribute('data-otp-enabled');
728
729        wrapperDiv.setAttribute('data-otp-enabled', otpEnabled);
730      });
731    }
732  });
733
734  var countdownTimer;
735  var resendBtn = document.getElementById('resend');
736  var timer = document.getElementById('timer');
737  var form = document.getElementById('subscribe-form-sms');
738  var RESEND_TIMER = 30;
739  $(function() {
740    $('#subscribe-form-sms').on('ajax:success', function(e, data, status, xhr){
741      const form = this;
742      const action = form.getAttribute('action');
743      if (data.type === 'success' && data.otp_flow === true) {
744        document.getElementById('subscriber_code').value = data.subscriber_code
745        document.getElementById('otp-container').style.display = "block";
746        $('#phone-number').prop('readonly', true);
747        var display = document.getElementById('countdown');
748        disableResend();
749        startTimer(RESEND_TIMER, display)
750        document.getElementById('subscribe-btn-sms').value = "Verify OTP and Subscribe";
751        document.getElementById('otp_verify_flow').value = true;
752        form.action = '/subscriptions/verify-otp';
753      } else if (data.type === 'success' && action.includes('verify')){
754        document.getElementById('otp-container').style.display = "none";
755        $('#phone-number').val('').prop('readonly', false);
756        $('#otp').val('');
757        document.getElementById('subscribe-btn-sms').value = "Send OTP";
758        document.getElementById('otp_verify_flow').value = false;
759        form.action = '/subscriptions/new-sms';
760        SP.currentPage.updatesDropdown.hide();
761      }
762    });
763    $("#btn-subcriber-change-number").on('click', () => {
764      document.getElementById('otp-container').style.display = "none";
765      $('#phone-number').prop('readonly', false);
766      document.getElementById('subscribe-btn-sms').value = "Send OTP";
767      form.action = '/subscriptions/new-sms';
768      return false
769    })
770    $('#resend-otp-btn').on('click', function(e) {
771      e.preventDefault();
772      let phoneNumber = $('#phone-number').val();
773      let countryCode = $('.phone-country').val();
774      $.ajax({
775        type: 'POST',
776        url: "/subscriptions/new-sms",
777        data: {
778          phone_number: phoneNumber,
779          phone_country: countryCode,
780          type: 'resend'
781        },
782      }).done(function(data) {
783        var messageOptions = (data.type !== undefined && data.type !== null) ? { cssClass: data.type } : {};
784        HRB.utils.notify(data.text, messageOptions);
785        var display = document.getElementById('countdown');
786        disableResend();
787        timer.style.display = "none"
788        if (data.type === 'success') {
789          startTimer(RESEND_TIMER, display);
790        }
791      })
792    });
793  })
794
795  function startTimer(duration, display){
796    var timer = duration, seconds;
797    clearInterval(countdownTimer);
798    countdownTimer = setInterval(function () {
799      seconds = parseInt(timer % 60, 10);
800      display.textContent = seconds;
801      if(--timer < 0){
802        enableResend();
803        clearInterval(countdownTimer);
804      }
805    }, 1000);
806    disableResend();
807  }
808  function enableResend(){
809    resendBtn.style.display = "block";
810    timer.style.display = "none"
811  }
812  function disableResend(){
813    resendBtn.style.display = "none";
814    timer.style.display = "block"
815  }
816
817  $(function() {
818    $('#subscribe-form-email').on('submit', function() {
819      var tokenField = document.getElementById('email-otp-token-field');
820      if (!tokenField) {
821        return;
822      }
823      let page_code = "g1j7mrrz279t"
824      let key = keyForEmailOtpToken($('#email').val(), page_code);
825      tokenField.value = localStorage.getItem(key);
826    });
827  });
828
829  var emailOtpCountdownTimer;
830  var emailOtpResendBtn = document.getElementById('resend-email-otp');
831  var emailOtpTimer = document.getElementById('email-otp-timer');
832  var emailOtpForm = document.getElementById('subscribe-form-email');
833  var EMAIL_OTP_RESEND_TIMER = 600;
834  $(function() {
835    $('#subscribe-form-email').on('ajax:success', function(e, data, status, xhr){
836      const form = this;
837      const action = form.getAttribute('action');
838      if (data.type === 'success' && data.email_otp_verify_flow === true) {
839        document.getElementById('email-otp-container').style.display = "block";
840        var display = document.getElementById('email-otp-countdown');
841        display.textContent = EMAIL_OTP_RESEND_TIMER;
842        disableEmailOtpResend();
843        startEmailOtpTimer(EMAIL_OTP_RESEND_TIMER, display)
844        document.getElementById('subscribe-btn-email').value = "Verify OTP and Subscribe";
845        document.getElementById('email_otp_verify_flow').value = true;
846        form.action = '/subscriptions/verify-email-otp';
847      } else if (data.type === 'success' && action.includes('verify')){
848        let email =  $('#email')
849        let page_code = "g1j7mrrz279t"
850        let key = keyForEmailOtpToken(email.val(), page_code);
851        localStorage.setItem(key, data.email_otp_auth_token);
852
853        document.getElementById('email-otp-container').style.display = "none";
854        email.val('').prop('readonly', false);
855        $('#email-otp').val('');
856        document.getElementById('subscribe-btn-email').value = "Send OTP";
857        document.getElementById('email_otp_verify_flow').value = false;
858        form.action = '/subscriptions/new-email';
859        SP.currentPage.updatesDropdown.hide();
860      }
861    });
862    $('#resend-email-otp-btn').on('click', function(e) {
863      e.preventDefault();
864      let email = $('#email').val();
865      $.ajax({
866        type: 'POST',
867        url: "/subscriptions/new-email",
868        data: {
869          email: email
870        },
871      }).done(function(data) {
872        var messageOptions = (data.type !== undefined && data.type !== null) ? { cssClass: data.type } : {};
873        HRB.utils.notify(data.text, messageOptions);
874        if (data.type === 'success') {
875          var display = document.getElementById('email-otp-countdown');
876          display.textContent = EMAIL_OTP_RESEND_TIMER;
877          disableEmailOtpResend();
878          emailOtpTimer.style.display = "none"
879          startEmailOtpTimer(EMAIL_OTP_RESEND_TIMER, display);
880        }
881      })
882    });
883  })
884
885  function startEmailOtpTimer(duration, display){
886    var timer = duration, seconds;
887    clearInterval(emailOtpCountdownTimer);
888    emailOtpCountdownTimer = setInterval(function () {
889      seconds = parseInt(timer, 10);
890      display.textContent = seconds;
891      if(--timer < 0){
892        enableEmailOtpResend();
893        clearInterval(emailOtpCountdownTimer);
894      }
895    }, 1000);
896    disableEmailOtpResend();
897  }
898
899  function enableEmailOtpResend(){
900    emailOtpResendBtn.style.display = "block";
901    emailOtpTimer.style.display = "none"
902  }
903  function disableEmailOtpResend(){
904    emailOtpResendBtn.style.display = "none";
905    emailOtpTimer.style.display = "block"
906  }
907  function keyForEmailOtpToken(email, pageCode) {
908    return email + '|' + pageCode+ '|SUBSCRIBE_VIA_EMAIL';
909  }
910</script>
910
911
912      </div>
913    </div>
914
915</div>
916 <!-- this is outside of the .container so that the cover photo can go full width on mobile -->
917
918
919  <div class="container history-container">
920    <div class="history-nav border-color">
921  <ul>
922    <li>
923      <a class="button border-color"  href="https://www.voipfonestatus.co.uk/history" aria-label="Incidents" >Incidents</a>
924    </li>
925    <li>
926      <a class="button current border-color" href="https://www.voipfonestatus.co.uk/uptime" aria-label="Uptime" aria-current=page>Uptime</a>
927    </li>
928  </ul>
929</div>
930
931
932    <div data-react-class="UptimeCalendar" data-react-props="{&quot;component&quot;:{&quot;status&quot;:&quot;operational&quot;,&quot;name&quot;:&quot;Voice Services&quot;,&quot;created_at&quot;:&quot;2015-09-25T16:24:48.849+01:00&quot;,&quot;updated_at&quot;:&quot;2016-09-29T10:23:09.656+01:00&quot;,&quot;position&quot;:1,&quot;description&quot;:null,&quot;showcase&quot;:false,&quot;start_date&quot;:null,&quot;id&quot;:&quot;qkvw844ykqgj&quot;,&quot;group_id&quot;:null,&quot;page_id&quot;:&quot;g1j7mrrz279t&quot;,&quot;components&quot;:[&quot;czxfbk7fwcv5&quot;,&quot;ppmwxspps50q&quot;,&quot;rx2tvhdt861z&quot;,&quot;fy3g9w17y2rm&quot;,&quot;3rhs3t75tfrw&quot;,&quot;hgkjp5zymh33&quot;,&quot;3rtvhclm17qf&quot;,&quot;8cpdrlz3ln4y&quot;,&quot;mk3s9jmmw263&quot;,&quot;vx9f49ltyhw8&quot;,&quot;9xfgc7lq662h&quot;]},&quot;component_select_list&quot;:[{&quot;name&quot;:&quot;Virtual PA&quot;,&quot;value&quot;:&quot;562qvych6ft8&quot;},{&quot;name&quot;:&quot;Voice Services&quot;,&quot;value&quot;:&quot;qkvw844ykqgj&quot;},{&quot;name&quot;:&quot;Voice Services - Voipfone Softphone&quot;,&quot;value&quot;:&quot;mk3s9jmmw263&quot;},{&quot;name&quot;:&quot;Voice Services - Voicemail&quot;,&quot;value&quot;:&quot;vx9f49ltyhw8&quot;},{&quot;name&quot;:&quot;Voice Services - Conference Call&quot;,&quot;value&quot;:&quot;9xfgc7lq662h&quot;}],&quot;is_group&quot;:true,&quot;months&quot;:[{&quot;name&quot;:&quot;August&quot;,&quot;year&quot;:2026,&quot;start_offset&quot;:6,&quot;uptime_percentage&quot;:1.0,&quot;days&quot;:[{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-01T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-02T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-03T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-04T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-05T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-06T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-07T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-08T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-09T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-10T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-11T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-12T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-13T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-14T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-15T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-16T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-17T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-18T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-19T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-20T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-21T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-22T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-23T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-24T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-25T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-26T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-27T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-28T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-29T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-30T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-08-31T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0}]},{&quot;name&quot;:&quot;September&quot;,&quot;year&quot;:2026,&quot;start_offset&quot;:2,&quot;uptime_percentage&quot;:1.0,&quot;days&quot;:[{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-01T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-02T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-03T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-04T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-05T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-06T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-07T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-08T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-09T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-10T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-11T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-12T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-13T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-14T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-15T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-16T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-17T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;
9322026-09-18T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-19T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-20T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-21T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-22T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-23T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-24T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-25T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-26T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-27T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-28T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-29T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-09-30T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0}]},{&quot;name&quot;:&quot;October&quot;,&quot;year&quot;:2026,&quot;start_offset&quot;:4,&quot;uptime_percentage&quot;:1.0,&quot;days&quot;:[{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-10-01T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-10-02T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-10-03T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-10-04T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#2fcc66&quot;,&quot;date&quot;:&quot;2026-10-05T00:00:00.000+01:00&quot;,&quot;mc&quot;:0,&quot;pc&quot;:0},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;},{&quot;color&quot;:&quot;#EAEAEA&quot;}]}],&quot;group_component_data&quot;:[{&quot;code&quot;:&quot;czxfbk7fwcv5&quot;,&quot;start_date&quot;:null,&quot;is_showcased&quot;:false},{&quot;code&quot;:&quot;ppmwxspps50q&quot;,&quot;start_date&quot;:null,&quot;is_showcased&quot;:false},{&quot;code&quot;:&quot;rx2tvhdt861z&quot;,&quot;start_date&quot;:null,&quot;is_showcased&quot;:false},{&quot;code&quot;:&quot;fy3g9w17y2rm&quot;,&quot;start_date&quot;:null,&quot;is_showcased&quot;:false},{&quot;code&quot;:&quot;3rhs3t75tfrw&quot;,&quot;start_date&quot;:null,&quot;is_showcased&quot;:false},{&quot;code&quot;:&quot;hgkjp5zymh33&quot;,&quot;start_date&quot;:null,&quot;is_showcased&quot;:false},{&quot;code&quot;:&quot;3rtvhclm17qf&quot;,&quot;start_date&quot;:null,&quot;is_showcased&quot;:false},{&quot;code&quot;:&quot;8cpdrlz3ln4y&quot;,&quot;start_date&quot;:null,&quot;is_showcased&quot;:false},{&quot;code&quot;:&quot;mk3s9jmmw263&quot;,&quot;start_date&quot;:null,&quot;is_showcased&quot;:true},{&quot;code&quot;:&quot;vx9f49ltyhw8&quot;,&quot;start_date&quot;:null,&quot;is_showcased&quot;:true},{&quot;code&quot;:&quot;9xfgc7lq662h&quot;,&quot;start_date&quot;:&quot;2023-12-29T00:00:00.000+00:00&quot;,&quot;is_showcased&quot;:true}],&quot;renderUptimePatternFF&quot;:false,&quot;a11ySeptHeadings&quot;:true}"></div>
933
934    <div class="page-footer border-color font-small">
935  <a href="/" aria-label="Back to current status">
936    <span class="current-status-arrow">&larr;</span> Current Status
937  </a>
938  <span class="color-secondary powered-by"><a class="color-secondary" target="_blank" rel="noopener noreferrer nofollow" href="https://www.atlassian.com/software/statuspage?utm_campaign=www.voipfonestatus.co.uk&amp;utm_content=SP-notifications&amp;utm_medium=powered-by&amp;utm_source=inapp">Powered by Atlassian Statuspage</a></span>
939</div>
940
941  </div>
942
943
944  
945</div>
946
947
948    
948<script src="https://dka575ofm4ao0.cloudfront.net/assets/status_manifest-b790849ccb41192b3f7d9c14d5a4a6d5142add81fc8522649ca5c82f6a1fbb0e.js"></script>
948
949    <div id="cpt-notification-container" role="status" aria-live="polite" aria-atomic="true"></div>
950    
951
952
953
954
955    <!-- all of the content_for stuff -->
956      
956<script src="https://dka575ofm4ao0.cloudfront.net/assets/register_subscription_form-589b657fec607087fc5c740c568270907310bc4f6aaa20256e70f01b103025ca.js"></script>
956
957
958  
958<script type="text/javascript">
959      $(function() {
960          SP.currentPage.registerSubscriptionForm('email');
961
962          SP.currentPage.registerSubscriptionForm('sms');
963
964
965      });
966
967
968
969
970
971  </script>
971
972    
972<script src="https://dka575ofm4ao0.cloudfront.net/assets/status_common-a7b1e9f22a2c94a83d347ec517cabf21494ca11867ebf891f46f89c9b4101811.js"></script>
972
973    
974
975
976      
976<script>
977  /** INITIALIZATION **/
978  var recaptchaIds = {}
979
980  // Unfortunately there's no unique selectors on the parent divs that recaptcha adds. The first unique selector
981  // is the iframe rendered 2 levels deep. So this waits until the iframes are added to the page, then finds
982  // the parent div and sets the z index so that it'll render above our modals & dropdowns from the start.
983  function setZIndex(captchaCount, startTime) {
984    // bail after 10s just in case so we don't do this forever if something whaky happens
985    if (new Date() - startTime > 10000) {
986      return;
987    }
988
989    var iframes = document.querySelectorAll('iframe[title="recaptcha challenge"]');
990    if (iframes.length != captchaCount) {
991      setTimeout(function() {
992        setZIndex(captchaCount, startTime);
993      }, 500);
994    }
995
996    for (var i = 0; i < iframes.length; i++) {
997      // incident subscribe modal is 1050, so this has to be above that
998      iframes[i].parentElement.parentElement.style.zIndex = "1100";
999    }
1000  }
1001
1002  function updateCaptchaIframeTitle(captchaCount, startTime, updates=0) {
1003
1004    if (new Date() - startTime > 10000 || captchaCount === updates) {
1005      return;
1006    }
1007    var iframesWithTitle = document.querySelectorAll('iframe[title="recaptcha challenge expires in two minutes"]');
1008
1009    if (iframesWithTitle.length != captchaCount) {
1010      setTimeout(function() {
1011        updateCaptchaIframeTitle(captchaCount, startTime, iframesWithTitle.length + updates);
1012      }, 500);
1013    }
1014
1015    for (var i = 0; i < iframesWithTitle.length; i++) {
1016      iframesWithTitle[i].title = "recaptcha";
1017    }
1018  }
1019
1020  function addIncidentCaptcha() {
1021    var incidentCaptcha = document.createElement('div');
1022    incidentCaptcha.setAttribute('id', 'subscribe-incident-recaptcha');
1023    incidentCaptcha.setAttribute('class', 'g-recaptcha');
1024    incidentCaptcha.setAttribute('data-sitekey', '6LcZ-b0UAAAAAENi956aWzynTT2ZJ80dGU3F80Op');
1025    incidentCaptcha.setAttribute('data-callback', 'submitIncidentSubscriberSuccess');
1026    incidentCaptcha.setAttribute('data-error-callback', 'submitIncidentSubscriberError');
1027    incidentCaptcha.setAttribute('data-size', 'invisible');
1028    document.body.appendChild(incidentCaptcha);
1029    var incidentCode = document.createElement('input');
1030    incidentCode.setAttribute('type', 'hidden');
1031    incidentCode.setAttribute('id', 'submit_incident_code');
1032    document.body.appendChild(incidentCode);
1033  }
1034
1035  var onloadCallback = function() {
1036    // if there is an incident, then add incident captcha element
1037    if (document.getElementsByClassName('modal-open-incident-subscribe').length > 0) {
1038      addIncidentCaptcha();
1039    }
1040
1041    var captchas = document.getElementsByClassName("g-recaptcha");
1042
1043    for(var i = 0; i < captchas.length; i++) {
1044      var elId = captchas[i].id;
1045      recaptchaIds[elId] = grecaptcha.enterprise.render(elId);
1046    }
1047
1048    setZIndex(captchas.length, new Date());
1049    updateCaptchaIframeTitle(captchas.length, new Date());
1050  }
1051
1052
1053  /** SUBSCRIBE DROPDOWN */
1054
1055  // callbacks for captcha success
1056  function submitNewSubscriber(type, error) {
1057    if (error) document.querySelector('#subscribe-form-' + type + ' #captcha_error').value = 'true';
1058
1059    document.getElementById('subscribe-form-' + type).dispatchEvent(new Event('submit', {bubbles: true, cancelable: true}));
1060    grecaptcha.enterprise.reset(recaptchaIds['subscribe-btn-' + type]);
1061  }
1062  function submitNewEmailSubscriber(token) {
1063    submitNewSubscriber('email');
1064  }
1065  function submitNewSmsSubscriber(token) {
1066    submitNewSubscriber('sms');
1067  }
1068  function submitNewWebhookSubscriber(token) {
1069    submitNewSubscriber('webhook');
1070  }
1071  function submitIncidentSubscriber(token, error, incidentCodeOverride) {
1072    var incidentCode = incidentCodeOverride;
1073    if (!incidentCode) {
1074      var incidentCodeEl = document.getElementById('submit_incident_code');
1075      incidentCode = incidentCodeEl && incidentCodeEl.value;
1076    }
1077    var incidentForm = incidentCode && document.getElementById('subscribe-form-' + incidentCode);
1078    if (!incidentForm) {
1079      return;
1080    }
1081
1082    var captchaError = incidentForm.querySelector('input[name="captcha_error"]');
1083    var recaptchaResponse = incidentForm.querySelector('input[name="g-recaptcha-response"]');
1084    if (captchaError) {
1085      captchaError.value = error;
1086    }
1087    if (recaptchaResponse) {
1088      recaptchaResponse.value = token;
1089    }
1090    incidentForm.dispatchEvent(new Event('submit', {bubbles: true, cancelable: true}));
1091    if (window.grecaptcha && grecaptcha.enterprise && recaptchaIds['subscribe-incident-recaptcha'] != null) {
1092      grecaptcha.enterprise.reset(recaptchaIds['subscribe-incident-recaptcha']);
1093    }
1094  }
1095  function submitIncidentSubscriberSuccess(token) {
1096    submitIncidentSubscriber(token, 'false');
1097  }
1098
1099  // callbacks if we get captcha network errors
1100  function emailSubscriberCaptchaError(token) {
1101    submitNewSubscriber('email', true);
1102  }
1103  function smsSubscriberCaptchaError(token) {
1104    submitNewSubscriber('sms', true);
1105  }
1106  function webhookSubscriberCaptchaError(token) {
1107    submitNewSubscriber('webhook', true);
1108  }
1109  function submitIncidentSubscriberError(token) {
1110    submitIncidentSubscriber(token, 'true');
1111  }
1112
1113  // tracking clicks
1114  ['email', 'sms', 'webhook'].forEach(function(type) {
1115    var el = document.getElementById('subscribe-btn-' + type);
1116    el && el.addEventListener("click", function() {
1117      $.ajax({
1118        type: "POST",
1119        url: "/subscriptions/track_attempt",
1120        data: {
1121          type: type
1122        }
1123      })
1124    })
1125  })
1126
1127  // form submission success callbacks
1128  $('#subscribe-form-email').on('ajax:success', function(e, data, status, xhr){
1129    if (data.type === 'success') {
1130      SP.currentPage.updatesDropdown.hide();
1131      var emailField = document.getElementById('email');
1132      if (emailField) {
1133        emailField.value = '';
1134      }
1135    }
1136  });
1137  $('#subscribe-form-sms').on('ajax:success', function(e, data, status, xhr){
1138    if (data.type === 'success' && data.otp_flow !== true) {
1139      SP.currentPage.updatesDropdown.hide();
1140      var phoneField = document.getElementById('phone-number');
1141      if (phoneField) {
1142        phoneField.value = '';
1143      }
1144    }
1145  });
1146  $('#subscribe-form-webhook').on('ajax:success', function(e, data, status, xhr){
1147    if (data.type === 'success') {
1148      SP.currentPage.updatesDropdown.hide();
1149      document.getElementById('endpoint-webhooks').value = '';
1150      document.getElementById('email-webhooks').value = '';
1151    }
1152  });
1153
1154  $('a.subscribe').on('click', function() {
1155    document.body.style.overflow = "hidden";
1156    document.body.style.height = "100vh";
1157  });
1158
1159  $('div.modal-open-incident-subscribe').on('hidden', function(){
1160    document.body.style.overflow = "";
1161    document.body.style.height = "";
1162  });
1163
1164  function submitCaptchaIncidentSubscribe(event) {
1165    var incidentCode = event.target.id.split('-')[2];
1166    event.preventDefault();
1167
1168    $.ajax({
1169      type: "POST",
1170      url: "/subscriptions/track_attempt",
1171      data: {
1172        type: 'incident'
1173      }
1174    })
1175
1176    var incidentCodeField = document.getElementById('submit_incident_code');
1177    if (incidentCodeField) {
1178      incidentCodeField.value = incidentCode;
1179    }
1180
1181    // Recaptcha's onloadCallback is what creates #submit_incident_code and the
1182    // widget id. If the enterprise.js script is blocked (ad blockers, CI url
1183    // blacklist), execute() and .value on a null node throw and the subscribe
1184    // click never reaches the server.
1185    var recaptchaId = recaptchaIds['subscribe-incident-recaptcha'];
1186    if (window.grecaptcha && grecaptcha.enterprise && typeof grecaptcha.enterprise.execute === 'function' && recaptchaId != null) {
1187      grecaptcha.enterprise.execute(recaptchaId);
1188    } else {
1189      submitIncidentSubscriber('', 'true', incidentCode);
1190    }
1191  }
1192</script>
vendor: 135 bytes, lines 1192-1198
1192
1193
1194<script src='https://www.recaptcha.net/recaptcha/enterprise.js?onload=onloadCallback&render=explicit' async defer></script>
1195
1196
1197    
1198  
1198<script src="https://dka575ofm4ao0.cloudfront.net/packs/common-b57e85f6a60348cdd566.chunk.js"></script>
1198
1199  
1199<script src="https://dka575ofm4ao0.cloudfront.net/packs/globals-79d49f8cfe179f020629.chunk.js"></script>
1199
1200
1201    
1201<script src="https://dka575ofm4ao0.cloudfront.net/packs/runtime-e9fe27ac357824763c7d.js"></script>
1201
1202    
1203    
1204    
1204<script src="https://dka575ofm4ao0.cloudfront.net/packs/status-46c9a85ee33b4106a045.chunk.js"></script>
1204
1205    
1205<script src="https://dka575ofm4ao0.cloudfront.net/packs/components-95f0cadd8954a909f19d.chunk.js"></script>
1205
1206
1207
1208    
1208<script>
1209  window.addEventListener('load', function () {
1210    const urlParams = new URLSearchParams(window.location.search);
1211    const messageToken = urlParams.get('slack_message_token');
1212    const channelName = escape(urlParams.get('channel_name'));
1213
1214    if(!!messageToken) {
1215      switch(messageToken) {
1216        case 'slack_auth_error':
1217          HRB.utils.notify('The Slack authorization attempt was unsuccessful. Try again.', {cssClass:'error'});
1218          break;
1219        case 'subscribers_disabled_error':
1220          HRB.utils.notify('Slack subscriptions are not enabled on this page.', {cssClass:'error'});
1221          break;
1222        case 'direct_message_channel_error':
1223          HRB.utils.notify('Subscriptions aren’t supported in direct messages. Try subscribing again and choose a channel instead.', {cssClass:'error'});
1224          break
1225        case 'duplicate_error':
1226          HRB.utils.notify("You're already subscribed to get Slack notifications in that channel.", {cssClass:'error'});
1227          break;
1228        case 'duplicate_private_channel_error':
1229          HRB.utils.notify(`You're already subscribed to get Slack notifications in #${channelName}. Invite the @Statuspage app to that channel to start getting status updates.`, {cssClass: 'error'});
1230          break;
1231        case 'default_success':
1232          HRB.utils.notify("You're now subscribed to get Statuspage updates in Slack!", {cssClass:'success'});
1233          break;
1234        case 'private_channel_success':
1235          HRB.utils.notify(`IMPORTANT: Invite the @Statuspage app to your Slack channel #${channelName} to start getting status updates.`, {cssClass:'success'});
1236          break;
1237      }
1238    }
1239  });
1240</script>
1240
1241
1242    
1243<!-- FOR FLASH NOTICES -->
1244
1245<!-- FOR ERROR -->
1246
1247
1248    
1248<script>
1249  $(function() {
1250    var $link = $('<span class="color-secondary powered-by"><a class="color-secondary" target="_blank" rel="noopener noreferrer nofollow" href="https://www.atlassian.com/software/statuspage?utm_campaign=www.voipfonestatus.co.uk&amp;utm_content=SP-notifications&amp;utm_medium=powered-by&amp;utm_source=inapp">Powered by Atlassian Statuspage</a></span>');
1251
1252  	var setPoweredByStyles = function() {
1253  		if (!$('.powered-by').length) {
1254  			$link.appendTo($('.page-footer'))
1255  		}
1256  		$('.powered-by').attr('style', 'display: inline !important; visibility:visible !important; opacity: 1 !important; position:static !important; text-indent:0px !important; transform:scale(1) !important');
1257  	}
1258
1259  	setInterval(setPoweredByStyles, 1000);
1260  });
1261</script>
1261
1262
1263
1264
1265
1266
1267  </body>
1268</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.