<?
/////////////////////////////////////////////////////////////////////


//★★★全体注意:開始★★★
// honey 以外でも動く可能性はありますが(PHP4.3.0以上ならたぶんOK)
// 外部サーバでの動作保証はできません。
//★★★全体注意:終了★★★

ini_set('magic_quotes_gpc', 'off');

//★★★HTML記述注意:開始★★★
//・ フォームへのリンクは必ず GET メソッドで行う(a href, window.open, form...method="GET"など)
//・ <input type="hidden" name="_page" value="#_page#">
//   <input type="hidden" name="_next_page" value="#_next_page#">
//   を必ず入れる。
//・ checkbox, radio に限り、name="hoge[]" のように、"[]" を name の最後につける
//   このデータは下記設定において "hoge" で参照する。
//・ 各スキン内では、#(フォームのname = ...)# の変数を利用可能。
//   エラースキン内に限り、#_errmsg# (エラーメッセージ) を利用可能。
//★★★HTML記述注意:開始★★★

//define('DEBUG_ADDR', '58.4.61.202');
define('DEBUG_ADDR', FALSE);


//★★★設定:開始★★★

//■■■システム設定:開始■■■
//■文字コード
//★ "Shift_JIS" のみ。このフォーム、スキン等全て Shift_JIS + CRLF で記述してください。
$encoding = "Shift_JIS";
//■■■システム設定:終了■■■

define('MASTER_DIR','/home/www_snowpeak_co_jp');//本サーバ
//define('MASTER_DIR','/home/virtual/snowpeak_niigata-inet_jp');//テストサーバ

define('CSV_FILEPATH','/csv/collects/gs-320');//MASTER_DIR . CSV_FILEPATH となる
define('CSV_FILENAME','gs-320_form.csv');//出力ファイル名

//■■■スキン、ページ遷移、項目設定:開始■■■
//■スキンのあるディレクトリ
//$skin_dir = '/home/www/htdocs/www/f/f1';
$skin_dir = MASTER_DIR . '/public_html/info/collects/gs-320';

//■入力エラースキン
//$error_skin = 'join_error.html';
$error_skin = 'error.html';

//■基本ページ遷移順
//左から順に遷移します。//■例外遷移で、ジャンプすることができます。
//$pages = array('join5.html', 'join7.html', 'join8.html', 'join8-1.html');
$pages = array('form.html', 'henkin_tsuika.html', 'confirm_refund.html', 'thanks_refund.html', 'confirm_norefund.html', 'thanks_norefund.html');

//■その中でサンクス扱いなもの
//サンクス(完全終了)のスキン名。多重投稿を避ける初期化のために必要。
//$thanks_pages = array('join4.html', 'join8.html', 'join8-1.html');
$thanks_pages = array('thanks_refund.html','thanks_norefund.html');

//■例外遷移
//EOLからEOLの間を設定。タブ区切り。
//エクセルで管理して、コピペでここに貼り付けると簡単(エクセルにも貼りやすい)。
// name = フォームの name = ... の部分
// type = 判定する方法; value: 値(正規表現), num: 選択数(checkboxの場合)
// value = 判定する値
// jumpto = //■基本ページ遷移順 の中で、指定されているページに強制ジャンプ
$irregular_jump = <<<EOL
name	type	value	jumpto
is_member	value	入力完了	form.html
jumpto	value	confirm	confirm_norefund.html
jumpto	value	refund	henkin_tsuika.html
1name	value	山田太郎	hf_confirm2.html
5SQ1	value	(運輸関係|サービス業関係)	hf_confirm2.html
Q2	num	^[5-9]$	hf_confirm2.html
EOL;

//■項目設定
//EOLからEOLの間を設定。タブ区切り。
//エクセルで管理して、コピペでここに貼り付けると簡単(エクセルにも貼りやすい)。
// name = フォームの name = ... の部分
// page = ■基本ページ遷移順 で設定している、この項目がどこのページに含まれるか
// type = [radio|text|textarea|checkbox|hidden]
// jname = 項目の日本語名: エラー時に使われる
// reformat = 自動変換;
//    Kva: 「半角カタカナ」を「全角カタカナ」に変換し、「全角」英数字を「半角」に変換
//    詳しくは
//    http://php.s3.to/man/function.mb-convert-kana.html
//    のオプションを利用可能。
// necessary = 入力必須; 1: 必須, 0: 任意
// necessary_error = 入力必須に引っかかったときのエラーメッセージ。設定しなければ
//    自動的に挿入。
// regexp = 文字列チェック用正規表現
// regexp_error = 正規表現チェックに引っかかったときのエラーメッセージ。
//   設定しなければ自動的に挿入。
$columns = <<<EOL
name	page	type	jname	reformat	necessary	necessary_error	regexp	regexp_error
email_check	form.html	text	会員ID(E-MAILアドレス) 	Kva			^[a-zA-Z0-9\?\/\.\_\+\-]+\@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$	
password	form.html	text	パスワード	Kva				
num_gs320	form.html	text	受付製品	Kva	1		^[0-9]+$	
name_kanji_1	form.html	text	お名前（姓）	Kva	1			
name_kanji_2	form.html	text	お名前（名）	Kva	1			
name_kana_1	form.html	text	フリガナ（姓）	Kva	1			
name_kana_2	form.html	text	フリガナ（名）	Kva	1			
home_zip	form.html	text	ご自宅郵便番号	Kva	1		^[0-9][0-9][0-9]\-[0-9][0-9][0-9][0-9]$	
home_addr_1	form.html	select	ご自宅住所		1			
home_phone	form.html	text	ご自宅電話番号	Kva	1		^[0-9\(\)-]{9,16}$	
extra_addr_is	form.html	checkbox	引き取り先・返送先指定					
extra_name	form.html	text	引き取り先・返送先名	Kva				
extra_zip	form.html	text	引き取り先・返送先郵便番号	Kva			^[0-9][0-9][0-9]\-[0-9][0-9][0-9][0-9]$	
extra_addr	form.html	text	引き取り先・返送先住所	Kva				
extra_phone	form.html	text	引き取り先・返送先電話番号	Kva			^[0-9\(\)-]{9,16}$	
email	form.html	text	E-mail	Kva			^[a-zA-Z0-9\?\/\.\_\+\-]+\@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$	
send_mon	form.html	text	引き取り希望日(月)	Kva			^[0-9]+$	
send_day	form.html	text	引き取り希望日(日)	Kva			^[0-9]+$	
send_daytime	form.html	select	引き取り希望日(時間帯)					
remark_memo	form.html	textarea	備考	Kva				
refund_by	henkin_tsuika.html	radio	返金方法		1			
acc_name	henkin_tsuika.html	text	口座名義人	Kva				
bank	henkin_tsuika.html	text	金融機関名称（銀行名）	Kva				
branch	henkin_tsuika.html	text	金融機関名称（支店名）	Kva				
acc_type	henkin_tsuika.html	text	口座の種類	Kva				
acc_no	henkin_tsuika.html	text	口座番号	Kva			^[0-9a-zA-Z\-_\(\)]+$	
								
