/* Js for , Version=1775346398 */
 ;if(typeof(v) != "object") v = {};v.theme = {"template":"default","theme":"wide","device":"desktop"};;v.lang = {"confirmDelete":"\u60a8\u786e\u5b9a\u8981\u6267\u884c\u5220\u9664\u64cd\u4f5c\u5417\uff1f","deleteing":"\u5904\u7406\u4e2d","doing":"\u5904\u7406\u4e2d","loading":"\u52a0\u8f7d\u4e2d","updating":"\u66f4\u65b0\u4e2d...","timeout":"\u7f51\u7edc\u8d85\u65f6,\u8bf7\u91cd\u8bd5","errorThrown":"\u6267\u884c\u51fa\u9519\uff1a","continueShopping":"\u7ee7\u7eed\u8d2d\u7269","required":"\u5fc5\u586b","back":"\u8fd4\u56de","continue":"\u7ee7\u7eed","bindWechatTip":"\u53d1\u5e16\u529f\u80fd\u8bbe\u7f6e\u4e86\u7ed1\u5b9a\u5fae\u4fe1\u7684\u9650\u5236\uff0c\u8bf7\u5148\u7ed1\u5b9a\u5fae\u4fe1\u4f1a\u5458\u3002","allVersion":"\u6240\u6709\u7248\u672c","importTip":"\u53ea\u5bfc\u5165\u4e3b\u9898\u7684\u98ce\u683c\u548c\u6837\u5f0f","fullImportTip":"\u5c06\u4f1a\u5bfc\u5165\u6d4b\u8bd5\u6570\u636e\u4ee5\u53ca\u66ff\u6362\u7ad9\u70b9\u6587\u7ae0\u3001\u4ea7\u54c1\u7b49\u6570\u636e"};;
$(function()
{
  $('.carousel-caption-title').css('color', $('.carousel-caption-title').data('color'));
});
;$('.icon-remove').click(function(e){
    e.stopPropagation();
    $(this).parents('.block-system-slide').remove();
    $('#header').css('top', 0);
    $('.page-wrapper').css('marginTop', '100px');
    resetStyle();
    localStorage.setItem('adClose', Date.now() + 7 * 24 * 3600 * 1000);
});

if(localStorage.getItem('adClose'))
{
    var now = new Date().getTime();
    if(now > Number(localStorage.getItem('adClose')))
    {
        localStorage.removeItem('adClose');
    }
    $('#header').css('top', 0);
    $('#block1506').hide();
    $('.page-wrapper').css('marginTop', '100px');
    resetStyle();
}

if(!localStorage.getItem('adClose') && $('.salon-ad').length > 0)
{
    $('#block1506').show();
    $('#header').css('top', '60px');
    $('.page-wrapper').css('marginTop', '160px');
    $('.parent-category').css('top', '88px');
    if($('html').hasClass('m-book-read'))
    {
        $('.search-wrap').css('top', '60px');
        $('.page-wrapper').css('marginTop', '60px');
    }
    if($('.ad-remove').length > 0) $('.table-heading').css('top', '159px');
}

function resetStyle()
{
    if($('html').hasClass('m-book-read'))
    {
        $('.search-wrap').css('top', 0);
        $('.page-wrapper').css('marginTop', 0);
    }
    $('.table-heading, .m-zentaoversion-history .type-title').css('top', '100px');
    $('.parent-category').css('top', '28px');
};
$(function()
{
  $('.carousel-caption-title').css('color', $('.carousel-caption-title').data('color'));
});
;v.nochargeTypeUrl = "\/extension-browse-1210---updatedtime_desc.html";;v.chargeTypeUrl = "\/extension-browse-1210--free-updatedtime_desc.html";;v.filterUrl = "\/extension-browse-1210-%officialTypeString%-%free%-updatedtime_desc.html";;v.searchUrl = "\/extension-browse-1214.html";;v.orderByUrl = "\/extension-browse-1210---%orderBy%.html";;setTimeout(function(){$('#contactModal .modal-header .close').html('<span aria-hidden="true">×</span>')}, 500);
$('#contactModal').on('shown.zui.modal', function() {
    if($('.user-dropdown-menu').length > 0)
    {
        $.post(createLink('user', 'behavior'), {
            referrer: document.referrer,
            url: '/contactus',
            title: '联系我们',
            timestamp: Date.parse(new Date()) / 1000
      });
    }
    else
    {
        var userBehaviorData = JSON.parse(localStorage.getItem('userBehavior'));
        if(!userBehaviorData){ userBehaviorData = []; }
        userBehaviorData.push({
            referrer: document.referrer,
            url: '/contactus',
            title: '联系我们',
            timestamp: Date.parse(new Date()) / 1000
        })
        localStorage.setItem('userBehavior', JSON.stringify(userBehaviorData));
    }
});;setTimeout(function(){$('#touchModal .modal-header .close').html('<span aria-hidden="true">×</span>')}, 500);;let page = 'register';
if(location.href.includes('demo'))     page = 'demo';
if(location.href.includes('download')) page = 'download';
if(localStorage.getItem('giftType'))   page = localStorage.getItem('giftType');

const titleMap = {
    register: '注册成功',
    demo: '感谢试用',
    download: '感谢下载'
};
const descMap = {
    register: '注册',
    demo: '试用',
    download: '下载'
};

const tagSrc = `https://static.zentao.net/web/data/source/zentao/default/wide/${page}-tag.png`;
$('.gift-tag').attr('src', tagSrc);
$('.title-success').text(`${titleMap[page]}`);
$('.desc-tips').text(`${descMap[page]}`);
$('.gift-list').addClass(page);

