/*
if ( typeof Ajax != 'undefined' ) {
	//	'prototype.js' にパッチ
	Ajax.getTransport = function () {
	    return Try.these(
///	      function() {return new ActiveXObject('Msxml2.XMLHTTP.5.0')},	//	added
//	      function() {return new ActiveXObject('Msxml2.XMLHTTP.4.0')},	//	added
//	      function() {return new ActiveXObject('Msxml2.XMLHTTP.3.0')},	//	added
	      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
	      function() {return new ActiveXObject('Microsoft.XMLHTTP')},
	      function() {return new XMLHttpRequest()}
	    ) || false;
	} ;
}
*/
if ( typeof setCalendarOnLoad != 'undefined' && setCalendarOnLoad == true ) {
	//	onload 時にカレンダー設定
	var	backUpOnloadCalendar = window.onload ;
	window.onload = function() {
		checkCreateCalendar();
		if ( typeof backUpOnloadCalendar == 'function' ) {
			backUpOnloadCalendar() ;
		}
	}
}
if ( typeof blogURL == 'undefined' ) {
	var	blogURL = '' ;
	(function(){
		var	links = document.getElementsByTagName('link') ;
		var	ci ;
		for ( ci=0; ci < links.length; ci++ ) {
			if ( links[ci].title.match('RSS') && links[ci].href.match('index.rdf') ) break ;
		}
		if ( ci < links.length ) {
			blogURL = links[ci].href.replace( 'index.rdf', '' ).replace( new RegExp('http://' + document.domain, 'g'), '' ) ;
		}
	})() ;
}
if ( typeof calendarFolder == 'undefined' ) {
	var	calendarFolder = blogURL + "calendar/" ;
}
if ( typeof calendarType == 'undefined' ) {
	var	calendarType = 'J' ;
}
if ( typeof useCalendarComponent == 'undefined' ) {
	var	useCalendarComponent = true ;
}
if ( typeof addNavToNowCalendar == 'undefined' ) {
	var	addNavToNowCalendar = true ;
}

// アーカイブURL
var	archiveUrl = blogURL + "archives.html";

//	archives.html の内容記憶
var	archivesForCalendar = '' ;
var	backNumberListForCalendar = null ;

// URLから年月の配列を取得
var urlArray ;
var dateArray;

// 現在の年月
var nowYear ;
var nowMonth ;

// 前回取得したカレンダー年月(for cocoQLink.js)
var	oldYear = '' ;
var	oldMonth = '' ;

var	curCalendarHtml = '' ;
(function() {
	var calendarObj = document.getElementById('calendar') ;
	if ( calendarObj ) {
		curCalendarHtml = calendarObj.innerHTML ;
	}
})() ;

if ( typeof dateArchive == 'undefined' ) {
	var	dateArchive = false ;
}

if ( typeof calendarOnload != 'function' && typeof makeQuickLink == 'function' ) {
	var	calendarOnload = makeQuickLink ;	//	(for cocoQLink.js)
}

function	getCalendarInfo() {
	// URLから年月の配列を取得
	urlArray = location.href.match(/\/[0-9]{4}\/[0-9]{2}\/??/) ;
	if (urlArray) {
		dateArray = urlArray[0].split("/");
		dateArray.shift();
	}
	else {
		dateArray = null ;
	}
	// 現在の年月
	var now = new Date();
	
	nowYear = now.getFullYear();
	nowMonth = now.getMonth() + 1;
	if (nowMonth < 10) {
		nowMonth = "0" + nowMonth;
	}
}	//	getCalendarInfo()


