#!/usr/local/bin/perl

###############################################
#   sche35.cgi
#      V1.0 (2005.5.21)
#                     Copyright(C) CGI-design
###############################################

$script = 'sche35.cgi';
$base = './schedata';				#データ格納ディレクトリ
$nofile = "$base/no.txt";			#書込み番号
$opfile = "$base/option.txt";		#オプション
$lockfile = "$base/lock";
$catmax = 24;						#分類数*2

@mdays = (31,28,31,30,31,30,31,31,30,31,30,31);
@week = ('日','月','火','水','木','金','土');

open (IN,"$opfile") || &error("OPEN ERROR");		$opdata = <IN>;		close IN;
if (!$opdata) {
	$pass = &crypt('cgi');
	chmod(0666,$opfile);	open (OUT,">$opfile") || &error("OPEN ERROR");
	print OUT "$pass<>スケジュール<><><><>$base/home.gif<>$base/title.gif<>$base/back.gif<>$base/next.gif<><>$base/style.css<>#ECF0EC<>#000000<>#800000<>#000000<>#869D7D<>#869D7D<>#CAD8CB<>#c00000<>#FBF4F4<>#4169E1<>#F8F8FF<>#000000<>#ffffff<>#ffffdd<>6<>会議<>#A0522D<>出張<>#0000ff";
	close OUT;
	chmod(0666,$nofile);
}

##### メイン処理 #####
if ($ENV{'REQUEST_METHOD'} eq "POST") {read(STDIN,$in,$ENV{'CONTENT_LENGTH'});} else {$in = $ENV{'QUERY_STRING'};}
foreach (split(/&/,$in)) {
	($n,$val) = split(/=/);
	$val =~ tr/+/ /;
	$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	$val =~ s/&/&amp;/g;	$val =~ s/</&lt;/g;		$val =~ s/>/&gt;/g;		$val =~ s/"/&quot;/g;
	$in{$n} = $val;
}
$dm = $in{'dm'};
$cm = $in{'cm'};
$mode = $in{'mode'};
$logyear = $in{'year'};
$logmon = $in{'mon'};

open (IN, "$opfile") || &error("OPEN ERROR");
($pass,$title,$com_adm,$home,$home1,$home_icon,$title_icon,$back_icon,$next_icon,$bg_img,$style_file,$bg_color,$text_color,$title_color,$com_color,$frame_color,$monbg_color,$weekbg_color,$holi_color,$holibg_color,$sat_color,$satbg_color,$day_color,$daybg_color,$today_color,$catcols,@cat) = split(/<>/,<IN>);
close IN;
@wcolor = ($holi_color,$day_color,$day_color,$day_color,$day_color,$day_color,$sat_color);

($sec,$min,$hour,$nowday,$nowmon,$nowyear) = localtime;
$nowyear += 1900;
$nowmon++;
if (!$logyear) {$logyear = $nowyear; $logmon = $nowmon;}
$logfile = "$base/$logyear$logmon.txt";

if (!$dm) {
	if ($mode eq 'search') {&search;}
	elsif ($mode eq 'admin') {&admin;}
	else {&main;}
} else {
	if ($mode eq 'comdsp') {&comdsp1;}
	elsif ($mode eq 'admin') {&admin1;}
	else {&main1;}
}
print "</body></html>\n";
exit;

###
sub header {
	print "Content-type: text/html\n\n";
	print "<html><head><META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=Shift_JIS\">\n";
	print "<title>$title</title>\n";
	if (!$dm) {print "<link rel=\"stylesheet\" type=\"text/css\" href=\"$style_file\">\n";}
	print "</head>\n";
	$head = 1;
}

###
sub main {
	&header;
	print "<body background=\"$bg_img\" bgcolor=\"$bg_color\" text=\"$text_color\"><center>\n";
	print "<table width=98%><tr><td width=100 valign=top>";
	if ($home) {if ($home_icon) {print "<a href=\"$home\"><img src=\"$home_icon\" border=0></a>\n";} else {print "<a href=\"$home\">[HOME]</a>\n";}}
	print "</td><td align=center>";
	if ($title_icon) {print "<img src=\"$title_icon\">";} else {print "<font color=\"$title_color\" size=\"+1\"><b>$title</b></font>";}
	print "</td><td width=100></td></tr></table>\n";
	if ($com_adm) {print "<table><tr><td><font color=\"$com_color\">$com_adm</font></td></tr></table>\n";}
	print "<table cellspacing=1 cellpadding=0>\n";
	$k = 0;
	for ($i=0; $i<$catmax; $i+=2) {
		$catcolor = $cat[$i+1];
		if (!$catcolor) {next;}
		if (!$k) {print "<tr>";}
		print "<td><font color=\"$catcolor\">■$cat[$i]</font></td><td width=20></td>\n";
		$k++;
		if ($k == $catcols) {print "</tr>"; $k = 0;}
	}
	if ($k) {print "</tr>";}
	print "</table>\n";

	if (!$cm) {$scm = 1;} else {$scm = 0;}
	print "<table><tr><td><form action=\"$script\" method=\"POST\">\n";
	print "<input type=hidden name=cm value=\"$scm\">\n";
	print "<input type=hidden name=year value=\"$logyear\">\n";
	print "<input type=hidden name=mon value=\"$logmon\">\n";
	print "<input type=submit value=\"カレンダー切替\"></td></form>\n";
	print "<td><form action=\"$script\" method=\"POST\">\n";
	print "<input type=hidden name=cm value=\"$cm\">\n";
	print "<input type=hidden name=mode value=\"search\">\n";
	print "<input type=hidden name=year value=\"$logyear\">\n";
	print "<input type=submit value=\"　　 検索 　　\"></td></form></tr></table>\n";

	print "<table width=90% cellspacing=8><tr><td width=120>\n";
	$year = $logyear - 1;
	$mon = 12;
	print "<a href=\"$script?cm=$cm&year=$year&mon=$mon\"><img src=\"$back_icon\" border=0></a>　<font size=\"+1\"><b>$logyear年</b></font>";
	$year = $logyear + 1;
	$mon = 1;
	print "　<a href=\"$script?cm=$cm&year=$year&mon=$mon\"><img src=\"$next_icon\" border=0></a></td>\n";

	print "<td align=center><table bgcolor=\"$monbg_color\" cellspacing=1 cellpadding=2><tr align=center>\n";
	for (1 .. 12) {
		if ($_ eq $logmon) {print "<td width=40 bgcolor=\"$today_color\"><b>$_月</b></td>\n";}
		else {print "<td width=40><a href=\"$script?cm=$cm&year=$logyear&mon=$_\"><font color=\"#ffffff\">$_月</font></a></td>\n";}
	}
	print "</tr></table></td><td width=120></td></tr></table>\n";
	if (!$cm) {&dsp_cal;} else {&dsp_calt;}

	print "<table width=88%><tr><td align=right><a href=\"$script?mode=admin\">[管理]</a></td></tr></table>\n";
	# 次の行は著作権表示ですので削除しないで下さい。#
	print "<a href=\"http://merlion.cool.ne.jp/cgi/\" target=\"_blank\">CGI-design</a></center>\n";
}