email1	join3.html	text	email	Kva	1		^[a-zA-Z0-9\?\/\.\_\+\-]+\@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$	E-mail を半角で正しく入力してください。
email2	join3.html	text	email(確認)	Kva	1		^[a-zA-Z0-9\?\/\.\_\+\-]+\@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$	E-mail を半角で正しく入力してください。
1name	hf1.html	text	お名前	Kva	1	【お名前】は必須でございまする。		
2address	hf1.html	text	ご住所	Kva	1			
3tel	hf1.html	text	お電話番号	Kva	1		^[0-9\(\)-]{9,16}$	電話番号を 03-1234-5678 のように入力してください。
4mail	hf1.html	text	E-mail	Kva	0		^[a-zA-Z0-9\?\/\.\_\+\-]+\@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$	E-mail を半角で正しく入力してください。
5SQ1	hf1.html	radio	SQ1		1			
6SQ2	hf1.html	radio	SQ2		1			
7SQ3	hf1.html	radio	SQ3		0			
Q1	hf1.html	radio	Q1		1			
Q2	hf1.html	radio	Q2		1			
Q3	hf1.html	radio	Q3		1			
Q4	hf2.html	radio	Q4		1			
Q5	hf2.html	radio	Q5		1			
Q6-1	hf2.html	radio	Q6-1		1			
Q6-2	hf2.html	radio	Q6-2		1			
Q6-3	hf2.html	radio	Q6-3		1			
Q6-4	hf2.html	radio	Q6-4		1			
Q7	hf2.html	radio	Q7		1			
Q8	hf2.html	radio	Q8		1			
Q9	hf2.html	radio	Q9		1			
password1	join5.html	text	パスワード	Kva	1			
password2	join5.html	text	パスワード	Kva	1			
name_kanji_1	join5.html	text	お名前	Kva	1			
name_kanji_2	join5.html	text	お名前	Kva	1			
name_kana_1	join5.html	text	フリガナ	Kva	1			
name_kana_2	join5.html	text	フリガナ	Kva	1			
sex	join5.html	radio	性別		1			
dob_year	join5.html	text	生年月日	Kva	1		^[12][0-9][0-9][0-9]$	
dob_mon	join5.html	text	生年月日	Kva	1		^[01]?[0-9]$	
dob_day	join5.html	text	生年月日	Kva	1		^[0-3]?[0-9]$	
family	join5.html	select	家族構成		1			
home_zip	join5.html	text	郵便番号	Kva	1		^[0-9][0-9][0-9]\-[0-9][0-9][0-9][0-9]$	
home_addr_1	join5.html	select	都道府県		1			
home_addr_2	join5.html	text	住所	Kva	1			
home_phone	join5.html	text	電話番号	Kva	1		^[0-9\(\)-]{9,16}$	
mailmag_1	join5.html	radio	メールマガジン		1			
nickname	join5.html	text	ニックネーム	Kva	0			
profile	join5.html	text	プロフィール	Kva	0			
EOL;

//■■■スキン、ページ遷移、項目設定:終了■■■



//■■■メール、ファイル書き出し:開始■■■
//■ページ内処理
//EOLからEOLの間を設定。タブ区切り。
//エクセルで管理して、コピペでここに貼り付けると簡単(エクセルにも貼りやすい)。
// page = ページ名
// when = いつ実行するか;
//    begin: そのページの処理を開始する前に実行
//    end: そのページの処理を終了後に実行
//    ★基本的には end だけを使うこと。
// func = 実行内容
//    mail: メールを送信
//    file: ファイルに書き出し
// serial = 実行設定No.
//    後の、メールスキンやファイル吐き出し設定のどのセットを用いるかの
//    管理シリアルNo.

$page_func = <<<EOL
page	when	func	serial
thanks_refund.html	end	mail	0
thanks_refund.html	end	file	0
thanks_norefund.html	end	mail	1
thanks_norefund.html	end	file	0

join4.html	end	mail	0
hf1.html	begin	mail	0
hf1.html	end	mail	1
hf2.html	end	file	0
hf2.html	end	file	1
hf2.html	end	mail	0
hf_thanks.html	end	file	0
hf_thanks.html	end	file	1
hf_thanks.html	end	mail	1
EOL;

//■メールスキン[0]
// [n] の部分は、$page_func -> serial が参照される
// #(フォームのname = ...)# の変数を利用可能。
// From: info@snowpeak.co.jp
// Bcc: info@snowpeak.co.jp
$mail_skin[0] = <<<EOL
From: info@snowpeak.co.jp
To: #email#
Bcc: info@snowpeak.co.jp
Subject: [SnowPeak] 「ギガパワーＬＩストーブ メタルクラブ」引き取り・返金受付完了の件 
MIME-Version: 1.0
Content-Type: text/plain; charset="ISO-2022-JP"
Content-Transfer-Encoding: 7bit

「GS-320 ギガパワーＬＩストーブ メタルクラブ」引き取り・返金受付が完了
いたしましたのでご連絡いたします。このメールは、返金が完了する
まで保管いただきますようお願いいたします。
返金は、引き取り完了後10営業日程度でご指定口座へのご入金もしくは、
現金書留をお送りいたします。

何かご不明な点がございましたら、お気軽に下記連絡先までお問い
合わせくださいますようお願いいたします。

■お申し込み内容

受付製品: GS-320 ギガパワーＬＩストーブ メタルクラブ #num_gs320# 個
お名前: #name_kanji_1# #name_kanji_2#
フリガナ: #name_kana_1# #name_kana_2#
ご自宅郵便番号: #home_zip#
ご自宅住所: #home_addr_1#
ご自宅電話番号: #home_phone#
引き取り先・返送先指定: #extra_addr_is#
引き取り先・返送先名: #extra_name#
引き取り先・返送先郵便番号: #extra_zip#
引き取り先・返送先住所: #extra_addr#
引き取り先・返送先電話番号: #extra_phone#
E-mail: #email#
引き取り希望日: #send_mon#月#send_day#日
引き取り希望日(時間帯): #send_daytime#
備考: #remark_memo#
返金方法: #refund_by#
口座名義人: #acc_name#
金融機関名称（銀行名）: #bank#
金融機関名称（支店名）: #branch#
口座の種類: #acc_type#
口座番号: #acc_no#

------------------------------------
＜お問い合わせ先＞
株式会社スノーピーク　「GS-320 ギガパワーＬＩストーブ メタルクラブ回収係」
新潟県三条市三貫地958
フリーダイヤル：0120-010-660
受付時間：9：00〜17：00月曜〜金曜 (土日祝祭日を除く)
TEL：0256-38-1110
FAX：0256-38-1015
URL：http://www.snowpeak.co.jp/
------------------------------------
EOL;

//■メールスキン[1]
// [n] の部分は、$page_func -> serial が参照される
// #(フォームのname = ...)# の変数を利用可能。
// From: info@snowpeak.co.jp
// Bcc: info@snowpeak.co.jp
$mail_skin[1] = <<<EOL
From: info@snowpeak.co.jp
To: #email#
Bcc: info@snowpeak.co.jp
Subject: [SnowPeak] 「GS-320 ギガパワーＬＩストーブ メタルクラブ」引き取り修理受付完了の件
MIME-Version: 1.0
Content-Type: text/plain; charset="ISO-2022-JP"
Content-Transfer-Encoding: 7bit

「GS-320 ギガパワーＬＩストーブ メタルクラブ」引き取り修理受付が完了
いたしましたのでご連絡いたします。このメールは、修理が完了する
まで保管いただきますようお願いいたします。

何かご不明な点がございましたら、お気軽に下記連絡先までお問い
合わせ頂ければと思います。

■お申し込み内容

受付製品: GS-320 ギガパワーＬＩストーブ メタルクラブ #num_gs320# 個
お名前: #name_kanji_1# #name_kanji_2#
フリガナ: #name_kana_1# #name_kana_2#
ご自宅郵便番号: #home_zip#
ご自宅住所: #home_addr_1#
ご自宅電話番号: #home_phone#
引き取り先・返送先指定: #extra_addr_is#
引き取り先・返送先名: #extra_name#
引き取り先・返送先郵便番号: #extra_zip#
引き取り先・返送先住所: #extra_addr#
引き取り先・返送先電話番号: #extra_phone#
E-mail: #email#
引き取り希望日: #send_mon#月#send_day#日
引き取り希望日(時間帯): #send_daytime#
備考: #remark_memo#

------------------------------------
＜お問い合わせ先＞
株式会社スノーピーク　「GS-320 ギガパワーＬＩストーブ メタルクラブ回収係」
新潟県三条市三貫地958
フリーダイヤル：0120-010-660
受付時間：9：00〜17：00月曜〜金曜 (土日祝祭日を除く)
TEL：0256-38-1110
FAX：0256-38-1015
URL：http://www.snowpeak.co.jp/
------------------------------------
EOL;

