#!/usr/bin/perl

###############################################
#   cale.cgi(改変部分のみ)
#      v1.0 (2006.5.24)
#                     Copyright(C) Mewlet
#
#   BASE CGI DATE
#   sche27.cgi
#      V2.0 (2005.6.18)
#                     Copyright(C) CGI-design
#
###############################################

$script = 'cale.cgi';
$base = './caledata';				#データ格納ディレクトリ
$nofile = "$base/no.txt";			#記事番号
$opfile = "$base/option.txt";		#オプション

##### ログファイル格納ディレクトリ #####
#最後に「/」は必要ありません。
$logdir = "$base/log";

$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/back.gif<>$base/next.gif<><><><>$base/style.css<><><>#FAFAEB<>#000000<>#E5B645<>#FEE9C5<>#C00000<>#BBBBBB<>#FF0000<>#FFD9EC<>#00008B<>#E6FFFF<>#000000<>#FFFFFF<>#FEE9C5<>6<>研修<>#0000ff<>セミナー<>#008040<>休日<>#C00000";
	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;
	if ($n eq "h_skin" || $n eq "f_skin") {$val =~ s/\r\n|\r|\n/　/g;}
	else {$val =~ s/\r\n|\r|\n/<br>/g;}
	$in{$n} = $val;
}

$mode = $in{'mode'};
$logyear = $in{'year'};
$logmon = $in{'mon'};
$logday = $in{'day'};

open (IN,"$opfile") || &error("OPEN ERROR");
($pass,$title,$com_adm,$home,$home_icon,$back_icon,$next_icon,$bg_img,$style_file1,$style_file2,$style_file3,$h_skin,$f_skin,$bg_color,$text_color,$monbg_color,$combg_color,$title_color,$frame_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);
@wbgcolor = ($holibg_color,$daybg_color,$daybg_color,$daybg_color,$daybg_color,$daybg_color,$satbg_color);

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

if ($mode eq 'search') {&search;}
elsif ($mode eq 'regin') {&regin;}
elsif ($mode eq 'admin') {&admin;}
else {&main;}
$f_skin =~ s/　/\n/g;
if ($h_skin gt "" && $f_skin gt "") {print "$f_skin\n";}
else {print "</center>\n";}
print "</body>\n</html>\n";
exit;

###
sub header {
	print "Content-type: text/html\n\n";
	print "<html>\n<head>\n<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=Shift_JIS\">\n";
	print "<title>$title</title>\n";
	if ($style_file1) {print "<link rel=\"stylesheet\" type=\"text/css\" href=\"$style_file1\">\n";}
	if ($style_file2) {print "<link rel=\"stylesheet\" type=\"text/css\" href=\"$style_file2\">\n";}
	if ($style_file3) {print "<link rel=\"stylesheet\" type=\"text/css\" href=\"$style_file3\">\n";}
	print "<script type=\"text/javascript\" src=\"js/overroll.js\"></script>\n";
	print "</head>\n";
	$head = 1;
}