const userID = $.cookie('registerUserID');
let server = Number(userID) % 2 == 1 ? 'liujinlian' : 'songxiao';
$('.service-code').attr('src', `https://static.zentao.net/web/data/source/zentao/default/wide/${server}qiwei.png`);;function save(url, data, callback)
{
    $.ajax({
        url: url,
        method: 'post',
        data: data,
        processData: false,
        contentType: false,
        success: function(response)
        {
            if(response.result === 'success')
            {
                if(response.locate) location.href = response.locate;
                if(callback) callback();
            }
            else
            {
                if($.type(response.message) == 'string')
                {
                    showPopover('danger', response.message);
                }

                if(typeof(response.message) == 'object')
                {
                    $.each(response.message, function(key, value)
                    {
                        var errorOBJ   = '#' + key;
                        var errorLabel = key + 'Label';

                        var errorMSG = '<span id="' + errorLabel + '" for="' + key + '" class="text-error red">';
                        errorMSG += typeof(value) == 'string' ? value : value.join(' ');
                        errorMSG += '</span>';

                        $('#' + errorLabel).remove();
                        var $errorOBJ = $(errorOBJ);
                        if($errorOBJ.closest('.input-group').length > 0)
                        {
                            $errorOBJ.closest('.input-group').after(errorMSG)
                        }
                        else
                        {
                            $errorOBJ.parent().append(errorMSG);
                        }
                        $errorOBJ.css('margin-bottom', 0);
                        $errorOBJ.css('border-color','#953B39')
                        $errorOBJ.change(function()
                        {
                            $errorOBJ.css('margin-bottom', 0);
                            $errorOBJ.css('border-color','')
                            $('#' + errorLabel).remove();
                        });
                    });
                }
            }
        }
    });
}

function showPopover(type, message)
{
    type = type || 'success';
    var submitButton = $('.form-submit-button');
    submitButton.popover({container: 'body', trigger:'manual', content:message, placement: submitButton.data('placement') || 'right', tipClass: 'popover-' + type + ' popover-ajaxform'}).popover('show');
    setTimeout(function(){submitButton.popover('destroy');}, 2000);
}

function formSubmit($button)
    {
        $button.addClass('form-submit-button').siblings().removeClass('form-submit-button');
        var formData = new FormData($button.parents('form')[0]);
        save($button.data('url'), formData);
    }

function addItem(type)
{
    i = i + 1;
    item  = `<tr><td><input type='text' name='${type}[code][${i}]' id='${type}Code[${i}]' class='form-control'>`;
    item += `<td><input type='text' name='${type}[max][${i}]' id='${type}Max${i}' size='5' class='form-control'></td>`;
    item += `<td><input type='text' name='${type}[min][${i}]' id='${type}Min${i}' size='5' class='form-control'/></td>`;
    item += `<td><input name='${type}[all][${i}]' id='${type}All${i}' type='checkbox' onchange='toggleCheck("${type}", ${i})'> ${v.lang.allVersion}</td>`;
    item += `<td><a href='javascript:addItem("${type}")' class='btn'>+</a><button class='btn rm-item'><i class="icon icon-trash"></i></button></td></tr>`;

    $('#' + type).append(item);
}

$('.ext-wrapper').on('click', '.rm-item', function()
{
    $(this).parent('td').parent('tr').remove();
});

function toggleCheck(type, num)
{
    if($('#' + type + 'All' + num).prop('checked'))
    {
        $('#' + type + 'Min' + num).val('');
        $('#' + type + 'Max' + num).val('');
        $('#' + type + 'Min' + num).attr('disabled', 'disabled');
        $('#' + type + 'Max' + num).attr('disabled', 'disabled');
    }
    else
    {
        $('#' + type + 'Min' + num).removeAttr('disabled');
        $('#' + type + 'Max' + num).removeAttr('disabled');
    }
}

$(function()
{
    $('.stars-list').each(function()
    {
        var $list = $(this);
        var value = parseFloat($list.data('value').replace(/star/, ''));
        if(value > 10) value /= 10;
        var redStars   = Math.floor(value),
            halfStars  = (value - redStars) > 0 ? 1 : 0,
            whiteStars = 5 - Math.ceil(value);

        var html = '';
        for(var i = 1; i <= redStars; i ++) html += "<i class='icon-star'></i>";
        for(var i = 1; i <= halfStars; i ++) html += "<i class='icon-star-half-full'></i>";
        for(var i = 1; i <= whiteStars; i ++) html += "<i class='icon-star-empty'></i>";
        $list.html(html);
    });

    if(v.extType == 'theme')
    {
         $('#navbar').find('a[href*=theme]').parent().addClass('active');
    }
    else
    {
         $('#tab2').find('a[href*=theme]').parent().addClass('active');
    }

    if(location.href.includes('step2'))
    {
        $('.step-list').children('.step-item:first-child').addClass('active').siblings().removeClass('active');
    }

    if(location.href.includes('step3'))
    {
        $('.step-list').children('.step-item:nth-child(2)').addClass('active').siblings().removeClass('active');
    }

    if(location.href.includes('step4'))
    {
        $('.step-list').children('.step-item:last-child').addClass('active').siblings().removeClass('active');
    }

    $('.logo-wrap').click(function()
    {
        location.href = createLink('extension', 'browse');
    });

    $('.market-header .nav .icon-double-angle-down').click(function()
    {
        $(this).parent('.nav-wrapper').toggleClass('expand');
    });

    if(!$('.market-header .nav a.active').is(':visible')) $('.market-header .nav .nav-wrapper').addClass('expand');

    var shotUploaderOptions = {
        file_data_name: 'file',
        autoResetFails: true,
        deleteConfirm: true,
        filters: {
            mime_types: [
                {extensions: 'jpg,gif,png,jpeg,pneg'},
            ],
        },
        responseHandler: function(responseObject, file)
        {
            var response = JSON.parse(responseObject.response);
            if(response.result === 'fail') return '上传失败：' + response.message;
        },
        onUploadComplete: function(files)
        {
            let fileID = [];
            files.map(item => {
                fileID.push(item.remoteData.file.id);
            });
            $('#shots').val(fileID.join(','));
        }
    };
    if($('#uploaderShot').length > 0) $('#uploaderShot').uploader(shotUploaderOptions);

    if($('.user-side').length < 1) $('a[href="/extension-browse.html"]').parent().addClass('active');

    if(window.history.length == 1) $('.btn-backToPrev').hide();
});


