/* * 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("phonenumber")) { apirequest(SETTINGS.apis.authorstartverify, { phone: getStorage("phonenumber"), 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("phonenumber"); app.dialog.alert(resp.msg, "Error"); } }, function (err) { router.back(); app.dialog.alert("Something went wrong. Try again later.", "Error"); }); } else { callback(false); } } 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, phone: getStorage("phonenumber") }, 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!"); displayAccountInfo(); } else if (resp.status == "ERROR") { app.dialog.alert(resp.msg, "Error"); } }, function (error) { app.dialog.close(); app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later.", "Error"); }); } function displayAccountInfo() { $("#loyaltyBalanceBox").addClass("display-none"); $("#loyaltyErrorMessage").html(""); if (inStorage("accountkey") && inStorage("phonenumber")) { } else { $("#loyaltyErrorMessage").text("Error: No account connected."); return; } apirequest(SETTINGS.apis.getaccountinfo, { phone: getStorage("phonenumber"), accountkey: getStorage("accountkey") }, function (success) { $("#hasaccountbox").css("display", ""); $("#loadingaccountbox").css("display", "none"); if (success.status == "OK") { $("#loyaltyCreditBalanceHeading").text(success.credits + " points"); $("#loyaltyBalanceBox").removeClass("display-none"); var canvas = document.createElement('canvas'); bwipjs.toCanvas(canvas, { bcid: 'code128', // Barcode type text: success.phone, // Text to encode scaleX: 5, scaleY: 1, includetext: false, // Show human-readable text textxalign: 'center', // Always good to set this eclevel: 'M' }); $("#accountnumberspan").text(success.phone); document.getElementById("loyaltyBarcodeImg").src = canvas.toDataURL('image/png'); if (success.payments_setup === false) { $("#addPaymentMethodBox").css("display", ""); } $("#accountupdateform input#name").val(success.name); $("#accountupdateform input#email").val(success.email); $("#accountupdateform input#streetaddress").val(success.streetaddress); $("#accountupdateform input#zipcode").val(success.zipcode); } else { $("#loyaltyBalanceBox").addClass("display-none"); $("#loyaltyErrorMessage").text("Error: " + success.msg); } }, function (error) { $("#loyaltyErrorMessage").text("Error: Couldn't get your account info. Try again later."); }, "GET"); } $("#app").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"); return; } else { setStorage("phonenumber", resp.phone); router.refreshPage(); } }, function (error) { app.dialog.close(); app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later.", "Error"); }); }); $("#app").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, { phone: getStorage("phonenumber"), accountkey: getStorage("accountkey"), name: $("#accountupdateform input#name").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"); return; } else { app.popup.close("#accountUpdatePopup", true); setStorage("phonenumber", resp.phone); router.refreshPage(); app.dialog.alert("Account details updated.", "Account Updated"); } }, function (error) { app.dialog.close(); app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later.", "Error"); }); }); $("#app").on("click", "#connectExistingAccountBtn", function () { app.dialog.prompt("Enter your phone number or account number:", "Connect Your Account", function (val) { var phone = val.replace(/\D/g, ''); if (phone.length < 10) { app.dialog.alert("Please enter a full 10-digit phone number.", "Oops!"); return; } setStorage("phonenumber", phone); router.refreshPage(); }, function (cancel) { // shrug }, ""); }); $("#app").on("popup:open", "#accountUpdatePopup", function () { app.input.checkEmptyState("#accountupdateform input#name"); 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() { openBrowser(SETTINGS.apis.redirecttopaymentsetup + "?phone=" + getStorage("phonenumber") + "&accountkey=" + getStorage("accountkey"), "location=yes", function () { // on exit browser initAccountPage(); }, function (params) { // on get message from browser // only message we should get is "kill me" if (params.data.my_message == "kill me") { initAccountPage(); closeBrowser(); } } ); }