// JavaScript Document

/*
 * Script: entry.js
 *		入力関連チェック
 *
 * Property:
 *	_js_popAlert		- アラート表示
 *	_js_checkOptionBtn	- ラジオ／オプション 選択チェック
 *	_js_checkListBox	- リスト 選択チェック
 *	_js_checkName		- 名前が全角文字列で入力されているかのチャックをおこなう
 *	_js_checkNameKana	- フリガナ（名前）が全角カナ文字列で入力されているかのチャックをおこなう
 *	_js_checkMail		- メールアドレスのフォーマットかのチャックをおこなう
 *	_js_checkComment	- コメントのチャックをおこなう
 *	_js_checkAge		- 年齢のチャックをおこなう
 *	_js_checkTel		- 電話番号のチャックをおこなう
 *	_js_checkZip		- 郵便番号のチャックをおこなう
 *	_js_checkAddress	- 住所のチャックをおこなう
 *	_js_checkDate		- 日付のチャックをおこなう
 *	_js_checkDateSpan	- 日付期間のチャックをおこなう
 *	_js_checkSchool		- 学校のチェックをおこなう
 *	_js_checkCard		- カードデザインのチェックをおこなう
 *	_js_checkSex		- 性別のチェックをおこなう
 *
 */


/*
 * Function: _js_popAlert
 *		アラート表示
 * 
 * Arguments:
 *	obj		- 対象のオブジェクト
 *	msg		- メッセージ
 *	msgf	- エラーメッセージを表示するかのフラグ
 *
 * Returns:
 *	false
 */
function _js_popAlert(obj, msg, msgf,noSelect) {

	if(!msgf) return false;
	if(!arguments[3]) noSelect  = false;

	alert(msg);
	if(!noSelect) {
		obj.focus();
		obj.select();
	}
	return false;
}

/*
 * Function: _js_checkOptionBtn
 *		ラジオ／オプション 選択チェック
 * 
 * Arguments:
 *	obj		- 対象のオブジェクト
 *
 * Returns:
 *	true/false
 */
function _js_checkOptionBtn(obj) {

	for(var i=0; i < obj.length; i++) {
		if(obj[i].checked) return true;
	}
	return false;
}

/*
 * Function: _js_checkListBox
 *		リスト 選択チェック
 * 
 * Arguments:
 *	obj		- 対象のオブジェクト
 *
 * Returns:
 *	true/false
 */
function _js_checkListBox(obj) {

	for (var i=0; i<obj.length; i++) {
		if (obj.options[i].selected && obj.options[i].value.length > 0) return true;
	}
	return false;
}


/*
 * Function: _js_checkName
 *		名前が全角文字列で入力されているかのチャックをおこなう
 * 
 * Arguments:
 *	objL	- 姓のオブジェクト
 *	objF	- 名のオブジェクト
 *	len		- 各バイト数
 *	reqf	- 必須フラグ
 *	msgf	- エラーメッセージを表示するかのフラグ
 *
 * Returns:
 *	true/false
 */
function _js_checkName(objL,objF,len,reqf,msgf) {

	/*
	 * 必須チェック
	 */
	if(reqf && !objL.value.isInput()) {
		return _js_popAlert(objL,"名前：姓 は必須入力項目となっております。\n入力をお願いします。",msgf);
	}
	if(reqf && !objF.value.isInput()) {
		return _js_popAlert(objF,"名前：名 は必須入力項目となっております。\n入力をお願いします。",msgf);
	}

	if(!reqf && objL.value.isInput() &&  !objF.value.isInput()) {
		return _js_popAlert(objF,"名前：名 の入力をお願いします。",msgf);
	}
	if(!reqf && !objL.value.isInput() &&  objF.value.isInput()) {
		return _js_popAlert(objL,"名前：姓 の入力をお願いします。",msgf);
	}

	/*
	 * 全角文字列チェック
	 */
	if(objL.value.isInput() && objF.value.isInput()) {
		if(!objL.value.isZen()) {
			return _js_popAlert(objL,"名前：姓 は全角文字で入力をお願いします。",msgf);
		}
		if(!objF.value.isZen()) {
			return _js_popAlert(objF,"名前：名 は全角文字で入力をお願いします。",msgf);
		}
	}

	/*
	 * バイト数チェック
	 */
	if(objL.value.getByteLength() > len) {
		return _js_popAlert(objL,"名前：姓 は文字数が多すぎます。",msgf);
	}
	if(objF.value.getByteLength() > len) {
		return _js_popAlert(objF,"名前：名 は文字数が多すぎます。",msgf);
	}

	return true;
}

