var domSupported = (document.getElementsByTagName && document.createElement); window.onload = function () { if (domSupported) { document.getElementById("genForm").onsubmit = function() { return generate(); } } } function generate() { var ok = validate(); if (ok) { var doc = buildDOM(); var str = xmlToString(doc); // ie removes encoding from XML declaration str = fixEncoding(str); document.getElementById("xmldata").value = str; return true; } else { return false; } } function validate() { if (isErrorListCreated()) { removeErrorList() } var pattern = /[^\x00-\x21\x23-\x25\x28-\x3b\x3d-\x3d\x3f-\x7f]/; check("OrgnlMsgId", 35, pattern, true, "Original message identification"); check("BkPtyId", 35, pattern, true, "Bank party identification"); check("OrgnlPmtInfId", 35, pattern, true, "Original payment information identification"); check("OrgnlEndToEndId", 35, pattern, false, "Original end to end identification"); check("OrgnlInstrId", 35, pattern, false, "Original instruction identification"); if (document.getElementById("OrgnlInstrId").value.length > 0 && document.getElementById("OrgnlEndToEndId").value.length == 0) { addError("Original end to end identification is required when " + " an original instruction identification is specified"); } return isErrorListCreated() == false; } function check(id, maxLength, pattern, mandatory, name) { var e = document.getElementById(id); var value = e.value; if (mandatory && value.length == 0) { addError(name + " is a required field"); return; // were done } if (value.length > maxLength){ addError(name + " too long"); } if (pattern.test(value)) { addError(name + " contains special characters"); } } function isErrorListCreated() { return document.getElementById("errors") != null; } function removeErrorList() { var list = document.getElementById("errors"); var parent = list.parentNode; parent.removeChild(list); } function createErrorList() { // create div var div = document.createElement("div"); div.setAttribute("id", "errors"); // create list var list = document.createElement("ul"); list.setAttribute("id", "errorList"); div.appendChild(list); // insert div var formDiv = document.getElementById("genForm"); var parent = formDiv.parentNode; parent.insertBefore(div, formDiv); } function addError(message) { if (!isErrorListCreated()) { createErrorList(); } // create new list item var item = document.createElement("li"); item.appendChild(document.createTextNode(message)); var list = document.getElementById("errorList"); list.appendChild(item); } function buildDOM() { // get template var doc = getTemplate(); // add values var ts = toISODateString(new Date()); setValue(doc, "MsgId", "NDEA " + ts); setValue(doc, "CreDtTm", ts); setValueFromTextField(doc, "OrgnlMsgId", "OrgnlMsgId"); setValueFromTextField(doc, "BkPtyId", "BkPtyId"); setValueFromTextField(doc, "OrgnlPmtInfId", "OrgnlPmtInfId"); setValueFromTextField(doc, "OrgnlInstrId", "OrgnlInstrId"); setValueFromTextField(doc, "OrgnlEndToEndId", "OrgnlEndToEndId"); return doc; } function xmlToString(node) { try { // Gecko- and Webkit-based browsers (Firefox, Chrome), Opera. return (new XMLSerializer()).serializeToString(node); } catch (e) { try { // Internet Explorer. return node.xml; } catch (e) { //Other browsers without XML Serializer alert('Xmlserializer not supported'); } } return null; } function fixEncoding(str) { var patt = /<\?xml\s*version="1.0"\s*\?>/; var enc =""; return str.replace(patt, enc); } function getTemplate() { var xmlhttp = createXMLHttpRequest(); xmlhttp.open("GET","/ku/bin/pain006x.xml",false); xmlhttp.send(); return xmlhttp.responseXML; } function createXMLHttpRequest() { if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari return new XMLHttpRequest(); } else { // code for IE6, IE5 return new ActiveXObject("Microsoft.XMLHTTP"); } } function setValue(doc, tagName, value) { var node = doc.getElementsByTagName(tagName)[0]; if (value.length > 0) { node.childNodes[0].nodeValue = value; } else { var parent = node.parentNode; parent.removeChild(node); } } function setValueFromTextField(doc, tagName, id) { var value = document.getElementById(id).value; setValue(doc, tagName, value); } function toISODateString(d) { function pad(n){ return n < 10 ? '0' + n : n } return d.getUTCFullYear()+'-' + pad(d.getUTCMonth()+1)+'-' + pad(d.getUTCDate())+'T' + pad(d.getUTCHours())+':' + pad(d.getUTCMinutes())+':' + pad(d.getUTCSeconds())+'Z' } function escapeXMLChars(str) { var clean = str; clean = clean.replace(/&/g, '&'); clean = clean.replace(//g, '>'); clean = clean.replace(/'/g, '''); clean = clean.replace(/"/g, '"'); return clean; } function trim(str) { return leftTrim(rightTrim(str)); } function leftTrim(str) { if (str.indexOf(" ") == 0) { for (var i = 0; i < str.length; i++) { if (str.charAt(i) != ' ') { return str.substring(i); } } return ""; } return str; } function rightTrim(str) { if (str.lastIndexOf(" ") == str.length - 1) { for (var i = str.length - 1; i >= 0 ; i--) { if (str.charAt(i) != ' ') { return str.substring(0, i + 1); } } return ""; } return str; }