/*********************************************************************
 * All Rights reserved,Copyright (c) K-Opticom
 **********************************************************************
 *＜プログラム内容＞
 *   システム名      ：eo顧客基幹システム
 *   モジュール名    ：JFUFrontKhrkInfoArea
 *   ソースファイル名：JFUFrontKhrkInfoArea.java
 *   作成者          ：富士通
 *   日付            ：2011年08月10日
 *＜機能概要＞
 *   フロント画面基本料金情報領域出力部品です。
 *＜修正履歴＞
 *   バージョン  修正日       修正者      修正内容
 *   v1.00.00    2011/08/10   FJ）        新規作成
 *   v8.00       2014/01/27   FJ）文元    変更【ANK-1589-00-00】消費増税に伴う料金施策(料金表表示現在日設定追加)
 *
 **********************************************************************/
package eo.web.webview.common;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;

import com.fujitsu.futurity.web.x33.DispatchContext;
import com.fujitsu.futurity.web.x33.DispatchContextFactory;
import com.fujitsu.futurity.web.x33.HttpDispatchContext;
import com.fujitsu.futurity.web.x33.X33SDataBeanAccessWrapper;
import com.fujitsu.futurity.web.x33.X33SErrorLog;
import com.fujitsu.futurity.web.x33.X33VCustomTagBase;
import com.fujitsu.futurity.web.x33.beans.X33VDataTypeList;
import com.fujitsu.futurity.web.x33.beans.X33VViewBaseBean;
import com.fujitsu.futurity.web.x33.beans.X33VViewJSPBean;

import eo.common.constant.JFUStrConst;

/**
 * フロント画面基本料金情報領域出力部品です。
 * <br>
 * @author 富士通
 */
@SuppressWarnings("serial")
public class JFUFrontKhrkInfoArea extends X33VCustomTagBase
{
	/** 拡張タグテンプレートファイルのテンプレートID */
	private static final String TAG_TEMPLATE_014 = "TagTemplate014";
	/** 料金表情報 料金表表示現在日 */
	private static final String PRC_DSP_NOW_DAY = "prc_dsp_now_day";
	/** ユーザ情報に表示させるパターン属性 */
	private String screen = "";
	/** 空文字 */
	private String STRING_EMPTY = "";
	/** 定義取得パス 料金表出力文言 */
	private static final String QUERY_PATH_TAX_MNGN = "DISPSETTING/SETTING[@screenId='COMMON']/DISPTEXT[@groupid='PRC_DSP']";
	/** 属性名 */
	private static final String QUERY_ATTR_NAME = "id";
	/** 属性名 料金表の税率に関する文言 */
	private static final String TAX_MNGN = "TAX_MNGN";
	/** 置き換え文字列1 */
	private static final String RE_1 = "%1%";
	/** 日付フォーマット：yyyyMMdd */
	private static final String DATE_FORMAT_YYYYMMDD = "yyyyMMdd";
	/** 日付編集：年 */
	private static final String FMT_NEN = "年";
	/** 日付編集：月 */
	private static final String FMT_TUKI = "月";
	/** 日付編集：日 */
	private static final String FMT_HI = "日";

