var $j = jQuery;

function centerAlignMainMenu($menuContainer) {
    var $menuItems = $menuContainer.children("li"); // 대메뉴 항목들
    var containerWidth = $menuContainer.width();   // 컨테이너 넓이
    var totalMenuWidth = 0;

    // 1. 대메뉴 항목들의 넓이 합산 (숨겨진 서브메뉴 제외)
    $menuItems.each(function () {
        var $menuItem = $j(this);
        if (!$menuItem.hasClass("pc_hide")) { // 숨겨진 메뉴 제외
            totalMenuWidth += $menuItem.outerWidth(true); // 마진 포함
        }
    });

    // 2. 여백 계산 (컨테이너의 넓이 - 대메뉴 넓이 합)
    var remainingSpace = containerWidth - totalMenuWidth;

    if (remainingSpace > 0) {
        // 3. 좌우 여백 분배
        var paddingLeft = remainingSpace / 2;
        $menuContainer.css({
            "padding-left": paddingLeft + "px",
            "padding-right": paddingLeft + "px"
        });
    } else {
        // 메뉴가 컨테이너보다 넓은 경우 여백 제거
        $menuContainer.css({
            "padding-left": "0px",
            "padding-right": "0px"
        });
    }
}

function documentClickHandler(e) {
	if(!$j(e.target).closest("#usm-menu-wrap-id").length) {
		closeMain();	
	}
}
function documentKeyupHandler(e) {
	switch(e.code) {
		case "Escape":
			if($j(e.target).closest("#usm-menu-wrap-id").length) {
				event.preventDefault();
				closeMain();
			}
			break;
		case "Tab":
			if(!$j(e.target).closest("#usm-menu-wrap-id").length) {
				closeMain();
			}	
			break;
		
	}
}
function closeMain() {
	$j("html").removeClass("scroll-no");
	$j("#usm-menu-wrap-id > ul > li").removeClass("active");
}
function initPCMenu() {
	$j("body").removeClass("mobile");
	
	$j("#usm-menu-wrap-id > ul > li.has-sub > a").off("click").on({
		click:function() {
			event.preventDefault();
			$j(this).parent().parent().children('li').not($j(this).parent()).removeClass("active");
			if($j(this).parent().hasClass("active")) {
				$j(this).parent().removeClass("active");
				$j("html").removeClass("scroll-no");
				$j(this).attr("aria-expanded", "false");
			} else {
				$j("html").addClass("scroll-no");
				$j(this).parent().addClass("active");
				$j(this).attr("aria-expanded", "true");
			}
			
		}
	});


	$j(document).on({
		click:documentClickHandler,
		keyup:documentKeyupHandler,
		keydown:function(e) {
			switch(e.code) {
				case "Home":
					if($j(e.target).closest("#usm-menu-wrap-id").length) {
			            event.preventDefault();
			            for(var i=0;i<$menuDepthList.length;i++) {
							var obj = $j($menuDepthList[i]);
							obj.children("a").focus();
						}
			        }
		            break;
				case "End":
					if($j(e.target).closest("#usm-menu-wrap-id").length) {
			        	event.preventDefault();
			            for(var i=$menuDepthList.length-1;i>0;i--) {
							var obj = $j($menuDepthList[i]);
							obj.children("a").focus();
						}
			        }
		            break;
				case "ArrowRight":
          		case "ArrowDown":
					if($j(e.target).closest("#usm-menu-wrap-id").length) {
						event.preventDefault();
						var obj = $j(e.target).parent().next();
						var ended = false;
						do {
							if(obj.length) {
								if(obj.hasClass("pc_hide")) {
									obj = obj.next();
								} else {
									obj.children("a").focus();
									ended = true;
								}
							} else {
								ended = true;
							}
						} while(!ended);
					}
					break;
				case "ArrowLeft":
				case "ArrowUp":
					if($j(e.target).closest("#usm-menu-wrap-id").length) {
						event.preventDefault();
						var obj = $j(e.target).parent().prev();
						var ended = false;
						do {
 							if(obj.length) {
		  						if(obj.hasClass("pc_hide")) {
			  						obj = obj.prev();
		  						} else {
			  						obj.children("a").focus();
			  						ended = true;
		  						}
							} else {
								ended = true;
							}
  						} while(!ended);
					}
					break;
			}
		},
	});
}


