
//################ 設定 ##################

var sun='1'
var getu='0';
var tue='0';
var wed='0';
var thu='0';
var fri='0';
var sat='0';

//曜日ごとの休日の設定
//休日にする曜日は'1'、そうでないときは0

var eigyo=new Array();
//営業日の設定
//休日に関わらず強制的に営業日にしたい日がある場合は、
//var eigyo=new Array('1/1','2/1','3/1');または
//var eigyo=new Array();の下に
//eigyo[0]='1/1';
//eigyo[1]='2/1';
//eigyo[2]='3/1';
//のように設定(いくつでも設定できます)

var kyujitu=new Array('8/13','8/14','8/15','8/16','12/31','1/2','1/3','1/4');
//休日の設定
//強制的に休日にしたい日がある場合は、
//var kyujitu=new Array('2/1','3/1');または
//var kyujitu=new Array();の下に
//kyujitu[0]='1/1';
//kyujitu[1]='2/1';
//kyujitu[2]='3/1';
//のように設定(いくつでも設定できます)


var color =new Array();
var bcolor =new Array();
color['1']='#CC0066';	//休日の文字色
bcolor['1']='#CC99CC';	//休日の背景色

color['2']='#000000';	//営業日の文字色
bcolor['2']='#FFFFFF';	//営業日の背景色

//#########################################

function Calendar(y,m){

var now = new Date();
var day = now.getDate();
var month =now.getMonth()+1;
var year = now.getYear();

var month_now=month;
var year_now=year;

if(y){
	year=y;
}
if(m){
	month=m;
}

var days=new Array(31,28,31,30,31,30,31,31,30,31,30,31);

if( ((year%4 == 0) && (year%100 != 0)) || (year%400 == 0) ){
    days[1]=29;
}

var last=days[month-1];
var first = wday(year,month,1);
var ho=new Array();
ho=holiday(year,month,first,last);

var nextyear;
var nextmonth;
var beforeyear;
var beforemonth;

if(month==12){
	nextyear=year+1;
	nextmonth=1;
}
else{
	nextmonth=month+1;
	nextyear=year;
}

if(month==1){
	beforeyear=year-1;
	beforemonth=12;
}
else{
	beforemonth=month-1;
	beforeyear=year;
}

var tb="";
tb+="<table width=\"155\" border=\"0\" cellspacing=\"0\" cellpadding=\"3\">\n";
tb+="<tr>\n";
tb+="<td align=\"center\" colspan=\"7\" class=\"moji1\">\n";
tb+="<a href=\"javascript:void(0)\" onclick=\"Calendar("+beforeyear+","+beforemonth+")\" style=\"text-decoration:none\">&lt;&lt;</a>";
tb+="　　";
tb+=year+"年"+month+"月";
tb+="　　";
tb+="<a href=\"javascript:void(0)\" onclick=\"Calendar("+nextyear+","+nextmonth+")\" style=\"text-decoration:none\">&gt;&gt;</a>";
tb+="</td>\n";
tb+="</tr>\n";
tb+="</table>\n";
tb+="<table width=\"155\" border=\"0\" cellspacing=\"0\" cellpadding=\"3\" class=\"tbl\">\n";
tb+="<tr>\n";
tb+="<td align=\"center\" width=\"19\" height=\"19\" class=\"w\" style=\"color:#ff0000\">日</td>\n";
tb+="<td align=\"center\" width=\"19\" height=\"19\" class=\"w\">月</td>\n";
tb+="<td align=\"center\" width=\"19\" height=\"19\" class=\"w\">火</td>\n";
tb+="<td align=\"center\" width=\"19\" height=\"19\" class=\"w\">水</td>\n";
tb+="<td align=\"center\" width=\"19\" height=\"19\" class=\"w\">木</td>\n";
tb+="<td align=\"center\" width=\"19\" height=\"19\" class=\"w\">金</td>\n";
tb+="<td align=\"center\" width=\"19\" height=\"19\" class=\"w\">土</td>\n";
tb+="</tr>\n";
var col=0;

if(first != 0){
	tb+="<tr bgcolor=\"#FFFFFF\">\n";
	for(i=0;i<first;i++){ 
		tb+="<td>　</td>";
		col++;
	}
}


var hoflag;
var kflag;
var s;
var abeigyo=0;
var abkyujitu=0;
var hflag;
for(i=1;i<=last;i++){

	if(col == 0){
		tb+="<tr>\n";
	}
	hoflag=0;
	for(j=0;j<ho.length;j++){
		if(ho[j] == i){
			hoflag=1;
			break;
		}
	}
	kflag=0;
	if(col == 0 && parseInt(sun)){
		kflag=1;
	}
	else if(col == 1 && parseInt(getu)){
		kflag=1;
	}
	else if(col == 2 && parseInt(tue)){
		kflag=1;
	}
	else if(col == 3 && parseInt(wed)){
		kflag=1;
	}
	else if(col == 4 && parseInt(thu)){
		kflag=1;
	}
	else if(col == 5 && parseInt(fri)){
		kflag=1;
	}
	else if(col == 6 && parseInt(sat)){
		kflag=1;
	}
	hflag=0;
	if(kflag){
		hflag=1;
	}
	else{
		if(hoflag){
			hflag=1;
		}
	}
	s=month+"/"+i;
	abeigyo=0;
	abkyujitu=0;
	for(q=0;q<eigyo.length;q++){
		if(s == eigyo[q]){
			abeigyo=1;
			break;
		}
	}
	for(q=0;q<kyujitu.length;q++){
		if(s == kyujitu[q]){
			abkyujitu=1;
			break;
		}
	}
	
	tb+="<td align=\"center\"";
	if(abeigyo || abkyujitu){
		if(abkyujitu){
			tb+=" style=\"background-color:"+bcolor['1']+";color:"+color['1']+"\"";
		}
		else{
			tb+=" style=\"background-color:"+bcolor['2']+";color:"+color['2']+"\"";
		}

	}
	else{
		if(hflag){
			tb+=" style=\"background-color:"+bcolor['1']+";color:"+color['1']+"\"";
		}
	}
	tb+=">"+i+"</td>";
	
	col++;
	if(col >= 7){ 
		if(i < last){
			col=0;
		}
	}
}

var flag=false;
if(col && col != 7){
	flag=true;
	for(i=col;i<7;i++){
		tb+="<td>　</td>";
	}
}

if(flag){
	tb+="</tr>\n";
}

tb+="</table>\n";
document.getElementById("cal").innerHTML = tb;
}

