/* Js for , Version=1768353716 */
 v.lang = {"confirmDelete":"\u60a8\u786e\u5b9a\u8981\u6267\u884c\u5220\u9664\u64cd\u4f5c\u5417\uff1f","deleteing":"\u5220\u9664\u4e2d","doing":"\u5904\u7406\u4e2d","loading":"\u52a0\u8f7d\u4e2d","updating":"\u66f4\u65b0\u4e2d...","timeout":"\u7f51\u7edc\u8d85\u65f6,\u8bf7\u91cd\u8bd5","errorThrown":"<h4>\u6267\u884c\u51fa\u9519\uff1a<\/h4>","continueShopping":"\u7ee7\u7eed\u8d2d\u7269","required":"\u5fc5\u586b","back":"\u8fd4\u56de","continue":"\u7ee7\u7eed","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"};;
// 使用IIFE隔离作用域，避免与现有v对象/函数冲突，兼容jQuery
(function(window, document, $, undefined) {
    'use strict';

    // 全局状态管理（局部作用域，避免污染）
    const animGlobalData = { // 重命名避免与其他全局变量冲突
        loading: false,
        loadedNum: 7,
        maxNum: 12,
        counterAnimating: false,
        counterInView: false
    };

    // 核心元素（仅赋值，不存在时不阻断）
    const contentBox = document.getElementById('content-container');
    const loaderBox = document.getElementById('loader');
    const endTipBox = document.getElementById('end-tip');
    
    // 动画配置
    const animList = [
        'slide-left', 'slide-right', 'scale-in', 'fade-in', 
        'slide-up-strong', 'slide-down-fade', 'scale-up-fade'
    ];
    const colorList = ['primary', 'secondary', 'accent', 'warning', 'primary', 'secondary', 'accent'];
    const animNames = {
        'fade-in': '淡入效果（延长版）',
        'slide-left': '左侧滑动（大幅版）',
        'slide-right': '右侧滑动（大幅版）',
        'slide-up-strong': '强化上滑（超大幅度）',
        'scale-in': '缩放显示（大幅版）',
        'slide-down-fade': '从上到下淡入',
        'scale-up-fade': '由小到大淡入'
    };

    // 视口检测（容错增强）
    function checkInViewInit(el) {
        if (!el) return false;
        const rect = el.getBoundingClientRect();
        const viewH = window.innerHeight || document.documentElement.clientHeight;
        const viewW = window.innerWidth || document.documentElement.clientWidth;
        return !(rect.bottom < 0 || rect.top > viewH || rect.right < 0 || rect.left > viewW);
    }

    function checkInViewScroll(el, triggerRatio) {
        if (!el) return false;
        triggerRatio = triggerRatio || 1/3;
        const rect = el.getBoundingClientRect();
        const viewH = window.innerHeight || document.documentElement.clientHeight;
        return rect.top <= viewH - (rect.height * triggerRatio) && rect.top >= 0 && rect.bottom >= 0;
    }

    // 播放动画（核心动画逻辑保留）
    function playAnim(el) {
        if (!el || el.classList.contains('animated')) return;
        
        const anim = el.getAttribute('data-anim') || '';
        el.classList.add('animated');
        el.offsetHeight; // 触发重绘
        
        const animClassMap = {
            'fade-in': 'animate-fade-in',
            'slide-left': 'animate-slide-left',
            'slide-right': 'animate-slide-right',
            'slide-up-strong': 'animate-slide-up-strong',
            'scale-in': 'animate-scale-in',
            'slide-down-fade': 'animate-slide-down-fade',
            'scale-up-fade': 'animate-scale-up-fade'
        };
        
        if (animClassMap[anim]) {
            el.classList.add(animClassMap[anim]);
        }
        
        if (el.id === 'counter-section' && !animGlobalData.counterAnimating) {
            setTimeout(startCounterAnim, 500);
        }
    }

    // 初始加载动画（不依赖核心元素，单独执行）
    function initAnims() {
        setTimeout(() => {
            // 遍历所有可动画元素，无核心元素也执行
            const animEls = document.querySelectorAll('.loadable:not(.animated)') || [];
            animEls.forEach(el => {
                if (checkInViewInit(el)) playAnim(el);
            });

            // 数字区块初始化（容错）
            const counterBox = document.getElementById('counter-section');
            if (counterBox) {
                animGlobalData.counterInView = checkInViewInit(counterBox);
                if (animGlobalData.counterInView && !animGlobalData.counterAnimating) {
                    setTimeout(startCounterAnim, 800);
                }
            }
        }, 300);
    }

    // 动态加载更多（仅当核心元素存在时执行）
    function loadMore() {
        // 核心元素不存在时直接返回，不影响其他逻辑
        if (!contentBox || !loaderBox || !endTipBox) return;
        if (animGlobalData.loading || animGlobalData.loadedNum >= animGlobalData.maxNum) return;

        animGlobalData.loading = true;
        loaderBox.style.display = 'flex';

        setTimeout(() => {
            const index = animGlobalData.loadedNum - 7;
            const anim = animList[index % animList.length];
            const color = colorList[index % colorList.length];
            const name = animNames[anim] || '动态动画';

            // 安全创建元素（防XSS）
            const contentEl = document.createElement('div');
            contentEl.className = 'loadable';
            contentEl.setAttribute('data-anim', anim);
            contentEl.innerHTML = `
                <div class="bg-white rounded-lg shadow-lg p-6 border-l-4 border-${color.replace(/[^a-z-]/g, '')}

">
                    <h3 class="text-2xl font-semibold mb-4 text-${color.replace(/[^a-z-]/g, '')}

">动态加载 - ${name.replace(/</g, '&lt;').replace(/>/g, '&gt;')}

</h3>
                    <p class="text-gray-600">合规版无敏感参数，动画效果流畅自然</p>
                </div>
            `;

            const spaceEl = document.createElement('div');
            spaceEl.className = 'h-96';

            if (loaderBox.parentNode) {
                contentBox.insertBefore(contentEl, loaderBox);
                contentBox.insertBefore(spaceEl, loaderBox);
            }

            // 检测新元素动画
            setTimeout(() => {
                if (checkInViewScroll(contentEl)) playAnim(contentEl);
            }, 200);

            animGlobalData.loadedNum++;
            animGlobalData.loading = false;
            loaderBox.style.display = 'none';

            if (animGlobalData.loadedNum >= animGlobalData.maxNum) {
                endTipBox.style.display = 'block';
            }
        }, 1000);
    }

    // 数字动画逻辑（容错）
    function resetCounter() {
        const counters = document.querySelectorAll('.counter') || [];
        counters.forEach(counter => {
            counter.innerText = '0';
        });
        animGlobalData.counterAnimating = false;
    }

    function runCounter(counter) {
        if (!counter) return;
        const target = parseInt(counter.getAttribute('data-target')) || 0;
        const current = parseInt(counter.innerText) || 0;
        const step = Math.max(1, Math.floor(target / 50));

        if (current < target) {
            const nextVal = Math.min(current + step, target);
            counter.innerText = nextVal;
            requestAnimationFrame(() => runCounter(counter));
        } else {
            counter.innerText = target;
            // 检查是否全部完成
            let allDone = true;
            const counters = document.querySelectorAll('.counter') || [];
            counters.forEach(item => {
                if (parseInt(item.innerText) !== parseInt(item.getAttribute('data-target'))) {
                    allDone = false;
                }
            });
            if (allDone) animGlobalData.counterAnimating = false;
        }
    }

    function startCounterAnim() {
        if (animGlobalData.counterAnimating) return;
        animGlobalData.counterAnimating = true;
        const counters = document.querySelectorAll('.counter') || [];
        counters.forEach(counter => runCounter(counter));
    }

    // 滚动处理（核心修复：移除核心元素强制检测，仅跳过加载更多）
    function handleScroll() {
        // 1. 处理所有可动画元素（无核心元素也执行）
        const animEls = document.querySelectorAll('.loadable:not(.animated)') || [];
        animEls.forEach(el => {
            if (checkInViewScroll(el)) playAnim(el);
        });

        // 2. 处理数字区块（容错）
        const counterBox = document.getElementById('counter-section');
        if (counterBox) {
            const nowInView = checkInViewScroll(counterBox, 0.5);
            if (!nowInView && animGlobalData.counterInView) resetCounter();
            else if (nowInView && !animGlobalData.counterAnimating && !animGlobalData.counterInView) startCounterAnim();
            animGlobalData.counterInView = nowInView;
        }

        // 3. 加载更多（仅核心元素存在时执行）
        if (contentBox && loaderBox && endTipBox) {
            const scrollTop = window.scrollY;
            const viewH = window.innerHeight;
            const docH = document.body.offsetHeight;
            if (viewH + scrollTop >= docH - 400 && !animGlobalData.loading && animGlobalData.loadedNum < animGlobalData.maxNum) {
                loadMore();
            }
        }
    }

    // 节流函数（防重复触发）
    function throttle(func, delay) {
        if (typeof func !== 'function') return () => {};
        delay = delay || 100;
        let lastTime = 0;
        return function() {
            const now = Date.now();
            if (now - lastTime >= delay) {
                func.apply(this, arguments);
                lastTime = now;
            }
        };
    }

    // 初始化逻辑（兼容jQuery ready，避免冲突）
    function init() {
        // 初始化动画（必执行）
        initAnims();
        
        // 绑定滚动事件（先移除旧事件，避免重复）
        const throttledScroll = throttle(handleScroll);
        window.removeEventListener('scroll', throttledScroll);
        window.addEventListener('scroll', throttledScroll);

        // 页面卸载清理事件
        window.addEventListener('beforeunload', () => {
            window.removeEventListener('scroll', throttledScroll);
        });
    }

    // 兼容现有jQuery ready逻辑，避免覆盖
    if (typeof $ === 'function') {
        // 确保在现有ready之后执行，避免冲突
        $(document).ready(() => {
            setTimeout(init, 100); // 延迟100ms，避开现有JS执行
        });
    } else {
        // 原生DOM加载
        if (document.readyState === 'complete' || document.readyState === 'interactive') {
            init();
        } else {
            document.addEventListener('DOMContentLoaded', init);
        }
    }

    // 页面完全加载后二次检测
    window.addEventListener('load', () => {
        setTimeout(initAnims, 200);
    });

    // 刷新/后退场景恢复
    window.addEventListener('pageshow', () => {
        setTimeout(handleScroll, 400);
    });

})(window, document, window.jQuery);
;$(document).ready(function() {
    $('#zlight-nav').zlightMenu();
});