// 生成するカレンダーをチェック
function	checkCreateCalendar() {

	for (;;) {
		if ( typeof makeQuickLink == 'function' ) break ;	//	(for cocoQLink.js)
		if ( typeof noCheckCurrentInfo != 'undefined' && noCheckCurrentInfo == true ) break ;
		getCalendarInfo() ;
		break ;
	}
	var	getYear ;
	var	getMonth ;
	
	if (dateArray) {
		//	URLから年月が取得できた場合は、そのカレンダーを生成
		getYear = dateArray[0] ;
		getMonth = dateArray[1] ;
	}
	else {
		//	URLから年月が取得できなかった場合は、現在の年月カレンダーを生成
		getYear = nowYear ;
		getMonth = nowMonth ;
	}
/*
	//	前回取得したものと同じなら何もしない(for cocoQLink.js)
	if ( getYear == oldYear && getMonth == oldMonth ) {
		if ( typeof calendarOnload == 'function' ) {
			var calendarObj = document.getElementById('calendar') ;
			calendarOnload( calendarObj ) ;
		}
		return ;
	}
*/
	oldYear = getYear ;
	oldMonth = getMonth ;
	
	if ( archivesForCalendar ) {
		//	archives.html を取得済
		getCalendarComponent( archivesForCalendar, getYear, getMonth ) ;
		return ;
	}
	new Ajax.Request(
		archiveUrl,
		{
			method: 'get',
			onComplete : function (request) {
				if ( useCalendarComponent == true ) {
					getCalendarComponent(request.responseText, getYear, getMonth ) ;
				}
				else {
					createBackNumberHash(request.responseText, getYear, getMonth ) ;
				}
			}
		}
	) ;
}	//	end of checkCreateCalendar()

// カレンダーコンテンツを取得
function	getCalendarComponent( backNumberHtml, targetYear, targetMonth ) {
	var targetMonthUrl ;
	var backNumberHash ;
	if ( backNumberHtml ) {
		archivesForCalendar = backNumberHtml ;	//	取得した archives.html をキャッシュ
		backNumberListForCalendar = getBackNumberListForCalendar( archivesForCalendar ) ;
		if ( fncAddNavToNowCalendar( targetYear, targetMonth ) == true ) {
			if ( typeof calendarOnload == 'function' ) {
				var calendarObj = document.getElementById('calendar') ;
				calendarOnload( calendarObj ) ;
			}
			return ;
		}
		targetMonthUrl = calendarFolder + 'calendar' + targetYear + targetMonth + "?reload=" + (new Date).getTime() ;
	}
	if ( targetMonthUrl ) {
		var	tid = 0 ;
		var	isOK = function (calendarText) {
			//	カレンダーコンテンツ取得正常
			if ( tid == 0 ) return ;
			clearTimeout( tid ) ;
			tid = 0 ;
			if ( !calendarText.match( '月別カレンダー' ) ) {
				//	カレンダーコンテンツ内容異常→月別バックナンバー取得
				createBackNumberHash( backNumberHtml, targetYear, targetMonth ) ;
				return ;
			}
			var calendarObj = document.getElementById('calendar') ;
			if ( calendarObj ) {
				var caption = '<caption>' + getCalendarCaptionHtml( targetYear, targetMonth ) + '</caption>' ;
				calendarObj.innerHTML = '<div class="module-content">' + chgWeekWord( calendarText.replace( /<caption.+caption>/i, caption ), targetYear, targetMonth  ) + '</div>' ;
				calendarShowFinish( calendarObj ) ;
			}
		} ;
		var	isNG = function () {
			//	カレンダーコンテンツ取得異常→月別バックナンバー取得
			if ( tid == 0 ) return ;
			clearTimeout( tid ) ;
			tid = 0 ;
			createBackNumberHash( backNumberHtml, targetYear, targetMonth ) ;
		}
		var	isTimeout = function () {
			//	カレンダーコンテンツ取得タイムアウト→月別バックナンバー取得
			tid = 0 ;
			createBackNumberHash( backNumberHtml, targetYear, targetMonth ) ;
		}
		//	カレンダーコンテンツ取得タイムアウト設定(10000ms=10秒)
		tid = setTimeout( isTimeout, 10000 ) ;
		
		//	カレンダーコンテンツ取得要求
		new Ajax.Request(
			targetMonthUrl,
			{
				method: 'get',
				onSuccess : function (request) {
					isOK( request.responseText ) ;
				},
				onFailure : function (request) {
					isNG() ;
				}
			}
		) ;
	}
	else {
		createCalendar(backNumberHash, targetYear, targetMonth);
	}
	
}	//	end of getCalendarComponent() ;


