#!/usr/bin/perl

# 設定ファイル名
my ($CGI_CONF) = 'questionconf.pl';

&error('日本語モジュール【jcode.pl】が見つかりません。') unless(-f './jcode.pl');
&error("設定ファイル【$CGI_CONF】が見つかりません。") unless(-f $CGI_CONF);

require 'jcode.pl';
require $CGI_CONF;


#----------------------
#初期設定
#---------------------- 
$KANJI_CODE='sjis';					#漢字変換方式(jis or sjis or euc)
$METHOD='POST';					#メソッド形式(POST or GET)
$CGI_SCRIPT='./question.cgi';		#CGIファイル名
$LOG_FILE='./data.txt';				#データファイル名
$LOCK = 1;							#ロック (0:不使用 1:使用)
$LOCK_FILE = './lock';				#ロックファイル名

$GRAPH_TD_WIDTH = int($RESULT_GRATH_PERCENT/100 * $RESULT_TABLE_WIDTH);	# グラフ用の箱の幅

#--------
#メイン処理
#--------
&decode;

if ($mode eq 'vote' || $mode eq 'kekka'){
	&vote;
}elsif($mode eq 'manage'){
	&manage;
}elsif($mode eq 'login'){	# 2005-07-06 sasaki add
	&login;
}else {
	&vote;
}

