function draw_calendar(target_date){
	
	var out = {
		buff : "",
		write : function(str){
			this.buff += str;
		},
		toString : function(){
			return this.buff;
		}
	};
	
	var tag = function(tag, other){
		out.write('<' + tag);
		if(other)out.write(' ' + other);
		out.write('>');
	};
	var close_tag = function(tag){
		out.write('</' + tag + '>');
	};
	
	var today = new Date();
	var target = today;
	if(target_date)target = new Date(target_date);
	var month_start = new Date(target.getFullYear(),target.getMonth(),1);
	var month_end = new Date(target.getFullYear(),target.getMonth()+1,0);
	var month_text = target.getMonth() + 1;
	
	var prev_month = new Date(target.getFullYear(),target.getMonth()-1,1);
	var next_month = new Date(target.getFullYear(),target.getMonth()+1,1);
	
	tag("table",'id="calendar"');
	
		//ナビゲーション
		out.write('<tr height="15">');
		out.write('<th colspan="7" class="month">');
		out.write('<a href="#" id="calendar_prev">&lt;&lt;');close_tag('a');
		out.write('&nbsp;&nbsp;&nbsp;');
		out.write(target.getFullYear() + '年' + month_text + '月');
		out.write('&nbsp;&nbsp;&nbsp;');
		out.write('<a href="#" id="calendar_next">&gt;&gt;');close_tag('a');
		close_tag('th');
		close_tag('tr');
		
		//曜日
		out.write('<tr height="15">');
		out.write('<th class="sunday">日');close_tag('th');
		out.write('<th>月');close_tag('th');
		out.write('<th>火');close_tag('th');
		out.write('<th>水');close_tag('th');
		out.write('<th>木');close_tag('th');
		out.write('<th>金');close_tag('th');
		out.write('<th class="saturday">土');close_tag('th');
		close_tag('tr');
		
		//箱の作成
		var calendar_box = [];
		
		for(var i=0; i<month_start.getDay(); i++){
			calendar_box.push("&nbsp;");
		}
		for(var i=1; i<=month_end.getDate(); i++){
			calendar_box.push(i);
		}
		var suffix_size = 7 - calendar_box.length % 7;
		for(var i=0; i<suffix_size; i++){
			calendar_box.push("&nbsp;");
		}
		
		//カレンダーの描画
		for(i=0; i<6; i++){
			if(undefined == calendar_box[i*7])break;
			tag("tr");
			for(j=0; j<7; j++){
				
				var calendar_value = calendar_box[i*7+j];
				
				tag("td",'id="calendar_box['+(i*7+j)+']"');
				out.write('<span ');
				if(!target_date && calendar_value == today.getDate()){
					out.write('class="today" ');
				}else if(j==0){
					out.write('class="holiday" ');
				}else if(j==6){
					out.write('class="saturday" ');
				}
				if(!isNaN(calendar_value))out.write('onclick="load_events('+month_text+','+calendar_value+');"');
				out.write(">");
				out.write(calendar_box[i*7+j]);
				if(j==0 || j==6)close_tag("span");
				close_tag("td");
			}
			close_tag("tr");
		}
	
	close_tag("table");
	
	
	if(!target_date){
		document.write(out);
	}else{
		document.getElementById("calendar").innerHTML = out;
	}
	
	document.getElementById("calendar_prev").onclick = function(){
		draw_calendar(prev_month);
	};
	
	document.getElementById("calendar_next").onclick = function(){
		draw_calendar(next_month);
	};
}

function load_events(month,date){
	
	var url = "/csv/" + month + "_" + date + ".csv";
	var csv = null;
	
	var tmpImage=new Image;tmpImage.src=url;url=tmpImage.src;
	
	var myAjax = new Ajax.Request(
	url, 
	{
		method: 'get',
		asynchronous : false,
		onSuccess: function(req){
			csv = req.responseText;
		},
		onFailure: function(){
//			alert("failed");
		}
	});
	
	var event_content = "";
	var death_content = "";
	var birth_content = "";
	
	if(csv){
		var files = csv.split("\n");
		
		for(var i=1;i<files.length; i++){	//1行目は無視
			var array = files[i].split(",");
			if(array.length < 3)continue;
			var id = array[0];
			var url = array[1].replace(/^"/,"").replace(/"$/,"");
			var type = array[2].replace(/^"/,"").replace(/"$/,"");
			var content = array[3].replace(/^"/,"").replace(/"$/,"");
			
			if(!content)continue;
			
			var str = "";
			if(url.length > 0){
				str = '<p><a href="'+url+'">'+content+'</a></p>';
			}else{
				str = '<p>'+content+'</p>';
			}
			
			if(type.match(/event/)){
				event_content += str;
			}
			if(type.match(/death/)){
				death_content += str;
			}
			if(type.match(/birth/)){
				birth_content += str;
			}
		}
	}
	
	if($("event_content")){
		if(event_content){
			$("event_content").update(event_content);
		}else{
			$("event_content").update("準備中です");
		}
	}
	
	if($("death_content")){
		if(death_content){
			$("death_content").update(death_content);
		}else{
			$("death_content").update("準備中です");
		}
	}
	
	if($("birth_content")){
		if(birth_content){
			$("birth_content").update(birth_content);
		}else{
			$("birth_content").update("準備中です");
		}
	}
	

}