/*
 * MosP - Mind Open Source Project         http://www.mosp.jp/
 * Copyright (C) 1987-2009 MIND Co., Ltd.  http://www.e-mind.co.jp/
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
var FB_OUTPUT_DETAIL_PAYMENT    = "0";
var FB_OUTPUT_DETAIL_BONUS      = "1";
var FB_OUTPUT_DETAIL_RES        = "2";

var MIN_RECORD_LENGTH          = "120";
var MAX_RECORD_LENGTH          = "256";
var INIT_TYPE_CODE             = "99";

/**
 * 画面読込時追加処理
 * @param 無し
 * @return 無し
 * @throws 実行時例外
 */
function onLoadExtra() {
	// 項目背景色設定
	setFieldsBgColor(ARY_FIELDS_ID,     COLOR_FIELD_NORMAL);
	setFieldsBgColor(ARY_ERR_FIELDS_ID, COLOR_FIELD_ERROR);
	// 項目長設定
	setMaxLength(PRM_TXT_COMPANY_CODE , LEN_FB_COMPANY_CODE );
	setMaxLength(PRM_TXT_RECORD_LENGTH, LEN_FB_RECORD_LENGTH);
	setMaxLength(PRM_TXT_TYPE_CODE    , LEN_FB_TYPE_CODE    );
	setMaxLength(PRM_TXT_CO_ADDRESS   , LEN_FB_CO_ADDRESS   );
	setMaxLength(PRM_TXT_COMPANY_NAME , LEN_FB_COMPANY_NAME );
	if (MODE == 0) {
		// 初期値設定
		setInitValue();
	} else if (MODE == 1) {
	}

	// Changeイベントハンドラ設定
	setOnChangeHandler(PRM_PLT_OUTPUT_DETAIL, outputDetailOnChange);
	setOnChangeHandler(PRM_TXT_COMPANY_CODE , companyCodeOnChange);
	// 出力内容変更時
	outputDetailOnChange()
	
}





/**
 * 初期値設定
 * @param 無し
 * @return 無し
 * @throws 実行時例外
 */
function setInitValue() {
	setFormValue(PRM_TXT_RECORD_LENGTH, MIN_RECORD_LENGTH);
	setFormValue(PRM_TXT_TYPE_CODE    , INIT_TYPE_CODE   );
}

/**
 * 会社コード変更時
 * @param 無し
 * @return 無し
 * @throws 実行時例外
 */
function companyCodeOnChange() {
	// 対象オブジェクト取得
	var objTarget = getObject(PRM_TXT_COMPANY_CODE);
	// 前ゼロ設定
	setBeforeZeroObject(objTarget, LEN_FB_COMPANY_CODE);
}

/**
 * 出力内容変更時
 * @param 無し
 * @return 無し
 * @throws 実行時例外
 */
function outputDetailOnChange() {
	// 項目表示初期化
	initShowFields();
	var outputDetail = getFormValue(PRM_PLT_OUTPUT_DETAIL);
	if (outputDetail == FB_OUTPUT_DETAIL_PAYMENT) {
		// 給与
		hidePayFields();
	} else if (outputDetail == FB_OUTPUT_DETAIL_BONUS) {
		// 賞与
		hideBonFields();
	} else if (outputDetail == FB_OUTPUT_DETAIL_RES) {
		// 住民税
		hideResFields();
	}
	
}

/**
 * 項目表示初期化
 * @param 無し
 * @return 無し
 * @throws 実行時例外
 */
function initShowFields() {
	setVisibility("spanDeadlineDate", true);
	setVisibility("spanDeadlineYear", true);
	setVisibility("spanDeadlineMonth", true);
	setVisibility("spanDeadlineDay", true);
	setVisibility("spanDeadlineCmt", true);
	setVisibility("spanSpecifyDay" , true);
	setVisibility("spanTypeCode1" , true);
	setVisibility("spanTypeCode2" , true);
	setVisibility("btnRetireDetail" , true);
	
	
}

/**
 * 非表示項目設定(出力内容：給与)
 * @param 無し
 * @return 無し
 * @throws 実行時例外
 */
function hidePayFields() {
	setVisibility("spanDeadlineDate", false);
	setVisibility("spanDeadlineYear", false);
	setVisibility("spanDeadlineMonth", false);
	setVisibility("spanDeadlineDay", false);
	setVisibility("spanDeadlineCmt", false);
	setVisibility("spanSpecifyDay" , false);
	setVisibility("spanTypeCode1" , false);
	setVisibility("spanTypeCode2" , false);
	setVisibility("btnRetireDetail" , false);
	
}

/**
 * 非表示項目設定(出力内容：賞与)
 * @param 無し
 * @return 無し
 * @throws 実行時例外
 */
function hideBonFields() {
	setVisibility("spanDeadlineDate", false);
	setVisibility("spanDeadlineYear", false);
	setVisibility("spanDeadlineMonth", false);
	setVisibility("spanDeadlineDay", false);
	setVisibility("spanDeadlineCmt", false);
	setVisibility("spanTypeCode1" , false);
	setVisibility("spanTypeCode2" , false);
	setVisibility("btnRetireDetail" , false);
	
	
}

/**
 * 非表示項目設定(出力内容：住民税)
 * @param 無し
 * @return 無し
 * @throws 実行時例外
 */
function hideResFields() {
	setVisibility("spanSpecifyDay", false);
	
}

/**
 * 前ゼロ付与オブジェクト設定
 * @param e
 * @param length
 * @return なし
 * @throws 実行時例外
 */
function setBeforeZeroObject(objTarget, length) {
	// 前ゼロ付与
	var befZero = setBeforeZero(objTarget, length);
	// 値の設定
	setFormValue(objTarget, befZero);
}