//■ファイルを吐き出すディレクトリ
// chmod 777 しておくこと。
//$file_dir = '/home/j-netcom/public_html/hersheys/f/csv';
$file_dir = MASTER_DIR . CSV_FILEPATH;


//■ファイル設定[0]
// [n] の部分は、$page_func -> serial が参照される

//吐き出しファイル名
$file_name[0] = CSV_FILENAME;

//ヘッダ行
$file_header[0] = <<<EOL
受付製品: GS-320 ギガパワーＬＩストーブ メタルクラブ,お名前,フリガナ,ご自宅郵便番号,ご自宅住所,ご自宅電話番号,引き取り先・返送先指定,引き取り先・返送先名,引き取り先・返送先郵便番号,引き取り先・返送先住所,引き取り先・返送先電話番号,E-mail,引き取り希望日,引き取り希望日(時間帯),返金方法,口座名義人,金融機関名称（銀行名）,金融機関名称（支店名）,口座の種類,口座番号
EOL;

//データ行
// #(フォームのname = ...)# の変数を利用可能。
$file_content[0] = <<<EOL
#num_gs320#,#name_kanji_1# #name_kanji_2#,#name_kana_1# #name_kana_2#,#home_zip#,#home_addr_1#,#home_phone#,#extra_addr_is#,#extra_name#,#extra_zip#,#extra_addr#,#extra_phone#,#email#,#send_mon#月#send_day#日,#send_daytime#,#refund_by#,#acc_name#,#bank#,#branch#,#acc_type#,#acc_no#,#remark_memo#
EOL;

//■ファイル設定[1]
// [n] の部分は、$page_func -> serial が参照される

//吐き出しファイル名
$file_name[1] = 'csvtest2.csv';

//ヘッダ行
$file_header[1] = <<<EOL
1name,2address,3tel,4mail,5SQ1,6SQ2,7SQ3,Q1,Q2,Q3,Q4,Q5,Q6-1,Q6-2,Q6-3,Q6-4,Q7,Q8,Q9
EOL;

//データ行
// #(フォームのname = ...)# の変数を利用可能。
$file_content[1] = <<<EOL
#1name#,#2address#,#3tel#,#4mail#,#5SQ1#,#6SQ2#,#7SQ3#,#Q1#,#Q2#,#Q3#,#Q4#,#Q5#,#Q6-1#,#Q6-2#,#Q6-3#,#Q6-4#,#Q7#,#Q8#,#Q9#
EOL;
//■■■メール、ファイル書き出し:終了■■■


//★★★設定終了★★★
/////////////////////////////////////////////////////////////////////





//★★★以下、触るの厳禁★★★
//★★★以下、触るの厳禁★★★
//★★★以下、触るの厳禁★★★
//★★★以下、触るの厳禁★★★
//★★★以下、触るの厳禁★★★
//★★★以下、触るの厳禁★★★
//★★★以下、触るの厳禁★★★
//★★★以下、触るの厳禁★★★
///////////////////////////////////////////////////////////////////////
//コンフィグの変数化
//セッションをスタート
//フォーム変数をセッションに格納
//事前アクションがあれば実行
//入力チェック
//入力エラーが無ければ,
////事後アクションがあれば実行
//フォーム変数をセッションに格納
//スキンを用いて出力
///////////////////////////////////////////////////////////////////////



///////////////////////////////////////////////////////////////////////
$debug = FALSE; //コンフィグ読み出しまで。
$debug1 = FALSE; //
$debug2 = FALSE; //
$debug3 =  FALSE;//
$debug4 = FALSE; //
$debug6 = FALSE;
$debug7 = FALSE;
$debug8 = FALSE;
$debug9 = FALSE;
$logging = FALSE;


//$_SERVER['REMOTE_ADDR'] == DEBUG_ADDR && $debug = TRUE;
//$_SERVER['REMOTE_ADDR'] == DEBUG_ADDR && $debug1 = TRUE;
$_SERVER['REMOTE_ADDR'] == DEBUG_ADDR && $debug10 = TRUE;

$debug10 && print "<PRE>";
$debug10 && print_r($_SERVER);

mb_detect_order('auto');
mb_internal_encoding($encoding);
mb_http_output($encoding);
mb_regex_encoding($encoding);

$_page_print = "";
$_page_action = "";

//コンフィグの変数化
$keys = array('irregular_jump', 'page_func', 'columns');
foreach ($keys as $key){
	$debug && print "STEP 001<BR>\n";
	// $irregular_jump 等
	//if( is_array($$key) ){
	if( isset($$key) ){
		//行分割
		$lines = explode("\n", $$key);
		$debug && print "STEP 002<BR>\n";
		//各々の行に対して
		if( is_array($lines) ){
			$line_no = 0;
			$debug && print "STEP 003<BR>\n";
			foreach ($lines as $line){
				$debug && print "STEP 004<BR>\n";
				//タブで区切る
				$data = explode("\t", $line);

				
				if( is_array($data) ){
					$debug && print "STEP 005<BR>\n";
					$data_no = 0;
					
					//空白文字除去
					foreach ($data as $datum){
						$debug && print "STEP 006<BR>\n";
						$datum = ereg_replace("^ *", "", $datum);
						$datum = ereg_replace(" *$", "", $datum);
						$datum = ereg_replace("\r", "", $datum);
						$data[$data_no] = $datum;
						
						$data_no++;
					}
				}
				
				//1行目はヘッダ
				if( $line_no == 0 ){
					$debug && print "STEP 007<BR>\n";
					$conf_header = $data;
				}else{
				//2行目以降は値
					if( is_array($data) ){
						$debug && print "STEP 008<BR>\n";
						$data_no = 0;
						foreach ($data as $datum){
							$debug && print "STEP 009<BR>\n";
							
							$debug && print "STEP 013: \$key = $key, \$data_no = $data_no, \$datum = $datum, \$conf_header[$data_no] = ".$conf_header[$data_no]."<BR>\n";
							
							if( $key == 'columns' ){
								$debug && print "STEP 010<BR>\n";
								$conf[$key][$data[0]][ $conf_header[$data_no] ] = $datum;
							}else{
								$debug && print "STEP 011<BR>\n";
								
								$conf[$key][$line_no-1][ $conf_header[$data_no] ] = $datum;
							}
							$data_no++;
						}
					}
				}
				
				$debug && print "STEP 012: \$line_no = $line_no<BR>\n";
				$line_no++;
			}
		}
	}
}

$debug && print "\$conf = <pre>\n";
$debug && print_r($conf);
$debug && print "</pre>\n";



//セッションをスタート
session_cache_limiter('private_no_expire');
session_cache_expire(0);
session_start();
//フォーム変数を格納
$debug3 && print "\$_REQUEST = <pre>\n";
$debug3 && print_r($_REQUEST);
$debug3 && print "</pre>\n";

$debug3 && print "\$GLOBAL = <pre>\n";
$debug3 && print_r($GLOBAL);
$debug3 && print "</pre>\n";

$debug3 && print "\$_POST = <pre>\n";
$debug3 && print_r($_POST);
$debug3 && print "</pre>\n";


$_FORM = array_merge($_GET, $_POST);


$debug3 && print "\$_FORM = <pre>\n";
$debug3 && print_r($_FORM);
$debug3 && print "</pre>\n";

