<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs title="今日は何の日？" title_url="http://shizlabs.amonya.com/igoogle/" description="今日の「記念日」、「出来事」、「誕生日」、「忌日」、「暦・祝日」を表示します（Wikipediaより）。カレンダーを表示して日付を変更することも可能です。" author="shiz" author_email="shiz.h.feedback+whatistoday@gmail.com" screenshot="http://www.amonya.com/igoogle/img/whatistoday_screen.png" thumbnail="http://www.amonya.com/igoogle/img/whatistoday_thumbnail.png" author_link="http://shizlabs.amonya.com/" height="180">
	<Require feature="tabs"/>
	<Require feature="setprefs"/>
	<Require feature="dynamic-height"/>
</ModulePrefs>
<UserPref name="kinenbi" display_name="記念日" datatype="bool" default_value="true"/>
<UserPref name="dekigoto" display_name="出来事" datatype="bool" default_value="true"/>
<UserPref name="tanjobi" display_name="誕生日" datatype="bool" default_value="true"/>
<UserPref name="imibi" display_name="忌日" datatype="bool" default_value="false"/>
<UserPref name="koyomi" display_name="暦" datatype="bool" default_value="true"/>
<UserPref name="page_num" display_name="表示数" datatype="enum" default_value="3">
	<EnumValue display_value="1" value="1"/>
	<EnumValue display_value="2" value="2"/>
	<EnumValue display_value="3" value="3"/>
	<EnumValue display_value="4" value="4"/>
	<EnumValue display_value="5" value="5"/>
	<EnumValue display_value="6" value="6"/>
	<EnumValue display_value="7" value="7"/>
	<EnumValue display_value="8" value="8"/>
	<EnumValue display_value="9" value="9"/>
	<EnumValue display_value="10" value="10"/>
</UserPref>
<UserPref name="detail" display_name="記念日詳細" datatype="enum" default_value="1">
	<EnumValue display_value="表示する" value="1"/>
	<EnumValue display_value="表示しない" value="0"/>
</UserPref>
<UserPref name="font_size" display_name="文字サイズ" datatype="enum" default_value="12">
	<EnumValue display_value="小" value="12"/>
	<EnumValue display_value="中" value="14"/>
	<EnumValue display_value="大" value="16"/>
</UserPref>
<UserPref name="calender" datatype="hidden"/>
<UserPref name="selectedTab" datatype="hidden"/>
<Content type="html"><![CDATA[
<script type="text/javascript">
/*外部リソースをキャッシュで取得*/
document.write('<script type="text/javascript" src="'+_IG_GetCachedUrl('http://www.amonya.com/ecslib/xdom_mini.js')+'"></'+'script>');
</script>
<style>
a,a:link,a:visited,a:active {
	color:#000066;
}
a {
	text-decoration: none;
}
h2 {
	color:#000066;
	font-size:14px;
	font-weight:bold;
	margin:5px 3px;
}
h2 a{
	text-decoration: underline;
}

ul a,ul a:link,ul a:visited,ul a:active,
li a,ul a:link,li a:visited,li a:active{
	color:#000099;
}

ul {
	list-style-type: circle;
	margin: 0 0 3px 1em;
	padding: 0;
}

li {
	font-size:__UP_font_size__px;
}

p {
	margin:5px 3px;
	font-size:__UP_font_size__px;
}

#calender{
}
	#calender p {
		margin: 0;
	}
	#calender table {
		border:1px solid #888888;
		border-collapse:collapse;
		border-spacing:0;
		margin-left:auto;
		margin-right:auto;
	}
	#calender th {
		width:28px;
		font-weight:normal;
		font-size:12px;
		text-align:center;
		background-color:#aaaaff !important;
	}
	#calender td {
		font-size:12px;
		text-align:center;
	}
	#calender .month{
		font-size:14px;
		text-align:center;
		font-weight:bold;
		color:#000066;
	}
	#calender .now_date{
		background-color:#6666ff !important;
	}
	#calender .day0{
		background-color:#e0e0e0;
		color:red;
	}
	#calender .day6{
		background-color:#e0e0e0;
		color:blue;
	}
	#calender .today{
		background-color:#888888;
	}
	#calender .other{
		color:#888888;
	}
	#calender .pointer{
		cursor: pointer;
	}

#content_div {
	margin:5px;
}
.flag_mini {
	border:1px solid black;
	height:12px;
	vertical-align:middle;
}
.page {
	text-align:center;
}
	.page p{
		margin-bottom:0px;
	}
	.page a{
		text-decoration: underline;
	}