###
sub dsp_cal {
	%data = ();
	if (-e $logfile) {
		open (IN,"$logfile") || &error("OPEN ERROR");
		while (<IN>) {
			($no,$day,$shour,$smin,$ehour,$emin,$sub,$com,$color) = split(/<>/);
			$data = "<hr width=99% size=1 style=\"border:1px dotted gray;\"><font color=\"$color\">\n";
			&time_dsp;
			if ($time) {$data .= "$time<br>";}
			if ($sub) {$data .= "<b>【$sub】</b><br>";}
			$com =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1<a href=\"$2\" target=\"_blank\">$2<\/a>/g;
			$data .= $com;
			if ($mode) {$data .= "<div align=right><input type=submit name=$no value=\"修正\" style=\"font-size:10px\"></div>\n";}
			$data{$day} .= "$data</font>";
		}
		close IN;
	}
	$mdays = $mdays[$logmon - 1];
	if ($logmon == 2 && $logyear % 4 == 0) {$mdays = 29;}
	&holi_set;

	print "<table width=90% bordercolor=\"$frame_color\" border=1 cellspacing=0 cellpadding=4 style=\"border-collapse: collapse\">\n";
	print "<tr bgcolor=\"$weekbg_color\" align=center>\n";
	for (0 .. 6) {print "<td width=14%><font color=\"$wcolor[$_]\"><b>$week[$_]</b></font></td>\n";}
	print "</tr>\n";

	&get_date($logyear,$logmon,1);
	$w=$n=0;
	$day=1;
	for (0 .. 41) {
		if (!$w) {print "<tr bgcolor=\"#ffffff\">";}
		if ($wday <= $_ && $day <= $mdays) {
			if ($w == 1) {$n++;}
			$wcolor = $wcolor[$w];
			if (!$w) {$bc = $holibg_color;} elsif ($w == 6) {$bc = $satbg_color;} else {$bc = $daybg_color;}
			$holiday = '';
			if (2002 < $logyear) {
				&get_holiday($logmon,$day,$w);
				if ($holiday) {$wcolor = $holi_color; $bc = $holibg_color;}
			}
			if ($logyear eq $nowyear && $logmon eq $nowmon && $day eq $nowday) {$bc = $today_color;}
			if ($day < 10) {$dspday = "&nbsp;$day";} else {$dspday = $day;}
			print "<td bgcolor=\"$bc\" height=90 valign=top><font color=\"$wcolor\"><font size=\"+1\"><b>$dspday</b></font> $holiday</font><br>$data{$day}</td>\n";
			$day++;
		} else {print "<td></td>\n";}
		$w++;
		if ($w == 7) {
			print "</tr>\n";
			if ($mdays < $day) {last;}
			$w = 0;
		}
	}
	print "</table>\n";
}

###
sub dsp_calt {
	%data = ();
	if (-e $logfile) {
		open (IN,"$logfile") || &error("OPEN ERROR");
		while (<IN>) {
			($no,$day,$shour,$smin,$ehour,$emin,$sub,$com,$color) = split(/<>/);
			if ($data{$day}) {$data = "<hr width=99% size=1 style=\"border:1px dotted gray;\">\n";} else {$data = '';}
			$data .= "<table width=100% cellspacing=0 cellpadding=0 style=\"color:$color;\"><tr><td width=7></td>\n";
			&time_dsp;
			if ($time) {$data .= "<td width=100 valign=top>$time</td>";}
			$data .= "<td>";
			if ($sub) {$data .= "<b>【$sub】　</b>";}
			$com =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1<a href=\"$2\" target=\"_blank\">$2<\/a>/g;
			$data .= "$com</td><td align=right>";
			if ($mode) {$data .= "<input type=submit name=$no value=\"修正\" style=\"font-size:10px\">";} else {$data .= "&nbsp;&nbsp;";}
			$data{$day} .= "$data</td></tr></table>\n";
		}
		close IN;
	}
	$mdays = $mdays[$logmon - 1];
	if ($logmon == 2 && $logyear % 4 == 0) {$mdays = 29;}
	&holi_set;

	print "<table width=90% bgcolor=\"$frame_color\" cellspacing=1 cellpadding=2><col span=2 align=center>\n";
	$w = &get_date($logyear,$logmon,1);
	$n = 0;
	for $day (1 .. $mdays) {
		if ($w == 1) {$n++;}
		$wcolor = $wcolor[$w];
		if (!$w) {$bc = $holibg_color;} elsif ($w == 6) {$bc = $satbg_color;} else {$bc = $daybg_color;}
		if (2002 < $logyear) {
			&get_holiday($logmon,$day,$w);
			if ($holiday) {$wcolor = $holi_color; $bc = $holibg_color;}
		}
		if ($logyear eq $nowyear && $logmon eq $nowmon && $day eq $nowday) {$bcday = " bgcolor=\"$today_color\"";} else {$bcday = '';}
		print "<tr bgcolor=\"$bc\"><td width=40><font color=\"$wcolor\"><b>$day</b></font></td><td width=20><font color=\"$wcolor\">$week[$w]</font></td><td$bcday>\n";
		if ($holiday) {print "<font color=\"$wcolor\">$holiday</font>\n";}
		print "$data{$day}</td></tr>\n";
		$w++;
		if ($w == 7) {$w = 0;}
	}
	print "</table>\n";
}