$is_firsttime = FALSE;
//ページ指定が無ければ初期ページ
if( $_SERVER[REQUEST_METHOD] == 'GET' || (!$_FORM[_page] && !$_FORM[_next_page]) ){
	$debug10 && print "step 901<BR>\n";
	//$_FORM[_page] = $pages[count($pages) - 1];
	//$_page_action = $pages[0];
	$_page_print = $pages[0];
	//$_last_page = $pages[0];
	//$_next_page = $pages[1];
	//$_FORM[_page] = $pages[0];
	//$_FORM[_last_page] = $pages[0];
	//$_FORM[_next_page] = $pages[1];
	//セッション変数をクリア
	//unset($_SESSION);
	$_SESSION = array();
	$debug1 && print "STEP 201 \$_FORM[_next_page] = ".$_FORM[_next_page]."<BR>\n";
	$is_firsttime = TRUE;
//それ以外は次ページ
}else if($_FORM[_page] && $_FORM[_next_page]){
	$debug10 && print "step 902<BR>\n";
	$_page_action = $_FORM[_page];
	$_page_print = $_FORM[_next_page];
	//$_page = $_FORM[_next_page];
	//$_last_page = $_FORM[_page];
	//$_next_page = $_FORM[_page];
	//$_FORM[_last_page] = $_FORM[_page];
	//$_FORM[_last_page] = $_FORM[_next_page];
	//$_FORM[_last_page] = $_FORM[_page];
	//$_FORM[_page] = $_FORM[_next_page];
}else{
	print "FALTAL ERROR 981<BR>\n";
	exit;
}

$debug10 && print "900: \$_page_action = $_page_action<BR>\n";
$debug10 && print "900: \$_page_print = $_page_print<BR>\n";


// 名前[] だと 空 array() を設定してくれないので救済。
foreach ($conf[columns] as $key => $val){
	if(
		$_page_action == $conf[columns][$key][page]
		//$_FORM[_page] == $conf[columns][$key][page]
		&&
		(
			$conf[columns][$key][type] == 'radio'
			||
			$conf[columns][$key][type] == 'checkbox'
		)
		&&
		!isset($_FORM[$key])
	){
		$_FORM[$key] = array();
	}
}

$debug3 && print "\page = ".$_FORM[_page]."<BR>\n";
$debug3 && print "\lastpage = ".$_FORM[_last_page]."<BR>\n";
$debug3 && print "\nextpage = ".$_FORM[_next_page]."<BR>\n";
$debug3 && print "\$is_firsttime = $is_firsttime<BR>\n";



$debug1 && print "STEP 103 \$_FORM[_page] = ".$_FORM[_page]."<BR>\n";
$debug1 && print "STEP 103 \$_FORM[_next_page] = ".$_FORM[_next_page]."<BR>\n";


//事前アクションがあれば実行
foreach ( $conf[page_func] as $arraybuf ){
	$debug1 && print "\$arraybuf = <pre>\n";
	$debug1 && print_r($arraybuf);
	$debug1 && print "</pre>\n";
	
	//対象ページで,タイミングが合っているなら
	if( $_page_action == $arraybuf[page] &&  $arraybuf[when] == 'begin' ){
		//メールの場合
		if( $arraybuf[func] == 'mail' ){
			$debug6 && print "MAIL MODE ".$arraybuf[serial]."<BR>\n";
			//スキンを用いてメール
			$ret = @mail_send( $mail_skin[ $arraybuf[serial] ], $_SESSION );
		}else if( $arraybuf[func] == 'file' ){
		//ファイル書き出しの場合
			//ファイルが無ければヘッダを書き__666にする。
			$debug6 && print "FILE MODE ".$arraybuf[serial]."<BR>\n";
			$filebuf = $file_dir . "/" . $file_name[ $arraybuf[serial] ];
			$debug6 && print "\$arraybuf[serial] = ".$arraybuf[serial]."<BR>\n";
			if( !is_file($filebuf) ){
				//ヘッダを書き
				$file_header[ $arraybuf[serial] ] = ereg_replace("[\r\n]", "", $file_header[ $arraybuf[serial] ]);
				$file_header[ $arraybuf[serial] ] .= "\n";
				error_log($file_header[ $arraybuf[serial] ], 3, $filebuf);
				//chmod 666
				chmod($filebuf, 0666);
			}
			//データを書き出す。
			$contbuf = $file_content[ $arraybuf[serial] ];
			foreach ($_SESSION as $key => $val){
				//if( is_array($val) && count($val) > 0 ){
				//	$val = implode("__", $val);
				//}
				
				if( is_array($val) ){
					if( count($val) > 0 ){
						$val = implode("__", $val);
					}else{
						$val = "";
					}
				}				
				
				$val = ereg_replace("\r", "", $val);
				$val = ereg_replace("\n", "<BR>", $val);
				$val = ereg_replace('"', "", $val);
				$val = ereg_replace(',', "", $val);
				$contbuf = ereg_replace("#$key#", "$val", $contbuf);
			}
			//$contbuf = ereg_replace
			$contbuf = ereg_replace("#[a-zA-Z0-9_%-]+#", "", $contbuf);
			$contbuf = ereg_replace("[\r\n]", "", $contbuf);
			$contbuf .= "\n";
			error_log($contbuf, 3, $filebuf);
		}
	}
}

$debug3 && print "\$_FORM = <pre>\n";
$debug3 && print_r($_FORM);
$debug3 && print "</pre>\n";


//入力チェック__コンバート等
$_FORM[_errmsg] = "";

//これだと__checkbox,radioが拾えない。
// $_FORM をマージするか...

