########追加########
# IIS対策
if ($ENV{'SERVER_SOFTWARE'} =~ /IIS/i) {
	local($chdir) = $0;
	$chdir =~ s/[^\\]*$//;
	chdir($chdir);
}
########追加########
#print "$ENV{'SERVER_PROTOCOL'} 200 OK\n" if($ENV{'PERLXS'}eq"PerlIS");
# オホーツクタウンサイトリンク集　作成日2003/08/18

#============#
#  基本設定  #
#============#
require './jcode.pl';							# 文字コードライブラリ取り込み
$title = "オホーツクWeb ～ オホーツクリンク";	# タイトル名
$script = "search-town.pl";						# スクリプト名
$logdir = "datafile";							# ログファイルを置くディレクトリ
$newfile = "./datafile/new.dat";				# 新着情報ファイル
$style_file = "/ow-pink.css";			# スタイルシート
$backimg = "../../img/st07_bg.gif"; 			# 背景画像ファイル
$titleimg = "../../img/ptitle-oho-link.gif"; 	# ページタイトル画像ファイル
$subtitleimg = "../../img/ow-ptitle-p.gif"; 	# ページタイトル画像ファイル
$catmax = 36;									# 最大文字色数X3
#登録サイト分類
@cat = ('3','オホーツク情報','#FF0066','4','北海道内情報','#669900','5','道外情報','#FFAA00');
# 登録方式
#  0 : 管理者が登録する
#  1 : ユーザに登録させる
$regist = 1;
$w_url = 0;										# 同一URLの二重登録を許可する (0=no 1=yes)
$home = "http://www.okhotsk.or.jp/okindex.shtml";	# 戻り先 (絶対パスなら http://から)
$max = 500;										# 最大登録件数 --> 登録件数がこれを超えると「新規登録」「新着情報」を停止
$method = 'POST';								# methodの形式 (POST or GET)
$msg_limit = 300;								# 紹介コメントの制限文字数（全角文字）
$newtime = 20;									# NEWアイコンの表示日数
$w_new = 10;									# 新着情報の最新表示件数
$p_view = 200;									# 登録内容の１ページ当りの表示数
$prtnum = 2;									# カテゴリの列数
$lockkey = 0;									# ロックファイル (0=no 1=symlink関数 2=open関数)
$lockfile = "./search-town.lock";				# ロックファイル名（フルパスだと / から記述する）
$mailing = 2;									# メール通知 (0=no 1=登録者のみ 2=登録者と管理者へ通知) --> sendmail必須
#$sendmail = '/usr/lib/sendmail';				# sendmailのパス
$admin_mail = 'town@okhotsk.or.jp';			# 管理者メールアドレス（メール通知する時）
#$admin_mail = 'kiyonaga@okhotsk.or.jp';			# 管理者メールアドレス（メール通知する時）
$admin_name = 'オホーツクWEB管理者';			# 管理者名（メール通知する時）
$admin_url = 'http://www.okhotsk.or.jp/';		# 管理者のURL（メール通知する時）

#add (S.Kiyo 02/04/08)##########################################################################
#$mailprog = "e:\\blatj\\blatj.exe";
$mailprog = '/blatj/blatj.exe';
$mserver = '-server mail.okhotsk.or.jp'; 
$sendtxt = "e:\\cgi-bin\\search-town\\mail.txt";
################################################################################################

# 登録アクセス拒否 --> 新規登録処理をホスト名から拒否
@deny = ('ppp*.xxx.co.jp','cache.xxx.com','*.xxx.yyy.zzz');

# 禁止ワード
@WORDS = ('ばか','バカ','アダルト','クレジット','キャッシング','出会い','少女','いけないこと','援助交際','援交','人妻','セフレ','セックス','若妻','マダム','メル友','セレブ','ハレンチ','団地妻','SEX','ＳＥＸ','痴態','性器','喘ぎ','主人様','ナンパ','SM','ＳＭ','ボディコン');

# 登録禁止URL
@EXCURL = ('all-0yen.net', '0mail.ath.cx', 's1.freexy.net', 'enko.s1.freexy.net', 'kinyou.org', '01.rknt.jp', 'peps.jp', 'sp-rank.com', 'ezra.jp', 'cyber-rank.jp', 'mega-r.com', 'o-oku.jp', 'mrank.tv', 'nusutto.jp', 'suppa.jp', 'okoshi-yasu.com', 'mmmproject.web.fc2.com','01s.rknt.jp','005shop.fc2web.com','1000man.biz','s1.shard.jp','kenshou.mobi','i-official.com','web.fc2.com','iinaa.net','jpn.org','sp-rank.com','gooside.com','ddo.jp');

# ホスト名取得モード
#   0 : $ENV{'REMOTE_HOST'} で取得できる場合
#   1 : gethostbyaddr で取得できる場合
$get_remotehost = 0;

# 以下は分類（ジャンル）の指定 --> 変数のカギ括弧内は 0 から連番で続ける
$parts[0] = "ショッピング";
$parts[1] = "情報";
$parts[2] = "店舗";
$parts[3] = "住まい";
$parts[4] = "観光";
$parts[5] = "グルメ";
$parts[6] = "美容ブライダル";
$parts[7] = "地域情報";
$parts[8] = "医療";
$parts[9] = "食品";
$parts[10] = "車両";
$parts[11] = "農業";
$parts[12] = "教育";
# 20061121 非表示
$parts[13] = "その他";

# サブカテゴリ (半角スペースで区切る）
$subpt[0] = "農産物 海産物 生き物 衣料 食品 雑貨おもちゃ";
$subpt[1] = "音楽・楽器 グルメ 写真 花 温泉 料理 教育関連";
$subpt[2] = "銃 スポーツ カジュアル ダイビング 家具";
$subpt[3] = "住宅 設備 ガーデニング リフォーム 建設機械関連 賃貸";
$subpt[4] = "ホテル 旅行 アウトドア 釣り";
$subpt[5] = "飲食店";
$subpt[6] = "美容室 ブライダル";
$subpt[7] = "団体 企業";
$subpt[8] = "団体 病院・医院 治療院";
$subpt[9] = "海産 農産 肉加工品 麺類";
$subpt[10] = "車両販売 運輸";
$subpt[11] = "JA 肥料 農業 やさい";
$subpt[12] = "保育幼稚園 高校";
# 20061121 非表示
$subpt[13] = "政治団体 政治";

# --- 環境設定
$bground = "";			# 壁紙（http://から記述）
$bgcolor = "#FFFFFF";		# 背景色
$text    = "#000000";		# 文字色
$link    = "#0000FF";		# リンク色（未訪問）
$vlink   = "#0000FF";		# リンク色（既訪問）
$alink   = "#DD0000";		# リンク色（訪問中）

# NEWアイコン
$newgif = "./new.gif";
$new_w = '16';		# 　〃　横サイズ
$new_h = '7';		# 　〃　縦サイズ

# お薦めアイコン
$recom  = './recom.gif';
$rec_w = '16';		# 　〃　横サイズ
$rec_h = '16';		# 　〃　縦サイズ
#============#
#  設定完了  #
#============#

&decode;
if ($mode eq 'new_sort') { &new_sort; }
if ($mode eq 'new_url') { &new_url; }
if ($mode eq 'regist') { &regist; }
if ($mode eq 'mente') { &mente; }
if ($mode eq 'do_mente') { &do_mente; }
if ($mode eq 'search') { &search; }
if ($mode eq 'part') { &part_view; }
&html_view;
exit;