/*
 * Function: _js_checkNameKana
 *		フリガナ（名前）が全角カナ文字列で入力されているかのチャックをおこなう
 * 
 * Arguments:
 *	objL	- 姓のオブジェクト
 *	objF	- 名のオブジェクト
 *	len		- 各バイト数
 *	reqf	- 必須フラグ
 *	msgf	- エラーメッセージを表示するかのフラグ
 *
 * Returns:
 *	true/false
 */
function _js_checkNameKana(objL,objF,len,reqf,msgf) {

	/*
	 * 必須チェック
	 */
	if(reqf && !objL.value.isInput()) {
		return _js_popAlert(objL,"フリガナ：姓 は必須入力項目となっております。\n入力をお願いします。",msgf);
	}
	if(reqf && !objF.value.isInput()) {
		return _js_popAlert(objF,"フリガナ：名 は必須入力項目となっております。\n入力をお願いします。",msgf);
	}

	if(!reqf && objL.value.isInput() &&  !objF.value.isInput()) {
		return _js_popAlert(objF,"フリガナ：名 の入力をお願いします。",msgf);
	}
	if(!reqf && !objL.value.isInput() &&  objF.value.isInput()) {
		return _js_popAlert(objL,"フリガナ：姓 の入力をお願いします。",msgf);
	}

	/*
	 * 全角カナ文字列チェック
	 */
	if(objL.value.isInput() && objF.value.isInput()) {
		if(!objL.value.isZenKana()) {
			return _js_popAlert(objL,"フリガナ：姓 は全角カナ文字で入力をお願いします。",msgf);
		}
		if(!objF.value.isZenKana()) {
			return _js_popAlert(objF,"フリガナ：名 は全角カナ文字で入力をお願いします。",msgf);
		}
	}

	/*
	 * バイト数チェック
	 */
	if(objL.value.getByteLength() > len) {
		return _js_popAlert(objL,"フリガナ：姓 は文字数が多すぎます。",msgf);
	}
	if(objF.value.getByteLength() > len) {
		return _js_popAlert(objF,"フリガナ：名 は文字数が多すぎます。",msgf);
	}

	return true;
}

/*
 * Function: _js_checkMail
 *		メールアドレスのフォーマットかのチャックをおこなう
 * 
 * Arguments:
 *	obj		- メールアドレスのオブジェクト
 *	len		- バイト数
 *	reqf	- 必須フラグ
 *	msgf	- エラーメッセージを表示するかのフラグ
 *
 * Returns:
 *	true/false
 */
function _js_checkMail(obj,len,reqf,msgf) {

	/*
	 * 必須チェック
	 */
	if(reqf && !obj.value.isInput()) {
		return _js_popAlert(obj,"メールアドレスは必須入力項目となっております。\n入力をお願いします。",msgf);
	}

	/*
	 * フォーマットチェック
	 */
	if(obj.value.isInput()) {
		if(!obj.value.isMailFormat()) {
			return _js_popAlert(obj,"正しいメールアドレス形式で入力をお願いします。",msgf);
		}
	}

	/*
	 * バイト数チェック
	 */
	if(obj.value.getByteLength() > len) {
		return _js_popAlert(obj,"メールアドレスは文字数が多すぎます。",msgf);
	}
	return true;
}

/*
 * Function: _js_checkComment
 *		コメントのチャックをおこなう
 * 
 * Arguments:
 *	obj		- コメントのオブジェクト
 *	len		- バイト数
 *	reqf	- 必須フラグ
 *	msgf	- エラーメッセージを表示するかのフラグ
 *
 * Returns:
 *	true/false
 */