//はじめてでなければ
if( !$is_firsttime ){
	foreach ( $_FORM as $key => $val ){
	//for($i=0; $i<count($_FORM); $i++){

		//radio, checkboxの場合
		//if( is_array($_FORM[$i]) ){
		//if( is_array($val) ){
		$debug3 && print "STEP 402 :\$conf[columns][$key][type]:".$conf[columns][$key][type]."<BR>\n";
		$debug3 && print "STEP 403 :\$conf[columns][$key][type]:".$conf[columns][$key][type]."<BR>\n";
		if(
			$conf[columns][$key][type] == 'radio'
			||
			$conf[columns][$key][type] == 'checkbox'
		){
			$debug3 && print "STEP 401 :$key:".$_FORM[$key]."<BR>\n";
			//for($j=0; $j<count($_FORM[$i]); $j++){
			//データ一つ一つに対し
			for($j=0; $j<count($val); $j++){
				//
			}

			//入力必須なら入力必須
			if( $conf[columns][$key][necessary] ){
				//この場合は選択必須
				if( !is_array($_FORM[$key]) || count($_FORM[$key]) == 0 ){
					//エラー
					//エラーメッセージが設定されているなら
					if( $conf[columns][$key][necessary_error] ){
						$_FORM[_errmsg] .= "<font color=\"#ff0000\">"
							.$conf[columns][$key][necessary_error]
							."</font><br>\n";
					}else{
					//そうでなければ
						$_FORM[_errmsg] .= "<font color=\"#ff0000\">"
							.$conf[columns][$key][jname]
							." は選択必須です。"
							."</font><br>\n";
					}
				}
			}
			
			//例外ジャンプ先
			foreach ( $conf[irregular_jump] as $arraybuf ){
				// key が一致する場合
				$logging && error_log("STEP 870<BR>\n", 3, "/var/tmp/ygtfrexr.log");
				if( $key == $arraybuf[name] ){
					$logging && error_log("STEP 871<BR>\n", 3, "/var/tmp/ygtfrexr.log");
					// numタイプなら
					if( $arraybuf[type] == 'num' || $arraybuf[type] == 'count' ){
						if(
							is_array($_FORM[$key])
							&&
							ereg($arraybuf[value], count($_FORM[$key]))
						){
							//$_FORM[_page] = $arraybuf[jumpto];
							$debug7 && print "STEP 872<BR>\n";
							$logging && error_log("STEP 872<BR>\n", 3, "/var/tmp/ygtfrexr.log");
							$_page_print = $arraybuf[jumpto];
							break 1;
						}else{
							$logging && error_log("STEP 872<BR>\n", 3, "/var/tmp/ygtfrexr.log");
						}
					// value タイプなら
					}else if( $arraybuf[type] == 'value' || $arraybuf[type] == 'val' ){
						//一つ一つのvalueでチェック
						$logging && error_log("STEP 876<BR>\n", 3, "/var/tmp/ygtfrexr.log");
						foreach ($_FORM[$key] as $valbuf){
							$logging && error_log("STEP 877 ".$arraybuf[value].":".$valbuf."\n", 3, "/var/tmp/ygtfrexr.log");
							if( mb_ereg($arraybuf[value], $valbuf) ){
								//$_FORM[_page] = $arraybuf[jumpto];
								$_page_print = $arraybuf[jumpto];
								$debug7 && print "STEP 873<BR>\n";
								$logging && error_log("STEP 873<BR>\n", 3, "/var/tmp/ygtfrexr.log");
								break 2;
							}
						}
					}
				}
			}
		//
		// inpu type = text
		}else{
			$debug3 && print "STEP 301 :$key:".$_FORM[$key]."<BR>\n";
			//コンバート設定されていればコンバート
			if( $conf[columns][$key][reformat] ){
				//コンバート
				//$buf = mb_convert_kana
				$buf = mb_convert_kana($_FORM[$key], $conf[columns][$key][reformat]); 
				//成功したら書き換え
				if( strlen($buf) > 0 ){
					$_FORM[$key] = $buf;
				}
			}
			
			//入力必須なら入力必須
			$this_necessary_error = FALSE;
			if( $conf[columns][$key][necessary] ){
				//この場合は選択必須
				//if( !is_array($_FORM[$key]) || count($_FORM[$key]) ){
				if( !isset($_FORM[$key]) || strlen($_FORM[$key]) == 0 ){
					$debug1 && print "STEP 105 :$key:".$_FORM[$key]."<BR>\n";
					$this_necessary_error = TRUE;
					//エラー
					//エラーメッセージが設定されているなら
					if( $conf[columns][$key][necessary_error] ){
						$_FORM[_errmsg] .= "<font color=\"#ff0000\">"
							.$conf[columns][$key][necessary_error]
							."</font><br>\n";
					}else{
					//そうでなければ
						$_FORM[_errmsg] .= "<font color=\"#ff0000\">"
							.$conf[columns][$key][jname]
							." は入力必須です。"
							."</font><br>\n";
					}
				}else{
					$debug1 && print "STEP 104 :$key:".$_FORM[$key]."<BR>\n";
				}
			}
			$debug1 && print "STEP 106 :$key:$this_necessary_error:".$_FORM[$key]."<BR>\n";
			//入力必須エラーが発生しておらず,
			//正規表現チェックが登録されているならチェック
			if(
				$this_necessary_error != TRUE
				&&
				$conf[columns][$key][regexp]
				&&
				( isset($_FORM[$key]) && strlen($_FORM[$key]) > 0 )
			){
				//正規表現チェック
				if( !mb_ereg($conf[columns][$key][regexp], $_FORM[$key]) ){
					//正規表現エラー
					//エラーメッセージが設定されているなら
					if( $conf[columns][$key][regexp_error] ){
						$_FORM[_errmsg] .= "<font color=\"#ff0000\">"
							.$conf[columns][$key][regexp_error]
							."</font><br>\n";
					}else{
					//そうでなければ
						$_FORM[_errmsg] .= "<font color=\"#ff0000\">"
							.$conf[columns][$key][jname]
							." を正しく入力してください。"
							."</font><br>\n";
					}
				}
			}

			//例外ジャンプ先
			foreach ( $conf[irregular_jump] as $arraybuf ){
				// key が一致する場合
				if( $key == $arraybuf[name] ){
					// value タイプなら
					if( $arraybuf[type] == 'value' || $arraybuf[type] == 'val' ){
						if( mb_ereg($arraybuf[value], $_FORM[$key]) ){
							//$_FORM[_page] = $arraybuf[jumpto];
							$_page_print = $arraybuf[jumpto];
							$debug7 && print "STEP 875 \$_page_print = $_page_print<BR>\n";
							$logging && error_log("STEP 875 \$_page_print = $_page_print<BR>\n", 3, "/var/tmp/ygtfrexr.log");

							break 1;
						}
					}
				}
			}

		}
		
	}

	//★★★★★★例外手動処理★★★★★★
	//print "\$_page_action = $_page_action<BR>\n";
	//エラーが無い場合。
	$debug10 && print "step 101<BR>\n";

	if( !$_FORM[_errmsg] ){
		$debug10 && print "step 102<BR>\n";
		if(
			$_page_action == 'form.html' //基本フォームで、
			&&
			!$_FORM['is_member']	//会員情報参照モードで無い場合
		){
			$debug10 && print "step 103<BR>\n";
			if(
				//引き取り先・返送先住所
				//なんらか一つが入力あるが、不備がある
				(
					$_FORM['extra_addr_is']
					||
					$_FORM['extra_name']
					||
					$_FORM['extra_zip']
					||
					$_FORM['extra_addr']
					||
					$_FORM['extra_phone']
				)
				&&
				(
					!$_FORM['extra_addr_is']
					||
					!$_FORM['extra_name']
					||
					!$_FORM['extra_zip']
					||
					!$_FORM['extra_addr']
					||
					!$_FORM['extra_phone']
				
				)
			){
				$debug10 && print "step 104<BR>\n";
				$_FORM[_errmsg] .=
					"<font color=\"#ff0000\">引き取り先・返送先住所 に入力不備があります。"
					//.$conf[columns][$key][jname]
					//." を正しく入力してください。"
					."</font><br>\n";
			}
			
			if(
				//引き取り先・返送先住所
				//なんらか一つが入力あるが、不備がある
				(
					$_FORM['send_mon']
					||
					$_FORM['send_day']
				)
				&&
				(
					!$_FORM['send_mon']
					||
					!$_FORM['send_day']
				)
			){
				$debug10 && print "step 105<BR>\n";
				$_FORM[_errmsg] .=
					"<font color=\"#ff0000\">引き取り希望日・時間帯 に入力不備があります。"
					//.$conf[columns][$key][jname]
					//." を正しく入力してください。"
					."</font><br>\n";
			}else{
				/*
				//★日付前後チェックを止める//
				
				$unixtime_limit = mktime(0,0,0,9,20);
				$unixtime_inputed = mktime(0,0,0,$_FORM['send_mon'],$_FORM['send_day']);
				
				if( $unixtime_inputed < $unixtime_limit ){
					$_FORM[_errmsg] .=
						"<font color=\"#ff0000\">引き取り希望日は 9/20以降 でご指定ください。"
						//.$conf[columns][$key][jname]
						//." を正しく入力してください。"
						."</font><br>\n";
				}
				*/
			}

		}else if( $_page_action == 'henkin_tsuika.html' ){
			if(
				//銀行振込だが不備がある
				(
					$_FORM['refund_by'] == '銀行振込'
					||
					in_array('銀行振込', $_FORM['refund_by'])
				)
				&&
				(
					!$_FORM['acc_name']
					||
					!$_FORM['bank']
					||
					!$_FORM['branch']
					||
					!$_FORM['acc_type']
					||
					!$_FORM['acc_no']
				)
			){
				$debug10 && print "step 105<BR>\n";
				$_FORM[_errmsg] .=
					"<font color=\"#ff0000\">口座名義人〜口座番号 に入力不備があります。"
					//.$conf[columns][$key][jname]
					//." を正しく入力してください。"
					."</font><br>\n";
			}
			
		}else if( $_page_action == 'join5.html' ){
			if( $_FORM[password1] != $_FORM[password2] ){
				$_FORM[_errmsg] .=
					"<font color=\"#ff0000\">入力された二つのパスワードが異なります。"
					//.$conf[columns][$key][jname]
					//." を正しく入力してください。"
					."</font><br>\n";
			}else if( ereg("[^a-zA-Z0-9#@,_\.\&\-]", $_FORM[password1]) ){
				$_FORM[_errmsg] .=
					"<font color=\"#ff0000\">パスワードは半角英数で設定してください。"
					//.$conf[columns][$key][jname]
					//." を正しく入力してください。"
					."</font><br>\n";
			}
			if(
				( $_FORM[nickname] || $_FORM[profile] ) //いずれか入力ずみで
				&&
				( !$_FORM[nickname] || !$_FORM[profile] ) //いずれか欠落なら
			){
				$_FORM[_errmsg] .=
					"<font color=\"#ff0000\">ニックネームまたはプロフィールが入力されていません。"
					//.$conf[columns][$key][jname]
					//." を正しく入力してください。"
					."</font><br>\n";
			}
		}
	}
	//★★★★★★例外手動処理★★★★★★
}