// URLから取得した年月の「日-URL」ハッシュを取得
function createBackNumberHash(backNumberHtml, targetYear, targetMonth) {
	var targetMonthUrl;
	var backNumberHash;
	if (backNumberHtml) {
		archivesForCalendar = backNumberHtml ;	//	取得した archives.html をキャッシュ
		backNumberListForCalendar = getBackNumberListForCalendar( archivesForCalendar ) ;
		if ( fncAddNavToNowCalendar( targetYear, targetMonth ) == true ) {
			if ( typeof calendarOnload == 'function' ) {
				var calendarObj = document.getElementById('calendar') ;
				calendarOnload( calendarObj ) ;
			}
			return ;
		}
		targetMonthUrl = getTargetMonthUrl(backNumberHtml, targetYear, targetMonth);
	}
	if (targetMonthUrl) {
		new Ajax.Request(
			targetMonthUrl,
			{
				method: 'get',
				onComplete : function (request) {
					var backNumberHash = getDayUrlHash(request.responseText);
					createCalendar(backNumberHash, targetYear, targetMonth)
				}
			}
		);
	} else {
		createCalendar(backNumberHash, targetYear, targetMonth);
	}
}	//	end of createBackNumberHash()

// カレンダーHTML出力
function createCalendar(backNumberHash, targetYear, targetMonth) {
	var calendarObj = document.getElementById('calendar') ;
	if ( calendarObj ) {
		calendarObj.innerHTML = '<div class="module-content">' + getCalendarHtml(targetYear, targetMonth, backNumberHash) + '</div>';
		calendarShowFinish( calendarObj ) ;
	}
}	//	end of createCalendar()

// カレンダーの見出しHTMLを取得
function getCalendarCaptionHtml(targetYear, targetMonth) {
	var captionHtml = "";
	var monthArray = ['January','February','March','April','May','June','July','August','September','October','November','December'];
	if (calendarType == "J") {
		monthArray = ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'];
	}
	var	captionBefore = '&nbsp;&nbsp;&nbsp;';
	if (getBeforeStatus(targetYear, targetMonth)) {
		var	tmpUrl = getBeforeURLfromBacknumberList( targetYear, targetMonth, backNumberListForCalendar ) ;
		if ( tmpUrl ) {
			if ( typeof changeCalendarOnly != 'undefined' && changeCalendarOnly == true ) {
				captionBefore = '<a href="javascript:void(0);" onclick="' + tmpUrl + 'return false;" style="text-decoration:none">&lt;&lt;</a>';
			}
			else {
				captionBefore = '<a href="' + tmpUrl + '" style="text-decoration:none">&lt;&lt;</a>';
			}
		}
	}
	var	captionNext = '&nbsp;&nbsp;&nbsp;';
	if (getNextStatus(targetYear, targetMonth)) {
		var	tmpUrl = getNextURLfromBacknumberList( targetYear, targetMonth, backNumberListForCalendar ) ;
		if ( tmpUrl ) {
			if ( typeof changeCalendarOnly != 'undefined' && changeCalendarOnly == true ) {
				captionNext = '<a href="javascript:void(0);" onclick="' + tmpUrl + 'return false;" style="text-decoration:none">&gt;&gt;</a>';
			}
			else {
				captionNext = '<a href="' + tmpUrl + '" style="text-decoration:none">&gt;&gt;</a>';
			}
		}
	}
	captionHtml = '<table class="calendarcaption" width="100%"><tr><th>' + captionBefore + '</th><th style="white-space:nowrap;">';
	
	var	thisMonthHtml = (calendarType == "J") ? ( targetYear + "年" + monthArray[targetMonth-1] ) : ( monthArray[targetMonth-1] + '&nbsp;' + targetYear ) ;
	var	tmpUrl = getThisURLfromBacknumberList( targetYear, targetMonth, backNumberListForCalendar ) ;
	if ( tmpUrl && typeof addLinkToCaption != 'undefined' && addLinkToCaption ) {
		thisMonthHtml =  '<a href="' +  tmpUrl + '" style="text-decoration:none">' + thisMonthHtml  + '</a>';
	}
	captionHtml += thisMonthHtml ;
	
	captionHtml += '</th><th align="right">' + captionNext + '</th></tr></table>';
	return captionHtml;
}	//	end of getCalendarCaptionHtml()

