#!/usr/bin/perl

# ログファイル
$sougoufile = "./sougou.dat";

# 1日間記録ファイル
$dayfile = "./day.txt";

# 蓄積1日間記録ディレクトリ
$tdaydirect = "./tday";

# 1ヶ月間記録ファイル
$monfile = "./mon.txt";

# 蓄積 1ヶ月間記録ファイル
$tmonfile = "./tmon.txt";

print "Content-type: text/html\n\n";

#----------------------------------------------------------
$insuu=$ENV{'QUERY_STRING'};
($kikan,$jouhou,$inday,$inmon,$inyear)=split(/&/,$insuu);

($kikan0,$kikan)=split(/=/,$kikan);
($jouhou0,$jouhou)=split(/=/,$jouhou);
($inday0,$inday)=split(/=/,$inday);
($inmon0,$inmon)=split(/=/,$inmon);
($inyear0,$inyear)=split(/=/,$inyear);

$jouhou="count";

#----------------------------------------------------------
# 日時を取得
$ENV{'TZ'} = "JST-9";
($sec, $min, $hour, $mday, $mon, $year,$wday, $yday, $isdst) = localtime(time());
@week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
$year += 1900;
$mon++;
$youbi = $week[$wday];
#----------------------------------------------------------
# 引数がないときは今の時間を入れる。
if($kikan eq ""){$kikan="day";}
if($inday eq ""){$inday=$mday;}
if($inmon eq ""){$inmon=$mon;}
if($inyear eq ""){$inyear=$year;}
#----------------------------------------------------------
# 総合カウントファイルから読み込み
open(IN,"$sougoufile");
$sougoudata = <IN>;
close(IN);

#----------------------------------------------------------
# (１〜３１）１日カウントファイルから読み込み
open(IN,"$tdaydirect/tday$inmon.txt");
@tdaydata[1..31] = <IN>;
close(IN);
#----------------------------------------------------------
# (今日）１日カウントファイルから読み込み
open(IN,"$dayfile");
$daydata = <IN>;
close(IN);
#----------------------------------------------------------
# １ヶ月カウントファイルから読み込み
open(IN,"$monfile");
$mondata = <IN>;
close(IN);
#----------------------------------------------------------
#蓄積１月カウントファイルから読み込み
open(IN,"$tmonfile");
#蓄積月ファイル数を初期化
$tmonkazu=1;	
while($tmondata[$tmonkazu] = <IN>){
	#蓄積月ファイル数
	$tmonkazu++;
}
close(IN);
#蓄積月ファイル数を調整
$tmonkazu--;

#----------------------------------------------------------
# 総合カウントファイルを分解(総合カウント、１日カウント、日付)
($sougoucount,$oneday,$zenkaimday) = split(/,/, $sougoudata);

#----------------------------------------------------------
# 蓄積１日カウントファイルの処理(分割後、本来の配列に入れる。）
for ($i=1;$i<=31;$i++){
	($dayday,$daysoucount,@indaycount[0..23]) = split(/,/, $tdaydata[$i]);

	#もし参照したものと日が同じならループを抜ける。
	if ($dayday==$inday){$i=31;}
	#もし日が違うならデータ破棄
	else{@indaycount[0..23]=(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);}
}