###
sub time_dsp {
	$time = '';
	if ($shour ne '') {$time = sprintf("$shour：%02d",$smin);}
	if ($shour ne '' || $ehour ne '') {$time .= "〜";}
	if ($ehour ne '') {$time .= sprintf("$ehour：%02d",$emin);}
}

###
sub holi_set {
	$def = 0.242194*($logyear-1980)-int(($logyear-1980)/4);
	$spr = int(20.8431+$def);
	$aut = int(23.2488+$def);
	%holi_d = ('0101','元日','0211','建国記念の日',"03$spr",'春分の日','0429','みどりの日','0503','憲法記念日','0505','こどもの日',"09$aut",'秋分の日','1103','文化の日','1123','勤労感謝の日','1223','天皇誕生日');
	%holi_w = ('012','成人の日','073','海の日','093','敬老の日','102','体育の日');
}

###
sub get_holiday {
	$sm = sprintf("%02d%02d",$_[0],$_[1]);
	$holiday = $holi_d{$sm};
	if ($sm eq '0504' && 1<$_[2]) {$holiday = '国民の休日';}
	if ($holiday && !$_[2]) {$hflag = 1;}
	if (!$holiday && $_[2] == 1) {
		$smw = sprintf("%02d$n",$_[0]);
		$holiday = $holi_w{$smw};
		if ($hflag) {$holiday = '振替休日'; $hflag = 0;}
	}
	if ($logyear eq '2009' && $sm eq '0922') {$holiday = '国民の休日';}
}

###
sub get_date {
	$y = $_[0];
	$m = $_[1];
	if( $m < 3 ){$y--; $m+=12;}
	$wday = ($y+int($y/4)-int($y/100)+int($y/400)+int((13*$m+8)/5)+$_[2])%7;
}

###
sub search {
	&header;
	print "<body background=\"$bg_img\" bgcolor=\"$bg_color\" text=\"$text_color\"><center>\n";
	print "<table width=97%><tr><td><a href=\"$script?cm=$cm\">[Return]</a></td></tr></table>\n";
	print "キーワードを入力し「検索」をクリックして下さい。キーワードを複数指定する場合はスペースで区切って下さい。\n";
	print "<form action=\"$script\" method=POST>\n";
	print "<input type=hidden name=cm value=\"$cm\">\n";
	print "<input type=hidden name=mode value=\"search\">\n";
	print "キーワード <input type=text name=word size=50 value=\"$in{'word'}\">\n";
	print "　<select name=year>";
	for (2005 .. $nowyear+1) {
		if ($_ eq $logyear) {$sel = ' selected';} else {$sel = '';}
		print "<option value=\"$_\"$sel>$_</option>\n";
	}
	print "</select>年　　<input type=submit value=\" 検索 \"></form>\n";
	if (!$in{'word'}) {print "</center>\n"; return;}

	$in{'word'} =~ s/　/ /g;
	@word = split(/\s+/,$in{'word'});
	$m = 0;
	for $mon (1 .. 12) {
		$logfile = "$base/$logyear$mon.txt";
		if (!-e $logfile) {next;}
		@data = ();
		open (IN,"$logfile") || &error("OPEN ERROR");
		while (<IN>) {
			$find = 0;
			foreach $word (@word) {if (0 <= index($_,$word)) {$find = 1;} else {$find = 0; last;}}
			if ($find) {push(@data,$_); $m++;}
		}
		close IN;

		if (!$data[0]) {next;}
		print "<table width=87%><tr><td><b>$mon月</b></td></tr></table>\n";
		print "<table width=90% bgcolor=\"$frame_color\" cellspacing=1 cellpadding=2>\n";
		print "<tr bgcolor=\"$weekbg_color\" align=center><td width=70>日付</td><td width=90>時間</td><td width=120>題名</td><td>内　　容</td></tr>\n";
		foreach (@data) {
			($no,$day,$shour,$smin,$ehour,$emin,$sub,$com,$color) = split(/<>/);
			&time_dsp;
			print "<tr bgcolor=\"#ffffff\"><td>&nbsp;$logyear.$mon.$day</td><td>&nbsp;$time</td><td>$sub</td><td><font color=\"$color\">$com</font></td></tr>\n";
		}
		print "</table><br>\n";
	}
	print "検索結果： 計 <b>$m</b>件</center>\n";
}

###
sub main1 {
	&header;
	print "<body>\n";
	if ($home1) {print "<a href=\"$home1\">[HOME]</a>\n";}
	print "<center><font color=\"$title_color\">$title</font></center>\n";
	&cal_dsp1;
	print "<a href=\"$script?dm=1&mode=admin\">[管理]</a>\n";
	# 次の行は著作権表示ですので削除しないで下さい。#
	print "<center><a href=\"http://merlion.cool.ne.jp/cgi/i/\">CGI-design</a></center>\n";
}