/**
 * 前ゼロ付与
 * @param targetNo　　対象文字列
 * @param targetLength　項目長
 * @return
 */
function setBeforeZero(targetNo, targetLength) {
	// 設定準備
	var retString = "";
	// 対象が空じゃなければ前ゼロ設定
	if (getFormValue(targetNo) !="") {
		retString = getZero(getFormValue(targetNo), targetLength);
	}
	return retString;
	
}

/**
 * 引数に設定した文字列の先頭に0を挿入する。
 * @param wspace 設定文字列
 * @param i      設定桁数
 * @return       ゼロ挿入後文字列
 */
function getZero(wspace, i) {
	// 設定準備
	var lenString = 0;
	var targetString = "";
	lenString = i - wspace.length;
	if (lenString > 0) {
		for (var w = 0; w < lenString; w++) {
			targetString += "0";
		}
	}
	return targetString + wspace;
}

/**
 * サーバー通信処理
 * @param 無し
 * @return 無し
 * @throws 実行時例外
 */
function submitForm(objForm, cmd) {
	// 入力チェック
	if (validate()) {
		var outputDetail = getFormValue(PRM_PLT_OUTPUT_DETAIL);
		if (outputDetail == FB_OUTPUT_DETAIL_PAYMENT) {
			// 給与
			doSubmitFile(objForm,"P9002");
		} else if (outputDetail == FB_OUTPUT_DETAIL_BONUS) {
			// 賞与
			doSubmitFile(objForm,"P9011");
		} else if (outputDetail == FB_OUTPUT_DETAIL_RES) {
			// 住民税
			doSubmitFile(objForm,"P9900");
		}
	}
}

/**
 * 入力チェック
 * @param 無し
 * @return チェック結果(true：OK、false：NG)
 * @throws 実行時例外
 */
function validate() {
	// フィールド背景色設定
	setFieldsBgColor(ARY_FIELDS_ID, COLOR_FIELD_NORMAL);
	// 入力チェック
	var aryMessage = new Array();
	
	// 半角変換
	convSbSpace(PRM_TXT_CO_ADDRESS  );
	convSbSpace(PRM_TXT_COMPANY_NAME);
	convSbKana (PRM_TXT_CO_ADDRESS  );
	convSbKana (PRM_TXT_COMPANY_NAME);
	
	
	// 入力チェック
	var aryMessage = new Array();
	// カナ確認
	checkKana(PRM_TXT_CO_ADDRESS  , NAM_CO_ADDRESS  , aryMessage);
	checkKana(PRM_TXT_COMPANY_NAME, NAM_COMPANY_NAME, aryMessage);
	// 種別コード必須確認
	checkRequired(PRM_TXT_TYPE_CODE    , NAM_TYPE_CODE    , aryMessage );
	// 会社コード必須確認
	checkRequired(PRM_TXT_COMPANY_CODE , NAM_COMPANY_CODE , aryMessage );
	// 会社住所必須確認
	checkRequired(PRM_TXT_CO_ADDRESS , NAM_CO_ADDRESS , aryMessage );
	// 会社カナ必須確認
	checkRequired(PRM_TXT_COMPANY_NAME , NAM_COMPANY_NAME , aryMessage );
	// レコード長必須確認
	checkRequired(PRM_TXT_RECORD_LENGTH, NAM_RECORD_LENGTH, aryMessage );
	// 種別コード数値確認
	checkNumeric(PRM_TXT_TYPE_CODE    , NAM_TYPE_CODE    , aryMessage );
	// 会社コード数値確認
	checkNumeric(PRM_TXT_COMPANY_CODE , NAM_COMPANY_CODE , aryMessage );
	// レコード長数値確認
	checkNumeric(PRM_TXT_RECORD_LENGTH, NAM_RECORD_LENGTH, aryMessage );
	// 最大数確認
	checkNumLength(PRM_TXT_RECORD_LENGTH, MAX_RECORD_LENGTH, NAM_RECORD_LENGTH, aryMessage);
	// 最小数確認
	checkNumMinLength(PRM_TXT_RECORD_LENGTH, MIN_RECORD_LENGTH, NAM_RECORD_LENGTH, aryMessage);
	if (aryMessage.length == 0) {
		return true;
	} else {
		showMessage(aryMessage);
		return false;
	}
}


/**
 * 数確認
 * @param target     確認対象(StringあるいはObject)
 * @param numLength  確認対象オブジェクト桁数
 * @param rep        変換文字列
 * @param aryMessage エラーメッセージ格納配列
 * @return 無し
 * @throws 実行時例外
 */
function checkNumLength(target, numLength, rep, aryMessage) {
	var numTargetLength = getFormValue(target);
	if (numLength < numTargetLength) {
		if (aryMessage.length == 0) {
			setFocus(target);
			setMessage("WC0004", rep + ","  + numLength);
		}
		setBgColor(target, COLOR_FIELD_ERROR);
		aryMessage.push(getMessage("WC0004", rep + SEPARATOR_MESSAGE + numLength));
	}
}

/**
 * 数確認(最低数)
 * @param target     確認対象(StringあるいはObject)
 * @param numLength  確認対象オブジェクト桁数
 * @param rep        変換文字列
 * @param aryMessage エラーメッセージ格納配列
 * @return 無し
 * @throws 実行時例外
 */
function checkNumMinLength(target, numLength, rep, aryMessage) {
	var numTargetLength = getFormValue(target);
	if (Number(numLength) > Number(numTargetLength)) {
		if (aryMessage.length == 0) {
			setFocus(target);
			setMessage("WC0010", rep + ","  + numLength);
		}
		setBgColor(target, COLOR_FIELD_ERROR);
		aryMessage.push(getMessage("WC0010", rep + SEPARATOR_MESSAGE + numLength));
	}
}
