/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ function checkAccountStatus(callback) { if (inStorage("accountnumber")) { apirequest(SETTINGS.apis.authorstartverify, { accountnumber: getStorage("accountnumber"), accountkey: (inStorage("accountkey") ? getStorage("accountkey") : "") }, function (resp) { if (resp.status == "OK") { if (resp.authok && resp.accountok) { callback(true); } else if (!resp.authok && resp.accountok) { // verify phone or email // openAccountVerify(resp.verifymsg); callback("noauth", resp.verifymsg); } else if (!resp.authok && !resp.accountok) { callback(false); } else { callback("badstate"); } } else { router.back(); // Server is saying something's wrong, let's clear the account number in case // the user wants to try a different one. removeFromStorage("accountnumber"); app.dialog.alert(resp.msg, "Error"); sendErrorReport("Account", "Couldn't check account status", resp.msg); } }, function (xhr, status, error) { router.back(); app.dialog.alert("Something went wrong. Try again later.", "Error"); sendErrorReport("Account", "Couldn't check account status", "Server/network problem: " + xhr.status + ": " + xhr.statusText); }); } else { callback(false); } } function checkIfAccountGoodWithPaymentMethod(successcb, errorcb) { if (!inStorage("accountnumber") || !inStorage("accountkey")) { successcb(false); return; } apirequest(SETTINGS.apis.getaccountinfo, { accountnumber: getStorage("accountnumber"), accountkey: getStorage("accountkey") }, function (success) { if (success.status == "OK") { if (success.payments_setup === false) { successcb(false); } else { successcb(true); } } else { errorcb(success.msg); } }, function (error) { errorcb("Couldn't get your account info. Try again later."); }, "GET"); } function openAccountVerify(verifymsg) { app.dialog.prompt(verifymsg, "Verify Your Account", function (val) { verifyCode(val); }, function (cancel) { // shrug }, ""); } /** * Confirm auth/login code with server and store login key if successful. * @param {type} code * @returns {undefined} */ function verifyCode(code) { app.dialog.preloader("Verifying..."); apirequest(SETTINGS.apis.verifyauthcode, { code: code, accountnumber: getStorage("accountnumber") }, function (resp) { app.dialog.close(); if (resp.status == "OK") { setStorage("accountkey", resp.authkey); app.dialog.alert("This device has been successfully linked to your Helena Express account.", "Account verified!"); sendActionReport("Account", "Device linked OK"); displayAccountInfo(); } else if (resp.status == "ERROR") { app.dialog.alert(resp.msg, "Error"); sendErrorReport("Account", "Device linking", resp.msg); } }, function (xhr, status, error) { app.dialog.close(); app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later.", "Error"); sendErrorReport("Account", "Couldn't verify account code", "Server/network problem: " + xhr.status + ": " + xhr.statusText); }); } function displayAccountInfo() { if (inStorage("accountkey") && inStorage("accountnumber")) { } else { $("#accountErrorMessage").text("Error: No account connected."); return; } apirequest(SETTINGS.apis.getaccountinfo, { accountnumber: getStorage("accountnumber"), accountkey: getStorage("accountkey") }, function (success) { $("#hasaccountbox").css("display", ""); $("#loadingaccountbox").css("display", "none"); if (success.status == "OK") { $("#accountnumberspan").text(success.accountnumber); if (success.payments_setup === false) { $("#addPaymentMethodBox").css("display", ""); } else { $("#addPaymentMethodBox").css("display", "none"); } $("#accountupdateform input#name").val(success.name); $("#accountupdateform input#phone").val(success.phone); $("#accountupdateform input#email").val(success.email); $("#accountupdateform input#streetaddress").val(success.streetaddress); $("#accountupdateform input#zipcode").val(success.zipcode); } else { $("#accountErrorMessage").text("Error: " + success.msg); } }, function (xhr, status, error) { $("#accountErrorMessage").text("Error: Couldn't get your account info. Try again later."); sendErrorReport("Account", "Couldn't display account info", "Server/network problem: " + xhr.status + ": " + xhr.statusText); }, "GET"); } $("body").on("click", "#setupAccountBtn", function () { if ($("#accountsetupform input#phonenumber").val() == "") { app.dialog.alert("Add your phone number.", "Error"); return; } if ($("#accountsetupform input#name").val() == "") { app.dialog.alert("Add your name.", "Error"); return; } if ($("#accountsetupform input#email").val() == "") { app.dialog.alert("Add your email address.", "Error"); return; } if ($("#accountsetupform input#streetaddress").val() == "") { app.dialog.alert("Add your street address.", "Error"); return; } if ($("#accountsetupform input#zipcode").val() == "") { app.dialog.alert("Add your ZIP Code.", "Error"); return; } app.dialog.preloader("Creating Account..."); apirequest(SETTINGS.apis.accountregister, { phone: $("#accountsetupform input#phonenumber").val(), name: $("#accountsetupform input#name").val(), email: $("#accountsetupform input#email").val(), address: $("#accountsetupform input#streetaddress").val(), zipcode: $("#accountsetupform input#zipcode").val() }, function (resp) { app.dialog.close(); if (resp.status == "ERROR") { app.dialog.alert(resp.msg, "Error"); sendErrorReport("Account", "Couldn't register account", resp.msg); return; } else { setStorage("accountnumber", resp.accountnumber); sendActionReport("Account", "Account created"); router.refreshPage(); } }, function (xhr, status, error) { app.dialog.close(); app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later.", "Error"); sendErrorReport("Account", "Couldn't register account", "Server/network problem: " + xhr.status + ": " + xhr.statusText); }); }); $("body").on("click", "#updateAccountBtn", function () { if ($("#accountupdateform input#name").val() == "") { app.dialog.alert("Add your name.", "Error"); return; } if ($("#accountupdateform input#email").val() == "") { app.dialog.alert("Add your email address.", "Error"); return; } if ($("#accountupdateform input#streetaddress").val() == "") { app.dialog.alert("Add your street address.", "Error"); return; } if ($("#accountupdateform input#zipcode").val() == "") { app.dialog.alert("Add your ZIP Code.", "Error"); return; } app.dialog.preloader("Updating Account..."); apirequest(SETTINGS.apis.accountregister, { accountnumber: getStorage("accountnumber"), accountkey: getStorage("accountkey"), name: $("#accountupdateform input#name").val(), phone: $("#accountupdateform input#phone").val(), email: $("#accountupdateform input#email").val(), address: $("#accountupdateform input#streetaddress").val(), zipcode: $("#accountupdateform input#zipcode").val() }, function (resp) { app.dialog.close(); if (resp.status == "ERROR") { app.dialog.alert(resp.msg, "Error"); sendErrorReport("Account", "Couldn't update account", resp.msg); return; } else { app.popup.close("#accountUpdatePopup", true); setStorage("accountnumber", resp.accountnumber); sendActionReport("Account", "Account updated"); router.refreshPage(); app.dialog.alert("Account details updated.", "Account Updated"); } }, function (xhr, status, error) { app.dialog.close(); app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later.", "Error"); sendErrorReport("Account", "Couldn't update account", "Server/network problem: " + xhr.status + ": " + xhr.statusText); }); }); $("body").on("click", "#connectExistingAccountBtn", function () { app.dialog.prompt("Enter your account number:", "Connect Your Account", function (val) { var accountnumber = val.replace(/\D/g, ''); setStorage("accountnumber", accountnumber); router.refreshPage(); }, function (cancel) { // shrug }, ""); }); $("body").on("popup:open", "#accountUpdatePopup", function () { app.input.checkEmptyState("#accountupdateform input#name"); app.input.checkEmptyState("#accountupdateform input#phone"); app.input.checkEmptyState("#accountupdateform input#email"); app.input.checkEmptyState("#accountupdateform input#streetaddress"); app.input.checkEmptyState("#accountupdateform input#zipcode"); }); function initAccountPage() { checkAccountStatus(function (result, msg) { switch (result) { case true: displayAccountInfo(); break; case false: $("#setupaccountbox").css("display", ""); $("#loadingaccountbox").css("display", "none"); break; case "noauth": openAccountVerify(msg); break; case "badstate": app.dialog.alert("Your account is in an unstable state. This shouldn't happen. Please contact us at (406) 389-8988 and we'll fix it.", "Error"); break; default: app.dialog.alert("Something went very wrong. Close the app completely (swipe it away from the app switcher) and re-open it. If you continue to get this message, contact us for help: (406) 389-8988", "Error"); break; } }); } function openCheckoutWindowToSaveCard(onaccountpage) { if (typeof onaccountpage == "undefined") { onaccountpage = true; } openBrowser(SETTINGS.apis.redirecttopaymentsetup + "?accountnumber=" + getStorage("accountnumber") + "&accountkey=" + getStorage("accountkey"), "location=yes,hidenavigationbuttons=yes,hideurlbar=yes,zoom=no,hardwareback=no,fullscreen=no,presentationstyle=pagesheet,toolbarposition=top,lefttoright=yes,toolbarcolor=#D0F2FC", function () { // on exit browser initAccountPage(); }, function (params) { // on get message from browser // only message we should get is "kill me" if (params.data.msg == "kill me") { closeBrowser(); } initAccountPage(); } ); // refresh a bit while user adds card setTimeout(initAccountPage, 1000 * 10); setTimeout(initAccountPage, 1000 * 20); setTimeout(initAccountPage, 1000 * 30); setTimeout(initAccountPage, 1000 * 40); setTimeout(initAccountPage, 1000 * 50); setTimeout(initAccountPage, 1000 * 60); setTimeout(initAccountPage, 1000 * 90); setTimeout(initAccountPage, 1000 * 120); } function loadReceiptHTMLIntoPopup(receiptid) { app.dialog.preloader("Loading..."); apirequest(SETTINGS.apis.getreceipt, { accountnumber: getStorage("accountnumber"), accountkey: getStorage("accountkey"), receiptid: receiptid }, function (success) { if (success.status == "OK") { $('#receiptvieweriframe').attr("src", "data:text/html;base64," + btoa(success.receipt.html)); app.popup.open("#receiptViewerPopup"); app.dialog.close(); } else { app.dialog.close(); app.dialog.alert(success.msg, "Error"); sendErrorReport("Receipts", "Loading receipt", success.msg); } }, function (xhr, status, error) { app.dialog.close(); app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later.", "Error"); sendErrorReport("Receipts", "Couldn't load receipt", "Server/network problem: " + xhr.status + ": " + xhr.statusText); }, "POST"); } function receiptiframeloadevent() { $("#receiptvieweriframe").contents().find("a").each(function () { $(this).attr("data-href", $(this).attr("href")); $(this).attr("href", "#"); $(this).on("click", function (evt) { var href = evt.target.getAttribute("data-href"); window.parent.openReceiptIframeLink(href); }); }); } function openReceiptIframeLink(href) { if (handleDeepLink(href)) { app.popup.close(); } }