﻿function changeMenu(act, num) {
    if (act) document.images["menuImg" + num].src = menuOn[num].src;
    else document.images["menuImg" + num].src = menuOff[num].src;
}

var hideDelay = 1000;  // メニューが消えるまでの時間 1秒＝1000

var runable = (!document.getElementById) ? (!document.all) ? (!document.layers) ? -1 : 1 : 2 : 3;
var ie = (document.all) ? true : false;
var nowShowing = "$";
var showedMenu = "";
var onLayer = onLink = flgShow = 0;
var timerID = st = en = 0;
var mx = my = 0;

window.onload = function() { if (runable > 1) document.onmousemove = function(event) { delayHideMenu(event) } }

// HTMLオブジェクト取得
function getElm(name, style) {
    var doc = self.document;
    var gobj = (runable == 2 ? doc.all(name) : doc.getElementById(name));
    if (style && runable > 1) gobj = gobj.style;
    return gobj;
}
// メニュー表示
function showMenu(n, X, Y) {
    if (runable < 2) return;
    var obj = getElm("subMenu" + n, 1);
    var lnk = getElm("menuButton" + n);
    var lnks = getElm("menuButton" + n, 1);
    nowShowing = n;

    // 表示中のメニューがある場合、それを非表示にする
    if (showedMenu != "" && showedMenu != nowShowing) hideMenu(showedMenu);
    if (obj.visibility == "visible" && onLink == 1) return;
    lnk.onmouseout = leaveLink;
    onLayer = onLink = 1;
    obj.left = X || parseInt(lnks.left);
    obj.top = Y || parseInt(lnks.top) + ((runable == 1) ? lnk.clip.height : lnk.offsetHeight);
    obj.visibility = "visible";
    showedMenu = nowShowing;
    flgShow = 1;
    clearTimeout(timerID);
    st = t();
}
// リンクからマウスが離れた
function leaveLink() {
    onLink = 0;
    en = t();
}
// メニューを非表示にするかどうか判定する
function delayHideMenu(e) {
    mx = gmx(e);
    my = gmy(e);
    if (nowShowing == "$" || flgShow == 0 || st == 0) return;
    if (onLink == 0 && checkPosition()) {
        // リンクとメニューからマウスが離れている
        en = t();
        onLayer = 0;
        hideMenu();
    }
    else {
        st = t();
        onLayer = 1;
        clearTimeout(timerID);
    }
}
//メニューを非表示にするかどうか判定する
function hideMenu(n) {
    clearTimeout(timerID);
    if (!n) {
        if (nowShowing == "$" || onLayer != 0) return;
        if (onLink == 1) {
            //リンクにマウスが乗っている
            timerID = setTimeout("hideMenu()", hideDelay);
            st = t();
            return;
        }
        else if (((en - st) % hideDelay) < hideDelay && st != 0) {
            //指定した時間が経過していない
            clearTimeout(timerID);
            timerID = setTimeout("hideMenu()", hideDelay);
            st = 0;
            return;
        }
        else if (!checkPosition()) {
            //メニューにマウスが乗っている
            st = t();
            return;
        }
    }

    //メニュー非表示
    getElm("subMenu" + ((n) ? n : nowShowing), 1).visibility = "hidden";
    showedMenu = "";
    onLayer = flgShow = 0;

    changeMenu(0, ((n) ? n : nowShowing));  //元の画像部分も戻す
}
function checkPosition() {
    //マウスがメニューに乗っているかどうか判定
    if (nowShowing == "$") return;
    var obj = getElm("subMenu" + nowShowing);
    var x = mx - ((runable == 1) ? parseInt(obj.left) : obj.offsetLeft);
    var y = my - ((runable == 1) ? parseInt(obj.top) : obj.offsetTop);
    var w = (runable == 1) ? parseInt(obj.clip.width) : obj.offsetWidth;
    var h = (runable == 1) ? parseInt(obj.clip.height) : obj.offsetHeight;
    if (onLink == 0 && (x <= 0 || y <= 0 || x >= w || y >= h)) return true;
    return false;
}
function t() { return (new Date()).getTime(); }

//マウス位置取得X
function gmx(e) {

    if (ie) return document.body.scrollLeft + event.clientX;
    else return e.pageX;
}
//マウス位置取得Y
function gmy(e) {
    if (ie) return document.body.scrollTop + event.clientY;
    else return e.pageY;
}
//サブメニューが無い
function subMenuOff(n) {
    if (runable < 2) return;
    if (n == 0) {
        hideMenu(showedMenu);
        showedMenu = "";
        onLayer = flgShow = 0;
    }
}