###
sub cal_dsp1 {
	if (-e $logfile) {
		open (IN,"$logfile") || &error("OPEN ERROR");
		while (<IN>) {
			($no,$day,$shour,$smin,$ehour,$emin,$sub,$com,$color) = split(/<>/);
			if (!$sub) {$sub = $com;}
			$sub =~ s/<br>//g;
			if (22 < length($sub)) {
				$sub = substr($sub,0,20);
				$sub .= '..';
			}
			if ($mode eq 'admin') {$data{$day} .= "<br>　<a href=\"$script?dm=1&mode=admin&pass=$inpass&act=edtin&year=$logyear&mon=$logmon&no=$no\"><font color=\"$color\">$sub</font></a>\n";}
			else {$data{$day} .= "<br>&nbsp;<a href=\"$script?dm=1&mode=comdsp&year=$logyear&mon=$logmon&no=$no\"><font color=\"$color\">$sub</font></a>\n";}
		}
		close IN;
	}
	$mdays = $mdays[$logmon - 1];
	if ($logmon == 2 && $logyear % 4 == 0) {$mdays = 29;}

	print "<center>";
	$mon = $logmon - 1;
	if ($mon < 1) {$mon = 12; $year = $logyear - 1;} else {$year = $logyear;}
	print "<a href=\"$script?dm=1&mode=$mode&pass=$inpass&year=$year&mon=$mon&day=1\"><b>←</b></a> ";
	print "<a href=\"$script?dm=1&mode=$mode&pass=$inpass&year=$logyear&mon=$logmon&day=1\">$logyear年$logmon月</a>";
	$mon = $logmon + 1;
	if (12 < $mon) {$mon = 1; $year = $logyear + 1;} else {$year = $logyear;}
	print " <a href=\"$script?dm=1&mode=$mode&pass=$inpass&year=$year&mon=$mon&day=1\"><b>→</b></a></center><hr size=1>\n";

	&holi_set;
	$w = &get_date($logyear,$logmon,1);
	$n = 0;
	for $day (1 .. $mdays) {
		if ($w == 1) {$n++;}
		$wcolor = $wcolor[$w];
		if (2002 < $logyear) {
			&get_holiday($logmon,$day,$w);
			if ($holiday) {$wcolor = $holi_color;}
		}
		if ($in{'day'} || $logyear ne $nowyear || $logmon ne $nowmon || $nowday <= $day) {
			print "<font color=\"$wcolor\"><b>$logmon/$day</b>($week[$w]) $holiday</font> $data{$day}<br>\n";
		}
		$w++;
		if ($w == 7) {$w = 0;}
	}
	print "<hr size=1>\n";
	for ($i=0; $i<$catmax; $i+=2) {
		$catcolor = $cat[$i+1];
		if (!$catcolor) {next;}
		print "<font color=\"$catcolor\">■$cat[$i]</font><br>\n";
	}
	print "<hr size=1>\n";
}

###
sub comdsp1 {
	&header;
	print "<body>\n";
	print "<a href=\"$script?dm=1&year=$logyear&mon=$logmon\">[戻る]</a><br>\n";
	&sel_data;
	&get_date($logyear,$logmon,$day);
	$wcolor = $wcolor[$wday];
	$week = $week[$wday];
	if (2002 < $logyear) {
		&holi_set;
		$w = &get_date($logyear,$logmon,1);
		$n = 0;
		for (1 .. $day) {
			if ($w == 1) {$n++;}
			&get_holiday($logmon,$_,$w);
			$w++;
			if ($w == 7) {$w = 0;}
		}
		if ($holiday) {$wcolor = $holi_color;}
	}
	print "<font color=\"$wcolor\"><b>$logmon/$day</b>($week) $holiday</font><br><font color=\"$color\">\n";
	&time_dsp;
	if ($time) {print "$time<br>\n";}
	if ($sub) {print "<b>【$sub】</b><br>\n";}
	$com =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1<a href=\"$2\">$2<\/a>/g;
	print "$com</font>\n";
}

###
sub admin1 {
	&header;
	print "<body>\n";
	$inpass = $in{'pass'};
	if ($inpass eq '') {
		print "<a href=\"$script?dm=1\">[戻る]</a><br>\n";
		print "<form action=\"$script\">\n";
		print "<input type=hidden name=dm value=\"1\">\n";
		print "<input type=hidden name=mode value=\"admin\">\n";
		print "パスワード入力<br><input type=password name=pass size=10 maxlength=8><br>\n";
		print "<input type=submit value=\"認証\"></form>\n";
		print "</body></html>\n";
		exit;
	}
	$mat = &decrypt($inpass,$pass);
	if (!$mat) {&error("パスワードが違います");}

	$act = $in{'act'};
	if ($act) {&in_form1;} else {&edtdsp1;}
}

###
sub edtdsp1 {
	if ($in{'newwrt'}) {&newwrt;}
	elsif ($in{'edtwrt'}) {&edtwrt;}
	elsif ($in{'delwrt'}) {&delwrt;}

	print "<a href=\"$script?dm=1\">[戻る]</a>\n";
	print "<center><a href=\"$script?dm=1&mode=admin&pass=$inpass&act=regin&year=$logyear&mon=$logmon\">新規登録</a></center>\n";
	&cal_dsp1;
}