//★★★★★★例外手動処理★★★★★★
//print "\$_page_action = $_page_action<BR>\n";
$debug10 && print "step 910: \$_page_action = $_page_action<BR>\n";
$debug10 && print "step 910: \$_page_print = $_page_print<BR>\n";
$debug10 && print "step 910: \$_FORM['is_member'] = {$_FORM['is_member']}<BR>\n";


//★会員情報を引くので、入力エラーを無視して実行
if(
	$_page_action == 'form.html' && $_FORM['is_member']
){ //初期ページなので $_page_action ではなく。
	$sql = "SELECT home_addr_1 || home_addr_2 AS home_addr_1, *, home_addr_1 || home_addr_2 AS home_addr_1 FROM user_mst WHERE email = '$_FORM[email_check]' AND password = '$_FORM[password]'";
	$debug10 && print "step 000: \$sql = $sql<BR>\n";
	
	//DB接続
	if( !($link = pg_connect("host=127.0.0.1 dbname=snowpeak user=postgres")) ){
		print "ERROR: DB connection error. [CODE: 9763]";
		exit;
	}
	//クエリ実行
	if( !($ret = pg_query($link, $sql)) ){
		print "ERROR: DB query error. [CODE: 9764]";
		exit;
	}
	
	$debug10 && print "step 001<BR>\n";
	if( pg_numrows($ret) == 1 ){
		$keysary = array('email','password','name_kanji_1','name_kanji_2','name_kana_1','name_kana_2','home_zip','home_addr_1','home_phone');
		
		foreach ($keysary as $k){
			$debug10 && print "step 002: $k => {$_SESSION[$k]}<BR>\n";
			$_SESSION[$k] = $_FORM[$k] = mb_convert_encoding(pg_fetch_result($ret, 0, "$k"), "Shift_JIS", "EUC-JP");
		}
	}
	//特別処理なのでエラーは除去
	$_FORM[_errmsg] = "";

	/*
	$emailbuf = pg_fetch_result($ret, 0, "email");
	if( !$emailbuf ){
		print "ERROR: DB query error. [CODE: 9765]";
		exit;
	}
	$_SESSION[email] = $_FORM[email] = $emailbuf;
	*/
	
}

//エラーが無い場合。
if( !$_FORM[_errmsg] ){
	if( $_page_print == 'join5.html' ){ //初期ページなので $_page_action ではなく。
		$sql = "SELECT email FROM email_auth WHERE auth_key = '$_FORM[k]'";

		//DB接続
		if( !($link = pg_connect("host=127.0.0.1 dbname=snowpeak user=postgres")) ){
			print "ERROR: DB connection error. [CODE: 9763]";
			exit;
		}
		//クエリ実行
		if( !($ret = pg_query($link, $sql)) ){
			print "ERROR: DB query error. [CODE: 9764]";
			exit;
		}

		$emailbuf = pg_fetch_result($ret, 0, "email");
		if( !$emailbuf ){
			print "ERROR: DB query error. [CODE: 9765]";
			exit;
		}
		$_SESSION[email] = $_FORM[email] = $emailbuf;
		
	}else if( $_page_action == 'join7.html' ){
	//if( $_page_print == 'join5.html' ){ //初期ページなので $_page_action ではなく。
		//DBから引く
		//$sql = "SELECT email FROM email_auth WHERE auth_key = '$_FORM[k]'";

		//DB接続
		if( !($link = pg_connect("host=127.0.0.1 dbname=snowpeak user=postgres")) ){
			print "ERROR: DB connection error. [CODE: 9763]";
			exit;
		}

		require_once "../modules.inc";
		
		if( $_SESSION[nickname] ){
			//ニックネーム重複チェック
			//$sql = "SELECT count(nickname) FROM user_mst WHERE nickname = '$_SESSION[nickname]'";
			
			
			$sql = "SELECT count(nickname) FROM user_mst WHERE nickname ~ '^[ 　]*" . _escape_for_regexp($_SESSION[nickname]) . "[ 　]*$'";
			//SQL文字コードEUCに。
			$sql = mb_convert_encoding($sql, "EUC_JP", "Shift_JIS");

			//クエリ実行
			if( !($ret = pg_query($link, $sql)) ){
				print "ERROR: DB query error. [CODE: 9764]";
				exit;
			}

			$countbuf = pg_fetch_result($ret, 0, "count");
			if( $countbuf ){
				print "そのニックネームは使われています。";
				print "<form><input type=\"button\" value=\"戻る\" onClick=\"javascript:history.go(-1)\"></form>\n";
				exit;
			}
		}

		//SQL生成
		$mailmag_1_buf = implode('', $_SESSION[mailmag_1]);
		$sex_buf = implode('', $_SESSION[sex]);
		$sql = "
			INSERT INTO user_mst (
				email,
				password,
				name_kanji_1,
				name_kanji_2,
				name_kana_1,
				name_kana_2,
				home_addr_1,
				home_addr_2,
				home_addr_3,
				home_phone,
				home_fax,
				home_zip,
				dob,
				job,
				sex,
				enq_1,
				family,
				mailmag_1,
				nickname,
				created_date,
				profile
			) VALUES (
				'$_SESSION[email]',
				'$_SESSION[password1]',
				'$_SESSION[name_kanji_1]',
				'$_SESSION[name_kanji_2]',
				'$_SESSION[name_kana_1]',
				'$_SESSION[name_kana_2]',
				'$_SESSION[home_addr_1]',
				'$_SESSION[home_addr_2]',
				'$_SESSION[home_addr_3]',
				'$_SESSION[home_phone]',
				'$_SESSION[home_fax]',
				'$_SESSION[home_zip]',
				'$_SESSION[dob_year]/$_SESSION[dob_mon]/$_SESSION[dob_day]',
				'$_SESSION[job]',
				'$sex_buf',
				'$_SESSION[enq_1]',
				'$_SESSION[family]',
				'$mailmag_1_buf',
				'$_SESSION[nickname]',
				now(),
				'$_SESSION[profile]'
			);
		";
		
//		$sql = "
//			INSERT INTO email_auth (auth_key, email, stat) VALUES
//			('$_FORM[auth_key]', '$_FORM[email1]', 'requested');
//		";
		//SQL文字コードEUCに。
		$sql = mb_convert_encoding($sql, "EUC_JP", "Shift_JIS");
		$sql = stripslashes($sql);
		
		//print "\$sql = $sql<BR>\n";
		
		//クエリ実行
		if( !($ret = @pg_query($link, $sql)) ){
			if( eregi("duplicate key ", pg_last_error($link)) ){
				print "登録済みのユーザ様は、以下より会員情報閲覧、変更が可能となります。<br>";
				print "<form><input type=\"button\" value=\"個人情報変更\" onClick=\"location.href='https://secure.snowpeak.co.jp/f/f3/'\"></form>";
				exit;
			}
			print "ERROR: DB query error. [CODE: 9764]";
			exit;
		}

		if( $_SESSION[nickname] && $_SESSION[profile] ){
			$sql = "
				INSERT INTO kanshin_entries (
					key,
					email,
					nickname,
					profile,
					cmd,
					stat
				) VALUES (
					get_idx_from_email('$_SESSION[email]'),
					'$_SESSION[email]',
					'$_SESSION[nickname]',
					'$_SESSION[profile]',
					'create',
					'1'
				);
			";

			//SQL文字コードEUCに。
			$sql = mb_convert_encoding($sql, "EUC_JP", "Shift_JIS");

			//クエリ実行
			if( !($ret = pg_query($link, $sql)) ){
				print "ERROR: DB query error. [CODE: 9764]";
				exit;
			}
		}
		
		//
//		$emailbuf = pg_fetch_result($ret, 0, "email");
//		if( !$emailbuf ){
//			print "ERROR: DB query error. [CODE: 9765]";
//			exit;
//		}
//		$_SESSION[email] = $_FORM[email] = $emailbuf;
	}
}
//print "\$sql = $sql \$_page_action = $_page_action<BR>\n";
//print "$_FORM[_errmsg]";
//★★★★★★例外手動処理★★★★★★