function _js_checkComment(obj,len,reqf,msgf) {
	/*
	 * 必須チェック
	 */
	if(reqf && !obj.value.isInput()) {
		return _js_popAlert(obj,"コメントは必須入力項目となっております。\n入力をお願いします。",msgf);
	}

	/*
	 * バイト数チェック
	 */
	if(obj.value.getByteLength() > len) {
		return _js_popAlert(obj,"コメントは文字数が多すぎます。",msgf);
	}

	return true;
}

/*
 * Function: _js_checkAge
 *		年齢のチャックをおこなう
 * 
 * Arguments:
 *	obj		- 年齢のオブジェクト
 *	reqf	- 必須フラグ
 *	msgf	- エラーメッセージを表示するかのフラグ
 *
 * Returns:
 *	true/false
 */
function _js_checkAge(obj,reqf,msgf) {
	/*
	 * 必須チェック
	 */
	if(reqf && !obj.value.isInput()) {
		return _js_popAlert(obj,"年齢は必須入力項目となっております。\n大まかで結構ですので入力をお願いします。",msgf);
	}

	if(obj.value.isInput()) {

		/*
		 * 数字かのチェック
		 */
		if(obj.value.isNumStr()) {
			return _js_popAlert(obj,"年齢は数字で入力をお願いします。",msgf);
		}
	}

	return true;
}


/*
 * Function: _js_checkTel
 *		電話番号のチャックをおこなう
 * 
 * Arguments:
 *	obj1	- 市外局番のオブジェクト
 *	obj2	- 局番のオブジェクト
 *	obj3	- 番号のオブジェクト
 *	reqf	- 必須フラグ
 *	msgf	- エラーメッセージを表示するかのフラグ
 *
 * Returns:
 *	true/false
 */
function _js_checkTel(obj1,obj2,obj3,reqf,msgf) {
	/*
	 * 必須チェック
	 */
	if(reqf && !obj1.value.isInput()) {
		return _js_popAlert(obj1,"電話番号は必須入力項目となっております。\n入力をお願いします。",msgf);
	}
	if(reqf && !obj2.value.isInput()) {
		return _js_popAlert(obj2,"電話番号は必須入力項目となっております。\n入力をお願いします。",msgf);
	}
	if(reqf && !obj3.value.isInput()) {
		return _js_popAlert(obj3,"電話番号は必須入力項目となっております。\n入力をお願いします。",msgf);
	}

	if(!reqf && obj1.value.isInput() &&  !obj2.value.isInput() && obj3.value.isInput()) {
		return _js_popAlert(obj2,"電話番号の入力をお願いします。",msgf);
	}
	if(!reqf && obj1.value.isInput() &&  obj2.value.isInput() && !obj3.value.isInput()) {
		return _js_popAlert(obj3,"電話番号の入力をお願いします。",msgf);
	}
	if(!reqf && obj1.value.isInput() &&  !obj2.value.isInput() && !obj3.value.isInput()) {
		return _js_popAlert(obj2,"電話番号の入力をお願いします。",msgf);
	}

	if(!reqf && !obj1.value.isInput() &&  obj2.value.isInput() && !obj3.value.isInput()) {
		return _js_popAlert(obj1,"電話番号の入力をお願いします。",msgf);
	}
	if(!reqf && !obj1.value.isInput() &&  obj2.value.isInput() && obj3.value.isInput()) {
		return _js_popAlert(obj1,"電話番号の入力をお願いします。",msgf);
	}
	if(!reqf && !obj1.value.isInput() &&  !obj2.value.isInput() && obj3.value.isInput()) {
		return _js_popAlert(obj1,"電話番号の入力をお願いします。",msgf);
	}


	if(obj1.value.isInput() && obj2.value.isInput() && obj3.value.isInput()) {

		/*
		 * 数字かのチェック
		 */
		if(obj1.value.isNumStr()) {
			return _js_popAlert(obj1,"電話番号は数字で入力をお願いします。",msgf);
		}
		if(obj2.value.isNumStr()) {
			return _js_popAlert(obj2,"電話番号は数字で入力をお願いします。",msgf);
		}
		if(obj3.value.isNumStr()) {
			return _js_popAlert(obj3,"電話番号は数字で入力をお願いします。",msgf);
		}

		/*
		 * フォーマットのチェック
		 */
		var wk = obj1.value + "-" + obj2.value + "-" + obj3.value;
		if(!wk.match(/^\d{2,5}-\d{1,4}-\d{4}$/)) {
			return _js_popAlert(obj1,"正しい電話番号の入力をお願いします。",msgf);
		}
	}

	return true;
}