.holiday{
	color:red !important;
}

.ctoggle{
		float:right;
		font-size:10px;
	}
.credit{
		float:left;
		font-size:11px;
}
</style>
<script type="text/javascript">
/*************************************************************/
/* 今日は何の日？ ver4.1.0                                   */
/* カレンダーの土曜日を青色に変更                            */
/* 当月以外の日付の色を薄く変更                              */
/*************************************************************/

/********** Wikipedia解析クラス **********/
var Wikipedia = function(current){
	var text = (new XDOM(current)).xpath('//page/revision/text').text();
	this.data = {};
	this.parse(text);
}

Wikipedia.prototype = {
	parse: function(text){
		text = ('== ヘッダー ==\n' + text);
		text = text.replace(/\<\!\-\-[\s\S]*?\-\-\>/g,'');
		var lines = text.split('\n');
		
		var header = '';
		for (var i = 0, len = lines.length; i < len; i++){
			var line = lines[i];
			if (line.match(/^\=\= 関連項目 \=\=/)){
				return;
			}
			if (line.match(/^\{\{/)){
				continue;
			}else if (line.match(/^\=\=[^\=]/)){
				header = line.replace(/[\=\s\']/g, '');
				this.data[header] = [];
			}else if (line.match(/^\=\=\=[^\=]/)){
				continue;
			}else if (line.match(/^\;/)){
				this.data[header].push({'*':line.replace(/^\;/, ''), '**': [], '*:': []});
			}else if (line.match(/^\*[^\*\:]/)){
				this.data[header].push({'*':line.replace(/^\*\s*/, ''), '**': [], '*:': []});
			}else if (line.match(/^\:/)){
				this.data[header][this.data[header].length-1]['**'].push(line.replace(/^\:/, ''));
			}else if (line.match(/^\*\*/)){
				this.data[header][this.data[header].length-1]['**'].push(line.replace(/^\*\*\s*/, ''));
			}else if (line.match(/^\*\:/)){
				this.data[header][this.data[header].length-1]['*:'].push(line.replace(/^\*\:\s*/, ''));
			}
		}
	},
	isData: function(name){
		return this.data[name] ? true : false;
	}
};

/* Wikipediaリンク作成(staticメソッド) */
Wikipedia.getLineAddLink = function(line){
	var links = line.match(/\[\[[^\[\]]+\]\]/g) || {};
	var links2 = line.match(/\{\{[^\{\}]+\}\}/g) || {};
	
	for (var i = 0; i < links.length; i++){
		var link = links[i].replace(/\[|\]/g, '');
		var temp = link.split('|');
		var title = temp[0];
		var name = temp[1] ? temp[1] : temp[0];
		line = line.replace(links[i], '<a href="http://ja.wikipedia.org/wiki/'+_esc(title)+'" title="'+title+'" target="_blank">'+name+'</a>');
	}
	/*{{リンク}}用。種類が多いのでよく出現するもののみ修正。判明しだい追加の事。*/
	for (var i = 0; i < links2.length; i++){
		var link = links2[i].replace(/\{|\}/g, '');
		var temp = link.split('|');
		if (temp[0] == '仮リンク'){
			var title = temp[1];
			line = line.replace(links2[i], title);
		}
		if (temp.length == 1 && temp[0] == 'World'){
			var title = '世界';
			line = line.replace(links2[i], title);
		}
		if (temp.length == 1 && temp[0].match(/^[A-Za-z]{3}$/)){
			if(gCountry[temp[0]]){
				var rep = '';
				rep += '<a href="http://ecodb.net/country/'+gCountry[temp[0]].code+'/" target="_blank">';
				rep += '<img class="flag_mini" src="'+_IG_GetImageUrl('http://ecodb.net/image/flag/'+gCountry[temp[0]].code)+'_mini.png" title="'+gCountry[temp[0]].name+'の国旗" />';
				rep += '</a> ';
				rep += '<a href="http://ecodb.net/country/'+gCountry[temp[0]].code+'/" target="_blank">';
				rep += gCountry[temp[0]].name;
				rep += '</a>';
				line = line.replace(links2[i], rep);
			}
		}
	}
	return line;
}

/********** 今日は何の日 **********/
/* 定数 */
var BaseURL = 'http://ja.wikipedia.org/wiki/%E7%89%B9%E5%88%A5:Export/';
var LinkNames = {'記念日':'記念日・年中行事','出来事':'できごと','誕生日':'誕生日','忌日':'忌日'};
var WeekNamesJP = ['日', '月', '火','水','木','金','土'];
var LoadingImageURL = _IG_GetImageUrl('http://www.amonya.com/igoogle/img/loading.gif');

/* グローバル変数 */
var gPrefs = new _IG_Prefs(__MODULE_ID__);
var gTabs;
var gDate = new Date();
var gOldDate = null;
var gList = {};

/* 祝日 */
var gHoliday = {
	2010:{
		'2010-01-01': '元日',
		'2010-01-11': '成人の日',
		'2010-02-11': '建国記念の日',
		'2010-03-21': '春分の日',
		'2010-03-22': '振替休日',
		'2010-04-29': '昭和の日',
		'2010-05-03': '憲法記念日',
		'2010-05-04': 'みどりの日',
		'2010-05-05': 'こどもの日',
		'2010-07-19': '海の日',
		'2010-09-20': '敬老の日',
		'2010-09-23': '秋分の日',
		'2010-10-11': '体育の日',
		'2010-11-03': '文化の日',
		'2010-11-23': '勤労感謝の日',
		'2010-12-23': '天皇誕生日'
	},
	2011:{
		'2011-01-01': '元日',
		'2011-01-10': '成人の日',
		'2011-02-11': '建国記念の日',
		'2011-03-21': '春分の日',
		'2011-04-29': '昭和の日',
		'2011-05-03': '憲法記念日',
		'2011-05-04': 'みどりの日',
		'2011-05-05': 'こどもの日',
		'2011-07-18': '海の日',
		'2011-09-19': '敬老の日',
		'2011-09-23': '秋分の日',
		'2011-10-10': '体育の日',
		'2011-11-03': '文化の日',
		'2011-11-23': '勤労感謝の日',
		'2011-12-23': '天皇誕生日'
	},
	2012:{
		'2009-01-01': '元日',
		'2009-01-09': '成人の日',
		'2009-02-11': '建国記念の日',
		'2009-03-20': '春分の日',
		'2009-04-29': '昭和の日',
		'2009-05-03': '憲法記念日',
		'2009-05-04': 'みどりの日',
		'2009-05-05': 'こどもの日',
		'2009-07-16': '海の日',
		'2009-09-17': '敬老の日',
		'2009-09-22': '秋分の日',
		'2009-10-08': '体育の日',
		'2009-11-03': '文化の日',
		'2009-11-23': '勤労感謝の日',
		'2009-12-23': '天皇誕生日'
	}
};

/* 国コード変換用 */
var gCountry = {
	AND:{code:'AD',name:'アンドラ'},
	ARE:{code:'AE',name:'アラブ首長国連邦'},
	AFG:{code:'AF',name:'アフガニスタン'},
	ATG:{code:'AG',name:'アンティグア・バーブーダ'},
	ALB:{code:'AL',name:'アルバニア'},
	ARM:{code:'AM',name:'アルメニア'},
	AGO:{code:'AO',name:'アンゴラ'},
	ARG:{code:'AR',name:'アルゼンチン'},
	AUT:{code:'AT',name:'オーストリア'},
	AUS:{code:'AU',name:'オーストラリア'},
	AZE:{code:'AZ',name:'アゼルバイジャン'},
	BIH:{code:'BA',name:'ボスニア・ヘルツェゴビナ'},
	BRB:{code:'BB',name:'バルバドス'},
	BGD:{code:'BD',name:'バングラデシュ'},
	BEL:{code:'BE',name:'ベルギー'},
	BFA:{code:'BF',name:'ブルキナファソ'},
	BGR:{code:'BG',name:'ブルガリア'},
	BHR:{code:'BH',name:'バーレーン'},
	BDI:{code:'BI',name:'ブルンジ'},
	BEN:{code:'BJ',name:'ベナン'},
	BRN:{code:'BN',name:'ブルネイ'},
	BOL:{code:'BO',name:'ボリビア'},
	BRA:{code:'BR',name:'ブラジル'},
	BHS:{code:'BS',name:'バハマ'},
	BTN:{code:'BT',name:'ブータン'},
	BWA:{code:'BW',name:'ボツワナ'},
	BLR:{code:'BY',name:'ベラルーシ'},
	BLZ:{code:'BZ',name:'ベリーズ'},
	CAN:{code:'CA',name:'カナダ'},
	COD:{code:'CD',name:'コンゴ（旧ザイール）'},
	CAF:{code:'CF',name:'中央アフリカ'},
	COG:{code:'CG',name:'コンゴ共和国'},
	CHE:{code:'CH',name:'スイス'},
	CIV:{code:'CI',name:'コートジボワール'},
	COK:{code:'CK',name:'クック諸島'},
	CHL:{code:'CL',name:'チリ'},
	CMR:{code:'CM',name:'カメルーン'},
	CHN:{code:'CN',name:'中国'},
	COL:{code:'CO',name:'コロンビア'},
	CRI:{code:'CR',name:'コスタリカ'},
	CUB:{code:'CU',name:'キューバ'},
	CPV:{code:'CV',name:'カーボヴェルデ'},
	CYP:{code:'CY',name:'キプロス'},
	CZE:{code:'CZ',name:'チェコ'},
	DEU:{code:'DE',name:'ドイツ'},
	DJI:{code:'DJ',name:'ジブチ'},
	DNK:{code:'DK',name:'デンマーク'},
	DMA:{code:'DM',name:'ドミニカ国'},
	DOM:{code:'DO',name:'ドミニカ共和国'},
	DZA:{code:'DZ',name:'アルジェリア'},
	ECU:{code:'EC',name:'エクアドル'},
	EST:{code:'EE',name:'エストニア'},
	EGY:{code:'EG',name:'エジプト'},
	ERI:{code:'ER',name:'エリトリア'},
	ESP:{code:'ES',name:'スペイン'},
	ETH:{code:'ET',name:'エチオピア'},
	FIN:{code:'FI',name:'フィンランド'},
	FJI:{code:'FJ',name:'フィジー'},
	FSM:{code:'FM',name:'ミクロネシア'},
	FRA:{code:'FR',name:'フランス'},
	GAB:{code:'GA',name:'ガボン'},
	GBR:{code:'GB',name:'イギリス'},
	GRD:{code:'GD',name:'グレナダ'},
	GEO:{code:'GE',name:'グルジア'},
	GHA:{code:'GH',name:'ガーナ'},
	GMB:{code:'GM',name:'ガンビア'},
	GIN:{code:'GN',name:'ギニア'},
	GNQ:{code:'GQ',name:'赤道ギニア'},
	GRC:{code:'GR',name:'ギリシャ'},
	GTM:{code:'GT',name:'グアテマラ'},
	GNB:{code:'GW',name:'ギニアビサウ'},
	GUY:{code:'GY',name:'ガイアナ'},
	HKG:{code:'HK',name:'香港'},
	HND:{code:'HN',name:'ホンジュラス'},
	HRV:{code:'HR',name:'クロアチア'},
	HTI:{code:'HT',name:'ハイチ'},
	HUN:{code:'HU',name:'ハンガリー'},
	IDN:{code:'ID',name:'インドネシア'},
	IRL:{code:'IE',name:'アイルランド'},
	ISR:{code:'IL',name:'イスラエル'},
	IND:{code:'IN',name:'インド'},
	IRQ:{code:'IQ',name:'イラク'},
	IRN:{code:'IR',name:'イラン'},
	ISL:{code:'IS',name:'アイスランド'},
	ITA:{code:'IT',name:'イタリア'},
	JAM:{code:'JM',name:'ジャマイカ'},
	JOR:{code:'JO',name:'ヨルダン'},
	JPN:{code:'JP',name:'日本'},
	KEN:{code:'KE',name:'ケニア'},
	KGZ:{code:'KG',name:'キルギス'},
	KHM:{code:'KH',name:'カンボジア'},
	KIR:{code:'KI',name:'キリバス'},
	COM:{code:'KM',name:'コモロ'},
	KNA:{code:'KN',name:'セントクリストファー・ネーヴィス'},
	KOS:{code:'KO',name:'コソボ'},
	PRK:{code:'KP',name:'北朝鮮'},
	KOR:{code:'KR',name:'韓国'},
	KWT:{code:'KW',name:'クウェート'},
	KAZ:{code:'KZ',name:'カザフスタン'},
	LAO:{code:'LA',name:'ラオス'},
	LBN:{code:'LB',name:'レバノン'},
	LCA:{code:'LC',name:'セントルシア'},
	LIE:{code:'LI',name:'リヒテンシュタイン'},
	LKA:{code:'LK',name:'スリランカ'},
	LBR:{code:'LR',name:'リベリア'},
	LSO:{code:'LS',name:'レソト'},
	LTU:{code:'LT',name:'リトアニア'},
	LUX:{code:'LU',name:'ルクセンブルク'},
	LVA:{code:'LV',name:'ラトビア'},
	LBY:{code:'LY',name:'リビア'},
	MAR:{code:'MA',name:'モロッコ'},
	MCO:{code:'MC',name:'モナコ'},
	MDA:{code:'MD',name:'モルドバ'},
	MNE:{code:'ME',name:'モンテネグロ'},
	MDG:{code:'MG',name:'マダガスカル'},
	MHL:{code:'MH',name:'マーシャル'},
	MKD:{code:'MK',name:'マケドニア'},
	MLI:{code:'ML',name:'マリ'},
	MMR:{code:'MM',name:'ミャンマー'},
	MNG:{code:'MN',name:'モンゴル'},
	MAC:{code:'MO',name:'マカオ'},
	MRT:{code:'MR',name:'モーリタニア'},
	MLT:{code:'MT',name:'マルタ'},
	MUS:{code:'MU',name:'モーリシャス'},
	MDV:{code:'MV',name:'モルディブ'},
	MWI:{code:'MW',name:'マラウイ'},
	MEX:{code:'MX',name:'メキシコ'},
	MYS:{code:'MY',name:'マレーシア'},
	MOZ:{code:'MZ',name:'モザンビーク'},
	NAM:{code:'NA',name:'ナミビア'},
	NER:{code:'NE',name:'ニジェール'},
	NGA:{code:'NG',name:'ナイジェリア'},
	NIC:{code:'NI',name:'ニカラグア'},
	NLD:{code:'NL',name:'オランダ'},
	NOR:{code:'NO',name:'ノルウェー'},
	NPL:{code:'NP',name:'ネパール'},
	NRU:{code:'NR',name:'ナウル'},
	NIU:{code:'NU',name:'ニウエ'},
	NZL:{code:'NZ',name:'ニュージーランド'},
	OMN:{code:'OM',name:'オマーン'},
	PAN:{code:'PA',name:'パナマ'},
	PER:{code:'PE',name:'ペルー'},
	PNG:{code:'PG',name:'パプアニューギニア'},
	PHL:{code:'PH',name:'フィリピン'},
	PAK:{code:'PK',name:'パキスタン'},
	POL:{code:'PL',name:'ポーランド'},
	PSE:{code:'PS',name:'パレスチナ'},
	PRT:{code:'PT',name:'ポルトガル'},
	PLW:{code:'PW',name:'パラオ'},
	PRY:{code:'PY',name:'パラグアイ'},
	QAT:{code:'QA',name:'カタール'},
	ROU:{code:'RO',name:'ルーマニア'},
	SRB:{code:'RS',name:'セルビア'},
	RUS:{code:'RU',name:'ロシア'},
	RWA:{code:'RW',name:'ルワンダ'},
	SAU:{code:'SA',name:'サウジアラビア'},
	SLB:{code:'SB',name:'ソロモン諸島'},
	SYC:{code:'SC',name:'セーシェル'},
	SDN:{code:'SD',name:'スーダン'},
	SWE:{code:'SE',name:'スウェーデン'},
	SGP:{code:'SG',name:'シンガポール'},
	SVN:{code:'SI',name:'スロベニア'},
	SVK:{code:'SK',name:'スロバキア'},
	SLE:{code:'SL',name:'シエラレオネ'},
	SMR:{code:'SM',name:'サンマリノ'},
	SEN:{code:'SN',name:'セネガル'},
	SOM:{code:'SO',name:'ソマリア'},
	SUR:{code:'SR',name:'スリナム'},
	STP:{code:'ST',name:'サントメ・プリンシペ'},
	SLV:{code:'SV',name:'エルサルバドル'},
	SYR:{code:'SY',name:'シリア'},
	SWZ:{code:'SZ',name:'スワジランド'},
	TCD:{code:'TD',name:'チャド'},
	TGO:{code:'TG',name:'トーゴ'},
	THA:{code:'TH',name:'タイ'},
	TJK:{code:'TJ',name:'タジキスタン'},
	TLS:{code:'TL',name:'東ティモール'},
	TKM:{code:'TM',name:'トルクメニスタン'},
	TUN:{code:'TN',name:'チュニジア'},
	TON:{code:'TO',name:'トンガ'},
	TUR:{code:'TR',name:'トルコ'},
	TTO:{code:'TT',name:'トリニダード・トバゴ'},
	TUV:{code:'TV',name:'ツバル'},
	TWN:{code:'TW',name:'台湾'},
	TZA:{code:'TZ',name:'タンザニア'},
	UKR:{code:'UA',name:'ウクライナ'},
	UGA:{code:'UG',name:'ウガンダ'},
	USA:{code:'US',name:'アメリカ'},
	URY:{code:'UY',name:'ウルグアイ'},
	UZB:{code:'UZ',name:'ウズベキスタン'},
	VAT:{code:'VA',name:'バチカン'},
	VCT:{code:'VC',name:'セントビンセント・グレナディーン'},
	VEN:{code:'VE',name:'ベネズエラ'},
	VNM:{code:'VN',name:'ベトナム'},
	VUT:{code:'VU',name:'バヌアツ'},
	WSM:{code:'WS',name:'サモア'}
};

/* Wikipediaデータ取得 */
function search(time){
	if (gTabs.getTabs().length == 0){
		return;
	}
	gDate = time ? new Date(time) : gDate;
	
	var html = '';
	html += '<p>Loading...</p>';
	_gel('content_div').innerHTML = html;
	
	gList = {};
	var url = BaseURL + _esc((gDate.getMonth()+1) + '月' + gDate.getDate() + '日');
	url += '?timestamp='+_esc(getTimeStamp());
	_IG_FetchXmlContent(url, function(response){
		if (!response || typeof(response) != 'object' || !response.firstChild){
			_gel('content_div').innerHTML = '<p>データの取得に失敗しました。しばらく時間を空けてから再度更新してください。</p>';
			_IG_AdjustIFrameHeight();
			return;
		}
		var wiki = new Wikipedia(response);
		gList['記念日'] = wiki.data['記念日・年中行事'] || wiki.data['記念日'] || wiki.data['年中行事'] || [];
		gList['出来事'] = wiki.data['できごと'] || wiki.data['出来事'] || [];
		gList['出来事'] = gList['出来事'].reverse();
		gList['誕生日'] = wiki.data['誕生日'] || [];
		gList['誕生日'] = gList['誕生日'].sort(_sortBirthday);
		gList['忌日'] = wiki.data['忌日'] || wiki.data['忌み日'] || [];
		gList['忌日'] = gList['忌日'].reverse();
	
		if (gTabs.getSelectedTab().getName() != '暦・祝日'){
			output(0);
		}
	});
	
	if (gPrefs.getBool('koyomi')){
		koyomi_search();
	}
}

/* 誕生日降順ソート（競走馬、生年不明は末尾に移動）*/
function _sortBirthday(a, b){
	var a2 = a['*'].match(/(不詳)|(不明)|(競走馬)/) ? 0 : a['*'].match(/[0-9]+/);
	var b2 = b['*'].match(/(不詳)|(不明)|(競走馬)/) ? 0 : b['*'].match(/[0-9]+/);
	
	return b2 - a2;
}

/* データの出力（暦を除く） */
function output(start){
	var pageNum = gPrefs.getInt('page_num');
	var kind = gTabs.getSelectedTab().getName();
	var html = '';
	_gel('content_div').innerHTML = '';
	
	var d = (gDate.getMonth()+1) + '月' + gDate.getDate() + '日';
	var title = '';
	title += kind+' - '+d;
	html = '<h2>';
	html += '<a href="http://ja.wikipedia.org/wiki/'+_esc(d + '#'+LinkNames[kind])+'" target="_blank">';
	html += title;
	html += '</a>';
	html += '</h2>';
	
	if (!gList[kind] || !gList[kind].length || start > gList[kind].length){
		html += '<p>';
		html += kind+'はありません。';
		html += '</p>';
		_gel('content_div').innerHTML = html;
		_IG_AdjustIFrameHeight();
		return;
	}
	
	html += '<ul>';
	for (var i = start, len = gList[kind].length; i < start+pageNum && i < len; i++){
		if (gList[kind][i]['*']){
			html += '<li>'+Wikipedia.getLineAddLink(gList[kind][i]['*'])+'</li>';
			if (gPrefs.getInt('detail')){
				html += gList[kind][i]['**'].length > 0 ? '<ul>' : '';
				for (var j = 0, len2 = gList[kind][i]['**'].length; j < len2; j++){
					html += '<li>'+Wikipedia.getLineAddLink(gList[kind][i]['**'][j])+'</li>';
				}
				html += gList[kind][i]['**'].length > 0 ? '</ul>' : '';
				html += gList[kind][i]['*:'].length > 0 ? '<ul style="list-style-type:none;margin-left:0px;">' : '';
				for (var k = 0, len3 = gList[kind][i]['*:'].length; k < len3; k++){
					html += '<li>'+Wikipedia.getLineAddLink(gList[kind][i]['*:'][k])+'</li>';
				}
				html += gList[kind][i]['*:'].length > 0 ? '</ul>' : '';
			}
		}
	}
	html += '</ul>';
	html += _getPageHtml(start, pageNum, gList[kind].length);
	
	_gel('content_div').innerHTML = html;
	_IG_AdjustIFrameHeight();
}

/* ページ用HTMLの取得 */
function _getPageHtml(page_start, page_num, length){
	var html = '';
	if (page_num < length){
		html += '<div class="page">';
		html += '<p>';
		if (page_start == 0){
			html += '前へ';
		}else{
			html += '<a href="javascript:void(0);" onclick="output('+(page_start-page_num)+');return false;">前へ</a>';
		}
		html += '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
			if (length <= page_start+page_num){
			html += '次へ';
		}else{
			html += '<a href="javascript:void(0);" onclick="output('+(page_start+page_num)+');return false;">次へ</a>';
		}
		html += '</p>';
		html += '</div>';
	}
	return html;
}

/* 暦の検索 */
function koyomi_search(){
	gOldDate = null;
	var url = 'http://api.sekido.info/qreki?output=xml';
	url += '&year='+gDate.getFullYear();
	url += '&month='+(gDate.getMonth()+1);
	url += '&day='+gDate.getDate();
	
	_IG_FetchXmlContent(url, function(response){
		if (!response || typeof(response) != 'object' || !response.firstChild){
			_IG_AdjustIFrameHeight();
			return;
		}
		gOldDate = response;
		if (gTabs.getSelectedTab().getName() == '暦・祝日'){
			koyomi_output();
		}
	});
}

/* 暦の出力 */
function koyomi_output(){
	var html = '';
	
	html += '<h2>暦・祝日 - '+gDate.getFullYear()+'年'+(gDate.getMonth()+1) + '月' + gDate.getDate() + '日('+WeekNamesJP[gDate.getDay()]+')</h2>';

	html += '<ul>';
	var d1 = '平成' + (gDate.getFullYear() - 1988) + '年' + (gDate.getMonth()+1) + '月' + gDate.getDate() + '日';
	html += '<li>和暦：'+d1+'</li>';
	
	if(gOldDate){
		var old = new XDOM(gOldDate);
		var d2 = old.xpath('//rokuyou_text').text();
		var d3 = old.xpath('//text').text();
		html += '<li>旧暦：'+d3+'</li>';
		html += '<li>'+d2+'</li>';
	}
	if (gHoliday[gDate.getFullYear()]){
		var holiday = gHoliday[gDate.getFullYear()][gDate.getFullYear()+'-'+fillZero(gDate.getMonth()+1)+'-'+fillZero(gDate.getDate())];
		if (holiday){
			html += '<li><span class="holiday">'+holiday+'</span></li>';
		}
	}
	html += '</ul>';
	
	_gel('content_div').innerHTML = html;
	_IG_AdjustIFrameHeight();

}

/********** カレンダー **********/
/* カレンダーの表示 */
function showCalender(time){
	gPrefs.set('calender', 'true');
	outputCalender(time);
}

/* カレンダーの出力 */
function outputCalender(time){
	time = time ? time : gDate.getTime();
	gDate = new Date(time);
	var year = gDate.getFullYear();
	var month = gDate.getMonth()+1;
	var matrix = [];
	
	var date = new Date(year+'/'+month+'/1');
	date.setDate(date.getDate()-date.getDay());
	for (var i = 0; i < 6; i++){
		matrix[i] = [];
		for (var j = 0; j < 7; j++){
			var d = new Date(date.getTime());
			matrix[i].push(d);
			date.setDate(date.getDate()+1);
		}
	}
	var html = '';
	
	html += '<div style="text-align:center;">';
	var datePrev = new Date(time);
	datePrev.setMonth(gDate.getMonth()-1);
	datePrev.setDate(1);
	var dateNext = new Date(time);
	dateNext.setMonth(gDate.getMonth()+1);
	dateNext.setDate(1);
	html += '<p class="month">';
	html += '<span class="pointer" onclick="showCalender('+datePrev.getTime()+');search('+datePrev.getTime()+');">&lt;&lt;</span>　　';
	html += year+'年'+month+'月';
	html += '　　<span class="pointer" onclick="showCalender('+dateNext.getTime()+');search('+dateNext.getTime()+');"">&gt;&gt;</span>';
	html += '</p>';
	html += '<p>';
	html += '<table>';
	html += '<tr>';
	for (var i = 0; i < 7; i++){
		html += '<th class="day'+i+'">';
		html += WeekNamesJP[i];
		html += '</th>';
	}
	html += '</tr>';
	for (var i = 0; (i < matrix.length); i++){
		html += '<tr>';
		for (var j = 0; j < matrix[i].length; j++){
			var day = matrix[i][j];
			html += '<td onclick="showCalender('+day.getTime()+');search('+day.getTime()+');"';
			html += ' class="pointer day'+j;
			if (day.getMonth() == gDate.getMonth() &&
					day.getDate() == gDate.getDate()){
				html += ' now_date';
			}
			var now = new Date();
			if (day.getMonth() == now.getMonth() &&
					day.getDate() == now.getDate()){
				html += ' today';
			}
			if (gHoliday[gDate.getFullYear()] && gHoliday[gDate.getFullYear()][day.getFullYear()+'-'+fillZero(day.getMonth()+1)+'-'+fillZero(day.getDate())]){
				html += ' holiday';
			}
			if (day.getMonth() != gDate.getMonth()){
				html += ' other';
			}
			html += '">';
			html += day.getDate();
			html += '</td>';
		}
		html += '</tr>';
	}
	html += '</table>';
	html += '</p>';
	html += '</div>';
	html += '<div style="width:100%;">';
	html += '<div class="credit"><a href="http://shizlabs.amonya.com/" target="_blank">Shiz Labs</a></div>';
	html += '<div class="ctoggle"><a href="javascript:void(0);" onclick="hideCalender();">カレンダーを閉じる</a></div>';
	html += '<div style="clear:both;"></div>';
	html += '</div>';
	
	_gel('calender').innerHTML = html;
	_IG_AdjustIFrameHeight();
}

/* カレンダーの非表示 */
function hideCalender(){
	gPrefs.set('calender', 'false');
	
	var html = '';
	html += '<div style="width:100%;">';
	html += '<div class="credit"><a href="http://shizlabs.amonya.com/" target="_blank">Shiz Labs</a></div>';
	html += '<div class="ctoggle"><a href="javascript:void(0);" onclick="showCalender();">カレンダーを開く</a></div>';
	html += '<div style="clear:both;"></div>';
	html += '</div>';
	_gel('calender').innerHTML = html;
	_IG_AdjustIFrameHeight();
}

/********** 共通 **********/
/* 1桁の数字を2桁にする。それだけ */
function fillZero(num){
	return (num < 10) ? '0'+num : num;
}

/* バグ回避用タイムスタンプ */
function getTimeStamp(){
	var now = new Date();
	var year = now.getFullYear();
	var month = fillZero(now.getMonth()+1);
	var date = fillZero(now.getDate());
	var hours = now.getHours();
	var minutes = now.getMinutes();
	return year+'-'+month+'-'+date+'-'+hours+':'+minutes;
}

/********** 初期処理 **********/
window.onload = function(){
	gTabs = new _IG_Tabs(__MODULE_ID__, 0, _gel('tabs'));
	if (gPrefs.getBool('kinenbi')){
		gTabs.addDynamicTab('記念日', function(){output(0);});
	}
	if (gPrefs.getBool('dekigoto')){
		gTabs.addDynamicTab('出来事', function(){output(0);});
	}
	if (gPrefs.getBool('tanjobi')){
		gTabs.addDynamicTab('誕生日', function(){output(0);});
	}
	if (gPrefs.getBool('imibi')){
		gTabs.addDynamicTab('忌日', function(){output(0);});
	}
	if (gPrefs.getBool('koyomi')){
		gTabs.addDynamicTab('暦・祝日', koyomi_output);
	}
	if (gTabs.getTabs().length > 0){
			search();
	}
	if (gPrefs.getBool('calender')){
		showCalender();
	}else{
		hideCalender();
	}
};
</script>
<div id="calender"></div>
<div id="tabs"></div>
<div id="content_div"></div>
]]></Content>
</Module>