#----------------------------------
#投票内容を今までのものに追加し結果を表示します
#----------------------------------
sub vote{
	&lock if ($LOCK); 	# ロック開始

	open (IN,$LOG_FILE) || &error("ログファイルを開けません"); #データファイル読み込み
	@qset=<IN>;			#データを一行ごと配列qsetに入れる
	close (IN);

	chop(@qset);			#qsetの最後の改行を取り除く

	$lahost=$qset[$qset[0]+3];
	$host = $ENV{'REMOTE_HOST'};
	$addr = $ENV{'REMOTE_ADDR'};


	if ($host eq "" || $host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; }
	if ($lahost eq $host && $mode eq 'vote'){
		# debug時（連続投票を可能にしたい場合）はこちらをコメントアウト
		&error("連続投票はできません。<br><br>(接続ホストを変えて投票を試してみてください)");
	}

	&head;				#ヘッダ出力
	&jikan(0);			#現時間読み込み

	if($TITLE ne ''){
		print "<center><span style='font-size:$TITLE_TEXT_SIZE";
		print "pt;color:$TITLE_COLOR'>$TITLE</span></center><br><br>\n";
	}

	if (($HOME_URL ne 'http://') && ($HOME_URL ne '') && ($MODE ne 'IFRAME') && ($RETURN_DISP_FLG eq 'ホーム')){
		print "<center>\n";
		print "<span style='font-size:9pt'><a href=\"$HOME_URL\">ホームへ</a></span>\n";
		print "</center>\n";
	}

	if (($MODE ne 'IFRAME') && ($RETURN_DISP_FLG eq '閉じる')){
		print "<center>\n";
		print "<span style='font-size:9pt'><a href=\"javascript:window.close()\">閉じる</a></span>&nbsp;&nbsp;&nbsp;\n";
		print "</center>\n";
	}

	if($MODE ne 'IFRAME'){
		print "<div align=\"$SUB_TITLE_POSITION\">";
		print "<p><span style='font-size:9pt;color:$SUB_TITLE_COLOR'>$SUB_TITLE</span>\n";
		print "</div>";
		print "<hr align=center width=100%>\n";
		if (($mode eq 'vote') && ($MODE ne 'IFRAME')){
			print "<span style='font-size:9pt;color:$FONT_COLOR'>投票ありがとうございました。</span><br>\n";
		}
	}


	print " <FORM action=\"$CGI_SCRIPT\" method=\"$METHOD\"> \n";

	$qkazu=$qset[0];
	$qset[0]="$qset[0]\n";
	for ($i=1;$i<=$qkazu;$i++){		#質問ごとの処理		
		@qtemp=split(/,/,$qset[$i]);	#行内データを｢,｣で分けて配列qtempに格納	
		$add = $in{"add$i"};	#追加する選択肢内容
		$tothyo = 0;		#質問別の総票数
		$maxhyo = 1;		#質問別の最高得票数
		for ($j=1;$j<=$qtemp[1];$j++){			#既存の選択肢への処理
			($anstmp[$j],$hyotmp[$j])=split(/=/,$qtemp[$j+3]);
			$done=0;
			foreach $x (@ans){		
				if ("$i/$j" eq $x){
					$hyotmp[$j]++,$done=1; #票数の追加
				}
			}
			if ($add eq $anstmp[$j] ){
				$add='';			#追加する選択肢が既存
				if ($done == 0 ){
					$hyotmp[$j]++;
				}
			}
			if ($hyotmp[$j] > $maxhyo){	#最高得票数の更新
				$maxhyo = $hyotmp[$j];
			}
			$qtemp[$j+3]="$anstmp[$j]=$hyotmp[$j]";	#更新データを格納
			$tothyo += $hyotmp[$j];			#質問ごと総票数更新
		}
		if ($in{$i} eq 'add' && $add ne ''){		#選択肢追加
			$qtemp[$j+3]="$add=1",$tothyo++;
			$anstmp[$j]=$add,$hyotmp[$j]=1,$qtemp[1]++,$j++;
		}

		#票数によるソート表示
		if ($qtemp[3] =~ m/sort/){
			$hyotmp[0] = 0; #ダミー
			@sizensu = ();
			for ($j=0;$j<$qtemp[1];$j++){
				$sizensu[$j] = $j + 1 ;
			}
			$j = 1;
			foreach (sort({$hyotmp[$b] <=> $hyotmp[$a]} @sizensu)){
				$h_anstmp[$j] = $anstmp[$_];
				$h_hyotmp[$j] = $hyotmp[$_];
				$h_ansnum[$j] = $_;
				$j++;
			}
		}else{
			for ($j=1;$j<=$qtemp[1];$j++){
				$h_anstmp[$j] = $anstmp[$j];
				$h_hyotmp[$j] = $hyotmp[$j];
				$h_ansnum[$j] = $j;
			}
		}				

		# 質問文表示
		print "<div align=\"$QUESTION_POSITION\">";
		print "\n<p><b><span style='font-size:9pt;color:$QUESTION_COLOR'>$qtemp[0]</span></b>";
		if ($qtemp[3] =~ m/sosu/){
			print "\n<span style='font-size:9pt;color:$VOTE_ALL_NUM_COLOR'>(投票総数 $tothyo 票)</span>";	#投票総数表示
		}
		print "</div>";

		# 結果テーブル
		print "<div align=\"$RESULT_TABLE_POSITION\">";
		print "\n<table border=1 cellspacing=0 bgcolor=\"$RESULT_BG_COLOR\" width=$RESULT_TABLE_WIDTH>";	#結果表示
		if ($qtemp[3] =~ m/select/){
			$tmptyp = 'radio';
		}else{
			$tmptyp = $qtemp[3];
			$tmptyp =~ s/=sort// , $tmptyp =~ s/=sosu//;
		}
		for ($j=1;$j<=$qtemp[1];$j++){
			$wari[$j]=0;	#票の割合
			$width = 0;	#グラフ画像表示幅

			# 回答選択肢
			print "\n<tr style='font-size:9pt;'><td>";
			print "<input type=$tmptyp name=$i value=\"$i/$h_ansnum[$j]\">";
			print "<span style='font-size:9pt;color:$RESULT_COLOR'>$h_anstmp[$j]</span></td>";

			# 票数
			if($VOTES_NUM_DISP_FLG eq 'yes'){
				print "<td align=right width=35><span style='font-size:9pt;color:$RESULT_VOTE_NUM_COLOR'>$h_hyotmp[$j] 票</span></td>";
			}

			if ($qtemp[3] =~ m/radio/ || $qtemp[3] =~ m/select/){
				if ($tothyo>0) {
					$wari[$j]=sprintf("%.1f",$h_hyotmp[$j]*100/$tothyo);
				}
				$width = int ( $GRAPH_TD_WIDTH / 100 * $wari[$j] );

				# パーセント表示
				if($VOTES_PER_DISP_FLG eq 'yes'){
					print "<td align=right width=40><span style='font-size:9pt;color:$RESULT_VOTE_PER_COLOR'>$wari[$j] %</span></td>";
				}
			}else{
				if ($maxhyo > 0){
					$width = int($GRAPH_TD_WIDTH * $h_hyotmp[$j]/$maxhyo);
				}
			}

			if($VOTES_GRAPH_DISP_FLG eq 'yes'){
				print "<td width=$GRAPH_TD_WIDTH>";
				print "<img src=$GRAPH_IMAGE height=10 width=$width></td>\n";
			}
			print "</tr>\n";
		}
		print "</table>\n\n";
		print "</div>";


		push(@qtemp,"\n");		#行末に改行をつける
		$qset[$i]=join(",",@qtemp);	#行データを更新する
	}					#質問ごとの処理の終了

	#メッセージの処理
	$host = $ENV{'REMOTE_HOST'};
	$addr = $ENV{'REMOTE_ADDR'};
	if ($host eq "" || $host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; }

	@tnaiyo = split(/<br>/,$qset[$qkazu+1],$MAX_MESSAGE_COUNT+1);
	if($in{'toko'} ne ''){			#メッセージ更新
		unshift (@tnaiyo,"[$jikanl] <b>$in{'tname'}</b>：$in{'toko'} ");
	} 
	splice (@tnaiyo,$MAX_MESSAGE_COUNT);
	$qset[$qkazu+1] = join('<br>',@tnaiyo);
	$qset[$qkazu+1] = "$qset[$qkazu+1]\n";

	if ($MAX_MESSAGE_COUNT > 0){
		print "<p><b><span style='font-size:9pt;color:$COMMENT_TITLE_COLOR'>◆ご意見・ご感想(必須ではありません)</span></b><br>";
		print "<span style='font-size:9pt;color:$COMMENT_COLOR'>お名前</span><input type=text name=tname size=\"$NAME_TEXT_SIZE\"><br>";
		print "<span style='font-size:9pt;color:$COMMENT_COLOR'>コメント</span><input type=text name=toko size=\"$COMMENT_TEXT_SIZE\">";
		print "<p><b><span style='font-size:9pt;color:$COMMENT_TITLE_COLOR'>◆ご意見・ご感想</span></b><br>\n";
		print "<span style='font-size:9pt;color:$COMMENT_COLOR'>$qset[$qkazu+1]</span>\n";	#メッセージ表示
	}

	if ($mode eq 'vote'){
	 	$qset[$qkazu+2]="$jikanl \n";			#最終投票時間更新
	}else{
		$qset[$qkazu+2]="$qset[$qkazu+2]\n";
	}

	if ($mode eq 'vote'){
	 	$qset[$qkazu+3]="$host\n";			#最終投票ホスト更新
	}else{
		$qset[$qkazu+3]="$qset[$qkazu+3]\n";
	}

	$qset[$qkazu+4]="$qset[$qkazu+4]\n";		#末データ処理
	$qset[$qkazu+5]="$qset[$qkazu+5]\n";		#末データ処理
	$qset[$qkazu+6]="$qset[$qkazu+6]\n";		#末データ処理
	$qset[$qkazu+7]="$qset[$qkazu+7]\n";		#末データ処理
	$qset[$qkazu+8]="$qset[$qkazu+8]\n";		#末データ処理

	#データファイル更新
	open (OUT,">$LOG_FILE") || &error("ログファイルを開けません");				
	print OUT @qset;
	close(OUT);

	&unlock if ($LOCK); # ロック解除
	
print <<"EOM";
<P>
<div align=\"$SUBMIT_BUTTON_POSITION\">
<input type="submit" value="投票">
EOM

# 2005-07-06 sasaki modify インラインフレーム時にはリセットボタンは表示しない 
if($MODE ne 'IFRAME'){
print <<"EOM";
	&nbsp;&nbsp;&nbsp;<INPUT type="reset" value="リセット">
EOM
}
print <<"EOM";
<input type="hidden" name="mode" value="vote">
</div>
</form>
EOM

if($MODE ne 'IFRAME'){
	print <<"EOM";
	<div align=\"$MANAGE_MENU_POSITION\"><form action=\"$CGI_SCRIPT\" method=\"$METHOD\">
	<input type=hidden name=mode value=\"manage\">
	<input type=password name=pass size=8>
	<input type=submit value=\"ログイン\">
	</form></div>
EOM
}

	&foot;					#フッタ表示
}