	/**
	 * カスタムタグ開始処理を行います。
	 * <br>
	 * @throws	JspException JSPで発生する例外
	 * @return 処理結果
	 * @see javax.servlet.jsp.tagext.TagSupport#doStartTag()
	 */
	@Override
	public int doStartTag() throws JspException
	{

		// // パターンに含まれていない場合はタグを作成しない
		// if (!PATTERNS.contains(screen))
		// {
		// return SKIP_BODY;
		// }

		/*
		 * ==============================================================
		 * 料金情報エリア表示処理(サービスフォームBeanからの情報取得処理) START
		 * ==============================================================
		 */
		X33VViewJSPBean jspBean = getJspBean();

		// サービスフォームビーンのIDのリストが取得できない場合はタグを作成しない。
		if (null == jspBean.getServiceFormIdList() || 0 == jspBean.getServiceFormIdList().size())
		{
			return SKIP_BODY;
		}

		// サービスフォームビーンのIDを取得する。
		String serviceFormId = null;
		for (int i = 0; i < jspBean.getServiceFormIdList().size(); i++)
		{

			String sessionServiceFormId = (String)jspBean.getServiceFormIdList().get(i);
			if (sessionServiceFormId.startsWith(screen))
			{
				serviceFormId = sessionServiceFormId;
				break;
			}
		}
		// サービスフォームビーンのIDが取得できない場合はタグを作成しない。
		if (null == serviceFormId)
		{
			return SKIP_BODY;
		}

		// 料金情報エリアリストの存在チェック処理
		// 料金情報エリアリストが存在しない場合、タグを作成しない。
		if (!isExistPrcInfoArea(jspBean, serviceFormId))
		{
			return SKIP_BODY;
		}

		// 料金情報エリア数
		String replaceKey = "/" + serviceFormId + "/料金情報エリアリスト/0/料金情報エリア数";
		Object prcInfoAreaCntObj =
				X33SDataBeanAccessWrapper.execJSPBeanAccess(null, jspBean, replaceKey, X33SDataBeanAccessWrapper.REQ_GET_VALUE,
						X33SDataBeanAccessWrapper.SUBKEY_VALUE, null);

		// コメント数
		replaceKey = "/" + serviceFormId + "/料金情報エリアリスト/0/コメント数";
		Object commentCntObj =
				X33SDataBeanAccessWrapper.execJSPBeanAccess(null, jspBean, replaceKey, X33SDataBeanAccessWrapper.REQ_GET_VALUE,
						X33SDataBeanAccessWrapper.SUBKEY_VALUE, null);

		List<String> commentSkbtList = new ArrayList<String>();
		List<String> commentList = new ArrayList<String>();
		int commentAreaCnt = null == commentCntObj || STRING_EMPTY.equals(commentCntObj) ? 0 : Integer.parseInt(commentCntObj.toString());
		for (int i = 0; i < commentAreaCnt; i++)
		{

			// コメント識別子
			replaceKey = "/" + serviceFormId + "/料金情報エリアリスト/0/コメントリスト/" + String.valueOf(i) + "/コメント識別子";
			Object commentSkbtObj =
					X33SDataBeanAccessWrapper.execJSPBeanAccess(null, jspBean, replaceKey, X33SDataBeanAccessWrapper.REQ_GET_VALUE,
							X33SDataBeanAccessWrapper.SUBKEY_VALUE, null);
			commentSkbtList.add(commentSkbtObj.toString());

			// コメント
			replaceKey = "/" + serviceFormId + "/料金情報エリアリスト/0/コメントリスト/" + String.valueOf(i) + "/コメント";
			Object commentObj =
					X33SDataBeanAccessWrapper.execJSPBeanAccess(null, jspBean, replaceKey, X33SDataBeanAccessWrapper.REQ_GET_VALUE,
							X33SDataBeanAccessWrapper.SUBKEY_VALUE, null);
			commentList.add(commentObj.toString());
		}

		// 備考数
		replaceKey = "/" + serviceFormId + "/料金情報エリアリスト/0/備考数";
		Object bikoCntObj =
				X33SDataBeanAccessWrapper.execJSPBeanAccess(null, jspBean, replaceKey, X33SDataBeanAccessWrapper.REQ_GET_VALUE,
						X33SDataBeanAccessWrapper.SUBKEY_VALUE, null);

		List<String> bikoSkbtList = new ArrayList<String>();
		List<String> bikoList = new ArrayList<String>();
		int bikoAreaCount = null == bikoCntObj || STRING_EMPTY.equals(bikoCntObj) ? 0 : Integer.parseInt(bikoCntObj.toString());
		for (int i = 0; i < bikoAreaCount; i++)
		{

			// 備考識別子
			replaceKey = "/" + serviceFormId + "/料金情報エリアリスト/0/備考リスト/" + String.valueOf(i) + "/備考識別子";
			Object bikoSkbtObj =
					X33SDataBeanAccessWrapper.execJSPBeanAccess(null, jspBean, replaceKey, X33SDataBeanAccessWrapper.REQ_GET_VALUE,
							X33SDataBeanAccessWrapper.SUBKEY_VALUE, null);
			bikoSkbtList.add(bikoSkbtObj.toString());

			// 備考
			replaceKey = "/" + serviceFormId + "/料金情報エリアリスト/0/備考リスト/" + String.valueOf(i) + "/備考";
			Object bikoObj =
					X33SDataBeanAccessWrapper.execJSPBeanAccess(null, jspBean, replaceKey, X33SDataBeanAccessWrapper.REQ_GET_VALUE,
							X33SDataBeanAccessWrapper.SUBKEY_VALUE, null);
			bikoList.add(bikoObj.toString());
		}

		// テーブル関連
		// タイトル識別子リスト
		List<String> titleSkbtList = new ArrayList<String>();
		// タイトルリスト
		List<String> titleList = new ArrayList<String>();
		// テーブルスタイルクラス１リスト
		List<String> tableStyleClass1List = new ArrayList<String>();
		// テーブルスタイルクラス２リスト
		List<String> tableStyleClass2List = new ArrayList<String>();
		// タイトルマップ(値識別子、左値、右値の各リストを設定する。)
		Map<String, List<String>> titleMap = new LinkedHashMap<String, List<String>>();

		int prcInfoAreaCnt = null == prcInfoAreaCntObj || STRING_EMPTY.equals(prcInfoAreaCntObj) ? 0 : Integer.parseInt(prcInfoAreaCntObj.toString());
		for (int i = 0; i < prcInfoAreaCnt; i++)
		{

			// タイトル
			replaceKey = "/" + serviceFormId + "/料金情報エリアリスト/0/タイトルリスト/" + String.valueOf(i) + "/タイトル識別子";
			Object titleSkbtObj =
					X33SDataBeanAccessWrapper.execJSPBeanAccess(null, jspBean, replaceKey, X33SDataBeanAccessWrapper.REQ_GET_VALUE,
							X33SDataBeanAccessWrapper.SUBKEY_VALUE, null);
			titleSkbtList.add(titleSkbtObj.toString());

			replaceKey = "/" + serviceFormId + "/料金情報エリアリスト/0/タイトルリスト/" + String.valueOf(i) + "/タイトル";
			Object titleObj =
					X33SDataBeanAccessWrapper.execJSPBeanAccess(null, jspBean, replaceKey, X33SDataBeanAccessWrapper.REQ_GET_VALUE,
							X33SDataBeanAccessWrapper.SUBKEY_VALUE, null);

			replaceKey = "/" + serviceFormId + "/料金情報エリアリスト/0/タイトルリスト/" + String.valueOf(i) + "/値数";
			Object valueCntObj =
					X33SDataBeanAccessWrapper.execJSPBeanAccess(null, jspBean, replaceKey, X33SDataBeanAccessWrapper.REQ_GET_VALUE,
							X33SDataBeanAccessWrapper.SUBKEY_VALUE, null);

			replaceKey = "/" + serviceFormId + "/料金情報エリアリスト/0/タイトルリスト/" + String.valueOf(i) + "/テーブルスタイルクラス１";
			Object tableStyleClass1Obj =
					X33SDataBeanAccessWrapper.execJSPBeanAccess(null, jspBean, replaceKey, X33SDataBeanAccessWrapper.REQ_GET_VALUE,
							X33SDataBeanAccessWrapper.SUBKEY_VALUE, null);
			tableStyleClass1List.add(tableStyleClass1Obj.toString());

			replaceKey = "/" + serviceFormId + "/料金情報エリアリスト/0/タイトルリスト/" + String.valueOf(i) + "/テーブルスタイルクラス２";
			Object tableStyleClass2Obj =
					X33SDataBeanAccessWrapper.execJSPBeanAccess(null, jspBean, replaceKey, X33SDataBeanAccessWrapper.REQ_GET_VALUE,
							X33SDataBeanAccessWrapper.SUBKEY_VALUE, null);
			tableStyleClass2List.add(tableStyleClass2Obj.toString());

			String title = titleObj.toString();
			titleList.add(title);

			int valueAreaCount = null == valueCntObj || STRING_EMPTY.equals(valueCntObj) ? 0 : Integer.parseInt(valueCntObj.toString());

			List<String> valueSkbtList = new ArrayList<String>();
			List<String> leftValueList = new ArrayList<String>();
			List<String> rightValueList = new ArrayList<String>();

			for (int j = 0; j < valueAreaCount; j++)
			{

				// 値
				replaceKey = "/" + serviceFormId + "/料金情報エリアリスト/0/タイトルリスト/" + String.valueOf(i) + "/値リスト/" + String.valueOf(j) + "/値識別子";
				Object valueSkbtObj =
						X33SDataBeanAccessWrapper.execJSPBeanAccess(null, jspBean, replaceKey, X33SDataBeanAccessWrapper.REQ_GET_VALUE,
								X33SDataBeanAccessWrapper.SUBKEY_VALUE, null);
				valueSkbtList.add(valueSkbtObj.toString());

				replaceKey = "/" + serviceFormId + "/料金情報エリアリスト/0/タイトルリスト/" + String.valueOf(i) + "/値リスト/" + String.valueOf(j) + "/左値";
				Object leftValueObj =
						X33SDataBeanAccessWrapper.execJSPBeanAccess(null, jspBean, replaceKey, X33SDataBeanAccessWrapper.REQ_GET_VALUE,
								X33SDataBeanAccessWrapper.SUBKEY_VALUE, null);
				leftValueList.add(leftValueObj.toString());

				replaceKey = "/" + serviceFormId + "/料金情報エリアリスト/0/タイトルリスト/" + String.valueOf(i) + "/値リスト/" + String.valueOf(j) + "/右値";
				Object rightValueObj =
						X33SDataBeanAccessWrapper.execJSPBeanAccess(null, jspBean, replaceKey, X33SDataBeanAccessWrapper.REQ_GET_VALUE,
								X33SDataBeanAccessWrapper.SUBKEY_VALUE, null);
				rightValueList.add(rightValueObj.toString());

			}
			// KEYは『タイトル名 + タイトル番号(0から始まる連番) + テーブル左値リスト設定キー』
			// KEYは『タイトル名 + タイトル番号(0から始まる連番) + テーブル右値リスト設定キー』
			// KEYは『タイトル名 + タイトル番号(0から始まる連番) + テーブル値識別リスト設定キー』
			// 値リスト設定
			titleMap.put(title + String.valueOf(i) + JFUStrConst.KEY_TABLE_VALUE_SKBT_LIST, valueSkbtList);
			// 左値リスト設定
			titleMap.put(title + String.valueOf(i) + JFUStrConst.KEY_TABLE_LEFT_VALUE_LIST, leftValueList);
			// 右値リスト設定
			titleMap.put(title + String.valueOf(i) + JFUStrConst.KEY_TABLE_RIGHT_VALUE_LIST, rightValueList);
		}
		/*
		 * ==============================================================
		 * 料金情報エリア表示処理(サービスフォームBeanからの情報取得処理) END
		 * ==============================================================
		 */

		/*
		 * ==============================================================
		 * 料金情報エリア税率に関する文言表示の為の前処理 START
		 * ==============================================================
		 */
		// 料金表表示現在日初期設定
		String prcdspNowDay = null;
		// 税率に関する文言初期設定
		String taxMngn = null;

		// 料金表表示現在日を共有フォームBeanから取得
		prcdspNowDay = getServiceFormBeanString(TAG_TEMPLATE_014, PRC_DSP_NOW_DAY);

		if (prcdspNowDay == null)
		{
			// 仮に料金表表示現在日を取得できない時は、taxMngnに空文字設定
			taxMngn = JFUStrConst.EMPTY;
		}
		else
		{
			try
			{
				String fuDispInfo = QUERY_PATH_TAX_MNGN;
				Map<String, String> taxMnbnInfo = JFUWebCommon.getDispItemsAsMap(fuDispInfo, QUERY_ATTR_NAME);
				taxMngn = taxMnbnInfo.get(TAX_MNGN).replace(RE_1, editDateFormat(prcdspNowDay));
			}
			catch (Exception e)
			{
				// 取得できない時は、taxMngnに空文字を設定
				taxMngn = JFUStrConst.EMPTY;
			}
		}
		/*
		 * ==============================================================
		 * 料金情報エリア税率に関する文言表示の為の前処理 END
		 * ==============================================================
		 */

		/*
		 * ==============================================================
		 * 料金情報エリア表示処理(HTML出力) START
		 *
		 * 料金情報エリア数が「0」の場合は何も出力しない。
		 * ==============================================================
		 */
		if (0 != prcInfoAreaCnt)
		{

			// outputHtml("<div id=\"main-area-right\" class=\"BodyMainRight\">"
			// + JFUStrConst.RETURN_CODE);
			outputHtml("	<table id=\"price_area_pic\" class=\"PriceArea\">" + JFUStrConst.RETURN_CODE);
			outputHtml("		<tr>" + JFUStrConst.RETURN_CODE);
			outputHtml("			<td class=\"price_title_td\"><div title=\"ご利用料金\" class=\"price_title\"></div></td>" + JFUStrConst.RETURN_CODE);
			outputHtml("		</tr>" + JFUStrConst.RETURN_CODE);
			outputHtml("		<tr>" + JFUStrConst.RETURN_CODE);
			outputHtml("			<td>" + JFUStrConst.RETURN_CODE);

			/*
			 * ==============================================================
			 * 料金表の税率に関する文言表示処理 Start
			 * ==============================================================
			 */
			if (!JFUStrConst.EMPTY.equals(taxMngn))
			{
				outputHtml("				<div id=\"div_select_button_0\">" + JFUStrConst.RETURN_CODE);
				outputHtml("					<table class=\"tax_mngn_area\">" + JFUStrConst.RETURN_CODE);
				outputHtml("						<tr>" + JFUStrConst.RETURN_CODE);
				outputHtml("							<th>" + JFUStrConst.RETURN_CODE);
				outputHtml("								<div class='red'>" + taxMngn + "</div>" + JFUStrConst.RETURN_CODE);
				outputHtml("							</th>" + JFUStrConst.RETURN_CODE);
				outputHtml("						</tr>" + JFUStrConst.RETURN_CODE);
				outputHtml("					</table>" + JFUStrConst.RETURN_CODE);
				outputHtml("				</div>" + JFUStrConst.RETURN_CODE);
			}
			/*
			 * ==============================================================
			 * 料金表の税率に関する文言表示処理 End
			 * ==============================================================
			 */

			/*
			 * ==============================================================
			 * コメントエリア表示処理
			 * ==============================================================
			 */
			for (int i = 0; i < commentSkbtList.size(); i++)
			{

				// コメント識別
				outputHtml("				<div id=\"div_select_button_" + commentSkbtList.get(i) + "\">" + JFUStrConst.RETURN_CODE);
				outputHtml("					<table class=\"comment_area\">" + JFUStrConst.RETURN_CODE);
				outputHtml("						<tr>" + JFUStrConst.RETURN_CODE);
				outputHtml("							<th>" + JFUStrConst.RETURN_CODE);

				// コメント
				outputHtml("								<p id=\"plan\">" + commentList.get(i) + "</p>" + JFUStrConst.RETURN_CODE);
				outputHtml("							</th>" + JFUStrConst.RETURN_CODE);
				outputHtml("						</tr>" + JFUStrConst.RETURN_CODE);
				outputHtml("					</table>" + JFUStrConst.RETURN_CODE);
				outputHtml("				</div>" + JFUStrConst.RETURN_CODE);

			}

			outputHtml("			</td>" + JFUStrConst.RETURN_CODE);
			outputHtml("		</tr>" + JFUStrConst.RETURN_CODE);
			outputHtml("		<tr>" + JFUStrConst.RETURN_CODE);
			outputHtml("			<td class=\"price_detail_pic\">" + JFUStrConst.RETURN_CODE);

			/*
			 * ==============================================================
			 * タイトル・テーブルエリア表示処理
			 * ==============================================================
			 */
			for (int i = 0; i < titleSkbtList.size(); i++)
			{

				String title = titleList.get(i);

				// KEYは『タイトル名 + タイトル番号(0から始まる連番) + テーブル左値リスト設定キー』
				// KEYは『タイトル名 + タイトル番号(0から始まる連番) + テーブル右値リスト設定キー』
				// KEYは『タイトル名 + タイトル番号(0から始まる連番) + テーブル値識別リスト設定キー』
				List<String> valueSkbtList = titleMap.get(title + String.valueOf(i) + JFUStrConst.KEY_TABLE_VALUE_SKBT_LIST);
				List<String> leftValueList = titleMap.get(title + String.valueOf(i) + JFUStrConst.KEY_TABLE_LEFT_VALUE_LIST);
				List<String> rightValueList = titleMap.get(title + String.valueOf(i) + JFUStrConst.KEY_TABLE_RIGHT_VALUE_LIST);

				// タイトル識別子
				outputHtml("				<div id=\"div_select_button_" + titleSkbtList.get(i) + "\">" + JFUStrConst.RETURN_CODE);
				outputHtml("					<table class=\"" + tableStyleClass1List.get(i) + "\">" + JFUStrConst.RETURN_CODE);
				outputHtml("						<colgroup>" + JFUStrConst.RETURN_CODE);

				// テーブル幅指定クラスを設定
				String[] tableClass2 = tableStyleClass2List.get(i).split(":");

				// テーブル区切り数
				String colNum = String.valueOf(tableClass2.length);

				for (int j = 0; j < tableClass2.length; j++)
				{
					outputHtml("							<col class=\"" + tableClass2[j] + "\"/>" + JFUStrConst.RETURN_CODE);
				}

				outputHtml("						</colgroup>" + JFUStrConst.RETURN_CODE);
				outputHtml("						<tr>" + JFUStrConst.RETURN_CODE);

				// タイトル
				outputHtml("							<th colspan=\"" + colNum + "\" class=\"caption\">" + title + "</th>" + JFUStrConst.RETURN_CODE);
				outputHtml("						</tr>" + JFUStrConst.RETURN_CODE);

				for (int j = 0; j < valueSkbtList.size(); j++)
				{

					// 値識別子
					outputHtml("						<tr id=\"div_select_button_" + valueSkbtList.get(j) + "\">" + JFUStrConst.RETURN_CODE);

					// 左値
					outputHtml("							<th class=\"price_th\">" + leftValueList.get(j) + "</th>" + JFUStrConst.RETURN_CODE);
					outputHtml("							<td>" + JFUStrConst.RETURN_CODE);

					// 右値
					outputHtml("								" + rightValueList.get(j) + JFUStrConst.RETURN_CODE);
					outputHtml("							</td>" + JFUStrConst.RETURN_CODE);
					outputHtml("						</tr>" + JFUStrConst.RETURN_CODE);
				}
				outputHtml("					</table>" + JFUStrConst.RETURN_CODE);
				outputHtml("				</div>" + JFUStrConst.RETURN_CODE);

				/*
				 * ==============================================================
				 * 備考エリア表示処理
				 * ==============================================================
				 */
				for (int k = 0; k < bikoSkbtList.size(); k++)
				{

					// 「i」(テーブル数)と「k」(備考数)が一致する場合のみ出力する。
					// 備考はテーブルの下にテーブルの数と同数出力される。
					if (i == k)
					{

						// 備考識別子
						outputHtml("				<div id=\"div_select_button_" + bikoSkbtList.get(k) + "\">" + JFUStrConst.RETURN_CODE);
						outputHtml("					<table class=\"biko_area\">" + JFUStrConst.RETURN_CODE);
						outputHtml("						<tr>" + JFUStrConst.RETURN_CODE);
						outputHtml("							<th>" + JFUStrConst.RETURN_CODE);

						// 備考
						outputHtml("								<p id=\"plan\">" + bikoList.get(k) + "</p>" + JFUStrConst.RETURN_CODE);
						outputHtml("							</th>" + JFUStrConst.RETURN_CODE);
						outputHtml("						</tr>" + JFUStrConst.RETURN_CODE);
						outputHtml("					</table>" + JFUStrConst.RETURN_CODE);
						outputHtml("				</div>" + JFUStrConst.RETURN_CODE);

					}
				}
			}

			outputHtml("			</td>" + JFUStrConst.RETURN_CODE);
			outputHtml("		</tr>" + JFUStrConst.RETURN_CODE);
			outputHtml("	</table>" + JFUStrConst.RETURN_CODE);
		}
		// outputHtml("	<p class=\"caution\">既にファミリーパックをご契約の場合は、無料となります。</p>" +
		// JFUStrConst.RETURN_CODE);
		// outputHtml(" <p class=\"caution\">サブドメイン名はシステムからランダムで設定されるため、
		// お客様からの指定や選択は、お受けできません。<br/>※メールアドレス変更時は、
		// 現在お使いのメールアドレスのサブドメインと同じになります。ご注意ください。</p>"
		// + JFUStrConst.RETURN_CODE);
		// outputHtml("</div>" + JFUStrConst.RETURN_CODE);

		/*
		 * ==============================================================
		 * 料金情報エリア表示処理(HTML出力) END
		 * ==============================================================
		 */

		return SKIP_BODY;
	}

