<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
?>

<?php if ($is_admin == 'super') {  ?><!-- <div style='float:left; text-align:center;'>RUN TIME : <?php echo get_microtime()-$begin_time; ?><br></div> --><?php }  ?>

<!-- ie6,7에서 사이드뷰가 게시판 목록에서 아래 사이드뷰에 가려지는 현상 수정 -->
<!--[if lte IE 7]>
<script>
$(function() {
    var $sv_use = $(".sv_use");
    var count = $sv_use.length;

    $sv_use.each(function() {
        $(this).css("z-index", count);
        $(this).css("position", "relative");
        count = count - 1;
    });
});
</script>
<![endif]-->

<?php run_event('tail_sub'); ?>

<!-- @ 태그 발견 시 프로필 링크처리{ -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    var currentPage = window.location.pathname;
    var blockedPages = [
        '/bbs/member_profile.php',
        '/bbs/profile.php'
    ];
    if (blockedPages.includes(currentPage)) {
        return;
    }

    // 정규 표현식 수정: @ 앞에 공백이 없을 경우 매치하지 않도록 설정
    var regex = /(?<!\S)@(\w+)/g; 
    var textNodes = document.evaluate(
        "//text()",
        document,
        null,
        XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
        null
    );

    for (var i = 0; i < textNodes.snapshotLength; i++) {
        var node = textNodes.snapshotItem(i);

        // textarea 내부의 텍스트 노드는 처리하지 않음
        if (node.parentNode.tagName.toLowerCase() === 'textarea') {
            continue;
        }

        var text = node.nodeValue;
        var newText = text.replace(regex, function(match, id) {
            var url = 'http://' + window.location.host + '/bbs/profile.php?mb_id=' + id;
            return '<a href="' + url + '" class="mansion" style="text-decoration-line: none;color:#2497ff;">@' + id + '</a>';
        });

        if (newText !== text) {
            var newNode = document.createElement('span');
            newNode.innerHTML = newText;
            node.parentNode.replaceChild(newNode, node);
        }
    }
});
</script>
<!-- # 검색 태그 발견 시 검색 링크처리{ -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    var regex = /(?<!\S)#([\w가-힣]+)/g; // 앞에 공백이 없을 때만 매치하도록 수정
    var textNodesIterator = document.evaluate(
        "//text()",
        document,
        null,
        XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
        null
    );
    
    for (var i = 0; i < textNodesIterator.snapshotLength; i++) {
        var textNode = textNodesIterator.snapshotItem(i);

        // textarea 내부의 텍스트 노드는 처리하지 않음
        if (textNode.parentNode.tagName.toLowerCase() === 'textarea') {
            continue;
        }

        var originalText = textNode.nodeValue;
        var modifiedText = originalText.replace(regex, function(match, title) {
            if (textNode.parentNode.tagName.toLowerCase() === 'a' || 
                textNode.parentNode.tagName.toLowerCase() === 'style' || 
                textNode.parentNode.tagName.toLowerCase() === 'id') {
                return match;
            } else {
                var searchUrl = 'http://' + window.location.host + '/bbs/search.php?sfl=wr_subject%7C%7Cwr_content%7C%7Cmb_id%7C%7Cwr_name%7C%7Cwr_datetime%7C%7Cwr_last%7C%7Cwr_ip&sop=and&stx=' + encodeURIComponent(title);
                return '<a href="' + searchUrl + '" class="search_tag" style="text-decoration-line: none;color:#ee8438;">#' + title + '</a>';
            }
        });

        if (modifiedText !== originalText) {
            var newNode = document.createElement('span');
            newNode.innerHTML = modifiedText;
            textNode.parentNode.replaceChild(newNode, textNode);
        }
    }
});
</script>
<!-- 멘션 시스템{ -->
<script>
    document.addEventListener('DOMContentLoaded', function() {
        var pageHTML = document.documentElement.innerHTML;
        var regex = /@(\w+)/g;
        var matches = pageHTML.match(regex);

        if (matches) {
            matches.forEach(function(match) {
                var memberId = match.slice(1);

                if (memberId) {
                    var refererUrl = window.location.href;
                    sendMentionMemoToPHP(memberId, refererUrl);
                }
            });
        }
    });

    function sendMentionMemoToPHP(memberId, refererUrl) {
        var xhr = new XMLHttpRequest();
        xhr.open("POST", "https://" + window.location.hostname + "/bbs/alarm.php", true);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xhr.onreadystatechange = function() {
            if (xhr.readyState === 4 && xhr.status === 200) {
                console.log("Memo sent to member: " + memberId);
            }
        };
        xhr.send("member_id=" + memberId + "&referer_url=" + encodeURIComponent(refererUrl));
    }
</script>

<!-- 댓글 알람{ -->
<?php
function get_member_id_from_view($view) {
    // $view['name']에서 회원 아이디 추출
    $mb_id = isset($view['mb_id']) ? $view['mb_id'] : null;

    if ($mb_id) {
        return $mb_id; // 회원 아이디 반환
    } else {
        return null; // 회원 아이디가 없을 경우 null 반환
    }
}
?>
<script>
document.addEventListener("DOMContentLoaded", function() {
    const section = document.querySelector("#bo_vc");
    if (section) {
        const articles = section.querySelectorAll("article[id^='c_']");
        articles.forEach(article => {
            const link = article.querySelector("span.sv_wrap a.sv_member");
            const recvMbId = "<?php echo get_member_id_from_view($view); ?>"; // PHP로부터 받는 아이디

            // 쪽지 전송
            const commentAuthorId = link ? '@' + link.href.split('mb_id=')[1] : '비회원';
            
            fetch("https://" + window.location.hostname + "/bbs/alarm_comment.php", {
                method: "POST",
                headers: {
                    "Content-Type": "application/x-www-form-urlencoded"
                },
                body: new URLSearchParams({
                    member_id: recvMbId,
                    referer_url: window.location.href,
                    comment_author_id: commentAuthorId
                })
            })
            .then(response => response.text())
            .then(data => {
                console.log(data); // 서버에서 받은 응답 처리
            })
            .catch(error => {
                console.error("쪽지 전송 실패:", error);
            });
        });
    }
});
</script>

<!-- 폰트 커스텀{ -->
<?php
// 작동 안할 페이지 목록
$blocked_pages = ['member_profile.php', 'profile.php', 'register_form.php', 'follow.php', 'memo.php'];

$current_file = basename($_SERVER['PHP_SELF']);

// 현재 파일이 차단된 페이지 목록에 있는지 확인
if (!in_array($current_file, $blocked_pages)) {
    ?>
<script>
    function setCookie(name, value, days) {
        const expires = new Date(Date.now() + days * 864e5).toUTCString();
        document.cookie = name + '=' + encodeURIComponent(value) + '; expires=' + expires + '; path=/';
    }

    function getCookie(name) {
        return document.cookie.split('; ').reduce((r, v) => {
            const parts = v.split('=');
            return parts[0] === name ? decodeURIComponent(parts[1]) : r;
        }, '');
    }

    function applyFont(font) {
        document.body.style.fontFamily = font;
        document.querySelectorAll('.latest_member_id, .latest_subject, .latest_content').forEach(div => {
            div.style.fontFamily = font;
        });
        setCookie('selectedFont', font, 30);
    }

    document.addEventListener('DOMContentLoaded', function() {
        const font = getCookie('selectedFont');
        if (font) {
            applyFont(font);
            document.getElementById('fontSelector').value = font;
        }

        document.getElementById('fontSelector').addEventListener('change', function() {
            applyFont(this.value);
        });
    });
</script>
<?php } ?>
<!-- }폰트 커스텀 끝 -->
</body>
</html>
<?php echo html_end(); // HTML 마지막 처리 함수 : 반드시 넣어주시기 바랍니다. ?>
