var PB = window.PB || {}; (function () { 'use strict'; PB.mc = PB.mc || {}; PB.mc.core = PB.mc.core || {}; PB.mcapi = PB.mcapi || {}; var Bootstrap = {} PB.mc.core.Bootstrap = Bootstrap; PB.mcapi.Bootstrap = Bootstrap; Bootstrap.oi = {}; Bootstrap.oi.token = {}; Bootstrap.oi.token['FROM_PAYBACK_SESSION'] = 'PAYBACK_SESSION'; Bootstrap.oi.token['FROM_PARTNER_SESSION'] = 'PARTNER_SESSION'; var OPTIONS = { requiredJsFiles: [ 'https://www.payback.de/static/fragment/clientcommons/1.45.0/mcapi.min.js', 'https://www.payback.de/static/fragment/clientcommons/1.45.0/mcapi-ui.min.js', 'https://www.payback.de/static/fragment/clientcommons/1.45.0/mcapi-auth.min.js' ] }; var STATUS_TYPE = { RUNNING: 0, FINISHED_SUCCESS: 1, FINISHED_ERROR: 2 }; var CURRENT_STATE = STATUS_TYPE.RUNNING; var CALLBACK_STACK = []; function buildClient(options) { var applicationName = 'oi'; return PB.mc.core.Client.forApplication(applicationName, options); } function executeCallbackStack() { for (var key in CALLBACK_STACK) { if (CURRENT_STATE === STATUS_TYPE.FINISHED_SUCCESS) { CALLBACK_STACK[key].success(buildClient(CALLBACK_STACK[key].options)); } else { CALLBACK_STACK[key].error(); } } CALLBACK_STACK = []; } function loadScriptsRecursively(requiredJsFileIndex) { loadScript(OPTIONS.requiredJsFiles[requiredJsFileIndex], function () { if (requiredJsFileIndex + 1 === OPTIONS.requiredJsFiles.length) { PB.mc.core.Context.baseUrl = 'https://www.payback.de/pb/onlineintegration/iframe/'; PB.mc.core.Context.version = ''; PB.mc.core.Context.oiRedirectUrlTemplate = 'https://www.payback.de/pb/onlineintegration/partnertoken/{partner}/{consumerId}/{token}'; PB.$(function () { CURRENT_STATE = STATUS_TYPE.FINISHED_SUCCESS; executeCallbackStack(); }); } else { loadScriptsRecursively(requiredJsFileIndex + 1); } }); } var getRandomRequestDelayWithinWindow = function (requestWindowInMS) { 'use strict'; return Math.floor(Math.random() * requestWindowInMS); }; var retryMillis = [15000, 60000, 60 * 60000, 2 * 60 * 60000]; var retryCounters = []; function getScriptTag(src, callback) { var scriptTag = document.createElement('script'), head = document.getElementsByTagName('head')[0], isLoaded; scriptTag.type = 'text/javascript'; scriptTag.src = src; scriptTag.onload = scriptTag.onreadystatechange = function () { if (!isLoaded && (!this.readyState || this.readyState === 'complete')) { isLoaded = true; callback(); } }; scriptTag.onerror = function () { if (typeof(retryCounters[src]) === 'undefined') { retryCounters[src] = 0; } else if (retryCounters[src] < retryMillis.length - 1) { retryCounters[src] += 1; } var millis = getRandomRequestDelayWithinWindow(retryMillis[retryCounters[src]]); setTimeout(function () { head.removeChild(scriptTag); var newScriptTag = getScriptTag(src, callback); head.appendChild(newScriptTag); scriptTag = newScriptTag; }, millis); }; return scriptTag; } function loadScript(src, callback) { var scriptTag = getScriptTag(src, callback), head = document.getElementsByTagName('head')[0]; head.appendChild(scriptTag); } loadScriptsRecursively(0); Bootstrap.createClient = function (options) { var success = options.onSuccess, error = options.onError; if (typeof success === 'undefined') { throw 'Option "onSucesss" must not be undefined!'; } if (typeof error === 'undefined') { error = function () { }; } if (CURRENT_STATE === STATUS_TYPE.FINISHED_SUCCESS) { success(buildClient(options)); } else if (CURRENT_STATE === STATUS_TYPE.RUNNING) { CALLBACK_STACK.push({success: success, error: error, options: options}); } else { error(); } }; }());