//最後のページの場合は__二重投稿回避
//
$debug9 && print "STEP 916<BR>\n";
$debug9 && print "\$_SESSION[_submitted] = ".$_SESSION[_submitted]."<BR>\n";
$logging && error_log("STEP 916<BR>\n", 3, "/var/tmp/ygtfrexr.log");
$logging && error_log("\$_SESSION[_submitted] = ".$_SESSION[_submitted]."<BR>\n", 3, "/var/tmp/ygtfrexr.log");
if(
	in_array($_page_print, $thanks_pages)
	//$_page_print == $pages[ count($pages) - 1 ]
){
	//二重投稿
	if( $_SESSION[_submitted] == 1 ){
		$_FORM[_errmsg] .= "<font color=\"#ff0000\">"
			."多重申込みはできません。"
			."</font><br>\n";

		$_page_print = $error_skin;

		//スキンを用いて出力
		$skinbuf = "";
		// URL の場合
		// 絶対パスの場合
		if(
			eregi("^http://", $_page_print)
			||
			eregi("^/", $_page_print)
		){
			$skinbuf = $_page_print;
		// それ以外
		}else{
			$skinbuf = $skin_dir . "/" . $_page_print;
		}

		$html_print = print_skin($skinbuf, $_FORM);
		$debug3 && print "STEP 101 ".$_page_print."<BR>\n";
		
		//unset($_SESSION);
		//$_SESSION = array();
		print $html_print;
		
		$debug9 && print "STEP 917<BR>\n";
		$debug9 && print "\$_SESSION[_submitted] = ".$_SESSION[_submitted]."<BR>\n";
		$logging && error_log("STEP 917<BR>\n", 3, "/var/tmp/ygtfrexr.log");
		$logging && error_log("\$_SESSION[_submitted] = ".$_SESSION[_submitted]."<BR>\n", 3, "/var/tmp/ygtfrexr.log");
		exit;
	}
}


$debug7 && print "STEP 876 \$_page_print = $_page_print<BR>\n";
//入力エラーがあれば,エラースキンに設定
if( $_FORM[_errmsg] ){
	//$_FORM[_page] = $error_skin;
	$_page_print = $error_skin;

	//スキンを用いて出力
	$skinbuf = "";
	// URL の場合
	// 絶対パスの場合
	if(
		eregi("^http://", $_page_print)
		||
		eregi("^/", $_page_print)
	){
		$skinbuf = $_page_print;
	// それ以外
	}else{
		$skinbuf = $skin_dir . "/" . $_page_print;
	}

	$html_print = print_skin($skinbuf, $_FORM);
	$debug3 && print "STEP 101 ".$_page_print."<BR>\n";
	print $html_print;
	exit;
}else{
//入力エラーが無ければ,
//フォーム変数をセッションに格納
	$_SESSION = array_merge($_SESSION, $_FORM);


	//★★★★★★例外手動処理★★★★★★
	//print "\$_page_action = $_page_action<BR>\n";
	//エラーが無い場合。
	if( !$_FORM[_errmsg] ){
		if( $_page_action == 'join3.html' ){
			//DBに登録
			//メールアドレス
			$buf = md5($_FORM[email] . time());
			//$_FORM[auth_key] = $buf;
			$_SESSION[auth_key] = $buf;
			
			//SQL生成
			$sql = "
				INSERT INTO email_auth (auth_key, email, stat) VALUES
				('$_FORM[auth_key]', '$_FORM[email1]', 'requested');
			";
			//SQL文字コードEUCに。
			$sql = mb_convert_encoding($sql, "EUC_JP", "Shift_JIS");
			
			//DB接続
			if( !($link = pg_connect("host=127.0.0.1 dbname=snowpeak user=postgres")) ){
				print "ERROR: DB connection error. [CODE: 9763]";
				exit;
			}
			//クエリ実行
			if( !($ret = pg_query($link, $sql)) ){
				print "ERROR: DB query error. [CODE: 9764]";
				exit;
			}

		}
	}
	//★★★★★★例外手動処理★★★★★★


	////事後アクションがあれば実行
	foreach ( $conf[page_func] as $arraybuf ){
		$debug1 && print "\$arraybuf = <pre>\n";
		$debug1 && print_r($arraybuf);
		$debug1 && print "</pre>\n";
		
		//対象ページで,タイミングが合っているなら
		if( $_page_print == $arraybuf[page] &&  $arraybuf[when] == 'end' ){
			//メールの場合
			if( $arraybuf[func] == 'mail' ){
				//スキンを用いてメール
				$debug6 && print "MAIL MODE ".$arraybuf[serial]."<BR>\n";
				$ret = @mail_send( $mail_skin[ $arraybuf[serial] ], $_SESSION );
			}else if( $arraybuf[func] == 'file' ){
			//ファイル書き出しの場合
				//ファイルが無ければヘッダを書き,666にする。
				$debug6 && print "FILE MODE ".$arraybuf[serial]."<BR>\n";
				$filebuf = $file_dir . "/" . $file_name[ $arraybuf[serial] ];
				if( !is_file($filebuf) ){
					//ヘッダを書き
					$file_header[ $arraybuf[serial] ] = ereg_replace("[\r\n]", "", $file_header[ $arraybuf[serial] ]);
					$file_header[ $arraybuf[serial] ] .= "\n";

					error_log($file_header[ $arraybuf[serial] ], 3, $filebuf);
					//chmod 666
					chmod($filebuf, 0666);
				}
				//データを書き出す。
				$contbuf = $file_content[ $arraybuf[serial] ];
				foreach ($_SESSION as $key => $val){
					//if( is_array($val) && count($val) > 0 ){
					//	$val = implode("__", $val);
					//}
					
					if( is_array($val) ){
						if( count($val) > 0 ){
							$val = implode("__", $val);
						}else{
							$val = "";
						}
					}					
					
					$val = ereg_replace("\r", "", $val);
					$val = ereg_replace("\n", "<BR>", $val);
					$val = ereg_replace('"', "", $val);
					$val = ereg_replace(',', "", $val);
					$contbuf = ereg_replace("#$key#", "$val", $contbuf);
				}
				//$contbuf = ereg_replace
				$contbuf = ereg_replace("#[a-zA-Z0-9_%-]+#", "", $contbuf);

				$contbuf = ereg_replace("[\r\n]", "", $contbuf);
				$contbuf .= "\n";

				error_log($contbuf, 3, $filebuf);
			}
		}
	}
}




$debug7 && print "STEP 877 \$_page_print = $_page_print<BR>\n";

$debug8 && print "STEP 877 \$_page_print = $_page_print<BR>\n";

//スキンを用いて出力
$skinbuf = "";
// URL の場合
// 絶対パスの場合
if(
	eregi("^http://", $_page_print)
	||
	eregi("^/", $_page_print)
){
	$skinbuf = $_page_print;
// それ以外
}else{
	$skinbuf = $skin_dir . "/" . $_page_print;
}

//次ページを設定
for($i=0; $i<count($pages); $i++){
	if( $_page_print == $pages[$i] ){
		//$_FORM[_next_page] = $pages[$i+1];
		$_SESSION[_next_page] = $pages[$i+1];
		//$_next_page = $pages[$i+1];
	}
}
//$_FORM[_page] = $_page_print;
$_SESSION[_page] = $_page_print;

