#!/usr/local/bin/perl

############################################################################
#                                                                          #
# form.cgi                         Version 1.0                             #
# Written by Keiichi Nishimura     k1-nishi@y1.netpia.ne.jp                #
# Created 2004/04/23                                                       #
#    機能：$FORM{'template'}で指定したファイル中の%%%xxx%%%                #
#          を$FORM{'xxx'}で置き換えて画面出力                              #
#    <修正履歴>                                                            #
#        2003/0x/xx  xxxxxxxxxxxxxxx  		    1.1 Keiichi Nishimura      #
#                                                                          #
############################################################################

############################################################################
# サブルーチンの読み込み                                                   #
############################################################################
require './parsform.pl';	# 入力内容解析
require './template.pl';	# テンプレートファイル置換
require 'cgi-bin/jcode.pl';	# コード変換
require './date_sub.pl';	# 日付関連サブルーチン

############################################################################
# 設定ファイル読み込み                                                     #
############################################################################
#◆祝祭日設定ファイル
$HOLIDAY_FILE = "./holiday.csv";
#◆曜日別集配締切時刻設定ファイル
$TIME_LIMIT_FILE = "./time_limit.csv";

############################################################################
# 入力内容の解析                                                           #
############################################################################
if (!(&parse_form)) {
    &display_message("エラー","$Error_Message");
}

############################################################################
# templateの妥当性チェック                                                 #
############################################################################
if ($FORM{'template'} eq '') {
	&display_message("エラー","templateが指定されていません。");
}
if (!(-e $FORM{'template'})) {
	&display_message("エラー","$FORM{'template'}が存在しません。");
}

############################################################################
# 日付算出                                                                 #
############################################################################
($hour, $mday, $mon, $year) = (localtime)[2, 3, 4, 5]; 
$year += 1900;	# 年
$mon++;			# 月

# 今日は平日か判定
$rtn  = &check_holiday("$year","$mon","$mday");
$rtn2 = &GetWeekDay("$year","$mon","$mday");

# 曜日別締切時刻ファイル読込
if (!open(FILE,"$TIME_LIMIT_FILE")) {
	&display_message('エラー',"曜日別集配締切時刻設定ファイルが読み出せません.");
}
@time_limit_array = ('16','16','16','16','16','16','16');		# (日,・・・,土)
#-------------------------
while (<FILE>) {
	#タブコードを無視
	s/¥t//g;
	#行頭がシャープまたは空行の場合は次へ
	if (/^(#|¥n)/) { next; }
	#改行コードを切り落し
	chomp;
	#所定のフォーマットに合っているか？
	if (/(¥d*)¥,(¥d+)¥,(.+)/) {
		# 年が未指定の場合はチェックしない
		$time_limit_array[$1] = $2;
	} else {
		&display_message('エラー',"祝祭日設定ファイルのデータが不正です($_)")
	}
}
close(FILE);
	
#----------------------------------------

#if (($rtn == 1) or ($rtn2 == 0) or ($rtn2 == 7)) {
if (($rtn == 1) or ($rtn2 == 0)) {
	# 日もしくは休日の場合は翌々営業日を算出
	$i = 0;
	$j = 0;
	do {
		$i++;
		($yy, $mm, $dd) = &add_date("$i");
		$rtn  = &check_holiday("$yy","$mm","$dd");
		$rtn2 = &GetWeekDay("$yy","$mm","$dd");
		if (($rtn == 1) or ($rtn2 == 0)) {
		} else {
		    $j++;
		}
	} while ( $j < 2 );
}else {
	# 平日
	if ($hour < $time_limit_array[$rtn2]) {
	# if ($hour < 16) {
		# 締切時刻以前(翌営業日を算出)
		$k = 0;
	} else {
		# 締切時刻以降(翌々営業日を算出)
		$k = 2;
	}
	$i = 0;
	$j = 0;
	do {
		$i++;
		($yy, $mm, $dd) = &add_date("$i");
		$rtn  = &check_holiday("$yy","$mm","$dd");
		$rtn2 = &GetWeekDay("$yy","$mm","$dd");
		if (($rtn == 1) or ($rtn2 == 0)) {
		} else {
		    $j++;
		}
	} while ( $j < $k );
}

# 日付のセレクトボックスセット
$FORM{'this_year'} 	= $yy;
$FORM{'next_year'} 	= $yy + 1;
$FORM{"mon_$mm"} 	= "SELECTED";
$FORM{"mday_$dd"} 	= "SELECTED";

$FORM{'date'} = "$yy/$mm/$dd";

############################################################################
# テンプレートを置換し画面出力                                             #
############################################################################
if (!(&parse_template("$FORM{'template'}"))) {
	&display_message("エラー","$Error_Message");
}
exit;

############################################################################
# メッセージ表示サブルーチン                                               #
############################################################################
sub display_message {
# &display_message("msg0","msg1",･･･);
	local (@msg) = @_;
	local ($i);
    
	print "Content-type: text/html¥n¥n";

	print <<"EOF";
	<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
	<HTML>
	<HEAD>
	<TITLE></TITLE>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<SCRIPT language="JavaScript">
	<!--
	function PageBack(){ history.back(); }
	//-->
	</SCRIPT>
	</HEAD>
	<body>
	<center>
	<h1>$_[0]</h1>
EOF
	foreach $i (1 .. $#msg) { print "$msg[$i]¥n"; }

	print <<"EOF";
	<h3>[<A HREF="JavaScript:history.back()">戻る</A>]</h3>
	</center></body></html>
EOF
	exit;
}