/*
 * Function: _js_checkZip
 *		郵便番号のチャックをおこなう
 * 
 * Arguments:
 *	obj1	- 郵便番号（3桁）のオブジェクト
 *	obj2	- 郵便番号（4桁）のオブジェクト
 *	reqf	- 必須フラグ
 *	msgf	- エラーメッセージを表示するかのフラグ
 *
 * Returns:
 *	true/false
 */
function _js_checkZip(obj1,obj2,reqf,msgf) {
	/*
	 * 必須チェック
	 */
	if(reqf && !obj1.value.isInput()) {
		return _js_popAlert(obj1,"郵便番号は必須入力項目となっております。\n入力をお願いします。",msgf);
	}
	if(reqf && !obj2.value.isInput()) {
		return _js_popAlert(obj2,"郵便番号は必須入力項目となっております。\n入力をお願いします。",msgf);
	}

	if(!reqf && obj1.value.isInput() &&  !obj2.value.isInput()) {
		return _js_popAlert(obj2,"郵便番号の入力をお願いします。",msgf);
	}
	if(!reqf && !obj1.value.isInput() &&  obj2.value.isInput()) {
		return _js_popAlert(obj1,"郵便番号の入力をお願いします。",msgf);
	}

	if(obj1.value.isInput() && obj2.value.isInput()) {

		/*
		 * 数字かのチェック
		 */
		if(obj1.value.isNumStr()) {
			return _js_popAlert(obj1,"郵便番号は数字で入力をお願いします。",msgf);
		}
		if(obj2.value.isNumStr()) {
			return _js_popAlert(obj2,"郵便番号は数字で入力をお願いします。",msgf);
		}

		/*
		 * フォーマットのチェック
		 */
		var wk = obj1.value + "-" + obj2.value;
		if(!wk.match(/^\d{3}-\d{4}$/)) {
			return _js_popAlert(obj1,"正しい郵便番号の入力をお願いします。",msgf);
		}
	}

	return true;
}

/*
 * Function: _js_checkAddress
 *		住所のチャックをおこなう
 * 
 * Arguments:
 *	obj1	- 住所（県）のオブジェクト
 *	obj2	- 住所１のオブジェクト
 *	obj3	- 住所２のオブジェクト
 *	reqf	- 必須フラグ
 *	msgf	- エラーメッセージを表示するかのフラグ
 *
 * Returns:
 *	true/false
 */
function _js_checkAddress(obj1,obj2,obj3,reqf,msgf) {
	/*
	 * 必須チェック
	 */
	if(reqf && !obj2.value.isInput()) {
		return _js_popAlert(obj2,"住所は必須入力項目となっております。\n入力をお願いします。",msgf);
	}

	if(!obj2.value.isInput() && obj3.value.isInput()) {
		return _js_popAlert(obj2,"住所の入力をお願いします。",msgf);
	}

	return true;
}

/*
 * Function: _js_checkDate
 *		日付のチャックをおこなう
 * 
 * Arguments:
 *	objY	- 年のオブジェクト
 *	objM	- 月のオブジェクト
 *	objD	- 日のオブジェクト
 *	reqf	- 必須フラグ
 *	msgf	- エラーメッセージを表示するかのフラグ
 *
 * Returns:
 *	true/false
 */