function initMobileMenu() {
	$j("body").addClass("mobile");
	
	$j(document).off({
		click:documentClickHandler
	});
	
    // 모바일 메뉴 열기/닫기 버튼 (.spinner-master) 설정
    $j(".spinner-master").off("click").on("click", function () {
		if(winSize == "mo") {
			$j("#usm-menu-wrap-id").toggleClass("mobile-active");
			if($j("#usm-top-id").hasClass("scroll-up")) {
				var offset=$j("#usm-menu-wrap-id").offset();
				$j('html, body').animate({scrollTop:offset.top},500); 
			}
	        $j(".spinner-master").toggleClass("active");
		}
    });

    // 대메뉴 클릭 시 서브메뉴 토글
    $j("#usm-menu-wrap-id > ul > li.has-sub > a").off("click").on("click", function (e) {
		if(winSize == "mo") {
	        e.preventDefault();
	        var $submenu = $j(this).siblings(".depth2");
	        if ($submenu.length > 0) {
	            //$submenu.slideToggle();
	        }
	        $j(this).parent().toggleClass("active");
		}
    });

    // 모바일 메뉴는 중앙 정렬 불필요
    $j(".mobile-active > ul").css({
        "padding-left": "0px",
        "padding-right": "0px"
    });
}

var winSize;
$j(document).ready(function () {
    function handleMenuTypeChange(mediaQuery) {
		    var $menuContainer = $j("#usm-menu-wrap-id > ul");
		    $menuContainer.attr("aria-label", "메인 메뉴");
		    
		    var $subMenus = $j(".depth2");
			var $menuDepthList = $j("#usm-menu-wrap-id > ul > li");//.not(".pc_hide");	
			
			for(var i=0;i<$menuDepthList.length;i++) {
				var main = $j($menuDepthList[i]);
				var sub = main.find(".depth2");
				var subList = main.find(".depth2 > ul > li");//.not(".pc_hide");
				if(subList.length) {
					var mainLink = main.children("a");
					var uniqueIdx = `main-menu-${Math.random().toString(36).substring(2, 9)}`;
					mainLink.attr("aria-controls", uniqueIdx);
					mainLink.attr("aria-expanded", "false");
					sub.attr("id", uniqueIdx);
					main.addClass("has-sub");
				}
			}
			
        if (mediaQuery.matches) {
			winSize = "pc";
            initPCMenu(); // 1024px 이상: PC 메뉴
        } else {
			winSize = "mo";
            initMobileMenu(); // 1024px 미만: 모바일 메뉴
        }
    }

    var mediaQuery = window.matchMedia("(min-width: 1024px)");
    handleMenuTypeChange(mediaQuery);
    mediaQuery.addEventListener("change", handleMenuTypeChange);
    
    const $topButton = $j('#usm-top-btn');
	var _lastScrollY = 0;
	$j(window).on('scroll', function () {
		var $wrap = $j("#usm-top-id");
		const _conOffsetTop = document.querySelector("#usm-middle-id").offsetTop;
		const _scrollY = window.scrollY;
		const _scrollDown = _scrollY > _lastScrollY;
		const _scrollUp = _scrollY < _lastScrollY;
		
			if (_scrollY > _conOffsetTop + 50 && _scrollDown) {
			$wrap.addClass("scroll-down");
			$wrap.removeClass("scroll-up");
		} else if (_scrollY > _conOffsetTop + 50 && _scrollUp) {
			$wrap.addClass("scroll-up");
			$wrap.removeClass("scroll-down");
		} else {
			$wrap.removeClass("scroll-up");
			$wrap.removeClass("scroll-down");
		}
		_lastScrollY = _scrollY;

		if ($j(window).scrollTop() > 200) {
	      $topButton.fadeIn(); // 스크롤이 200px 이상일 때 버튼 표시
	    } else {
	      $topButton.fadeOut(); // 스크롤이 200px 미만일 때 버튼 숨김
	    }
  });

  // 버튼 클릭 시 상단으로 이동
  $topButton.on('click', function () {
    $j('html, body').animate({ scrollTop: 0 }, 500); // 0.5초 동안 부드럽게 이동
    $j('#usm-access a:first').focus();
    
  });
});
