var filelist_str = ""; //ファイルリスト文字列

//================================================
// ■init
// 引数…なし
// 戻り値…なし
// 概要…最初に呼び出す関数
//================================================
function init()
{
    //ファイルリストを取得する
    getFileList();
    //全ファイル名を配列化する
    var list = this.filelist_str.split("\n");
    //▼▼▼最新５件の一行目取得▼▼▼
    var latest = new Array();
    for(var i = 0; i < 5; i++) {
        latest[i] = new Array();
        latest[i]["FNAME"] = list[i];
        latest[i]["TITLE"] = getFirstLine(list[i]);
    }
    //表示
    dispLatest5(latest);
    //▼▼▼最新データ取得▼▼▼
    getDataToFname(list[0]);
}


//================================================
// ■getFirstLine
// 引数…f_name:ファイル名
// 戻り値…内容の１行目（日付とタイトル）
// 概要…最新の５件を取得する
//================================================
function getFirstLine(f_name)
{
    //ファイルの内容を取得
    var contents = getData(f_name);
    //タイトルを返す
    var start_point = contents.indexOf("「") + 1;
    var end_point = contents.indexOf("」");
    return contents.substring(start_point, end_point);
}

//================================================
// ■dispLatest5
// 引数…latest:最新の５件情報
// 戻り値…なし
// 概要…最新の５件を表示する
//================================================
function dispLatest5(latest)
{
    var html = "";
    for(i = 0; i < latest.length; i++) {
        if(latest[i]["TITLE"] != "") {
            var link_str = "・" + latest[i]["TITLE"];
            //文字数が多い場合は省略する
            if(link_str.length > 12)
                link_str = link_str.substring(0, 12) + "...";

            html += "  <a href='' title='" + latest[i]["TITLE"] + "を見る' onClick='return getDataToFname(" + latest[i]["FNAME"] + ")'>&nbsp;&nbsp;" + link_str + "</a>";
        }else {
            html += "  <a></a>";
        }
    }
    //出力
    document.getElementById("latest5").innerHTML = html;
}

//================================================
// ■getDataToFname
// 引数…f_name:ファイル名
// 戻り値…なし
// 概要…ファイル名からブログ内容を取得する
//      対象の日付を指定することでカレンダー
//      を連動させる
//================================================
function getDataToFname(f_name)
{
    //対象年月をセットする
    this.year = Number(String(f_name).substring(0, 4));
    this.month = Number(String(f_name).substring(4, 6));
    //データを取得する
    getMyData(Number(String(f_name).substring(6, 8)))
    return false;
}