#----------------------------------
#管理者用
#----------------------------------
sub manage{
	if ($in{'pass'} ne "$PASSWD") {&error('パスワードが違います');}	

	&jikan(0);

	print "Content-type: text/html\n";
	print "\n";
	print <<"EOM";
<html><head><title>$TITLE</title>
<style type="text/css">$style</style></head>
<body bgcolor="#FFFFFF">
<table width="80%" align="center"><tr><td>
<center><span style='font-size:$TITLE_TEXT_SIZE pt'>管理ページ</span><br><br>
EOM

if($MODE eq 'IFRAME'){
	print "<a href=\"$HOME_URL\">ホームへ</a>\n";
}else{
	print "<a href=$CGI_SCRIPT?t$min=$sec>アンケート画面へ</a>"
}
	print <<"EOM";
</center>
<hr width=100% align=center>
<p>
EOM

	&lock if ($LOCK); 	# ロック開始

	open (IN,$LOG_FILE) || &error("ログファイルを開けません"); #データファイル読み込み
	@qset=<IN>;			#データを一行ごと配列qsetに入れる
	close (IN);

	chop(@qset);			#qsetの最後の改行を取り除く

	print "ダブルクリックするとデータが失われる恐れがあります。<br>\nそれぞれの実行ボタンは1回だけクリックしてください。<br>\n";
	$qkazu=$qset[0];
	$qset[0]="$qset[0]\n";
	$tocans=0;			#表示済み選択肢数

	#質問の消去
	foreach $x (@delque){
		splice(@qset,$x,1);
		$qkazu--;
		$qset[0]="$qkazu\n";
	}

	#質問の追加
	if ($in{'addque'} ne ''){
		$qkazu++;
		$qset[0]="$qkazu\n";		#質問数の更新
		splice(@qset,1+$in{'ajun'},0,"$in{'addque'},0,$in{'aadd'},$in{'rc'},"); 
	}

	for ($i=1;$i<=$qkazu;$i++){		#質問ごとの処理		
		@qtemp=split(/,/,$qset[$i]);	#行内データを｢,｣で分けて配列qtempに格納	
		$add=$in{"add$i"},$tothyo=0;	

		if ($in{'qubunc'} eq $i){	#質問文の更新
			$qtemp[0] = $in{'qubun'};
		}		
		if ($in{'qtyc'} eq $i){		#回答方法の更新
			$qtemp[2] = $in{'aadd'};
			$qtemp[3] = $in{'rc'};
			if ($in{'sort'} && $qtemp[3] !~ m/sort/){
				$qtemp[3] .= '=sort';	#ソート有無の変更
			}elsif (!$in{'sort'}){
				$qtemp[3] =~ s/=sort//;
			}
			if ($in{'sosu'} && $qtemp[3] !~ m/sosu/){
				$qtemp[3] .= '=sosu';	#投票総数表示有無の変更
			}elsif (!$in{'sort'}){
				$qtemp[3] =~ s/=sosu//;
			}
		}		

		print "\n<hr width=80% align=left>";

		print "<br><p><b>◆[質問内容]</b><br>";
		print "<form action=$CGI_SCRIPT method=$METHOD>\n";
		print "<input type=hidden name=mode value=manage>\n";
		print "<input type=hidden name=pass value=$PASSWD>\n";
		print "<input type=hidden name=k_mode value=bunhen>\n";
		print "\n<p>&nbsp;&nbsp;&nbsp;現在の質問内容：<input type=text size=50 name=qubun value=\"$qtemp[0]\">\n";
		print "<input type=hidden name=qubunc value=$i>\n";
		print "<input type=submit value='変更'><br>\n";
		print "&nbsp;&nbsp;&nbsp;<small> ↑この項目はタグ用の\"&lt;\"と\"=\"が使用可\能\です。</small>\n";
		print "</form>\n\n";
		print "<form action=$CGI_SCRIPT method=$METHOD>\n";
		print "<input type=hidden name=mode value=manage>\n";
		print "<input type=hidden name=pass value=$PASSWD>\n";
		print "<input type=submit value='この質問全体を消去'>\n";
		if ($qtemp[1] == 0){	#この質問に選択肢がない場合
		print "<input type=hidden name=delque value=$i>\n";
		}else{			#この質問の選択肢が残っている場合
		print "<input type=hidden name=delque value=\"muko\">\n";
		print "<small>「質問文削除不可」</small>\n";
		}
		print "</form>\n\n";


		print "<form action=$CGI_SCRIPT method=$METHOD>\n";
		print "<input type=hidden name=mode value=manage>\n";
		print "<input type=hidden name=pass value=$PASSWD>\n";
		print "<input type=hidden name=qtyc value=$i>\n";
		print "<br><p><b>◆[\表\示方法]</b><br><br>";

		print "<input type=hidden name=rc value=radio>\n";

		if($qtemp[3] =~ m/sort/){
			print "&nbsp;&nbsp;&nbsp;<input type=radio name=sort value=1 checked><b><font color=\"blue\">票数の多い順に\表\示</font></b>\n";
			print "&nbsp;&nbsp;&nbsp;<input type=radio name=sort value=0>管理者による選択肢の追加順に\表\示<br>\n";
		}else{
			print "&nbsp;&nbsp;&nbsp;<input type=radio name=sort value=1>票数の多い順に\表\示\n";
			print "&nbsp;&nbsp;&nbsp;<input type=radio name=sort value=0 checked><b><font color=\"blue\">管理者による選択肢の追加順に\表\示</font></b><br>\n";
		}
		if ($qtemp[3] =~ m/sosu/){
			print "&nbsp;&nbsp;&nbsp;<input type=radio name=sosu value=1 checked><b><font color=\"blue\">投票総数を\表\示する</font></b>\n";
			print "&nbsp;&nbsp;&nbsp;<input type=radio name=sosu value=0>投票総数を\表\示しない<br>\n";
		}else{	
			print "&nbsp;&nbsp;&nbsp;<input type=radio name=sosu value=1>投票総数を\表\示する\n";
			print "&nbsp;&nbsp;&nbsp;<input type=radio name=sosu value=0 checked><b><font color=\"blue\">投票総数を\表\示しない</font></b><br>\n";
		}
		print "&nbsp;&nbsp;&nbsp;<input type=submit value='変更'>\n";
		print "</form>\n\n";

		print "<br><p><b>◆[票数／選択肢]</b><br><br>";

		for ($j=1;$j<=$qtemp[1];$j++){			#既存の選択肢への処理
			($anstmp[$j],$hyotmp[$j])=split(/=/,$qtemp[$j+3]);
			$done=0;

			if ($in{'qrset'} eq $i){
				$hyotmp[$j] = 0;	#票数をリセット
			}

			if ($add eq $anstmp[$j] ){
				$add='';			#追加する選択肢が既存
			}

			$qtemp[$j+3]="$anstmp[$j]=$hyotmp[$j]";	#更新データを格納
			$tothyo += $hyotmp[$j];			#質問ごと総票数更新

			foreach $x (@del){
				if ("$i/$j" eq $x && $chfl == 0){
					splice(@qtemp,$j+3,1);	#選択肢の除去
					$tothyo -= $hyotmp[$j];
					$hyotmp[$j]=0;
					$qtemp[1]--;
					$j--,$chfl=1;
				}
			}
		}

		if ($in{$i} eq 'add' && $add ne ''){		#選択肢追加
			$qtemp[$j+3]="$add=0";
			$anstmp[$j]=$add,$hyotmp[$j]=0,$qtemp[1]++,$j++;
		}

		print "\n&nbsp;&nbsp;&nbsp;投票総数 $tothyo 票";	#投票総数表示
		print "\n<table border=1 cellspacing=0 bgcolor='#ffffff'>";	#結果表示
		for ($j=1;$j<=$qtemp[1];$j++){
			$tocans++;
			$wari[$j]=0;
			if ($tothyo>0) {
				$wari[$j]=sprintf("%.1f",$hyotmp[$j]*100/$tothyo);
			}
			$width = int ( 3 * $wari[$j] );
			print "\n<tr style='font-size:9pt;'><td>$anstmp[$j]</td>";
			print "<td>$hyotmp[$j] 票</td>";
			if ($qtemp[3] =~ m/radio/ || $qtemp[3] =~ m/select/){
				print "<td>$wari[$j] %</td>";
			}
			print "<td><img src=$GRAPH_IMAGE height=10 width=$width></td>\n";
			print "<td>\n";
			print "<form action=$CGI_SCRIPT method=$METHOD>\n";
			print "<input type=hidden name=mode value=manage>\n";
			print "<input type=hidden name=pass value=$PASSWD>\n";
			print "<input type=submit value='削除'>\n";
			print "<input type=hidden name=del value=$i/$j>\n";
			print "</form></td></tr>\n";
		}
		print "</table>\n\n";

		print "<form action=$CGI_SCRIPT method=$METHOD>\n";
		print "<input type=hidden name=mode value=manage>\n";
		print "<input type=hidden name=pass value=$PASSWD>\n";
		print "<input type=hidden name=qrset value=$i>\n";
		print "&nbsp;&nbsp;&nbsp;<input type=submit value='票数リセット'>\n";
		print "<small>この質問のすべての票が0に戻ります</small>\n";
		print "</form>\n";

		print "<form action=$CGI_SCRIPT method=$METHOD>\n";
		print "<input type=hidden name=mode value=manage>\n";
		print "<input type=hidden name=pass value=$PASSWD>\n";
		print "&nbsp;&nbsp;&nbsp;新しい選択肢を追加する<small>(既存の選択肢の最後に追加されます)</small>\n";
		print "<input type=hidden name=$i value=add>\n";
		print "<input type=text size=20 name=add$i>\n";
		print "<input type=submit value='追加'><br>\n";
		print "&nbsp;&nbsp;&nbsp;<small> ↑この項目は管理者ページでの追加のみタグ用の\"&lt;\"が使用可\能\です。ただし\"=\"は使用できません。</small>\n";
		print "</form>\n";

		push(@qtemp,"\n");		#行末に改行をつける
		$qset[$i]=join(",",@qtemp);	#行データを更新する
	}					#質問ごとの処理の終了

	# 質問追加部分
	if($qkazu==0){		# 質問が一つもない場合。
		print "<hr width=75% align=left>\n";
		print "<p><b>◆[質問項目作成]</b><br>";
		print "<form action=$CGI_SCRIPT method=$METHOD>\n";
		print "<input type=hidden name=mode value=manage>\n";
		print "<input type=hidden name=pass value=$PASSWD>\n";
		print "<input type=hidden name=k_mode value=bunadd>\n";
		print "<input type=hidden name=ajun value=0>\n";
		
		print "&nbsp;&nbsp;&nbsp;質問文\n";
		print "<input type=text size=50 name=addque><br>\n";
		print "<input type=hidden name=rc value=radio>\n";
		print "&nbsp;&nbsp;&nbsp;<input type=radio name=sort value=1>票数の多い順に並び替えて\表\示\n";
		print "<input type=radio name=sort value=0 checked>管理者による選択肢の追加順に\表\示<br>\n";
		print "&nbsp;&nbsp;&nbsp;<input type=radio name=sosu value=1>投票総数を\表\示する\n";
		print "<input type=radio name=sosu value=0 checked>投票総数を\表\示しない<br>\n";
		print "&nbsp;&nbsp;&nbsp;<input type=submit value='作成'>&nbsp;&nbsp;<font color=\"red\">＊選択肢は質問作成後に追加してください。</font>\n";
		print "</form>\n\n";
	}

	#メッセージの処理
	$host = $ENV{'REMOTE_HOST'};
	$addr = $ENV{'REMOTE_ADDR'};
	if ($host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; }
 
	@tnaiyo = split(/<br>/,$qset[$qkazu+1],$MAX_MESSAGE_COUNT+1);
	if($in{'toko'} ne ''){			#メッセージ更新
		unshift (@tnaiyo,"<b>$in{'tname'}</b>/$in{'toko'} [$jikanl][$host]");
	} 
	splice (@tnaiyo,$MAX_MESSAGE_COUNT);
	
	if ($in{'todel'} ne ''){
		$tnaiyocp = $tnaiyo[$in{'todel'}-1];
		$tnaiyocp =~ tr/<> //d; 
		if ($tnaiyocp eq $in{'todelnai'}){
			splice (@tnaiyo,$in{'todel'}-1,1);	#投稿内容の削除
		}else{
			print "<font color=red>新規投稿がありました。確認してください。データ保護のため投稿を削除しません。</font>\n";
		}
	}

	$tnkazu = @tnaiyo;
	if ($MAX_MESSAGE_COUNT > 0){
		print "<br><p><b>◆[ご意見・ご感想]</b><br>\n";
		if ($tnkazu == 0){
			print "&nbsp;&nbsp;&nbsp;(現在、コメントが存在しません)\n";
		}
	}

	for ($i=1;$i<=$tnkazu;$i++){
		print "<form action=$CGI_SCRIPT method=$METHOD>\n";
		print "<input type=hidden name=mode value=manage>\n";
		print "<input type=hidden name=pass value=$PASSWD>\n";
		print "&nbsp;&nbsp;&nbsp;<input type=submit value='この発言を削除'>\n";
		print "<small>$tnaiyo[$i-1]</small>\n";			#メッセージ表示
		print "<input type=hidden name=todel value=$i>\n"; 
		$tnaiyocp = $tnaiyo[$i-1];
		$tnaiyocp =~ tr/<> //d; 
		print "<input type=hidden name=todelnai value=$tnaiyocp>\n"; 
		print "</form>\n\n";
	}

	$qset[$qkazu+1] = join('<br>',@tnaiyo);
	$qset[$qkazu+1] = "$qset[$qkazu+1]\n";

	$qset[$qkazu+2]="$qset[$qkazu+2]\n";
	$qset[$qkazu+3]="$qset[$qkazu+3]\n";		#末データ処理
	$qset[$qkazu+4]="$qset[$qkazu+4]\n";		#末データ処理
	$qset[$qkazu+5]="$qset[$qkazu+5]\n";		#末データ処理
	$qset[$qkazu+6]="$qset[$qkazu+6]\n";		#末データ処理
	$qset[$qkazu+7]="$qset[$qkazu+7]\n";		#末データ処理

	#データファイル更新
	open (OUT,">$LOG_FILE") || &error("ログファイルを開けません");				
	print OUT @qset;
	close(OUT);

	&unlock if ($LOCK); # ロック解除

	&foot;
}

