// on document ready if #commonFixes exists, then run the function
jQuery(document).ready(function ($) {
    if ($('.imasteRepair-service-archive-filter li').length) {
        // filter li elements based on the data-fix_type attribute on click of li inside .imasteRepair-service-archive-filter
        $('.imasteRepair-service-archive-filter li').on('click', function () {
            // add/remove active class on click
            $(this).addClass('active').siblings().removeClass('active');

            var fixType = $(this).attr('id');
            $('.imasteRepair-service-archive-products-list ul').find('li').each(function () {

                if ($(this).data('fix_type').includes(fixType)) {
                    $(this).show();
                } else {
                    $(this).hide();
                }
            });
        });

        jQuery('#commonFixes').trigger('click');
    }

    // if .imasteRepair-archive-item-view-more exists, then run the function
    if ($('.imasteRepair-archive-item-view-more').length) {
        $('.imasteRepair-archive-item-view-more').on('mouseenter', function () {
            $(this).parent().addClass('blur');
            //console.log($(this).parent().parent().find('.imasteRepair-archive-item-description'));
            $(this).parent().parent().find('.imasteRepair-archive-item-description').addClass('active');
        }).on('mouseleave', function () {
            $(this).parent().removeClass('blur');
            $(this).parent().parent().find('.imasteRepair-archive-item-description').removeClass('active');
        });
    }

    // Add something to given element placeholder
    function addToPlaceholder(toAdd, el) {
        el.attr('placeholder', el.attr('placeholder') + toAdd);
        // Delay between symbols "typing" 
        return new Promise(resolve => setTimeout(resolve, 100));
    }

    // Clear placeholder attribute in given element
    function clearPlaceholder(el) {
        el.attr("placeholder", "");
    }

    // Print one phrase
    function printPhrase(phrase, el) {
        return new Promise(resolve => {
            // Clear placeholder before typing next phrase
            clearPlaceholder(el);
            let letters = phrase.split('');
            // For each letter in phrase
            letters.reduce(
                (promise, letter, index) => promise.then(_ => {
                    // Resolve promise when all letters are typed
                    if (index === letters.length - 1) {
                        // Delay before start next phrase "typing"
                        setTimeout(resolve, 1000);
                    }
                    return addToPlaceholder(letter, el);
                }),
                Promise.resolve()
            );
        });
    }

    // Print given phrases to element
    function printPhrases(phrases, el) {
        // For each phrase
        // wait for phrase to be typed
        // before start typing next
        phrases.reduce(
            (promise, phrase) => promise.then(_ => printPhrase(phrase, el)),
            Promise.resolve()
        ).then(_ => run()); // Restart the run function after all phrases are done
    }

    // Start typing
    function run() {
        let phrases = [
            "iPhone 14...",
            "Samsung S8...",
            "MacBook Air M2...",
            "Apple Watch...",
            "PlayStation 4..."
        ];

        printPhrases(phrases, jQuery('.imasteRepair-archive-service-search input'));
    }

    run();

    $('.imasteRepair-archive-service-search input[type="text"]').on('input', function () {
        var searchText = $(this).val().toLowerCase();

        $('.products.repair-service.products-container li').each(function () {
            var currentLiText = $(this).text().toLowerCase(),
                showCurrentLi = currentLiText.indexOf(searchText) !== -1;
            $(this).toggle(showCurrentLi);
        });
    });


});