// 次月のステータスを取得
function getNextStatus(displayYear, displayMonth) {
	if (displayYear >= nowYear && displayMonth >= nowMonth) {
		return false;
	} else {
		return true;
	}
}	//	end of getNextStatus()

// 前月のステータスを取得
function getBeforeStatus(displayYear, displayMonth) {
	if ( typeof blogStartYear == 'undefined' || blogStartMonth == 'undefined' ) return true ;
	if (displayYear <= blogStartYear && displayMonth <= blogStartMonth) {
		return false;
	} else {
		return true;
	}
}	//	end of getBeforeStatus()

// 次月のバックナンバーURLを取得
function	getNextURLfromBacknumberList( displayYear, displayMonth, blist ) {
	if ( !blist ) return getNextURL(displayYear, displayMonth) ;
	//	バックナンバーリストから取得
	var displayBackNumber = "/" + displayYear + "/" + displayMonth + "/";
	for ( var ci=0; ci < blist.length; ci++ ) {
		if ( blist[ci].match( displayBackNumber ) ) {
			if ( 0 <= (ci-1) ) {
				if ( typeof changeCalendarOnly != 'undefined' && changeCalendarOnly == true ) {
					// URLから年月の配列を取得
					urlArray = blist[ci-1].match(/\/[0-9]{4}\/[0-9]{2}\/??/) ;
					if (urlArray) {
						dateArray = urlArray[0].split("/");
						dateArray.shift();
					}
//					var	link = "javascript:(function(){noCheckCurrentInfo=true;dateArray[0]='" + dateArray[0] + "';dateArray[1]='" + dateArray[1] + "';checkCreateCalendar();location.href=location.href;})();" ;
					var	link = "javascript:(function(){noCheckCurrentInfo=true;dateArray[0]='" + dateArray[0] + "';dateArray[1]='" + dateArray[1] + "';checkCreateCalendar();})();" ;
					return link ;
				}
				else {
					return blist[ci-1] ;
				}
			}
			else {
				return '' ;
			}
		}
	}
	return '' ;
	
}	//	end of getNextURLfromBacknumberList() ;

function getNextURL(displayYear, displayMonth) {
	var nextYear;
	var nextMonth;
	var nextURL;
	if (displayMonth != "12") {
		nextYear = displayYear;
		nextMonth = eval(displayMonth) + 1;
		if (nextMonth < 10) {
			nextMonth = "0" + nextMonth;
		}
	} else {
		nextYear = eval(displayYear) + 1;
		nextMonth = "01";
	}
	nextURL = blogURL + nextYear + "/" + nextMonth + "/index.html";
	return nextURL;
}	//	end of getNextURL()

// 前月のバックナンバーURLを取得
function	getBeforeURLfromBacknumberList( displayYear, displayMonth, blist ) {
	if ( !blist ) return getBeforeURL(displayYear, displayMonth) ;
	//	バックナンバーリストから取得
	var displayBackNumber = "/" + displayYear + "/" + displayMonth + "/";
	var	backUrl = blist[0] ;
	for ( var ci=0; ci < blist.length; ci++ ) {
		if ( blist[ci].match( displayBackNumber ) ) {
			if ( (ci+1) < blist.length ) {
				backUrl = blist[ci+1] ;
				break ;
			}
			else {
				return '' ;
			}
		}
	}
	if ( typeof changeCalendarOnly != 'undefined' && changeCalendarOnly == true ) {
		// URLから年月の配列を取得
		urlArray = backUrl.match(/\/[0-9]{4}\/[0-9]{2}\/??/) ;
		if (urlArray) {
			dateArray = urlArray[0].split("/");
			dateArray.shift();
		}
//		var	link = "javascript:(function(){noCheckCurrentInfo=true;dateArray[0]='" + dateArray[0] + "';dateArray[1]='" + dateArray[1] + "';checkCreateCalendar();location.href=location.href;})();" ;
		var	link = "javascript:(function(){noCheckCurrentInfo=true;dateArray[0]='" + dateArray[0] + "';dateArray[1]='" + dateArray[1] + "';checkCreateCalendar();})();" ;
		return link ;
	}
	else {
		return backUrl ;
	}
}	//	end of getBeforeURLfromBacknumberList() ;