###
sub in_form1 {
	print "<form action=\"$script\">\n";
	print "<a href=\"$script?dm=1&mode=admin&pass=$inpass&year=$logyear&mon=$logmon\">[戻る]</a><br>\n";
	print "<input type=hidden name=dm value=\"1\">\n";
	print "<input type=hidden name=mode value=\"admin\">\n";
	print "<input type=hidden name=pass value=\"$inpass\">\n";
	print "<input type=hidden name=year value=\"$logyear\">\n";
	print "<input type=hidden name=mon value=\"$logmon\">\n";
	if ($act eq 'regin') {
		$day = $nowday;
		$shour=$smin=$ehour=$emin=$sub=$com=$color='';
		print "<b>新規登録</b><br>\n";
	} else {
		print "<input type=hidden name=no value=\"$in{'no'}\">\n";
		&sel_data;
		$com =~ s/<br>/\r/g;
		print "<b>修正/削除</b><br>\n";
	}
	print "$logyear年$logmon月<select name=day>\n";
	for (1 .. 31) {
		if ($_ eq $day) {$sel = ' selected';} else {$sel = '';}
		print "<option value=\"$_\"$sel>$_</option>\n";
	}
	print "</select>日<br><select name=shour><option value=\"\"></option>\n";
	for (0 .. 23) {
		if ($_ eq $shour) {$sel = ' selected';} else {$sel = '';}
		print "<option value=\"$_\"$sel>$_</option>\n";
	}
	print "</select>時<select name=smin><option value=\"\"></option>\n";
	for ($m=0; $m<60; $m+=5) {
		if ($m eq $smin) {$sel = ' selected';} else {$sel = '';}
		print "<option value=\"$m\"$sel>$m</option>\n";
	}
	print "</select>分<br>〜<select name=ehour><option value=\"\"></option>\n";
	for (0 .. 23) {
		if ($_ eq $ehour) {$sel = ' selected';} else {$sel = '';}
		print "<option value=\"$_\"$sel>$_</option>\n";
	}
	print "</select>時<select name=emin><option value=\"\"></option>\n";
	for ($m=0; $m<60; $m+=5) {
		if ($m eq $emin) {$sel = ' selected';} else {$sel = '';}
		print "<option value=\"$m\"$sel>$m</option>\n";
	}
	print "</select>分<br>\n";
	print "題名 <input type=text name=sub size=12 value=\"$sub\"><br>\n";
	print "<textarea cols=16 rows=6 name=com>$com</textarea><br>\n";
	for ($i=0; $i<$catmax; $i+=2) {
		$catcolor = $cat[$i+1];
		if (!$catcolor) {next;}
		if ($color eq $catcolor) {$chk = ' checked';} else {$chk = '';}
		print "<input type=radio name=color value=\"$catcolor\"$chk><font color=\"$catcolor\">$cat[$i]</font><br>\n";
	}
	if ($act eq 'regin') {print "<input type=submit name=newwrt value=\"新規登録\">";}
	else {print "<input type=submit name=edtwrt value=\"修正\">　<input type=submit name=delwrt value=\"削除\">";}
	print "</form>\n";
}

###
sub admin {
	&header;
	print "<body><center>\n";
	$inpass = $in{'pass'};
	if ($inpass eq '') {
		print "<table width=97%><tr><td><a href=\"$script\">[Return]</a></td></tr></table>\n";
		print "<br><br><br><br><h4>パスワードを入力して下さい</h4>\n";
		print "<form action=\"$script\" method=POST>\n";
		print "<input type=hidden name=mode value=\"admin\">\n";
		print "<input type=password name=pass size=10 maxlength=8>\n";
		print "<input type=submit value=\"認証\"></form>\n";
		print "</center></body></html>\n";
		exit;
	}
	$mat = &decrypt($inpass,$pass);
	if (!$mat) {&error("パスワードが違います");}

	print "<table width=90% bgcolor=\"#8c4600\"><tr><td>　<a href=\"$script\"><font color=\"#ffffff\"><b>Return</b></font></a></td>\n";
	print "<td align=right><form action=\"$script\" method=POST>\n";
	print "<input type=hidden name=mode value=\"admin\">\n";
	print "<input type=hidden name=pass value=\"$inpass\">\n";
	print "<input type=submit value=\"　編集　\">　<input type=submit name=set value=\"基本設定\"></td></form></tr></table><br>\n";

	$act = $in{'act'};
	$wrt = $in{'wrt'};
	if ($in{'set'}) {&setup;} else {&regin;}
	print "<br></center>\n";
}

