var month_str;
var holidaysJp_bgc   = '#ffcccc';
var holidaysJp_color = '#ff0000';
var holidaysYP_color = '#ff0000';
var workdaysYP_color = '#000000';

function setCalendar(y,m){
	objDate = new Date();
	var thisY = objDate.getFullYear();
	var thisM = objDate.getMonth();
	var thisD = objDate.getDate();
	if(y && m){
		m--;
	}else{
		y = thisY;
		m = thisM;
		d = thisD;
	}
	objDate.setYear(y);
	objDate.setMonth(m);
	objDate.setDate(1);
	var w = objDate.getDay();
	month_str = y + '-' + keepDigit(m+1);
	
	var aNavigator = '<table cellspacing="0" id="month"><tr>\n<td id="prev">';
	aNavigator += makeLink(y,m,false);
	aNavigator += '</td>\n';
	aNavigator += '<td id="crnt">';
	aNavigator += month_str;
	aNavigator += '</td>\n';
	aNavigator += '<td id="next">';
	aNavigator += makeLink(y,m,true);
	aNavigator += '</td>\n</tr></table>\n';
	
	var aTable = makeCalendar(y,m,w);
	
	if (document.getElementById){
		document.getElementById('yp_calendar_table').innerHTML = aNavigator + aTable;
	} else {
		document.all('yp_calendar_table').innerHTML = aNavigator + aTable;
	}
	
	insertHoliday(y,m);
	
	if (thisM == m){
		var date_str = month_str + '-' + keepDigit(thisD);
		if (document.getElementById){
			document.getElementById(date_str).style.fontWeight = 'bold';
		} else {
			document.all(date_str).style.fontWeight = 'bold';
		}
	}
	//debug
	if (document.getElementById){
		if (! document.getElementById('yp_calendar_debug')) return;
		document.getElementById('yp_calendar_debug').innerHTML = 'debug :<br><textarea>' 
			+ aNavigator + '\n' + aTable + '</textarea>';
	} else {
		if (document.all('yp_calendar_debug')) return;
		document.all('yp_calendar_debug').innerHTML = 'debug :<br><textarea>' 
			+ aNavigator + '\n' + aTable + '</textarea>';
	}
}

function makeCalendar(y,m,w){
	var startDay = 1;
	var stopDay = 31;
	var week = ['san','mon','tue','wed','thu','fri','sat'];
	
	switch(m+1){
		case 2:  stopDay = (y % 4 > 0 || (y % 400 > 0 && y % 100 == 0)) ? 28 : 29; break;
		case 4:  stopDay = 30; break;
		case 6:  stopDay = 30; break;
		case 9:  stopDay = 30; break;
		case 11: stopDay = 30; break;
		default: stopDay = 31;
	}
	//alert(w);
	var str = '<table cellspacing="1" id="tama">\n<tr><th class="san">日</th><th class="mon">月</th><th class="tue">火</th>';
	str += '<th class="wed">水</th><th class="thu">木</th><th class="fri">金</th><th class="sat">土</th></tr>\n';
	var i = startDay - w;
	while(i <= stopDay){
		str += '<tr>';
		for(j=0;j<7;j++){
			if(i >= startDay && i <= stopDay){
				str += '<td class="' + week[j] + '" id="' + y + '-' + keepDigit(m+1) +  '-' + keepDigit(i) + '">' + i + '</td>';
			}else{
				str += '<td class="' + week[j] + '" id="">&nbsp;</td>';
			}
			i++;
		}
		str += '</tr>\n';
	}
	str += '</table>';
	return str;
	//alert(str);
}

function insertHoliday(y,m){
	m++;
	if (document.getElementById){
		// 祝日
		if (holidaysJp['y'+y] && holidaysJp['y'+y][m]){
			for (i in holidaysJp['y'+y][m]){
				var date_str = month_str + '-' + keepDigit(i);
				if (document.getElementById(date_str)){
					document.getElementById(date_str).style.backgroundColor = holidaysJp_bgc;
					document.getElementById(date_str).style.color = holidaysJp_color;
					document.getElementById(date_str).title = holidaysJp['y'+y][m][i];
				}
			}
		}
		// 休業日
		if (holidaysYP['y'+y] && holidaysYP['y'+y][m]){
			for (i in holidaysYP['y'+y][m]){
				var date_str = month_str + '-' + keepDigit(holidaysYP['y'+y][m][i]);
				if(document.getElementById(date_str)){
					document.getElementById(date_str).style.color = holidaysYP_color;
					document.getElementById(date_str).title = '休業日';
				}
			}
		}
		// 営業日
		if (workdaysYP['y'+y] && workdaysYP['y'+y][m]){
			for (i in workdaysYP['y'+y][m]){
				var date_str = month_str + '-' + keepDigit(workdaysYP['y'+y][m][i]);
				if(document.getElementById(date_str)){
					document.getElementById(date_str).style.color = workdaysYP_color;
					document.getElementById(date_str).title = document.getElementById(date_str).title + '・営業日';
				}
			}
		}
	}else{
		// 祝日
		if (holidaysJp['y'+y] && holidaysJp['y'+y][m]){
			for (i in holidaysJp['y'+y][m]){
				var date_str = month_str + '-' + keepDigit(i);
				if (document.all(date_str)){
					document.all(date_str).style.color = backgroundColor = holidaysJp_bgc;
					document.all(date_str).style.color = holidaysJp_color;
					document.all(date_str).title = holidaysJp['y'+y][m][i];
				}
			}
		}
		// 休業日
		if (holidaysYP['y'+y] && holidaysYP['y'+y][m]){
			for (i in holidaysYP['y'+y][m]){
				var date_str = month_str + '-' + keepDigit(holidaysYP['y'+y][m][i]);
				if(document.all(date_str)){
					document.all(date_str).style.color = holidaysYP_color;
					document.all(date_str).title = '休業日';
				}
			}
		}
		// 営業日
		if (workdaysYP['y'+y] && workdaysYP['y'+y][m]){
			for (i in workdaysYP['y'+y][m]){
				var date_str = month_str + '-' + keepDigit(workdaysYP['y'+y][m][i]);
				if(document.all(date_str)){
					document.all(date_str).style.color = workdaysYP_color;
					document.all(date_str).title = document.all(date_str).title + '・営業日';
				}
			}
		}
	}
}