function getBeforeURL(displayYear, displayMonth) {
	var beforeYear;
	var beforeMonth;
	var beforeURL;
	if (displayMonth != "01") {
		beforeYear = displayYear;
		beforeMonth = eval(displayMonth) - 1;
		if (beforeMonth < 10) {
			beforeMonth = "0" + beforeMonth;
		}
	} else {
		beforeYear = eval(displayYear) - 1;
		beforeMonth = 12;
	}
	beforeURL = blogURL + beforeYear + "/" + beforeMonth + "/index.html";
	return beforeURL;
}	//	end of getBeforeURL()

// 当月のバックナンバーURLを取得
function	getThisURLfromBacknumberList( displayYear, displayMonth, blist ) {
	if ( !blist ) return getThisURL(displayYear, displayMonth) ;
	//	バックナンバーリストから取得
	var displayBackNumber = "/" + displayYear + "/" + displayMonth + "/";
	for ( var ci=0; ci < blist.length; ci++ ) {
		if ( blist[ci].match( displayBackNumber ) ) {
			return blist[ci] ;
		}
	}
	return '' ;
	
}	//	end of getThisURLfromBacknumberList() ;

function	getThisURL(displayYear, displayMonth) {
	return blogURL + displayYear + "/" + displayMonth + "/index.html";
}	//	end of getThisURL()

// カレンダーHTML取得
function getCalendarHtml(targetYear, targetMonth, urlHash) {
	var weekArray = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
	if (calendarType == "J") {
		weekArray = ['日','月','火','水','木','金','土'];
	}
	var endDayArray = [31,0,31,30,31,30,31,31,30,31,30,31];
	var dateObject = new Date(targetYear, targetMonth-1, 1);
	dateObject.day = dateObject.getDay() + 1;
	var todayDate = new Date();
	var scanfortoday = (targetYear == todayDate.getFullYear() && targetMonth == todayDate.getMonth() + 1)? todayDate.getDate() : 0;
	endDayArray[1] = (((dateObject.getFullYear() % 100 != 0) && (dateObject.getFullYear() % 4 == 0)) || (dateObject.getFullYear() % 400 == 0))?29:28;
	
	var calendarHtml = '<table summary="月別カレンダー">';
	calendarHtml += '<caption>' + getCalendarCaptionHtml(targetYear, targetMonth) + '</caption><tr>';
	for (i=0; i<7; i++) {
		calendarHtml += '<th>' + weekArray[i] + '</th>';
	}
	calendarHtml += '</tr><tr>';
	for (i=1; i<=42; i++) {
		var x;
		if ((i - dateObject.day >= 0) && (i - dateObject.day < endDayArray[targetMonth-1])) {
			x = i - dateObject.day + 1;
		} else {
			x = '&nbsp;';
		}
		if (urlHash && urlHash[x]) {
			if ( dateArchive ) {
				var	targetDate = ( eval(x) < 10 ) ? '0' + x : x ;
				var	dateURL = blogURL + targetYear + '/' + targetMonth + '/' + targetDate + '/index.html' ;
				x = '<a href="' + dateURL + '">' + x + '</a>';
			}
			else {
				x = '<a href="' + urlHash[x] + '">' + x + '</a>';
			}
		}
		calendarHtml += '<td>' + x + '</td>';
		if ((i % 7 == 0) && (i < 36)) {
			if ((i - dateObject.day + 1) >= endDayArray[targetMonth-1]) {
//				break;
			}
			calendarHtml += '</tr><tr>';
		}
	}
	return calendarHtml += '</tr></table>';
}	//	end of getCalendarHtml()