###
sub regin {
	if ($in{'newwrt'}) {&newwrt;}
	elsif ($in{'edtwrt'}) {&edtwrt;}
	elsif ($in{'delwrt'}) {&delwrt;}

	&in_form;
	print "<hr width=90%>修正・削除する場合は「修正」をクリックして下さい。<br>\n";
	if (!$cm) {$scm = 1;} else {$scm = 0;}
	print "<table><tr><td><form action=\"$script\" method=\"POST\">\n";
	print "<input type=hidden name=mode value=\"admin\">\n";
	print "<input type=hidden name=pass value=\"$inpass\">\n";
	print "<input type=hidden name=cm value=\"$scm\">\n";
	print "<input type=hidden name=year value=\"$logyear\">\n";
	print "<input type=hidden name=mon value=\"$logmon\">\n";
	print "<input type=submit value=\"カレンダー切替\"></td></form></tr></table>\n";

	print "<table width=90% cellspacing=8><tr>\n";
	$year = $logyear - 1;
	$mon = 12;
	print "<td align=right><form action=\"$script\" method=POST>\n";
	print "<input type=hidden name=mode value=\"admin\">\n";
	print "<input type=hidden name=pass value=\"$inpass\">\n";
	print "<input type=hidden name=cm value=\"$cm\">\n";
	print "<input type=hidden name=year value=\"$year\">\n";
	print "<input type=hidden name=mon value=\"$mon\">\n";
	print "<input type=image src=\"$back_icon\"></td></form>\n";
	print "<td width=60 align=center><font size=\"+1\"><b>$logyear年</b></font></td>\n";
	$year = $logyear + 1;
	$mon = 1;
	print "<td><form action=\"$script\" method=POST>\n";
	print "<input type=hidden name=mode value=\"admin\">\n";
	print "<input type=hidden name=pass value=\"$inpass\">\n";
	print "<input type=hidden name=cm value=\"$cm\">\n";
	print "<input type=hidden name=year value=\"$year\">\n";
	print "<input type=hidden name=mon value=\"$mon\">\n";
	print "<input type=image src=\"$next_icon\"></td></form>\n";

	print "<td align=center><table bgcolor=\"$monbg_color\" cellspacing=1 cellpadding=0><tr align=center>\n";
	for (1 .. 12) {
		if ($_ eq $logmon) {print "<td width=40 bgcolor=\"$today_color\"><b>$_月</b></td>\n";}
		else {
			print "<td width=40><form action=\"$script\" method=POST>\n";
			print "<input type=hidden name=mode value=\"admin\">\n";
			print "<input type=hidden name=pass value=\"$inpass\">\n";
			print "<input type=hidden name=cm value=\"$cm\">\n";
			print "<input type=hidden name=year value=\"$logyear\">\n";
			print "<input type=hidden name=mon value=\"$_\">\n";
			print "<input type=submit value=\"$_月\"></td></form>\n";
		}
	}
	print "</tr></table></td><td width=100></td></tr></table>\n";

	print "<form action=\"$script\" method=POST>\n";
	print "<input type=hidden name=mode value=\"admin\">\n";
	print "<input type=hidden name=pass value=\"$inpass\">\n";
	print "<input type=hidden name=cm value=\"$cm\">\n";
	print "<input type=hidden name=act value=\"edt\">\n";
	print "<input type=hidden name=year value=\"$logyear\">\n";
	print "<input type=hidden name=mon value=\"$logmon\">\n";
	if (!$cm) {&dsp_cal;} else {&dsp_calt;}
	print "</form>\n";
}

###
sub sel_data {
	open (IN,"$logfile") || &error("OPEN ERROR");
	while (<IN>) {
		($no,$day,$shour,$smin,$ehour,$emin,$sub,$com,$color) = split(/<>/);
		if ($no eq $in{'no'}) {last;}
	}
	close IN;
}

###
sub in_form {
	print "<form action=\"$script\" method=POST>\n";
	print "<input type=hidden name=mode value=\"admin\">\n";
	print "<input type=hidden name=pass value=\"$inpass\">\n";
	print "<input type=hidden name=cm value=\"$cm\">\n";
	if (!$act) {
		$day = $nowday;
		$shour=$smin=$ehour=$emin=$sub=$com=$color='';
		print "<b>*****　新規登録　*****</b>\n";
	} else {
		open (IN,"$logfile") || &error("OPEN ERROR");
		while (<IN>) {
			($no,$day,$shour,$smin,$ehour,$emin,$sub,$com,$color) = split(/<>/);
			if ($in{$no}) {last;}
		}
		close IN;
		print "<input type=hidden name=year value=\"$logyear\">\n";
		print "<input type=hidden name=mon value=\"$logmon\">\n";
		print "<input type=hidden name=no value=\"$no\">\n";
		$com =~ s/<br>/\r/g;
		print "<b>***** 修正・削除　*****</b>\n";
	}
	print "<br><br><table cellspacing=1 cellpadding=0><col span=1 align=center>\n";
	print "<tr><td>日時&nbsp;</td><td>\n";
	if (!$act) {
		print "<select name=year>\n";
		for (2005 .. $nowyear+1) {
			if ($_ eq $logyear) {$sel = ' selected';} else {$sel = '';}
			print "<option value=\"$_\"$sel>$_</option>\n";
		}
		print "</select>年 <select name=mon>\n";
		for (1 .. 12) {
			if ($_ eq $logmon) {$sel = ' selected';} else {$sel = '';}
			print "<option value=\"$_\"$sel>$_</option>\n";
		}
		print "</select>月\n";
	} else {
		print "&nbsp;<b>$logyear年$logmon月</b>";
	}
	print " <select name=day>\n";
	for (1 .. 31) {
		if ($_ eq $day) {$sel = ' selected';} else {$sel = '';}
		print "<option value=\"$_\"$sel>$_</option>\n";
	}
	print "</select>日　　　<select name=shour><option value=\"\"></option>\n";
	for (0 .. 23) {
		if ($_ eq $shour) {$sel = ' selected';} else {$sel = '';}
		print "<option value=\"$_\"$sel>$_</option>\n";
	}
	print "</select>時 <select name=smin><option value=\"\"></option>\n";
	for ($m=0; $m<60; $m+=5) {
		if ($m eq $smin) {$sel = ' selected';} else {$sel = '';}
		print "<option value=\"$m\"$sel>$m</option>\n";
	}
	print "</select>分 〜 <select name=ehour><option value=\"\"></option>\n";
	for (0 .. 23) {
		if ($_ eq $ehour) {$sel = ' selected';} else {$sel = '';}
		print "<option value=\"$_\"$sel>$_</option>\n";
	}
	print "</select>時 <select name=emin><option value=\"\"></option>\n";
	for ($m=0; $m<60; $m+=5) {
		if ($m eq $emin) {$sel = ' selected';} else {$sel = '';}
		print "<option value=\"$m\"$sel>$m</option>\n";
	}
	print "</select>分</td></tr>\n";
	print "<tr><td>題名&nbsp;</td><td><input type=text name=sub size=30 value=\"$sub\"></td></tr>\n";
	print "<tr><td valign=top><br>内容&nbsp;</td><td><textarea cols=80 rows=6 name=com>$com</textarea></td></tr>\n";
	print "<tr><td>分類&nbsp;</td><td><table cellspacing=1 cellpadding=0>\n";
	$k = 0;
	for ($i=0; $i<$catmax; $i+=2) {
		$catcolor = $cat[$i+1];
		if (!$catcolor) {next;}
		if (!$k) {print "<tr>";}
		if ($color eq $catcolor) {$chk = ' checked';} else {$chk = '';}
		print "<td width=30 bgcolor=\"$catcolor\" align=center><input type=radio name=color value=\"$catcolor\"$chk></td>\n";
		if ($cat[$i]) {print "<td><font color=\"$catcolor\">$cat[$i]</font></td><td width=20></td>\n";}
		$k++;
		if ($k == $catcols) {print "</tr>"; $k = 0;}
	}
	if ($k) {print "</tr>";}
	print "</table></td></tr>\n";
	print "<tr><td></td><td>";
	if (!$act) {print "<input type=submit name=newwrt value=\"新規登録\">";}
	else {
		print "<table width=100%><tr><td><input type=submit name=edtwrt value=\"修正する\"></td>\n";
		print "<td width=40 bgcolor=red align=center><input type=submit name=delwrt value=\"削除\"></td></tr></table>\n";
	}
	print "</td></tr></table></form>\n";
}