	/**
	 * スクリーンを設定します。
	 * <br>
	 * @param arg0 スクリーン
	 */
	public void setScreen(String arg0)
	{
		this.screen = arg0;
	}

	/**
	 * <DL>
	 * <DT>JSPBeanを取得します。
	 * </DL>
	 * @return
	 * @throws JspException
	 */
	private X33VViewJSPBean getJspBean() throws JspException
	{

		// JSPビーンを取得する（取得できなかったらエラーを投げる）
		X33VViewJSPBean jspBean = null;

		DispatchContext context = DispatchContextFactory.getInstance().getHttpDispatchContext();
		HttpServletRequest request = ((HttpDispatchContext)context).getServletRequest();

		Object areaIdObj = request.getAttribute("nextPageAreaId");

		if (areaIdObj != null && areaIdObj instanceof String)
		{
			jspBean = (X33VViewJSPBean)context.getResponseBean((String)areaIdObj);
		}
		if (jspBean == null)
		{
			throwJspException("データビーンを取得できません。");
		}
		return jspBean;
	}

	/**
	 * <DL>
	 * <DT>テンプレート定義に記述した画面定義に誤りがある場合、ログを出力してエラー画面に
	 * なります。ログには引数で指定したエラーメッセージが出力されます。
	 * </DL>
	 * <p>
	 *
	 * @param  errormsg エラーメッセージ
	 * @throws JspException
	 */
	private void throwJspException(String errormsg) throws JspException
	{

		// テンプレートに記載した画面定義に誤りがある場合、警告ログを出力しエラーを投げる
		JspException se = new JspException(errormsg);
		X33SErrorLog.outputSystemError(this.getClass(), se, DispatchContextFactory.getInstance().getHttpDispatchContext());
		throw se;
	}

