/* 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/. */

var $$ = Dom7;

// Detect platform and run platform-specific setup code
// for Cordova, NW.js, or the browser
initPlatform();

var app = new Framework7({
    root: "#app",
    name: "Helena Express",
    id: "com.netsyms.helenaexpress.app",
    theme: "auto",
    card: {
        swipeToClose: false,
        hideNavbarOnOpen: false,
    },
    popup: {
        backdrop: true
    },
    popover: {
        backdrop: true
    },
    touch: {
        tapHold: true
    },
    statusbar: {
        enabled: false
    },
    init: false,
    initOnDeviceReady: false,
    routes: routes
});

var mainView = app.views.create('#view-main', {
    url: "/",
    animate: true,
    loadInitialPage: false
});

var router = mainView.router;

function restartApplication() {
    window.location = "index.html";
}


router.on("pageInit", function (pagedata) {
    pagedata.$el.find('script').each(function (el) {
        if ($$(this).attr('src')) {
            var s = document.createElement('script');
            s.src = $$(this).attr('src');
            $$('head').append(s);
        } else {
            eval($$(this).text());
        }
    });
    // Stop text selection from popping a system toolbar even after changing pages
    if (window.getSelection) {
        window.getSelection().removeAllRanges();
    } else if (document.selection) {
        document.selection.empty();
    }
});

/**
 * Perform back button behavior.
 * Call this function whenever the equivalent to the Android back button is pressed.
 * @returns {undefined}
 */
function handleBackButton() {
    // Close sheet if it's open
    if ($(".sheet-modal").hasClass("modal-in")) {
        app.sheet.close();
    } else if ($(".popup").hasClass("modal-in")) {
        app.popup.close();
    } else if ($(".searchbar-enabled")[0]) {
        app.searchbar.disable();
    } else if (scanningBarcode) {
        return;
    } else {
        router.back({force: true, ignoreCache: true});
    }
    // Stop text selection from popping a system toolbar even after changing pages
    if (window.getSelection) {
        window.getSelection().removeAllRanges();
    } else if (document.selection) {
        document.selection.empty();
    }
}

$(document).on("mousedown", ".hapticbtn,.input-clear-button,.button,.link", function () {
    doHapticFeedback();
});

$(document).keyup(function (e) {
    if (e.key === "Escape" || e.keyCode == 27) {
        handleBackButton();
    }
});

router.on("routeChange", function (newRoute) {
    console.log("Info", "Navigating to ", newRoute.path);
    trackPageView(newRoute.path, $("#view-main .page-current .navbar .navbar-inner .title").first().text());
});

function setAppTheme(theme) {
    if (theme == "light") {
        $("body").removeClass("theme-dark");
        if (platform_type == "cordova" && typeof StatusBar !== 'undefined') {
            StatusBar.backgroundColorByHexString("#e8f9fe");
            StatusBar.styleDefault();
        }
    } else if (theme == "dark") {
        $("body").addClass("theme-dark");
        if (platform_type == "cordova" && typeof StatusBar !== 'undefined') {
            StatusBar.backgroundColorByName("black");
            StatusBar.styleLightContent();
        }
    }
}

function applyColorTheme() {
    if (getStorage("apptheme") == "dark") {
        setAppTheme("dark");
    } else if (getStorage("apptheme") == "light") {
        setAppTheme("light");
    } else {
        setAppTheme(appTheme);
    }
}

/**
 * Turn animations on or off.
 * @param {boolean} on true for on, false for off.
 * @returns {undefined}
 */
function toggleAnimations(on) {
    if (on) {
        $("#app").removeClass("no-animation");
    } else {
        $("#app").addClass("no-animation");
    }
    mainView.params.animate = on;
}

/**
 * Turn animations on or off while considering user preferences.
 * @param boolean enabled true to enable, false to disable, undefined to use animation=on/off setting.
 * @returns {undefined}
 */
function setAnimations(enabled) {
    if (getStorage("animation") == null) {
        setStorage("animation", "auto");
    }
    if (typeof enabled !== "undefined") {
        toggleAnimations(enabled == true);
        return;
    }
    if (getStorage("animation") == "off") {
        toggleAnimations(false);
    } else if (getStorage("animation") == "on") {
        toggleAnimations(true);
    }
}

applyColorTheme();
setAnimations();

// Migrate from old to new account number storage key
if (inStorage("phonenumber") && !inStorage("accountnumber")) {
    setStorage("accountnumber", getStorage("phonenumber"));
    removeFromStorage("phonenumber");
}

var setup = (inStorage("accountnumber") && inStorage("accountkey")) || inStorage("setupskipped");

app.init();

if (getStorage("analytics") !== "false") {
    try {
        var _paq = window._paq = window._paq || [];
        _paq.push(['enableLinkTracking']);
        (function () {
            var u = "https://analytics.netsyms.net/";
            _paq.push(['setTrackerUrl', u + 'matomo.php']);
            _paq.push(['setSiteId', '40']);
            var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
            g.async = true;
            g.src = u + 'matomo.js';
            s.parentNode.insertBefore(g, s);
        })();
    } catch (ex) {
        // skip
    }
} else {
    console.log("Analytics code not loaded at user request.");
}


if (setup) {
    router.navigate("/home");
} else {
    router.navigate("/welcome", {
        history: false,
        pushState: false
    });
}
document.title = SETTINGS.branding.apptitle;