ninja.wallets.paperwallet = { open: function () { document.getElementById("main").setAttribute("class", "paper"); // add 'paper' class to main div var paperArea = document.getElementById("paperarea"); paperArea.style.display = "block"; var pageBreakAt = ninja.wallets.paperwallet.pageBreakAtArtisticDefault; if (document.getElementById("paperkeyarea").innerHTML == "") { document.getElementById("paperpassphrase").disabled = true; document.getElementById("paperencrypt").checked = false; ninja.wallets.paperwallet.encrypt = false; ninja.wallets.paperwallet.build(document.getElementById('paperpassphrase').value); } }, close: function () { document.getElementById("paperarea").style.display = "none"; document.getElementById("main").setAttribute("class", ""); // remove 'paper' class from main div }, remaining: null, // use to keep track of how many addresses are left to process when building the paper wallet count: 0, pageBreakAtDefault: 1, pageBreakAtArtisticDefault: 1, pageBreakAt: null, build: function (passphrase) { var numWallets = 1; var pageBreakAt = 1; ninja.wallets.paperwallet.remaining = numWallets; ninja.wallets.paperwallet.count = 0; ninja.wallets.paperwallet.pageBreakAt = pageBreakAt; document.getElementById("paperkeyarea").innerHTML = ""; if (ninja.wallets.paperwallet.encrypt) { if (passphrase == "") { alert(ninja.translator.get("bip38alertpassphraserequired")); return; } document.getElementById("busyblock").className = "busy"; ninja.privateKey.BIP38GenerateIntermediatePointAsync(passphrase, null, null, function (intermediate) { ninja.wallets.paperwallet.intermediatePoint = intermediate; document.getElementById("busyblock").className = ""; setTimeout(ninja.wallets.paperwallet.batch, 0); }); } else { setTimeout(ninja.wallets.paperwallet.batch, 0); } }, batch: function () { if (ninja.wallets.paperwallet.remaining > 0) { var paperArea = document.getElementById("paperkeyarea"); ninja.wallets.paperwallet.count++; var i = ninja.wallets.paperwallet.count; var pageBreakAt = ninja.wallets.paperwallet.pageBreakAt; var div = document.createElement("div"); div.setAttribute("id", "keyarea" + i); div.innerHTML = ninja.wallets.paperwallet.templateArtisticHtml(i); div.setAttribute("class", "keyarea art"); if (paperArea.innerHTML != "") { // page break if ((i - 1) % pageBreakAt == 0 && i >= pageBreakAt) { var pBreak = document.createElement("div"); pBreak.setAttribute("class", "pagebreak"); document.getElementById("paperkeyarea").appendChild(pBreak); div.style.pageBreakBefore = "always"; } } document.getElementById("paperkeyarea").appendChild(div); ninja.wallets.paperwallet.generateNewWallet(i); ninja.wallets.paperwallet.remaining--; setTimeout(ninja.wallets.paperwallet.batch, 0); } }, // generate bitcoin address, private key, QR Code and update information in the HTML // idPostFix: 1, 2, 3, etc. generateNewWallet: function (idPostFix) { if (ninja.wallets.paperwallet.encrypt) { ninja.privateKey.BIP38GenerateECAddressAsync(ninja.wallets.paperwallet.intermediatePoint, false, function (address, encryptedKey) { ninja.wallets.paperwallet.showArtisticWallet(idPostFix, address, encryptedKey); }); } else { var key = new Bitcoin.ECKey(false); var bitcoinAddress = key.getBitcoinAddress(); var privateKeyWif = key.getBitcoinWalletImportFormat(); ninja.wallets.paperwallet.showArtisticWallet(idPostFix, bitcoinAddress, privateKeyWif); } }, templateHtml: function (i) { var privateKeyLabel = ninja.translator.get("paperlabelprivatekey"); if (ninja.wallets.paperwallet.encrypt) { privateKeyLabel = ninja.translator.get("paperlabelencryptedkey"); } var walletHtml = "