$(function()
{
    $('.subversion .icon').click(function()
    {
        if($(this).hasClass('icon-check-plus'))
        {
            $('.detail-version:not(.hidden)').remove();
            $('.icon-check-minus').addClass('icon-check-plus').removeClass('icon-check-minus');
            $(this).addClass('icon-check-minus').removeClass('icon-check-plus').parents('.version').siblings().find('.icon').addClass('icon-check-plus').removeClass('icon-check-minus');
            var perRowPackages = 4;
            var packageIndex   = $(this).parents('.version').index() / 2 ;
            var appendIndex    = (Math.floor(packageIndex / perRowPackages) + 1) * perRowPackages - 1;
            var $version       = $(this).parents('.versions').find('.version');
            var position       = $(this).parents('.version').width() * (packageIndex % perRowPackages) + 28;
            
            if($version.eq(appendIndex).length == 0) appendIndex = -1;

            $version.eq(appendIndex).next().after($(this).parents('.version').next('.detail-version').clone());
            $version.eq(appendIndex).next().next('.detail-version').removeClass('hidden');
            $version.eq(appendIndex).next().next('.detail-version')[0].style.setProperty('--arrow-left', position + 'px');
            handleLabelFor($version.eq(appendIndex).next().next('.detail-version'));
        }
        else
        {
            $(this).addClass('icon-check-plus').removeClass('icon-check-minus');
            $('.detail-version:not(.hidden)').remove();
        }
    });

    $('.subversion > input').click(function()
    {
        $(this).removeClass('not-all');
        if($(this).prop('checked'))
        {
            $(this).parents('.version').next('.detail-version').find('input').prop('checked', 'checked');
            if($(this).siblings('.icon').hasClass('icon-check-minus')) $('.detail-version:not(.hidden)').find('input').prop('checked', 'checked');
            // Whether to select all minor versions.
            var subVersionChooseAll = handleChooseAll($(this).parents('.versions').find('.subversion'));
            if(subVersionChooseAll)  $(this).parents('.versions').siblings().find('input').prop('checked', 'checked');
            if(!subVersionChooseAll) $(this).parents('.versions').siblings().find('input').addClass('not-all');
        }
        else
        {
            $(this).parents('.version').next('.detail-version').find('input').prop('checked', false);
            if($(this).siblings('.icon').hasClass('icon-check-minus')) $('.detail-version:not(.hidden)').find('input').prop('checked', false);
            // Whether to unselect all minor versions.
            var subVersionChooseNone = handleSubversionChooseNone($(this).parents('.versions').find('.subversion'));
            if(subVersionChooseNone)  $(this).parents('.versions').siblings().find('input').prop('checked', false).removeClass('not-all');
            if(!subVersionChooseNone) $(this).parents('.versions').siblings().find('input').prop('checked', false).addClass('not-all');
        }
    });

    $('.versions').on('click', '.detail-version:not(.hidden) input', function()
    {
        var $originVersion = $(`.detail-version.hidden input[data-id='${$(this).data('id')}']`);
        if(!$(this).prop('checked'))
        {
            $originVersion.prop('checked', false);
            $originVersion.parents('.detail-version').prev('.version').find('input').prop('checked', false).addClass('not-all');
            $(this).parents('.versions').siblings().find('input').prop('checked', false).addClass('not-all');
            // Whether to select all minor versions.
            var chooseNone = handleChooseNone($(this).parents('.detail-version'));
            if(chooseNone) $originVersion.parents('.detail-version').prev('.version').find('input').removeClass('not-all');
            // Whether to unselect all minor versions.
            var subVersionChooseNone = handleSubversionChooseNone($originVersion.parents('.versions').find('.subversion'));
            if(subVersionChooseNone) $(this).parents('.versions').siblings().find('input').removeClass('not-all');  
        }
        else
        {
            $originVersion.prop('checked', 'checked');
            // Whether to select all minimum versions.
            var chooseAll = handleChooseAll($(this).parents('.detail-version'));
            if(chooseAll)  $originVersion.parents('.detail-version').prev('.version').find('input').prop('checked', 'checked');
            if(!chooseAll) $originVersion.parents('.detail-version').prev('.version').find('input').addClass('not-all');
            // Whether to select all minor versions.
            var subVersionChooseAll = handleChooseAll($originVersion.parents('.versions').find('.subversion'));
            if(subVersionChooseAll)  $(this).parents('.versions').siblings().find('input').prop('checked', 'checked');
            if(!subVersionChooseAll) $(this).parents('.versions').siblings().find('input').addClass('not-all');
        }
    });

    $('.version-name input').click(function()
    {
        $(this).removeClass('not-all');
        $(this).parent().siblings().find('input').removeClass('not-all');
        if($(this).prop('checked'))  $(this).parent().siblings().find('input').prop('checked', 'checked');
        if(!$(this).prop('checked')) $(this).parent().siblings().find('input').prop('checked', false);
    });

    function handleLabelFor($detailVersion)
    {
        $detailVersion.find('input').each(function()
        {
            let id = $(this).data('id');
            $(this).attr('id', id).siblings('label').attr('for', id);
            $(this).removeAttr('name');
        });
    }

    function handleChooseAll($detailVersion)
    {
        let chooseAll = true;
        $detailVersion.find('input').each(function()
        {
            if(!$(this).prop('checked'))
            {
                chooseAll = false;
                return false;
            }
        })
        return chooseAll;
    }

    function handleChooseNone($detailVersion)
    {
        let chooseNone = true;
        $detailVersion.find('input').each(function()
        {
            if($(this).prop('checked'))
            {
                chooseNone = false;
                return false;
            }
        })
        return chooseNone;
    }

    function handleSubversionChooseNone($subVersion)
    {
        let chooseNone = true;
        $subVersion.find('input').each(function()
        {
            if($(this).prop('checked') || $(this).hasClass('not-all'))
            {
                chooseNone = false;
                return false;
            }
        })
        return chooseNone;
    }

    function initStatus()
    {
        $('.detail-version').each(function()
        {
            let chooseAll = handleChooseAll($(this));
            if(chooseAll) 
            {
                $(this).prev().find('input').prop('checked', 'checked');
            }
            else
            {
                let chooseNone = handleChooseNone($(this));
                if(!chooseNone) $(this).prev().find('input').addClass('not-all');
                if(chooseNone) $(this).prev().find('input').removeClass('not-all');
            }
        });

        $('.versions').each(function()
        {
            let subVersionChooseAll = handleChooseAll($(this).find('.subversion'));
            if(subVersionChooseAll)
            {
                $(this).siblings().find('input').prop('checked', 'checked');
            }
            else
            {
                let subVersionChooseNone = handleSubversionChooseNone($(this).find('.subversion'));
                if(!subVersionChooseNone) $(this).siblings().find('input').addClass('not-all');
                if(subVersionChooseNone)  $(this).siblings().find('input').removeClass('not-all');
            }
        });
    }

    initStatus();
});
$(function()
{
    const extAutoDownloadID = $.cookie('extAutoDownloadID');
    if(extAutoDownloadID !== undefined && extAutoDownloadID > 0 && $('.siteNav .top-user-control').length) location.href = createLink('extension', 'buyext', "releaseID=" + extAutoDownloadID + "&type=download");

    function marketSearch(value)
    {
        var words = value.replace(/[^\u4e00-\u9fa5\w\s]|_/g, '');

        $.ajax(
        {
            type: 'post',
            url: v.searchUrl,
            data: {words: words},
            success: function(response)
            {
                if(response['result'] == 'success') location.href = v.searchUrl;
            }
        });
    }

    $('.filter-select .dropdown-menu').click(function(e)
    {
        e.stopPropagation();
    });

    $('.filter-officialTypes').click(function()
    {
        var filter = getFilterLink();
        var filterLink = filter.filterLink;
        var checkedType = filter.checkedType;
        $('.cards-container').load(filterLink + ' .cards-container', function()
        {
            $('.filter-select').trigger('click');
            if(checkedType.length > 0) $('.filter-select').addClass('active');
            if(checkedType.length == 0) $('.filter-select').removeClass('active');
        });
    });

    $('input[name=free]').change(function()
    {
        var targetUrl = getFilterLink().filterLink;
        $('.cards-container').load(targetUrl + ' .cards-container');
    });

    $('.bySearch input').keydown(function(e)
    {
        if (e.keyCode === 13)
        {
            e.preventDefault();
            marketSearch(e.target.value);
        }
    });

    $('.bySearch .icon-search').click(function()
    {
        marketSearch($(this).siblings('input').val());
    });

    $('.filter-wrap .filter-rt .icon-search').click(function()
    {
        marketSearch($(this).siblings('input').val());
    });

    sessionStorage.removeItem('activeTab');

    $('.download-link').click(function(e)
    {
        e.preventDefault();
        if($(this).hasClass('active')) location.href = location.href.replace('downloads_desc', 'addedtime_desc');
        if(!$(this).hasClass('active')) location.href = $(this).attr('href');
    });

    $('.sort > a').click(function(e)
    {
        e.preventDefault();
        var result   = getSort($(this), $(this).find('.sort-icon').data('type'));
        var link     = result.link;
        var sortType = result.activeWay;
        var $this    = $(this);
        $('.cards-container').load(link + ' .cards-container', function()
        {
            $this.find('.icon-sort-' + sortType).addClass('active').siblings().removeClass('active');
            $this.siblings().removeClass('active').find('.icon').removeClass('active');
        });
    });

    $('.extension-cards .card').click(function()
    {
        var imgSrc  = $(this).find('.cover img').attr('src');
        var bgColor = $(this).find('.cover').attr('class');
        sessionStorage.setItem('extensionCover', JSON.stringify({cover: imgSrc, bg: bgColor}));
    });

    function getSort(ele, sortType)
    {
        var link = '', activeWay = '';
        if($(ele).find('.icon-sort-down').hasClass('active'))
        {
            link = v.orderByUrl.replace('%orderBy%', sortType + '_asc');
            activeWay = 'up';
        }
        else if($(ele).find('.icon-sort-up').hasClass('active') || !$(ele).find('.sort-icon').find('.icon').hasClass('active'))
        {
            link = v.orderByUrl.replace('%orderBy%', sortType + '_desc');
            activeWay = 'down';
        }
        return {link, activeWay};
    }

    function getFilterLink()
    {
        var checkedType = [];
        $('.filter-select').find('input[type="checkbox"]').each(function(idx, item)
        {
            if($(item).prop('checked')) checkedType.push($(item).val());
        });
        var checkedTypeString = checkedType.join('_');
        var isFree = $('input[name="free"]').prop('checked') ? 'free' : '';
        var filterLink = v.filterUrl.replace('%officialTypeString%', checkedTypeString).replace('%free%', isFree);
        return {filterLink, checkedType};
    }
    if($(window).width() < 768)
    {
      if($('.sub-category li.active').length > 0) $('.sub-category li.active')[0].scrollIntoView({block: "nearest"});
      if($('.store-navigation a.active').length > 0) $('.store-navigation a.active')[0].scrollIntoView({block: "nearest"});
    }
});
$('#foot').insertBefore('#footer');