###
sub main {
	&header;
	print "<body background=\"$bg_img\" bgcolor=\"$bg_color\" text=\"$text_color\" onLoad=\"MM_preloadImages('images/menu01_on.gif','images/menu02_on.gif','images/menu03_on.gif')\">\n";
	$h_skin =~ s/　/\n/g;
	if ($h_skin gt "" && $f_skin gt "") {print "$h_skin\n";}
	else {print "<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><font color=\"$title_color\" size=\"+1\"><b>$title</b></font></td><td width=100></td></tr></table>\n";
	if ($com_adm) {print "<table><tr><td>$com_adm</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";
	&cal_dsp;
	print "<table width=88%><tr><td align=right><a href=\"$script?mode=admin\">[管理]</a></td></tr></table>\n";
	# 次の行は著作権表示ですので削除しないで下さい。#
	print "<a href=\"http://cgi-design.net\" target=\"_blank\">CGI-design</a> + <a href=\"http://mewlet.com\" target=\"_blank\">Customer-Mewlet</a>\n";
}

###
sub cal_dsp {
	$year = $logyear - 1;
	print "<table width=90%><tr><td width=30% style=\"text-align: left;\"><a href=\"$script?mode=$mode&year=$year&mon=1\"><img src=\"$back_icon\" border=0></a>　<font size=\"+1\"><b>$logyear年</b></font>";
	$year = $logyear + 1;
	print "　<a href=\"$script?mode=$mode&year=$year&mon=1\"><img src=\"$next_icon\" border=0></a></td>\n";
	print "<td width=70% style=\"text-align: right;\"><a href=\"$script?mode=search\">[ 日程検索 ]</a></td></tr></table>\n";
	$year = $logyear;
	print "<table width=90%><tr><td align=center><table bgcolor=\"$monbg_color\" cellspacing=1 cellpadding=2><tr>";
	if ($logyear == $nowyear) {
		if ($logmon == $nowmon) {print "<td width=35 align=center bgcolor=\"$combg_color\">今月</td>\n";}
		else {print "<td width=35 align=center bgcolor=\"$monbg_color\"><a href=\"$script?mode=$mode&year=$nowyear&mon=$nowmon\">今月</a></td>\n";}
	} else {print "<td width=35 align=center bgcolor=\"$monbg_color\"><a href=\"$script?mode=$mode&year=$nowyear&mon=$nowmon\">今月</a></td>\n";}
	$i = 1;
	for ($m=1; $m<=12; $m++) {
		if ($m == $logmon) {print "<td width=35 align=center bgcolor=\"$combg_color\">$i月</td>\n";}
		else {print "<td width=35 align=center bgcolor=\"$monbg_color\"><a href=\"$script?mode=$mode&year=$year&mon=$m\">$i月</a></td>\n";}
		$i++;
	}
	print "</tr></table></td></tr></table>\n";

	if (-e $logfile) {
		open (IN,"$logfile") || &error("OPEN ERROR");
		while (<IN>) {
			($no,$day,$name,$index,$com,$color) = split(/<>/);
			$com =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1<a href=\"$2\" target=\"_blank\">$2<\/a>/g;
			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 align=left nowrap style=\"padding-left: 5px;\"><b style=\"font-size: 14px; line-height: 20px;\">$index</b>";
			if ($name) {$data .= "[$name]";}
			if ($mode) {$data .= "<a href=\"$script?mode=regin&edt=1&year=$logyear&mon=$logmon&no=$no\">修</a>";} else {$data .= "&nbsp;&nbsp;";}
			$data{$day} .= "$data</td></tr><tr><td style=\"padding-left: 15px;\">$com</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) {
		$wcolor = $wcolor[$w];
		$bc = $wbgcolor[$w];
		if (2000 < $logyear) {
			if ($w == 1) {$n++;}
			&get_holiday($logmon,$day,$w);
			if ($holiday) {$wcolor = $wcolor[0]; $bc = $wbgcolor[0];}
		}
		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>$data{$day}</td></tr>\n";
		$w++;
		if ($w == 7) {$w = 0;}
	}
	print "</table>\n";
}

###
sub dsp_log {
	$com =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1<a href=\"$2\" target=\"_blank\">$2<\/a>/g;
	print "<tr bgcolor=\"$daybg_color\"><td width=40><font color=\"$day_color\">$day</font><td$bcday>\n";
	print "<table width=100% cellspacing=0 cellpadding=0 style=\"color:$color;\"><td align=left style=\"padding-left: 5px;\" nowrap><b style=\"font-size: 14px; line-height: 20px;\">$index</b>\n";
	if ($name) {print "[$name]\n";}
	print "</td></tr><tr><td style=\"padding-left: 15px;\">$com</td></tr></table></td></tr>\n";
}

###
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 search {
	&header;
	print "<body background=\"$bg_img\" bgcolor=\"$bg_color\" text=\"$text_color\">\n";
	$h_skin =~ s/　/\n/g;
	if ($h_skin gt "" && $f_skin gt ""){print "$h_skin\n";}
	else {print "<center>\n";}
	print "<table width=97%><tr><td style=\"padding-left: 10px; padding-top: 10px;\">\n";
	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 "<a href=\"$script\">[カレンダー表\示]</a></td></tr></table>\n";
	print "キーワードを入力し「検索」をクリックして下さい。<br>\n";
	print "キーワードを複数指定する場合はスペースで区切って下さい。<br>\n";
	print "検索できる範囲は2000年〜現在の年<b>＋5年</b>までになります。\n";
	print "<form action=\"$script\" method=POST>\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 (2000 .. $nowyear+5) {
		if ($_ == $logyear) {$sel = ' selected';} else {$sel = '';}
		print "<option value=\"$_\"$sel>$_</option>\n";
	}
	print "</select>年\n";
	print "　　<input type=submit value=\" 検索 \"></form>\n";
	if ($in{'word'} eq "") {
		print "<table width=95%><tr><td><p>検索方法(例)</p>\n";
		print "<p>イベント名 ⇒ イベント名に関する記事を年毎に表\示</p>\n";
		print "<p>商工会議所名 ⇒ 指定の商工会議所名の記事を年毎に表\示</p>\n";
		print "<p>地域名 ⇒ 地域名を含む記事を年毎に表\示</p>\n";
		print "<p>平塚 七夕 ⇒ 平塚・七夕の両方を含む記事を年毎に表\示</p></td></tr></table>\n";
	}
	if (!$in{'word'}) {return;}
	$in{'word'} =~ s/　/ /g;
	@word = split(/\s+/,$in{'word'});
	$m = 0;
	for (1 .. 12) {
		$logmon = $_;
		$logfile = "$logdir/$logyear$logmon.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=90%><tr><td style=\"text-align: left;\">検索結果： 計 <b>$m</b>件</td></tr></table>\n";

	$in{'word'} =~ s/　/ /g;
	@word = split(/\s+/,$in{'word'});
	$m = 0;
	for (1 .. 12) {
		$logmon = $_;
		$logfile = "$logdir/$logyear$logmon.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=90%><tr><td><b>$logyear年$logmon月</b></td></tr></table>\n";
		print "<a name=\"$no\"></a><table width=90% bgcolor=\"$frame_color\" cellspacing=1 cellpadding=2><col span=2 align=center>\n";
		foreach (@data) {
			($no,$day,$name,$index,$com,$color) = split(/<>/);
			&dsp_log;
		}
		print "</table>\n";
		print "<table width=90% cellpadding=0><tr><td align=right><a href=\"\#top\">▲top</a></td></tr></table>\n";
	}
	if ($m == 0) {print "<div align=center>検索キーワード<b>[ $in{'word'} }</b>を含む記事が見つかりませんでした。</div>\n";}
	print "<table width=90%><tr><td style=\"text-align: left;\">検索結果： 計 <b>$m</b>件</td></tr></table>\n";
}

###
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 regin {
	if ($in{'newwrt'}) {&newwrt;}
	elsif ($in{'edtwrt'}) {&edtwrt;}
	elsif ($in{'delwrt'}) {&delwrt;}

	&header;
	print "<body background=\"$bg_img\" bgcolor=\"$bg_color\" text=\"$text_color\">\n";
	$h_skin =~ s/　/\n/g;
	if ($h_skin gt "" && $f_skin gt "") {print "$h_skin\n";}
	else {print "<center>\n";}
	print "<table width=97%><tr><td>\n";
	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 "<a href=\"$script\">[カレンダー表\示]</a></td></tr></table>\n";
	if ($in{'edt'}) {
		&edtin;
		print "<b>***** 修正・削除　*****</b>\n";
	} else {
		print "<b>*****　新規登録　*****</b>\n";
	}
	&in_form;
	print "<br><hr width=95%>修正・削除する場合は「修」をクリックして下さい。<br>\n";
	&cal_dsp;
}

###
sub edtin {
	&sel_data;
	if ($addr eq $ENV{'REMOTE_ADDR'}) {return;}
	if ($in{'pwd'} eq '') {
		print "<br><br><br><br><h4>修正キーを入力して下さい</h4>\n";
		print "<form action=\"$script\" method=POST>\n";
		print "<input type=hidden name=mode value=\"regin\">\n";
		print "<input type=hidden name=edt value=\"1\">\n";
		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=\"$in{'no'}\">\n";
		print "<input type=password name=pwd size=10 maxlength=8>\n";
		print "<input type=submit value=\"入力\"></form>\n";
		$f_skin =~ s/　/\n/g;
		if ($h_skin gt "" && $f_skin gt "") {print "$f_skin\n";}
		else {print "</center>\n";}
		print "</body>\n</html>\n";
		exit;
	}
	$mat = &decrypt($in{'pwd'},$pass);
	if ($mat) {return;}
	if ($pwd eq '') {&error("該当の登録データに修正キーが設定されていません");}
	$mat = &decrypt($in{'pwd'},$pwd);
	if (!$mat) {&error("修正キーが違います");}
}

###
sub in_pwchk {
	&sel_data;
	if ($addr eq $ENV{'REMOTE_ADDR'}) {return;}

	if ($in{'edtpw'} eq '') {&error;}
	$mat = &decrypt($in{'edtpw'},$pass);
	if ($mat) {return;}

	if ($pwd eq '') {&error;}
	$mat = &decrypt($in{'edtpw'},$pwd);
	if (!$mat) {&error;}
}

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

###
sub in_form {
	print "<table cellspacing=1 cellpadding=0><col span=1 align=center>\n";
	print "<form action=\"$script\" method=POST>\n";
	print "<input type=hidden name=mode value=\"regin\">\n";
	print "<tr><td>日付</td><td>\n";
	if ($in{'edt'}) {
		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=\"$in{'no'}\">\n";
		print "<input type=hidden name=edtpw value=\"$in{'pwd'}\">\n";
		print "<b>$logyear年$logmon月</b>";
		$pwd = '';
		$com =~ s/<br>/\r/g;
	} else {
		print "<select name=year>\n";
		for (2000 .. $nowyear+5) {
			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";
		&getcook;
		$day = $logday;
		$com = '';
	}
	print " <select name=day>\n";
	for (1 .. 31) {
		if ($_ eq $day) {$sel = ' selected';} else {$sel = '';}
		print "<option value=\"$_\"$sel>$_</option>\n";
	}
	print "</select>日</td></tr>\n";
	print "<tr><td>投稿者名</td><td><input type=text size=30 name=name value=\"$name\" style=\"ime-mode:active;\"></td></tr>\n";
	print "<tr><td>タイトル</td><td><input type=text size=60 name=index value=\"$index\" style=\"ime-mode:active;\"></td></tr>\n";
	print "<tr><td valign=top><br>内容</td><td><textarea cols=60 rows=6 name=com style=\"ime-mode:active;\">$com</textarea></td></tr>\n";
	print "<tr><td>分類</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><input type=password size=10 maxlength=8 name=pwd value=\"$pwd\"> （英数8文字以内）</td></tr>\n";
	print "<tr><td></td><td>";
	if ($in{'edt'}) {
		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";
	} else {print "<input type=submit name=newwrt value=\"新規登録\">";}
	print "</td></form></tr></table>\n";
	print "<table border=0 cellspacing=1 cellpadding=0><tr><td>※登録は2000年〜現在の年<b>＋5年</b>までの範囲で行えます。</td></tr></table>\n";
}

###
sub newwrt {
	&in_chk;
	if ($in{'pwd'} ne '') {$pwd = &crypt($in{'pwd'});} else {$pwd = '';}

	&lock;
	open (IN,"$nofile") || &error("OPEN ERROR"); 		$no = <IN>; 		close IN;
	$no++;
	open (OUT,">$nofile") || &error("OPEN ERROR");		print OUT $no;		close OUT;

	open (OUT,">>$logfile") || &error("OPEN ERROR");
	print OUT "$no<>$logday<>$in{'name'}<>$in{'index'}<>$in{'com'}<>$in{'color'}<>$pwd<>$ENV{'REMOTE_ADDR'}<>\n";
	close OUT;
	chmod(0666,$logfile);
	&unlock;
	&setcook;
	print "Location: $script?mode=regin&year=$logyear&mon=$logmon&day=$logday\n\n";
	exit;
}

###
sub in_chk {
	if (!$in{'com'}) {&error("内容を入力して下さい");}
}

###
sub edtwrt {
	&in_pwchk;
	&in_chk;
	&lock;
	@new = ();
	open (IN,"$logfile") || &error("OPEN ERROR");
	while (<IN>) {
		($no,$day,$name,$index,$com,$color,$pwd,$addr) = split(/<>/);
		if ($no eq $in{'no'}) {
			if ($in{'pwd'} ne '') {$pwd = &crypt($in{'pwd'});}
			push(@new,"$no<>$logday<>$in{'name'}<>$in{'index'}<>$in{'com'}<>$in{'color'}<>$pwd<>$addr<>\n");
		} else {push(@new,$_);}
	}
	close IN;
	open (OUT,">$logfile") || &error("OPEN ERROR");		print OUT @new;		close OUT;
	&unlock;
	print "Location: $script?mode=regin&year=$logyear&mon=$logmon&day=$logday\n\n";
	exit;
}

###
sub delwrt {
	&in_pwchk;
	&lock;
	@new = ();
	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;
	print "Location: $script?mode=regin&year=$logyear&mon=$logmon&day=$logday\n\n";
	exit;
}

###
sub admin {
	&header;
	print "<body>\n";
	$h_skin =~ s/　/\n/g;
	if ($h_skin gt "" && $f_skin gt "") {print "$h_skin\n";}
	else {print "<center>\n";}
	print "<table width=97%><tr><td>\n";
	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 "<a href=\"$script\">[カレンダー表\示]</a></td></tr></table>\n";
	$inpass = $in{'pass'};
	if ($inpass eq '') {
		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";
		$f_skin =~ s/　/\n/g;
		if ($h_skin gt "" && $f_skin gt "") {print "$f_skin\n";}
		else {print "</center>\n";}
		print "</body>\n</html>\n";
		exit;
	}
	$mat = &decrypt($inpass,$pass);
	if (!$mat) {&error("パスワードが違います");}

	if ($in{'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;
		$home = $in{'home'};
		$home_icon = $in{'home_icon'};
		$back_icon = $in{'back_icon'};
		$next_icon = $in{'next_icon'};
		$bg_img = $in{'bg_img'};
		$style_file1 = $in{'style_file1'};
		$style_file2 = $in{'style_file2'};
		$style_file3 = $in{'style_file3'};
		$h_skin = $in{'h_skin'};		$h_skin =~ s/&amp;/&/g;	$h_skin =~ s/&lt;/</g;		$h_skin =~ s/&gt;/>/g;		$h_skin =~ s/&quot;/"/g;
		$f_skin = $in{'f_skin'};		$f_skin =~ s/&amp;/&/g;	$f_skin =~ s/&lt;/</g;		$f_skin =~ s/&gt;/>/g;		$f_skin =~ s/&quot;/"/g;

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

		$catcols = $in{'catcols'};

		$opdata = "$pass<>$title<>$com_adm<>$home<>$home_icon<>$back_icon<>$next_icon<>$bg_img<>$style_file1<>$style_file2<>$style_file3<>$h_skin<>$f_skin<>$bg_color<>$text_color<>$monbg_color<>$combg_color<>$title_color<>$frame_color<>$holi_color<>$holibg_color<>$sat_color<>$satbg_color<>$day_color<>$daybg_color<>$today_color<>$catcols";
		for (0 .. $catmax-1) {
			$cat[$_] = $in{"cat$_"};
			$opdata .= "<>$cat[$_]";
		}
		open (OUT,">$opfile") || &error("OPEN ERROR");		print OUT $opdata;		close OUT;
	}
	print "<form action=\"$script\" method=POST>\n";
	print "<input type=hidden name=mode value=\"regin\">\n";
	print "<input type=hidden name=year value=\"$nowyear\">\n";
	print "<input type=hidden name=mon value=\"$nowmon\">\n";
	print "<input type=submit value=\" 予\定の登録・編集をする \">\n";
	print "</form>\n";
	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=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 size=40 name=title value=\"$title\" style=\"ime-mode:active;\"></td></tr>\n";
	$com_adm =~ s/<br>/\r/g;
	print "<tr><td valign=top><br><b>コメント</b></td><td><textarea cols=60 rows=6 name=com style=\"ime-mode:active;\">$com_adm</textarea></td></tr>\n";
	print "<tr><td><b>ホームURL</b></td><td><input type=text size=60 name=home value=\"$home\"></td></tr>\n";
	print "<tr><td><b>ホームアイコン</b></td><td><input type=text size=60 name=home_icon value=\"$home_icon\"></td></tr>\n";
	print "<tr><td><b>BACKアイコン</b></td><td><input type=text size=60 name=back_icon value=\"$back_icon\"></td></tr>\n";
	print "<tr><td><b>NEXTアイコン</b></td><td><input type=text size=60 name=next_icon value=\"$next_icon\"></td></tr>\n";
	print "<tr><td><b>壁紙</b></td><td><input type=text size=60 name=bg_img value=\"$bg_img\"></td></tr>\n";
	print "<tr><td><b>スタイルシート1</b></td><td><input type=text size=60 name=style_file1 value=\"$style_file1\"></td></tr>\n";
	print "<tr><td><b>スタイルシート2</b></td><td><input type=text size=60 name=style_file2 value=\"$style_file2\"></td></tr>\n";
	print "<tr><td><b>初期スタイル</b></td><td><input type=text size=60 name=style_file3 value=\"$style_file3\"></td></tr>\n";
	print "<tr><td><b>スキン設定</b></td><td></td></tr>\n";
	$h_skin =~ s/　/\r/g;
	print "<tr><td valign=top><br><b>&lt;body&gt;〜表\示部</b></td><td><textarea cols=60 rows=10 name=h_skin style=\"ime-mode:active;\">$h_skin</textarea></td></tr>\n";
	print "<tr><td><b></b></td><td>入力例: &lt;body&gt;<span style=\"background-color: #FF0;\">&lt;div&gt;この黄色い部分・・・</span>[カレンダー表\示部分]</td></tr>\n";
	$f_skin =~ s/　/\r/g;
	print "<tr><td valign=top><br><b>表\示部〜&lt;/body&gt;</b></td><td><textarea cols=60 rows=10 name=f_skin style=\"ime-mode:active;\">$f_skin</textarea></td></tr>\n";
	print "<tr><td><b></b></td><td>入力例: [カレンダー表\示部分]<span style=\"background-color: #FF0;\">・・・この黄色い部分&lt;/div&gt;</span>&lt;/body&gt;</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,$monbg_color,$combg_color,$title_color,$frame_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 size=10 name=color$_ 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 size=24 name=cat$i value=\"$cat[$i]\" style=\"ime-mode:active;\">　<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 setcook {
	my($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime(time+60*24*60*60);
	$ww = (Sun,Mon,Tue,Wed,Thu,Fri,Sat)[$wday];
	$month = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)[$mon];
	$gmt = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT",$ww,$mday,$month,$year+1900,$hour,$min,$sec);
	$cook = "$in{'name'}<>$in{'color'}<>$in{'pwd'}<>";
	print "Set-Cookie: cale=$cook; expires=$gmt;\n";
}

###
sub getcook {
	if ($in{'newwrt'}) {
		$name = $in{'name'};
		$color = $in{'color'};
		$pwd = $in{'pwd'};
		return;
	}
	my($n,$val);
	foreach (split(/;\s*/,$ENV{'HTTP_COOKIE'})) {
		($n,$val) = split(/=/);
		if ($n eq 'cale') {last;}
		$val = '';
	}
	($name,$color,$pwd) = split(/<>/,$val);
}

###
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>\n";}
	print "<center>\n";
	print "<br><br><br><br><h3>ERROR !!</h3><font color=red><b>$_[0]</b></font>\n";
	print "</center>\n";
	$f_skin =~ s/　/\n/g;
	if ($h_skin gt "" && $f_skin gt "") {print "$f_skin\n";}
	print "</body>\n</html>\n";
	exit;
}