###
sub newwrt {
	&in_chk;
	&lock;
	open (IN, "$nofile") || &error("OPEN ERROR"); 		$no = <IN>; 		close IN;
	$no++;
	open (OUT, ">$nofile") || &error("OPEN ERROR");		print OUT $no;		close OUT;
	$newdata = "$no<>$in{'day'}<>$in{'shour'}<>$in{'smin'}<>$in{'ehour'}<>$in{'emin'}<>$in{'sub'}<>$in{'com'}<>$in{'color'}<>\n";
	$time = sprintf("$in{'day'}%02d%02d%02d%02d",$in{'shour'},$in{'smin'},$in{'ehour'},$in{'emin'});

	if (-e $logfile) {
		$flag = 0;
		open (IN,"$logfile") || &error("OPEN ERROR");
		while (<IN>) {
			($no,$day,$shour,$smin,$ehour,$emin) = split(/<>/);
			$regtime = sprintf("$day%02d%02d%02d%02d",$shour,$smin,$ehour,$emin);
			if (!$flag && $time < $regtime) {push(@new,$newdata); $flag = 1;}
			push(@new,$_);
		}
		close IN;
		if (!$flag) {push(@new,$newdata);}
		open (OUT,">$logfile") || &error("OPEN ERROR");		print OUT @new;			close OUT;
	} else {
		open (OUT,">$logfile") || &error("OPEN ERROR");		print OUT $newdata;		close OUT;	chmod(0666,$logfile);
	}
	&unlock;
}

###
sub in_chk {
	if (!$in{'sub'} && !$in{'com'}) {&error("題名又は内容を入力して下さい");}
	$in{'com'} =~ s/\r\n|\r|\n/<br>/g;
}

###
sub edtwrt {
	&in_chk;
	$newdata = "$in{'no'}<>$in{'day'}<>$in{'shour'}<>$in{'smin'}<>$in{'ehour'}<>$in{'emin'}<>$in{'sub'}<>$in{'com'}<>$in{'color'}<>\n";
	$time = sprintf("$in{'day'}%02d%02d%02d%02d",$in{'shour'},$in{'smin'},$in{'ehour'},$in{'emin'});

	&lock;
	$flag = 0;
	open (IN,"$logfile") || &error("OPEN ERROR");
	while (<IN>) {
		($no,$day,$shour,$smin,$ehour,$emin) = split(/<>/);
		if ($no eq $in{'no'}) {next;}
		$regtime = sprintf("$day%02d%02d%02d%02d",$shour,$smin,$ehour,$emin);
		if (!$flag && $time < $regtime) {push(@new,$newdata); $flag = 1;}
		push(@new,$_);
	}
	close IN;
	if (!$flag) {push(@new,$newdata);}
	open (OUT,">$logfile") || &error("OPEN ERROR");		print OUT @new;		close OUT;
	&unlock;
}

###
sub delwrt {
	&lock;
	open (IN,"$logfile") || &error("OPEN ERROR");
	while (<IN>) {
		($no) = split(/<>/);
		if ($no ne $in{'no'}) {push(@new,$_);}
	}
	close IN;
	open (OUT,">$logfile") || &error("OPEN ERROR");		print OUT @new;		close OUT;
	&unlock;
}