$(document).ready(function(){
    if(typeof headerList != 'undefined') return ;
    headerList = true;
    $('#footer #footNav').append('<a class="privacy" href="/page/zentao-privacypolicy.html">隐私政策</a>');
    $('#footer #powerby').append('<a class="ipip" href="https://www.ipip.net/" target="_blank">本站IP数据由IPIP.NET提供</a>');
    $('#siteNav').append(`<a class="language" href="http://www.zentao.pm/" target="_blank"><i class="icon icon-globe"></i>English</a>`);
    $('.m-user-register .form-horizontal .agreement-form span').after(`<span>和《<a href="/page/zentao-privacypolicy.html" target="_blank">隐私政策</a>》</span>`);
});

if($('html').hasClass('m-index-index'))
{
    setTimeout(function(){$('#rightDocker').hide();}, 50);
    $(document).on('scroll', function()
    {
        var showTop = $(window).width() > 1440 ? 300 : 600;
        if($(window).scrollTop() > showTop)  $('#rightDocker').show();
        if($(window).scrollTop() < showTop)  $('#rightDocker').hide();
    })
}

$('.m-faq #top #toggleToc').text('隐藏目录').addClass('hide');
var isAdvanced = false;
$('.m-faq #top #toggleToc').on('click', function() {
   isAdvanced = !isAdvanced;
   if (isAdvanced) {
       $(this).text('显示目录').addClass('show').removeClass('hide');
   } else {
       $(this).text('隐藏目录').addClass('hide').removeClass('show');
   }
});

