if (typeof jQuery !== 'undefined') {
    /* ***********************************
     *	jQuery
     * ***********************************/

    (function ($) {
        $(function () {
            /*---------------------------------------
            :: Bootsrap Select initialization
            -------------------------------------- */

            // dependent select boxes
            if (window.FormStuff && $.isFunction(FormStuff.showDomain)) {
                $("select[id$='P_FOTIP']").on("change", function () {
                    var $ptip = $("select[id$='P_TIP']");
                    if ($ptip.data('selectpicker')) {
                        $ptip.selectpicker('refresh');
                    }
                });
            }
        });
    })(jQuery);

    function checkBackgroundJobStatus($root, url, jobId, timeout) {
        $.ajax({
            type: "GET",
            url: url,
            cache: false,
            dataType: "html",
            success: function (data, textStatus, jqXHR) {
                if (jqXHR.status === 204) {
                    setTimeout(function () {
                        checkBackgroundJobStatus($root, url, jobId, timeout);
                    }, timeout)
                    return;
                }
                $root.html(data);
                initPairForms($root);
                initBootstrapSelectPicker($root);
                initBootstrapModal($root);
                initDataTable($root);
                initDatePicker($root);
                initValidation($root);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                console.error(errorThrown);
                $root.html("Hiba a PAIR kommunik&aacute;ci&oacute; k&ouml;zben!");
            }
        });
    }
}
if (typeof jQuery !== 'undefined') {
    Liferay.on(
        'allPortletsReady',

        function () {
            initPairForms();
        }
    );

    function initPairForms($root) {
        $root = $root || $(document);

        // Submit eseménykor fusson le a saveFormData eljárás. Alapértelmezetten elküldéskor nem marad meg a session tartalma
        $root.find('.pair-content form').attr('onsubmit', 'saveFormData()');

        generateButtons($root);
        resetForm($root);
        checkNavigationType($root);
    }

    function checkNavigationType($root) {
        if (!$root.find('.pair-content form').length) {
            // nincs form az oldalon, nem csinálunk semmit
            return;
        }
        if (navigator.userAgent.indexOf("Safari") != -1) {
            if (performance.navigation.type == 2) {
                loadFormData($root);
            } else {
                sessionStorage.clear();
            }
        }

        let perfEntries = performance.getEntriesByType('navigation');

        for (let i = 0; i < perfEntries.length; i++) {
            if (perfEntries[i].type === 'back_forward') {
                loadFormData($root);
            } else {
                sessionStorage.clear();
            }
        }
    }

// Gombok generálása minden select elem mellé, amelyek nem rendelkeznek '.P_RENDEZ' osztállyal. (Ezek egy sorban helyezkednek el egymás mellett)
    function generateButtons($root) {
        let currentDropdowns = $root.find('table tr .bootstrap-select').not('.P_RENDEZ');
        let divToAppend = '<button class="btn btn-primary btn-reset reset-current" type="button"> Törlés </button>';
        currentDropdowns.closest('tr td').append(divToAppend);

        // 2019.12.10 - a dátum mezők után is legyen törlés gomb
        $root.find("tr:has('.date-picker')").find('td:last-child').append(divToAppend);
    }

    function resetForm($root) {
        let currentButton = $root.find('.btn-reset');

        currentButton.on('click', function () {
            // select elemek
            let currentRow = jQuery(this).closest('tr');
            let currentSelect = currentRow.find('select');
            let currentOptions = currentRow.find('.bootstrap-select li');

            // érték, és a kiválasztott elem stílusának törlése
            currentSelect.val('');
            currentOptions.each(function () {
                jQuery(this).removeClass('active selected');
            })

            /* opciók hozzáadása/törlése esetén szükséges frissíteni a select elemet, hogy az aktuális opciókat jelenítse meg
            - https://developer.snapappointments.com/bootstrap-select/methods/#selectpickerrefresh */
            currentSelect.selectpicker("refresh");

            // 2019.12.10 datepicker elemek
            let currentDates = currentRow.find('.date-picker');
            currentDates.val('');
        })
    }

// form adatok elmentése lekérdezés után sessionStorage-ba

    function saveFormData() {
        /* CHECKBOX */

        let checkboxArr = jQuery('.pair-content input[type="checkbox"]').map(function () {
            return this.checked;
        }).get();

        sessionStorage.setItem("checked", JSON.stringify(checkboxArr));

        /* TEXT INPUT */
        let textValues = [];
        let textInputs = jQuery('.pair-content input[type="text"]:not([type=hidden]):not(".bs-searchbox input"):not(".date-picker")');

        textInputs.each(function () {
            textValues.push(jQuery(this).val());
        })

        sessionStorage.setItem('textVals', JSON.stringify(textValues));

        /* BOOTSTRAP-SELECT */

        let selectValues = [];
        let selectElements = jQuery('.pair-content select');

        selectElements.each(function () {
            selectValues.push(jQuery(this).val());
        })

        sessionStorage.setItem('selectedVals', JSON.stringify(selectValues));

        /* DATEPICKER */
        let dateValues = [];
        let dateInputs = jQuery('.pair-content input.date-picker');

        dateInputs.each(function () {
            dateValues.push(jQuery(this).val());
        })

        sessionStorage.setItem('dateVals', JSON.stringify(dateValues));

        /* RADIO BUTTONS */
        let radioValues = [];
        let radioButtons = jQuery('.pair-content input[type="radio"]');

        radioButtons.each(function () {
            radioValues.push(jQuery(this).is(':checked'));
        })

        sessionStorage.setItem('radioVals', JSON.stringify(radioValues));

        /* P_MODUL mentése az URL-ből. A sessionStorage ne töltse ki valamennyi form adatát az adott tabon belül, a P_MODUL alapján csak az adott
        lekérdezésre legyen érvényes */

        let currentFormURL = location.href.substring(location.href.indexOf('p_modul'));
        sessionStorage.setItem('sessionFormURL', currentFormURL);
    }

    function loadFormData($root) {
        /* session-be elmentett URL részlet összehasonlítása a jelenleg megnyitott form URL-jével. Ha nem egyezik, akkor törölni kell a sessionStorage-t,
        ha egyezik, akkor visszatértünk a lekérdezéshez, az adatok visszatöltődnek */
        let currentFormURL = location.href.substring(location.href.indexOf('p_modul'));
        let savedUrl = sessionStorage.getItem('sessionFormURL');

        if (currentFormURL !== savedUrl) {
            // új form, régi adatait töröljük
            sessionStorage.clear();
        } else {
            // előző formra térünk vissza
            let checkboxArr = JSON.parse(sessionStorage.getItem('checked')) || [];

            checkboxArr.forEach(function (isChecked, i) {
                $root.find('.pair-content input[type="checkbox"]').eq(i).prop('checked', isChecked);
            });

            /* TEXT INPUT */

            // ha nincs egy-egy típusú input elem az adott lekérdezésben, akkor üres tömb legyen ( undefined errort dob )
            let textArr = JSON.parse(sessionStorage.getItem('textVals')) || [];
            let textInputs = $root.find('.pair-content input[type="text"]:not([type=hidden]):not(".bs-searchbox input"):not(".date-picker")');

            textInputs.each(function (item) {
                jQuery(this).val(textArr[item]);
            })

            /* BOOTSTRAP-SELECT */

            let selectArr = JSON.parse(sessionStorage.getItem('selectedVals')) || [];
            let selectElements = $root.find('.pair-content select');

            selectElements.each(function (item) {
                jQuery(this).selectpicker('val', selectArr[item]);
            })
            $root.find('.pair-content select').selectpicker('render');

            /* DATEPICKER */
            let dateArr = JSON.parse(sessionStorage.getItem('dateVals')) || [];
            let dateInputs = $root.find('.pair-content input.date-picker');

            dateInputs.each(function (item) {
                jQuery(this).val(dateArr[item]);
            })

            /* RADIO BUTTONS */

            let radioArr = JSON.parse(sessionStorage.getItem('radioVals')) || [];

            radioArr.forEach(function (isChecked, i) {
                $root.find('.pair-content input[type="radio"]').eq(i).prop('checked', isChecked);
            });
        }
    }
}