#----------------------------------------------------------
#もし今月を参照したら今日のカウントを蓄積の方に入れる。(年と月が最初に入っているので分割、統合する
if (($inday==$mday)&&($inmon==$mon)){
	
	($dayyear,$daymon,$dayday,$daysoucount,@indaycount[0..23]) = split(/,/, $daydata);
}
#----------------------------------------------------------
#日アクセスが””のとき空白を入れる。
for($i=0;$i<=23;$i++){
	if ($indaycount[$i] eq ""){$indaycount[$i]="　";}
}
#----------------------------------------------------------
# 蓄積１ヶ月カウントファイルを処理(分割後、本来の配列に入れる。）
# ファイルの数だけ調べる
for ($i=1;$i<=$tmonkazu;$i++){
	#とりあえず分解して年と月を調べる。
	($monyear,$monmon,$monsoucount,@inmoncount[1..31]) = split(/,/, $tmondata[$i]);

	#もし年と月が同じならループを抜ける。
	if (($monyear==$inyear) && ($monmon==$inmon)){$i=$tmonkazu;}
	#もし年と月が違うならデータ破棄
	else{@inmoncount[1..31]=(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);}
}
#----------------------------------------------------------
# もし今月を参照したとき今月の１ヶ月カウントファイル入れる
if (($inyear==$year)&&($inmon==$mon)){
	($monyear,$monmon,$monsoucount,@inmoncount[1..31]) = split(/,/, $mondata);
}
#----------------------------------------------------------
#月アクセスが””のとき空白を入れる。
for($i=1;$i<=31;$i++){
	if ($inmoncount[$i] eq ""){$inmoncount[$i]="　";}
}

#----------------------------------------------------------
# 一日の曜日を取得
$tuki=$inmon;
$tosi=$inyear;
@hi[1..12]=(31,28,31,30,31,30,31,31,30,31,30,31);

if ($tosi % 4 ==0){
	if($tosi % 100 ==0){
		if($tosi %400==0){$hi[2]=29;}
	}
	else{$hi[2]=29;}
}

$allhi = 0;
if ($tuki >= 2){
	for($i = 1;$i<= $tuki - 1;$i++){
		$allhi = $allhi + $hi[$i];
	}
}

$youbim1 = $tosi + $allhi;

$youbim1 = $youbim1 + int($tosi / 4);
$youbim1 = $youbim1 - int($tosi / 100);
$youbim1 = $youbim1 + int($tosi / 400);

if ($hi[2]==29){$youbim1--;}

$youbim1 = $youbim1 % 7;
#----------------------------------------------------------
#先月の年と月を選択
$beforemon=$inmon-1;
$beforeyear=$inyear;
if ($beforemon<1){$beforemon=12;$beforeyear--;}

#来月の年と月を選択
$aftermon=$inmon+1;
$afteryear=$inyear;
if ($aftermon>12){$aftermon=1;$afteryear++;}

#日のグラフの最大高さを検出
for($i=0;$i<=23;$i++){
	if ($daygraphsaidai <= $indaycount[$i]){
		$daygraphsaidai = $indaycount[$i];
	}
}

#日のグラフの幅を決める(カウントの最大が０以上のときだけ）
if ($daygraphsaidai>0){
	for($i=0;$i<=23;$i++){
		$daygraph[$i]=$indaycount[$i]/$daygraphsaidai*100;
	}
}

#月のグラフの最大高さを検出
for($i=1;$i<=31;$i++){
	if ($mongraphsaidai <= $inmoncount[$i]){
		$mongraphsaidai = $inmoncount[$i];
	}
}

#月のグラフの幅を決める(カウントの最大が０以上のときだけ）
if ($mongraphsaidai>0){
	for($i=1;$i<=31;$i++){
		$mongraph[$i]=$inmoncount[$i]/$mongraphsaidai*100;
	}
}