function existsData(y,m){
	switch(m){
		case -1: y--; m += 12; break;
		case 12: y++; m -= 12; break;
	}
	if (holidaysJp['y'+y]){
		return true;
	} else {
		return false;
	}
}

function makeLink(y,m,next){
	if (next){
		if (m < 11){
			m++;
		} else {
			y++;
			m = 0;
		}
		if (holidaysJp['y'+y]){
			return '<a href="javascript:setCalendar(' + y + ',' + (m+1) +')" title="来月" target="_self">' + keepDigit(m+1) + '&raquo;</a>';
		} else {
			return '01&raquo;';
		}
	} else {
		if (m > 0){
			m--;
		} else {
			y--;
			m = 11;
		}
		if (holidaysJp['y'+y]){
			return '<a href="javascript:setCalendar(' + y + ',' + (m+1) +')" title="先月" target="_self">&laquo;' + keepDigit(m+1) + '</a>';
		} else {
			return '&laquo;12';
		}
	}
}
/* &raquo; &laquo; */

function keepDigit(num){
	if(num > 99) num %= 100;
	if(num < 10) num = '0' + num;
	return num;
}

onload = function(){
	if (document.getElementById){
		document.getElementById('yp_calendar').style.display = 'block';
	} else {
		document.all('yp_calendar').style.display = 'block';
	}
	setCalendar();
}



var holidaysJp = new Object();
var holidaysYP = new Object();
var workdaysYP = new Object();

// 2007 ------------------------------------------------------------------------------
// 祝日
holidaysJp['y2007'] = { '1' : { '1':'元日',        '8':'成人の日'},
                        '2' : {'11':'建国記念日', '12':'振替休日'},
                        '3' : {'21':'春分の日'},
                        '4' : {'29':'昭和の日',   '30':'振替休日'},
                        '5' : { '3':'憲法記念日',  '4':'みどりの日', '5':'こどもの日'},
                        '7' : {'16':'海の日'},
                        '9' : {'17':'敬老の日',   '23':'秋分の日',  '24':'振替休日'},
                       '10' : { '8':'体育の日'},
                       '11' : { '3':'文化の日',   '23':'勤労感謝の日'},
                       '12' : {'23':'天皇誕生日', '24':'振替休日'}};

// 休業日
holidaysYP['y2007'] = { '1' : [2,3,4],
                        '2' : [3,10],
                        '3' : [10],
                        '4' : [14],
                        '5' : [19],
                        '6' : [8,9,30],
                        '7' : [7],
                        '8' : [13,14,15],
                        '9' : [1],
                       '10' : [13],
                       '12' : [8,29,31]};

// 営業日
workdaysYP['y2007'] = {'12' : [24]};

// 2008 ------------------------------------------------------------------------------
// 祝日
holidaysJp['y2008'] = { '1' : { '1':'元日',       '14':'成人の日'},
                        '2' : {'11':'建国記念日'},
                        '3' : {'20':'春分の日'},
                        '4' : {'29':'昭和の日'},
                        '5' : { '3':'憲法記念日',  '4':'みどりの日', '5':'こどもの日', '6':'振替休日'},
                        '7' : {'21':'海の日'},
                        '9' : {'15':'敬老の日',   '23':'秋分の日'},
                       '10' : {'13':'体育の日'},
                       '11' : { '3':'文化の日',   '23':'勤労感謝の日', '24':'振替休日'},
                       '12' : {'23':'天皇誕生日'}};