;(function($, window, document, undefined) {
    var pluginName = 'zlightMenu',
        defaults = {
            height: '71px',
            subMenuHeight: '20px',
            fontSize: '15px',
            subMenuWidth: '180px',
            floating: 'left',
            transform: 'on', //关闭浮动滑动
            transformBreak: '100',
            lablColor: '#ffffff',
            lablFontSize: '15px',
            iconColor: '#ffffff',
            iconSize: '20px',
            mobileMainColor: '#323231',
            mainColor: 'transparent',
            secondColor: '#FFB40C',
            fontColor: '#ffffff',
            activeFontColor: '#ffffff',
            borderLightColor: 'rgba(255,255,255,0.2)',
            borderDarkColor: 'rgba(0,0,0,0.2)',
            dropBorderLightColor: '#444444',
            dropBorderDarkColor: '#222222'
        };

    function Zmenu(element, options) {
        this.element = $(element);
        var ele = this;
        this.options = $.extend({}, defaults, options);
        this._defaults = defaults;
        this._name = pluginName;
        this.init(ele)
    };
    Zmenu.prototype.variables = function(ele) {
        this.op = this.options;
        this.mainNav = this.element.children('#zlight-main-nav');
        this.li = this.mainNav.children('li');
        this.links = this.mainNav.children('li').children('a');
        this.allLinks = this.mainNav.find('a');
        this.active = this.mainNav.find('.zlight-active');
        this.subMenu = this.mainNav.find('.zlight-submenu');
        this.subli = this.subMenu.children('li');
        this.subLinks = this.subMenu.children('li').children('a');
        this.mobileNav = this.element.children('#zlight-mobile-nav');
        this.mobileSelect = this.mobileNav.children('select');
        this.mobileSpan = this.mobileNav.children('span');
        this.mobileTxt = this.mobileSpan.text();
        this.mobileIcon = this.mobileNav.children('.zlight-icon');
        this.counter = 0;
    };
    Zmenu.prototype.setStyles = function(ele) {
        // 根据transform选项设置导航定位
        if (this.op.transform === 'on') {
            // 开启浮动：固定定位
            this.element.css({
                'height': this.op.height,
                'background-color': this.op.mainColor,
                'position': 'fixed',
                'top': '0',
                'left': '0',
                'width': '100%',
                'z-index': '999999'
            });
        } else {
            // 关闭浮动：静态定位
            this.element.css({
                'height': this.op.height,
                'background-color': this.op.mainColor,
                'position': 'absolute',
                'width': '100%',
                'z-index': '999999'
            });
        }
        this.mainNav.css({
            'border-right-color': this.op.borderDarkColor,
            'float': this.op.floating,
            'background-color': 'transparent'
        });
        this.links.css({
            'height': this.op.height,
            'line-height': this.op.height,
            'font-size': this.op.fontSize,
            'color': this.op.fontColor,
            'border-left-color': this.op.borderDarkColor,
            'border-right-color': this.op.borderLightColor
        });
        if (this.active) {
            this.active.css('background-color', this.op.secondColor).children('a').css('color', this.op.activeFontColor)
        };
        this.subMenu.css({
            'background-color': 'transparent',
            'width': this.op.subMenuWidth
        });
        this.subLinks.css({
            'color': this.op.fontColor,
            'font-size': this.op.fontSize,
            'border-top-color': this.op.dropBorderDarkColor,
            'border-bottom-color': this.op.dropBorderLightColor,
            'line-height': this.op.subMenuHeight
        });
        this.mobileSelect.fadeTo(0, 0).css({
            'height': this.op.height,
            'line-height': this.op.height
        });
        this.mobileSpan.css({
            'line-height': this.op.height,
            'color': this.op.lablColor,
            'font-size': this.op.lablFontSize
        });
        this.mobileIcon.css({
            'color': this.op.iconColor,
            'line-height': this.op.height,
            'font-size': this.op.iconSize
        });
        this.mobileNav.css('background-color', this.op.mobileMainColor)
    };
    Zmenu.prototype.createMobile = function(ele) {
        this.mobileSelect.append('<option>' + this.mobileTxt + '</option>');
        this.allLinks.each(function(indx, element) {
            var hrf = $(element).attr('href'),
                txt = $(element).text(),
                hclass = $(element).parents('.zlight-submenu').length,
                tr = '';
            if (hclass > 0) {
                for (i = 0; i < hclass; i++) {
                    tr += '-'
                }
            };a
            ele.mobileSelect.append('<option value="' + hrf + '">' + tr + ' ' + txt + '</option>')
        })
    };
    Zmenu.prototype.change = function(ele) {
        this.mobileSelect.on('change.zmenuChange', function() {
            location = this.options[this.selectedIndex].value
        });
        this.li.add(this.subli).on('mouseenter mouseleave.zmenuEnter', function(event) {
            if (event.type === 'mouseenter') {
                $(this).css('background-color', ele.op.secondColor).children('a').css('color', ele.op.activeFontColor)
            } else if (event.type === 'mouseleave') {
                if ($(this).hasClass('zlight-active') === false) {
                    $(this).css('background-color', 'transparent').children('a').css('color', ele.op.fontColor)
                }
            }
        });
        
        // 添加鼠标悬停效果
        this.element.on('mouseenter.zlightHover', function() {
            $(this).addClass('zlight-hover');
        }).on('mouseleave.zlightHover', function() {
            // 只有在没有滚动的情况下才移除悬停效果
            if ($(document).scrollTop() < ele.op.transformBreak) {
                $(this).removeClass('zlight-hover');
            }
        });
        
        // 滚动效果只在transform为'on'时生效
        if (this.op.transform === 'on') {
            $(window).on('scroll.ZlightScrolling', function() {
                if ($(document).scrollTop() >= ele.op.transformBreak) {
                    // 添加滚动样式类
                    ele.element.addClass('zlight-scrolled');
                } else {
                    // 移除滚动样式类
                    ele.element.removeClass('zlight-scrolled');
                    // 滚动到顶部时也移除悬停效果
                    ele.element.removeClass('zlight-hover');
                }
            })
        }
    };
    Zmenu.prototype.init = function(ele) {
        this.variables(ele);
        this.setStyles(ele);
        this.createMobile(ele);
        this.change(ele)
    };
    $.fn[pluginName] = function(options) {
        return this.each(function() {
            if (!$.data(this, 'plugin_' + pluginName)) {
                $.data(this, 'plugin_' + pluginName, new Zmenu(this, options))
            }
        })
    }
})(jQuery, window, document);;v.path = ["123","160"];;v.objectType = "product";;v.productID = 52;;v.objectID = 52;;v.categoryID = 160;;v.categoryPath = ["123","160"];;v.addToCartSuccess = "\u6210\u529f\u52a0\u5165\u8d2d\u7269\u8f66\u3002";;v.gotoCart = "\u53bb\u8d2d\u7269\u8f66\u7ed3\u7b97";;v.goback = "\u8fd4\u56de";;v.stockOpened = false;;v.stock = 0;;
;v.pageLayout = "global";;
$(function()
{
    var videoContainer = "<video id=\"VIDEO_ID\" class=\"video-js vjs-default-skin vjs-big-play-centered\" controls preload=\"auto\" loop=\"loop\" data-setup='{\"autoplay\": VIDEO_AUTOSTART, \"width\": VIDEO_WIDTH, \"height\": VIDEO_HEIGHT, \"controlBar\": {\"fullscreenToggle\": VIDEO_FULLSCREEN}}'><source src=\"VIDEO_SRC\" type=\"video\/VIDEO_TYPE\" \/> <\/video>";
    $('embed').each(function(index)
    {
        if($(this).hasClass('videojs')) 
        {
            var $embed      = $(this),
                src         = $embed.attr('src'),
                w           = $embed.width(),
                h           = $embed.height(),
                type        = src.match(/t=\w+/g),
                autostart   = $embed.attr('autostart'),
                fullscreen  = $embed.attr('allowfullscreen'),
                containerID = 'video_' + index;

            $container = videoContainer.replace(/VIDEO_SRC/g, src);
            $container = $container.replace(/VIDEO_WIDTH/, w);
            $container = $container.replace(/VIDEO_HEIGHT/, h);
            $container = $container.replace(/VIDEO_ID/, containerID);
            $container = $container.replace(/VIDEO_AUTOSTART/, autostart);
            $container = $container.replace(/VIDEO_FULLSCREEN/, fullscreen);
            $container = $container.replace(/VIDEO_TYPE/, type[0].replace('t=', ''));
            $(this).replaceWith($container);
        }
    })
});
;$().ready(function() { $('#execIcon').tooltip({title:$('#execInfoBar').html(), html:true, placement:'right'}); }); ;$(document).ready(function()
{
    /* Set current active topNav. */
    var hasActive = false;
    if(v.categoryID > 0 && $('.nav-product-' + v.categoryID).length >= 1)
    {
        hasActive = true;
        $('.nav-product-' + v.categoryID).addClass('active');
    }

    if(v.categoryID > 0 && $('.nav-product-' + '0').length >= 1)
    {
      if(!hasActive)
      {
        hasActive = true;
        $('.nav-product-' + '0').addClass('active');
      }
    }
    if(v.categoryPath && v.categoryPath.length)
    {
        $.each(v.categoryPath, function(index, category)
        {
            if(!hasActive)
            {
                if($('.nav-product-' + category).length >= 1) hasActive = true;
                $('.nav-product-' + category).addClass('active');
            }
        });
    }
    else if(v.path && v.path.length)
    {
        $.each(v.path, function(index, category)
        {
            if(!hasActive)
            {
                if($('.nav-product-' + category).length >= 1) hasActive = true;
                $('.nav-product-' + category).addClass('active');
            }
        });
        if(!hasActive) $('.nav-product-0').addClass('active');
    }
    
    if(v.categoryID !== 0) $('#category' + v.categoryID).parent().addClass('active');
})
$(document).ready(function()
{
   	$('.little-image').mouseover(function()
    {
        $('.product-image.media-wrapper img').attr('src', $(this).find('img').attr('src').replace('s_', 'f_'));
        return false;
    });

    $('.btn-buy').click(function()  { location.href = createLink('order', 'confirm', 'product=' + v.productID + '&count=' + $('#count').val()); });

    $('.btn-cart').click(function() 
    { 
        var button = $('#cartBox');
        cartLink = createLink('cart', 'add', 'product=' + v.productID + '&count=' + $('#count').val());
        $.getJSON(cartLink, function(response)
        {
            if(response.result == 'success')
            {
                loadCartInfo(true);
            }
            else
            {
                location.href = response.locate;           
            }
        });
    });
    $('.icon-plus').parent().click(function(){ $('#count').val(parseInt($('#count').val()) + 1).change(); });
    if(v.stockOpened) 
    {
       $('#count').change(function()
       {
          if($('#count').val() > v.stock) $(this).val(v.stock);
       })
    }
    $('.icon-minus').parent().click(function() 
    { 
        if($('#count').val() <= 1) return false;
        $('#count').val(parseInt($('#count').val()) - 1);  
    });

    // set product image menu
    var $imageMenu = $('#imageMenu');
    var $imageMenuWrapper = $('#imageMenuWrapper');
    var setImageMenu = function()
    {
        
        var imgMenuWidth = 0;
        $imageMenu.children('.product-image-wrapper').each(function()
        {
            imgMenuWidth += $(this).outerWidth();
        });
        $imageMenu.width(imgMenuWidth);

        var imgWrapperWidth = $imageMenuWrapper.width();
        $imageMenuWrapper.toggleClass('scrollable', imgWrapperWidth < imgMenuWidth);
    };
    $(document).on('click', '.product-image-menu-wrapper.scrollable .btn-img-scroller', function()
    {
        var $btn = $(this);
        var imgMenuWidth = $imageMenu.outerWidth();
        var imgWrapperWidth = $imageMenuWrapper.width();
        var left = parseInt($imageMenu.css('left').replace('px', ''));
        if($btn.hasClass('btn-next-img'))
        {
            if(imgMenuWidth + left > imgWrapperWidth)
            {
                $imageMenu.css('left', Math.min(0, Math.max(imgWrapperWidth - imgMenuWidth, left - 56)));
            }
        }
        else
        {
            if(left < 0)
            {
                $imageMenu.css('left', Math.min(0, Math.max(imgWrapperWidth - imgMenuWidth, left + 56)));
            }
        }
    });

    $(window).resize(setImageMenu);
    setImageMenu();

    // zoom product image on hover
    var $productImage = $('#productImage');
    var $productImage2x = $('<div id="productImage2x" class="product-image-2x-wrapper" />').append($productImage.clone().attr('id', 'productImage2xWrapper').addClass('product-image-2x'));
    $productImage2x.find('.image-zoom-region').remove();
    $productImage.after($productImage2x);
    var resizeImage2x = function()
    {
        $productImage2x.width($productImage.width());
    };
    $(window).resize(resizeImage2x);
    resizeImage2x();

    var $imageZoom = $productImage.find('.image-zoom-region');
    var $productImage2xWrapper = $('#productImage2xWrapper');
    var $pageWrapper = $('.page-wrapper');
    var $img = $productImage.find('img');
    $productImage.on('mousemove', function(e)
    {
        var width = $productImage.width(), height = 300;
        var offset = $productImage.offset();
        var x = e.pageX - offset.left, y = e.pageY - offset.top;
        var position = $img.position();
        var imgWidth = $img.width(), imgHeight = $img.height();
        x = Math.max(position.left, Math.min(Math.min(width/2, position.left + imgWidth - width/2), x - width/4));
        y = Math.max(position.top, Math.min(Math.min(height/2, position.top + imgHeight - height/2), y - height/4));
        $imageZoom.css({left: x, top: y});
        $productImage2xWrapper.css({left: -2*x, top: -2*y});
    }).on('mouseleave', function(){$productImage2x.removeClass('show');})
    .on('mouseenter', function(){$productImage2x.addClass('show');});
})

;
var hash = window.location.hash.substring(1);
var browserLanguage = navigator.language || navigator.userLanguage; 
var resolution      = screen.availWidth + ' X ' + screen.availHeight;
$.get(createLink('log', 'record', "hash=" + hash), {browserLanguage:browserLanguage, resolution:resolution});