$debug8 && print "\$_page_action = ".$_page_action."<BR>\n";
$debug8 && print "\$skinbuf = ".$skinbuf."<BR>\n";


$debug1 && print "STEP 102 ".$skinbuf."<BR>\n";
$debug3 && print "STEP 102 ".$skinbuf."<BR>\n";
$html_print = print_skin($skinbuf, $_SESSION);
$debug1 && print "STEP 101 ".$_FORM[_page]."<BR>\n";
$debug3 && print "STEP 101 ".$_FORM[_page]."<BR>\n";


$debug7 && print "\$_SESSION[_page] = ".$_SESSION[_page]."<BR>\n";
$debug7 && print "\$_SESSION[_next_page] = ".$_SESSION[_next_page]."<BR>\n";
$debug7 && print "\$_page_action = ".$_page_action."<BR>\n";
$debug7 && print "\$_page_print = ".$_page_print."<BR>\n";

$debug10 && print "step 000: \$skinbuf = {$skinbuf}<BR>\n";

//最後のページの場合は__二重投稿回避
//
$debug9 && print "STEP 916<BR>\n";
$debug9 && print "\$_SESSION[_submitted] = ".$_SESSION[_submitted]."<BR>\n";
$logging && error_log("STEP 916<BR>\n", 3, "/var/tmp/ygtfrexr.log");
$logging && error_log("\$_SESSION[_submitted] = ".$_SESSION[_submitted]."<BR>\n", 3, "/var/tmp/ygtfrexr.log");
if(
	in_array($_page_print, $thanks_pages)
	//$_page_print == $pages[ count($pages) - 1 ]
){
	//二重投稿
	if( $_SESSION[_submitted] == 1 ){
		$_FORM[_errmsg] .= "<font color=\"#ff0000\">"
			."多重申込みはできません。"
			."</font><br>\n";

		$_page_print = $error_skin;

		//スキンを用いて出力
		$skinbuf = "";
		// URL の場合
		// 絶対パスの場合
		if(
			eregi("^http://", $_page_print)
			||
			eregi("^/", $_page_print)
		){
			$skinbuf = $_page_print;
		// それ以外
		}else{
			$skinbuf = $skin_dir . "/" . $_page_print;
		}

		$html_print = print_skin($skinbuf, $_FORM);
		$debug3 && print "STEP 101 ".$_page_print."<BR>\n";
		
		//unset($_SESSION);
		//$_SESSION = array();
		print $html_print;
		
		$debug9 && print "STEP 917<BR>\n";
		$debug9 && print "\$_SESSION[_submitted] = ".$_SESSION[_submitted]."<BR>\n";
		$logging && error_log("STEP 917<BR>\n", 3, "/var/tmp/ygtfrexr.log");
		$logging && error_log("\$_SESSION[_submitted] = ".$_SESSION[_submitted]."<BR>\n", 3, "/var/tmp/ygtfrexr.log");
		exit;
	}else{
		//セッションをクリアして
		$_SESSION = array();
		//unset($_SESSION);
		//session_start();
		$_SESSION[_submitted] = 1;
		$debug9 && print "STEP 918<BR>\n";
		$debug9 && print "\$_SESSION[_submitted] = ".$_SESSION[_submitted]."<BR>\n";
		
		$logging && error_log("STEP 918<BR>\n", 3, "/var/tmp/ygtfrexr.log");
		$logging && error_log("\$_SESSION[_submitted] = ".$_SESSION[_submitted]."<BR>\n", 3, "/var/tmp/ygtfrexr.log");
	}
}

print $html_print;
exit;


///////////////////////////////////////////////////////////////////////

function mail_send($skin, $data){
	global $debug, $debug1, $debug2;
	//$mp = popen("/usr/bin/nkf -j|/usr/local/bin/wmime|/usr/sbin/sendmail -t","w");
	$mp = popen("/usr/bin/nkf -j|/usr/sbin/sendmail -t","w");

	$DATA = array();

	//配列$dataがあればそれを書き換え用配列に,
	//なければグローバル変数を書き換え用配列にセット。
	if( is_array($data) && count($data) > 0 ){
		$DATA = $data;
		$debug2 && print "93487<BR>\n";
	}else{
		//$DATA = $GLOBALS;
		$DATA = $_SESSION;
		$debug2 && print "93488<BR>\n";
	}

	//スキンが無ければデータをそのまま内容に
	if( !is_file($skin) ){
		//$debug_local && print "STEP:003<BR>\n";
		//return FALSE;
		$cont = $skin;
	}else{
		//スキン読み込み
		$lines = file($skin);
		$cont = implode("", $lines);
	}
	

	//書き換え用配列内をループして書き換え
	foreach ($DATA as $key => $val){
		// \ 連続を,一つにする。
		//print "\x5c";
		//$val = ereg_replace("(\x5c)+", "\x5c", $val);

		// \ 連続を,一つにする。
		//$val = ereg_replace("[\x5c]+", "\x5c", $val);

		//$val = stripslashes($val);
		//$val = addslashes($val);
		//foreach( $char_slash as $char ){
		//
		//}
		//$debug_local && print "765: $key => $val<BR>\n";
		//if( is_array($val) && count($val) > 0 ){
		//	$val = implode("__", $val);
		//}

		if( is_array($val) ){
			if( count($val) > 0 ){
				$val = implode("__", $val);
			}else{
				$val = "";
			}
		}
		$cont = ereg_replace("#$key#", "$val", $cont);
	}

	//残りを消去
	$cont = ereg_replace("#[a-zA-Z0-9_%-]+#", "", $cont);
	$cont = ereg_replace("\r", "", $cont);
//	print $cont;
//	exit;
	fputs($mp, $cont);
	pclose($mp);

	return TRUE;
}


function print_skin($skin, $data){
	//$debug1 = FALSE;
	//$ret = FALSE;
	//$debug2 = TRUE;
	//$debug2 = FALSE;
	$DATA = array();
	global $debug, $debug1, $debug2;


	$debug1 && print "SKIN = $skin<BR>\n";
	//スキンが無ければエラー
	if( !is_file($skin) ){
		$debug1 && print "NO SKIN = $skin<BR>\n";
		return FALSE;
	}

	//配列$dataがあればそれを書き換え用配列に,
	//なければグローバル変数を書き換え用配列にセット。
	if( is_array($data) && count($data) > 0 ){
		$DATA = $data;
		$debug2 && print "93487<BR>\n";
	}else{
		//$DATA = $GLOBALS;
		$DATA = $_SESSION;
		$debug2 && print "93488<BR>\n";
	}

	//スキン読み込み
	$lines = file($skin);
	$cont = implode("", $lines);

	//書き換え用配列内をループして書き換え
	foreach ($DATA as $key => $val){
		// \ 連続を,一つにする。
		//print "\x5c";
		//$val = ereg_replace("(\x5c)+", "\x5c", $val);

		// \ 連続を,一つにする。
		//$val = ereg_replace("[\x5c]+", "\x5c", $val);

		//$val = stripslashes($val);
		//$val = addslashes($val);
		//foreach( $char_slash as $char ){
		//
		//}
		$debug2 && print "765: $key => $val<BR>\n";
		if( is_array($val) ){
			if( count($val) > 0 ){
				$val = implode("__", $val);
			}else{
				$val = "";
			}
		}
		
		global $debug10;
		$debug10 && print "$key -> $val<BR>\n";
		$debug10 && print "$key -> ".var_export($val, TRUE)."<BR>\n";
		
		//if( $val == 'Array' ){
		//	continue;
		//}
		
		if($key == 'remark_memo'){
			$val = ereg_replace("\n", "\n<br />",$val);
		}
		$cont = ereg_replace("#$key#", "$val", $cont);
	}
	//残りを消去
	$cont = ereg_replace("#[a-zA-Z0-9_%-]+#", "", $cont);

	//独自エスケープを元に戻す。
	//$cont = _unescape($cont);
	return $cont;
}


?>