function _js_checkDate(objY,objM,objD,reqf,msgf) {

	if(!reqf && !objY.value.isInput() && !objM.value.isInput() &&  !objD.value.isInput()) return true;

	/*
	 * 必須チェック
	 */
	if(reqf && !objY.value.isInput()) {
		return _js_popAlert(objY,"日付は必須入力項目となっております。\n入力をお願いします。",msgf);
	}
	if(reqf && !objM.value.isInput()) {
		return _js_popAlert(objM,"日付は必須入力項目となっております。\n入力をお願いします。",msgf);
	}
	if(reqf && !objD.value.isInput()) {
		return _js_popAlert(objD,"日付は必須入力項目となっております。\n入力をお願いします。",msgf);
	}

	if(!reqf && objY.value.isInput() &&  !objM.value.isInput() && objD.value.isInput()) {
		return _js_popAlert(objM,"日付の入力をお願いします。",msgf);
	}
	if(!reqf && objY.value.isInput() &&  objM.value.isInput() && !objD.value.isInput()) {
		return _js_popAlert(objD,"日付の入力をお願いします。",msgf);
	}
	if(!reqf && objY.value.isInput() &&  !objM.value.isInput() && !objD.value.isInput()) {
		return _js_popAlert(objM,"日付の入力をお願いします。",msgf);
	}

	if(!reqf && !objY.value.isInput() &&  objM.value.isInput() && !objD.value.isInput()) {
		return _js_popAlert(objY,"日付の入力をお願いします。",msgf);
	}
	if(!reqf && !objY.value.isInput() &&  objM.value.isInput() && objD.value.isInput()) {
		return _js_popAlert(objY,"日付の入力をお願いします。。",msgf);
	}
	if(!reqf && !objY.value.isInput() &&  !objM.value.isInput() && objD.value.isInput()) {
		return _js_popAlert(objY,"日付の入力をお願いします。。",msgf);
	}

	/*
	 * 日付の妥当性チェック
	 */
	var vYear	= objY.value - 0;
    var vMonth	= objM.value - 1; // Javascriptは、0-11で表現
    var vDay	= objD.value - 0;

   	// 月,日の妥当性チェック 
    if(vMonth >= 0 && vMonth <= 11 && vDay >= 1 && vDay <= 31) {
        var vDt = new Date(vYear, vMonth, vDay);
        if(isNaN(vDt)) {
            return false;
   	    } else if(vDt.getFullYear() == vYear && vDt.getMonth() == vMonth && vDt.getDate() == vDay) {
			return true;
   	    }else{ 
			return _js_popAlert(objY,"正しい日付の入力をお願いします。",msgf);
        } 
   	}else { 
		return _js_popAlert(objY,"正しい日付の入力をお願いします。",msgf);
    }

	return true;
}

/*
 * Function: _js_checkDateSpan
 *		日付期間のチャックをおこなう
 * 
 * Arguments:
 *	objFY	- 年（From）のオブジェクト
 *	objFM	- 月（From）のオブジェクト
 *	objFD	- 日（From）のオブジェクト
 *	objTY	- 年（To）のオブジェクト
 *	objTM	- 月（To）のオブジェクト
 *	objTD	- 日（To）のオブジェクト
 *	reqf	- 必須フラグ
 *	msgf	- エラーメッセージを表示するかのフラグ
 *
 * Returns:
 *	true/false
 */
