You are on page 1of 25

"use strict";

function getTokenSchemeProperties(n) {
var r = n.toString().toLowerCase(), t = {
baseRegEx: "^.{1,1000}$",
limitInput: interactions.doNotLimitInput
}, u, i;
try {
if (isNaN(r))
typeof tokenSchemes[r] != "undefined" && (t.baseRegEx =
tokenSchemes[r].baseRegEx,
t.limitInput = tokenSchemes[r].limitInput);
else
for (u = Object.keys(tokenSchemes),
i = 0; i < u.length; i++)
tokenSchemes[u[i]].value == r && (t.baseRegEx =
tokenSchemes[u[i]].baseRegEx,
t.limitInput = tokenSchemes[u[i]].limitInput)
} catch (f) {
return t
}
return t
}
function TokenScheme(n, t, i) {
this.value = n;
this.baseRegEx = t;
this.limitInput = i
}
function setKountSessionId(n) {
elements.kountSessionId.value = n.MercSessId
}
function setFraudServicesRiskRequestModel(n) {
elements.fraudServicesRiskRequestModel.value = n
}
function setUserDefinedStyles(n) {
if ("base"in n &&
elements.userDefinedStyle.appendChild(document.createTextNode("input {" + n.base +
"}")),
"focus"in n &&
elements.userDefinedStyle.appendChild(document.createTextNode("input:focus {" +
n.focus + "}")),
"error"in n &&
elements.userDefinedStyle.appendChild(document.createTextNode("input.error {" +
n.error + "}")),
"placeholder"in n &&
(elements.userDefinedStyle.appendChild(document.createTextNode("input::placeholder
{" + n.placeholder + "}")),
elements.userDefinedStyle.appendChild(document.createTextNode("input::-webkit-
input-placeholder {" + n.placeholder + "}")),
elements.userDefinedStyle.appendChild(document.createTextNode("input::-moz-
placeholder {" + n.placeholder + "}")),
elements.userDefinedStyle.appendChild(document.createTextNode("input:-ms-input-
placeholder {" + n.placeholder + "}")),
elements.userDefinedStyle.appendChild(document.createTextNode("input:-moz-
placeholder {" + n.placeholder + "}"))),
isDetokenizeIframe)
var t = setInterval(function() {
try {
getCvvWindow() && (setUserDefinedCvvStyles(n),
clearInterval(t))
} catch (i) {
log(i)
}
}, 5);
else
mode.pcicvv && "cvv"in n && ("base"in n.cvv &&
cvvWindow.elements.userDefinedStyle.appendChild(document.createTextNode("input {" +
n.cvv.base + "}")),
"focus"in n.cvv &&
cvvWindow.elements.userDefinedStyle.appendChild(document.createTextNode("input:focu
s {" + n.cvv.focus + "}")),
"error"in n.cvv &&
cvvWindow.elements.userDefinedStyle.appendChild(document.createTextNode("input.erro
r {" + n.cvv.error + "}")),
"placeholder"in n.cvv &&
(cvvWindow.elements.userDefinedStyle.appendChild(document.createTextNode("input::pl
aceholder {" + n.cvv.placeholder + "}")),

cvvWindow.elements.userDefinedStyle.appendChild(document.createTextNode("input::-
webkit-input-placeholder {" + n.cvv.placeholder + "}")),

cvvWindow.elements.userDefinedStyle.appendChild(document.createTextNode("input::-
moz-placeholder {" + n.cvv.placeholder + "}")),

cvvWindow.elements.userDefinedStyle.appendChild(document.createTextNode("input:-ms-
input-placeholder {" + n.cvv.placeholder + "}")),

cvvWindow.elements.userDefinedStyle.appendChild(document.createTextNode("input:-
moz-placeholder {" + n.cvv.placeholder + "}"))))
}
function setUserDefinedCvvStyles(n) {
var t = getCvvWindow();
"cvv"in n && ("base"in n.cvv &&
t.elements.userDefinedStyle.appendChild(document.createTextNode("input {" +
n.cvv.base + "}")),
"focus"in n.cvv &&
t.elements.userDefinedStyle.appendChild(document.createTextNode("input:focus {" +
n.cvv.focus + "}")),
"error"in n.cvv &&
t.elements.userDefinedStyle.appendChild(document.createTextNode("input.error {" +
n.cvv.error + "}")),
"placeholder"in n.cvv &&
(t.elements.userDefinedStyle.appendChild(document.createTextNode("input::placeholde
r {" + n.cvv.placeholder + "}")),
t.elements.userDefinedStyle.appendChild(document.createTextNode("input::-
webkit-input-placeholder {" + n.cvv.placeholder + "}")),
t.elements.userDefinedStyle.appendChild(document.createTextNode("input::-moz-
placeholder {" + n.cvv.placeholder + "}")),
t.elements.userDefinedStyle.appendChild(document.createTextNode("input:-ms-
input-placeholder {" + n.cvv.placeholder + "}")),
t.elements.userDefinedStyle.appendChild(document.createTextNode("input:-moz-
placeholder {" + n.cvv.placeholder + "}"))))
}
function checkValidity(n, t) {
var i = {
event: "validate",
data: {
isValid: !0
}
}, r, u;
return (n === undefined && (n = !1),
t === undefined && (t = !1),
mode.cvvonly) ? (i.data.isValid = !1,
validations.required() ? validations.cvvValidate() ? (i.data.isValid = !0,
util.removeError()) : (util.addError(),
i.data.validator = "format") : (util.addError(),
i.data.validator = "required"),
ariaRequired && setAriaInvalid(!i.data.isValid),
postToParent(i),
i.data.isValid) : mode.pci || mode.pcicvv ? (i.data.isValid = !1,
validations.required() ? validations.panValidate() ? i.data.isValid = !0 : (t
&& util.addError(),
i.data.validator = "format") : (t && util.addError(),
i.data.validator = "required"),
mode.pcicvv && (i.data.isCvvValid = !1,
r = currentDataType !== undefined && currentDataType !== null ?
currentDataType.cvvRequired : !0,
u = cvvWindow.elements.data.value.replace(/[^0-9]/g, ""),
r && !cvvWindow.validations.required() ? (n && cvvWindow.util.addError(),
i.data.cvvValidator = "required") : (r || u !== "") && !
cvvWindow.validations.cvvValidate() ? (n && cvvWindow.util.addError(),
i.data.cvvValidator = "format") : (i.data.isCvvValid = !0,
n && cvvWindow.util.removeError())),
i.data.isValid && (util.removeError(),
i.data.cardType = currentDataType !== undefined && currentDataType !== null ?
currentDataType.type : "unknown",
i.data.lastFour = util.getLastFour(elements.data.value),
i.data.firstSix = util.getFirstSix(elements.data.value)),
ariaRequired && (setAriaInvalid(!i.data.isValid),
setAriaInvalidCvv(!i.data.isCvvValid)),
postToParent(i),
mode.pcicvv ? i.data.isValid && i.data.isCvvValid : i.data.isValid) :
(i.data.isValid = !1,
validations.required() ? validations.validate() ?
validations.customValidate() ? (util.removeError(),
i.data.isValid = !0,
i.data.characterCount = elements.data.value.length) : (util.addError(),
i.data.validator = "customRegEx") : (util.addError(),
i.data.validator = "format") : (util.addError(),
i.data.validator = "required"),
ariaRequired && setAriaInvalid(!i.data.isValid),
postToParent(i),
i.data.isValid)
}
function tokenize() {
if (!posting && !mode.cvv) {
if (mode.pcicvv) {
if (elements.data.value === previousData &&
cvvWindow.elements.data.value === previousCvv && previousResponse && !newAttempt) {
postToParent({
event: "tokenize",
data: previousResponse
});
return
}
} else if (elements.data.value === previousData && previousResponse && !
newAttempt) {
postToParent({
event: "tokenize",
data: previousResponse
});
return
}
newAttempt = !1;
var t = new XMLHttpRequest
, n = {};
n.TokenExID = elements.tokenExID.value;
n.Origin = elements.origin.value;
n.AuthenticationKey = elements.authenticationKey.value;
n.Timestamp = elements.timestamp.value;
n.Data = elements.data.value;
mode.pcicvv && (n.CvvValue = cvvWindow.elements.data.value);
mode.cvvonly && (n.Token = elements.token.value);
n.TokenScheme = elements.tokenScheme.value;
n.CvvOnly = elements.cvvOnly.value;
n.PCI = elements.pciMode.value;
n.ReturnHash = elements.returnKhash;
n.use3DS = elements.use3DS.value;
n.ThreeDSMethodNotificationUrl =
elements.threeDSMethodNotificationUrl.value;
n.kountSessionId = elements.kountSessionId.value;
n.fraudMerchantId = elements.kountMerchantId.value;
n.UseKount = elements.useKount.value;
n.FraudServicesRiskRequestModel =
elements.fraudServicesRiskRequestModel.value;
n.EnforceLuhnCompliance = elements.enforceLuhnCompliance.value;
n.CustomDataLuhnCheck = typeof currentDataType != "undefined" &&
currentDataType !== null ? currentDataType.luhnCheck : !0;
t.open("POST", window.location, !0);
t.setRequestHeader("Content-Type", "application/json");
t.onreadystatechange = function() {
if (t.readyState === 4 && t.status === 200) {
posting = !1;
var n = parseJSON(t.responseText);
n.error ? postToParent({
event: "error",
data: n
}) : ((mode.pci || mode.pcicvv) && (n.cardType = typeof
currentDataType != "undefined" && currentDataType !== null ? currentDataType.type :
"unknown"),
postToParent({
event: "tokenize",
data: n
}),
previousData = elements.data.value,
previousResponse = n,
mode.pcicvv && (previousCvv = cvvWindow.elements.data.value))
}
}
;
posting = !0;
t.send(JSON.stringify(n))
}
}
function callForterInit(n) {
var t, i, r;
n === forterPreviousCC && postToParent({
event: "forterInit",
data: forterPreviousResponse
});
t = new XMLHttpRequest;
i = {};
i.TokenExID = elements.tokenExID.value;
i.Origin = elements.origin.value;
i.AuthenticationKey = elements.authenticationKey.value;
i.Timestamp = elements.timestamp.value;
i.Data = n;
i.CvvOnly = elements.cvvOnly.value;
i.PCI = elements.pciMode.value;
i.ForterSiteId = forterSiteId;
i.ForterUsername = forterUsername;
r = window.location.origin + window.location.pathname + "/Forter" +
window.location.search;
t.open("POST", r, !0);
t.setRequestHeader("Content-Type", "application/json");
t.onreadystatechange = function() {
var i, r;
t.readyState === 4 && t.status === 200 ? (posting = !1,
i = parseJSON(t.responseText),
i.error ? postToParent({
event: "error",
data: i
}) : (r = i.forterInitResponse,
postToParent({
event: "forterInit",
data: parseJSON(r)
}),
forterPreviousResponse = r,
forterPreviousCC = n)) : t.readyState === 4 && t.status !== 200 &&
postToParent({
event: "error",
data: "Forter Init3DS error: " + t.responseText
})
}
;
posting = !0;
t.send(JSON.stringify(i))
}
function enableValidateOnBlur() {
validateOnBlur = !0
}
function setAriaInvalid(n) {
elements.data.setAttribute("aria-invalid", n)
}
function setAriaInvalidCvv(n) {
cvvWindow.elements.data.setAttribute("aria-invalid", n)
}
function messageListener(n) {
var i, t;
n && n.data && (i = parseJSON(n.data),
i) && n.origin === elements.origin.value.split(",")[0] && (t = i.command,
t) && commands.hasOwnProperty(t) && commands[t].enabled && typeof
commands[t].func == "function" && commands[t].func(i)
}
function setAllowUnknownTypes() {
allowUnknownTypes = !0;
mode.pcicvv && (cvvWindow.allowUnknownTypes = !0)
}
function setCustomDataTypes(n) {
for (var r, i = n, u = !1, t = 0; t < i.length; t++) {
for (i[t].luhnCheck === undefined ? i[t].luhnCheck = !0 : i[t].luhnCheck !
== undefined && (i[t].luhnCheck = typeof i[t].luhnCheck == "boolean" ?
Boolean(i[t].luhnCheck) : typeof i[t].luhnCheck == "string" && i[t].luhnCheck !==
"false"),
(i[t].cvvRequired === undefined || i[t].cvvRequired !== undefined &&
i[t].cvvRequired.toString().toLowerCase() !== "true" &&
i[t].cvvRequired.toString().toLowerCase() !== "false") && (i[t].cvvRequired = !0),
u = !1,
r = 1; r <= dataTypeCollection.dataTypes.length - 1; r++)
if (dataTypeCollection.dataTypes[r].type.toLowerCase() ===
i[t].type.toLowerCase()) {
dataTypeCollection.dataTypes.splice(r, 1, i[t]);
u = !0;
break
}
u || dataTypeCollection.dataTypes.push(i[t])
}
dataTypeCollection.setDataTypeMaxLength()
}
function setCustomRegEx(n) {
validations.customRegEx = n
}
function reset() {
mode.pcicvv && (cvvWindow.elements.data.value = "",
cvvWindow.util.removeError());
previousData = null;
previousCvv = null;
previousResponse = null;
elements.data.value = "";
util.removeError();
postToParent({
event: "reset",
data: {
value: !0
}
})
}
function setExpirationTimeout(n) {
clearTimeout(expirationTimeout);
expirationTimeout = setTimeout(function() {
postToParent({
event: "expired"
})
}, n * 1e3)
}
function setNewAttemptTimeout(n) {
clearTimeout(newAttemptTimeout);
newAttemptTimeout = setTimeout(function() {
newAttempt = !0;
setNewAttemptTimeout(n)
}, n * 1e3)
}
function setCvvBlur() {
cvvWindow.setBlur()
}
function setBlur() {
if (util.isIos()) {
var n = document.getElementById("iosFix");
n || (n = document.createElement("input"),
n.type = "button",
n.style.height = "0px",
n.style.width = "0px",
n.style.opacity = "0",
n.style.padding = "0",
n.style.position = "absolute",
n.style.left = "-200%",
n.style.top = "0px",
n.setAttribute("id", "iosFix"),
document.body.insertBefore(n, document.body.firstChild));
n.focus();
n.blur()
} else
elements.data.blur()
}
function setFocus() {
util.isFirefox() ? window.focus() : elements.data.focus()
}
function setCvvFocus() {
cvvWindow.elements.data.focus()
}
function enablePrettyFormat() {
if (isDetokenizeIframe) {
interactions.formatCreditCard();
return
}
(mode.pci || mode.pcicvv) && elements.data.type === "text" &&
(util.addEventListener(elements.data, "keyup",
interactions.prettyprintkeyUpHandler),
util.addEventListener(elements.data, "change", interactions.formatCreditCard),
util.addEventListener(elements.data, "keydown", interactions.handleBackSpace),
util.addEventListener(elements.data, "keydown", interactions.limitLength),
util.removeEventListener(elements.data, "keyup",
interactions.limitInputToNumeric),
elements.data.maxLength = dataTypeMaxLength > 19 ? dataTypeMaxLength + 4 : 23)
}
function enableValidateOnKeyUp() {
validateOnKeyUp = !0
}
function enableValidateOnCvvKeyUp() {
validateOnCvvKeyUp = !0
}
function setType(n) {
util.setType(n)
}
function setCvvType(n) {
mode.pcicvv && cvvWindow.util.setType(n)
}
function log(n) {
window.console && debug && console.log("TokenEx Iframe debug: " +
JSON.stringify(n))
}
function postToParent(n) {
log(n);
n.container = elements.containerID.value;
parent.postMessage(JSON.stringify(n), elements.origin.value.split(",")[0])
}
function loadValidation() {
if (!isDetokenizeIframe) {
var n = getTokenSchemeProperties(elements.tokenScheme.value.toLowerCase());
validations.baseRegEx = n.baseRegEx;
validations.limitInput = n.limitInput
}
}
function setCvvWindow() {
cvvWindow = getCvvWindow();
util.addEventListener(cvvWindow.elements.data, "blur",
handlers.cvvBlurHandler);
util.addEventListener(cvvWindow.elements.data, "focus",
handlers.cvvFocusHandler);
util.addEventListener(cvvWindow.elements.data, "change",
handlers.cvvChangeHandler);
util.addEventListener(cvvWindow.elements.data, "keyup",
handlers.cvvKeyUpHandler);
cvvWindow.elements.data.maxLength = 4;
cvvLoaded = !0
}
function getCvvWindow() {
return window.parent.frames["tx_iframe_cvv_" + elements.cvvContainerID.value]
}
function setNameToCardNumber() {
elements.data.setAttribute("name", "cardNumber")
}
function cvv_init() {
try {
getCvvWindow() && (setCvvWindow(),
postToParent({
event: "load",
data: {
value: !0
}
}),
clearInterval(messageInterval))
} catch (n) {
log(n)
}
}
function setMode() {
var n = elements.pciMode !== null && elements.pciMode.value.toLowerCase() ===
"true"
, r = elements.cvvOnly.value.toLowerCase() === "true"
, t = elements.mode !== null && elements.mode.value.toLowerCase() === "cvv"
, u = elements.mode !== null && elements.mode.value.toLowerCase() === "data"
, i = elements.cvv !== null && elements.cvv.value.toLowerCase() === "true";
r ? mode.cvvonly = !0 : n && t && i ? mode.cvv = !0 : n && u && i ? mode.pcicvv
= !0 : n ? mode.pci = !0 : isDetokenizeIframe && t ? mode.cvv = !0 : mode.pii = !0
}
function page_init() {
if (elements.error) {
postToParent({
event: "error",
data: parseJSON(elements.error.value)
});
return
}
setMode();
util.addEventListener(window, "focus", handlers.windowFocus);
mode.cvv || (window.addEventListener ? addEventListener("message",
messageListener, !1) : attachEvent("onmessage", messageListener),
isDetokenizeIframe || elements.returnAutoCompleteValues.value === "False" ||
util.addEventListener(elements.autoCompleteCardExp, "change",
handlers.returnAutoCompleteValuesHandler));
mode.cvvonly ? (util.addEventListener(elements.data, "keyup",
interactions.limitInputToNumeric),
util.addEventListener(elements.data, "keydown", interactions.limitLength),
util.addEventListener(elements.data, "focus", handlers.focusHandler),
util.addEventListener(elements.data, "change", handlers.changeHandler),
util.addEventListener(elements.data, "blur", handlers.blurHandler),
elements.data.maxLength = 4,
postToParent({
event: "load",
data: {
value: !0
}
})) : mode.pcicvv ? (util.addEventListener(elements.data, "keyup",
interactions.limitInputToNumeric),
util.addEventListener(elements.data, "keydown", interactions.limitLength),
util.addEventListener(elements.data, "keyup", handlers.keyupHandler),
util.addEventListener(elements.data, "focus", handlers.focusHandler),
util.addEventListener(elements.data, "change", handlers.changeHandler),
util.addEventListener(elements.data, "blur", handlers.blurHandler),
setNameToCardNumber(),
messageInterval = setInterval(cvv_init, 5)) : mode.cvv ?
(util.addEventListener(elements.data, "keyup", interactions.limitInputToNumeric),
util.addEventListener(elements.data, "keydown", interactions.limitLength),
elements.data.maxLength = 4) : mode.pci ? (util.addEventListener(elements.data,
"keyup", interactions.limitInputToNumeric),
util.addEventListener(elements.data, "keydown", interactions.limitLength),
util.addEventListener(elements.data, "keyup", handlers.keyupHandler),
util.addEventListener(elements.data, "focus", handlers.focusHandler),
util.addEventListener(elements.data, "change", handlers.changeHandler),
util.addEventListener(elements.data, "blur", handlers.blurHandler),
setNameToCardNumber(),
postToParent({
event: "load",
data: {
value: !0
}
})) : (loadValidation(),
util.addEventListener(elements.data, "keyup", validations.limitInput),
util.addEventListener(elements.data, "focus", handlers.focusHandler),
util.addEventListener(elements.data, "change", handlers.changeHandler),
util.addEventListener(elements.data, "blur", handlers.blurHandler),
postToParent({
event: "load",
data: {
value: !0
}
}));
setExpirationTimeout(timeoutInSeconds);
setNewAttemptTimeout(newAttemptTimeout)
}
function getQueryObject() {
if (!queryObject && (queryObject = {},
window.location.search.length)) {
var n = window.location.search.substr(1).split("&");
n.forEach(function(n) {
var t = n.split("=")
, i = decodeURIComponent(t[0])
, r = decodeURIComponent(t[1]);
queryObject[i] = r
})
}
return queryObject
}
function parseJSON(n) {
try {
return JSON.parse(n)
} catch (t) {
return null
}
}
function ready(n) {
document.addEventListener ? document.addEventListener("DOMContentLoaded", n) :
document.attachEvent("onreadystatechange", function() {
document.readyState === "complete" && n()
})
}
var elements = {}, mode = {
pii: !1,
pci: !1,
cvvonly: !1,
pcicvv: !1,
cvv: !1
}, currentDataType, previousCardType, debug = !1, posting = !1, validateOnBlur = !
1, previousData, previousCvv, previousResponse, allowUnknownTypes = !1, cvvLoaded =
!1, cvv = !1, cvvMode = !1, cvvOnlyMode = !1, cvvWindow, messageInterval,
dataTypeMaxLength = 19, ariaRequired = !1, forterSiteId, forterUsername,
forterPreviousResponse, forterPreviousCC, queryObject, validateOnKeyUp = !1,
validateOnCvvKeyUp = !1, initialInputType = "text", expirationTimeout,
tokenizeTimeoutDefault = getQueryObject().ExpiresInSeconds || 1200,
tokenizeTimeoutMax = getQueryObject().ExpiresInSeconds || 1200,
detokenizeTimeoutDefault = getQueryObject().ExpiresInSeconds || 20,
detokenizeTimeoutMax = 60, isDetokenizeIframe =
window.location.pathname.indexOf("detokenize") > -1, timeoutDefault =
isDetokenizeIframe ? detokenizeTimeoutDefault : tokenizeTimeoutDefault, timeoutMax
= isDetokenizeIframe ? detokenizeTimeoutMax : tokenizeTimeoutMax, timeoutInSeconds
= getQueryObject().ExpiresInSeconds || timeoutDefault, handlers;
timeoutInSeconds = Math.min(timeoutInSeconds, timeoutMax);
var newAttemptTimeout = 300
, newAttempt = !1
, commands = {
reset: {
enabled: !0,
func: function() {
reset()
}
},
kountDataCollectionEnd: {
enabled: !0,
func: function(n) {
setKountSessionId(n.data)
}
},
setFraudServicesRiskRequestModel: {
enabled: !0,
func: function(n) {
setFraudServicesRiskRequestModel(n.data)
}
},
setStyle: {
enabled: !0,
func: function(n) {
setUserDefinedStyles(n.data)
}
},
setPlaceholder: {
enabled: !0,
func: function(n) {
elements.data.placeholder = n.data
}
},
setCvvPlaceholder: {
enabled: !0,
func: function(n) {
cvvWindow.elements.data.placeholder = n.data
}
},
setCardType: {
enabled: !0,
func: function(n) {
mode.cvvonly ?
(validations.setCurrentCardType(dataTypeCollection.getDataTypes(n.data)),
elements.data.length = currentDataType.cvvMaxLength) :
(validations.setCurrentCardType(dataTypeCollection.getDataTypes("unknown")),
cvvWindow.elements.data.length = currentDataType.cvvMaxLength)
}
},
validate: {
enabled: !0,
func: function() {
checkValidity(mode.pcicvv, !0)
}
},
tokenize: {
enabled: !0,
func: function() {
!posting && checkValidity(mode.pcicvv, !0) && tokenize()
}
},
enablePrettyFormat: {
enabled: !0,
func: function() {
enablePrettyFormat()
}
},
enableDebug: {
enabled: !1,
func: function() {
debug = !0
}
},
setType: {
enabled: !0,
func: function(n) {
setType(n.data)
}
},
setCvvType: {
enabled: !0,
func: function(n) {
setCvvType(n.data)
}
},
focus: {
enabled: !0,
func: function() {
setFocus()
}
},
toggleMask: {
enabled: !0,
func: function() {
var n = elements.data.type === "password";
elements.data.type = n ? initialInputType : "password";
postToParent({
event: "toggleMask",
data: {
inputMasked: !n
}
})
}
},
toggleCvvMask: {
enabled: !0,
func: function() {
var n = cvvWindow.elements.data.type === "password";
cvvWindow.elements.data.type = n ? initialInputType : "password";
postToParent({
event: "toggleCvvMask",
data: {
cvvInputMasked: !n
}
})
}
},
cvvFocus: {
enabled: !0,
func: function() {
setCvvFocus()
}
},
blur: {
enabled: !0,
func: function() {
setBlur()
}
},
cvvBlur: {
enabled: !0,
func: function() {
setCvvBlur()
}
},
setCustomRegEx: {
enabled: !0,
func: function(n) {
setCustomRegEx(n.data)
}
},
enableValidateOnBlur: {
enabled: !0,
func: function() {
enableValidateOnBlur()
}
},
enableAriaRequired: {
enabled: !0,
func: function() {
ariaRequired = !0;
elements.data.setAttribute("aria-required", !0);
mode.pcicvv && cvvWindow.elements.data.setAttribute("aria-required", !
0)
}
},
enableForterIntegration: {
enabled: !0,
func: function(n) {
forterSiteId = n.data.forterSiteId;
forterUsername = n.data.forterUsername
}
},
enableUnknownCardTypes: {
enabled: !0,
func: function() {
setAllowUnknownTypes()
}
},
setCustomDataTypes: {
enabled: !0,
func: function(n) {
setCustomDataTypes(n.data)
}
},
enableAutoComplete: {
enabled: !0,
func: function() {
elements.data.autocomplete = mode.cvvonly ? "cc-csc" : "cc-number";
mode.pcicvv && (cvvWindow.elements.data.autocomplete = "cc-csc")
}
},
enableValidateOnKeyUp: {
enabled: !0,
func: function() {
enableValidateOnKeyUp()
}
},
enableValidateOnCvvKeyUp: {
enabled: !0,
func: function() {
enableValidateOnCvvKeyUp()
}
},
setFont: {
enabled: !0,
func: function(n) {
var e = "https://fonts.googleapis.com/css2?display=swap&family=" +
n.data, t = n.data.split(":"), s = decodeURI(t[0]).replace("+", " "), o = "normal",
r = 0, u, i, f;
if (t.length > 1) {
t = t[1].split(",");
for (u in t)
if (t[u] == "ital")
o = "italic";
else {
if (i = parseInt(t[u]),
isNaN(i))
continue;
i > r && (r = i)
}
}
f = "input { font-family: '" + s + "'; font-weight: " + (r || "normal")
+ "; font-style: " + o + "; }";
elements.googleFontStyle || (elements.googleFontStyle =
document.createElement("link"),
elements.googleFontStyle.rel = "stylesheet",
elements.head.appendChild(elements.googleFontStyle));
elements.fontStyle || (elements.fontStyle =
document.createElement("style"),
elements.head.appendChild(elements.fontStyle));
mode.pcicvv && !cvvWindow.elements.googleFontStyle &&
(cvvWindow.elements.googleFontStyle = document.createElement("link"),
cvvWindow.elements.googleFontStyle.rel = "stylesheet",

cvvWindow.elements.head.appendChild(cvvWindow.elements.googleFontStyle));
mode.pcicvv && !cvvWindow.elements.fontStyle &&
(cvvWindow.elements.fontStyle = document.createElement("style"),
cvvWindow.elements.head.appendChild(cvvWindow.elements.fontStyle));
mode.pcicvv && (cvvWindow.elements.googleFontStyle.href = e,
cvvWindow.elements.fontStyle.textContent = f);
elements.googleFontStyle.href = e;
elements.fontStyle.textContent = f
}
},
setInputMode: {
enabled: !0,
func: function(n) {
var t;
if (n.data && n.data !== "undefined") {
switch (n.data.toLowerCase()) {
case "text":
t = "text";
break;
case "decimal":
t = "decimal";
break;
case "numeric":
t = "numeric";
break;
case "tel":
t = "tel";
break;
case "search":
t = "search";
break;
case "email":
t = "email";
break;
case "url":
t = "url";
break;
case "none":
t = "none";
break;
default:
t = "text"
}
elements.data.setAttribute("inputmode", t);
mode.pcicvv && cvvWindow.elements.data.setAttribute("inputmode", t)
}
}
}
}
, dataTypeCollection = {
getDataTypes: function(n) {
for (var i = this.dataTypes[0], t = 1; t <= this.dataTypes.length - 1; t++)
if (this.dataTypes[t].type.toLowerCase() === n.toLowerCase()) {
i = this.dataTypes[t];
break
}
return i
},
setDataTypeMaxLength: function() {
for (var t = 19, n = 1; n <= this.dataTypes.length - 1; n++)
this.dataTypes[n].maxLength > t && (t = this.dataTypes[n].maxLength);
dataTypeMaxLength = parseInt(t);
elements.data.maxLength = dataTypeMaxLength
},
dataTypes: [{
type: "unknown",
validRegex: "^\\d{13,19}$",
possibleRegEx: "^\\d{13,19}$",
luhnCheck: !0,
maxLength: 19,
cvvValidRegex: "^[0-9]{3,4}$",
cvvMaxLength: 4,
cvvRequired: !0
}, {
type: "diners",
validRegex: "^3(0[0-5]|[68]\\d)\\d{11,16}$",
possibleRegEx: "^3(0[0-5]|[68]\\d)\\d{0,16}$",
luhnCheck: !0,
maxLength: 19,
cvvValidRegex: "^[0-9]{3}$",
cvvMaxLength: 3,
cvvRequired: !0
}, {
type: "jcb",
validRegex: "^35(28|29|[3-8]\\d)\\d{12,15}$",
possibleRegEx: "^35(28|29|[3-8]\\d)\\d{0,15}$",
luhnCheck: !0,
maxLength: 19,
cvvValidRegex: "^[0-9]{3}$",
cvvMaxLength: 3,
cvvRequired: !0
}, {
type: "americanExpress",
validRegex: "^3[47]\\d{13,17}$",
possibleRegEx: "^3[47]\\d{0,17}$",
luhnCheck: !0,
maxLength: 19,
cvvValidRegex: "^[0-9]{4}$",
cvvMaxLength: 4,
cvvRequired: !0
}, {
type: "discover",
validRegex: "^(6011|65\\d{2}|64[4-9]\\d)\\d{12,15}|^(62\\d{14,17})$",
possibleRegEx: "^(6011|65\\d{2}|64[4-9]\\d)\\d{0,15}|^(62\\d{0,17})$",
luhnCheck: !0,
maxLength: 19,
cvvValidRegex: "^[0-9]{3}$",
cvvMaxLength: 3,
cvvRequired: !0
}, {
type: "masterCard",
validRegex: "^(5[1-5]\\d{4}|677189|222[1-9]\\d{2}|22[3-9]\\d{3}|2[3-6]\\
d{4}|27[01]\\d{3}|2720\\d{2})\\d{10,13}$",
possibleRegEx: "^(5[1-5]\\d{4}|677189|222[1-9]\\d{2}|22[3-9]\\d{3}|2[3-6]\\
d{4}|27[01]\\d{3}|2720\\d{2})\\d{0,13}$",
luhnCheck: !0,
maxLength: 19,
cvvValidRegex: "^[0-9]{3}$",
cvvMaxLength: 3,
cvvRequired: !0
}, {
type: "visa",
validRegex: "^4\\d{12}(\\d{3})?(\\d{3})?$",
possibleRegEx: "^4\\d{0,12}(\\d{3})?(\\d{3})?$",
luhnCheck: !0,
maxLength: 19,
cvvValidRegex: "^[0-9]{3}$",
cvvMaxLength: 3,
cvvRequired: !0
}]
}
, util = {
addEventListener: function(n, t, i) {
n.addEventListener ? n.addEventListener(t, i, !1) : n.attachEvent("on" + t,
function() {
i.call(n)
})
},
removeEventListener: function(n, t, i) {
n.removeEventListener && n.removeEventListener(t, i, !1);
n.detachEvent && n.detachEvent("on" + t, i)
},
hasClass: function(n, t) {
return (" " + n.className + " ").indexOf(" " + t + " ") > -1
},
removeError: function() {
util.hasClass(elements.data, "error") && util.removeClass(elements.data,
"error")
},
addError: function() {
util.hasClass(elements.data, "error") || util.addClass(elements.data,
"error")
},
preventDefault: function(n) {
var t = n !== undefined ? n : window.event;
return t.preventDefault ? t.preventDefault() : t.returnValue = !1,
t
},
addClass: function(n, t) {
n && (n.classList ? n.classList.add(t) : n.className += " " + t)
},
removeClass: function(n, t) {
n && (n.classList ? n.classList.remove(t) : n.className =
n.className.replace(new RegExp("(^|\\b)" + t.split(" ").join("|") + "(\\b|
$)","gi"), " "))
},
getLastFour: function(n) {
var t = n.replace(/[^0-9]/g, "");
return t.length > 4 ? t.substring(t.length - 4) : ""
},
getFirstSix: function(n) {
var t = n.replace(/[^0-9]/g, "");
return t.length > 6 ? t.substring(0, 6) : ""
},
getFirstEight: function(n) {
var t = n.replace(/[^0-9]/g, "");
return t.length >= 16 ? t.substring(0, 8) : ""
},
isIos: function() {
return /iPhone|iPod|iPad/.test(navigator.userAgent)
},
isFirefox: function() {
return /firefox/.test(navigator.userAgent.toLowerCase())
},
arrayContains: function(n, t) {
return t.indexOf(n) > -1
},
between: function(n, t, i) {
return n >= t && n <= i
},
which: function(n) {
return n.which || n.keyCode
},
setValue: function(n, t) {
var f, i, r, e, u;
try {
i = t.selectionStart
} catch (o) {
i = null
}
if (u = t.value,
t.value = n,
i !== null && t === document.activeElement) {
i === u.length && (i = n.length);
u !== n && (e = u.slice(i - 1, +i + 1 || 9e9),
f = n.slice(i - 1, +i + 1 || 9e9),
r = n[i],
/\d/.test(r) && e === "" + r + " " && f === " " + r && (i = i + 1));
this.setCaretPosition(t, i);
return
}
},
setCaretPosition: function(n, t) {
if (typeof n != "undefined" && n !== null)
if (n.createTextRange) {
var i = n.createTextRange();
i.move("character", t);
i.select()
} else
n.selectionStart ? (n.focus(),
n.setSelectionRange(t, t)) : n.focus()
},
hasTextSelected: function(n) {
var t;
return n.selectionStart !== null && n.selectionStart !== n.selectionEnd ? !
0 : (typeof document != "undefined" && document !== null ? (t = document.selection)
!= null ? t.createRange : void 0 : void 0) != null &&
document.selection.createRange().text ? !0 : !1
},
setType: function(n) {
if (n === "number") {
elements.data.type = "number";
elements.data.inputmode = "numeric";
elements.data.setAttribute("min", "0");
initialInputType = n;
return
}
if (n === "tel") {
elements.data.type = "tel";
elements.data.inputmode = "tel";
initialInputType = n;
return
}
if (n === "password") {
elements.data.type = "password";
return
}
}
}
, interactions = {
doNotLimitInput: function() {
return !0
},
limitInputToNumeric: function(n) {
var t = n.currentTarget
, i = t.value;
return t.value = i.replace(/[^0-9]/g, ""),
!0
},
limitInputToAlphaNumeric: function() {
var n = elements.data
, t = n.value;
return n.value = t.replace(/[^a-zA-Z0-9]/g, ""),
!0
},
handleBackSpace: function(n) {
if (util.which(n) === 8 && util.which(n) === 46) {
var i = n.currentTarget
, t = i.value
, r = i.selectionStart;
(r === null || r === t.length) && (/\d\s$/.test(t) ?
(n.preventDefault(),
i.value = t.replace(/\d\s$/, "")) : /\s\d?$/.test(t) &&
(n.preventDefault(),
i.value = t.replace(/\d$/, "")))
}
},
limitLength: function(n) {
var i, r, t, u;
n.ctrlKey || util.which(n) !== 8 && util.which(n) !== 46 && util.which(n) !
== 9 && (util.which(n) >= 35 && util.which(n) <= 40 || (i = n.currentTarget,
r = i.value.replace(/[^0-9]/g, ""),
util.hasTextSelected(i)) || (t = dataTypeMaxLength,
allowUnknownTypes ? t = dataTypeMaxLength > 19 ? dataTypeMaxLength : 19 :
typeof currentDataType != "undefined" && currentDataType !== null && (t =
dataTypeMaxLength > parseInt(currentDataType.maxLength) ? dataTypeMaxLength :
parseInt(currentDataType.maxLength)),
(mode.cvvonly || mode.cvv) && (t = typeof currentDataType != "undefined" &&
currentDataType !== null ? parseInt(currentDataType.cvvMaxLength) : 4,
allowUnknownTypes && (t = 4)),
mode.pci && elements.cardMaxLengths && (u =
Object.keys(elements.cardMaxLengths),
u.forEach(n=>{
var i = parseInt(elements.cardMaxLengths[n].value);
t = i !== 0 ? setCardMaxLengths() : dataTypeMaxLength
}
)),
r.length === t && util.preventDefault(n)))
},
prettyprintkeyUpHandler: function(n) {
if ((!n.ctrlKey || util.which(n) !== 65) && (!n.ctrlKey || util.which(n) !
== 67))
if (util.between(util.which(n), 48, 111) || util.between(util.which(n),
186, 222) || util.which(n) === 229)
interactions.formatCreditCard();
else
return
},
formatCreditCard: function() {
var n = elements.data.value.replace(/[^0-9]/g, ""), r =
validations.getCardType(n), u = !1, i = dataTypeMaxLength > 19 ?
dataTypeMaxLength : 19, f, t;
return r !== null && (u = r.type === "americanExpress",
validations.setCurrentCardType(r),
i = r.maxLength,
allowUnknownTypes && !u && (i = dataTypeMaxLength > 19 ? dataTypeMaxLength
+ 4 : 19)),
f = Math.min(n.length, i),
n = n.substring(0, f),
t = [],
t.push(n.substring(0, 4)),
u ? (n.length >= 5 && t.push(n.substring(4, 10)),
n.length >= 11 && t.push(n.substring(10, i))) : (n.length >= 5 &&
t.push(n.substring(4, 8)),
n.length >= 9 && t.push(n.substring(8, 12)),
n.length >= 13 && t.push(n.substring(12, 16)),
n.length >= 17 && t.push(n.substring(16, 19)),
n.length >= 20 && t.push(n.substring(19, i))),
util.setValue(t.join(" "), elements.data),
!0
}
}
, setCardMaxLengths = function() {
var t = elements.data.value, i, n;
if (t = t.replace(/[^0-9]/g, ""),
i = validations.getPossibleCardType(t),
n = dataTypeMaxLength,
mode.pci && elements.cardMaxLengths)
switch (i.type) {
case "visa":
n = elements.cardMaxLengths.visa.value;
break;
case "masterCard":
n = elements.cardMaxLengths.mastercard.value;
break;
case "americanExpress":
n = elements.cardMaxLengths.americanExpress.value;
break;
case "discover":
n = elements.cardMaxLengths.discover.value;
break;
case "jcb":
n = elements.cardMaxLengths.jcb.value;
break;
case "diners":
n = elements.cardMaxLengths.diners.value
}
return parseInt(n)
}
, validations = {
required: function() {
return !!elements.data.value.length
},
cvvValidate: function() {
var n = elements.data.value.replace(/[^0-9]/g, "");
return allowUnknownTypes || currentDataType !== undefined &&
currentDataType !== null && currentDataType.type !== "unknown" ?
n.match(currentDataType.cvvValidRegex) : n.length === 3
},
validate: function() {
return elements.data.value.match(validations.baseRegEx)
},
customValidate: function() {
return this.customRegEx.length > 0 ?
elements.data.value.match(validations.customRegEx) : !0
},
baseRegEx: "",
customRegEx: "",
limitInput: interactions.doNotLimitInput,
panValidate: function() {
var i = elements.data.value.replace(/[^0-9]/g, "")
, n = !0
, t = validations.getCardType(i);
return validations.setCurrentCardType(t),
t === null && (n = !1),
t !== null && t.type === "unknown" && (n = allowUnknownTypes),
n && JSON.parse(elements.enforceLuhnCompliance.value.toLowerCase()) &&
currentDataType.luhnCheck && (n = validations.luhnCheck(i)),
n
},
luhnCheck: function(n) {
for (var f, u = 0, t = 0, i = !1, r = n.length - 1; r >= 0; r--)
f = n.charAt(r),
t = parseInt(f, 10),
i && (t *= 2) > 9 && (t -= 9),
u += t,
i = !i;
return u % 10 == 0
},
getPossibleCardType: function(n) {
for (var i = dataTypeCollection.getDataTypes("unknown"), t =
dataTypeCollection.dataTypes.length - 1; t >= 0; t--)
if (n.match(dataTypeCollection.dataTypes[t].possibleRegEx)) {
i = dataTypeCollection.dataTypes[t];
break
}
return i
},
getCardType: function(n) {
for (var i = dataTypeCollection.getDataTypes("unknown"), t =
dataTypeCollection.dataTypes.length - 1; t >= 0; t--)
if (n.match(dataTypeCollection.dataTypes[t].validRegex)) {
i = dataTypeCollection.dataTypes[t];
break
}
return i
},
setCurrentCardType: function(n) {
n == null && (n = dataTypeCollection.getDataTypes("unknown"));
currentDataType = n;
mode.pcicvv && (cvvWindow.currentDataType = n)
}
}
, tokenSchemes = {
sixtokenfour: new TokenScheme(1,"^[0-9]
{13,19}$",interactions.limitInputToNumeric),
fourtokenfour: new TokenScheme(2,"^[0-9]
{13,19}$",interactions.limitInputToNumeric),
tokenfour: new TokenScheme(3,"^[0-9]
{13,19}$",interactions.limitInputToNumeric),
guid: new TokenScheme(4,"^.{1,1000}$",interactions.doNotLimitInput),
ssn: new TokenScheme(5,"^[0-9]{9}$",interactions.limitInputToNumeric),
nguid: new TokenScheme(6,"^[0-9]{1,1000}$",interactions.limitInputToNumeric),
ntokenfour: new TokenScheme(7,"^[0-9]
{8,38}$",interactions.limitInputToNumeric),
ntoken: new TokenScheme(8,"^[0-9]{4,38}$",interactions.limitInputToNumeric),
sixantokenfour: new TokenScheme(9,"^[a-zA-Z0-9]
{14,38}$",interactions.limitInputToAlphaNumeric),
fourantokenfour: new TokenScheme(10,"^[a-zA-Z0-9]
{12,38}$",interactions.limitInputToAlphaNumeric),
antokenfour: new TokenScheme(11,"^[a-zA-Z0-9]
{8,38}$",interactions.limitInputToAlphaNumeric),
antoken: new TokenScheme(12,"^[a-zA-Z0-9]
{4,38}$",interactions.limitInputToAlphaNumeric),
antokenauto: new TokenScheme(13,"^[a-zA-Z0-9]
{4,38}$",interactions.limitInputToAlphaNumeric),
asciitokenfour: new TokenScheme(14,"^.{8,38}$",interactions.doNotLimitInput),
asciitoken: new TokenScheme(15,"^.{4,38}$",interactions.doNotLimitInput),
sixasciitokenfour: new TokenScheme(16,"^.
{14,38}$",interactions.doNotLimitInput),
fourasciitokenfour: new TokenScheme(17,"^.
{12,38}$",interactions.doNotLimitInput),
asciitokenauto: new TokenScheme(18,"^.{4,38}$",interactions.doNotLimitInput),
sixntokenfour: new TokenScheme(19,"^[0-9]
{14,38}$",interactions.limitInputToNumeric),
fourntokenfour: new TokenScheme(20,"^[0-9]
{12,38}$",interactions.limitInputToNumeric),
ntokenauto: new TokenScheme(21,"^[0-9]
{8,38}$",interactions.limitInputToNumeric),
token: new TokenScheme(22,"^.{4,1000}$",interactions.doNotLimitInput),
sixtokenfournonluhn: new TokenScheme(23,"^[0-9]
{13,19}$",interactions.limitInputToNumeric),
fourtokenfournonluhn: new TokenScheme(24,"^[0-9]
{13,19}$",interactions.limitInputToNumeric),
tokenfournonluhn: new TokenScheme(25,"^[0-9]
{13,19}$",interactions.limitInputToNumeric),
pci: new TokenScheme(26,"^[0-9]{13,19}$",interactions.limitInputToNumeric),
ascii: new TokenScheme(27,"^.{5,128}$",interactions.doNotLimitInput),
ntokenfour1to1: new TokenScheme(28,"^[0-9]
{8,38}$",interactions.limitInputToNumeric),
antoken4: new TokenScheme(29,"^[0-9]
{9,512}$",interactions.limitInputToAlphaNumeric),
antoken512: new TokenScheme(30,"^[0-9]
{5,512}$",interactions.limitInputToAlphaNumeric),
threetwo: new TokenScheme(32,"^[0-9]{9}$",interactions.limitInputToNumeric),
eiantoken: new TokenScheme(9e3,"^[a-zA-Z0-9]
{6,38}$",interactions.limitInputToAlphaNumeric),
ninenineeighteight: new TokenScheme(9988,"^[0-9]
{3,17}$",interactions.limitInputToNumeric)
};
handlers = {
windowFocus: function() {
elements.data.focus()
},
focusHandler: function() {
postToParent({
event: "focus",
data: {
value: !0
}
})
},
changeHandler: function() {
postToParent({
event: "change",
data: {
value: !0
}
})
},
cvvChangeHandler: function() {
postToParent({
event: "cvvChange",
data: {
value: !0
}
})
},
cvvFocusHandler: function() {
postToParent({
event: "cvvFocus",
data: {
value: !0
}
})
},
cvvBlurHandler: function() {
validateOnBlur && checkValidity(!0, !1);
postToParent({
event: "cvvBlur",
data: {
value: !1
}
})
},
cvvKeyUpHandler: function() {
validateOnCvvKeyUp && checkValidity(!0, !1)
},
blurHandler: function() {
validateOnBlur && checkValidity(!1, !0);
postToParent({
event: "blur",
data: {
value: !1
}
})
},
keyupHandler: function() {
var n, t;
validateOnKeyUp && checkValidity(!1, !0);
n = elements.data.value;
n = n.replace(/[^0-9]/g, "");
t = validations.getPossibleCardType(n);
previousCardType !== t.type && (previousCardType = t.type,
postToParent({
event: "cardTypeChange",
data: {
possibleCardType: previousCardType
}
}),
mode.pci && (currentDataType = dataTypeCollection.getDataTypes("unknown")),
mode.pcicvv && (currentDataType =
dataTypeCollection.getDataTypes("unknown"),
cvvWindow.currentDataType = t));
n.length >= 13 && forterSiteId && forterSiteId.length > 0 && forterUsername
&& forterUsername.length > 0 && callForterInit(n)
},
submitHandler: function(n) {
return util.preventDefault(n),
!1
},
returnAutoCompleteValuesHandler: function() {
postToParent({
event: "autoCompleteValues",
data: {
nameOnCard: elements.autoCompleteCardName.value,
cardExp: elements.autoCompleteCardExp.value
}
});
setTimeout(()=>{
elements.autoCompleteCardName.value =
elements.autoCompleteCardName.defaultValue,
elements.autoCompleteCardExp.value =
elements.autoCompleteCardExp.defaultValue
}
, 500)
}
};
ready(function() {
elements = {
data: document.getElementById("data"),
origin: document.getElementById("origin"),
containerID: document.getElementById("containerID"),
userDefinedStyle: document.getElementById("userDefinedStyle"),
error: document.getElementById("error"),
pciMode: document.getElementById("pciMode"),
enforceLuhnCompliance: document.getElementById("enforceLuhnCompliance"),
tokenScheme: document.getElementById("tokenScheme"),
token: document.getElementById("token"),
timestamp: document.getElementById("timestamp"),
authenticationKey: document.getElementById("authenticationKey"),
tokenExID: document.getElementById("tokenExID"),
cvvContainerID: document.getElementById("cvvContainerID"),
cvvOnly: document.getElementById("cvvOnly"),
cvv: document.getElementById("cvv"),
mode: document.getElementById("mode"),
returnKhash: document.getElementById("returnKhash"),
use3DS: document.getElementById("use3DS"),
threeDSMethodNotificationUrl:
document.getElementById("threeDSMethodNotificationUrl"),
useKount: document.getElementById("useKount"),
kountMerchantId: document.getElementById("kountMerchantId"),
kountSessionId: document.getElementById("kountSessionId"),
fraudServicesRiskRequestModel:
document.getElementById("fraudServicesRiskRequestModel"),
returnAutoCompleteValues:
document.getElementById("returnAutoCompleteValues"),
autoCompleteCardName: document.getElementById("cc-name"),
autoCompleteCardExp: document.getElementById("cc-exp"),
head: document.getElementsByTagName("head")[0],
cardMaxLengths: {
visa: document.getElementById("visa"),
mastercard: document.getElementById("mastercard"),
americanExpress: document.getElementById("americanExpress"),
discover: document.getElementById("discover"),
jcb: document.getElementById("jcb"),
diners: document.getElementById("diners")
}
};
page_init()
});

You might also like