###
sub setup {
	if ($wrt) {
		if ($in{'newpass'} ne '') {$pass = &crypt($in{'newpass'});}
		$title = $in{'title'};
		$com_adm = $in{'com'};		$com_adm =~ s/&amp;/&/g;	$com_adm =~ s/&lt;/</g;		$com_adm =~ s/&gt;/>/g;		$com_adm =~ s/&quot;/"/g;	$com_adm =~ s/\r\n|\r|\n/<br>/g;
		$home = $in{'home'};
		$home1 = $in{'home1'};
		$home_icon = $in{'home_icon'};
		$title_icon = $in{'title_icon'};
		$back_icon = $in{'back_icon'};
		$next_icon = $in{'next_icon'};
		$bg_img = $in{'bg_img'};
		$style_file = $in{'style_file'};

		$bg_color = $in{'color0'};
		$text_color = $in{'color1'};
		$title_color = $in{'color2'};
		$com_color = $in{'color3'};
		$frame_color = $in{'color4'};
		$monbg_color = $in{'color5'};
		$weekbg_color = $in{'color6'};
		$holi_color = $in{'color7'};
		$holibg_color = $in{'color8'};
		$sat_color = $in{'color9'};
		$satbg_color = $in{'color10'};
		$day_color = $in{'color11'};
		$daybg_color = $in{'color12'};
		$today_color = $in{'color13'};

		$catcols = $in{'catcols'};

		$opdata = "$pass<>$title<>$com_adm<>$home<>$home1<>$home_icon<>$title_icon<>$back_icon<>$next_icon<>$bg_img<>$style_file<>$bg_color<>$text_color<>$title_color<>$com_color<>$frame_color<>$monbg_color<>$weekbg_color<>$holi_color<>$holibg_color<>$sat_color<>$satbg_color<>$day_color<>$daybg_color<>$today_color<>$catcols";
		foreach (0 .. $catmax-1) {
			$cat[$_] = $in{"cat$_"};
			$opdata .= "<>$cat[$_]";
		}
		open (OUT, ">$opfile") || &error("OPEN ERROR");		print OUT $opdata;		close OUT;
	}
	print "下記に入力後、「設定する」を押して下さい。\n";
	print "<form action=\"$script\" method=POST>\n";
	print "<input type=hidden name=mode value=\"admin\">\n";
	print "<input type=hidden name=pass value=\"$inpass\">\n";
	print "<input type=hidden name=set value=\"1\">\n";
	print "<input type=submit name=wrt value=\"設定する\"><br><br>\n";

	print "<table bgcolor=\"#dddddd\" cellspacing=10><tr><td><table cellspacing=1 cellpadding=0>\n";
	print "<tr><td><b>タイトル</b></td><td><input type=text name=title size=40 value=\"$title\"></td></tr>\n";
	$com_adm =~ s/<br>/\r/g;
	print "<tr><td valign=top><br><b>コメント</b></td><td><textarea cols=70 rows=6 name=com wrap=\"soft\">$com_adm</textarea></td></tr>\n";
	print "<tr><td><b>PCホームURL</b></td><td><input type=text size=70 name=home value=\"$home\"></td></tr>\n";
	print "<tr><td><b>携帯ホームURL</b></td><td><input type=text size=70 name=home1 value=\"$home1\"></td></tr>\n";
	print "<tr><td><b>ホームアイコン</b></td><td><input type=text size=70 name=home_icon value=\"$home_icon\"></td></tr>\n";
	print "<tr><td><b>タイトルアイコン</b></td><td><input type=text size=70 name=title_icon value=\"$title_icon\"></td></tr>\n";
	print "<tr><td><b>BACKアイコン</b></td><td><input type=text size=70 name=back_icon value=\"$back_icon\"></td></tr>\n";
	print "<tr><td><b>NEXTアイコン</b></td><td><input type=text size=70 name=next_icon value=\"$next_icon\"></td></tr>\n";
	print "<tr><td><b>壁紙</b></td><td><input type=text size=70 name=bg_img value=\"$bg_img\"></td></tr>\n";
	print "<tr><td><b>スタイルシート</b></td><td><input type=text size=70 name=style_file value=\"$style_file\"></td></tr>\n";

	print "<tr><td></td><td><a href=\"$base/color.htm\" target=\"_blank\">カラーコード</a></td></tr>\n";
	@name = ('基本背景色','基本文字色','タイトル色','コメント色','枠色','月背景色','曜日背景色','休日','休日の背景色','土曜日','土曜日の背景色','平日','平日の背景色','本日の背景色');
	@data = ($bg_color,$text_color,$title_color,$com_color,$frame_color,$monbg_color,$weekbg_color,$holi_color,$holibg_color,$sat_color,$satbg_color,$day_color,$daybg_color,$today_color);
	for (0 .. $#name) {
		print "<tr><td><b>$name[$_]</b></td><td><table cellspacing=0 cellpadding=0><tr>\n";
		print "<td><input type=text name=color$_ size=10 value=\"$data[$_]\" style=\"ime-mode:inactive;\"></td>\n";
		print "<td width=5></td><td width=80 bgcolor=\"$data[$_]\"></td></tr></table></td></tr>\n";
	}
	print "<tr><td valign=top><b>分類</b></td><td><table cellspacing=1 cellpadding=0>\n";
	for ($i=0; $i<$catmax; $i+=2) {
		print "<tr><td><input type=text name=cat$i size=24 value=\"$cat[$i]\">　<input type=text name=cat",$i+1," size=10 value=\"$cat[$i+1]\" style=\"ime-mode:inactive;\"></td>\n";
		print "<td width=5></td><td width=30 bgcolor=\"$cat[$i+1]\"></td></tr>\n";
	}
	print "</table></td></tr>\n";
	print "<tr><td><b>分類表\示</b></td><td><input type=text size=4 name=catcols value=\"$catcols\" style=\"text-align:right; ime-mode:disabled;\">列</td></tr>\n";
	print "<tr><td><b>パスワード変更</b></td><td><input type=password name=newpass size=10 maxlength=8> （英数8文字以内）</td></tr>\n";
	print "</table></td></tr></table></form>\n";
}

###
sub lock {
	$retry = 3;
	if (-e $lockfile) {
		$locktime = (stat($lockfile))[9];
		if ($locktime < time - 60) {&unlock;}
	}
	while (!mkdir($lockfile,0755)) {
		if (--$retry < 0) {&error("busy!");}
		sleep(1);
	}
}

###
sub unlock {rmdir($lockfile);}

###
sub crypt {
	@salt = ('a' .. 'z','A' .. 'Z','0' .. '9');
	srand;
	$salt = "$salt[int(rand($#salt))]$salt[int(rand($#salt))]";
	return crypt($_[0],$salt);
}

###
sub decrypt {
	$salt = $_[1] =~ /^\$1\$(.*)\$/ && $1 || substr($_[1],0,2);
	if (crypt($_[0],$salt) eq $_[1] || crypt($_[0],'$1$' . $salt) eq $_[1]) {return 1;}
	return 0;
}

###
sub error {
	if (!$head) {&header; print "<body><center>\n";}
	print "<br>ERROR !!<br><font color=red>$_[0]</font>\n";
	print "</center></body></html>\n";
	exit;
}