#------------#
#  初期画面  #
#------------#
sub html_view {
	&header;
	print "<center>\n";
	print "<table border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"2\">\n";
	#カテゴリごとの登録件数をカウント
	foreach (0 .. $#parts) {
		$count = 0;
		open(IN,"$logdir\/$_\.dat") || &error("Open Error : $_\.dat");
		while ($line = <IN>) { $count++; }
		$datcount[$_] = $count;
	}
	$i = 0; $w = 0;
	#カテゴリの表示
	foreach (0 .. $#parts) {
		@SUB = split(/\s+/, $subpt[$_]);
		if (!$w) {print "<tr>";}
		if ($w <= $prtnum - 1) {
			print "<td valign=\"top\" width=\"50%\">\n";
			print "<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"2\" bgcolor=\"#000033\">\n";
			print "<tr>\n";
			print "<td valign=\"top\" width=\"100%\" bgcolor=\"#ffc0cb\"><font color=\"#FF0066\">▼ </font>";
			print "<font color=\"#006699\" size=\"2\"><a href=\"./cgi-bin/search-town/$script?mode=part&part=$_\">";
			print "$parts[$_]</a></font> ($datcount[$_])\n</td>\n";
			print "</tr>\n";
			print "<tr>\n";
			print "<td bgcolor=\"#FFFFFF\" valign=\"top\" height=\"43\">";
			$k=0;
			foreach $x (@SUB) {
				print "<a href=\"./cgi-bin/search-town/$script?mode=part&part=$_&subpt=$k\">[$x]</a>\n";
				$k++;
			}
			print "</td></tr></table></td>\n";
		}
		else {
			print "<td width=\"100%\">　</td>\n";
		}
		$i++; $w++;
		if ($i > $#parts || $w == $prtnum) { print "</tr>"; $w = 0; }
	}
	print "</table></center></body></html>";
#########################################################################
#<!-- 著作権表\示：削除改変禁止 -->
#- <a href="http://www.kent-web.com/" target="_top">Net Cruiser</a> -
#########################################################################
	exit;
}

#----------------#
#  新規登録画面  #
#----------------#
sub new_url {
	# ホスト名をチェック
	&get_host;
	local($flag)=0;
	foreach (@deny) {
		if ($_ eq "") { next; }
		$_ =~ s/\*/\.\*/g;
		if ($host =~ /$_/) { $flag=1; last; }
	}
	if ($flag) { &error("現在新規登録はできません。"); }

	&header;
	&page_top;
	&kiyaku;

#登録画面
	print <<"EOM";
<tr>
<td align=\"center\" bgcolor=\"#ffe4e1\">
<br><font size=\"3\"><b><font color=\"#FF0066\">■ </font>オホーツクリンク登録<font color=\"#FF0066\"> ■</font></b></font><br><br>
以下の登録フォームに必要事項を入力後、「登録する」ボタンで登録を実行してください。<br><br>
<form action="$script" method="$method">
<input type=hidden name=mode value="regist">
<table width="650" border="0" cellspacing="0" cellpadding="1" bgcolor="#000033">
<tr><td>
<table width="650" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF">
<tr><td>
<table border="0" cellspacing="2" cellpadding="2" width="600" bgcolor="#FFFFFF" align="center">
<tr><br>
<td width="150"><div align="left">登録される方のお名前</div></td>
<td><input type=text name=name size=50></td>
</tr>
<tr>
<td width="150"><div align="left">連絡先E-mail</div></td>
<td><input type=text name=email size=50><br>※お間違えの無いようにお願い致します。</td>
</tr>
<tr>
<td width="150"><div align="left">登録するサイトのURL</div></td>
<td><input type=text name=url size=80 value="http://"><br>※http://からご記入ください。</td>
</tr>
<tr>
<td width="150"><div align="left">パスワード</div></td>
<td><input type=password name=pwd size=10 maxlength=8><br><font color="#FF0066">※英数字で8文字以内でご記入ください。</font></td>
</tr>
<tr>
<td width="150"><div align="left">主分類／副分類</div></td>
<td><select name=part size=10>
EOM
	foreach (0 .. $#parts) {
		@SUB = split(/\s+/, $subpt[$_]);
		$k=0;
		foreach $x (@SUB) {
			print "<option value=\"$_\:$k\">$parts[$_] : $x\n";
			$k++;
		}
	}
	print <<"EOM"; 
</select>
</td></tr>
<tr>
<td width="150"><div align="left">登録するサイトのタイトル</div></td>
<td><input type=text name=sub size=60></td>
</tr>
<tr>
<td width="150"><div align="left">登録するサイトの紹介文</div></td>
<td><textarea name=msg cols=50 rows=3 wrap=soft></textarea><br>※全角$msg_limit文字前後でご記入ください。</td>
</tr>
<tr>
<td width="150"><div align="left">バナーURL</div></td>
<td><input type=text name=banner size=80 value=""><br>※バナー等ありましたらURLをご記入ください。</td>
</tr>
<tr>
<td width="150"><div align="left">登録サイト分類</div></td>
<td>
EOM
	if (!$color) {$color = $cat[2];}
	$k = 0;
	for ($i=0; $i<$catmax; $i+=3) {
		$catkey = $cat[$i];	$catname = $cat[$i+1]; $catcolor = $cat[$i+2];
		if (!$catcolor) {next;}
		if (!$k) {print "";}
		if ($color eq $catcolor) {$chk = ' checked';} else {$chk = '';}
		print "<input type=radio name=\"bunrui\" value=\"$catkey\"$chk>\n";
		if ($catname) {print "<font color=\"$catcolor\">■ </font>$catname　\n";}
		$k++;
		if ($k == $catcols) {print "</td></tr>"; $k = 0;}
	}
	if ($k) {print "</td></tr>";}
	print <<"EOM";
<tr> 
<td colspan=2><br><div align="center"><input type=submit value="登録する" name="submit">
<input type=reset value="リセット" name="reset"></div><br>
</td></tr></table></td></tr></table></td></tr></table></form></td></tr>
EOM
	&page_bottom;
	exit;
}

#------------#
#  登録処理  #
#------------#
sub regist {
	# ホスト名をチェック
	&get_host;
	local($flag)=0;
	foreach (@deny) {
		if ($_ eq "") { next; }
		$_ =~ s/\*/\.\*/g;
		if ($host =~ /$_/) { $flag=1; last; }
	}
	if ($flag) { &error("現在新規登録はできません。"); }

	# フォームチェック
	if ($FORM{'name'} eq '') { &error("登録される方のお名前の入力がありません。"); }
	if ($FORM{'email'} eq '' || $FORM{'email'} !~ /(.*)\@(.*)\.(.*)/) { &error("連絡先E-mailの入力内容が不正です。"); }
	if ($FORM{'url'} eq '') { &error("登録するサイトのURLの入力がありません。"); }
	if ($FORM{'pwd'} eq '') { &error("パスワードの入力がありません。"); }
	if ($FORM{'pwd'} =~ /\W/) { &error("パスワードに全角文字が含まれています。<br>半角の英数字で入力してください。"); }
	if ($FORM{'part'} eq '') { &error("分類の指定がありません。"); }
	if ($FORM{'sub'} eq '') { &error("登録するサイトのタイトル名の入力がありません。"); }
	if ($FORM{'msg'} eq '') { &error("登録するサイトの紹介文の入力がありません。"); }
	if (length($FORM{'msg'}) > $msg_limit*2) { &error("登録するサイトの紹介文が$msg_limit文字以上を超えています。"); }
	if ($FORM{'bunrui'} eq '') { &error("登録するサイトの地域分類が選択されていません。"); }

	# 日時の取得
	&get_time;

	# カテゴリ情報を分解
	($FORM{'part'},$subpt) = split(/:/, $FORM{'part'});

	# ロック開始
	if ($lockkey == 1) { &lock1; } elsif ($lockkey == 2) { &lock2; }

	# 二重登録をチェック
	if (!$w_url) {
	    $match=0;
	    foreach (0 .. $#parts) {
		open(IN,"$logdir\/$_\.dat") || &error("ファイルが開けません。: $_\.dat","lock");
	    	@lines = <IN>;
		close(IN);

		# 分類が同一の場合配列を更新用に一時コピー
		if ($FORM{'part'} eq "$_") { @new = @lines; }

		foreach (@lines) {
			local($no,$part,$subpt,$sub,$hp,$name,$email) = split(/<>/, $_);

			# URLが合致すればループを解除
			if ($FORM{'url'} eq "$hp") { $match=1; last; }
			if ($FORM{'email'} eq "$email") { $match=2; last; }
		}
	    }
	if ($match == 1) { &error("登録しようとするURLは既に登録済です。","lock"); }
#	if ($match == 2) { &error("他のサイトで登録済みです。<br>お１人様１つしか登録できません。","lock"); }
	}

	# パスワードを暗号化
	$PW = &e_passwd("$FORM{'pwd'}");

	# 新着ファイル
	open(IN,"$newfile");
	@data = <IN>;
	close(IN);

	while ($w_new <= @data) { pop(@data); }

	($no,$pt2,$sp2,$sub2,$url2,$name2,$mail2,$pw2,$msg2,$banner2,$bunrui2,$dt2,$t2,$n2,$r2,$host2) = split(/<>/, $data[0]);
#	if ($host eq "$host2") { &error("連続登録は禁止されています。<br>お１人様１つでお願いします。"); }
	$no++;

	# 登録記事をフォーマット
	$new = "$no<>$FORM{'part'}<>$subpt<>$FORM{'sub'}<>$FORM{'url'}<>$FORM{'name'}<>$FORM{'email'}<>$PW<>$FORM{'msg'}<>$FORM{'banner'}<>$FORM{'bunrui'}<>$date<>$times<>0<>0<>$host<>\n";

	# 禁止ワード
	$match=0;
	foreach (@WORDS) {
		if (index($new,$_) >= 0) { $match=1; last; }
	}
	# 警告
	if ($match) { &error("禁止ワード「$word」が使用されています。","lock"); }

	# 登録禁止URL
	$match=0;
	foreach (@EXCURL) {
		if (index($new,$_) >= 0) { $match=1; last; }
	}
	# 警告
	if ($match) { &error("登録が制限されているURLが指定されています。","lock"); }

	# 新着ファイルを更新
	unshift(@data,$new);
	open(OUT,">$newfile");
	print OUT @data;
	close(OUT);

	# ファイルに追加
	unshift(@new,$new);
	$logfile = "$logdir\/$FORM{'part'}\.dat";
	open(OUT,">$logfile") || &error("ファイルに書き込めませんでした。 : $logfile","lock");
	print OUT @new;
	close(OUT);

	# ロック解除
	unlink($lockfile) if (-e $lockfile);

	# お礼メール通知
	if ($mailing) { &mail_to; }

	@SUB = split(/\s+/, $subpt[$FORM{'part'}]);

	&header;
	&page_top;
	&kiyaku;

# 登録完了画面
	print <<"EOM";
<tr>
<td align=\"center\" bgcolor=\"#ffe4e1\">
<br><font size=\"3\"><b><font color=\"#FF0066\">■ </font>オホーツクリンク登録完了<font color=\"#FF0066\"> ■</font></b></font><br><br>
<font size=\"3\">ありがとうございます。以下の内容で登録が完了しました。</font><br><br>
※以下の登録内容は「連絡先E-mail」宛に自動で送信されます。登録の控えとしてご確認下さい。<br><br>
EOM

#登録フォーム
	print <<"EOM";
<form action="$script" method="$method">
<input type=hidden name=mode value="regist">
<table width="650" border="0" cellspacing="0" cellpadding="1" bgcolor="#000033">
<tr><td>
<table width="650" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF">
<tr><td>
<table width="600" border="0" cellspacing="2" cellpadding="5" bgcolor="#FFFFFF" align="center">
<tr><br>
<td width="150"><div align="left">登録する方のお名前</div></td>
<td>$FORM{'name'}</td>
</tr>
<tr>
<td width="150"><div align="left">連絡先E-mail</div></td>
<td>$FORM{'email'}</td>
</tr>
<tr>
<td width="150"><div align="left">登録するサイトのURL</div></td>
<td>$FORM{'url'}</td>
</tr>
<tr>
<td width="150"><div align="left">パスワード</div></td>
<td>$FORM{'pwd'}</td>
</tr>
<tr>
<td width="150"><div align="left">主分類／副分類</div></td>
<td>$parts[$FORM{'part'}] > $SUB[$subpt]</td>
</tr>
<tr>
<td width="150"><div align="left">登録するサイトのタイトル</div></td>
<td>$FORM{'sub'}</td>
</tr>
<tr>
<td width="150"><div align="left">登録するサイトの紹介文</div></td>
<td>$FORM{'msg'}</td>
</tr>
<tr>
<td width="150"><div align="left">バナーURL</div></td>
<td>$FORM{'banner'}</td>
</tr>
<tr>
<td width="150"><div align="left">登録サイト分類</div></td>
<td>
EOM
	for ($i=0; $i<$catmax; $i+=3) {
		$catkey = $cat[$i];	$catname = $cat[$i+1];
		if ($FORM{'bunrui'} ne $catkey) { next; } else { print "$catname"; }
	}
	print <<"EOM";
</tr>
<tr> 
<td colspan=2><div align="center"><br>
<a href=\"../../town.shtml\">[タウンガイドTOPへ戻る]</a></div><br>
</td></tr>
</table>
</td></tr>
</table>
</td></tr>
</table>
</form>
<br></td></tr>
EOM
	&page_bottom;
	exit;
}

#--------------#
#  メンテ画面  #
#--------------#
sub mente {
	$logfile = "$logdir\/$FORM{'part'}\.dat";
	open(IN,"$logfile") || &error("Open Error : $logfile");
	while ($_ = <IN>) {
		($no,$part,$subpt,$sub,$hp,$name,$email,$pw,$msg,$banner,$bunrui,$date,$t) = split(/<>/, $_);
		if ($FORM{'no'} eq "$no") { last; }
	}
	close(IN);
	&header;
	&page_top;
	&kiyaku;

#修正削除認証画面
	print <<"EOM";
<tr>
<td align=\"center\" bgcolor=\"#ffe4e1\">
<br><font size=\"3\" color=\"#FF0066\" >[オホーツクリンク修正･削除]</font><br><br>
登録されている下記のサイトの修正･削除を行います。<br>
処理内容を選択し、登録時に指定した「パスワード」を入力してください。<br>
なお、分類（ジャンル）の変更はできません。<br><br>
<table width="650" border="0" cellspacing="0" cellpadding="1" bgcolor="#000033">
<tr><td>
<table width="650" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF">
<tr><td><br>
<table border="0" cellspacing="2" cellpadding="2" width="600" bgcolor="#FFFFFF" align="center">
<tr>
<td width="180">登録されているサイトのタイトル名</td>
<td width="420"><font color=#008080 size=3>$sub</font></td>
</tr>
<tr>
<td width="180">登録されているサイトのURL</td>
<td width="420"><font color=#008080 size=3>$hp</font></td>
</tr>
<tr><td colspan="2"><div align="center"><br>
<form action="$script" method="$method">
<input type=hidden name=mode value="do_mente">
<input type=hidden name=part value="$FORM{'part'}">
※登録サイトの編集区分を選択してください。<br>
<input type=hidden name=no value="$FORM{'no'}">
<input type=radio name=action value="mente" checked>修正
<input type=radio name=action value="delete">削除
<P>パスワード
※英数字で8文字以内でご記入ください。<br>
<input type=password name=pwd size=8 maxlength=8><input type=submit value="認証">
</form></div>
</td></tr>
</table>
</td></tr>
</table>
</td></tr>
</table><br>
</td></tr>
EOM
	&page_bottom;
	exit;
}

#--------------#
#  メンテ実行  #
#--------------#
sub do_mente {
	# フォームチェック
	if ($FORM{'pwd'} eq '') { &error("パスワードが入力されていません。"); }

	# ロック開始
	if ($lockkey == 1 && $FORM{'action'} ne 'mente') { &lock1; }
	elsif ($lockkey == 2 && $FORM{'action'} ne 'mente') { &lock2; }

	$logfile = "$logdir\/$FORM{'part'}\.dat";
	open(IN,"$logfile") || &error("ファイルが開けません。: $logfile","lock");
	@lines = <IN>;
	close(IN);

	# 修正処理実行
	if ($FORM{'action'} eq "go") {

		# フォームチェック
		if ($FORM{'name'} eq '') { &error("登録する方のお名前の入力がありません。","lock"); }
		if ($FORM{'email'} !~ /(.*)\@(.*)\.(.*)/) { &error("連絡先E-mailの入力内容が不正です。","lock"); }
		if ($FORM{'url'} eq '') { &error("登録するサイトのURLの入力がありません。","lock"); }
		if ($FORM{'pwd'} eq '') { &error("パスワードの入力がありません。","lock"); }
		if ($FORM{'pwd'} =~ /\W/) { &error("パスワードに全角文字が含まれています。<br>半角の英数字で入力してください。","lock"); }
		if ($FORM{'sub'} eq '') { &error("登録するサイトのタイトル名の入力がありません。","lock"); }
		if ($FORM{'msg'} eq '') { &error("登録するサイトの紹介文の入力がありません。","lock"); }
		if (length($FORM{'msg'}) > $msg_limit*2) { &error("登録するサイトの紹介文が$msg_limit文字以上を超えています。","lock"); }
		if ($FORM{'bunrui'} eq '') { &error("登録するサイトの地域分類が選択されていません。"); }

		# 日時の取得
		&get_time;

		$flag=0;
		@new=();
		foreach (@lines) {
			($no,$pt,$subpt,$sb,$hp,$na,$em,$pw,$ms,$banner,$bunrui,$dt,$ts,$rec,$cnt,$ho) = split(/<>/, $_);
			if ($FORM{'no'} eq "$no") {
				$file = $_ = "$no<>$pt<>$FORM{'subpt'}<>$FORM{'sub'}<>$FORM{'url'}<>$FORM{'name'}<>$FORM{'email'}<>$pw<>$FORM{'msg'}<>$FORM{'banner'}<>$FORM{'bunrui'}<>$date<>$times<>$rec<>$cnt<>$ho<>\n";
				$flag=1;
				$PW = $pw;
			}
			push(@new,$_);
		}
		if (!$flag) { &error("該当の記事が見つかりませんでした。","lock"); }
		$check = &d_passwd("$FORM{'pwd'}","$PW");
		if ($check ne "yes") { &error("パスワードが違います。","lock"); }

		# 更新
		open(OUT,">$logfile") || &error("ファイルに書き込めませんでした。 : $logfile","lock");
		print OUT @new;
		close(OUT);

		# 新着ファイルをチェック
		@new2=();
		open(IN,"$newfile") || &error("ファイルが開けません。 : $newfile");
		@data = <IN>;
		close(IN);

		$nflag=0;
		foreach (@data) {
			($no,$dmy) = split(/<>/, $_);
			if ($FORM{'no'} eq "$no") { $nflag=1; push(@new2,$file); }
			else { push(@new2,$_); }
		}
		# 該当記事があれば更新
		if ($nflag) {
			open(OUT,">$newfile") || &error("ファイルに書き込めませんでした。 : $newfile");
			print OUT @new2;
			close(OUT);
		}

		# ロック解除
		unlink($lockfile) if (-e $lockfile);

		# 完了メッセージ
		&header;
		&page_top;
		&kiyaku;
		print <<"EOM";
<tr>
<td align=\"center\" bgcolor=\"#ffe4e1\">
<br><font size=\"3\" color=\"#FF0066\" >[オホーツクリンク修正完了]</font><br><br>
<P><center><font size=\"3\">修正処理は正常に終了しました。</font>
<P>[ <a href=\"../../town.shtml\">タウンガイドTOPへ戻る</a> ]<br><br>
</center>
EOM
		&page_bottom;
		exit;
	}
	# 削除処理実行
	elsif ($FORM{'action'} eq "delete") {

		$flag=0;
		@new=();
		foreach (@lines) {
			($no,$pt,$subpt,$sb,$hp,$na,$em,$pw,$ms,$banner,$bunrui,$dt,$ts,$rec,$cnt,$ho) = split(/<>/, $_);

			if ($FORM{'no'} eq "$no") {
				$flag=1;
				$PW = $pw;
			}
			else {
				push(@new,$_);
			}
		}
		if (!$flag) { &error("該当の記事が見つかりませんでした。","lock"); }
		$check = &d_passwd("$FORM{'pwd'}","$PW");
		if ($check ne "yes") { &error("パスワードが違います。","lock"); }

		# 更新
		open(OUT,">$logfile") || &error("ファイルに書き込めませんでした。: $logfilet","lock");
		print OUT @new;
		close(OUT);

		# 新着ファイルをチェック
		@new2=();
		open(IN,"$newfile") || &error("ファイルが開けません。 : $newfile");
		@data = <IN>;
		close(IN);

		$dflag=0;
		foreach (@data) {
			($no,$dmy) = split(/<>/, $_);
			if ($FORM{'no'} eq "$no") { $dflag=1; }
			else { push(@new2,$_); }
		}
		# 該当記事があれば更新
		if ($dflag) {
			open(OUT,">$newfile") || &error("ファイルに書き込めませんでした。: $newfile");
			print OUT @new2;
			close(OUT);
		}

		# ロック解除
		unlink($lockfile) if (-e $lockfile);

		# 完了メッセージ
		&header;
		&page_top;
		&kiyaku;
		print <<"EOM";
<tr>
<td align=\"center\" bgcolor=\"#ffe4e1\">
<br><font size=\"3\" color=\"#FF0066\" >[オホーツクリンク削除完了]</font><br><br>
<P><center><font size=\"3\">削除処理は正常に終了しました。</font>
<P>[ <a href=\"../../town.shtml\">タウンガイドTOPへ戻る</a> ]<br><br>
</center>
EOM
		&page_bottom;
		exit;
	}
	else {
		foreach (@lines) {
			($no,$pt,$subpt,$sub,$hp,$name,$email,$pw,$msg,$banner,$bunrui) = split(/<>/, $_);
			if ($FORM{'no'} eq "$no") { last; }
		}
		# パスチェック
		$check = &d_passwd("$FORM{'pwd'}","$pw");
		if ($check ne "yes") { &error("パスワードが違います。"); }
	}

	# 改行を復元
	$msg =~ s/<br>/\r/g;

	@SUB = split(/\s+/, $subpt[$FORM{'part'}]);
	
	# 修正用画面を表示
	&header;
	&page_top;
	&kiyaku;
#修正削除認証画面
	print <<"EOM";
<tr>
<td align=\"center\" bgcolor=\"#ffe4e1\">
<br><font size=\"3\" color=\"#FF0066\" >[オホーツクリンク修正]</font><br><br>
登録されている下記のサイトの修正を行います。<br>
変更する部分のみを修正し「送信する」ボタンを押してください。<br>
なお、分類（ジャンル）の変更はできません。<br><br>
<form action="$script" method="$method">
<input type=hidden name=pwd value="$FORM{'pwd'}">
<input type=hidden name=action value="go">
<input type=hidden name=no value="$FORM{'no'}">
<input type=hidden name=mode value="do_mente">
<input type=hidden name=part value="$FORM{'part'}">
<table width="650" border="0" cellspacing="0" cellpadding="1" bgcolor="#000033">
<tr><td>
<table width="650" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF">
<tr><td>
<table border="0" cellspacing="2" cellpadding="2" width="600" bgcolor="#FFFFFF" align="center">
<tr><br>
<td width="150"><div align="left">登録される方のお名前</div></td>
<td><input type=text name=name size=50 value="$name"></td>
</tr>
<tr>
<td width="150"><div align="left">連絡先E-mail</div></td>
<td><input type=text name=email size=50 value="$email"><br>※お間違えの無いようにお願い致します。</td>
</tr>
<tr>
<td width="150"><div align="left">登録するサイトのURL</div></td>
<td><input type=text name=url size=80 value="$hp"><br>※http://からご記入ください。</td>
</tr>
<tr>
<td width="150"><div align="left">主分類</div></td>
<td>$parts[$FORM{'part'}]</td>
</tr>
<tr>
<td width="150"><div align="left">副分類</div></td>
<td><select name=subpt>
EOM
	$k=0;
	foreach (@SUB) {
		if ($k eq "$subpt") { print "<option value=\"$k\" selected>$_\n"; }
		else { print "<option value=\"$k\">$_\n"; }
		$k++;
	}
	print <<"EOM";
</select></td>
</tr>
<tr>
<td width="150"><div align="left">登録するサイトのタイトル</div></td>
<td><input type=text name=sub size=60 value="$sub"></td>
</tr>
<tr>
<td width="150"><div align="left">登録するサイトの紹介文</div></td>
<td><textarea name=msg cols=50 rows=3 wrap=soft>$msg</textarea><br>※全角$msg_limit文字前後でご記入ください。</td>
</tr>
<tr>
<td width="150"><div align="left">バナーURL</div></td>
<td><input type=text name=banner size=80 value="$banner"><br>※バナー等ありましたらURLをご記入ください。</td>
</tr>
<tr>
<td width="150"><div align="left">登録サイト分類</div></td>
<td>
EOM
	$k = 0;
	for ($i=0; $i<$catmax; $i+=3) {
		$catkey = $cat[$i]; $catname = $cat[$i+1]; $catcolor = $cat[$i+2];
		if (!$catcolor) {next;}
		if (!$k) {print "";}
		if ($bunrui eq $catkey) {$chk = ' checked';} else {$chk = '';}
		print "<input type=radio name=\"bunrui\" value=\"$catkey\"$chk>\n";
		if ($catname) {print "<font color=\"$catcolor\">■ </font>$catname　\n";}
		$k++;
		if ($k == $catcols) {print "</td></tr>"; $k = 0;}
	}
	if ($k) {print "</td></tr>";}
	print <<"EOM";
<tr>
<td colspan=2><div align="center"><input type=submit value="送信する"><input type=reset value="リセット"></div><br>
</td></tr>
</table>
</td></tr>
</table>
</td></tr>
</table>
</form>
</td></tr>
EOM
	&page_bottom;
	exit;
}

#------------#
#  検索処理  #
#------------#
sub search {
	# 入力内容を整理
	$cond = $FORM{'cond'};
	$word = $FORM{'word'};
	if ($word eq '') { &error("検索キーワードを入力してください。"); }
	$word =~ s/　/ /g;
	$word =~ s/\t/ /g;
	@pairs = split(/\s+/, $word);

	&header;
	&page_top;

#検索画面
	print <<"EOM";
<tr>
<td align=\"center\" bgcolor=\"#ffe4e1\">
<br><font size=\"3\"><b><font color=\"#FF0066\">■ </font>オホーツクリンク検索結果<font color=\"#FF0066\"> ■</font></b></font><br><br>

EOM

	# 検索対象カテゴリを定義
	if ($FORM{'action'} eq "PartIn") {
		@array = ("$FORM{'part'}");
	} else {
		@array = (0 .. $#parts);
	}

	# サーバ負荷軽減のため多重起動を防止するためロックファイル
	if ($lockkey == 1) { &lock1; }
	elsif ($lockkey == 2) { &lock2; }

	# 検索処理
	$j=0;
	foreach (@array) {
		for ($k=0; $k<$catmax; $k+=3) {
	    	open(IN,"$logdir\/$_\.dat") || &error("ファイルが開けません。 : $_\.dat");
	    	while ($line = <IN>) {
				$flag=0;
				($no,$part,$subpt,$sub,$hp,$name,$email,$pw,$msg,$banner,$bunrui) = split(/<>/, $line);
				$searchwd = sprintf("%s<>%s",$sub,$msg);
				foreach $pair (@pairs) {
					if (index($searchwd,$pair) >= 0) {
						$flag = 1;
						if ($cond eq 'or') { last; }
					} else {
						if ($cond eq 'and') { $flag=0; last; }
					}
				}
				if ($flag) {
			    	($no,$part,$subpt,$sub,$hp,$name,$email,$pw,$msg,$banner,$bunrui,$dt,$ts,$rec) = split(/<>/, $line);
			    	$times = time;
			    	@SUB = split(/\s+/, $subpt[$part]);
			   		if ($cat[$k] eq $bunrui) {
						$j++;
						print <<"EOM";
<table width=\"700\" bgcolor=\"#000033\" cellspacing=\"1\" cellpadding=\"0\">
<tr><td bgcolor=\"#ffffff\" align=\"center\">
<table width=\"100\%\" bgcolor=\"#ffc0cb\" cellspacing=\"3\" cellpadding=\"0\">
<tr><td width=\"5\" valign=\"top\">
EOM
						for ($i=0; $i<$catmax; $i+=3) {
							$catkey = $cat[$i];
							$catcolor = $cat[$i+2];
							if (!$catcolor) {next;}
							if ($bunrui eq $catkey) { print "<font size=\"2\" color=\"$catcolor\">■</font></td>\n"; }
						}

						print <<"EOM";					
<td valign=\"top\"><font size=\"3\"><a href=\"$hp\" target=\"_blank\">$sub</a></font>
EOM
						$times = time;
						&icons;  #アイコンを表示
						print <<"EOM";
</td>
<td width=\"200\" valign=\"top\"><div align=\"right\">
[ <a href=\"$script?mode=part&part=$part\">$parts[$part]</a> &gt; <a href=\"$script?mode=part&part=$part&subpt=$subpt\">$SUB[$subpt]</a> ]&nbsp;</div></td>
</tr></table>
<table border=\"0\" width=\"680\" cellspacing=\"2\" cellpadding=\"2\">
<tr><td valign=\"top\">$msg</td>
EOM
						if ($banner ne '') {
							print "<td valign=\"top\"><div align=\"right\">";
							print "<a href=\"$hp\" target=\"_blank\"><img src=\"$banner\" border=\"0\"></a></div></td>\n";
						}
						else { 
							print "<td></td>\n";
						}
						print "</tr></table></td></tr></table><br>";
					}
				}
			}
			close(IN);
		}
	}

	# ロック解除
	if (-e $lockfile) { unlink($lockfile); }

	if ($i > 0) {
		print "【検索キーワード <font color=\"#FF0066\">$word</font> の検索結果：$j件見つかりました。】<br><br>\n";
		for ($i=0; $i<$catmax; $i+=3) {
			if ($cat[$i] eq '') { last; }
			print "<font color=\"$cat[$i+2]\">■ </font>$cat[$i+1]　";
		}
		print "<hr width=\"400\" size=\"1\">";
		print "※ご覧になりたい項目をクリックすると別画面で表\示されます。<br><br>";
	}
	else {
		print "【検索キーワード <font color=\"#FF0066\">$word</font> に該当するリンクは見つかりませんでした。】<br><br>\n";
	}
	print "<a href=\"javascript:history.go(-1)\">[ 前のページへ戻る ]</a><br><br></td></tr>\n";
	&page_bottom;
	exit;
}

#----------------------------#
#  分類（カテゴリー）を表示  #
#----------------------------#
sub part_view {
	@SUB = split(/\s+/, $subpt[$FORM{'part'}]);
	&header;
	&page_top;

#タイトルと検索部分
	print <<"EOM";
<tr><td align=\"center\" bgcolor=\"#ffe4e1\"><br>
<div align="center">
<form action=\"$script\" method=\"$method\">
<input type=hidden name=part value=\"$FORM{'part'}\">
<input type=hidden name=mode value=\"search\">
<input type=hidden name=action value=\"PartIn\">
キーワード入力： 
<input type=text size=20 name=word>
<input name="imageField2" type="image" src="../../img/serch-btn-p.gif" alt="検索" align="middle" width="35" height="18" border="0">
<input type=radio name=cond value=and checked>
 全キーワード含む
<input type=radio name=cond value=or>
いずれかのキーワード含む
</form>
</div>
<font size=\"3\"><b><font color=\"#FF0066\" >■ </font>$parts[$FORM{'part'}]<font color=\"#FF0066\" > ■</font></b></font><br><br>
EOM
	#大分類クリック時
	if ($FORM{'subpt'} eq '') {
		$k= 0 ;
		foreach $x (@SUB) {

###############
			#先読み
			$count = 0;
			$logfile = "$logdir\/$FORM{'part'}\.dat";
			open(IN,"$logfile") || &error("ファイルが開けません。 : $logfile");
			while ($_ = <IN>) {
				local($no,$pt,$subpt,$sub,$hp,$name,$email,$pw,$msg,$banner,$bunrui,$dt,$ts,$rec,$axs) = split(/<>/, $_);
				if ($k == $subpt) {
					if ($FORM{'subpt'} ne "" && $FORM{'subpt'} ne "$subpt") { next; }
					$wkdata[$count] = $_;
					$count++;
				}
			}
			close(IN);
			#日付でソート
#			@wkdata = reverse sort { (split(/\,/,$a))[11] cmp (split(/\,/,$b))[11] } @wkdata;
			for ($n=0; $n<$count-1; $n++){
				for ($m=$n+1; $m<$count; $m++){
					local($no,$pt,$subpt,$sub,$hp,$name,$email,$pw,$msg,$banner,$bunrui,$dt,$ts,$rec,$axs) = split(/<>/, $wkdata[$n]);
					local($no2,$pt2,$subpt2,$sub2,$hp2,$name2,$email2,$pw2,$msg2,$banner2,$bunrui2,$dt2,$ts2,$rec2,$axs2) = split(/<>/, $wkdata[$m]);
					if ($dt lt $dt2) {
						$wkrec = $wkdata[$m];
						$wkdata[$m] = $wkdata[$n];
						$wkdata[$n] = $wkrec;
					}
				}
			}
###############

			print "<table width=\"700\" bgcolor=\"#000033\" cellspacing=\"1\" cellpadding=\"0\">\n";
			print "<tr><td bgcolor=\"#ffffff\" align=\"center\">\n";
			print "<table width=\"100\%\" bgcolor=\"#ffc0cb\" cellspacing=\"3\" cellpadding=\"0\">\n";
			print "<tr><td><font color=\"#FF0066\" size=\"3\">&nbsp;▼ </font><font color=\"#000066\" size=\"3\">$x</font>\n";
			if ($count != 0) { print "</td><td align=\"right\" valign=\"top\"><font size=\"2\" color=\"000066\">【現在の登録件数：$count件】 .</font>\n";}
			print "</td></tr></table>\n";
		
			$i=0;
			for ($j=0; $j<$catmax; $j+=3) {
				for ($n=0; $n<$count; $n++){
					local($no,$pt,$subpt,$sub,$hp,$name,$email,$pw,$msg,$banner,$bunrui,$dt,$ts,$rec,$axs) = split(/<>/, $wkdata[$n]);
					if ($k == $subpt) {
						if ($cat[$j] eq $bunrui) {
							#結果を表示
							print "<table border=\"0\" width=\"680\" cellspacing=\"2\" cellpadding=\"2\">\n";
							print "<tr><td width=\"5\" valign=\"top\">";
							for ($a=0; $a<$catmax; $a+=3) {
								$catkey = $cat[$a];
								$catcolor = $cat[$a+2];
								if (!$catcolor) {next;}
								if ($bunrui eq $catkey) { print "<font color=\"$catcolor\">■</font></td>\n"; }
							}
							print "<td valign=\"top\"><a href=\"$hp\" target=\"_blank\">$sub</a>";
							$times = time;
							&icons;	# アイコンを表示
							print "</td>\n";
							print "<td width=\"100\" valign=\"top\">";
							$strdt = substr $dt,0,10;
							print "<div align=\"right\">$strdt</div></td>\n";
							print "<td width=\"65\" valign=\"top\"><div align=\"right\">";
							print "[<a href=\"$script?mode=mente&no=$no&part=$FORM{'part'}\">修正・削除</a>]</div></td>";
							print "</tr></table>\n";
							
							print "<table border=\"0\" width=\"680\" cellspacing=\"2\" cellpadding=\"2\"><tr>\n";
							if ($banner ne '') {
								print "<td valign=\"top\">$msg</td>\n";
								print "<td valign=\"top\"><div align=\"right\"><a href=\"$hp\" target=\"_blank\">";
								print "<img src=\"$banner\" border=\"0\"></a></div></td>\n";
							}
							else { print "<td valign=\"top\">$msg</td>\n"; }
							print "</tr></table>\n";
						}
					}
				}
			}
			if ($count == 0) { 
			print "<table border=\"0\" width=\"680\" cellspacing=\"2\" cellpadding=\"2\">\n";
			print "<tr><td>※現在、登録されておりません。</td></tr></table>\n";
			
		}
		print "</table><br>\n";
		$k++;
		}
	}
	#中分類クリック時
	else {

###############
		#先読み
		$count = 0;
		$logfile = "$logdir\/$FORM{'part'}\.dat";
		open(IN,"$logfile") || &error("ファイルが開けません。 : $logfile");
		while ($_ = <IN>) {
			local($no,$pt,$subpt,$sub,$hp,$name,$email,$pw,$msg,$banner,$bunrui,$dt,$ts,$rec,$axs) = split(/<>/, $_);
			if ($FORM{'subpt'} ne "" && $FORM{'subpt'} ne "$subpt") { next; }
			$wkdata[$count] = $_;
			$count++;
		}
		close(IN);
		#日付でソート
#		@wkdata = reverse sort { (split(/\,/,$a))[11] cmp (split(/\,/,$b))[11] } @wkdata;
		for ($n=0; $n<$count-1; $n++){
			for ($m=$n+1; $m<$count; $m++){
				local($no,$pt,$subpt,$sub,$hp,$name,$email,$pw,$msg,$banner,$bunrui,$dt,$ts,$rec,$axs) = split(/<>/, $wkdata[$n]);
				local($no2,$pt2,$subpt2,$sub2,$hp2,$name2,$email2,$pw2,$msg2,$banner2,$bunrui2,$dt2,$ts2,$rec2,$axs2) = split(/<>/, $wkdata[$m]);
				if ($dt lt $dt2) {
					$wkrec = $wkdata[$m];
					$wkdata[$m] = $wkdata[$n];
					$wkdata[$n] = $wkrec;
				}
			}
		}
###############
		print "<table width=\"700\" bgcolor=\"#000033\" cellspacing=\"1\" cellpadding=\"0\">\n";
		print "<tr><td bgcolor=\"#ffffff\" align=\"center\">\n";
		print "<table width=\"100\%\" bgcolor=\"#ffc0cb\" cellspacing=\"3\" cellpadding=\"0\"><tr>\n";
		print "<tr><td><font color=\"#FF0066\" size=\"3\">&nbsp;▼ </font><font color=\"#000066\" size=\"3\">$SUB[$FORM{'subpt'}]</font>";
		if ($count != 0) { print "</td><td align=\"right\" valign=\"top\"><font size=\"2\" color=\"000066\">【現在の登録件数：$count件】 .</font>\n";}
		print "</td></tr></table>\n";

		for ($j=0; $j<$catmax; $j+=3) {
			for ($n=0; $n<$count; $n++){
				local($no,$pt,$subpt,$sub,$hp,$name,$email,$pw,$msg,$banner,$bunrui,$dt,$ts,$rec,$axs) = split(/<>/, $wkdata[$n]);
				if ($cat[$j] eq $bunrui) {
					#結果を表示
					print "<table border=\"0\" width=\"680\" cellspacing=\"2\" cellpadding=\"2\">\n";
					print "<tr><td width=\"5\" valign=\"top\">";
					for ($i=0; $i<$catmax; $i+=3) {
						$catkey = $cat[$i];
						$catcolor = $cat[$i+2];
						if (!$catcolor) {next;}
						if ($bunrui eq $catkey) { print "<font color=\"$catcolor\">■</font></td>\n"; }
					}
					print "<td valign=\"top\"><a href=\"$hp\" target=\"_blank\">$sub</a>";
					$times = time;
					&icons;	# アイコンを表示
					print "</td>\n";
					print "<td width=\"100\" valign=\"top\">";
					$strdt = substr $dt,0,10;
					print "<div align=\"right\">$strdt</div></td>\n";
					print "<td width=\"65\" valign=\"top\"><div align=\"right\">";
					print "[<a href=\"$script?mode=mente&no=$no&part=$FORM{'part'}\">修正・削除</a>]</div></td>";
					print "</tr></table>\n";
					
					print "<table border=\"0\" width=\"680\" cellspacing=\"2\" cellpadding=\"2\"><tr>\n";
					if ($banner ne '') {
						print "<td valign=\"top\">$msg</td>\n";
						print "<td valign=\"top\"><div align=\"right\"><a href=\"$hp\" target=\"_blank\">";
						print "<img src=\"$banner\" border=\"0\"></a></div></td>\n";
						
					}
					else { print "<td valign=\"top\">$msg</td>\n"; }
					print "</tr></table>\n";
				}
			}
		}
		if ($count == 0) { 
			print "<table border=\"0\" width=\"680\" cellspacing=\"2\" cellpadding=\"2\">\n";
			print "<tr><td>※現在、登録されておりません。</td></tr></table>\n";
			
		}
		print "</table><br>\n";
	}
	for ($a=0; $a<$catmax; $a+=3) {
		if ($cat[$a] eq '') { last; }
		print "<font color=\"$cat[$a+2]\">■ </font>$cat[$a+1]　";
	}
	print "<hr width=\"400\" size=\"1\">";

#	print "<hr width=\"400\" size=\"1\">\n";
#	if ($FORM{'subpt'} eq '') { 
#		print "【現在のカテゴリ [ $parts[$FORM{'part'}] ]";
#	}
#	else {
#		print "【現在のカテゴリ [ $parts[$FORM{'part'}] \> $SUB[$FORM{'subpt'}] ]";
#	}
#	if ($count != 0) { 
#		print " には $count件 登録されています。】<br><br>\n";
#	 }
#	else {
#		print " には登録がされておりません。】<br><br>\n";
#	}

	print "※ご覧になりたい項目をクリックすると別画面で表\示されます。<br>";
	
	print "<br></td></tr>\n";
	&page_bottom;
	exit;

	# 改頁処理
#	if ($page eq '') { $page = 1; }
#	$next_line = $page + $p_view;
#	$back_line = $page - $p_view;
#	print "<table><tr>\n";
#	# 前頁処理
#	if ($back_line > 0) {
#		print "<td><form method=\"$method\" action=\"$script\">\n";
#		print "<input type=hidden name=page value=\"$back_line\">\n";
#		print "<input type=hidden name=mode value=\"part\">\n";
#		print "<input type=hidden name=part value=\"$FORM{'part'}\">\n";
#		print "<input type=hidden name=subpt value=\"$FORM{'subpt'}\">\n";
#		print "<input type=submit value=\"前の$p_view件\">\n";
#		print "</form></td>\n";
#	}
#	# 次頁処理
#	if ($next_line <= $i) {
#		print "<td><form method=\"$method\" action=\"$script\">\n";
#		print "<input type=hidden name=page value=\"$next_line\">\n";
#		print "<input type=hidden name=mode value=\"part\">\n";
#		print "<input type=hidden name=part value=\"$FORM{'part'}\">\n";
#		print "<input type=hidden name=subpt value=\"$FORM{'subpt'}\">\n";
#		print "<input type=submit value=\"次の$p_view件\">\n";
#		print "</form></td>\n";
#	}
}

#------------#
#  新着情報  #
#------------#
sub new_sort {
	&header;
	&page_top;

	print <<"EOM";
<tr><td align=\"center\" bgcolor=\"#ffe4e1\">
<br><font size=\"3\"><b><font color=\"#FF0066\">■ </font>新着情報<font color=\"#FF0066\"> ■</font></b></font><br><br>
現在までに登録されている最新のオホーツクリンクです！ぜひご覧ください！<br><br>
EOM
	open(IN,"$newfile") || &error("ファイルが開けません。 : $newfile");
	$j=0;
	while ($_ = <IN>) {
		$j++;
		($no,$part,$subpt,$sub,$hp,$name,$email,$pw,$msg,$banner,$bunrui,$date,$ts) = split(/<>/, $_);
		@SUB = split(/\s+/, $subpt[$part]);

		print <<"EOM";
<table width=\"700\" bgcolor=\"#000033\" cellspacing=\"1\" cellpadding=\"0\">
<tr><td bgcolor=\"#ffffff\" align=\"center\">
<table width=\"100\%\" bgcolor=\"#ffc0cb\" cellspacing=\"3\" cellpadding=\"0\">
<tr><td width=\"5\">
EOM
			for ($i=0; $i<$catmax; $i+=3) {
				$catkey = $cat[$i];
				$catcolor = $cat[$i+2];
				if (!$catcolor) {next;}
				if ($bunrui eq $catkey) { print "<font color=\"$catcolor\">■</font></td>\n"; }
			}
			$strdt = substr $date,0,10;
			print "<td width=\"65\">$strdt</td>\n";
			print <<"EOM";					
<td valign=\"top\"><font size=\"3\"><a href=\"$hp\" target=\"_blank\">$sub</a></font>
EOM
			$times = time;
			&icons;  #アイコンを表示
			print <<"EOM";
</td>
<td width=\"200\"><div align=\"right\">
[ <a href=\"$script?mode=part&part=$part\">$parts[$part]</a> &gt; <a href=\"$script?mode=part&part=$part&subpt=$subpt\">$SUB[$subpt]</a> ]&nbsp;</div></td>
</tr></table>
<table border=\"0\" width=\"680\" cellspacing=\"2\" cellpadding=\"2\">
<tr><td valign=\"top\">$msg</td>
EOM
		if ($banner ne '') {
			print "<td valign=\"top\"><div align=\"right\">";
			print "<a href=\"$hp\" target=\"_blank\"><img src=\"$banner\" border=\"0\"></a></div></td>\n";
		}
		else { print "<td></td>\n";	}
		print "</tr></table></td></tr></table><br>";

		# 規定件数でループを抜ける
		if ($j >= $w_new) { last; }
	}
	close(IN);
	#print "<hr width=\"400\" size=\"1\">";
	for ($i=0; $i<$catmax; $i+=3) {
		if ($cat[$i] eq '') { last; }
		print "<font color=\"$cat[$i+2]\">■ </font>$cat[$i+1]　";
	}
	print "<hr width=\"400\" size=\"1\">";
	print "※ご覧になりたい項目をクリックすると別画面で表\示されます。<br><br></td></tr>\n";
	close(IN);

	&page_bottom;
	exit;
}

#----------------#
#  デコード処理  #
#----------------#
sub decode {
	if ($ENV{'REQUEST_METHOD'} eq "POST") {
		if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("投稿量が大きすぎます"); }
		read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
	} else { $buffer = $ENV{'QUERY_STRING'}; }

	@pairs = split(/&/, $buffer);
	foreach $pair (@pairs) {
		($name, $value) = split(/=/, $pair);
		$value =~ tr/+/ /;
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

		# 文字コード変換
		&jcode'convert(*value,'sjis');

		# タグ処理
		$value =~ s/\"/&quot;/g;
		$value =~ s/</&lt;/g;
		$value =~ s/>/&gt;/g;

		# 改行処理
		if ($name eq "msg") {
			$value =~ s/\r\n/<br>/g;
			$value =~ s/\r/<br>/g;
			$value =~ s/\n/<br>/g;
		} else {
			$value =~ s/\r//g;
			$value =~ s/\n//g;
		}

		# 削除／推奨マーク処理
		if ($name eq 'del') { push(@delete,$value); }
		elsif ($name eq 'rec') { push(@recs,$value); }

		$FORM{$name} = $value;
	}
	$mode  = $FORM{'mode'};
	$page  = $FORM{'page'};
}

#----------------#
#  HTMLのヘッダ  #
#----------------#
sub header {
	print "Content-type: text/html\n\n";
	print <<"EOM";
<html>
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8">
<title>$title</title>
<link rel="stylesheet" type="text/css" href="$style_file">
</head>
<body bgcolor="$bgcolor" background="$backimg" leftmargin="0" topmargin="10" marginwidth="0" marginheight="10" text="$text" link="$link" vlink="$vlink" alink="$alink">
EOM
}

#----------------------#
#  パスワード暗号処理  #
#----------------------#
sub e_passwd {
	local($in_pw) = $_[0];
	@SALT = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/');
	srand;
	$salt = $SALT[int(rand(@SALT))] . $SALT[int(rand(@SALT))];
	return crypt($in_pw, $salt);
}

#----------------------#
#  パスワード照合処理  #
#----------------------#
sub d_passwd {
	local($in_pw, $log_pw) = @_;
	local($key, $check);

	if ($log_pw =~ /^\$1\$/) { $key = 3; }
	else { $key = 0; }

	$check = "no";
	if (crypt($in_pw, substr($log_pw,$key,2)) eq "$log_pw") {
		$check = "yes";
	}
	return $check;
}

#--------------------------------#
#  ロックファイル : symlink関数  #
#--------------------------------#
sub lock1 { 
	local($retry) = 5;
	while (!symlink(".", $lockfile)) {
		if (--$retry <= 0) { &error("LOCK is BUSY","lock"); }
		sleep(1);
	}
}

#-----------------------------#
#  ロックファイル : open関数  #
#-----------------------------#
sub lock2 {
	$lflag = 0;
	foreach (1 .. 5) {
		unless (-e $lockfile) {
			open(LOCK,">$lockfile") || &error("Write Error : $lockfile","lock");
			close(LOCK);
			$lflag = 1;
			last;
		} else {
			sleep(1);
		}
	}
	if ($lflag == 0) {
		&error("LOCK is BUSY","lock");
	}
}

#--------------#
#  エラー処理  #
#--------------#
sub error {
	if ($_[1] eq "lock" && -e $lockfile) { unlink($lockfile); }

	&header;
	&page_top;

#エラー画面
	print <<"EOM";
<tr>
<td align=\"center\" bgcolor=\"#ffe4e1\">
<br><font size="3">エラーです。下記の点をご確認ください。</font><br><br>
<center>
<P><font color=red>$_[0]</font>
<P><a href="javascript:history.go(-1)">[前のページへ戻る]</a><P>
</center>
</td></tr>
EOM
	&page_bottom;
	exit;
}

#----------------#
#  ホスト名取得  #
#----------------#
sub get_host {
	$host = $ENV{'REMOTE_HOST'};
	$addr = $ENV{'REMOTE_ADDR'};

	if ($get_remotehost) {
		if ($host eq "" || $host eq "$addr") {
			$host = gethostbyaddr(pack("C4",split(/\./,$addr)),2);
		}
	}
	if ($host eq "") { $host = $addr; }
}

#------------------#
#  メール送信処理  #
#------------------#
sub mail_to {
	# メールタイトル
	$mail_sub = "【オホーツクＷＥＢ～リンク登録のご連絡】";

	# メール本文
	$mail_msg = <<"EOM";
=======================================================================
オホーツクWeb ～ オホーツクリンク登録のお知らせ ($date)
=======================================================================

$FORM{'name'} 様

この度は「$title」へご登録頂き誠に有り難うございます。
今回登録されました内容は以下の通りとなっておりますので、
ご確認の程宜しくお願い致します。

※本メールは、登録時に入力されました「連絡先E-mail」宛に自動で送信されています。
　心当たりのない場合はお手数ですが、オホーツクWebまでご連絡頂けます様お願い致します。

=======================================================================
■登録日時：$date
■お名前：$FORM{'name'}
■連絡先E-mail：$FORM{'email'}
■登録サイトのタイトル名：$FORM{'sub'}
■登録サイトのURL：$FORM{'url'}
■バナーURL：$FORM{'banner'}
■管理パスワード：$FORM{'pwd'}
■登録サイトの紹介文
$FORM{'msg'}
=======================================================================
＊なお、今後登録内容の修正や削除が発生する場合には、上記の
  管理パスワードを使ってメンテンスを行うことができますので、
  パスワードは大切に保管されるようお願い致します。

【ご注意！】
以下に該当するサイトをご登録された場合、勝手ながら削除させて頂く場合があります。
・ \申\請されたカテゴリーについての北海道に関する情報内容の量が\十\分でないもの
・ 公益性の低いもの
・ 公序良俗に反するもの
・ TOWN！オホーツクの主旨にあわない内容の場合
詳しくは以下のページをご確認ください。

http://www.okhotsk.or.jp/town-kiyaku.htm

それでは、どうぞ今後ともオホーツクWebをよろしくお願い致します。
=======================================================================
オホーツクＷＥＢ

〒090-0001
北海道北見市小泉386番地3 株式会社 システムサプライ
TEL：0157-22-8000
FAX：0157-31-0033
URL：http://www.okhotsk.or.jp/
Mail：$admin_mail
=======================================================================
EOM

	# コメント内の改行とタグを復元
#	$mail_msg =~ s/<br>/\n/ig;
#	$mail_msg =~ s/&quot;/\"/g;
#	$mail_msg =~ s/&lt;/</g;
#	$mail_msg =~ s/&gt;/>/g;

	# JISコードへ変換
#   	&jcode'convert(*mail_sub,'jis');
#   	&jcode'convert(*mail_msg,'jis');


#######################################################################<ADD>
	# メールの内容を書き出し
	open (F, ">$sendtxt");
	print F "$mail_msg\n";
	close (F);
	# メール送信
	system("$mailprog $sendtxt -t $FORM{'email'},$admin_mail -f $admin_mail -s $mail_sub $mserver");
#########################################################################

	# メール処理
	#if (open(MAIL,"| $sendmail -t")) {
	#print MAIL "To: $FORM{'email'}\n";
	#print MAIL "From: $admin_mail\n";
	#print MAIL "Bcc: $admin_mail\n" if ($mailing == 2);
	#print MAIL "Subject: $mail_sub\n";
	#print MAIL "MIME-Version: 1.0\n";
	#print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n";
	#print MAIL "Content-Transfer-Encoding: 7bit\n";
	#print MAIL "X-Mailer: $ver\n\n";
	#print MAIL "$mail_sub\n";
	#print MAIL "--------------------------------------------------------\n";
	#print MAIL "$mail_msg\n";
	#close(MAIL);
	#}
}

#----------------------------#
#  アイコンの定義および表示  #
#----------------------------#
sub icons {
	if ($_[0] eq 'rank') {
		if ($times - $ts{$_} < $newtime*24*60*60) {
	  	  print " <img src=\"$newgif\" width=\"$new_w\" height=\"$new_h\">";
		}
		if ($rec{$_} == 1) {
	  	  print " <img src=\"$recom\" width=\"$rec_w\" height=\"$rec_h\">";
		}

	}
	else {
		if ($times - $ts < $newtime*24*60*60) {
	  	  print " <img src=\"$newgif\" width=\"$new_w\" height=\"$new_h\">";
		}
		if ($rec == 1) {
	  	  print " <img src=\"$recom\" width=\"$rec_w\" height=\"$rec_h\">";
		}
	}
}

#--------------#
#  時間の取得  #
#--------------#
sub get_time {
	$ENV{'TZ'} = "JST-9"; # タイムゾーンを日本時間へ
	$times = time;
	($sec,$min,$hour,$mday,$mon,$year,$wday,$dmy,$dmy) = localtime($times);
	@week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');

	# 日時のフォーマット
	$date = sprintf("%04d\/%02d\/%02d(%s) %02d\:%02d",
			$year+1900,$mon+1,$mday,$week[$wday],$hour,$min);
	#$convdate = sprintf("%04d%02d%02d",$year+1900,$mon+1,$mday);
}

#################
#ページ上部分
#################
sub page_top {
#タイトル部分
	print <<"EOM"; 
<div align=\"center\">
<table width=\"760\" border=\"0\" cellpadding=\"0\" cellspacing=\"1\" bgcolor=\"#000033\">
<tr>
<td align=\"center\" bgcolor=\"#FF0099\">
<table width=\"750\" border=\"0\" cellpadding=\"5\" cellspacing=\"0\">
<tr>
<td><img src=\"$titleimg\" width=\"350\" height=\"50\"></td>
<td>　</td>
<td valign=\"bottom\"><div align=\"right\"><img src=\"$subtitleimg\" width=\"193\" height=\"40\"></div></td>
</tr>
</table>
</td></tr>
EOM

#見出しのリンク作成
	print <<"EOM";
<tr>
<td align=\"center\">
<table width=100% bgcolor=\"#ffc0cb\" cellspacing=3 cellpadding=0>
<tr>
<td>&nbsp;<a href=\"../../town.shtml\">&lt;&lt; タウンガイドTOPへ戻る</a></td>
<td><div align=\"right\">
<a href=\"$home\">HOMEへ戻る &gt;&gt;</a> 
<font color=\"#ffa500\">.</font></div></td>
</tr>
</table>
</td></tr>
EOM
}

##################
#利用方法の作成
##################
sub kiyaku {
	print <<"EOM";
<tr>
<td align=\"center\" bgcolor=\"#FFF099\">
<table width=\"700\" border=\"0\" cellspacing=\"0\" cellpadding=\"5\">
<tr>
<td align=\"center\"><font size=\"3\" color=\"#FF0000\">【オホーツクリンクご利用について】</font></td>
</tr>
<tr><td>
オホーツクＷＥＢサービスのタウンガイド内リンク集は、北海道を中心とするさまざまな情報を入手できるように、
Webサイト開設者からの自己推薦を中心として掲載しているページです。<br>
当ページより、ご自分のWebサイトを新規登録することができます。<br>
登録を希望される方は、下記登録要領をよく読んだ上で、登録をお願いいたします。
</td></tr>
<tr><td><div align="center">
<a href="../../town-kiyaku.htm">[ オホーツクリンク利用規約 ～ ご利用の前に必ずお読み下さい ]</a></div>
</td></tr>
</table>
</td></tr>
EOM
}

###############
#ページ下部分
###############
sub page_bottom {
#ページ上部移動欄
	print <<"EOM";
<tr>
<td><div align=\"center\">
<table width=\"100%\" bgcolor=\"#ffc0cb\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\">
<tr>
<td><div align=\"center\"><a href=\"#top\"><font color=\"#FF0066\">▲</font> ページ上部へ <font color=\"#FF0066\">▲</font></a></div></td>
</tr>
</table>
</div>
</td></tr>
EOM

#著作権を表示
	print <<"EOM";
<tr>
<td bgcolor=\"#FF0099\">
<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
<tr>
<td bgcolor=\"#FF0099\">
<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"3\">
<tr>
<td><font color=\"#FFFFFF\"> E-mail：<a href=\"mailto:staff\@okhotsk.or.jp\">staff\@okhotsk.or.jp</a></font><font color=\"#FF0099\"> .</font></td>
<td><div align=\"center\"></div></td>
<td><div align=\"right\"><font color=\"#FFFFFF\">Copyright&copy; 2003 System Supply Co.,Ltd All Rights Reserved.</font><font color=\"#FF0099\"> .</font><br></div></td></tr>
</table>
</td></tr>
</table>
</td></tr>
</table>
</div>
</body></html>
EOM
}