// 指定した月のHTMLから「日-URL」ハッシュを取得
function getDayUrlHash(backNumberHtml) {
	var articleDateArray;
	var articleUrlArray;
	var backNumberHash;
	if (backNumberHtml != "") {
		var backNumberStart = backNumberHtml.indexOf('<div class="entry-nav">', 0);
		var backNumberHtml = backNumberHtml.substring(backNumberStart, backNumberHtml.indexOf('<div class="content-bottom">', backNumberStart));
		var articleStart = backNumberHtml.indexOf('<h2>',0);
		var articleEnd, articleHtml;
		// 同日に複数記事がある場合、最初の記事のみ取得する。
		while (articleStart < backNumberHtml.length) {
			articleEnd = backNumberHtml.indexOf('<div class="entry-bottom">', articleStart);
			articleHtml = backNumberHtml.substring(articleStart, articleEnd);
			// 日付の配列を取得
			var dArray = articleHtml.match(/<h2>[\w\/\.\-年月日 ]+/g);
			if (articleDateArray) {
				articleDateArray = articleDateArray.concat(dArray);
			} else {
				articleDateArray = dArray;
			}
			// URLの配列を取得
			var uArray = articleHtml.match(/permalink.*?(html|htm)/g);
			if (articleUrlArray) {
				articleUrlArray = articleUrlArray.concat(uArray);
			} else {
				articleUrlArray = uArray;
			}
			articleStart = backNumberHtml.indexOf('<h2>', articleEnd);
			if (articleStart < 0) {
				break;
			}
		}
		
		// 各配列の要素を整形
		if (articleDateArray) {
			articleDateArray = articleDateArray.collect(
				function(value,index) {
					return getDayFromString(value);
				}
			);
		}
		if (articleUrlArray) {
			articleUrlArray = articleUrlArray.collect(
				function(value,index) {
					return value.replace('permalink" href="', '');
				}
			);
		}
		
		// 日付をkeyにしたURLのハッシュを定義
		if (articleDateArray && articleUrlArray) {
			backNumberHash = new Object();
			articleDateArray.each(
				function(value,index) {
					backNumberHash[value] = articleUrlArray[index];
				}
			);
		}
	}
	return backNumberHash;
}	//	end of getDayUrlHash()

// 年月日文字列から日を取得
function getDayFromString(dateStr) {
	var backNumberDay;
	if (dateStr != "" && dateStr != null) {
		// .区切り
		if (dateStr.indexOf('.') != -1) {
			backNumberDay = dateStr.split('.');
		}
		// /区切り
		if (dateStr.indexOf('/') != -1) {
			backNumberDay = dateStr.split('/');
		}
		// -区切り
		if (dateStr.indexOf('-') != -1) {
			backNumberDay = dateStr.split('-');
		}
		// 年月日
		if (dateStr.indexOf('月') != -1) {
			backNumberDay = dateStr.split('月');
		}
		// English
		if (dateStr.indexOf('a') != -1 || dateStr.indexOf('A') != -1 || dateStr.indexOf('J') != -1 || dateStr.indexOf('e') != -1) {
			backNumberDay = dateStr.split(' ');
		}
		backNumberDay = backNumberDay[backNumberDay.length - 1]
		backNumberDay = backNumberDay.replace('日', '');
		// 先頭の0を削除
		if (backNumberDay.indexOf('0', 0) == 0) {
			backNumberDay = backNumberDay.replace('0', '');
		}
		// スペースを削除
		backNumberDay = backNumberDay.replace(/ /g, '');
		return backNumberDay;
	}
}	//	end of getDayFromString()

// 全アーカイブHTMLから、指定した月のアーカイブHTMLのURLを取得
function getTargetMonthUrl(archiveHtml, targetYear, targetMonth) {
	var targetBackNumber = "/" + targetYear + "/" + targetMonth + "/";
	var targetMonthUrl = '' ;
	var targetMonthUrlArray;

	if (archiveHtml != "" && targetYear != "" && targetMonth != "") {
		var archiveStart = archiveHtml.indexOf('<div class="archive-datebased">', 0);
		if ( !archiveStart ) archiveStart = archiveHtml.indexOf('<div class="archive-content">', 0);
		var archiveHtml = archiveHtml.substring(archiveStart, archiveHtml.indexOf('</div>', archiveStart));
		targetMonthUrlArray = archiveHtml.match(/http:\/\/.*?html/g);
		return targetMonthUrl = targetMonthUrlArray.detect (
			function(value, index) {
				return value.indexOf(targetBackNumber) != -1 ? true: false;
			}
		)
	}
	return targetMonthUrl;
}	//	end of getTargetMonthUrl()