function wday(y,m,d){

if(m < 3){
	m+=12;
	y--;
}
return (y+Math.floor(y/4)-Math.floor(y/100)+Math.floor(y/400)+Math.floor((13*m+8)/5)+d)% 7;
}


function holiday(year,mon,start,lastday){

var kotei_tmp=new Array('1/1','2/11','4/29','5/3','5/4','5/5','11/3','11/23','12/23');
var daini_mon=new Array('1','10');
var daisan_mon=new Array('7','9');
var ho=new Array();
var kotei=new Array();
var t;
var m;
for(i=0;i<kotei_tmp.length;i++){
	t=kotei_tmp[i].split("/");
	m=t[0];
	if(parseInt(m) == mon){
		kotei.push(t[1]);
	}
}

var d;
if(mon == 3){
	d = Math.floor(20.8431+0.242194*(year-1980)-Math.floor((year-1980)/4));
	kotei.push(d);
}
else if(mon == 9){
	d = Math.floor(23.2488+0.242194*(year-1980)-Math.floor((year-1980)/4));
	kotei.push(d);
}

if(!kotei.length && !daini_mon.length && !daisan_mon.length){
	return ho;
}

var i;
var col=0;
if(start != 0){
	for(i=0;i<start;i++){
		col++;
	}
}
var mcount=0;
var kokuflag=0;
var kokucount=0;
var hflag;
var flag;
var dainiflag=0;
var daisanflag=0;
for(j=0;j<daini_mon.length;j++){
	if(mon == daini_mon[j]){
		dainiflag=1;
	}
}
for(j=0;j<daisan_mon.length;j++){
	if(mon == daisan_mon[j]){
		daisanflag=1;
	}
}

for(i=1;i<=lastday;i++){
	hflag=0;
	if(col == 1){
		mcount++;
		if(mcount == 2){
			mflag=0;
			if(dainiflag){
				ho.push(i);
				hflag=1;
			}
		}
		else if(mcount == 3){
			if(daisanflag){
				ho.push(i);
				hflag=1;
			}
		}
	}

	for(j=0;j<kotei.length;j++){
		if(i == kotei[j]){
			if(col == 0){
				flag=1;
			}
			else{
				ho.push(i);
				hflag=1;
			}
		}
	}
	if(col != 0){
		if(flag && !hflag){
			ho.push(i);
			flag=0;
		}
	}
	if(kokuflag){
		if(!hflag){
			kokucount++;
		}
		else{
			if(kokucount == 2){
				ho.push(i-1);
				kokuflag=0;
				kokucount=0;
			}
			else if(kokucount > 2){
				kokuflag=0;
				kokucount=0;
			}
		}
	}
	if(hflag && !kokuflag){
		kokuflag=1;
		kokucount++;
	}
	col++;
	if(col>=7){ 
		if(i<lastday){
			col=0;
		}
	}

}


return(ho);
}