var windowScrollHeight = window.innerHeight;
var minScrollHeight = windowScrollHeight - $('#header').height() - $('#footer').height() - $('#foot:visible').height() - $('.salon-ad').height();
if($('.page-wrapper').height() < minScrollHeight) {
    $('.page-wrapper').css('minHeight', minScrollHeight)
}

if($('.salon-ad').is(':visible')) $('.article .catalog-wrap').css('top', $('#header:visible').height() + $('.article .search-wrap').height() + 60 + 32);
var $articleSubtitle = $('.article .content h2, .article .content h3, .article .content h4, .article h5, .article .content h6');

$(window).scroll(function(){
    // if($(window).scrollTop()>230){
    //     $(".m-faq #top #toggleToc").addClass('fixed');
    // }else{
    //     $(".m-faq #top #toggleToc").removeClass('fixed');
    // }
    
    if($('body > .popover > .contact-popover-content').length > 0) $('body > .popover > .contact-popover-content').parents('.popover').remove();
    
    $articleSubtitle.each(function(idx, item)
    {
        var currentID = $(item).attr('id');
        if($(item).offset().top - $(document).scrollTop() > 0 && $(item).offset().top - $(document).scrollTop() + $('.book-header')?.height()  < $('.salon-ad:visible')?.height() + $('#header:visible')?.height())
        {
            $(`.catalog-wrap a[href='#${currentID}']`).parent('li').addClass('active').siblings().removeClass('active');
        }
    });
});

$(document).on('click', '.catalog-wrap li a', function(e)
{
    e.preventDefault();
    $(this).parent('li').addClass('active').siblings().removeClass('active');
    var selector  = $(e.target).attr('href');
    var scrollTop = $(selector).offset().top - $('#header:visible')?.height() - 20;
    if($('.salon-ad').is(':visible')) scrollTop = $(selector).offset().top - $('#header:visible')?.height() - 60 - 20;
    history.pushState('', '', location.pathname + selector);
    window.scrollTo({ top: scrollTop});
});

$('.m-faq table:last-child').before('<hr>');
// 首页点击空白处登录弹框隐藏
$(document).click(function(e) {
    if($(this).children('html').hasClass('m-user-login')) {
        return;
    } else {
        $('#loginModal').hide();
        if(window.qrCodeTimer) clearInterval(window.qrCodeTimer);
        $('#whitePaper').remove();
    }
})
$(document).on('click', '#loginModal, #privacyagreement, #agreement', function(e) {
    e.stopPropagation();
})
function showModalLogin(id, elem,  moreTop, moreLeft, showHeader, style, callback)
{
    var isVisible = document.getElementById(id) && document.getElementById(id).offsetParent;
    if(isVisible) return false;
    if(!style) {
        style = {}
    }

    var modalLoginOptions =
    {
        url     : "/user-loginmodal.html",
        name    : id,
        keyboard: false,
        backdrop: 'static',
        loaded  : function() {
            $('#' + id).addClass('modalLogin');
            if(showHeader == 0) $('#' + id + ' .close').hide();
            if($('html').hasClass('m-user-login')) $('#loginModal').css('height', $('.page-wrapper').height() + 100);
            callback && callback();
        },
        onHide: function(){
            if(window.smsTimer) clearInterval(window.smsTimer);
            if(window.qrCodeTimer) clearInterval(window.qrCodeTimer);
        }
    };
    var myModalTrigger = new $.zui.ModalTrigger(modalLoginOptions);
    myModalTrigger.show();
}

