// 変数を初期化
var JUMenu_hashClassName = {};
var JUMenu_hashId = {
    'DIV'  : 'JUMenuDiv',
    'MAIN' : 'JUMenuMain'
};

var JUMenu_objMenu = null;
var JUMenu_objErrorOutputArea = null;

var JUMenu_intDivCount = 0;
var JUMenu_objCurrentDispDiv = null;
var JUMenu_aryCurrentDispDivs = new Array();


// class名を設定
function JUMenu_setClassNamePrefix(objClassName) {
    JUMenu_hashClassName = objClassName;
    return;
}

// 初期化
function JUMenu_init(strMenuId) {
    try {
        JUMenu_objMenu = document.getElementById(strMenuId);
    } catch (e) {
        return false;
    }
    JUMenu_initMenu();
    return true;
}

// メニューを初期化
function JUMenu_initMenu() {
    if (JUMenu_objMenu == null) return false;
    JUMenu_objMenu.style.visibility = 'visible';
    var objTop = JUMenu_objMenu.getElementsByTagName('UL');
    if (objTop.length == 0) return false;
    var objItems = objTop[0].getElementsByTagName('LI');
    if (objItems.length == 0) return false;
    var objItem = objItems[0];
    var intDepth = 1;
    var intItemCount = 0;
    while (objItem) {
        if (objItem.nodeType == 3) {
            objItem = objItem.nextSibling;
            continue;
        }
        if (objItem.tagName == 'LI') {
            var objA = objItem.getElementsByTagName('A');
            if (objA.length == 0) {
                objItem = objItem.nextSibling;
                continue;
            }
            if (JUMenu_hashClassName['A'])
                objA[0].className = JUMenu_hashClassName['A'] + intDepth;
            objA[0].onclick = JUMenu_onClick;
            objItem.id = JUMenu_hashId['MAIN'] + ++intItemCount;
            var objUL = objItem.getElementsByTagName('UL');
            if (objUL.length > 0)
                JUMenu_initSubMenu(objUL[0], intDepth + 1);
        }
        objItem = objItem.nextSibling;
    }
    return true;
}

// サブメニューの初期化
function JUMenu_initSubMenu(objSubMenu, intDepth) {
    var objDiv = document.createElement('DIV');
    with (objDiv) {
        style.display = 'none';
        id = JUMenu_hashId['DIV'] + ++JUMenu_intDivCount;
        className = JUMenu_hashClassName['DIV'] + intDepth;
    }
    objSubMenu.parentNode.appendChild(objDiv);
    objDiv.appendChild(objSubMenu);
    var childMenu = objSubMenu.getElementsByTagName('LI')[0];
    while (childMenu) {
        if (childMenu.nodeType == 3) {
            childMenu = childMenu.nextSibling;
            continue;
        }
        if (childMenu.tagName == 'LI') {
            var objA = childMenu.getElementsByTagName('A');
            if (objA.length == 0) {
                childMenu = childMenu.nextSibling;
                continue;
            }
            objA[0].className = JUMenu_hashClassName['A'] + intDepth;
            var objUL = childMenu.getElementsByTagName('UL');
            if (objUL.length > 0) {
                JUMenu_initSubMenu(objUL[0], intDepth + 1);
            }
            objA[0].onclick = JUMenu_onClick;
        }
        childMenu = childMenu.nextSibling;
    }
    return true;
}

// メニュークリック時の動作
function JUMenu_onClick() {
    // クリックされたメニューを取得
    var objParent = this.parentNode;
    JUMenu_objCurrentDispDiv = null;
    if (objParent && (objParent.nodeType != 3) && (objParent.tagName == 'LI')) {
        var objDivs = objParent.getElementsByTagName('DIV');
        if (objDivs.length > 0) {
            JUMenu_objCurrentDispDiv = objDivs[0];
        }
    }

    // クリックされたメニューが展開済みか判定
    var intExpanded = -1;
    if (JUMenu_objCurrentDispDiv) {
        for (var i = 0; i < JUMenu_aryCurrentDispDivs.length; i++) {
            if (JUMenu_aryCurrentDispDivs[i] == JUMenu_objCurrentDispDiv) {
                intExpanded = i;
            }
        }
    }

    // 折りたたむ
    if (intExpanded > 0) {
        // 自分より下の階層を折りたたむ
        for (var i = 0; i <= intExpanded; i++) {
            JUMenu_aryCurrentDispDivs[i].style.display = 'none';
        }
        JUMenu_aryCurrentDispDivs.splice(0, intExpanded + 1);
        return;
    } else if (intExpanded == 0) {
        // 自分以下の階層を折りたたむ
        JUMenu_aryCurrentDispDivs[0].style.display = 'none';
        JUMenu_aryCurrentDispDivs.shift();
        return;
    } else {
        // すべて折りたたむ
        for (var i = 0; i < JUMenu_aryCurrentDispDivs.length; i++) {
            JUMenu_aryCurrentDispDivs[i].style.display = 'none';
        }
        JUMenu_aryCurrentDispDivs = new Array();
    }

    // クリックしたメニューより上の階層を取得
    var objParent = this.parentNode;
    JUMenu_aryCurrentDispDivs = new Array();
    if (JUMenu_objCurrentDispDiv && (intExpanded != 0)) {
        JUMenu_aryCurrentDispDivs.push(JUMenu_objCurrentDispDiv);
    }
    while (objParent && (objParent.nodeType != 3) && (objParent.tagName != 'BODY')) {
        if ((objParent.tagName == 'DIV') && (objParent.id.indexOf(JUMenu_hashId['DIV']) >= 0)) {
            if ((objParent != JUMenu_objCurrentDispDiv) || (JUMenu_objCurrentDispDiv.style.display != 'none'))
                JUMenu_aryCurrentDispDivs.push(objParent);
        }
        objParent = objParent.parentNode;
    }

    // 展開する
    for (var i = JUMenu_aryCurrentDispDivs.length - 1; i >= 0; i--) {
        JUMenu_aryCurrentDispDivs[i].style.display = 'block';
    }

    return;
}

// vim: set sts=4 sw=4 ts=4 et :