#----------------------------------
#入力情報の解析
#----------------------------------
sub decode{
	if ($ENV{'REQUEST_METHOD'} eq "POST") {
		read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
	} else { $buffer = $ENV{'QUERY_STRING'}; }

	open (IN,"$LOG_FILE") || &error("ログファイルを開けません");
	@qset=<IN>;
	close (IN);

	chop($qset[0]);

	for($i=1;$i<=$qset[0];$i++){	#解答チェックのための配列
		$input[$i] = 0;
		$addc[$i] = 0;
	}

	@pairs = split(/&/, $buffer);	#入力データごとに分ける
	foreach $pair (@pairs) {
		($name,$value) = split(/=/, $pair);	#nameとvalueに分ける
		$value =~ tr/+/ /d;			#空白変換
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
		$value =~ tr/\n/ /d;			#改行拒否
		$value =~ s/,/&sbquo;/g;		#｢,｣拒否
		if ($in{'k_mode'} ne 'bunhen'){$value =~ s/=/&#61;/g;}#｢=｣拒否
		if ($in{'mode'} ne 'manage'){$value =~ s/</&lt;/g;}#｢<｣拒否
		&jcode'convert(*value,"$KANJI_CODE");	#漢字変換コード指定

		$in{$name} = $value;
			
		if ($name <= $qset[0] && $value ne 'none'){	#質問への解答を解析
			if( $value ne 'add'){
				push (@ans,$value);	#既存の選択肢への投票
				if ($addc[$name] == 0){ #選択肢追加情報無し
					$addc[$name] = 0;
				}
			}else{
				$addc[$name] = 1 ;	#選択肢の追加
			}
		$input[$name]=1;
		}
		if ($name > $qset[0]){ #回答しようとした質問がすでに削除済み
			&error('回答しようとした質問が削除されています。確認してください。');
		}

		if ($name eq 'del'){
			push (@del,$value);		#選択肢の削除
		}

		if ($name eq 'delque'){
			if ($value eq 'muko'){
			&error('消去したい質問の選択肢をすべて削除してから実行してください。<br><br>
(既にすべての選択肢が削除されている場合、1回 票数リセットを行ってみてください。)');
			}else{
			push (@delque,$value);		#質問の消去
			}
		}
	}

	if ($in{'mode'} eq 'vote'){			#回答情報の不備をチェック
		for ($i=1;$i<=$qset[0];$i++){
			if ($input[$i] != 1){
				&error("質問の回答が選択されていません");
			}
		}
		if ($in{'tname'} eq '' && $in{'toko'} ne ''){
			&error('「お名前」を記入して下さい');
		}
	}
	if ($in{'mode'} eq 'manage'){			#回答情報の不備をチェック
		for ($i=1;$i<=$qset[0];$i++){
			if ($addc[$i] == 1 && $in{"add$i"} eq ''){
				&error("質問の選択肢が未記入です");
			}
		}
		if ($in{'k_mode'} eq 'bunadd' && $in{'addque'} eq ''){
			&error("追加する質問文に内容がありません");
		}	
	}
	$mode = $in{'mode'};
}

#----------------------------------
#時間読み込み
#----------------------------------
sub jikan{
	#更新履歴用
	($sec,$min,$hour,$mday,$mon,$year,) = localtime;
	$mon++;
	$mon = sprintf("%.2d",$mon);
	$mday = sprintf("%.2d",$mday);
	$hour = sprintf("%.2d",$hour);
	$min = sprintf("%.2d",$min);
	$sec = sprintf("%.2d",$sec);

	$year += 1900;

	$jikanl = "$year/$mon/$mday $hour:$min:$sec";

}	

#----------------------------------
#ヘッダ表示
#----------------------------------
sub head{
	print "Content-type: text/html\n";
	print "\n";
	print <<"EOM";
<html><head><title>$TITLE</title>
<style type="text/css">$style</style></head>
<body bgcolor="$BG_COLOR" background="$BG_IMAGE" link="$LINK" vlink="$VLINK" alink="$ALINK">
EOM
	if($MODE ne 'IFRAME'){
		print "<table width=\"80%\" align=\"center\"><tr><td>\n";
	}


}

#----------------------------------
#フッタ表示
#----------------------------------
sub foot{

	if($MODE ne 'IFRAME'){
		print "<hr width=100% align=center>\n";
		print "</td></tr></table>\n";
	}
	print <<"EOM";
</body></html>
EOM
	exit;
}

#----------------------------------------------------
#  管理メニューログイン画面表示 2005-07-06 sasaki add
#----------------------------------------------------
sub login{

	&head;					#ヘッダ出力
print <<"EOM";
<span style='font-size:9pt;color:$FONT_COLOR'>・管理画面へ移動します。パスワードを入力し「ログイン」ボタンを押して下さい。</span>
<div align=\"left\"><form action=\"$CGI_SCRIPT\" method=\"$METHOD\">
<input type=hidden name=mode value=\"manage\">
<input type=password name=pass size=8>
<input type=submit value=\"ログイン\">
</form></div>
EOM
	&foot;					#フッタ表示
}

#----------------------------------
#  ロック処理  
#----------------------------------
sub lock {
	local($retry, $mtime);

	# 1分以上古いロックは削除する
	if (-e $LOCK_FILE) {
		($mtime) = (stat($LOCK_FILE))[9];
		if ($mtime < time - 60) { &unlock; }
	}
	# ロック処理
	$retry=5;
	while (!mkdir($LOCK_FILE, 0755)) {
		if (--$retry <= 0) { &error('ロックされています。<BR>時間を置いて再度お試し下さい。'); }
		sleep(1);
	}
	$lockflag=1;
}

#----------------------------------
#  ロック解除  
#----------------------------------
sub unlock {
	rmdir($LOCK_FILE);
	$lockflag=0;
}

#----------------------------------
#エラー処理
#----------------------------------
sub error{
	&unlock if ($lockflag); # ロック解除
	&jikan(0);
	
	print "Content-type: text/html\n";
	print "\n";
	print <<"EOM";
<html><head><title>$TITLE</title>
<style type="text/css">$style</style></head>
<body bgcolor="$BG_COLOR"  link="$LINK" vlink="$VLINK" alink="$ALINK">
<center><span style='font-size:$TITLE_TEXT_SIZE pt;color:$FONT_COLOR'>ERROR</span>
<hr width=100% align=center>
<p><span style='font-size:9pt;color:#ff0000'><b>$_[0]</b></span>
<p><span style='font-size:9pt'><a href="javascript:history.back()">戻る</a></span>
<!--<p><a href=$CGI_SCRIPT?t$min=$sec>アンケート画面へ</a></center>-->
EOM

	&foot;
}