function _js_checkDateSpan(objFY,objFM,objFD,objTY,objTM,objTD,reqf,msgf) {

	if(!reqf && !objFY.value.isInput() && !objTY.value.isInput()) {
		return true;
	}

	/*
	 * 必須チェック
	 */
	if(reqf && objFY.value.isInput() && !objTY.value.isInput()) {
		return _js_popAlert(objTY,"日付は必須入力項目となっております。\n入力をお願いします。",msgf);
	}

	if(reqf && !objFY.value.isInput() && objTY.value.isInput()) {
		return _js_popAlert(objFY,"日付は必須入力項目となっております。\n入力をお願いします。",msgf);
	}

	if(!reqf && objFY.value.isInput() &&  !objTY.value.isInput()) {
		return _js_popAlert(objTY,"日付の入力をお願いします。",msgf);
	}
	if(!reqf && !objFY.value.isInput() &&  objTY.value.isInput()) {
		return _js_popAlert(obFY,"日付の入力をお願いします。",msgf);
	}

	var vToday	= new Date();
	var vFrom	= new Date(objFY.value - 0,objFM.value - 1,objFD.value - 0);
	var vTo		= new Date(objTY.value - 0,objTM.value - 1,objTD.value - 0);

	var	span = vFrom.getTime() - vToday.getTime();
	span = Math.floor(span /(1000 * 60 * 60 * 24));
	if(span < 0){
		return _js_popAlert(objFY,"過去の日付は指定できません。\n正しい日付の入力をお願いします。",msgf);
	}
	span = vTo.getTime() - vFrom.getTime();
	span = Math.floor(span /(1000 * 60 * 60 * 24));
	if(span < 0){
		return _js_popAlert(objTY,"過去の日付は指定できません。\n正しい日付の入力をお願いします。",msgf);
	} else {
		return true;
	}
}

/*
 * Function: _js_checkSchool
 *		学校のチェックをおこなう
 * 
 * Arguments:
 *	obj		- 学校名のオブジェクト
 *	objYear	- 学年のオブジェクト
 *	reqf	- 必須フラグ
 *	msgf	- エラーメッセージを表示するかのフラグ
 *
 * Returns:
 *	true/false
 */
function _js_checkSchool(obj,objYear,reqf,msgf) {
	/*
	 * 必須チェック
	 */
	if(reqf && !obj.value.isInput()) {
		return _js_popAlert(obj,"学校名は必須入力項目となっております。\n入力をお願いします。",msgf);
	}
	if(reqf && !objYear.value.isInput()) {
		return _js_popAlert(objYear,"学年は必須入力項目となっております。\n入力をお願いします。",msgf);
	}

	if(!reqf && obj.value.isInput() && !objYear.value.isInput()) {
		return _js_popAlert(objYear,"学年の入力をお願いします。",msgf);
	}
	if(!reqf && !obj.value.isInput() && objYear.value.isInput()) {
		return _js_popAlert(obj,"学校名の入力をお願いします。",msgf);
	}

	/*
	 * 全角文字列チェック
	 */
	if(obj.value.isInput()) {
		if(!obj.value.isZen()) {
			return _js_popAlert(obj,"学校名は全角文字で入力をお願いします。",msgf);
		}
	}

	/*
	 * 数字かのチェック
	 */
	if(objYear.value.isInput()) {
		if(objYear.value.isNumStr()) {
			return _js_popAlert(objYear,"学年は数字で入力をお願いします。",msgf);
		}
		if(objYear.value.s2Num() <= 0) {
			return _js_popAlert(objYear,"正しい学年の入力をお願いします。",msgf);
		}
	}
	return true;
}

/*
 * Function: _js_checkCard
 *		カードデザインのチェックをおこなう
 * 
 * Arguments:
 *	obj		- 対象のオブジェクト
 *	reqf	- 必須フラグ
 *	msgf	- エラーメッセージを表示するかのフラグ
 *
 * Returns:
 *	true/false
 */
function _js_checkCard(obj,reqf,msgf) {

	/*
	 * 必須チェック
	 */
	if(reqf && !_js_checkOptionBtn(obj)) {
		return _js_popAlert(obj,"カードデザインは必須入力項目となっております。\n選択をお願いします。",msgf,true);
	}
	return true;
}

/*
 * Function: _js_checkSex
 *		性別のチェックをおこなう
 * 
 * Arguments:
 *	obj		- 対象のオブジェクト
 *	reqf	- 必須フラグ
 *	msgf	- エラーメッセージを表示するかのフラグ
 *
 * Returns:
 *	true/false
 */
function _js_checkSex(obj,reqf,msgf) {

	/*
	 * 必須チェック
	 */
	if(reqf && !_js_checkOptionBtn(obj)) {
		return _js_popAlert(obj,"性別は必須入力項目となっております。\n選択をお願いします。",msgf,true);
	}
	return true;
}