	/**
	 * 料金情報エリアリストの存在チェック処理
	 *
	 * <br>
	 * @param jspBean
	 * @param serviceFormId
	 * @return true:存在する場合、false:存在しない場合
	 * @throws JspException
	 */
	private boolean isExistPrcInfoArea(X33VViewJSPBean jspBean, String serviceFormId) throws JspException
	{
		X33VViewBaseBean targetBean = null;
		// サービスフォームビーンを検索
		ArrayList<?> sfBeanArray = jspBean.listServiceFormBeanListForX31();
		for (int i = 0; i < sfBeanArray.size(); i++)
		{
			// サービスフォームビーン取得
			X33VViewBaseBean tmpBean = (X33VViewBaseBean)sfBeanArray.get(i);
			if (tmpBean.getServiceFormId().equals(serviceFormId))
			{
				targetBean = tmpBean;
			}
		}

		if (null == targetBean)
		{
			return false;
		}

		Class<?> cls = targetBean.getClass();
		Method method = null;
		X33VDataTypeList tmpListObj = null;
		try
		{
			method = cls.getDeclaredMethod("getPrc_info_area_list_list");
			Object[] obj = null;
			tmpListObj = (X33VDataTypeList)method.invoke(targetBean, obj);
		}
		catch (NoSuchMethodException e)
		{
			throwJspException("料金情報エリアリストの存在チェックでエラー。");
		}
		catch (IllegalAccessException e)
		{
			throwJspException("料金情報エリアリストの存在チェックでエラー。");
		}
		catch (InvocationTargetException e)
		{
			throwJspException("料金情報エリアリストの存在チェックでエラー。");
		}

		if (null == tmpListObj)
		{
			return false;
		}

		return tmpListObj.size() > 0;
	}