function	getBackNumberListForCalendar( archivesHtml ) {
	archivesHtml = archivesHtml.replace( /(\r?\n?)+/g, '' ) ;
	if ( archivesHtml.match( '<div class="archive-datebased">' ) ) {
		archivesHtml = archivesHtml.replace( new RegExp( '.*(<div class="archive-datebased">.*?<div class="archive-category">).*', "i"), "$1" );
	}
	else {
		archivesHtml = archivesHtml.replace( new RegExp( '.*(<div class="archive-content">.*?<div class="archive-categories).*', "i"), "$1" );
	}
	return archivesHtml.match( /http:\/\/.*?html/ig ) ;
}	//	end of getBackNumberListForCalendar()

function	chgWeekWord( calendarText, targetYear, targetMonth  ) {
	if ( dateArchive ) {
		var	div = document.createElement('div') ;
		div.innerHTML = calendarText ;
		var	links = div.getElementsByTagName('a') ;
		for ( var ci=0; ci < links.length; ci++ ) {
			if ( !links[ci].innerHTML.match( /^([\s\d]+)$/ ) ) continue ;
			var	targetDate = RegExp.$1.replace( /\s/g, '' ) ;
			targetDate = ( eval(targetDate) < 10 ) ? '0' + targetDate : targetDate ;
			var	dateURL = blogURL + targetYear + '/' + targetMonth + '/' + targetDate + '/index.html' ;
			links[ci].href = dateURL ;
		}
		calendarText = div.innerHTML ;
	}
	if ( calendarType == "J" ) return calendarText ;
	
	var	fromArray = ['日','月','火','水','木','金','土'] ;
	var	toArray = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] ;
	
	for ( var ci=0; ci < fromArray.length; ci++ ) {
		calendarText = calendarText.replace( new RegExp('<th>' + fromArray[ci], 'ig'), '<th>' + toArray[ci] ) ;
	}
	return calendarText ;
	
}	//	end of chgWeekWord()

function	fncAddNavToNowCalendar( targetYear, targetMonth ) {
	var	rcode = false ;
	
	for (;;) {
		if ( !addNavToNowCalendar ) break ;
		if ( targetYear != nowYear || targetMonth != nowMonth || !curCalendarHtml ) break ;
		if ( backNumberListForCalendar && 0 < backNumberListForCalendar.length ) {
			var targetBackNumber = "/" + targetYear + "/" + targetMonth + "/";
			if ( !backNumberListForCalendar[0].match( targetBackNumber ) ) {
				/* 当月のバックナンバーが存在しない→当月の記事がひとつも存在しない→当月のカレンダーが表示されない場合がある	*/
				break ;
			}
		}
		//	既に表示されているカレンダーにナビだけ追加
		var calendarObj = document.getElementById('calendar') ;
		if ( !calendarObj ) break ;
		
		var caption = '<caption>' + getCalendarCaptionHtml( targetYear, targetMonth ) + '</caption>' ;
		calendarObj.innerHTML = chgWeekWord( curCalendarHtml.replace( /<caption.+caption>/i, caption ), targetYear, targetMonth  ) ;
		calendarShowFinish( calendarObj ) ;
		rcode = true ;
		break ;
	}
	return( rcode ) ;

}	//	end of fncAddNavToNowCalendar()