//================================================
// ■getData
// 引数…f_name:ファイル名
// 戻り値…テキストファイル内容文字列
// 概要…サーバと同期通信を行い、対象のテキスト
//       ファイルの内容を返してもらう。
//================================================
function getData(f_name)
{
    //IE以外
    if(window.XMLHttpRequest) {
        var ajax = new XMLHttpRequest();
        //IE用
    }else if(window.ActiveXObject) {
        try {
            ajax = new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e) {
            ajax = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    ajax.open("GET", "blog/"+ f_name + ".txt", false);

    ajax.onreadystatechange = function() {
        if(ajax.readyState == 4 || ajax.readyState == 200) {
            return;
        }
    }
    ajax.send("");
    return ajax.responseText;
}

//================================================
// ■dispContents
// 引数…contents:ブログの内容
// 戻り値…なし
// 概要…ブログの内容を対象のdivに出力する。
//       次の記事・前の記事リンクを作る。
//================================================
function dispContents(contents)
{
    document.getElementById("info").innerHTML = contents.replace(/\n/g, "<br>"); //内容出力
}

//================================================
// ■mkFileName
// 引数…なし
// 戻り値…ファイル名
// 概要…対象のファイル名を生成する。
//       年と月（２桁）と日（２桁）と拡張子（.txt）
//       を一つの文字列として結合する。
//================================================
function mkFileName(year, month, date)
{
    var y_str = String(year);
    var m_str = String(month);
    if(m_str < 10)
        m_str = "0" + m_str;

    var d_str = String(date);
    if(d_str < 10)
        d_str = "0" + d_str;

    return y_str + m_str + d_str;
}

//================================================
// ■dispNextAndBefore
// 引数…f_name:現在のファイル名
// 戻り値…なし
// 概要…次の記事、前の記事リンクを表示する
//================================================
function dispNextAndBefore(f_name)
{
    //▼▼▼前と後の記事のファイル名を取得▼▼▼
    var tmp = this.filelist_str.split(f_name);
    //最初か最後の場合
    if(tmp.length < 2) {
        var position = this.filelist_str.indexOf(f_name);
        //ファイル名の位置が0以上の場合は最後の記事
        if(position > 0) {
            before = new Array();
            next = tmp[0].split("\n");
        //ファイル名の位置が0の場合は最初の記事
        }else {
            next = new Array();
            before = tmp[0].split("\n");
        }
    //最初か最後のでは無い場合
    }else {
        var next = tmp[0].split("\n");
        var before = tmp[1].split("\n");
    }

    if(before.length > 1)
        var b_name = before[1]; //※before[0]は空白になる
    else
        var b_name = "";

    if(next.length > 1)
        var n_name = next[next.length - 2];
    else
        var n_name = "";

    var b_link = "";
    var n_link = "";
    if(b_name != "")
        b_link = "<a href='' onClick='return getDataToFname(" + b_name + ")'>≪ 前の記事</a>";

    if(n_name != "")
        n_link = "<a href='' onClick='return getDataToFname(" + n_name + ")'> 次の記事 ≫</a>";

    //出力
    var date_str = String(Number(f_name.substring(4, 6))) + "月" + String(Number(f_name.substring(6, 8))) + "日";
    document.getElementById("before0").innerHTML = b_link;
    document.getElementById("next0").innerHTML = n_link;
    document.getElementById("center0").innerHTML = date_str;
    document.getElementById("before1").innerHTML = b_link;
    document.getElementById("next1").innerHTML = n_link;
    document.getElementById("center1").innerHTML = date_str;
}

//================================================
// ■getFileList
// 引数…なし
// 戻り値…なし
// 概要…ファイル名一覧を取得する
//================================================
function getFileList()
{
    //IE以外
    if(window.XMLHttpRequest) {
        var ajax = new XMLHttpRequest();
    //IE用
    }else if(window.ActiveXObject) {
        try {
            ajax = new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e) {
            ajax = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    ajax.open("GET", "blog/filelist.txt", false);

    ajax.onreadystatechange = function() {
        if(ajax.readyState == 4 || ajax.readyState == 200) {
            return;
        }
    }
    ajax.send(null);
    this.filelist_str = ajax.responseText;
}

//================================================
// ■getMonthFileName
// 引数…なし
// 戻り値…ファイル名配列
// 概要…選択月のファイル名を取得する
//================================================
function getMonthFileName()
{
    //対象年月の文字列を作成する
    var yy = String(this.year);
    var mm = String(this.month);
    if(this.month < 10)
        var mm = "0" + String(this.month);

     var yymm = yy + mm;
    //対象年月のファイル名を検索する
    var filelist = new Array();
    for(var i = 31; i > 0; i--) {
        var dd = String(i);
        if(i < 10)
            var dd = "0"+ String(i);

        var f_name = yymm + dd;
        if(this.filelist_str.indexOf(f_name) != -1)
            filelist.push(f_name);
    }
    return filelist;
}

//================================================
// ■getMonthData
// 引数…filelist:ファイル名配列
// 戻り値…内容配列
// 概要…対象のファイル内容を取得し先頭5行を抽出する
//================================================
function getMonthData(filelist)
{
    var contentslist = new Array();
    for(var i = 0; i < filelist.length; i++) {
        var contents = getData(filelist[i]);
        //5行目まで抽出
        for(var j = 0; j < 5; j++) {
            if(j < 4)
                contents = contents.replace("\n", "<br>");
            else
                contents = contents.replace("\n", "<br />");
        }
        //5行目終了時の位置を算出
        var position = contents.indexOf("<br />");
        contentslist[i] = contents.substring(0, position)
                        + "<br><div style='width:550px;text-align:right;'>"
                        + "<a href='' onClick='return getMyData(" + Number(filelist[i].substring(6, 8)) + ")'>..........続きを読む ≫</a></div>";
    }
    return contentslist;
}

//================================================
// ■dispMonthData
// 引数…contentslist:内容配列
// 戻り値…なし
// 概要…対象月の全内容を表示する
//================================================
function dispMonthData(contentslist)
{
    var html = "";
    //出力文字を整形する
    for(var i = 0; i < contentslist.length; i++) {
        html += contentslist[i];
        if(i < contentslist.length - 1)
            html += "<hr color='#000099'>";
    }
    //内容出力
    if(html == "")
        document.getElementById("info").innerHTML = "<center>※ 記事はありません ※</center>";
    else
        document.getElementById("info").innerHTML = html;
}

//================================================
// ■dispNextAndBeforeMonth
// 引数…なし
// 戻り値…なし
// 概要…次の月、前の月リンクを表示する
//================================================
function dispNextAndBeforeMonth()
{
    var b_link = "<a href='' onClick='return getMyDataMonth(-1)'>≪ 前の月</a>";
    var n_link = "<a href='' onClick='return getMyDataMonth(1)'> 次の月 ≫</a>";
    var yymm = String(this.year) + "年" + String(this.month) + "月";
    //出力
    document.getElementById("before0").innerHTML = b_link;
    document.getElementById("next0").innerHTML = n_link;
    document.getElementById("center0").innerHTML = yymm;
    document.getElementById("before1").innerHTML = b_link;
    document.getElementById("next1").innerHTML = n_link;
    document.getElementById("center1").innerHTML = yymm;
}