	/**
	 * 日付を各形式に変換します。
	 *
	 * <br>
	 * @param date 日付文字列
	 * @return 変換された文字列
	 */
	private String editDateFormat(String date)
	{
		// 結果格納
		String result = date;

		// 日付文字列をカレンダー型に変換
		SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_YYYYMMDD);
		Date pDate;
		try
		{
			pDate = sdf.parse(date);
		}
		catch (ParseException e)
		{
			// 処理抜け
			return result;
		}

		Calendar cal = Calendar.getInstance();
		cal.setTime(pDate);

		// ●「年月日」形式に変換
		StringBuffer sbf = new StringBuffer();

		// 年
		int year = cal.get(Calendar.YEAR);
		// 月
		int month = cal.get(Calendar.MONTH) + 1;
		// 日
		int day = cal.get(Calendar.DATE);

		sbf.append(String.valueOf(year));
		sbf.append(FMT_NEN);
		sbf.append(String.valueOf(month));
		sbf.append(FMT_TUKI);
		sbf.append(String.valueOf(day));
		sbf.append(FMT_HI);

		result = sbf.toString();

		return result;

	}

	/**
	 * 共有フォームBeanより項目を取得します。
	 * <br>
	 * @param tagTemplateId
	 * @param arg0
	 * @return 項目
	 */
	private String getServiceFormBeanString(String tagTemplateId, String arg0)
	{
		String str = null;
		try
		{
			str = getSFBeanData_String(tagTemplateId, arg0);
			if (str == null || "null".equals(str))
			{
				str = "";
			}
		}
		catch (JspException e)
		{
			str = "";
		}
		return str;
	}
}