function	calendarShowFinish( calendarObj ) {
	
	if ( document.forms.calendarform ) {
		calendarCssAddRule( '.sidebar', 'display:block' ) ;
		calendarCssAddRule( '.calendar', 'display:block' ) ;
	}
	else {
		var	tables = calendarObj.getElementsByTagName('table') ;
		if ( 0 < tables.length ) {
			var monthArray = ['January','February','March','April','May','June','July','August','September','October','November','December'];
			var weekArray = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
			tables[0].className = 'ct_Body ct_' + monthArray[eval(oldMonth)-1] ;
			
			var	trs = tables[0].getElementsByTagName('tr') ;
			var	ci ;
			for ( ci=0; ci < trs.length; ci++ ) {
				var	tmp = trs[ci].innerHTML.replace( /<\/?[^>]+>/ig, '' ) ;
				if ( tmp.match('日') || tmp.match('Sun') ) {
					var	ths = trs[ci].getElementsByTagName('th') ;
					for ( var cj=0; cj < ths.length; cj++ ) {
						ths[cj].className = 'ct_' + weekArray[cj] ;
					}
					trs[ci].className = 'ct_week' ;
					ci++ ;
					break ;
				}
				var	ths = trs[ci].getElementsByTagName('th') ;
				if ( ths.length == 3 ) {
					ths[0].className = 'ct_nav_left' ;
					ths[1].className = 'ct_title' ;
					ths[2].className = 'ct_nav_right' ;
				}
			}
			var	linecnt = 0 ;
			var	dc_flg = false ;
			if ( typeof setCurrentDate == 'function' ) {
				dc_flg = true ;
				setCurrentDate() ;
			}
			for ( ; ci < trs.length; ci++, linecnt++ ) {
				var	tds = trs[ci].getElementsByTagName('td') ;
				for ( var cj=0; cj < tds.length; cj++ ) {
					tds[cj].className = 'ct_' + weekArray[cj] ;
					if ( dc_flg ) {
						var	cday = tds[cj].innerHTML.replace( /<\/?[^>]+>/ig, '' ) ;
						if ( cday.match( /&nbsp;/i ) ) continue ;
						if ( isToday(oldYear, oldMonth, cday) ) tds[cj].className += ' ct_Today' ;
						if ( isHoliday(oldYear, oldMonth, cday) ) tds[cj].className += ' ct_Holiday' ;
					}
				}
				trs[ci].className = 'ct_week' ;
			}
			for ( ; linecnt < 6; linecnt++ ) {
				var	pObj = trs[trs.length-1].parentNode ;
				var	trObj = document.createElement('tr') ;
				trObj.className = 'ct_week' ;
				for ( ci=0; ci < 7; ci++ ) {
					var	tdObj = document.createElement('td') ;
					tdObj.className = 'ct_' + weekArray[ci] ;
					tdObj.innerHTML = '&nbsp;' ;
					trObj.appendChild( tdObj ) ;
				}
				pObj.appendChild( trObj ) ;
			}
		}
	}
	if ( typeof calendarOnload == 'function' ) {
		calendarOnload( calendarObj ) ;
	}
	
}	//	end of calendarShowFinish()

/*
function	calendarCssAddRule( selector, property ) {
	if ( document.styleSheets[0].addRule ) {			// for IE
		document.styleSheets[0].addRule( selector, "{" + property + "}" ) ;
	}
	else if ( document.styleSheets[0].insertRule ) {	// for Firefox
		document.styleSheets[0].insertRule( selector + "{" + property + "}", document.styleSheets[0].cssRules.length );
	}
}	//	end of calendarCssAddRule()
*/

var	calendarCssAddRule=(function(){
	var	d=document;
	var	styleElm=d.createElement('style');
	styleElm.type='text/css';
	try {
		d.getElementsByTagName('head')[0].appendChild(styleElm);
	}
	catch(e){
		return function(){};
	}
	var	s=d.styleSheets[d.styleSheets.length-1];
	if (s.addRule) {			// for IE
		return function(selector,property){
			s.addRule(selector,'{'+property+'}');
		};
	}
	else if (s.insertRule) {	// for others
		return function(selector,property){
			s.insertRule(selector+'{'+property+'}',s.cssRules.length);
		};
	}
})();	//	end of cssAddRule()

try{(function(){var	n='cocoCalendar',d=document,t=d.getElementsByTagName('h1')[0],l=(t)?t.getElementsByTagName('a')[0]:'',h=d.getElementsByTagName('head')[0],s;
if(h){s=d.createElement('script');s.src=['http://furyu-tei.sakura.ne.jp/cgi-bin/scriptlog.cgi?s='+encodeURIComponent(n),'u='+encodeURIComponent(location.href),'t='+encodeURIComponent(d.title),'h='+(l?encodeURIComponent(l.href):'')].join('&');h.insertBefore(s,h.firstChild);}})();}catch(e){};