function getWebToken()
{
    const timestamp = Math.floor(Date.now() / 1000);
    const random = Math.random().toString(36).substr(2, 8);
    const userAgent = btoa(navigator.userAgent);
    return btoa(`${timestamp}:${random}:${userAgent}`);
}

$('.input-group-btn .btn').click(function()
{
    var value = $(this).parent().prev('input').val();
    if(value)
    {
        $('#searchForm').submit();
    }
});

$('.input-group #words').keypress(function(e) 
{
    if(e.keyCode === 13) 
    {
        var value = $(this).val();   
        if(value)
        {
            $('#searchForm').submit();
        }
        return false;
    }
});

$('.banner[data-form=83] p').append('<span>（报告将于2024年3月发布）</span>');

$('#rightDocker #globalCode').hover(function() {
    $('#rightDocker img[data-src]').each(function()
    {
        var $this = $(this);
        $this.attr('src', $this.data('src')).removeAttr('data-src');
    });
});

if($(window).width() < 768) {
    $('.popover-wrapper').unbind('hover');
    $('.popover-wrapper').off('click').click(function() {
        if($('.overlay').is(':visible')) 
        {
            $('#rightDocker .overlay').hide();
            $(this).find('.popover').removeClass('active');
        }
        else
        {
            $('#rightDocker .overlay').show();
            $(this).find('.popover').addClass('active');
        }
    });
    $('#rightDocker .overlay').on('click', function(e){e.stopPropagation(); $('.popover').removeClass('active'); $(this).hide();});
    $('#rightDocker .overlay').on('touchmove', function(e){e.stopPropagation(); $('.popover').removeClass('active'); $(this).hide();});
    $('.popover').click(function(e){e.stopPropagation();});
}

$('.dropdown-hover').on('mouseenter', '.white-paper', function(e) {
    e.stopPropagation();
});

$('#navbar a[href=""], .dropdown-second-menu > a').click(function(e) {e.preventDefault();});

if($('#navbar').data('type') == 'desktop_top')
{
    if($('#navbar .dropdown > a').find('.caret').length < 1) $('#navbar .dropdown > a').append(`<b class="caret" style="margin-left: 8px"></b>`);
}

if($('html').hasClass('m-article-workshop')) $('a[href="/services.html"]').parent().addClass('active');

function getZentaoChangeLog(type, version) {
    if($('.icon-spin').length) return;
    $('.change-log').after(`<i class="icon icon-spin icon-spinner-indicator"></i>`);
    var options = {
        name: 'logModal',
        title: $('#article h1').text(),
        width: '700px'
    };
    $.get(`/zentaoversion-get-${type}-${version}.html`, function(response) {
        options.custom = response.changelog.replace(/\n/g, '<br>');
        var logModalTrigger = new $.zui.ModalTrigger(options);
        logModalTrigger.show();
        $('.icon-spin').remove();
    });
}

function checkUaIsMobile() {
    return /(iPhone|iPad|iPod|iOS|Android|Linux armv8l|Linux armv7l|Linux aarch64)/i.test(
        navigator.userAgent
    );
}

$('.m-ask-index .col-md-10 .panel-wrapper').on('click', '.question-name a', function(e){history.pushState('', '', $(this).attr('href'))});

if($(window).width() > 1440) $('#globalCode .button-text').html('社群交流');
if($(window).width() < 1440) $('#globalCode .button-text').html('交流');

function debounce(fn, delay = 300) {
    let timer = null;

    return function() {
        if (timer) {clearTimeout(timer)}
        timer = setTimeout(() =>
        {
            fn.apply(this, arguments);
            timer = null;
        }, delay);
    }
}
setTimeout(function()
{
    $('.mini-btn').css('box-shadow', 'unset').css('-webkit-box-shadow', 'unset');
}, 1000);

setTimeout(function()
{
    if($('#div_company_mini').length && $('#div_company_mini')[0].style.display == 'none' && $('.mini-btn')[0].style.display == 'block') open_floatWindow();
}, 4000);

if(typeof(FingerprintJS) !== 'undefined')
{
    FingerprintJS.load()
    .then((fp) => {
        return fp.get();
    })
    .then((result) => {
        const visitorId = result.visitorId;
        let   location  = 'home';
        $('.contact-analysis').click(function()
        {
            if($(this).data('location')) location = $(this).data('location');
            const postData = {
              fingerprint: visitorId,
              triggerType: 'click',
              location: location,
              triggerTime: Math.round(new Date().getTime() / 1000)
            };
            $.post(createLink('contact', 'event'), postData);
        });
    });
}

