var FJMenuFolder = {};

// 開閉のマーク
FJMenuFolder.closeMark = '▼';
FJMenuFolder.openMark = '▲';

FJMenuFolder.Setup = function(id) {
    var doc = document;
    // idが「widget_XXXXXX_title」の要素を探す
    var titleElement = doc.getElementById('widget_' + id + '_title');
    if (titleElement) {
        // 折りたたみマークのセット
        var sideTitle = titleElement.innerHTML;
        var innerHTML = '<span id="widget_' + id + '_titletext" title="クリックするごとに開閉します">' + sideTitle + '</span> ';
        innerHTML += '<span id="widget_' + id + '_mark" style="font-size : 80%; vertical-align : middle;" title="クリックするごとに開閉します"></span>';
        titleElement.innerHTML = innerHTML;
        var titleTextElement = doc.getElementById('widget_' + id + '_titletext');
        var markElement = doc.getElementById('widget_' + id + '_mark');
        var status = FJMenuFolder.checkFoldStatus(id);
        var foldMark
            = status ? FJMenuFolder.openMark : FJMenuFolder.closeMark;
        markElement.innerHTML = foldMark;
        // 折りたたみ状態のセット
        var disp = status ? '' : 'none';
        var contentElement = document.getElementById('widget_' + id + '_content');
        contentElement.style.display = disp;
        // onclickイベントハンドラのセット
        titleTextElement.onclick = FJMenuFolder.Fold;
        markElement.onclick = FJMenuFolder.Fold;
        // マウスポインタのセット
        titleTextElement.style.cursor = 'pointer';
        markElement.style.cursor = 'pointer';
    }
};

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

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

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

// 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, 'h-fj.com', '/');
};

