var FJMenuFolder = {};

// 開閉のマーク
//FJMenuFolder.openMark = '↓';
//FJMenuFolder.closeMark = '↑';
FJMenuFolder.openMark = '<img src="http://hjfuji.s8.coreserver.jp/arrow_open.gif" width="13" height="12" alt="" />';
FJMenuFolder.closeMark = '<img src="http://hjfuji.s8.coreserver.jp/arrow_close.gif" width="13" height="12" alt="" />';

FJMenuFolder.Setup = function(id) {
    // idが「plgXXXXXXtitle」の要素を探す
    var titleElement = document.getElementById('plg_' + id + '_title');
    if (titleElement) {
        // 折りたたみマークのセット
        var sideTitle = titleElement.firstChild.nodeValue;
        titleElement.title = sideTitle;
        var markElement = document.createElement('span');
        titleElement.parentNode.insertBefore(markElement, titleElement.nextSibling);
        markElement.id = 'plg_' + id + '_mark';
        var status = FJMenuFolder.checkFoldStatus(id);
        var foldMark
            = status ? FJMenuFolder.closeMark : FJMenuFolder.openMark;
        markElement.innerHTML = '&nbsp;' + foldMark;
        // 折りたたみ状態のセット
        var disp = status ? '' : 'none';
        var contentElement = document.getElementById('plg_' + id + '_content');
        var descElement = document.getElementById('plg_' + id + '_desc');
        var desc2Element = document.getElementById('plg_' + id + '_desc2');
        contentElement.style.display = disp;
        descElement.style.display = disp;
        desc2Element.style.display = disp;

        // onclickイベントハンドラのセット
        titleElement.onclick = FJMenuFolder.Fold;
        markElement.onclick = FJMenuFolder.Fold;
        // マウスポインタのセット
        titleElement.style.cursor = 'pointer';
        markElement.style.cursor = 'pointer';
    }
};

FJMenuFolder.Fold = function() {
    // クリックされた要素のidを得る
    var ids = this.id.match(/plg_(\d*)_/);
    var id = ids[1];
    // 項目の内容を得る
    var contentElement = document.getElementById('plg_' + id + '_content');
    var descElement = document.getElementById('plg_' + id + '_desc');
    var desc2Element = document.getElementById('plg_' + id + '_desc2');
    var foldStatus
        = (contentElement.style.display == 'none')
        ? '' : 'none';
    contentElement.style.display = foldStatus;
    descElement.style.display = foldStatus;
    desc2Element.style.display = foldStatus;

    // 折りたたみマークの表示を変える
    var markElement = document.getElementById('plg_' + id + '_mark');
    var foldMark
        = (contentElement.style.display == 'none')
        ? FJMenuFolder.openMark
        : FJMenuFolder.closeMark;
    markElement.innerHTML = '&nbsp;' + foldMark;

    // 折りたたみ状態をクッキーに保存する
    var status
        = (contentElement.style.display == 'none')
        ? false : true;
    FJMenuFolder.setFoldStatus(id, status);
};

// dt要素と同じ階層にあるdd要素を得る
FJMenuFolder.getddElements = function(dtElement) {
    var ddElements = new Array();
    var elm = dtElement;
    while (elm = elm.nextSibling) {
        if (elm.nodeName == 'DD') {
             ddElements.push(elm);
        }
    }
    return ddElements;
};

// cookieの保存
FJMenuFolder.setCookie = function(name, value, expires, domain, path, secure) {
    var cookieStr = name + "=" + encodeURIComponent(value);
    cookieStr += expires ? " ;expires=" + expires.toGMTString() : "";
    cookieStr += domain ? " ;domain=" + domain : "";
    cookieStr += path ? " ;path=" + path : "";
    cookieStr += secure ? " ;secure" : "";
    document.cookie = cookieStr;
};

// cookieの読み込み
FJMenuFolder.getCookie = function(name) {
    var i, cookies, value;
    cookies = document.cookie.split("; ");
    for (i = 0; i < cookies.length; i++) {
         value = cookies[i].split("=");
         if (value[0] == name) {
             return decodeURIComponent(value[1]);
         }
    }
    return '';
}

// クッキーの折りたたみ状態を調べる
FJMenuFolder.checkFoldStatus = function(sideTitle) {
    var sideOffStr = FJMenuFolder.getCookie('sideOff');
    if (sideOffStr == '') {
        return true;
    }
    var sideOff = sideOffStr.split('|');

    // offの中にあればfalse、そうでなければtrueを返す
    for (var i = 0; i < sideOff.length; i++) {
        if (sideOff[i] == sideTitle) {
            return false;
        }
    }
    return true;
}

// クッキーの折りたたみ状態を書き換える
FJMenuFolder.setFoldStatus = function(sideTitle, status) {
    // 現在のクッキーを読み込む
    var sideOffStr = FJMenuFolder.getCookie('sideOff');
    var sideOff = new Array();
    if (sideOffStr != '') {
        sideOff = sideOffStr.split('|');
    }

    // sideOffの中に折りたたみ対象があるかどうかを調べる
    var found = false;
    for (var i = 0; i < sideOff.length; i++) {
        if (sideOff[i] == sideTitle) {
             found = true;
             break;
        }
    }
    // 折りたたむ場合
    if (status == false && !found) {
        sideOff.push(sideTitle);
    }
    // 開く場合
    else if (status == true && found) {
        var tmp = new Array();
        for (var j = 0, ptr = 0; j < sideOff.length; j++) {
            if (j != i) {
                tmp[ptr] = sideOff[j];
                ptr++;
            }
        }
        sideOff = tmp;
    }
    // クッキーを保存する
    sideOffStr = sideOff.join('|');
    var expire = new Date();
    expire.setDate(expire.getDate() + 30);
    FJMenuFolder.setCookie('sideOff', sideOffStr, expire);
};