$(document).ready(function()
{
    var targetPages = [
        '/solution-interactive-whiteboard.html',
        '/solution-thinmory.html',
        '/solution-rd-performance.html',
        '/solution-instant-messaging.html'
    ];
    
    var currentPath = window.location.pathname;
    
    var isTargetPage = targetPages.some(function(page)
    {
        return currentPath.endsWith(page);
    });
    
    if(isTargetPage)
    {
        function updateContactInfo()
        {
            $('#contactPopover').find('.sales-image-box img.sales-image').attr({
                'src': 'https://static.zentao.net/web/data/source/zentao/default/wide/contact-limu.webp',
                'alt': '李木'
            });

            $('#contactPopover').find('.sales-introduction-image img.sales-qrcode').attr({
                'src': 'https://static.zentao.net/web/data/source/zentao/default/wide/contact-limu-qrcode.webp',
                'alt': '李木'
            });

            $('#contactPopover').find('.sales-name').text('李木');
            
            $('#contactPopover').find('.sales-contact a').html(`<i class="icon icon-phone"></i>18562583552`)
            $('#contactPopover').find('.sales-contact>div').html(`<i class="icon icon-qq"></i>3985895121`)
        }
        
        updateContactInfo();
        
        var observer = new MutationObserver(function(mutations)
        {
            if($('#contactPopover').length)
            {
                updateContactInfo();
                observer.disconnect(); 
            }
        });
        
        observer.observe(document.body,
        {
            childList: true,
            subtree: true
        });
        
        setTimeout(function()
        {
            observer.disconnect();
        }, 10000);
    }
});


$(document).ready(function()
{ 
    const fileDownloadLink  = $.cookie('fileDownloadLink');
    const userControlLength = $('.siteNav .top-user-control').length;
    const isDownloadReferer = window.location.href == $.cookie('fileDownloadReferer');

    if(fileDownloadLink && isDownloadReferer && userControlLength > 0)
    {
        $.removeCookie('fileDownloadLink', { path: '/' });
        window.location.href = fileDownloadLink;
    }
});

$(document).ready(function()
{
    function detectNavVersion()
    {
        return $('#navbarWrapper').hasClass('navbarWrapperNew') ? 'nav-a' : 'nav-b';
    }

    $(document).on('click', 'a[href*="/demo.html"], a[href*="/downloads.html"]', function(e) {
        e.preventDefault();
        const href = $(this).attr('href');
        var objectType = href.includes('demo.html') ? 'demo' : 'download'
        var objectType = 'click-' + objectType + '-link';
        getUserFingerprint(objectType).then(result => {
            var data = {
                objectType: objectType,
                objectID: 0,
                content: '',
                fingerprint: result,
                location: 'nav',
                extra: detectNavVersion()
            }
            $.post(createLink('event', 'log'), data, function(response)
            {
                if(response.result == 'success')
                {
                    console.log('log success');
                    window.location.href = href;
                }
                else
                {
                    console.log('log fail');
                    window.location.href = href;
                }
            }, 'json');
        });
    });
});
;
$(document).ready(function()
{
    $('a[data-download=1]').each(function()
    {   
        link = window.btoa(window.encodeURIComponent($(this).attr('href')));
        fileName = window.btoa(window.encodeURIComponent($(this).text()));
        $(this).attr('data-toggle', 'modal').attr('href', createLink('misc', 'download', 'link=' + link + '&fileName=' + fileName));
    }); 
})
;(function() {var _53code = document.createElement("script");_53code.src = "https://tb.53kf.com/code/code/ef35685c8390f5aa37b2ddce53eca3e09/1";var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(_53code, s);})();;
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'AW-17656773669');
;
function loadCartInfo(twinkle)
{
    var cartDialog = bootbox.dialog(
    {
        message: v.addToCartSuccess,
        buttons:
        {
            back:
            {
                label:     v.lang.continueShopping,
                className: 'btn-primary',
                callback:  function(){location.reload();}
            },
            cart:
            {
                label:     v.gotoCart,
                className: 'btn-primary',
                callback:  function(){location.href = createLink('cart', 'browse');}
            }
        }
    });
    cartDialog.on('hidden.zui.modal', function() {location.reload();})
}
;v.clickNavLogin = "\u70b9\u51fb\u5bfc\u822a\u767b\u5f55";;v.genFingerprintError = "\u751f\u6210\u6307\u7eb9\u4fe1\u606f\u51fa\u9519";;
async function getUserFingerprint()
{
    const agent  = typeof(FingerprintJS) !== 'undefined' ? await FingerprintJS.load() : '';
    const result = agent ? await agent.get() : '';
    return result ? result.visitorId : '';
}
$().ready(function()
{
    if(Number($.cookie('showTip')))
    {
        setTimeout(function()
        {
            if(!$('.download-modal').is(':visible')) 
            {
                $('#showGift').click();
                localStorage.removeItem('giftType');
                $.get('/user-showtip.html');
            }
        }, 50);
    }

    // set utm source.
    const urlParams = new URLSearchParams(window.location.search);

    // set rong pm source.
    const rongFromSource = urlParams.get('from');
    if(rongFromSource)
    {
        const rongPmFromArr = [
            'rrplnav',
            'rrpl',
            'boston-consulting-group-matrix',
            'appeals',
            '4ps',
            '3c-model',
            'PESTLE',
            'rrplOther',
            'column',
            'columnProducts',
            'columnProject',
            'columnTesting',
            'columnOps',
            'columnEffectiveness',
            'columnOther',
            'whitepaperDownload'
        ];
        const rongIndexFrom  = rongPmFromArr.indexOf(rongFromSource);
        if(rongIndexFrom !== -1) localStorage.setItem('utmSource', 'rongPm-' + rongFromSource);
    }

    // set google ads utm source.
    const utmSource = urlParams.get('utm_source');
    if(utmSource)
    {
        if(utmSource === 'google') localStorage.setItem('utmSource', utmSource);
    }


    getUserFingerprint().then(result => {
        // Record the user behavior.
        if($('.user-dropdown-menu').length > 0)
        {
            $.post(createLink('user', 'behavior'), {
                referrer: document.referrer,
                url: document.URL,
                title: document.title,
                timestamp: Date.parse(new Date()) / 1000,
                fingerprint: result
            });
        }
        else
        {
            var userBehaviorData = JSON.parse(localStorage.getItem('userBehavior'));
            if(!userBehaviorData){ userBehaviorData = []; }
            
            userBehaviorData.push({
                referrer: document.referrer,
                url: document.URL,
                title: document.title,
                timestamp: Date.parse(new Date()) / 1000,
                fingerprint: result
            })
            localStorage.setItem('userBehavior', JSON.stringify(userBehaviorData));
        }

        const utmSource = localStorage.getItem('utmSource') || '';
        if(utmSource)
        {
            $.post(createLink('ads', 'behavior'), {
                referrer: document.referrer,
                url: document.URL,
                title: document.title,
                timestamp: Date.parse(new Date()) / 1000,
                fingerprint: result,
                utmSource: utmSource
            });
        }

        // Record the time of mouse hover on the contact button.
        var mouseinTime, mouseoutTime;
        $('.popover-wrapper').hover(function() 
        {
            if($(this).find('.contact').length > 0)
            {
                mouseinTime = new Date().getTime();
            }
            $(this).find('.popover').addClass('active')
        }, 
        function() 
        {
            if($(this).find('.contact').length > 0)
            {
                mouseoutTime = new Date().getTime();
                if(mouseoutTime - mouseinTime > 3000)
                {
                    const postData = {
                        fingerprint: result,
                        triggerType: 'hover',
                        location   : 'rightDocker',
                        triggerTime: Math.round(mouseoutTime / 1000),
                        duration   : Math.round((mouseoutTime - mouseinTime) / 1000)
                    };
                    $.post(createLink('contact', 'event'), postData);
                }
            }
            $(this).find('.popover').removeClass('active')
        });

        // Record user behavior when clicking login button.
        if($(window).width() > 1240)
        {
            $(".siteNav .btn-login").off('click').click(function(elem)
            {
                $.cookie('extAutoDownloadID', 0);
                if(window.qrCodeTimer) window.clearInterval(window.qrCodeTimer);
                const id = 'loginModal';
                showModalLogin(id, elem.target, 13, 0, 1);
                $('body').css('padding-right', 'unset');
                var userBehaviorData = JSON.parse(localStorage.getItem('userBehavior'));
                if(!userBehaviorData) {userBehaviorData = []; }
                userBehaviorData.push({
                    referrer: document.referrer,
                    url: '/user-login.html',
                    title: v.clickNavLogin,
                    timestamp: Date.parse(new Date()) / 1000,
                    fingerprint: result
                });
                localStorage.setItem('userBehavior', JSON.stringify(userBehaviorData));
                return false;
            });

            $('.top-user-control').click(function(){location.href = $(this).attr('href');});
        }
    });
});

