{"version":3,"sources":["CompanyContext.js","components/Header.js","components/Modal.js","components/IdleTimeoutPopup.js","components/Alert.js","components/Layout.js","lib/rxp-js/dist/rxp-js.js","components/Button.js","components/useFetch.js","components/Payment.js","components/HealthOrganization.js","components/Faqs.js","components/Cancel.js","components/Confirmation.js","components/Decline.js","components/Error.js","App.js","components/ScrollToTop.js","registerServiceWorker.js","index.js"],"names":["CompanyContext","React","createContext","i18n","use","Backend","initReactI18next","init","fallbackLng","interpolation","escapeValue","children","cfg","useState","config","setConfig","company","setCompany","forceUpdate","setForceUpdate","Message","Dismissable","Code","error","setError","route","useRouteMatch","t","getFixedT","LanguageNameSpace","filter","p","defaultContext","useEffect","fetch","params","org","generator","generate","length","headers","then","res","json","catch","err","Companies","key","toUpperCase","match","Key","loadNamespaces","Provider","value","Header","title","useContext","styles","setStyles","color","Color","PrimaryColor","borderColor","darken","desaturate","lighten","fade","type","className","to","src","Logo","alt","FullName","hidden","Version","Modal","this","props","onClick","onClose","showFooter","onButtonClick","buttonLabel","Component","IdleTimeoutPopup","disabled","homeUrl","idlingInSeconds","timeoutInSeconds","isIdling","setIsIdling","isTimeout","setIsTimeout","setIdlingRemaining","timeoutRemaining","setTimeoutRemaining","timeoutTimer","useRef","useIdleTimer","timeout","onIdle","e","reset","pause","getRemainingTime","useInterval","isHomepage","window","location","pathname","enableTimeout","current","setTimeout","clearTimeout","format","displayName","name","Alert","setHidden","console","scroller","scrollTo","duration","delay","smooth","id","data-dismiss","aria-label","aria-hidden","Layout","DisableOpp","DisableOppMessage","HomeUrl","indexOf","IdlingInSeconds","TimeoutInSeconds","Element","prototype","remove","parentElement","removeChild","NodeList","HTMLCollection","i","RealexHpp","tabWindow","redirectUrl","hppUrl","allowedHppUrls","randomId","Math","random","toString","substr","mobileXSLowerBound","isWindowsMobileOs","test","navigator","userAgent","isAndroidOrIOs","isMobileIFrame","isMobileNewTab","innerWidth","screen","width","innerHeight","Height","internal","evtMsg","addEvtMsgListener","evtMsgFct","push","fct","opt","addEventListener","attachEvent","removeOldEvtMsgListener","evt","pop","removeEventListener","detachEvent","base64","encode","input","keyStr","escape","chr1","chr2","enc1","enc2","enc3","output","chr3","enc4","charCodeAt","isNaN","charAt","decode","exec","Error","replace","String","fromCharCode","unescape","decodeAnswer","answer","_r","JSON","parse","message","r","createFormHiddenInput","el","document","createElement","setAttribute","checkDevicesOrientation","orientation","createOverlay","overlay","style","position","height","top","left","transition","zIndex","WebkitOverflowScrolling","overflowX","overflowY","body","appendChild","background","closeModal","closeButton","iFrame","spinner","overlayElement","parentNode","createCloseButton","getElementById","opacity","float","marginLeft","right","createForm","doc","token","ignorePostMessage","form","versionSet","parser","getUrlParser","href","hppOriginParam","protocol","host","createSpinner","borderRadius","createIFrame","transform","bottom","minHeight","WebkitTransform","metaTag","content","getElementsByTagName","onload","backgroundColor","contentWindow","submit","openWindow","open","meta","createAttribute","setAttributeNode","head","url","getHostnameFromUrl","hostname","isHppOrigin","origin","result","forEach","isMessageFromHpp","originHostName","receiveMessage","event","data","evtdata","iframe","embedded","iframeWidth","iframeHeight","resized","instance","getIframe","events","onResize","parseInt","_close","close","response","RxpLightbox","getInstance","hppToken","lightbox","temp","setToken","idOfLightboxButton","merchantUrl","serverSdkJson","lightboxInstance","RxpEmbedded","display","setIframe","iframeId","log","idOfEmbeddedButton","idOfTargetIframe","embeddedInstance","RxpRedirect","redirect","append","idOfButton","redirectInstance","setHppUrl","setMobileXSLowerBound","lowerBound","_internal","Button","validateExpiryDateFormat","expiryDate","month","substring","loading","role","defaultProps","useFetch","setData","opts","setOpts","isLoading","setIsLoading","promise","setPromise","fetchData","resolve","reject","a","axios","doFetch","Promise","Payment","useHistory","useParams","section","order","setOrder","invoices","setInvoices","submitEnabled","setSubmitEnabled","hideCheckoutSection","setHideCheckoutSection","totalPaymentAmount","map","invoice","reduce","b","InvoiceSampleUrl","target","StatementSampleUrl","PrivacyUrl","InvoiceValidiate","Invoices","InvoiceCart","orderInvoices","Currency","InvoiceAmount","OrderReview","invoiceNumbers","InvoiceNumber","join","total","Trans","i18nKey","OrderForm","displayType","thousandSeparator","prefix","fixedDecimalScale","decimalScale","errorCount","setErrorCount","accountNumber","setAccountNumber","searchTerm","setSearchTerm","invoiceNumber","setInvoiceNumber","recaptchaRef","sanitize","regex","placeholder","required","onChange","SearchTermField","Regex","CaptchaSiteKey","sitekey","ref","recaptcha","captchaValue","getValue","AccountNumber","SearchTerm","CompanyName","ValidationToken","status","errors","Object","keys","validateInvoice","cart","setCart","toggleInitState","AllowPartialInvoice","Enabled","isValidInvoice","parseFloat","min","MinimumPayment","handleInvoiceChange","idx","split","newInvoices","newInvoice","checked","every","TreatmentFacility","allowNegative","AllowPartialPayment","useTranslation","method","PaymentTotal","jsonFromRequestEndpoint","GPUrl","OrderNumber","HppJson","HealthOrganization","history","companies","setCompanies","organizations","setOrganizations","locations","setLocations","showCategory","setShowCategory","_organizations","acc","val","concat","_locations","c","Locations","loc","sort","nameA","nameB","preventDefault","defaultValue","arr","Category","Faqs","html","setHtml","text","dangerouslySetInnerHTML","__html","Cancel","Confirmation","useLocation","orderid","qs","search","email","setEmail","emailConfirm","setEmailConfirm","dirty","setDirty","emailDelivered","setEmailDelivered","handleBlur","dirtyState","handleSubmit","Name","Ticket","Email","Company","Ok","validEmail","toLowerCase","matchEmail","validForm","InvoiceNumbers","Address","PaymentMethod","ConfirmationNumber","print","onSubmit","onBlur","Decline","App","fallback","exact","path","component","ScrollToTop","prevProps","withRouter","isLocalhost","Boolean","registerValidSW","swUrl","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","state","controller","baseUrl","getAttribute","rootElement","ReactDOM","render","basename","URL","process","get","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.d00802f0.chunk.js","sourcesContent":["import React from 'react';\r\nimport generator from 'generate-password';\r\nimport { useRouteMatch } from 'react-router-dom';\r\nimport i18n from 'i18next';\r\nimport { initReactI18next } from 'react-i18next';\r\nimport Backend from 'i18next-http-backend';\r\nexport const CompanyContext = React.createContext();\r\n\r\ni18n\r\n .use(Backend)\r\n .use(initReactI18next)\r\n .init({\r\n fallbackLng: 'en',\r\n //debug: true,\r\n interpolation: {\r\n escapeValue: false\r\n }\r\n });\r\n\r\nexport default ({ children, cfg }) => {\r\n const [config, setConfig] = React.useState(cfg);\r\n const [company, setCompany] = React.useState(null);\r\n const [forceUpdate, setForceUpdate] = React.useState(0);\r\n const [error, setError] = React.useState({\r\n Message: '',\r\n Dismissable: true,\r\n Code: ''\r\n });\r\n\r\n const route = useRouteMatch('/:org/:action?');\r\n const t = i18n.getFixedT(null, [company?.LanguageNameSpace, 'translation'].filter(p => p));\r\n\r\n const defaultContext = {\r\n config,\r\n company,\r\n error,\r\n setError,\r\n t\r\n };\r\n\r\n React.useEffect(() => {\r\n fetch(`Payment/GetConfig/${route?.params?.org || ''}?rev=${generator.generate({ length: 10 })}`, {\r\n headers: {\r\n 'Accepts': 'application/json'\r\n }\r\n })\r\n .then(res => {\r\n return res.json();\r\n })\r\n .then(json => {\r\n setConfig(json);\r\n })\r\n .catch(err => {\r\n setError({\r\n Message: \"This site is currently experiencing technical difficulty\",\r\n Dismissable: false,\r\n Code: '0x01'\r\n });\r\n });\r\n }, [route?.params?.org]);\r\n\r\n React.useEffect(() => {\r\n if (config?.Companies) {\r\n var org = route?.params?.org;\r\n var key = org?.toUpperCase()\r\n var match = config.Companies[key];\r\n if (!!!match) {\r\n setCompany(null);\r\n } else {\r\n match.Key = key;\r\n setCompany(match);\r\n if (match.LanguageNameSpace) {\r\n i18n\r\n .loadNamespaces(match.LanguageNameSpace)\r\n .then(() => { setForceUpdate(match.LanguageNameSpace); });\r\n }\r\n }\r\n }\r\n }, [config, route]);\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};","import React, { useEffect } from 'react';\r\nimport { Link } from \"react-router-dom\";\r\nimport Color from 'color';\r\nimport { CompanyContext } from '../CompanyContext';\r\nimport \"./Header.css\";\r\n\r\nexport default function Header({ title }) {\r\n const { config, company, t } = React.useContext(CompanyContext);\r\n const [styles, setStyles] = React.useState('');\r\n\r\n useEffect(() => {\r\n let color = Color(company ? company.PrimaryColor : '#314761');\r\n let borderColor = color.darken(.15);\r\n setStyles(`\r\n .header { border-bottom-color: ${color}; }\r\n .app-name { color: ${color.desaturate(.9).lighten(.25)}; }\r\n .btn-primary { background-color: ${color}; border-color: ${borderColor} }\r\n .btn-primary:hover { background-color: ${color.darken(.15)}; border-color: ${color.darken(.15)} }\r\n .btn-primary.disabled, .btn-primary:disabled { background-color: ${color.lighten(.3)}; border-color: ${borderColor.lighten(.5)} }\r\n .form-control:focus { border-color: ${color.lighten(.25)}; box-shadow: 0 0 0 0.2rem ${color.fade(.8)}; }\r\n .version { font-size: xx-small; }\r\n `);\r\n }, [company]);\r\n\r\n return (\r\n <>\r\n \r\n
\r\n \r\n
\r\n \r\n );\r\n}\r\n","import React, { Component } from 'react';\r\nimport \"./Modal.css\";\r\n\r\nexport class Modal extends Component {\r\n static displayName = Modal.name;\r\n\r\n render() {\r\n return (!this.props.hidden && \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {this.props.children}\r\n
\r\n {this.props.showFooter &&\r\n
\r\n \r\n
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React, { useEffect } from 'react';\r\nimport { useIdleTimer } from 'react-idle-timer'\r\nimport format from 'format-duration';\r\nimport useInterval from 'use-interval'\r\n\r\nimport { Modal } from './Modal';\r\nimport { CompanyContext } from '../CompanyContext';\r\n\r\nexport function IdleTimeoutPopup({ disabled, homeUrl, idlingInSeconds, timeoutInSeconds }) {\r\n const { t } = React.useContext(CompanyContext);\r\n const [isIdling, setIsIdling] = React.useState(false);\r\n const [isTimeout, setIsTimeout] = React.useState(false);\r\n const [idlingRemaining, setIdlingRemaining] = React.useState(0);\r\n const [timeoutRemaining, setTimeoutRemaining] = React.useState(0);\r\n let timeoutTimer = React.useRef();\r\n\r\n const {\r\n reset,\r\n pause,\r\n getRemainingTime\r\n } = useIdleTimer({\r\n timeout: idlingInSeconds * 1000,\r\n onIdle: e => { onIdle(e); }\r\n })\r\n\r\n useEffect(() => {\r\n setIdlingRemaining(getRemainingTime());\r\n }, [idlingInSeconds]);\r\n\r\n useInterval(() => {\r\n setIdlingRemaining(getRemainingTime());\r\n setTimeoutRemaining(timeoutRemaining - (isIdling && isTimeout === false ? 1000 : 0));\r\n }, 1000);\r\n\r\n var onIdle = (e) => {\r\n let isHomepage = window.location.pathname === '/'; // quick hack to check if we are on homepage\r\n let enableTimeout = disabled === false && isHomepage === false;\r\n\r\n setIsIdling(enableTimeout);\r\n setTimeoutRemaining(timeoutInSeconds * 1000);\r\n\r\n if (enableTimeout) {\r\n pause();\r\n timeoutTimer.current = setTimeout(function () {\r\n setIsTimeout(true);\r\n setTimeout(function () {\r\n window.location = homeUrl;\r\n }, 2000);\r\n }, timeoutInSeconds * 1000);\r\n }\r\n };\r\n\r\n var onTimerReset = () => {\r\n clearTimeout(timeoutTimer.current);\r\n reset();\r\n setIsIdling(false);\r\n setIsTimeout(false);\r\n }\r\n\r\n return (\r\n !disabled && isIdling === true &&\r\n \r\n {isTimeout ?\r\n t('Your session has timed out. Please wait while you are being redirected...') :\r\n t('Your session will timeout in ') + format(timeoutRemaining)}\r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport { Element, scroller } from \"react-scroll\";\r\nimport { CompanyContext } from '../CompanyContext';\r\n\r\nimport \"./Alert.css\";\r\n\r\nexport function Alert() {\r\n const { error, t } = React.useContext(CompanyContext);\r\n let [hidden, setHidden] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n if (!error || !error.Message) return;\r\n\r\n console.error(error);\r\n\r\n if (error?.Message) {\r\n setHidden(false);\r\n\r\n scroller.scrollTo('site-alert', {\r\n duration: 400,\r\n delay: 0,\r\n smooth: \"easeInOutQuart\"\r\n });\r\n }\r\n }, [error]);\r\n\r\n return (\r\n <>\r\n {error?.Message && hidden === false &&\r\n
\r\n
\r\n
\r\n {t(error.Message)}\r\n {error.Code && ({error.Code})}\r\n {error.Dismissable &&\r\n \r\n }\r\n
\r\n
\r\n }\r\n \r\n );\r\n}","import React from 'react';\r\nimport Header from './Header';\r\nimport { IdleTimeoutPopup } from './IdleTimeoutPopup';\r\nimport { Alert } from './Alert';\r\nimport { CompanyContext } from '../CompanyContext';\r\n\r\nexport function Layout({ children }) {\r\n const { config, setError, t } = React.useContext(CompanyContext);\r\n\r\n React.useEffect(() => {\r\n if (config?.DisableOpp) {\r\n setError({\r\n Message: config.DisableOppMessage || t('This site is currently unavailable at this moment, please try again later.'),\r\n Dismissable: false\r\n });\r\n }\r\n }, [config]);\r\n\r\n return (\r\n
\r\n {config &&\r\n -1}\r\n idlingInSeconds={config.IdlingInSeconds}\r\n timeoutInSeconds={config.TimeoutInSeconds} />\r\n }\r\n
\r\n \r\n {config && children}\r\n
\r\n );\r\n}","/*! rxp-js - v1.5.2 - 2023-06-08\r\n * The official Realex Payments JS Library\r\n * https://github.com/realexpayments/rxp-js\r\n * Licensed MIT\r\n */\r\nElement.prototype.remove = function() {\r\n this.parentElement.removeChild(this);\r\n};\r\nNodeList.prototype.remove = HTMLCollection.prototype.remove = function() {\r\n for(var i = this.length - 1; i >= 0; i--) {\r\n if(this[i] && this[i].parentElement) {\r\n this[i].parentElement.removeChild(this[i]);\r\n }\r\n }\r\n};\r\nexport var RealexHpp = (function () {\r\n\r\n\t'use strict';\r\n\r\n\tvar hppUrl = \"https://pay.sandbox.realexpayments.com/pay\";\r\n\r\n\tvar allowedHppUrls = [\r\n\t\t'https://pay.realexpayments.com/pay',\r\n\t\t'https://pay.sandbox.realexpayments.com/pay'\r\n\t];\r\n\r\n\tvar randomId = randomId || Math.random().toString(16).substr(2,8);\r\n\r\n\tvar setHppUrl = function(url) {\r\n\t\thppUrl = url;\r\n\t};\r\n\r\n\tvar mobileXSLowerBound = 360;\r\n\tvar setMobileXSLowerBound = function (lowerBound) {\r\n\t\tmobileXSLowerBound = lowerBound;\r\n\t};\r\n\r\n\tvar isWindowsMobileOs = /Windows Phone|IEMobile/.test(navigator.userAgent);\r\n\tvar isAndroidOrIOs = /Android|iPad|iPhone|iPod/.test(navigator.userAgent);\r\n\tvar isMobileXS = function () {\r\n\t\treturn (((window.innerWidth > 0) ? window.innerWidth : window.screen.width) <= mobileXSLowerBound ? true : false) ||\r\n\t\t\t(((window.innerHeight > 0) ? window.innerHeight : window.screen.Height) <= mobileXSLowerBound ? true : false);\r\n\t};\r\n\r\n\t// Display IFrame on WIndows Phone OS mobile devices\r\n\tvar isMobileIFrame = isWindowsMobileOs;\r\n\r\n\t// For IOs/Android and small screen devices always open in new tab/window\r\n\tvar isMobileNewTab = function () {\r\n\t\treturn !isWindowsMobileOs && (isAndroidOrIOs || isMobileXS());\r\n\t};\r\n\r\n\tvar tabWindow;\r\n\r\n\tvar redirectUrl;\r\n\r\n\t/**\r\n\t * Shared functionality across lightbox, embedded, and redirect display modes.\r\n\t */\r\n\tvar internal = {\r\n\t\tevtMsg: [],\r\n\t\t/**\r\n\t\t * Adds a new window message event listener and tracks it for later removal\r\n\t\t *\r\n\t\t * @param {Function} evtMsgFct\r\n\t\t */\r\n\t\taddEvtMsgListener: function(evtMsgFct) {\r\n\t\t\tthis.evtMsg.push({ fct: evtMsgFct, opt: false });\r\n\t\t\tif (window.addEventListener) {\r\n\t\t\t\twindow.addEventListener(\"message\", evtMsgFct, false);\r\n\t\t\t} else {\r\n\t\t\t\twindow.attachEvent('message', evtMsgFct);\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t * Removes a previously set window message event listener\r\n\t\t */\r\n\t\tremoveOldEvtMsgListener: function () {\r\n\t\t\tif (this.evtMsg.length > 0) {\r\n\t\t\t\tvar evt = this.evtMsg.pop();\r\n\t\t\t\tif (window.addEventListener) {\r\n\t\t\t\t\twindow.removeEventListener(\"message\", evt.fct, evt.opt);\r\n\t\t\t\t} else {\r\n\t\t\t\t\twindow.detachEvent('message', evt.fct);\r\n\t\t\t\t}\r\n\t\t\t}\r\n },\r\n\t\t/**\r\n\t\t * Shimmed base64 encode/decode support\r\n\t\t */\r\n\t\tbase64:{\r\n\t\t\tencode:function(input) {\r\n\t\t\t\tvar keyStr = \"ABCDEFGHIJKLMNOP\" +\r\n\t\t\t \"QRSTUVWXYZabcdef\" +\r\n\t\t\t \"ghijklmnopqrstuv\" +\r\n\t\t\t \"wxyz0123456789+/\" +\r\n\t\t\t \"=\";\r\n\t\t\t\tinput = escape(input);\r\n\t\t\t\tvar output = \"\";\r\n\t\t\t\tvar chr1, chr2, chr3 = \"\";\r\n\t\t\t\tvar enc1, enc2, enc3, enc4 = \"\";\r\n\t\t\t\tvar i = 0;\r\n\r\n\t\t\t\tdo {\r\n\t\t\t\t chr1 = input.charCodeAt(i++);\r\n\t\t\t\t chr2 = input.charCodeAt(i++);\r\n\t\t\t\t chr3 = input.charCodeAt(i++);\r\n\r\n\t\t\t\t enc1 = chr1 >> 2;\r\n\t\t\t\t enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\r\n\t\t\t\t enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\r\n\t\t\t\t enc4 = chr3 & 63;\r\n\r\n\t\t\t\t if (isNaN(chr2)) {\r\n\t\t\t\t\t enc3 = enc4 = 64;\r\n\t\t\t\t } else if (isNaN(chr3)) {\r\n\t\t\t\t\t enc4 = 64;\r\n\t\t\t\t }\r\n\r\n\t\t\t\t output = output +\r\n\t\t\t\t\t keyStr.charAt(enc1) +\r\n\t\t\t\t\t keyStr.charAt(enc2) +\r\n\t\t\t\t\t keyStr.charAt(enc3) +\r\n\t\t\t\t\t keyStr.charAt(enc4);\r\n\t\t\t\t chr1 = chr2 = chr3 = \"\";\r\n\t\t\t\t enc1 = enc2 = enc3 = enc4 = \"\";\r\n\t\t\t\t} while (i < input.length);\r\n\r\n\t\t\t\treturn output;\r\n\t\t\t},\r\n\t\t\tdecode:function(input) {\r\n\t\t\t\tif(typeof input === 'undefined') {\r\n\t\t\t\t\treturn input;\r\n\t\t\t\t}\r\n\t\t\t\tvar keyStr = \"ABCDEFGHIJKLMNOP\" +\r\n\t\t\t \"QRSTUVWXYZabcdef\" +\r\n\t\t\t \"ghijklmnopqrstuv\" +\r\n\t\t\t \"wxyz0123456789+/\" +\r\n\t\t\t \"=\";\r\n\t\t\t\tvar output = \"\";\r\n\t\t\t\tvar chr1, chr2, chr3 = \"\";\r\n\t\t\t\tvar enc1, enc2, enc3, enc4 = \"\";\r\n\t\t\t\tvar i = 0;\r\n\r\n\t\t\t\t// remove all characters that are not A-Z, a-z, 0-9, +, /, or =\r\n\t\t\t\tvar base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\r\n\t\t\t\tif (base64test.exec(input)) {\r\n\t\t\t\t throw new Error(\"There were invalid base64 characters in the input text.\\n\" +\r\n\t\t\t\t\t\t \"Valid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\\n\" +\r\n\t\t\t\t\t\t \"Expect errors in decoding.\");\r\n\t\t\t\t}\r\n\t\t\t\tinput = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\r\n\r\n\t\t\t\tdo {\r\n\t\t\t\t enc1 = keyStr.indexOf(input.charAt(i++));\r\n\t\t\t\t enc2 = keyStr.indexOf(input.charAt(i++));\r\n\t\t\t\t enc3 = keyStr.indexOf(input.charAt(i++));\r\n\t\t\t\t enc4 = keyStr.indexOf(input.charAt(i++));\r\n\r\n\t\t\t\t chr1 = (enc1 << 2) | (enc2 >> 4);\r\n\t\t\t\t chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\r\n\t\t\t\t chr3 = ((enc3 & 3) << 6) | enc4;\r\n\r\n\t\t\t\t output = output + String.fromCharCode(chr1);\r\n\r\n\t\t\t\t if (enc3 !== 64) {\r\n\t\t\t\t\t output = output + String.fromCharCode(chr2);\r\n\t\t\t\t }\r\n\t\t\t\t if (enc4 !== 64) {\r\n\t\t\t\t\t output = output + String.fromCharCode(chr3);\r\n\t\t\t\t }\r\n\r\n\t\t\t\t chr1 = chr2 = chr3 = \"\";\r\n\t\t\t\t enc1 = enc2 = enc3 = enc4 = \"\";\r\n\r\n\t\t\t\t} while (i < input.length);\r\n\r\n\t\t\t\treturn unescape(output);\r\n\t\t\t}\r\n\t\t},\r\n\t\t/**\r\n\t\t * Converts an HPP message to a developer-friendly version.\r\n\t\t *\r\n\t\t * The decode process has two steps:\r\n\t\t *\r\n\t\t * 1. Attempt to parse the string as JSON. If this fails, an error response\r\n\t\t * is provided as we expect that the HPP has errored out to the cardholder\r\n\t\t * 2. Attempt to base64 decode the data to cover both HPP versions 1 and 2.\r\n\t\t *\r\n\t\t * @param {any} answer\r\n\t\t * @returns null if answer is not a string, otherwise the data from the HPP\r\n\t\t */\r\n\t\tdecodeAnswer:function(answer){ //internal.decodeAnswer\r\n\r\n\t\t\tvar _r;\r\n\r\n\t\t\tif (typeof answer !== \"string\") {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\ttry {\r\n\t\t\t\t_r=JSON.parse(answer);\r\n\t\t\t} catch (e) {\r\n\t\t\t\t_r = { error: true, message: answer };\r\n\t\t\t}\r\n\r\n\t\t\ttry {\r\n\t\t\t\tfor(var r in _r){\r\n\t\t\t\t\tif(_r[r]) {\r\n\t\t\t\t\t\t_r[r]=internal.base64.decode(_r[r]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} catch (e) { /** */ }\r\n\t\t\treturn _r;\r\n\t\t},\r\n\t\t/**\r\n\t\t * Creates a new input of type `hidden`. Does not append to DOM.\r\n\t\t *\r\n\t\t * @param {string} name Name for the new input\r\n\t\t * @param {string} value Value for the new input\r\n\t\t * @returns the created input\r\n\t\t */\r\n\t\tcreateFormHiddenInput: function (name, value) {\r\n\t\t\tvar el = document.createElement(\"input\");\r\n\t\t\tel.setAttribute(\"type\", \"hidden\");\r\n\t\t\tel.setAttribute(\"name\", name);\r\n\t\t\tel.setAttribute(\"value\", value);\r\n\t\t\treturn el;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Determines a mobile device's orientation for width calculation\r\n\t\t *\r\n\t\t * @returns true if in landscape\r\n\t\t */\r\n\t\tcheckDevicesOrientation: function () {\r\n\t\t\tif (window.orientation === 90 || window.orientation === -90) {\r\n\t\t\t\treturn true;\r\n\t\t\t} else {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Creates a semi-transparent overlay with full width/height to serve as\r\n\t\t * a background for the lightbox modal\r\n\t\t *\r\n\t\t * @returns the created overlay\r\n\t\t */\r\n\t\tcreateOverlay: function () {\r\n\t\t\tvar overlay = document.createElement(\"div\");\r\n\t\t\toverlay.setAttribute(\"id\", \"rxp-overlay-\" + randomId);\r\n\t\t\toverlay.style.position = \"fixed\";\r\n\t\t\toverlay.style.width = \"100%\";\r\n\t\t\toverlay.style.height = \"100%\";\r\n\t\t\toverlay.style.top = \"0\";\r\n\t\t\toverlay.style.left = \"0\";\r\n\t\t\toverlay.style.transition = \"all 0.3s ease-in-out\";\r\n\t\t\toverlay.style.zIndex = \"100\";\r\n\r\n\t\t\tif (isMobileIFrame) {\r\n\t\t\t\toverlay.style.position = \"absolute !important\";\r\n\t\t\t\toverlay.style.WebkitOverflowScrolling = \"touch\";\r\n\t\t\t\toverlay.style.overflowX = \"hidden\";\r\n\t\t\t\toverlay.style.overflowY = \"scroll\";\r\n\t\t\t}\r\n\r\n\t\t\tdocument.body.appendChild(overlay);\r\n\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\toverlay.style.background = \"rgba(0, 0, 0, 0.7)\";\r\n\t\t\t}, 1);\r\n\r\n\t\t\treturn overlay;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Closes a lightbox modal and all associated elements\r\n\t\t *\r\n\t\t * @param {HTMLImageElement} closeButton\r\n\t\t * @param {HTMLIFrameElement} iFrame\r\n\t\t * @param {HTMLImageElement} spinner\r\n\t\t * @param {HTMLDivElement} overlayElement\r\n\t\t */\r\n\t\tcloseModal: function (closeButton, iFrame, spinner, overlayElement) {\r\n\t\t\tif (closeButton && closeButton.parentNode) {\r\n\t\t\t\tcloseButton.parentNode.removeChild(closeButton);\r\n\t\t\t}\r\n\r\n\t\t\tif (iFrame && iFrame.parentNode) {\r\n\t\t\t\tiFrame.parentNode.removeChild(iFrame);\r\n\t\t\t}\r\n\r\n\t\t\tif (spinner && spinner.parentNode) {\r\n\t\t\t\tspinner.parentNode.removeChild(spinner);\r\n\t\t\t}\r\n\r\n\t\t\tif (!overlayElement) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\toverlayElement.className = \"\";\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tif (overlayElement.parentNode) {\r\n\t\t\t\t\toverlayElement.parentNode.removeChild(overlayElement);\r\n\t\t\t\t}\r\n\t\t\t}, 300);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Creates a close button for the lightbox modal\r\n\t\t *\r\n\t\t * @returns the created element\r\n\t\t */\r\n\t\tcreateCloseButton: function (overlayElement) {\r\n\t\t\tif (document.getElementById(\"rxp-frame-close-\" + randomId) !== null) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar closeButton = document.createElement(\"img\");\r\n\t\t\tcloseButton.setAttribute(\"id\",\"rxp-frame-close-\" + randomId);\r\n\t\t\tcloseButton.setAttribute(\"src\", \"data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUJFRjU1MEIzMUQ3MTFFNThGQjNERjg2NEZCRjFDOTUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUJFRjU1MEMzMUQ3MTFFNThGQjNERjg2NEZCRjFDOTUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQkVGNTUwOTMxRDcxMUU1OEZCM0RGODY0RkJGMUM5NSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQkVGNTUwQTMxRDcxMUU1OEZCM0RGODY0RkJGMUM5NSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PlHco5QAAAHpSURBVHjafFRdTsJAEF42JaTKn4glGIg++qgX4AAchHAJkiZcwnAQD8AF4NFHCaC2VgWkIQQsfl/jNJUik8Duzs/XmW9mN7Xb7VRc5vP5zWKxaK5Wq8Zmu72FqobfJG0YQ9M0+/l8/qFQKDzGY1JxENd1288vLy1s786KRZXJZCLber1Wn7MZt4PLarVnWdZ9AmQ8Hncc17UvymVdBMB/MgPQm+cFFcuy6/V6lzqDf57ntWGwYdBIVx0TfkBD6I9M35iRJgfIoAVjBLDZbA4CiJ5+9AdQi/EahibqDTkQx6fRSIHcPwA8Uy9A9Gcc47Xv+w2wzhRDYzqdVihLIbsIiCvP1NNOoX/29FQx3vgOgtt4FyRdCgPRarX4+goB9vkyAMh443cOEsIAAcjncuoI4TXWMAmCIGFhCQLAdZ8jym/cRJ+Y5nC5XCYAhINKpZLgSISZgoqh5iiLQrojAFICVwGS7tCfe5DbZzkP56XS4NVxwvTI/vXVVYIDnqmnnX70ZxzjNS8THHooK5hMpxHQIREA+tEfA9djfHR3MHkdx3Hspe9r3B+VzWaj2RESyR2mlCUE4MoGQDdxiwHURq2t94+PO9bMIYyTyDNLwMoM7g8+BfKeYGniyw2MdfSehF3Qmk1IvCc/AgwAaS86Etp38bUAAAAASUVORK5CYII=\");\r\n\t\t\tcloseButton.setAttribute(\"style\",\"transition: all 0.5s ease-in-out; opacity: 0; float: left; position: absolute; left: 50%; margin-left: 173px; z-index: 99999999; top: 30px;\");\r\n\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\tcloseButton.style.opacity = \"1\";\r\n\t\t\t},500);\r\n\r\n\t\t\tif (isMobileIFrame) {\r\n\t\t\t\tcloseButton.style.position = \"absolute\";\r\n\t\t\t\tcloseButton.style.float = \"right\";\r\n\t\t\t\tcloseButton.style.top = \"20px\";\r\n\t\t\t\tcloseButton.style.left = \"initial\";\r\n\t\t\t\tcloseButton.style.marginLeft = \"0px\";\r\n\t\t\t\tcloseButton.style.right = \"20px\";\r\n\t\t\t}\r\n\r\n\t\t\treturn closeButton;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Creates a form and appends the HPP request data as hidden input elements to\r\n\t\t * POST to the defined HPP URL.\r\n\t\t *\r\n\t\t * The created form is not appended to the DOM and is not submitted at this time.\r\n\t\t *\r\n\t\t * @param {Document} doc\r\n\t\t * @param {object} token HPP request data\r\n\t\t * @param {bool} ignorePostMessage If true, the HPP will redirect to the defined\r\n\t\t * \t\t\t\t\tdefined redirect URL. If false, the HPP will send a postMessage\r\n\t\t * \t\t\t\t\tto the parent window to be handled by this library.\r\n\t\t * @returns the created form\r\n\t\t */\r\n\t\tcreateForm: function (doc, token, ignorePostMessage) {\r\n\t\t\tvar form = document.createElement(\"form\");\r\n\t\t\tform.setAttribute(\"method\", \"POST\");\r\n\t\t\tform.setAttribute(\"action\", hppUrl);\r\n\r\n\t\t\tvar versionSet = false;\r\n\r\n\t\t\tfor (var key in token) {\r\n\t\t\t\tif (key === \"HPP_VERSION\"){\r\n\t\t\t\t\tversionSet = true;\r\n\t\t\t\t}\r\n\t\t\t\tform.appendChild(internal.createFormHiddenInput(key, token[key]));\r\n\t\t\t}\r\n\r\n\t\t\tif (versionSet === false){\r\n\t\t\t\tform.appendChild(internal.createFormHiddenInput(\"HPP_VERSION\", \"2\"));\r\n\t\t\t}\r\n\r\n\t\t\tif (ignorePostMessage) {\r\n\t\t\t\tform.appendChild(internal.createFormHiddenInput(\"MERCHANT_RESPONSE_URL\", redirectUrl));\r\n\t\t\t} else {\r\n\t\t\t\tvar parser = internal.getUrlParser(window.location.href);\r\n\t\t\t\tvar hppOriginParam = parser.protocol + '//' + parser.host;\r\n\r\n\t\t\t\tform.appendChild(internal.createFormHiddenInput(\"HPP_POST_RESPONSE\", hppOriginParam));\r\n\t\t\t\tform.appendChild(internal.createFormHiddenInput(\"HPP_POST_DIMENSIONS\", hppOriginParam));\r\n\t\t\t}\r\n\t\t\treturn form;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Creates a visual spinner element to be shown with the lightbox overlay while the\r\n\t\t * HPP's iframe loads\r\n\t\t *\r\n\t\t * @returns the created spinner element\r\n\t\t */\r\n\t\tcreateSpinner: function () {\r\n\t\t\tvar spinner = document.createElement(\"img\");\r\n\t\t\tspinner.setAttribute(\"src\", \"data:image/gif;base64,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\");\r\n\t\t\tspinner.setAttribute(\"id\", \"rxp-loader-\" + randomId);\r\n\t\t\tspinner.style.left = \"50%\";\r\n\t\t\tspinner.style.position = \"fixed\";\r\n\t\t\tspinner.style.background = \"#FFFFFF\";\r\n\t\t\tspinner.style.borderRadius = \"50%\";\r\n\t\t\tspinner.style.width = \"30px\";\r\n\t\t\tspinner.style.zIndex = \"200\";\r\n\t\t\tspinner.style.marginLeft = \"-15px\";\r\n\t\t\tspinner.style.top = \"120px\";\r\n\t\t\treturn spinner;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Creates the HPP's form, spinner, iframe, and close button, appends them\r\n\t\t * to the DOM, and submits the form to load the HPP\r\n\t\t *\r\n\t\t * @param {HTMLDivElement} overlayElement\r\n\t\t * @param {object} token The HPP request data\r\n\t\t * @returns an object with the created spinner, iframe, and close button\r\n\t\t */\r\n\t\tcreateIFrame: function (overlayElement, token) {\r\n\t\t\t//Create the spinner\r\n\t\t\tvar spinner = internal.createSpinner();\r\n\t\t\tdocument.body.appendChild(spinner);\r\n\r\n\t\t\t//Create the iframe\r\n\t\t\tvar iFrame = document.createElement(\"iframe\");\r\n\t\t\tiFrame.setAttribute(\"name\", \"rxp-frame-\" + randomId);\r\n\t\t\tiFrame.setAttribute(\"id\", \"rxp-frame-\" + randomId);\r\n\t\t\tiFrame.setAttribute(\"height\", \"562px\");\r\n\t\t\tiFrame.setAttribute(\"frameBorder\", \"0\");\r\n\t\t\tiFrame.setAttribute(\"width\", \"360px\");\r\n\t\t\tiFrame.setAttribute(\"seamless\", \"seamless\");\r\n\r\n\t\t\tiFrame.style.zIndex = \"10001\";\r\n\t\t\tiFrame.style.position = \"absolute\";\r\n\t\t\tiFrame.style.transition = \"transform 0.5s ease-in-out\";\r\n\t\t\tiFrame.style.transform = \"scale(0.7)\";\r\n\t\t\tiFrame.style.opacity = \"0\";\r\n\r\n\t\t\toverlayElement.appendChild(iFrame);\r\n\r\n\t\t\tif (isMobileIFrame) {\r\n\t\t\t\tiFrame.style.top = \"0px\";\r\n\t\t\t\tiFrame.style.bottom = \"0px\";\r\n\t\t\t\tiFrame.style.left = \"0px\";\r\n\t\t\t\tiFrame.style.marginLeft = \"0px;\";\r\n\t\t\t\tiFrame.style.width = \"100%\";\r\n\t\t\t\tiFrame.style.height = \"100%\";\r\n\t\t\t\tiFrame.style.minHeight = \"100%\";\r\n\t\t\t\tiFrame.style.WebkitTransform = \"translate3d(0,0,0)\";\r\n\t\t\t\tiFrame.style.transform = \"translate3d(0, 0, 0)\";\r\n\r\n\t\t\t\tvar metaTag = document.createElement('meta');\r\n\t\t\t\tmetaTag.name = \"viewport\";\r\n\t\t\t\tmetaTag.content = \"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0\";\r\n\t\t\t\tdocument.getElementsByTagName('head')[0].appendChild(metaTag);\r\n\t\t\t} else {\r\n\t\t\t\tiFrame.style.top = \"40px\";\r\n\t\t\t\tiFrame.style.left = \"50%\";\r\n\t\t\t\tiFrame.style.marginLeft = \"-180px\";\r\n\t\t\t}\r\n\r\n\t\t\tvar closeButton;\r\n\r\n\t\t\tiFrame.onload = function () {\r\n\t\t\t\tiFrame.style.opacity = \"1\";\r\n\t\t\t\tiFrame.style.transform = \"scale(1)\";\r\n\t\t\t\tiFrame.style.backgroundColor = \"#ffffff\";\r\n\r\n\t\t\t\tif (spinner && spinner.parentNode) {\r\n\t\t\t\t\tspinner.parentNode.removeChild(spinner);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcloseButton = internal.createCloseButton();\r\n\r\n\t\t\t\tif (overlayElement && closeButton) {\r\n\t\t\t\t\toverlayElement.appendChild(closeButton);\r\n\t\t\t\t\tcloseButton.addEventListener(\"click\", function () {\r\n\t\t\t\t\t\tinternal.closeModal(closeButton, iFrame, spinner, overlayElement);\r\n\t\t\t\t\t}, true);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tvar form = internal.createForm(document, token);\r\n\t\t\tif (iFrame.contentWindow.document.body) {\r\n\t\t\t\tiFrame.contentWindow.document.body.appendChild(form);\r\n\t\t\t} else {\r\n\t\t\t\tiFrame.contentWindow.document.appendChild(form);\r\n\t\t\t}\r\n\r\n\t\t\tform.submit();\r\n\r\n\t\t\treturn {\r\n\t\t\t\tspinner: spinner,\r\n\t\t\t\tiFrame: iFrame,\r\n\t\t\t\tcloseButton: closeButton\r\n\t\t\t};\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Opens the HPP in a new window\r\n\t\t *\r\n\t\t * Used in some mobile scenarios or when the browser viewport is\r\n\t\t * smaller than the HPP's inner width.\r\n\t\t *\r\n\t\t * Will automatically post the request data to the defined HPP\r\n\t\t * URL to load the HPP.\r\n\t\t *\r\n\t\t * @param {object} token The HPP request data\r\n\t\t * @returns the created window\r\n\t\t */\r\n\t\topenWindow: function (token) {\r\n\t\t\t//open new window\r\n\t\t\tvar tabWindow = window.open();\r\n\r\n\t\t\t// browsers can prevent a new window from being created\r\n\t\t\t// e.g. mobile Safari\r\n\t\t\tif (!tabWindow) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tvar doc = tabWindow.document;\r\n\r\n\t\t\t//add meta tag to new window (needed for iOS 8 bug)\r\n\t\t\tvar meta = doc.createElement(\"meta\");\r\n\t\t\tvar name = doc.createAttribute(\"name\");\r\n\t\t\tname.value = \"viewport\";\r\n\t\t\tmeta.setAttributeNode(name);\r\n\t\t\tvar content = doc.createAttribute(\"content\");\r\n\t\t\tcontent.value = \"width=device-width\";\r\n\t\t\tmeta.setAttributeNode(content);\r\n\t\t\tdoc.head.appendChild(meta);\r\n\r\n\t\t\t//create form, append to new window and submit\r\n\t\t\tvar form = internal.createForm(doc, token);\r\n\t\t\tdoc.body.appendChild(form);\r\n\t\t\tform.submit();\r\n\r\n\t\t\treturn tabWindow;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Creates a rudimentary URL parser using an anchor element\r\n\t\t *\r\n\t\t * @param {string} url\r\n\t\t * @returns the created anchor element\r\n\t\t */\r\n\t\tgetUrlParser: function (url) {\r\n\t\t\tvar parser = document.createElement('a');\r\n\t\t\tparser.href = url;\r\n\t\t\treturn parser;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Gets the hostname/origin from a URL. Used for origin checks\r\n\t\t *\r\n\t\t * @param {string} url\r\n\t\t * @returns the hostname/origin of the URL\r\n\t\t */\r\n\t\tgetHostnameFromUrl: function (url) {\r\n\t\t\treturn internal.getUrlParser(url).hostname;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Checks if the origin is HPP.\r\n\t\t *\r\n\t\t * @param {string} origin\r\n\t\t * @returns {boolean}\r\n\t\t */\r\n\t\tisHppOrigin: function(origin) {\r\n\t\t\tvar result = false;\r\n\t\t\tallowedHppUrls.forEach(function (url) {\r\n\t\t\t\tif (internal.getHostnameFromUrl(url) === origin) {\r\n\t\t\t\t\tresult = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\treturn result;\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Compares the origins from both arguments to validate we have received a postMessage\r\n\t\t * from the expected source\r\n\t\t *\r\n\t\t * @param {string} origin The origin attached to the recieved message\r\n\t\t * @param {string} hppUrl Our expected source origin\r\n\t\t * @returns true if the origins match\r\n\t\t */\r\n\t\tisMessageFromHpp: function (origin, hppUrl) {\r\n\t\t\tvar originHostName = internal.getHostnameFromUrl(origin);\r\n\t\t\treturn originHostName === internal.getHostnameFromUrl(hppUrl) || internal.isHppOrigin(originHostName);\r\n\t\t},\r\n\r\n\t\t/**\r\n\t\t * Handles messages from the HPP\r\n\t\t *\r\n\t\t * Messages from the HPP are one of:\r\n\t\t *\r\n\t\t * - iframe resize event\r\n\t\t * - transaction response\r\n\t\t * - error information\r\n\t\t *\r\n\t\t * @param {MessageEvent} e\r\n\t\t */\r\n\t\treceiveMessage: function (e) {\r\n\t\t\t//Check the origin of the response comes from HPP\r\n\t\t\tif (!internal.isMessageFromHpp(e.event.origin, hppUrl)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!e.event.data) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar evtdata = internal.decodeAnswer(e.event.data);\r\n\r\n\t\t\t// we received an invalid message from the HPP iframe (e.g. from a browser plugin)\r\n\t\t\t// return early to prevent invalid processing\r\n\t\t\tif (evtdata === null) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// check for iframe resize values\r\n\t\t\tif (evtdata.iframe || evtdata.embedded) {\r\n\t\t\t\tif (!isMobileNewTab()) {\r\n\t\t\t\t\tvar iframeWidth = evtdata.iframe.width;\r\n\t\t\t\t\tvar iframeHeight = evtdata.iframe.height;\r\n\r\n\t\t\t\t\tvar iFrame;\r\n\t\t\t\t\tvar resized = false;\r\n\r\n\t\t\t\t\tif (e.embedded) {\r\n\t\t\t\t\t\tiFrame = e.instance.getIframe();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tiFrame = document.getElementById(\"rxp-frame-\" + randomId);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (e.instance.events && e.instance.events.onResize) {\r\n\t\t\t\t\t\te.instance.events.onResize(evtdata.iframe);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (iframeWidth === \"390px\" && iframeHeight === \"440px\") {\r\n\t\t\t\t\t\tiFrame.setAttribute(\"width\", iframeWidth);\r\n\t\t\t\t\t\tiFrame.setAttribute(\"height\", iframeHeight);\r\n\t\t\t\t\t\tresized = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tiFrame.style.backgroundColor=\"#ffffff\";\r\n\r\n\t\t\t\t\tif (isMobileIFrame) {\r\n\t\t\t\t\t\tiFrame.style.marginLeft = \"0px\";\r\n\t\t\t\t\t\tiFrame.style.WebkitOverflowScrolling = \"touch\";\r\n\t\t\t\t\t\tiFrame.style.overflowX = \"scroll\";\r\n\t\t\t\t\t\tiFrame.style.overflowY = \"scroll\";\r\n\r\n\t\t\t\t\t\tif (!e.embedded) {\r\n\t\t\t\t\t\t\tvar overlay = document.getElementById(\"rxp-overlay-\" + randomId);\r\n\t\t\t\t\t\t\toverlay.style.overflowX = \"scroll\";\r\n\t\t\t\t\t\t\toverlay.style.overflowY = \"scroll\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (!e.embedded && resized) {\r\n\t\t\t\t\t\tiFrame.style.marginLeft = (parseInt(iframeWidth.replace(\"px\", \"\"), 10) / 2 * -1) + \"px\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (!e.embedded && resized) {\r\n\t\t\t\t\t\t// wrap the below in a setTimeout to prevent a timing issue on a\r\n\t\t\t\t\t\t// cache-miss load\r\n\t\t\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\t\t\tvar closeButton = document.getElementById(\"rxp-frame-close-\" + randomId);\r\n\t\t\t\t\t\t\tcloseButton.style.marginLeft = ((parseInt(iframeWidth.replace(\"px\", \"\"), 10) / 2) -7) + \"px\";\r\n\t\t\t\t\t\t}, 200);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tvar _close=function(){\r\n\t\t\t\t\tif (isMobileNewTab() && tabWindow) {\r\n\t\t\t\t\t\t//Close the new window\r\n\t\t\t\t\t\ttabWindow.close();\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t//Close the lightbox\r\n\t\t\t\t\t\te.instance.close();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tvar overlay=document.getElementById(\"rxp-overlay-\" + randomId);\r\n\t\t\t\t\tif(overlay) {\r\n\t\t\t\t\t\toverlay.remove();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t};\r\n\t\t\t\tvar response = e.event.data;\r\n\t\t\t\t//allow the script to intercept the answer, instead of redirecting to another page. (which is really a 90s thing)\r\n\t\t\t\tif (typeof e.url === 'function'){\r\n\t\t\t\t\te.url(evtdata, _close);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t_close();\r\n\t\t\t\t//Create a form and submit the hpp response to the merchant's response url\r\n\t\t\t\tvar form = document.createElement(\"form\");\r\n\t\t\t\tform.setAttribute(\"method\", \"POST\");\r\n\t\t\t\tform.setAttribute(\"action\", e.url);\r\n\t\t\t\tform.appendChild(internal.createFormHiddenInput(\"hppResponse\", response));\r\n\t\t\t\tdocument.body.appendChild(form);\r\n\t\t\t\tform.submit();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t/**\r\n\t * Public interface for the lightbox display mode\r\n\t */\r\n\tvar RxpLightbox = (function () {\r\n\t\tvar instance;\r\n\r\n\t\tfunction init() {\r\n\t\t\tvar overlayElement;\r\n\t\t\tvar spinner;\r\n\t\t\tvar iFrame;\r\n\t\t\tvar closeButton;\r\n\t\t\tvar token;\r\n\t\t\tvar isLandscape = internal.checkDevicesOrientation();\r\n\r\n\t\t\tif (isMobileIFrame) {\r\n\t\t\t\tif (window.addEventListener) {\r\n\t\t\t\t\t\twindow.addEventListener(\"orientationchange\", function () {\r\n\t\t\t\t\t\tisLandscape = internal.checkDevicesOrientation();\r\n\t\t\t\t\t}, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn {\r\n\t\t\t\tlightbox: function () {\r\n\t\t\t\t\tif (isMobileNewTab()) {\r\n\t\t\t\t\t\ttabWindow = internal.openWindow(token);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\toverlayElement = internal.createOverlay();\r\n\t\t\t\t\t\tvar temp = internal.createIFrame(overlayElement, token);\r\n\t\t\t\t\t\tspinner = temp.spinner;\r\n\t\t\t\t\t\tiFrame = temp.iFrame;\r\n\t\t\t\t\t\tcloseButton = temp.closeButton;\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tclose: function () {\r\n\t\t\t\t\tinternal.closeModal();\r\n\t\t\t\t},\r\n\t\t\t\tsetToken: function (hppToken) {\r\n\t\t\t\t\ttoken = hppToken;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\t// Get the Singleton instance if one exists\r\n\t\t\t// or create one if it doesn't\r\n\t\t\tgetInstance: function (hppToken) {\r\n\t\t\t\tif (!instance) {\r\n\t\t\t\t\tinstance = init();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Set the hpp token\r\n\t\t\t\tinstance.setToken(hppToken);\r\n\r\n\t\t\t\treturn instance;\r\n\t\t\t},\r\n\t\t\tinit: function (idOfLightboxButton, merchantUrl, serverSdkJson) {\r\n\t\t\t\t//Get the lightbox instance (it's a singleton) and set the sdk json\r\n\t\t\t\tvar lightboxInstance = RxpLightbox.getInstance(serverSdkJson);\r\n\r\n\t\t\t\t//if you want the form to load on function call, set to autoload\r\n\t\t\t\tif(idOfLightboxButton==='autoload'){\r\n\t\t\t\t\tlightboxInstance.lightbox();\r\n\t\t\t\t}\r\n\t\t\t\t// Sets the event listener on the PAY button. The click will invoke the lightbox method\r\n\t\t\t\telse if (document.getElementById(idOfLightboxButton).addEventListener) {\r\n\t\t\t\t\tdocument.getElementById(idOfLightboxButton).addEventListener(\"click\", lightboxInstance.lightbox, true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdocument.getElementById(idOfLightboxButton).attachEvent('onclick', lightboxInstance.lightbox);\r\n\t\t\t\t}\r\n\t\t\t\t//avoid multiple message event listener binded to the window object.\r\n\t\t\t\tinternal.removeOldEvtMsgListener();\r\n\t\t\t\tvar evtMsgFct = function (event) {\r\n\t\t\t\t\treturn internal.receiveMessage({ event: event, instance: lightboxInstance, url: merchantUrl, embedded: false });\r\n\t\t\t\t};\r\n\t\t\t\tinternal.evtMsg.push({ fct: evtMsgFct, opt: false });\r\n\t\t\t\tinternal.addEvtMsgListener(evtMsgFct);\r\n\t\t\t}\r\n\t\t};\r\n\t})();\r\n\r\n\t/**\r\n\t * Public interface for the embedded display mode\r\n\t */\r\n\tvar RxpEmbedded = (function () {\r\n\t\tvar instance;\r\n\t\tfunction init() {\r\n\t\t\tvar overlayElement;\r\n\t\t\tvar spinner;\r\n\t\t\tvar iFrame;\r\n\t\t\tvar closeButton;\r\n\t\t\tvar token;\r\n\r\n\t\t\treturn {\r\n\t\t\t\tembedded: function () {\r\n\t\t\t\t\tvar form = internal.createForm(document, token);\r\n\t\t\t\t\tif (iFrame) {\r\n\t\t\t\t\t\tif (iFrame.contentWindow.document.body) {\r\n\t\t\t\t\t\t\tiFrame.contentWindow.document.body.appendChild(form);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tiFrame.contentWindow.document.appendChild(form);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tform.submit();\r\n\t\t\t\t\t\tiFrame.style.display = \"inherit\";\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\tclose: function () {\r\n\t\t\t\t\tiFrame.style.display = \"none\";\r\n\t\t\t\t},\r\n\t\t\t\tsetToken: function (hppToken) {\r\n\t\t\t\t\ttoken = hppToken;\r\n\t\t\t\t},\r\n\t\t\t\tsetIframe: function (iframeId) {\r\n\t\t\t\t\tiFrame = document.getElementById(iframeId);\r\n\t\t\t\t\tconsole.log(iFrame);\r\n\t\t\t\t},\r\n\t\t\t\tgetIframe: function () {\r\n\t\t\t\t\treturn iFrame;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\t// Get the Singleton instance if one exists\r\n\t\t\t// or create one if it doesn't\r\n\t\t\tgetInstance: function (hppToken) {\r\n\t\t\t\tif (!instance) {\r\n\t\t\t\t\tinstance = init();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//Set the hpp token\r\n\t\t\t\tinstance.setToken(hppToken);\r\n\t\t\t\treturn instance;\r\n\t\t\t},\r\n\t\t\tinit: function (idOfEmbeddedButton, idOfTargetIframe, merchantUrl, serverSdkJson,events) {\r\n\t\t\t\t//Get the embedded instance (it's a singleton) and set the sdk json\r\n\t\t\t\tvar embeddedInstance = RxpEmbedded.getInstance(serverSdkJson);\r\n\t\t\t\tembeddedInstance.events=events;\r\n\r\n\t\t\t\tembeddedInstance.setIframe(idOfTargetIframe);\r\n\r\n\t\t\t\t//if you want the form to load on function call, set to autoload\r\n\t\t\t\tif(idOfEmbeddedButton==='autoload'){\r\n\t\t\t\t\tembeddedInstance.embedded();\r\n\t\t\t\t}\r\n\t\t\t\t// Sets the event listener on the PAY button. The click will invoke the embedded method\r\n\t\t\t\telse if (document.getElementById(idOfEmbeddedButton).addEventListener) {\r\n\t\t\t\t\tdocument.getElementById(idOfEmbeddedButton).addEventListener(\"click\", embeddedInstance.embedded, true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdocument.getElementById(idOfEmbeddedButton).attachEvent('onclick', embeddedInstance.embedded);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//avoid multiple message event listener binded to the window object.\r\n\t\t\t\tinternal.removeOldEvtMsgListener();\r\n\t\t\t\tvar evtMsgFct = function (event) {\r\n\t\t\t\t\treturn internal.receiveMessage({ event: event, instance: embeddedInstance, url: merchantUrl, embedded: true });\r\n\t\t\t\t};\r\n\t\t\t\tinternal.evtMsg.push({ fct: evtMsgFct, opt: false });\r\n\t\t\t\tinternal.addEvtMsgListener(evtMsgFct);\r\n\t\t\t}\r\n\t\t};\r\n\t})();\r\n\r\n\t/**\r\n\t * Public interface for the redirect display mode\r\n\t */\r\n\tvar RxpRedirect = (function () {\r\n\t\tvar instance;\r\n\r\n\t\tfunction init() {\r\n\t\t\tvar overlayElement;\r\n\t\t\tvar spinner;\r\n\t\t\tvar iFrame;\r\n\t\t\tvar closeButton;\r\n\t\t\tvar token;\r\n\t\t\tvar isLandscape = internal.checkDevicesOrientation();\r\n\r\n\t\t\tif (isMobileIFrame) {\r\n\t\t\t\tif (window.addEventListener) {\r\n\t\t\t\t\t\twindow.addEventListener(\"orientationchange\", function () {\r\n\t\t\t\t\t\tisLandscape = internal.checkDevicesOrientation();\r\n\t\t\t\t\t}, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn {\r\n\t\t\t\tredirect: function () {\r\n\t\t\t\t\tvar form = internal.createForm(document, token, true);\r\n\t\t\t\t\tdocument.body.append(form);\r\n\t\t\t\t\tform.submit();\r\n\t\t\t\t},\r\n\t\t\t\tsetToken: function (hppToken) {\r\n\t\t\t\t\ttoken = hppToken;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\t\treturn {\r\n\t\t\t// Get the singleton instance if one exists\r\n\t\t\t// or create one if it doesn't\r\n\t\t\tgetInstance: function (hppToken) {\r\n\t\t\t\tif (!instance) {\r\n\t\t\t\t\tinstance = init();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Set the hpp token\r\n\t\t\t\tinstance.setToken(hppToken);\r\n\r\n\t\t\t\treturn instance;\r\n\t\t\t},\r\n\t\t\tinit: function (idOfButton, merchantUrl, serverSdkJson) {\r\n\t\t\t\t// Get the redirect instance (it's a singleton) and set the sdk json\r\n\t\t\t\tvar redirectInstance = RxpRedirect.getInstance(serverSdkJson);\r\n\t\t\t\tredirectUrl = merchantUrl;\r\n\r\n\t\t\t\t// Sets the event listener on the PAY button. The click will invoke the redirect method\r\n\t\t\t\tif (document.getElementById(idOfButton).addEventListener) {\r\n\t\t\t\t\tdocument.getElementById(idOfButton).addEventListener(\"click\", redirectInstance.redirect, true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdocument.getElementById(idOfButton).attachEvent('onclick', redirectInstance.redirect);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//avoid multiple message event listener binded to the window object.\r\n\t\t\t\tinternal.removeOldEvtMsgListener();\r\n\t\t\t\tvar evtMsgFct = function (event) {\r\n\t\t\t\t\treturn internal.receiveMessage({ event: event, instance: redirectInstance, url: merchantUrl, embedded: false });\r\n\t\t\t\t};\r\n\t\t\t\tinternal.evtMsg.push({ fct: evtMsgFct, opt: false });\r\n\t\t\t\tinternal.addEvtMsgListener(evtMsgFct);\r\n\t\t\t}\r\n\t\t};\r\n\t}());\r\n\r\n\t/**\r\n\t * Public interface for the Realex HPP library\r\n\t */\r\n\treturn {\r\n\t\tinit: RxpLightbox.init,\r\n\t\tlightbox: {\r\n\t\t\tinit: RxpLightbox.init\r\n\t\t},\r\n\t\tembedded: {\r\n\t\t\tinit: RxpEmbedded.init\r\n\t\t},\r\n\t\tredirect: {\r\n\t\t\tinit: RxpRedirect.init\r\n\t\t},\r\n\t\tsetHppUrl: setHppUrl,\r\n\t\tsetMobileXSLowerBound: setMobileXSLowerBound,\r\n\t\t_internal: internal\r\n\t};\r\n\r\n}());\r\nvar RealexRemote = (function() {\r\n\r\n 'use strict';\r\n\r\n /*\r\n * Validate Card Number. Returns true if card number valid. Only allows\r\n * non-empty numeric values between 12 and 19 characters. A Luhn check is\r\n * also run against the card number.\r\n */\r\n var validateCardNumber = function(cardNumber) {\r\n // test numeric and length between 12 and 19\r\n if (!/^\\d{12,19}$/.test(cardNumber)) {\r\n return false;\r\n }\r\n\r\n // luhn check\r\n var sum = 0;\r\n var digit = 0;\r\n var addend = 0;\r\n var timesTwo = false;\r\n\r\n for (var i = cardNumber.length - 1; i >= 0; i--) {\r\n digit = parseInt(cardNumber.substring(i, i + 1), 10);\r\n if (timesTwo) {\r\n addend = digit * 2;\r\n if (addend > 9) {\r\n addend -= 9;\r\n }\r\n } else {\r\n addend = digit;\r\n }\r\n sum += addend;\r\n timesTwo = !timesTwo;\r\n }\r\n\r\n var modulus = sum % 10;\r\n if (modulus !== 0) {\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n /*\r\n * Validate Card Holder Name. Returns true if card holder valid. Only allows\r\n * non-empty ISO/IEC 8859-1 values 100 characters or less.\r\n */\r\n var validateCardHolderName = function(cardHolderName) {\r\n // test for undefined\r\n if (!cardHolderName) {\r\n return false;\r\n }\r\n\r\n // test white space only\r\n if (!cardHolderName.trim()) {\r\n return false;\r\n }\r\n\r\n // test ISO/IEC 8859-1 characters between 1 and 100\r\n if (!/^[\\u0020-\\u007E\\u00A0-\\u00FF]{1,100}$/.test(cardHolderName)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n /*\r\n * Validate CVN. Applies to non-Amex card types. Only allows 3 numeric\r\n * characters.\r\n */\r\n var validateCvn = function(cvn) {\r\n // test numeric length 3\r\n if (!/^\\d{3}$/.test(cvn)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n /*\r\n * Validate Amex CVN. Applies to Amex card types. Only allows 4 numeric\r\n * characters.\r\n */\r\n var validateAmexCvn = function(cvn) {\r\n // test numeric length 4\r\n if (!/^\\d{4}$/.test(cvn)) {\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n /*\r\n * Validate Expiry Date Format. Only allows 4 numeric characters. Month must\r\n * be between 1 and 12.\r\n */\r\n var validateExpiryDateFormat = function(expiryDate) {\r\n\r\n // test numeric of length 4\r\n if (!/^\\d{4}$/.test(expiryDate)) {\r\n return false;\r\n }\r\n\r\n var month = parseInt(expiryDate.substring(0, 2), 10);\r\n var year = parseInt(expiryDate.substring(2, 4), 10);\r\n\r\n // test month range is 1-12\r\n if (month < 1 || month > 12) {\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n /*\r\n * Validate Expiry Date Not In Past. Also runs checks from\r\n * validateExpiryDateFormat.\r\n */\r\n var validateExpiryDateNotInPast = function(expiryDate) {\r\n // test valid format\r\n if (!validateExpiryDateFormat(expiryDate)) {\r\n return false;\r\n }\r\n\r\n var month = parseInt(expiryDate.substring(0, 2), 10);\r\n var year = parseInt(expiryDate.substring(2, 4), 10);\r\n\r\n // test date is not in the past\r\n var now = new Date();\r\n var currentMonth = now.getMonth() + 1;\r\n var currentYear = now.getFullYear();\r\n if (year < (currentYear % 100)) {\r\n return false;\r\n } else if (year === (currentYear % 100) && month < currentMonth) {\r\n return false;\r\n }\r\n\r\n return true;\r\n };\r\n\r\n return {\r\n validateCardNumber : validateCardNumber,\r\n validateCardHolderName : validateCardHolderName,\r\n validateCvn : validateCvn,\r\n validateAmexCvn : validateAmexCvn,\r\n validateExpiryDateFormat : validateExpiryDateFormat,\r\n validateExpiryDateNotInPast : validateExpiryDateNotInPast\r\n };\r\n}());\r\n","import React, { Component } from 'react';\r\nimport \"./Button.css\";\r\n\r\nexport class Button extends Component {\r\n static displayName = Button.name;\r\n static defaultProps = {\r\n className: '',\r\n disabled: false,\r\n type: 'button',\r\n loading: false\r\n }\r\n \r\n render() {\r\n return (\r\n this.props.hidden ?\r\n null :\r\n \r\n \r\n {this.props.children}\r\n \r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport axios from 'axios';\r\nimport { CompanyContext } from '../CompanyContext';\r\n\r\nconst useFetch = () => {\r\n const { setError } = React.useContext(CompanyContext);\r\n\r\n const [data, setData] = React.useState({});\r\n const [opts, setOpts] = React.useState({});\r\n const [isLoading, setIsLoading] = React.useState(false);\r\n const [promise, setPromise] = React.useState({});\r\n\r\n const doFetch = (opts) => {\r\n setOpts(opts);\r\n\r\n return new Promise((resolve, reject) => {\r\n setPromise({ resolve, reject });\r\n });\r\n }\r\n\r\n React.useEffect(() => {\r\n const fetchData = async (resolve, reject) => {\r\n setError(null);\r\n setIsLoading(true);\r\n\r\n try {\r\n const result = await axios(opts)\r\n .catch(error => {\r\n setPromise({});\r\n setIsLoading(false);\r\n\r\n const response = error.response;\r\n\r\n if (!response) {\r\n reject(error);\r\n return;\r\n }\r\n\r\n setError({\r\n Message: 'This site is currently experiencing technical difficulty',\r\n Dismissable: true,\r\n Code: '0x02'\r\n });\r\n });\r\n\r\n resolve(result);\r\n setData(result.data);\r\n } catch (error) {\r\n reject(error);\r\n setError({\r\n Message: 'This site is currently experiencing technical difficulty',\r\n Dismissable: true,\r\n Code: '0x03'\r\n });\r\n }\r\n\r\n setPromise({});\r\n setIsLoading(false);\r\n };\r\n\r\n if (promise.resolve && promise.reject) {\r\n fetchData(promise.resolve, promise.reject);\r\n }\r\n }, [promise]);\r\n\r\n return { data, isLoading, doFetch };\r\n}\r\n\r\nexport { useFetch };\r\n","import React, { useEffect } from 'react';\r\nimport { useParams, useHistory } from 'react-router';\r\nimport NumberFormat from 'react-number-format';\r\nimport ReCAPTCHA from \"react-google-recaptcha\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Element, scroller } from \"react-scroll\";\r\nimport { Trans } from 'react-i18next';\r\nimport { RealexHpp } from '../lib/rxp-js/dist/rxp-js';\r\n\r\nimport { Button } from \"./Button.js\";\r\nimport { useFetch } from \"./useFetch\";\r\nimport { useTranslation } from 'react-i18next';\r\nimport { CompanyContext } from '../CompanyContext';\r\n\r\nimport './Payment.css';\r\n\r\nexport function Payment() {\r\n const { company, config, t } = React.useContext(CompanyContext);\r\n const history = useHistory();\r\n let { org, section } = useParams();\r\n\r\n let [order, setOrder] = React.useState({});\r\n let [invoices, setInvoices] = React.useState([]);\r\n let [submitEnabled, setSubmitEnabled] = React.useState([false]);\r\n let [ hideCheckoutSection, setHideCheckoutSection ] = React.useState(true);\r\n \r\n let totalPaymentAmount = (invoices) => invoices.map(invoice => invoice.Payment).reduce((a, b) => a + b, 0);\r\n\r\n React.useEffect(() => {\r\n if (section !== 'review' && hideCheckoutSection === false) {\r\n setHideCheckoutSection(true);\r\n }\r\n }, [hideCheckoutSection, setHideCheckoutSection, section]);\r\n\r\n return (company &&\r\n
\r\n {!section &&\r\n <>\r\n

{t('Pay Hospital Bill')}

\r\n

{t('Step 1 of 4')}

\r\n
\r\n\r\n
\r\n

{t('Please complete the following information as per your invoice.')}

\r\n
\r\n {company.InvoiceSampleUrl && {t('Hospital Bill/Invoice Sample')}}\r\n {company.StatementSampleUrl && {t('Hospital Statement Sample')}}\r\n {t('Online Payment Frequently Asked Questions (FAQs)')}\r\n
\r\n
\r\n\r\n
\r\n
{company.FullName}'s {t('Privacy Policy')}.
\r\n
\r\n\r\n \r\n\r\n {order?.Invoices &&\r\n <>\r\n
\r\n\r\n

{t('Invoice Cart')}

\r\n

{t('Please note: All invoice amounts are in Canadian Dollars (CAD)')}

\r\n\r\n \r\n\r\n
\r\n
{t('Total Invoice Amount')}
\r\n
i.InvoiceAmount).reduce((a, b) => a + b, 0)} />
\r\n\r\n
{t('Total Payment')}
\r\n
\r\n
\r\n\r\n

\r\n {t('Disclaimer: If you do not see your invoice, please allow up to 3 to 5 business days for processing time in order for your invoice to show.')}\r\n

\r\n \r\n \r\n {t('Submit')} \r\n \r\n }\r\n \r\n }\r\n {section === 'review' && invoices.length > 0 &&\r\n <>\r\n \r\n