#----------------------------------------------------------
#解析を表示。
&html();
#----------------------------------------------------------
sub html(){

	print"<table border='1'><tbody>";
	print"<tr><td><font size='2'>アクセス解析</font></td>";
	print"<td align='right'><font size='2'><a href='./index.html'>index</a></font></tr>";
	print"<tr><td valign='top'>";
		#----------------------------------------------------------
		#カレンダーを表示しに行く
		&karenda();
		print"</td><td>";
		#----------------------------------------------------------
		#解析を表示しに行く
		&kaiseki();
		#----------------------------------------------------------
	print"</td></tr>";
	print"<tr><td align='right' colspan='2'><font size='2'><b>Copyright (C) 2003 <a href='http://www.tok2.com/home2/n0000/top.html'>トライクロス\ソ\フト</a></b></font></td></tr>";
	print"</tbody></table>";
}
#----------------------------------------------------------
#カレンダーを表示	
sub karenda(){

	print"<table border='1'><tbody>";
	print"<tr>";
	print"<td><a href='kaiseki.cgi?kikan=$kikan&jouhou=count&inday=$inday&inmon=$beforemon&inyear=$beforeyear'>←</a></td>";
	print"<td colspan='5'>$inyear年 ";
	print"<a href='kaiseki.cgi?kikan=mon&jouhou=count&inday=$inday&inmon=$inmon&inyear=$year'>$inmon月</a></td>";
	print"<td><a href='kaiseki.cgi?kikan=$kikan&jouhou=count&inday=$inday&inmon=$aftermon&inyear=$afteryear'>→</a></td>";
	print"</tr>";
	print"<tr><td>日</td><td>月</td><td>火</td><td>水</td><td>木</td><td>金</td><td>土</td></tr>";
	print"<tr>";

	for ($i=1;$i<=$youbim1;$i++){print"<td>　</td>";}

		for($i=1;$i<=$hi[$inmon];$i++){
		print"<td align='right'";
		#期間が日のとき
		if($kikan eq "day"){
			#今見ている日付の色を変える。
			if ($i==$inday){print"bgcolor='#99ccff'";}
		}
		#期間が月のとき
		if($kikan eq "mon"){
			#すべて日付の色を変える。
			print"bgcolor='#99ccff'";
		}
		print"><a href='kaiseki.cgi?kikan=day&jouhou=count&inday=$i&inmon=$inmon&inyear=$inyear'>$i</a></td>";
		if ((($youbim1 + $i ) % 7) == 0){print"</tr><tr>";}
	}
	print"</tr>";
	print"</tbody></table>";
}
#----------------------------------------------------------
#解析を表示
sub kaiseki(){
	#期間がdayのとき
	if ($kikan eq "day"){&kikanday();}
	if ($kikan eq "mon"){&kikanmon();}
}
#----------------------------------------------------------
#期間がdayのとき
sub kikanday(){
print <<_HTML;
<table border='1'>
<tbody>
_HTML

print "<tr><td><font size='2'>$inday日</font></td>";
print "<td colspan='2' align='right'><font size='2'>総アクセス$daysoucount</font></td></tr>";
print "<tr><td><font size='2'>時間</font></td>";
print"<td><font size='2'>アクセス</font></td>";
print"<td><font size='2'>グラフ</font></td></tr>";


for($i=0;$i<=23;$i++){
	
	print"<tr><td><font size='2'>$i</font></td>";
	print"<td><font size='2'>$indaycount[$i]</font></td>";
	print"<td><img src='./graph.gif' width='$daygraph[$i]' height='6'></td>";
	print"</tr>";
	
}

print <<_HTML;

</tbody>
</table>


_HTML
}
#----------------------------------------------------------
#期間がmonのとき
sub kikanmon(){
print <<_HTML;
<table border='1'>
<tbody>
_HTML

print "<tr><td><font size='2'>$inmon月</font></td>";
print "<td colspan='2' align='right'><font size='2'>総アクセス$monsoucount</font></td></tr>";
print "<tr><td><font size='2'>日付</font></td>";
print"<td><font size='2'>アクセス</font></td>";
print"<td><font size='2'>グラフ</font></td></tr>";


for($i=1;$i<=$hi[$inmon];$i++){
	

	print"<tr><td><font size='2'>$i</font></td>";
	print"<td><font size='2'>$inmoncount[$i]</font></td>";
	print"<td><img src='./graph.gif' width='$mongraph[$i]' height='6'></td>";
	print"</tr>";

}

print <<_HTML;

</tbody>
</table>


_HTML
}