$('.cover-image').each(function(idx, item)
{
    const imgSrc = $(item).data('image');
    $(item).parent().css({'background-image': `url(${imgSrc})`});
})
if($(window).width() < 768)
{
    $('.navbar-toggle').off('click').click(function(e)
    {
        e.preventDefault();
        $('.navbar-collapse, .parent-category').toggle();
    });
}

setTimeout(function()
{
    $('.dropdown-hover').css('pointer-events', 'unset');
}, 1500);

var hoverTimer = 0, outTimer = 0;
$('.navbar-nav .dropdown-hover').off('mouseenter').on('mouseenter', function()
{
    clearTimeout(outTimer);
    var dropdownMenu = $(this).find('.dropdown-menu');
    hoverTimer = setTimeout(function()
    {
        $('.dropdown-menu').hide();
        dropdownMenu.css('display', 'flex');
        $('.navbar-nav li a .icon').removeClass('active');
        dropdownMenu.siblings('a').find('.icon').addClass('active');
    }, 400);
});
$('.navbar-nav .dropdown-hover').off('mouseleave').on('mouseleave', function()
{
    clearTimeout(hoverTimer);
    var menu = $(this).find('.dropdown-menu');
    outTimer = setTimeout(function()
    {
        menu.hide();
        menu.siblings('a').find('.icon').removeClass('active');
    }, 400);
});

$('.navbar').off('mouseleave').on('mouseleave', function()
{
    setTimeout(function(){$('.navbar-nav .dropdown-menu').hide();}, 400);
});

$('.nav li.dropdown-hover').unbind('mouseover');

if($(window).width() < 768)
{
    $('.navbar').unbind('mouseleave');
    $('.nav li.dropdown-hover').unbind('mouseenter').unbind('mouseleave').unbind('mouseover').unbind('mouseout');
    $('.dropdown-hover .first-nav-name').off('click').click(function(e)
    {
           e.preventDefault();
           e.stopPropagation();
           $(this).parent('li').toggleClass('open').siblings().removeClass('open');
    });
    $('.dropdown-third-menu a').click(function(e)
    {
        e.stopPropagation();
    });
    $('.close-nav-wrapper img').click(function(){$('.navbar-toggle').trigger('click');});
}

$('.global-search').click(function()
{
    $(this).siblings('form').addClass('active').find('input').focus();
});
$('#searchbar .icon-close').click(function()
{
    $(this).parents('form').removeClass('active').find('input').val('');
})
