////////////////////////
//File  : cocolog_ajax_calendar.js
//site  : http://java.cocolog-nifty.com/
//author: naoyuki
//year  : 2007
//この作品は、クリエイティブ・コモンズの帰属-同一条件許諾 2.1 日本ライセンスの下でライセンスされています。この使用許諾条件を見るには、http://creativecommons.org/licenses/by-sa/2.1/jp/をチェックするか、クリエイティブ･コモンズに郵便にてお問い合わせください。住所は：559 Nathan Abbott Way, Stanford, California 94305, USA です。
////////////////////////

var backnumber_url_list;
var current_page = 0;
var calendar_tag;
load_calendar_id();

function load_calendar_id() {
    calendar_tag = document.getElementById( 'calendar' );
    if (calendar_tag) {
        load_backnumber_url_list();
    } else {
        window.setTimeout( 'load_calendar_id()', 100 );
    }
}

function build_calendar(year, month, entries){
    var max_date = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
    var html = '';
    html += '<div class="module-content">';
    html += '<table summary="Monthly calendar with links to each day\'s posts">';
    if(current_page == 0 && backnumber_url_list.length != 1) {
        html += '<caption class="module-header"><a href="javascript:current_page++;load_archive_page(backnumber_url_list[current_page]);">←</a>&nbsp;&nbsp;<a href="' + getMonthlyArchiveUrl(year, month) + '">' + year + '年' + month + '月</a></caption>';
    }else if(current_page == backnumber_url_list.length - 1 && backnumber_url_list.length != 1){
        html += '<caption class="module-header"><a href="' + getMonthlyArchiveUrl(year, month) + '">' + year + '年' + month + '月</a>&nbsp;&nbsp;<a href="javascript:current_page--;load_archive_page(backnumber_url_list[current_page]);">→</a></caption>';
    }else if(backnumber_url_list.length == 1){
        html += '<caption class="module-header"><a href="' + getMonthlyArchiveUrl(year, month) + '">' + year + '年' + month + '月</a></caption>';
    }else {
        html += '<caption class="module-header"><a href="javascript:current_page++;load_archive_page(backnumber_url_list[current_page]);">←</a>&nbsp;&nbsp;<a href="' + getMonthlyArchiveUrl(year, month) + '">' + year + '年' + month + '月</a>&nbsp;&nbsp;<a href="javascript:current_page--;load_archive_page(backnumber_url_list[current_page]);">→</a></caption>';    
    }
    html += '<tr>';
    html += '<th>日</th>';
    html += '<th>月</th>';
    html += '<th>火</th>';
    html += '<th>水</th>';
    html += '<th>木</th>';
    html += '<th>金</th>';
    html += '<th>土</th>';
    html += '</tr>';
    
    var date = new Date(year, month-1, 1);
    var day = date.getDay();
    html += '<tr>';
    for(var i=0; i<day; i++){
        html += '<td>&nbsp;</td>';
    }
    var last_of_day = max_date[month-1];
    if( month == 2 && ( (year % 4 == 0 && year % 100 !=0) || year % 400 == 0 ) ){
        last_of_day = 29;
    }
    for(var i=1; i<=last_of_day; i++){
        if(day %7 == 0) {
            html += '<tr>';
        }
        var flag = true;
        for(var j=0; j<entries.length; j++){
            if(entries[j].day == i && flag){
                html += '<td style="background-color:#ffffcc;"><a href="' + entries[j].link + '" alt="' + entries[j].title + '" title="' + entries[j].title + '"">' + i + '</a></td>';  // この行の style="background-color:#ffffcc;" はゑびすや追加分
                flag = false;
            }
        }
        if(flag){
            html += '<td>' + i + '</td>';
        }
        if(day % 7 == 6) {
            html += '</tr>';
        }
        day++;
    }
    for(var i=day; i%6==0; i++){
        html += '<td>&nbsp;</td>';
    }
    html += '</tr>';
    html += '</table>';
    html += '</div>';
    if(calendar_tag){
        calendar_tag.innerHTML = html;
    }
}

function load_backnumber_url_list() {
    search_keyword = '';
    search_counter = 0;
    var archive_file_path = getArchiveFilePath();
    new Ajax.Request( archive_file_path, {method: 'get', onComplete: function(request){ parse_archive_index( request ); } } );
}


function parse_archive_index( request, text ) {
    var backnumber_page = request.responseText;
    backnumber_page = backnumber_page.replace( new RegExp( '\n', "g"), '' );
    backnumber_page = backnumber_page.replace( new RegExp( '\r', "g"), '' );
    backnumber_page = backnumber_page.replace( new RegExp( '.*(<div class="archive-datebased">.*?<div class="archive-category">).*', "i"), "$1" );
    backnumber_url_list = backnumber_page.match(/http:\/\/.*?html/ig);
    if (location.href.match(/http:\/\/.*\/.*\/(....)\/(..)\/.*\.html/)) {
        for(var i=0;i<backnumber_url_list.length;i++){
            if(getMonthlyArchiveUrl(RegExp.$1, RegExp.$2) == backnumber_url_list[i]) {
                current_page = i;
            }
        }
    }
    load_archive_page(backnumber_url_list[current_page]);
}

function load_archive_page(backnumber_url) {
    new Ajax.Request( backnumber_url, {method: 'get', onComplete: function(request){ parse_archive_enteries_page( request ); } } );
}

function parse_archive_enteries_page( request ) {
    var entries_page = request.responseText;
    entries_page = entries_page.replace( new RegExp( '\n', "g"), '' );
    entries_page = entries_page.replace( new RegExp( '\r', "g"), '' );
    var rdf_list = entries_page.match(/dc:date="[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]\+[0-9][0-9]:[0-9][0-9]" \/><\/rdf:RDF>-->/ig);
    var year_list = new Array();
    var month_list = new Array();
    var day_list = Array();
    for(var i=0; i < rdf_list.length; i++) {
        rdf_list[i].match(/date="([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9]).*"/i);
        year_list.push(RegExp.$1);
        month_list.push(RegExp.$2);
        day_list.push(RegExp.$3);
    }    
    
    var entry_list = entries_page.match(/<div class="entry">.*?<\/div><div class="entry-bottom"><\/div>/ig);
    var entries = new Array();
    for ( var i = 0; i < entry_list.length; i++ ) {
        entry_list[i].match(/.*<h3>(.*?)<\/h3>.*<div class="entry-body-text">(.*?)<div class="entry-body-bottom"><\/div>.*<a class="permalink" href="(.*?)">.*/i);
        var year = year_list[i];
        var month = month_list[i];
        var day = day_list[i];
        var title = RegExp.$1;
        var body = RegExp.$2;
        var link = RegExp.$3;
//        try{
        body = body.replace( new RegExp( '<.*?>', 'ig'), '' );
        title = title.replace( new RegExp( '<.*?>', 'ig'), '' );
//        }catch(e){}
        entries[ entries.length ] = {title:title, body:body, link:link, year:year, month:month, day:day};
    }
    build_calendar(entries[0].year, entries[0].month, entries);
}


function getArchiveFilePath() {
	return document.getElementsByTagName('h1')[0].getElementsByTagName('a')[0].href + 'archives.html';
}

function getBlogUrl() {
	return document.getElementsByTagName('h1')[0].getElementsByTagName('a')[0].href;
}

function getMonthlyArchiveUrl(year, month) {
    if(String(month).length == 1) {
        month = "0" + String(month);
    }
    return getBlogUrl() + year + '/' + month + '/index.html';
}