// 休業日
holidaysYP['y2008'] = { '1' : [2,3,4],
                        '2' : [2],
                        '3' : [8],
                        '4' : [12],
                        '5' : [17],
                        '6' : [6,7],
                        '7' : [5],
                        '8' : [14,15,16],
                        '9' : [6],
                       '10' : [4],
                       '11' : [15],
                       '12' : [13,29,30,31]};

// 営業日
workdaysYP['y2008'] = {'12' : [23]};

// 2009 ------------------------------------------------------------------------------
// 祝日
holidaysJp['y2009'] = { '1' : { '1':'元日',       '12':'成人の日'},
                        '2' : {'11':'建国記念日'},
                        '3' : {'20':'春分の日'},
                        '4' : {'29':'昭和の日'},
                        '5' : { '3':'憲法記念日',  '4':'みどりの日', '5':'こどもの日', '6':'振替休日'},
                        '7' : {'20':'海の日'},
                        '9' : {'21':'敬老の日',   '23':'秋分の日'},
                       '10' : {'12':'体育の日'},
                       '11' : { '3':'文化の日',   '23':'勤労感謝の日'},
                       '12' : {'23':'天皇誕生日'}};

// 休業日
holidaysYP['y2009'] = { '1' : [2,3],
                        '3' : [7],
                        '4' : [4],
                        '6' : [5,6,13],
                        '7' : [4],
                        '8' : [1,14,15],
                        '9' : [5],
                       '10' : [3,31],
                       '12' : [12,29,30,31]};

// 営業日
workdaysYP['y2009'] = {'12' : [23]};

// 2010 ------------------------------------------------------------------------------
// 祝日
holidaysJp['y2010'] = { '1' : { '1':'元日',       '11':'成人の日'},
                        '2' : {'11':'建国記念日'},
                        '3' : {'21':'春分の日',   '22':'振替休日'},
                        '4' : {'29':'昭和の日'},
                        '5' : { '3':'憲法記念日',  '4':'みどりの日', '5':'こどもの日'},
                        '7' : {'19':'海の日'},
                        '9' : {'20':'敬老の日',   '23':'秋分の日'},
                       '10' : {'11':'体育の日'},
                       '11' : { '3':'文化の日',   '23':'勤労感謝の日'},
                       '12' : {'23':'天皇誕生日'}};

// 休業日
holidaysYP['y2010'] = { '1' : [2],
                        '2' : [6],
                        '3' : [13],
                        '4' : [10],
                        '6' : [5,11,12],
                        '7' : [10,31],
                        '8' : [7,13,14],
                        '9' : [11],
                       '10' : [9],
                       '11' : [13],
                       '12' : [11,29,30,31]};

// 営業日
workdaysYP['y2010'] = {'12' : [23]};
// 2011 ------------------------------------------------------------------------------
// 祝日
holidaysJp['y2011'] = { '1' : { '1':'元日',       '10':'成人の日'},
                        '2' : {'11':'建国記念日'},
                        '3' : {'21':'春分の日'},
                        '4' : {'29':'昭和の日'},
                        '5' : { '3':'憲法記念日',  '4':'みどりの日', '5':'こどもの日'},
                        '7' : {'18':'海の日'},
                        '9' : {'19':'敬老の日',   '23':'秋分の日'},
                       '10' : {'10':'体育の日'},
                       '11' : { '3':'文化の日',   '23':'勤労感謝の日'},
                       '12' : {'23':'天皇誕生日'}};

// 休業日
holidaysYP['y2011'] = { '1' : [3,4],
                        '2' : [5],
                        '3' : [12],
                        '4' : [9],
                        '6' : [11],
                        '7' : [9,30],
                        '8' : [6,13,15],
                        '9' : [10],
                       '10' : [8],
                       '11' : [12],
                       '12' : [10,29,30,31]};

// 営業日
workdaysYP['y2011'] = {'12' : [23]};
// 2012 ------------------------------------------------------------------------------
// 祝日
holidaysJp['y2012'] = { '1' : { '1':'元日',       '2':'振替休日',       '9':'成人の日'},
                        '2' : {'11':'建国記念日'},
                        '3' : {'20':'春分の日'},
                        '4' : {'29':'昭和の日',  '30':'振替休日'},
                        '5' : { '3':'憲法記念日',  '4':'みどりの日', '5':'こどもの日'},
                        '7' : {'16':'海の日'},
                        '9' : {'17':'敬老の日',   '22':'秋分の日'},
                       '10' : { '8':'体育の日'},
                       '11' : { '3':'文化の日',   '23':'勤労感謝の日'},
                       '12' : {'23':'天皇誕生日',  '24':'振替休日'}};

// 休業日
holidaysYP['y2012'] = { '1' : [3,4],
                        '2' : [4],
                        '3' : [10],
                        '4' : [14],
                        '5' : [12],
                        '6' : [9,30],
                        '7' : [14],
                        '8' : [13,14,15],
                        '9' : [8],
                       '10' : [13],
                       '11' : [10],
                       '12' : [8,29,31]};

// 営業日
workdaysYP['y2012'] = {'12' : [24]};


